diff --git a/.editorconfig b/.editorconfig new file mode 100755 index 00000000..9a3e06f4 --- /dev/null +++ b/.editorconfig @@ -0,0 +1,8 @@ +root = true + +[{src, translations}/*] +end_of_line = crlf +insert_final_newline = true +indent_style = space +indent_size = 4 +charset = utf-8 \ No newline at end of file diff --git a/.github/workflows/ci.yml b/.github/workflows/ci.yml index e6063e3e..40053d64 100644 --- a/.github/workflows/ci.yml +++ b/.github/workflows/ci.yml @@ -35,19 +35,23 @@ jobs: cd gulp/ yarn cd .. - - name: Lint run: | yarn lint - - - name: YAML Lint - uses: ibiqlik/action-yamllint@v1.0.0 - with: - file_or_dir: translations/*.yaml - - name: TSLint run: | cd gulp yarn gulp translations.fullBuild cd .. yarn tslint + + yaml-lint: + name: yaml-lint + runs-on: ubuntu-latest + steps: + - name: Checkout repo + uses: actions/checkout@v2 + - name: YAML Lint + uses: ibiqlik/action-yamllint@v1.0.0 + with: + file_or_dir: translations/*.yaml diff --git a/.gitignore b/.gitignore index 46dc1fd1..a0e08a62 100644 --- a/.gitignore +++ b/.gitignore @@ -15,34 +15,11 @@ pids *.seed *.pid.lock -# Directory for instrumented libs generated by jscoverage/JSCover -lib-cov - -# Coverage directory used by tools like istanbul -coverage -*.lcov - -# nyc test coverage -.nyc_output - -# Grunt intermediate storage (https://gruntjs.com/creating-plugins#storing-task-files) -.grunt - -# Bower dependency directory (https://bower.io/) -bower_components - -# node-waf configuration -.lock-wscript - # Compiled binary addons (https://nodejs.org/api/addons.html) build/Release # Dependency directories node_modules/ -jspm_packages/ - -# TypeScript v1 declaration files -typings/ # TypeScript cache *.tsbuildinfo @@ -53,18 +30,9 @@ typings/ # Optional eslint cache .eslintcache -# Microbundle cache -.rpt2_cache/ -.rts2_cache_cjs/ -.rts2_cache_es/ -.rts2_cache_umd/ - # Optional REPL history .node_repl_history -# Output of 'npm pack' -*.tgz - # Yarn Integrity file .yarn-integrity @@ -72,41 +40,11 @@ typings/ .env .env.test -# parcel-bundler cache (https://parceljs.org/) -.cache - -# Next.js build output -.next - -# Nuxt.js build / generate output -.nuxt -dist - -# Gatsby files -.cache/ -# Comment in the public line in if your project uses Gatsby and *not* Next.js -# https://nextjs.org/blog/next-9-1#public-directory-support -# public - -# vuepress build output -.vuepress/dist - -# Serverless directories -.serverless/ - -# FuseBox cache -.fusebox/ - -# DynamoDB Local files -.dynamodb/ - -# TernJS port file -.tern-port - - # Buildfiles build +res_built +gulp/runnable-texturepacker.jar tmp_standalone_files # Local config diff --git a/.yamllint b/.yamllint index 98e73204..bb79d866 100644 --- a/.yamllint +++ b/.yamllint @@ -4,3 +4,4 @@ rules: line-length: level: warning max: 200 + document-start: disable diff --git a/Dockerfile b/Dockerfile new file mode 100644 index 00000000..61d54684 --- /dev/null +++ b/Dockerfile @@ -0,0 +1,31 @@ +FROM node:12 as base + +EXPOSE 3001 3005 + +WORKDIR /shapez.io + +RUN apt-get update && apt-get install -y --no-install-recommends \ + ffmpeg default-jre \ + && apt-get clean \ + && rm -rf /var/lib/apt/lists/* + +COPY package.json yarn.lock ./ +RUN yarn + +COPY gulp ./gulp +WORKDIR /shapez.io/gulp +RUN yarn + +WORKDIR /shapez.io +COPY res ./res +COPY src/html ./src/html +COPY src/css ./src/css +COPY version ./version +COPY sync-translations.js ./ +COPY translations ./translations +COPY src/js ./src/js +COPY res_raw ./res_raw +COPY .git ./.git + +WORKDIR /shapez.io/gulp +ENTRYPOINT ["yarn", "gulp"] diff --git a/README.md b/README.md index 5232e625..00e57ecc 100644 --- a/README.md +++ b/README.md @@ -24,11 +24,12 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts - Make sure `ffmpeg` is on your path - Install Node.js and Yarn +- Install Java (required for textures) - Run `yarn` in the root folder - Cd into `gulp` folder - Run `yarn` and then `yarn gulp` - it should now open in your browser -**Notice**: This will produce a debug build with several debugging flags enabled. If you want to disable them, modify `config.js`. +**Notice**: This will produce a debug build with several debugging flags enabled. If you want to disable them, modify [`src/js/core/config.js`](src/js/core/config.js). ## Helping translate @@ -114,8 +115,8 @@ This is a quick checklist, if a new building is added this points should be fulf ### Assets -For most assets I use Adobe Photoshop, you can find them in `assets/`. +For most assets I use Adobe Photoshop, you can find them here. -You will need a Texture Packer license in order to regenerate the atlas. If you don't have one but want to contribute assets, let me know and I might compile it for you. I'm currently switching to an open source solution but I can't give an estimate when that's done. +All assets will be automatically rebuilt into the atlas once changed (Thanks to dengr1065!) shapez.io Screenshot diff --git a/artwork/README.md b/artwork/README.md deleted file mode 100644 index dab59a98..00000000 --- a/artwork/README.md +++ /dev/null @@ -1,3 +0,0 @@ -The artwork can be found here: - -https://github.com/tobspr/shapez.io-artwork diff --git a/electron/package.json b/electron/package.json index a67249a0..c8d3a124 100644 --- a/electron/package.json +++ b/electron/package.json @@ -1,16 +1,16 @@ -{ - "name": "electron", - "version": "1.0.0", - "main": "index.js", - "license": "MIT", - "private": true, - "scripts": { - "startDev": "electron --disable-direct-composition --in-process-gpu . --dev --local", - "startDevGpu": "electron --enable-gpu-rasterization --enable-accelerated-2d-canvas --num-raster-threads=8 --enable-zero-copy . --dev --local", - "start": "electron --disable-direct-composition --in-process-gpu ." - }, - "devDependencies": { - "electron": "^6.1.12" - }, - "dependencies": {} -} +{ + "name": "electron", + "version": "1.0.0", + "main": "index.js", + "license": "MIT", + "private": true, + "scripts": { + "startDev": "electron --disable-direct-composition --in-process-gpu . --dev --local", + "startDevGpu": "electron --enable-gpu-rasterization --enable-accelerated-2d-canvas --num-raster-threads=8 --enable-zero-copy . --dev --local", + "start": "electron --disable-direct-composition --in-process-gpu ." + }, + "devDependencies": { + "electron": "10.1.3" + }, + "dependencies": {} +} diff --git a/electron/yarn.lock b/electron/yarn.lock index 01214c92..fa92ec46 100644 --- a/electron/yarn.lock +++ b/electron/yarn.lock @@ -1,961 +1,572 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@types/node@^10.12.18": - version "10.17.24" - resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.24.tgz#c57511e3a19c4b5e9692bb2995c40a3a52167944" - integrity sha512-5SCfvCxV74kzR3uWgTYiGxrd69TbT1I6+cMx1A5kEly/IVveJBimtAMlXiEyVFn5DvUFewQWxOOiJhlxeQwxgA== - -ajv@^6.5.5: - version "6.12.2" - resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.2.tgz#c629c5eced17baf314437918d2da88c99d5958cd" - integrity sha512-k+V+hzjm5q/Mr8ef/1Y9goCmlsK4I6Sm74teeyGvFk1XrOsbsKLjEdrvny42CZ+a8sXbk8KWpY/bDwS+FLL2UQ== - 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" - -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= - -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" - integrity sha1-3wEKoSh+Fku9pvlyOwqWoexBh6E= - -asn1@~0.2.3: - version "0.2.4" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.4.tgz#8d2475dfab553bb33e77b54e59e880bb8ce23136" - integrity sha512-jxwzQpLQjSmWXgwaCZE9Nz+glAG01yF1QnWgbhGwHI5A6FRIEY6IVqtHhIepHqI7/kyEyQEagBC5mBEFlIYvdg== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha1-8S4PPF13sLHN2RRpQuTpbB5N1SU= - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha1-x57Zf380y48robyXkLzDZkdLS3k= - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha1-tG6JCTSpWR8tL2+G1+ap8bP+dqg= - -aws4@^1.8.0: - version "1.9.1" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.9.1.tgz#7e33d8f7d449b3f673cd72deb9abdc552dbe528e" - integrity sha512-wMHVg2EOHaMRxbzgFJ9gtjOOCrI80OHLG14rxi28XwOW8ux6IiEbRCGGGqCtdAIg4FQCbW20k9RsT4y3gJlFug== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha1-pDAdOJtqQ/m2f/PKEaP2Y342Dp4= - dependencies: - tweetnacl "^0.14.3" - -buffer-from@^1.0.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" - integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== - -camelcase-keys@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/camelcase-keys/-/camelcase-keys-2.1.0.tgz#308beeaffdf28119051efa1d932213c91b8f92e7" - integrity sha1-MIvur/3ygRkFHvodkyITyRuPkuc= - dependencies: - camelcase "^2.0.0" - map-obj "^1.0.0" - -camelcase@^2.0.0: - version "2.1.1" - resolved "https://registry.yarnpkg.com/camelcase/-/camelcase-2.1.1.tgz#7c1d16d679a1bbe59ca02cacecfb011e201f5a1f" - integrity sha1-fB0W1nmhu+WcoCys7PsBHiAfWh8= - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha1-G2gcIf+EAzyCZUMJBolCDRhxUdw= - -code-point-at@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/code-point-at/-/code-point-at-1.1.0.tgz#0d070b4d043a5bea33a2f1a40e2edb3d9a4ccf77" - integrity sha1-DQcLTQQ6W+ozovGkDi7bPZpMz3c= - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -concat-stream@1.6.2: - version "1.6.2" - resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" - integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== - dependencies: - buffer-from "^1.0.0" - inherits "^2.0.3" - readable-stream "^2.2.2" - typedarray "^0.0.6" - -core-util-is@1.0.2, core-util-is@~1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= - -currently-unhandled@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/currently-unhandled/-/currently-unhandled-0.4.1.tgz#988df33feab191ef799a61369dd76c17adf957ea" - integrity sha1-mI3zP+qxke95mmE2nddsF635V+o= - dependencies: - array-find-index "^1.0.1" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha1-hTz6D3y+L+1d4gMmuN1YEDX24vA= - dependencies: - assert-plus "^1.0.0" - -debug@2.6.9, debug@^2.1.3, debug@^2.2.0: - version "2.6.9" - resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" - integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== - dependencies: - ms "2.0.0" - -debug@^3.0.0: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - -decamelize@^1.1.2: - version "1.2.0" - resolved "https://registry.yarnpkg.com/decamelize/-/decamelize-1.2.0.tgz#f6534d15148269b20352e7bee26f501f9a191290" - integrity sha1-9lNNFRSCabIDUue+4m9QH5oZEpA= - -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha1-3zrhmayt+31ECqrgsp4icrJOxhk= - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha1-OoOpBOVDUyh4dMVkt1SThoSamMk= - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -electron-download@^4.1.0: - version "4.1.1" - resolved "https://registry.yarnpkg.com/electron-download/-/electron-download-4.1.1.tgz#02e69556705cc456e520f9e035556ed5a015ebe8" - integrity sha512-FjEWG9Jb/ppK/2zToP+U5dds114fM1ZOJqMAR4aXXL5CvyPE9fiqBK/9YcwC9poIFQTEJk/EM/zyRwziziRZrg== - dependencies: - debug "^3.0.0" - env-paths "^1.0.0" - fs-extra "^4.0.1" - minimist "^1.2.0" - nugget "^2.0.1" - path-exists "^3.0.0" - rc "^1.2.1" - semver "^5.4.1" - sumchecker "^2.0.2" - -electron@^6.1.12: - version "6.1.12" - resolved "https://registry.yarnpkg.com/electron/-/electron-6.1.12.tgz#a7aee6dfa75b57f32b3645ef8e14dcef6d5f31a9" - integrity sha512-RUPM8xJfTcm53V9EKMBhvpLu1+CQkmuvWDmVCypR5XbUG1OOrOLiKl0CqUZ9+tEDuOmC+DmzmJP2MZXScBU5IA== - dependencies: - "@types/node" "^10.12.18" - electron-download "^4.1.0" - extract-zip "^1.0.3" - -env-paths@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-1.0.0.tgz#4168133b42bb05c38a35b1ae4397c8298ab369e0" - integrity sha1-QWgTO0K7BcOKNbGuQ5fIKYqzaeA= - -error-ex@^1.2.0: - version "1.3.2" - resolved "https://registry.yarnpkg.com/error-ex/-/error-ex-1.3.2.tgz#b4ac40648107fdcdcfae242f428bea8a14d4f1bf" - integrity sha512-7dFHNmqeFSEt2ZBsCriorKnn3Z2pj+fd9kmI6QoWw4//DL+icEBfc0U7qJCisqrTsKTjw4fNFy2pW9OqStD84g== - dependencies: - is-arrayish "^0.2.1" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extract-zip@^1.0.3: - version "1.6.7" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" - integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= - dependencies: - concat-stream "1.6.2" - debug "2.6.9" - mkdirp "0.5.1" - yauzl "2.4.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha1-lpGEQOMEGnpBT4xS48V06zw+HgU= - -extsprintf@^1.2.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.0.tgz#e2689f8f356fad62cca65a3a91c5df5f9551692f" - integrity sha1-4mifjzVvrWLMplo6kcXfX5VRaS8= - -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== - -fast-json-stable-stringify@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/fast-json-stable-stringify/-/fast-json-stable-stringify-2.1.0.tgz#874bf69c6f404c2b5d99c481341399fd55892633" - integrity sha512-lhd/wF+Lk98HZoTCtlVraHtfh5XYijIjalXck7saUtuanSDyLMxnHhSXEDJqHxD7msR8D0uCmqlkwjCV8xvwHw== - -fd-slicer@~1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" - integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= - dependencies: - pend "~1.2.0" - -find-up@^1.0.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/find-up/-/find-up-1.1.2.tgz#6b2e9822b1a2ce0a60ab64d610eccad53cb24d0f" - integrity sha1-ay6YIrGizgpgq2TWEOzK1TyyTQ8= - dependencies: - path-exists "^2.0.0" - pinkie-promise "^2.0.0" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha1-+8cfDEGt6zf5bFd60e1C2P2sypE= - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -fs-extra@^4.0.1: - version "4.0.3" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-4.0.3.tgz#0d852122e5bc5beb453fb028e9c0c9bf36340c94" - integrity sha512-q6rbdDd1o2mAnQreO7YADIxf/Whx4AHBiRf6d+/cVT8h44ss+lHgxf1FemcqDnQt9X3ct4McHr+JMGlYSsK7Cg== - dependencies: - graceful-fs "^4.1.2" - jsonfile "^4.0.0" - universalify "^0.1.0" - -get-stdin@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/get-stdin/-/get-stdin-4.0.1.tgz#b968c6b0a04384324902e8bf1a5df32579a450fe" - integrity sha1-uWjGsKBDhDJJAui/Gl3zJXmkUP4= - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha1-Xv+OPmhNVprkyysSgmBOi6YhSfo= - dependencies: - assert-plus "^1.0.0" - -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-fs@^4.1.6: - version "4.2.2" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" - integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== - -har-schema@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/har-schema/-/har-schema-2.0.0.tgz#a94c2224ebcac04782a0d9035521f24735b7ec92" - integrity sha1-qUwiJOvKwEeCoNkDVSHyRzW37JI= - -har-validator@~5.1.3: - version "5.1.3" - resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.3.tgz#1ef89ebd3e4996557675eed9893110dc350fa080" - integrity sha512-sNvOCzEQNr/qrvJgc3UG/kD4QtlHycrzwS+6mfTrrSq97BvaYcPZZI1ZSqGSPR73Cxn4LKTD4PttRwfU7jWq5g== - dependencies: - ajv "^6.5.5" - har-schema "^2.0.0" - -hosted-git-info@^2.1.4: - version "2.8.8" - resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.8.tgz#7539bd4bc1e0e0a895815a2e0262420b12858488" - integrity sha512-f/wzC2QaWBs7t9IYqB4T3sR1xviIViXJRJTWBlx2Gf3g0Xi5vI7Yy4koXQ1c9OYDGHN9sBy1DQ2AB8fqZBWhUg== - -http-signature@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.2.0.tgz#9aecd925114772f3d95b65a60abb8f7c18fbace1" - integrity sha1-muzZJRFHcvPZW2WmCruPfBj7rOE= - dependencies: - assert-plus "^1.0.0" - jsprim "^1.2.2" - sshpk "^1.7.0" - -indent-string@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" - integrity sha1-ji1INIdCEhtKghi3oTfppSBJ3IA= - dependencies: - repeating "^2.0.0" - -inherits@^2.0.3, 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== - -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - -is-arrayish@^0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-arrayish/-/is-arrayish-0.2.1.tgz#77c99840527aa8ecb1a8ba697b80645a7a926a9d" - integrity sha1-d8mYQFJ6qOyxqLppe4BkWnqSap0= - -is-finite@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/is-finite/-/is-finite-1.1.0.tgz#904135c77fb42c0641d6aa1bcdbc4daa8da082f3" - integrity sha512-cdyMtqX/BOqqNBBiKlIVkytNHm49MtMlYyn1zxzvJKWmFMlGzm+ry5BBfYyeY9YmNKbRSo/o7OX9w9ale0wg3w== - -is-fullwidth-code-point@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-1.0.0.tgz#ef9e31386f031a7f0d643af82fde50c457ef00cb" - integrity sha1-754xOG8DGn8NZDr4L95QxFfvAMs= - dependencies: - number-is-nan "^1.0.0" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha1-5HnICFjfDBsR3dppQPlgEfzaSpo= - -is-utf8@^0.2.0: - version "0.2.1" - resolved "https://registry.yarnpkg.com/is-utf8/-/is-utf8-0.2.1.tgz#4b0da1442104d1b336340e80797e865cf39f7d72" - integrity sha1-Sw2hRCEE0bM2NA6AeX6GXPOffXI= - -isarray@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf" - integrity sha1-ihis/Kmo9Bd+Cav8YDiTmwXR7t8= - -isarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" - integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha1-R+Y/evVa+m+S4VAOaQ64uFKcCZo= - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha1-peZUwuWi3rXyAdls77yoDA7y9RM= - -json-schema-traverse@^0.4.1: - version "0.4.1" - resolved "https://registry.yarnpkg.com/json-schema-traverse/-/json-schema-traverse-0.4.1.tgz#69f6a87d9513ab8bb8fe63bdb0979c448e684660" - integrity sha512-xbbCH5dCYU5T8LcEhhuh7HJ88HXuW3qsI3Y0zOZFKfZEHcpWiHU/Jxzk629Brsab/mMiHQti9wMP+845RPe3Vg== - -json-schema@0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.2.3.tgz#b480c892e59a2f05954ce727bd3f2a4e882f9e13" - integrity sha1-tIDIkuWaLwWVTOcnvT8qTogvnhM= - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= - -jsonfile@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" - integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^1.2.2: - version "1.4.1" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-1.4.1.tgz#313e66bc1e5cc06e438bc1b7499c2e5c56acb6a2" - integrity sha1-MT5mvB5cwG5Di8G3SZwuXFastqI= - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.2.3" - verror "1.10.0" - -load-json-file@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/load-json-file/-/load-json-file-1.1.0.tgz#956905708d58b4bab4c2261b04f59f31c99374c0" - integrity sha1-lWkFcI1YtLq0wiYbBPWfMcmTdMA= - dependencies: - graceful-fs "^4.1.2" - parse-json "^2.2.0" - pify "^2.0.0" - pinkie-promise "^2.0.0" - strip-bom "^2.0.0" - -loud-rejection@^1.0.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/loud-rejection/-/loud-rejection-1.6.0.tgz#5b46f80147edee578870f086d04821cf998e551f" - integrity sha1-W0b4AUft7leIcPCG0Eghz5mOVR8= - dependencies: - currently-unhandled "^0.4.1" - signal-exit "^3.0.0" - -map-obj@^1.0.0, map-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/map-obj/-/map-obj-1.0.1.tgz#d933ceb9205d82bdcf4886f6742bdc2b4dea146d" - integrity sha1-2TPOuSBdgr3PSIb2dCvcK03qFG0= - -meow@^3.1.0: - version "3.7.0" - resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" - integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= - dependencies: - camelcase-keys "^2.0.0" - decamelize "^1.1.2" - loud-rejection "^1.0.0" - map-obj "^1.0.1" - minimist "^1.1.3" - normalize-package-data "^2.3.4" - object-assign "^4.0.1" - read-pkg-up "^1.0.1" - redent "^1.0.0" - trim-newlines "^1.0.0" - -mime-db@1.44.0: - version "1.44.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.44.0.tgz#fa11c5eb0aca1334b4233cb4d52f10c5a6272f92" - integrity sha512-/NOTfLrsPBVeH7YtFPgsVWveuL+4SjjYxaQ1xtM1KMFj7HdxlBlxeyNLzhyJVx7r4rZGJAZ/6lkKCitSc/Nmpg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.27" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.27.tgz#47949f98e279ea53119f5722e0f34e529bec009f" - integrity sha512-JIhqnCasI9yD+SsmkquHBxTSEuZdQX5BuQnS2Vc7puQQQ+8yiP5AY5uWhpdv4YL4VM5c6iliiYWPgJ/nJQLp7w== - dependencies: - mime-db "1.44.0" - -minimist@0.0.8: - version "0.0.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" - integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= - -minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0: - version "1.2.5" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602" - integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw== - -mkdirp@0.5.1: - version "0.5.1" - resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" - integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= - dependencies: - minimist "0.0.8" - -ms@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" - integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= - -ms@^2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -normalize-package-data@^2.3.2, normalize-package-data@^2.3.4: - version "2.5.0" - resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" - integrity sha512-/5CMN3T0R4XTj4DcGaexo+roZSdSFW/0AOOTROrjxzCG1wrWXEsGbRKevjlIL+ZDE4sZlJr5ED4YW0yqmkK+eA== - dependencies: - hosted-git-info "^2.1.4" - resolve "^1.10.0" - semver "2 || 3 || 4 || 5" - validate-npm-package-license "^3.0.1" - -nugget@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/nugget/-/nugget-2.0.1.tgz#201095a487e1ad36081b3432fa3cada4f8d071b0" - integrity sha1-IBCVpIfhrTYIGzQy+jytpPjQcbA= - dependencies: - debug "^2.1.3" - minimist "^1.1.0" - pretty-bytes "^1.0.2" - progress-stream "^1.1.0" - request "^2.45.0" - single-line-log "^1.1.2" - throttleit "0.0.2" - -number-is-nan@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/number-is-nan/-/number-is-nan-1.0.1.tgz#097b602b53422a522c1afb8790318336941a011d" - integrity sha1-CXtgK1NCKlIsGvuHkDGDNpQaAR0= - -oauth-sign@~0.9.0: - version "0.9.0" - resolved "https://registry.yarnpkg.com/oauth-sign/-/oauth-sign-0.9.0.tgz#47a7b016baa68b5fa0ecf3dee08a85c679ac6455" - integrity sha512-fexhUFFPTGV8ybAtSIGbV6gOkSv8UtRbDBnAyLQw4QPKkgNlsH2ByPGtMUqdWkos6YCRmAqViwgZrJc/mRDzZQ== - -object-assign@^4.0.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/object-assign/-/object-assign-4.1.1.tgz#2109adc7965887cfc05cbbd442cac8bfbb360863" - integrity sha1-IQmtx5ZYh8/AXLvUQsrIv7s2CGM= - -object-keys@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-0.4.0.tgz#28a6aae7428dd2c3a92f3d95f21335dd204e0336" - integrity sha1-KKaq50KN0sOpLz2V8hM13SBOAzY= - -parse-json@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/parse-json/-/parse-json-2.2.0.tgz#f480f40434ef80741f8469099f8dea18f55a4dc9" - integrity sha1-9ID0BDTvgHQfhGkJn43qGPVaTck= - dependencies: - error-ex "^1.2.0" - -path-exists@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-2.1.0.tgz#0feb6c64f0fc518d9a754dd5efb62c7022761f4b" - integrity sha1-D+tsZPD8UY2adU3V77YscCJ2H0s= - dependencies: - pinkie-promise "^2.0.0" - -path-exists@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-3.0.0.tgz#ce0ebeaa5f78cb18925ea7d810d7b59b010fd515" - integrity sha1-zg6+ql94yxiSXqfYENe1mwEP1RU= - -path-parse@^1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.6.tgz#d62dbb5679405d72c4737ec58600e9ddcf06d24c" - integrity sha512-GSmOT2EbHrINBf9SR7CDELwlJ8AENk3Qn7OikK4nFYAu3Ote2+JYNVvkpAEQm3/TLNEJFD/xZJjzyxg3KBWOzw== - -path-type@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-1.1.0.tgz#59c44f7ee491da704da415da5a4070ba4f8fe441" - integrity sha1-WcRPfuSR2nBNpBXaWkBwuk+P5EE= - dependencies: - graceful-fs "^4.1.2" - pify "^2.0.0" - pinkie-promise "^2.0.0" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha1-Ywn04OX6kT7BxpMHrjZLSzd8nns= - -pify@^2.0.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha1-7RQaasBDqEnqWISY59yosVMw6Qw= - -pinkie-promise@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/pinkie-promise/-/pinkie-promise-2.0.1.tgz#2135d6dfa7a358c069ac9b178776288228450ffa" - integrity sha1-ITXW36ejWMBprJsXh3YogihFD/o= - dependencies: - pinkie "^2.0.0" - -pinkie@^2.0.0: - version "2.0.4" - resolved "https://registry.yarnpkg.com/pinkie/-/pinkie-2.0.4.tgz#72556b80cfa0d48a974e80e77248e80ed4f7f870" - integrity sha1-clVrgM+g1IqXToDnckjoDtT3+HA= - -pretty-bytes@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-1.0.4.tgz#0a22e8210609ad35542f8c8d5d2159aff0751c84" - integrity sha1-CiLoIQYJrTVUL4yNXSFZr/B1HIQ= - dependencies: - get-stdin "^4.0.1" - meow "^3.1.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== - -progress-stream@^1.1.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/progress-stream/-/progress-stream-1.2.0.tgz#2cd3cfea33ba3a89c9c121ec3347abe9ab125f77" - integrity sha1-LNPP6jO6OonJwSHsM0er6asSX3c= - dependencies: - speedometer "~0.1.2" - through2 "~0.2.3" - -psl@^1.1.28: - version "1.8.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.8.0.tgz#9326f8bcfb013adcc005fdff056acce020e51c24" - integrity sha512-RIdOzyoavK+hA18OGGWDqUTsCLhtA7IcZ/6NCs4fFJaHBDab+pDDmDIByWFRQJq2Cd7r1OoQxBGKOaztq+hjIQ== - -punycode@^2.1.0, punycode@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.1.1.tgz#b58b010ac40c22c5657616c8d2c2c02c7bf479ec" - integrity sha512-XRsRjdf+j5ml+y/6GKHPZbrF/8p2Yga0JPtdqTIY2Xe5ohJPD9saDJJLPvp9+NSBprVvevdXZybnj2cv8OEd0A== - -qs@~6.5.2: - version "6.5.2" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.5.2.tgz#cb3ae806e8740444584ef154ce8ee98d403f3e36" - integrity sha512-N5ZAX4/LxJmF+7wN74pUD6qAh9/wnvdQcjq9TZjevvXzSUo7bfmw91saqMjzGS2xq91/odN2dW/WOl7qQHNDGA== - -rc@^1.2.1: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - -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" - integrity sha1-nWPBMnbAZZGNV/ACpX9AobZD+wI= - dependencies: - find-up "^1.0.0" - read-pkg "^1.0.0" - -read-pkg@^1.0.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/read-pkg/-/read-pkg-1.1.0.tgz#f5ffaa5ecd29cb31c0474bca7d756b6bb29e3f28" - integrity sha1-9f+qXs0pyzHAR0vKfXVra7KePyg= - dependencies: - load-json-file "^1.0.0" - normalize-package-data "^2.3.2" - path-type "^1.0.0" - -readable-stream@^2.2.2: - version "2.3.6" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" - integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.3" - isarray "~1.0.0" - process-nextick-args "~2.0.0" - safe-buffer "~5.1.1" - string_decoder "~1.1.1" - util-deprecate "~1.0.1" - -readable-stream@~1.1.9: - version "1.1.14" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-1.1.14.tgz#7cf4c54ef648e3813084c636dd2079e166c081d9" - integrity sha1-fPTFTvZI44EwhMY23SB54WbAgdk= - dependencies: - core-util-is "~1.0.0" - inherits "~2.0.1" - isarray "0.0.1" - string_decoder "~0.10.x" - -redent@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/redent/-/redent-1.0.0.tgz#cf916ab1fd5f1f16dfb20822dd6ec7f730c2afde" - integrity sha1-z5Fqsf1fHxbfsggi3W7H9zDCr94= - dependencies: - indent-string "^2.1.0" - strip-indent "^1.0.1" - -repeating@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/repeating/-/repeating-2.0.1.tgz#5214c53a926d3552707527fbab415dbc08d06dda" - integrity sha1-UhTFOpJtNVJwdSf7q0FdvAjQbdo= - dependencies: - is-finite "^1.0.0" - -request@^2.45.0: - version "2.88.2" - resolved "https://registry.yarnpkg.com/request/-/request-2.88.2.tgz#d73c918731cb5a87da047e207234146f664d12b3" - integrity sha512-MsvtOrfG9ZcrOwAW+Qi+F6HbD0CWXEh9ou77uOb7FM2WPhwT7smM833PzanhJLsgXjN89Ir6V2PczXNnMpwKhw== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - har-validator "~5.1.3" - http-signature "~1.2.0" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - oauth-sign "~0.9.0" - performance-now "^2.1.0" - qs "~6.5.2" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^3.3.2" - -resolve@^1.10.0: - version "1.17.0" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.17.0.tgz#b25941b54968231cc2d1bb76a79cb7f2c0bf8444" - integrity sha512-ic+7JYiV8Vi2yzQGFWOkiZD5Z9z7O2Zhm9XMaTxdJExKasieFCr+yXZ/WmXsckHiKl12ar0y6XiXDx3m4RHn1w== - dependencies: - path-parse "^1.0.6" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2: - 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-buffer@~5.1.0, safe-buffer@~5.1.1: - version "5.1.2" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" - integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -"semver@2 || 3 || 4 || 5", semver@^5.4.1: - version "5.7.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.7.1.tgz#a954f931aeba508d307bbf069eff0c01c96116f7" - integrity sha512-sauaDf/PZdVgrLTNYHRtpXa1iRiKcaebiKQ1BJdpQlWH2lCvexQdX55snPFyK7QzpudqbCI0qXFfOasHdyNDGQ== - -signal-exit@^3.0.0: - version "3.0.3" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" - integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== - -single-line-log@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/single-line-log/-/single-line-log-1.1.2.tgz#c2f83f273a3e1a16edb0995661da0ed5ef033364" - integrity sha1-wvg/Jzo+GhbtsJlWYdoO1e8DM2Q= - dependencies: - string-width "^1.0.1" - -spdx-correct@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.0.tgz#fb83e504445268f154b074e218c87c003cd31df4" - integrity sha512-lr2EZCctC2BNR7j7WzJ2FpDznxky1sjfxvvYEyzxNyb6lZXHODmEoJeFu4JupYlkfha1KZpJyoqiJ7pgA1qq8Q== - dependencies: - spdx-expression-parse "^3.0.0" - spdx-license-ids "^3.0.0" - -spdx-exceptions@^2.1.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/spdx-exceptions/-/spdx-exceptions-2.3.0.tgz#3f28ce1a77a00372683eade4a433183527a2163d" - integrity sha512-/tTrYOC7PPI1nUAgx34hUpqXuyJG+DTHJTnIULG4rDygi4xu/tfgmq1e1cIRwRzwZgo4NLySi+ricLkZkw4i5A== - -spdx-expression-parse@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/spdx-expression-parse/-/spdx-expression-parse-3.0.1.tgz#cf70f50482eefdc98e3ce0a6833e4a53ceeba679" - integrity sha512-cbqHunsQWnJNE6KhVSMsMeH5H/L9EpymbzqTQ3uLwNCLZ1Q481oWaofqH7nO6V07xlXwY6PhQdQ2IedWx/ZK4Q== - dependencies: - spdx-exceptions "^2.1.0" - spdx-license-ids "^3.0.0" - -spdx-license-ids@^3.0.0: - version "3.0.5" - resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.5.tgz#3694b5804567a458d3c8045842a6358632f62654" - integrity sha512-J+FWzZoynJEXGphVIS+XEh3kFSjZX/1i9gFBaWQcB+/tmpe2qUsSBABpcxqxnAxFdiUFEgAX1bjYGQvIZmoz9Q== - -speedometer@~0.1.2: - version "0.1.4" - resolved "https://registry.yarnpkg.com/speedometer/-/speedometer-0.1.4.tgz#9876dbd2a169d3115402d48e6ea6329c8816a50d" - integrity sha1-mHbb0qFp0xFUAtSObqYynIgWpQ0= - -sshpk@^1.7.0: - version "1.16.1" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.16.1.tgz#fb661c0bef29b39db40769ee39fa70093d6f6877" - integrity sha512-HXXqVUq7+pcKeLqqZj6mHFUMvXtOJt1uoUx09pFW6011inTMxqI8BA8PM95myrIyyKwdnzjdFjLiE6KBPVtJIg== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -string-width@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-1.0.2.tgz#118bdf5b8cdc51a2a7e70d211e07e2b0b9b107d3" - integrity sha1-EYvfW4zcUaKn5w0hHgfisLmxB9M= - dependencies: - code-point-at "^1.0.0" - is-fullwidth-code-point "^1.0.0" - strip-ansi "^3.0.0" - -string_decoder@~0.10.x: - version "0.10.31" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-0.10.31.tgz#62e203bc41766c6c28c9fc84301dab1c5310fa94" - integrity sha1-YuIDvEF2bGwoyfyEMB2rHFMQ+pQ= - -string_decoder@~1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" - integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== - dependencies: - safe-buffer "~5.1.0" - -strip-ansi@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-3.0.1.tgz#6a385fb8853d952d5ff05d0e8aaf94278dc63dcf" - integrity sha1-ajhfuIU9lS1f8F0Oiq+UJ43GPc8= - dependencies: - ansi-regex "^2.0.0" - -strip-bom@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-2.0.0.tgz#6219a85616520491f35788bdbf1447a99c7e6b0e" - integrity sha1-YhmoVhZSBJHzV4i9vxRHqZx+aw4= - dependencies: - is-utf8 "^0.2.0" - -strip-indent@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-1.0.1.tgz#0c7962a6adefa7bbd4ac366460a638552ae1a0a2" - integrity sha1-DHlipq3vp7vUrDZkYKY4VSrhoKI= - dependencies: - get-stdin "^4.0.1" - -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - -sumchecker@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-2.0.2.tgz#0f42c10e5d05da5d42eea3e56c3399a37d6c5b3e" - integrity sha1-D0LBDl0F2l1C7qPlbDOZo31sWz4= - dependencies: - debug "^2.2.0" - -throttleit@0.0.2: - version "0.0.2" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-0.0.2.tgz#cfedf88e60c00dd9697b61fdd2a8343a9b680eaf" - integrity sha1-z+34jmDADdlpe2H90qg0OptoDq8= - -through2@~0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/through2/-/through2-0.2.3.tgz#eb3284da4ea311b6cc8ace3653748a52abf25a3f" - integrity sha1-6zKE2k6jEbbMis42U3SKUqvyWj8= - dependencies: - readable-stream "~1.1.9" - xtend "~2.1.1" - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -trim-newlines@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/trim-newlines/-/trim-newlines-1.0.0.tgz#5887966bb582a4503a41eb524f7d35011815a613" - integrity sha1-WIeWa7WCpFA6QetST301ARgVphM= - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha1-J6XeoGs2sEoKmWZ3SykIaPD8QP0= - dependencies: - safe-buffer "^5.0.1" - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha1-WuaBd/GS1EViadEIr6k/+HQ/T2Q= - -typedarray@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" - integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= - -universalify@^0.1.0: - version "0.1.2" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" - integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== - -uri-js@^4.2.2: - version "4.2.2" - resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.2.2.tgz#94c540e1ff772956e2299507c010aea6c8838eb0" - integrity sha512-KY9Frmirql91X2Qgjry0Wd4Y+YTdrdZheS8TFwvkbLWf/G5KNJDCh6pKL5OZctEW4+0Baa5idK2ZQuELRwPznQ== - dependencies: - punycode "^2.1.0" - -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= - -uuid@^3.3.2: - version "3.4.0" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-3.4.0.tgz#b23e4358afa8a202fe7a100af1f5f883f02007ee" - integrity sha512-HjSDRw6gZE5JMggctHBcjVak08+KEVhSIiDzFnT9S9aegmp85S/bReBVTb4QTFaRNptJ9kuYaNhnbNEOkbKb/A== - -validate-npm-package-license@^3.0.1: - version "3.0.4" - resolved "https://registry.yarnpkg.com/validate-npm-package-license/-/validate-npm-package-license-3.0.4.tgz#fc91f6b9c7ba15c857f4cb2c5defeec39d4f410a" - integrity sha512-DpKm2Ui/xN7/HQKCtpZxoRWBhZ9Z0kqtygG8XCgNQ8ZlDnxuQmWhj566j8fN4Cu3/JmbhsDo7fcAJq4s9h27Ew== - dependencies: - spdx-correct "^3.0.0" - spdx-expression-parse "^3.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha1-OhBcoXBTr1XW4nDB+CiGguGNpAA= - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -xtend@~2.1.1: - version "2.1.2" - resolved "https://registry.yarnpkg.com/xtend/-/xtend-2.1.2.tgz#6efecc2a4dad8e6962c4901b337ce7ba87b5d28b" - integrity sha1-bv7MKk2tjmlixJAbM3znuoe10os= - dependencies: - object-keys "~0.4.0" - -yauzl@2.4.1: - version "2.4.1" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" - integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= - dependencies: - fd-slicer "~1.0.1" +# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. +# yarn lockfile v1 + + +"@electron/get@^1.0.1": + version "1.12.2" + resolved "https://registry.yarnpkg.com/@electron/get/-/get-1.12.2.tgz#6442066afb99be08cefb9a281e4b4692b33764f3" + integrity sha512-vAuHUbfvBQpYTJ5wB7uVIDq5c/Ry0fiTBMs7lnEYAo/qXXppIVcWdfBr57u6eRnKdVso7KSiH6p/LbQAG6Izrg== + dependencies: + debug "^4.1.1" + env-paths "^2.2.0" + fs-extra "^8.1.0" + got "^9.6.0" + progress "^2.0.3" + sanitize-filename "^1.6.2" + sumchecker "^3.0.1" + optionalDependencies: + global-agent "^2.0.2" + global-tunnel-ng "^2.7.1" + +"@sindresorhus/is@^0.14.0": + version "0.14.0" + resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.14.0.tgz#9fb3a3cf3132328151f353de4632e01e52102bea" + integrity sha512-9NET910DNaIPngYnLLPeg+Ogzqsi9uM4mSboU5y6p8S5DzMTVEsJZrawi+BoDNUVBa2DhJqQYUFvMDfgU062LQ== + +"@szmarczak/http-timer@^1.1.2": + version "1.1.2" + resolved "https://registry.yarnpkg.com/@szmarczak/http-timer/-/http-timer-1.1.2.tgz#b1665e2c461a2cd92f4c1bbf50d5454de0d4b421" + integrity sha512-XIB2XbzHTN6ieIjfIMV9hlVcfPU26s2vafYWQcZHWXHOxiaRZYEDKEwdl129Zyg50+foYV2jCgtrqSA6qNuNSA== + dependencies: + defer-to-connect "^1.0.1" + +"@types/node@^12.0.12": + version "12.12.62" + resolved "https://registry.yarnpkg.com/@types/node/-/node-12.12.62.tgz#733923d73669188d35950253dd18a21570085d2b" + integrity sha512-qAfo81CsD7yQIM9mVyh6B/U47li5g7cfpVQEDMfQeF8pSZVwzbhwU3crc0qG4DmpsebpJPR49AKOExQyJ05Cpg== + +boolean@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/boolean/-/boolean-3.0.1.tgz#35ecf2b4a2ee191b0b44986f14eb5f052a5cbb4f" + integrity sha512-HRZPIjPcbwAVQvOTxR4YE3o8Xs98NqbbL1iEZDCz7CL8ql0Lt5iOyJFxfnAB0oFs8Oh02F/lLlg30Mexv46LjA== + +buffer-from@^1.0.0: + version "1.1.1" + resolved "https://registry.yarnpkg.com/buffer-from/-/buffer-from-1.1.1.tgz#32713bc028f75c02fdb710d7c7bcec1f2c6070ef" + integrity sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A== + +cacheable-request@^6.0.0: + version "6.1.0" + resolved "https://registry.yarnpkg.com/cacheable-request/-/cacheable-request-6.1.0.tgz#20ffb8bd162ba4be11e9567d823db651052ca912" + integrity sha512-Oj3cAGPCqOZX7Rz64Uny2GYAZNliQSqfbePrgAQ1wKAihYmCUnraBtJtKcGR4xz7wF+LoJC+ssFZvv5BgF9Igg== + dependencies: + clone-response "^1.0.2" + get-stream "^5.1.0" + http-cache-semantics "^4.0.0" + keyv "^3.0.0" + lowercase-keys "^2.0.0" + normalize-url "^4.1.0" + responselike "^1.0.2" + +clone-response@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/clone-response/-/clone-response-1.0.2.tgz#d1dc973920314df67fbeb94223b4ee350239e96b" + integrity sha1-0dyXOSAxTfZ/vrlCI7TuNQI56Ws= + dependencies: + mimic-response "^1.0.0" + +concat-stream@1.6.2: + version "1.6.2" + resolved "https://registry.yarnpkg.com/concat-stream/-/concat-stream-1.6.2.tgz#904bdf194cd3122fc675c77fc4ac3d4ff0fd1a34" + integrity sha512-27HBghJxjiZtIk3Ycvn/4kbJk/1uZuJFfuPEns6LaEvpvG1f0hTea8lilrouyo9mVc2GWdcEZ8OLoGmSADlrCw== + dependencies: + buffer-from "^1.0.0" + inherits "^2.0.3" + readable-stream "^2.2.2" + typedarray "^0.0.6" + +config-chain@^1.1.11: + version "1.1.12" + resolved "https://registry.yarnpkg.com/config-chain/-/config-chain-1.1.12.tgz#0fde8d091200eb5e808caf25fe618c02f48e4efa" + integrity sha512-a1eOIcu8+7lUInge4Rpf/n4Krkf3Dd9lqhljRzII1/Zno/kRtUWnznPO3jOKBmTEktkt3fkxisUcivoj0ebzoA== + dependencies: + ini "^1.3.4" + proto-list "~1.2.1" + +core-js@^3.6.5: + version "3.6.5" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" + integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== + +core-util-is@~1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" + integrity sha1-tf1UIgqivFq1eqtxQMlAdUUDwac= + +debug@2.6.9: + version "2.6.9" + resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" + integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== + dependencies: + ms "2.0.0" + +debug@^4.1.0, debug@^4.1.1: + version "4.2.0" + resolved "https://registry.yarnpkg.com/debug/-/debug-4.2.0.tgz#7f150f93920e94c58f5574c2fd01a3110effe7f1" + integrity sha512-IX2ncY78vDTjZMFUdmsvIRFY2Cf4FnD0wRs+nQwJU8Lu99/tPFdb0VybiiMTPe3I6rQmwsqQqRBvxU+bZ/I8sg== + dependencies: + ms "2.1.2" + +decompress-response@^3.3.0: + version "3.3.0" + resolved "https://registry.yarnpkg.com/decompress-response/-/decompress-response-3.3.0.tgz#80a4dd323748384bfa248083622aedec982adff3" + integrity sha1-gKTdMjdIOEv6JICDYirt7Jgq3/M= + dependencies: + mimic-response "^1.0.0" + +defer-to-connect@^1.0.1: + version "1.1.3" + resolved "https://registry.yarnpkg.com/defer-to-connect/-/defer-to-connect-1.1.3.tgz#331ae050c08dcf789f8c83a7b81f0ed94f4ac591" + integrity sha512-0ISdNousHvZT2EiFlZeZAHBUvSxmKswVCEf8hW7KWgG4a8MVEu/3Vb6uWYozkjylyCxe0JBIiRB1jV45S70WVQ== + +define-properties@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.1.3.tgz#cf88da6cbee26fe6db7094f61d870cbd84cee9f1" + integrity sha512-3MqfYKj2lLzdMSf8ZIZE/V+Zuy+BgD6f164e8K2w7dgnpKArBDerGYpM46IYYcjnkdPNMjPk9A6VFB8+3SKlXQ== + dependencies: + object-keys "^1.0.12" + +detect-node@^2.0.4: + version "2.0.4" + resolved "https://registry.yarnpkg.com/detect-node/-/detect-node-2.0.4.tgz#014ee8f8f669c5c58023da64b8179c083a28c46c" + integrity sha512-ZIzRpLJrOj7jjP2miAtgqIfmzbxa4ZOr5jJc601zklsfEx9oTzmmj2nVpIPRpNlRTIh8lc1kyViIY7BWSGNmKw== + +duplexer3@^0.1.4: + version "0.1.4" + resolved "https://registry.yarnpkg.com/duplexer3/-/duplexer3-0.1.4.tgz#ee01dd1cac0ed3cbc7fdbea37dc0a8f1ce002ce2" + integrity sha1-7gHdHKwO08vH/b6jfcCo8c4ALOI= + +electron@10.1.3: + version "10.1.3" + resolved "https://registry.yarnpkg.com/electron/-/electron-10.1.3.tgz#7e276e373bf30078bd4cb1184850a91268dc0e6c" + integrity sha512-CR8LrlG47MdAp317SQ3vGYa2o2cIMdMSMPYH46OVitFLk35dwE9fn3VqvhUIXhCHYcNWIAPzMhkVHpkoFdKWuw== + dependencies: + "@electron/get" "^1.0.1" + "@types/node" "^12.0.12" + extract-zip "^1.0.3" + +encodeurl@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/encodeurl/-/encodeurl-1.0.2.tgz#ad3ff4c86ec2d029322f5a02c3a9a606c95b3f59" + integrity sha1-rT/0yG7C0CkyL1oCw6mmBslbP1k= + +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" + integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== + dependencies: + once "^1.4.0" + +env-paths@^2.2.0: + version "2.2.0" + resolved "https://registry.yarnpkg.com/env-paths/-/env-paths-2.2.0.tgz#cdca557dc009152917d6166e2febe1f039685e43" + integrity sha512-6u0VYSCo/OW6IoD5WCLLy9JUGARbamfSavcNXry/eu8aHVFei6CD3Sw+VGX5alea1i9pgPHW0mbu6Xj0uBh7gA== + +es6-error@^4.1.1: + version "4.1.1" + resolved "https://registry.yarnpkg.com/es6-error/-/es6-error-4.1.1.tgz#9e3af407459deed47e9a91f9b885a84eb05c561d" + integrity sha512-Um/+FxMr9CISWh0bi5Zv0iOD+4cFh5qLeks1qhAopKVAJw3drgKbKySikp7wGhDL0HPeaja0P5ULZrxLkniUVg== + +escape-string-regexp@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-4.0.0.tgz#14ba83a5d373e3d311e5afca29cf5bfad965bf34" + integrity sha512-TtpcNJ3XAzx3Gq8sWRzJaVajRs0uVxA2YAkdb1jm2YkPz4G6egUFAyA3n5vtEIZefPk5Wa4UXbKuS5fKkJWdgA== + +extract-zip@^1.0.3: + version "1.6.7" + resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.6.7.tgz#a840b4b8af6403264c8db57f4f1a74333ef81fe9" + integrity sha1-qEC0uK9kAyZMjbV/Txp0Mz74H+k= + dependencies: + concat-stream "1.6.2" + debug "2.6.9" + mkdirp "0.5.1" + yauzl "2.4.1" + +fd-slicer@~1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.0.1.tgz#8b5bcbd9ec327c5041bf9ab023fd6750f1177e65" + integrity sha1-i1vL2ewyfFBBv5qwI/1nUPEXfmU= + dependencies: + pend "~1.2.0" + +fs-extra@^8.1.0: + version "8.1.0" + resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-8.1.0.tgz#49d43c45a88cd9677668cb7be1b46efdb8d2e1c0" + integrity sha512-yhlQgA6mnOJUKOsRUFsgJdQCvkKhcz8tlZG5HBQfReYZy46OwLcY+Zia0mtdHsOo9y/hP+CxMN0TU9QxoOtG4g== + dependencies: + graceful-fs "^4.2.0" + jsonfile "^4.0.0" + universalify "^0.1.0" + +get-stream@^4.1.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-4.1.0.tgz#c1b255575f3dc21d59bfc79cd3d2b46b1c3a54b5" + integrity sha512-GMat4EJ5161kIy2HevLlr4luNjBgvmj413KaQA7jt4V8B4RDsfpHk7WQ9GVqfYyyx8OS/L66Kox+rJRNklLK7w== + dependencies: + pump "^3.0.0" + +get-stream@^5.1.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" + integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== + dependencies: + pump "^3.0.0" + +global-agent@^2.0.2: + version "2.1.12" + resolved "https://registry.yarnpkg.com/global-agent/-/global-agent-2.1.12.tgz#e4ae3812b731a9e81cbf825f9377ef450a8e4195" + integrity sha512-caAljRMS/qcDo69X9BfkgrihGUgGx44Fb4QQToNQjsiWh+YlQ66uqYVAdA8Olqit+5Ng0nkz09je3ZzANMZcjg== + dependencies: + boolean "^3.0.1" + core-js "^3.6.5" + es6-error "^4.1.1" + matcher "^3.0.0" + roarr "^2.15.3" + semver "^7.3.2" + serialize-error "^7.0.1" + +global-tunnel-ng@^2.7.1: + version "2.7.1" + resolved "https://registry.yarnpkg.com/global-tunnel-ng/-/global-tunnel-ng-2.7.1.tgz#d03b5102dfde3a69914f5ee7d86761ca35d57d8f" + integrity sha512-4s+DyciWBV0eK148wqXxcmVAbFVPqtc3sEtUE/GTQfuU80rySLcMhUmHKSHI7/LDj8q0gDYI1lIhRRB7ieRAqg== + dependencies: + encodeurl "^1.0.2" + lodash "^4.17.10" + npm-conf "^1.1.3" + tunnel "^0.0.6" + +globalthis@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.1.tgz#40116f5d9c071f9e8fb0037654df1ab3a83b7ef9" + integrity sha512-mJPRTc/P39NH/iNG4mXa9aIhNymaQikTrnspeCa2ZuJ+mH2QN/rXwtX3XwKrHqWgUQFbNZKtHM105aHzJalElw== + dependencies: + define-properties "^1.1.3" + +got@^9.6.0: + version "9.6.0" + resolved "https://registry.yarnpkg.com/got/-/got-9.6.0.tgz#edf45e7d67f99545705de1f7bbeeeb121765ed85" + integrity sha512-R7eWptXuGYxwijs0eV+v3o6+XH1IqVK8dJOEecQfTmkncw9AV4dcw/Dhxi8MdlqPthxxpZyizMzyg8RTmEsG+Q== + dependencies: + "@sindresorhus/is" "^0.14.0" + "@szmarczak/http-timer" "^1.1.2" + cacheable-request "^6.0.0" + decompress-response "^3.3.0" + duplexer3 "^0.1.4" + get-stream "^4.1.0" + lowercase-keys "^1.0.1" + mimic-response "^1.0.1" + p-cancelable "^1.0.0" + to-readable-stream "^1.0.0" + url-parse-lax "^3.0.0" + +graceful-fs@^4.1.6: + version "4.2.2" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.2.tgz#6f0952605d0140c1cfdb138ed005775b92d67b02" + integrity sha512-IItsdsea19BoLC7ELy13q1iJFNmd7ofZH5+X/pJr90/nRoPEX0DJo1dHDbgtYWOhJhcCgMDTOw84RZ72q6lB+Q== + +graceful-fs@^4.2.0: + version "4.2.4" + resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.4.tgz#2256bde14d3632958c465ebc96dc467ca07a29fb" + integrity sha512-WjKPNJF79dtJAVniUlGGWHYGz2jWxT6VhN/4m1NdkbZ2nOsEF+cI1Edgql5zCRhs/VsQYRvrXctxktVXZUkixw== + +http-cache-semantics@^4.0.0: + version "4.1.0" + resolved "https://registry.yarnpkg.com/http-cache-semantics/-/http-cache-semantics-4.1.0.tgz#49e91c5cbf36c9b94bcfcd71c23d5249ec74e390" + integrity sha512-carPklcUh7ROWRK7Cv27RPtdhYhUsela/ue5/jKzjegVvXDqM2ILE9Q2BGn9JZJh1g87cp56su/FgQSzcWS8cQ== + +inherits@^2.0.3, 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== + +ini@^1.3.4: + version "1.3.5" + resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" + integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== + +isarray@~1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/isarray/-/isarray-1.0.0.tgz#bb935d48582cba168c06834957a54a3e07124f11" + integrity sha1-u5NdSFgsuhaMBoNJV6VKPgcSTxE= + +json-buffer@3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/json-buffer/-/json-buffer-3.0.0.tgz#5b1f397afc75d677bde8bcfc0e47e1f9a3d9a898" + integrity sha1-Wx85evx11ne96Lz8Dkfh+aPZqJg= + +json-stringify-safe@^5.0.1: + version "5.0.1" + resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" + integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= + +jsonfile@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-4.0.0.tgz#8771aae0799b64076b76640fca058f9c10e33ecb" + integrity sha1-h3Gq4HmbZAdrdmQPygWPnBDjPss= + optionalDependencies: + graceful-fs "^4.1.6" + +keyv@^3.0.0: + version "3.1.0" + resolved "https://registry.yarnpkg.com/keyv/-/keyv-3.1.0.tgz#ecc228486f69991e49e9476485a5be1e8fc5c4d9" + integrity sha512-9ykJ/46SN/9KPM/sichzQ7OvXyGDYKGTaDlKMGCAlg2UK8KRy4jb0d8sFc+0Tt0YYnThq8X2RZgCg74RPxgcVA== + dependencies: + json-buffer "3.0.0" + +lodash@^4.17.10: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + +lowercase-keys@^1.0.0, lowercase-keys@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-1.0.1.tgz#6f9e30b47084d971a7c820ff15a6c5167b74c26f" + integrity sha512-G2Lj61tXDnVFFOi8VZds+SoQjtQC3dgokKdDG2mTm1tx4m50NUHBOZSBwQQHyy0V12A0JTG4icfZQH+xPyh8VA== + +lowercase-keys@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/lowercase-keys/-/lowercase-keys-2.0.0.tgz#2603e78b7b4b0006cbca2fbcc8a3202558ac9479" + integrity sha512-tqNXrS78oMOE73NMxK4EMLQsQowWf8jKooH9g7xPavRT706R6bkQJ6DY2Te7QukaZsulxa30wQ7bk0pm4XiHmA== + +matcher@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/matcher/-/matcher-3.0.0.tgz#bd9060f4c5b70aa8041ccc6f80368760994f30ca" + integrity sha512-OkeDaAZ/bQCxeFAozM55PKcKU0yJMPGifLwV4Qgjitu+5MoAfSQN4lsLJeXZ1b8w0x+/Emda6MZgXS1jvsapng== + dependencies: + escape-string-regexp "^4.0.0" + +mimic-response@^1.0.0, mimic-response@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/mimic-response/-/mimic-response-1.0.1.tgz#4923538878eef42063cb8a3e3b0798781487ab1b" + integrity sha512-j5EctnkH7amfV/q5Hgmoal1g2QHFJRraOtmx0JpIqkxhBhI/lJSl1nMpQ45hVarwNETOoWEimndZ4QK0RHxuxQ== + +minimist@0.0.8: + version "0.0.8" + resolved "https://registry.yarnpkg.com/minimist/-/minimist-0.0.8.tgz#857fcabfc3397d2625b8228262e86aa7a011b05d" + integrity sha1-hX/Kv8M5fSYluCKCYuhqp6ARsF0= + +mkdirp@0.5.1: + version "0.5.1" + resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" + integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= + dependencies: + minimist "0.0.8" + +ms@2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.0.0.tgz#5608aeadfc00be6c2901df5f9861788de0d597c8" + integrity sha1-VgiurfwAvmwpAd9fmGF4jeDVl8g= + +ms@2.1.2: + version "2.1.2" + resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" + integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== + +normalize-url@^4.1.0: + version "4.5.0" + resolved "https://registry.yarnpkg.com/normalize-url/-/normalize-url-4.5.0.tgz#453354087e6ca96957bd8f5baf753f5982142129" + integrity sha512-2s47yzUxdexf1OhyRi4Em83iQk0aPvwTddtFz4hnSSw9dCEsLEGf6SwIO8ss/19S9iBb5sJaOuTvTGDeZI00BQ== + +npm-conf@^1.1.3: + version "1.1.3" + resolved "https://registry.yarnpkg.com/npm-conf/-/npm-conf-1.1.3.tgz#256cc47bd0e218c259c4e9550bf413bc2192aff9" + integrity sha512-Yic4bZHJOt9RCFbRP3GgpqhScOY4HH3V2P8yBj6CeYq118Qr+BLXqT2JvpJ00mryLESpgOxf5XlFv4ZjXxLScw== + dependencies: + config-chain "^1.1.11" + pify "^3.0.0" + +object-keys@^1.0.12: + version "1.1.1" + resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" + integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== + +once@^1.3.1, once@^1.4.0: + version "1.4.0" + resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" + integrity sha1-WDsap3WWHUsROsF9nFC6753Xa9E= + dependencies: + wrappy "1" + +p-cancelable@^1.0.0: + version "1.1.0" + resolved "https://registry.yarnpkg.com/p-cancelable/-/p-cancelable-1.1.0.tgz#d078d15a3af409220c886f1d9a0ca2e441ab26cc" + integrity sha512-s73XxOZ4zpt1edZYZzvhqFa6uvQc1vwUa0K0BdtIZgQMAJj9IbebH+JkgKZc9h+B05PKHLOTl4ajG1BmNrVZlw== + +pend@~1.2.0: + version "1.2.0" + resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" + integrity sha1-elfrVQpng/kRUzH89GY9XI4AelA= + +pify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pify/-/pify-3.0.0.tgz#e5a4acd2c101fdf3d9a4d07f0dbc4db49dd28176" + integrity sha1-5aSs0sEB/fPZpNB/DbxNtJ3SgXY= + +prepend-http@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/prepend-http/-/prepend-http-2.0.0.tgz#e92434bfa5ea8c19f41cdfd401d741a3c819d897" + integrity sha1-6SQ0v6XqjBn0HN/UAddBo8gZ2Jc= + +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== + +progress@^2.0.3: + version "2.0.3" + resolved "https://registry.yarnpkg.com/progress/-/progress-2.0.3.tgz#7e8cf8d8f5b8f239c1bc68beb4eb78567d572ef8" + integrity sha512-7PiHtLll5LdnKIMw100I+8xJXR5gW2QwWYkT6iJva0bXitZKa/XMrSbdmg3r2Xnaidz9Qumd0VPaMrZlF9V9sA== + +proto-list@~1.2.1: + version "1.2.4" + resolved "https://registry.yarnpkg.com/proto-list/-/proto-list-1.2.4.tgz#212d5bfe1318306a420f6402b8e26ff39647a849" + integrity sha1-IS1b/hMYMGpCD2QCuOJv85ZHqEk= + +pump@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" + integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== + dependencies: + end-of-stream "^1.1.0" + once "^1.3.1" + +readable-stream@^2.2.2: + version "2.3.6" + resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.6.tgz#b11c27d88b8ff1fbe070643cf94b0c79ae1b0aaf" + integrity sha512-tQtKA9WIAhBF3+VLAseyMqZeBjW0AHJoxOtYqSUZNJxauErmLbVm2FW1y+J/YA9dUrAC39ITejlZWhVIwawkKw== + dependencies: + core-util-is "~1.0.0" + inherits "~2.0.3" + isarray "~1.0.0" + process-nextick-args "~2.0.0" + safe-buffer "~5.1.1" + string_decoder "~1.1.1" + util-deprecate "~1.0.1" + +responselike@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/responselike/-/responselike-1.0.2.tgz#918720ef3b631c5642be068f15ade5a46f4ba1e7" + integrity sha1-kYcg7ztjHFZCvgaPFa3lpG9Loec= + dependencies: + lowercase-keys "^1.0.0" + +roarr@^2.15.3: + version "2.15.4" + resolved "https://registry.yarnpkg.com/roarr/-/roarr-2.15.4.tgz#f5fe795b7b838ccfe35dc608e0282b9eba2e7afd" + integrity sha512-CHhPh+UNHD2GTXNYhPWLnU8ONHdI+5DI+4EYIAOaiD63rHeYlZvyh8P+in5999TTSFgUYuKUAjzRI4mdh/p+2A== + dependencies: + boolean "^3.0.1" + detect-node "^2.0.4" + globalthis "^1.0.1" + json-stringify-safe "^5.0.1" + semver-compare "^1.0.0" + sprintf-js "^1.1.2" + +safe-buffer@~5.1.0, safe-buffer@~5.1.1: + version "5.1.2" + resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" + integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== + +sanitize-filename@^1.6.2: + version "1.6.3" + resolved "https://registry.yarnpkg.com/sanitize-filename/-/sanitize-filename-1.6.3.tgz#755ebd752045931977e30b2025d340d7c9090378" + integrity sha512-y/52Mcy7aw3gRm7IrcGDFx/bCk4AhRh2eI9luHOQM86nZsqwiRkkq2GekHXBBD+SmPidc8i2PqtYZl+pWJ8Oeg== + dependencies: + truncate-utf8-bytes "^1.0.0" + +semver-compare@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/semver-compare/-/semver-compare-1.0.0.tgz#0dee216a1c941ab37e9efb1788f6afc5ff5537fc" + integrity sha1-De4hahyUGrN+nvsXiPavxf9VN/w= + +semver@^7.3.2: + version "7.3.2" + resolved "https://registry.yarnpkg.com/semver/-/semver-7.3.2.tgz#604962b052b81ed0786aae84389ffba70ffd3938" + integrity sha512-OrOb32TeeambH6UrhtShmF7CRDqhL6/5XpPNp2DuRH6+9QLw/orhp72j87v8Qa1ScDkvrrBNpZcDejAirJmfXQ== + +serialize-error@^7.0.1: + version "7.0.1" + resolved "https://registry.yarnpkg.com/serialize-error/-/serialize-error-7.0.1.tgz#f1360b0447f61ffb483ec4157c737fab7d778e18" + integrity sha512-8I8TjW5KMOKsZQTvoxjuSIa7foAwPWGOts+6o7sgjz41/qMD9VQHEDxi6PBvK2l0MXUmqZyNpUK+T2tQaaElvw== + dependencies: + type-fest "^0.13.1" + +sprintf-js@^1.1.2: + version "1.1.2" + resolved "https://registry.yarnpkg.com/sprintf-js/-/sprintf-js-1.1.2.tgz#da1765262bf8c0f571749f2ad6c26300207ae673" + integrity sha512-VE0SOVEHCk7Qc8ulkWw3ntAzXuqf7S2lvwQaDLRnUeIEaKNQJzV6BwmLKhOqT61aGhfUMrXeaBk+oDGCzvhcug== + +string_decoder@~1.1.1: + version "1.1.1" + resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.1.1.tgz#9cf1611ba62685d7030ae9e4ba34149c3af03fc8" + integrity sha512-n/ShnvDi6FHbbVfviro+WojiFzv+s8MPMHBczVePfUpDJLwoLT0ht1l4YwBCbi8pJAveEEdnkHyPyTP/mzRfwg== + dependencies: + safe-buffer "~5.1.0" + +sumchecker@^3.0.1: + version "3.0.1" + resolved "https://registry.yarnpkg.com/sumchecker/-/sumchecker-3.0.1.tgz#6377e996795abb0b6d348e9b3e1dfb24345a8e42" + integrity sha512-MvjXzkz/BOfyVDkG0oFOtBxHX2u3gKbMHIF/dXblZsgD3BWOFLmHovIpZY7BykJdAjcqRCBi1WYBNdEC9yI7vg== + dependencies: + debug "^4.1.0" + +to-readable-stream@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/to-readable-stream/-/to-readable-stream-1.0.0.tgz#ce0aa0c2f3df6adf852efb404a783e77c0475771" + integrity sha512-Iq25XBt6zD5npPhlLVXGFN3/gyR2/qODcKNNyTMd4vbm39HUaOiAM4PMq0eMVC/Tkxz+Zjdsc55g9yyz+Yq00Q== + +truncate-utf8-bytes@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" + integrity sha1-QFkjkJWS1W94pYGENLC3hInKXys= + dependencies: + utf8-byte-length "^1.0.1" + +tunnel@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" + integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== + +type-fest@^0.13.1: + version "0.13.1" + resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.13.1.tgz#0172cb5bce80b0bd542ea348db50c7e21834d934" + integrity sha512-34R7HTnG0XIJcBSn5XhDd7nNFPRcXYRZrBB2O2jdKqYODldSzBAqzsWoZYYvduky73toYS/ESqxPvkDf/F0XMg== + +typedarray@^0.0.6: + version "0.0.6" + resolved "https://registry.yarnpkg.com/typedarray/-/typedarray-0.0.6.tgz#867ac74e3864187b1d3d47d996a78ec5c8830777" + integrity sha1-hnrHTjhkGHsdPUfZlqeOxciDB3c= + +universalify@^0.1.0: + version "0.1.2" + resolved "https://registry.yarnpkg.com/universalify/-/universalify-0.1.2.tgz#b646f69be3942dabcecc9d6639c80dc105efaa66" + integrity sha512-rBJeI5CXAlmy1pV+617WB9J63U6XcazHHF2f2dbJix4XzpUF0RS3Zbj0FGIOCAva5P/d/GBOYaACQ1w+0azUkg== + +url-parse-lax@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/url-parse-lax/-/url-parse-lax-3.0.0.tgz#16b5cafc07dbe3676c1b1999177823d6503acb0c" + integrity sha1-FrXK/Afb42dsGxmZF3gj1lA6yww= + dependencies: + prepend-http "^2.0.0" + +utf8-byte-length@^1.0.1: + version "1.0.4" + resolved "https://registry.yarnpkg.com/utf8-byte-length/-/utf8-byte-length-1.0.4.tgz#f45f150c4c66eee968186505ab93fcbb8ad6bf61" + integrity sha1-9F8VDExm7uloGGUFq5P8u4rWv2E= + +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= + +wrappy@1: + version "1.0.2" + resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" + integrity sha1-tSQ9jz7BqjXxNkYFvA0QNuMKtp8= + +yauzl@2.4.1: + version "2.4.1" + resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.4.1.tgz#9528f442dab1b2284e58b4379bb194e22e0c4005" + integrity sha1-lSj0QtqxsihOWLQ3m7GU4i4MQAU= + dependencies: + fd-slicer "~1.0.1" diff --git a/gulp/.gitignore b/gulp/.gitignore index aa92ef40..80dc3c89 100644 --- a/gulp/.gitignore +++ b/gulp/.gitignore @@ -1,2 +1 @@ -additional_build_files -steampipe +additional_build_files diff --git a/gulp/atlas2json.js b/gulp/atlas2json.js new file mode 100644 index 00000000..b77a47f3 --- /dev/null +++ b/gulp/atlas2json.js @@ -0,0 +1,127 @@ +const { join, resolve } = require("path"); +const { readFileSync, readdirSync, writeFileSync } = require("fs"); + +const suffixToScale = { + lq: "0.25", + mq: "0.5", + hq: "0.75" +}; + +function convert(srcDir) { + const full = resolve(srcDir); + const srcFiles = readdirSync(full) + .filter(n => n.endsWith(".atlas")) + .map(n => join(full, n)); + + for (const atlas of srcFiles) { + console.log(`Processing: ${atlas}`); + + // Read all text, split it into line array + // and filter all empty lines + const lines = readFileSync(atlas, "utf-8") + .split("\n") + .filter(n => n.trim()); + + // Get source image name + const image = lines.shift(); + const srcMeta = {}; + + // Read all metadata (supports only one page) + while (true) { + const kv = lines.shift().split(":"); + if (kv.length != 2) { + lines.unshift(kv[0]); + break; + } + + srcMeta[kv[0]] = kv[1].trim(); + } + + const frames = {}; + let current = null; + + lines.push("Dummy line to make it convert last frame"); + + for (const line of lines) { + if (!line.startsWith(" ")) { + // New frame, convert previous if it exists + if (current != null) { + let { name, rotate, xy, size, orig, offset, index } = current; + + // Convert to arrays because Node.js doesn't + // support latest JS features + xy = xy.split(",").map(v => Number(v)); + size = size.split(",").map(v => Number(v)); + orig = orig.split(",").map(v => Number(v)); + offset = offset.split(",").map(v => Number(v)); + + // GDX TexturePacker removes index suffixes + const indexSuff = index != -1 ? `_${index}` : ""; + const isTrimmed = size != orig; + + frames[`${name}${indexSuff}.png`] = { + // Bounds on atlas + frame: { + x: xy[0], + y: xy[1], + w: size[0], + h: size[1] + }, + + // Whether image was rotated + rotated: rotate == "true", + trimmed: isTrimmed, + + // How is the image trimmed + spriteSourceSize: { + x: offset[0], + y: (orig[1] - size[1]) - offset[1], + w: size[0], + h: size[1] + }, + + sourceSize: { + w: orig[0], + h: orig[1] + } + } + } + + // Simple object that will hold other metadata + current = { + name: line + }; + } else { + // Read and set current image metadata + const kv = line.split(":").map(v => v.trim()); + current[kv[0]] = isNaN(Number(kv[1])) ? kv[1] : Number(kv[1]); + } + } + + const atlasSize = srcMeta.size.split(",").map(v => Number(v)); + const atlasScale = suffixToScale[atlas.match(/_(\w+)\.atlas$/)[1]]; + + const result = JSON.stringify({ + frames, + meta: { + image, + format: srcMeta.format, + size: { + w: atlasSize[0], + h: atlasSize[1] + }, + scale: atlasScale.toString() + } + }); + + writeFileSync(atlas.replace(".atlas", ".json"), result, { + encoding: "utf-8" + }); + } +} + +if (require.main == module) { + convert(process.argv[2]); +} + +module.exports = { convert }; diff --git a/gulp/gulpfile.js b/gulp/gulpfile.js index 6af84223..7ac426a1 100644 --- a/gulp/gulpfile.js +++ b/gulp/gulpfile.js @@ -8,23 +8,6 @@ const path = require("path"); const deleteEmpty = require("delete-empty"); const execSync = require("child_process").execSync; -const lfsOutput = execSync("git lfs install", { encoding: "utf-8" }); -if (!lfsOutput.toLowerCase().includes("git lfs initialized")) { - console.error(` - Git LFS is not installed, unable to build. - - To install Git LFS on Linux: - - Arch: - sudo pacman -S git-lfs - - Debian/Ubuntu: - sudo apt install git-lfs - - For other systems, see: - https://github.com/git-lfs/git-lfs/wiki/Installation - `); - process.exit(1); -} - // Load other plugins dynamically const $ = require("gulp-load-plugins")({ scope: ["devDependencies"], @@ -44,8 +27,8 @@ const envVars = [ "SHAPEZ_CLI_LIVE_FTP_PW", "SHAPEZ_CLI_APPLE_ID", "SHAPEZ_CLI_APPLE_CERT_NAME", - "SHAPEZ_CLI_GITHUB_USER", - "SHAPEZ_CLI_GITHUB_TOKEN", + "SHAPEZ_CLI_GITHUB_USER", + "SHAPEZ_CLI_GITHUB_TOKEN", ]; for (let i = 0; i < envVars.length; ++i) { @@ -82,9 +65,9 @@ docs.gulptasksDocs($, gulp, buildFolder); const standalone = require("./standalone"); standalone.gulptasksStandalone($, gulp, buildFolder); -const releaseUploader = require("./release-uploader"); -releaseUploader.gulptasksReleaseUploader($, gulp, buildFolder); - +const releaseUploader = require("./release-uploader"); +releaseUploader.gulptasksReleaseUploader($, gulp, buildFolder); + const translations = require("./translations"); translations.gulptasksTranslations($, gulp, buildFolder); @@ -103,8 +86,16 @@ gulp.task("utils.cleanBuildTempFolder", () => { .src(path.join(__dirname, "..", "src", "js", "built-temp"), { read: false, allowEmpty: true }) .pipe($.clean({ force: true })); }); +gulp.task("utils.cleanImageBuildFolder", () => { + return gulp + .src(path.join(__dirname, "res_built"), { read: false, allowEmpty: true }) + .pipe($.clean({ force: true })); +}); -gulp.task("utils.cleanup", gulp.series("utils.cleanBuildFolder", "utils.cleanBuildTempFolder")); +gulp.task( + "utils.cleanup", + gulp.series("utils.cleanBuildFolder", "utils.cleanImageBuildFolder", "utils.cleanBuildTempFolder") +); // Requires no uncomitted files gulp.task("utils.requireCleanWorkingTree", cb => { @@ -191,10 +182,12 @@ function serve({ standalone }) { ); // Watch resource files and copy them on change + gulp.watch(imgres.rawImageResourcesGlobs, gulp.series("imgres.buildAtlas")); gulp.watch(imgres.nonImageResourcesGlobs, gulp.series("imgres.copyNonImageResources")); gulp.watch(imgres.imageResourcesGlobs, gulp.series("imgres.copyImageResources")); // Watch .atlas files and recompile the atlas on change + gulp.watch("../res_built/atlas/*.atlas", gulp.series("imgres.atlasToJson")); gulp.watch("../res_built/atlas/*.json", gulp.series("imgres.atlas")); // Watch the build folder and reload when anything changed @@ -232,6 +225,8 @@ gulp.task( gulp.series( "utils.cleanup", "utils.copyAdditionalBuildFiles", + "imgres.buildAtlas", + "imgres.atlasToJson", "imgres.atlas", "sounds.dev", "imgres.copyImageResources", @@ -247,12 +242,13 @@ gulp.task( "build.standalone.dev", gulp.series( "utils.cleanup", + "imgres.buildAtlas", + "imgres.atlasToJson", "imgres.atlas", "sounds.dev", "imgres.copyImageResources", "imgres.copyNonImageResources", "translations.fullBuild", - "js.standalone-dev", "css.dev", "html.standalone-dev" ) @@ -306,17 +302,17 @@ gulp.task( gulp.series("utils.cleanup", "step.standalone-prod.all", "step.postbuild") ); -// OS X build and release upload -gulp.task( - "build.darwin64-prod", - gulp.series( - "build.standalone-prod", - "standalone.prepare", - "standalone.package.prod.darwin64", - "standalone.uploadRelease.darwin64" - ) -); - +// OS X build and release upload +gulp.task( + "build.darwin64-prod", + gulp.series( + "build.standalone-prod", + "standalone.prepare", + "standalone.package.prod.darwin64", + "standalone.uploadRelease.darwin64" + ) +); + // Deploying! gulp.task( "main.deploy.alpha", diff --git a/gulp/image-resources.js b/gulp/image-resources.js index 80c4ca85..33df234d 100644 --- a/gulp/image-resources.js +++ b/gulp/image-resources.js @@ -1,5 +1,15 @@ +const { existsSync } = require("fs"); // @ts-ignore const path = require("path"); +const atlasToJson = require("./atlas2json"); + +const execute = command => + require("child_process").execSync(command, { + encoding: "utf-8", + }); + +// Globs for atlas resources +const rawImageResourcesGlobs = ["../res_raw/atlas.json", "../res_raw/**/*.png"]; // Globs for non-ui resources const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/*.webm"]; @@ -7,6 +17,9 @@ const nonImageResourcesGlobs = ["../res/**/*.woff2", "../res/*.ico", "../res/**/ // Globs for ui resources const imageResourcesGlobs = ["../res/**/*.png", "../res/**/*.svg", "../res/**/*.jpg", "../res/**/*.gif"]; +// Link to download LibGDX runnable-texturepacker.jar +const runnableTPSource = "https://libgdx.badlogicgames.com/ci/nightlies/runnables/runnable-texturepacker.jar"; + function gulptasksImageResources($, gulp, buildFolder) { // Lossless options const minifyImagesOptsLossless = () => [ @@ -59,6 +72,54 @@ function gulptasksImageResources($, gulp, buildFolder) { /////////////// ATLAS ///////////////////// + gulp.task("imgres.buildAtlas", cb => { + const config = JSON.stringify("../res_raw/atlas.json"); + const source = JSON.stringify("../res_raw"); + const dest = JSON.stringify("../res_built/atlas"); + + try { + // First check whether Java is installed + execute("java -version"); + // Now check and try downloading runnable-texturepacker.jar (22MB) + if (!existsSync("./runnable-texturepacker.jar")) { + const safeLink = JSON.stringify(runnableTPSource); + const commands = [ + // linux/macos if installed + `wget -O runnable-texturepacker.jar ${safeLink}`, + // linux/macos, latest windows 10 + `curl -o runnable-texturepacker.jar ${safeLink}`, + // windows 10 / updated windows 7+ + "powershell.exe -Command (new-object System.Net.WebClient)" + + `.DownloadFile(${safeLink.replace(/"/g, "'")}, 'runnable-texturepacker.jar')`, + // windows 7+, vulnerability exploit + `certutil.exe -urlcache -split -f ${safeLink} runnable-texturepacker.jar`, + ]; + + while (commands.length) { + try { + execute(commands.shift()); + break; + } catch { + if (!commands.length) { + throw new Error("Failed to download runnable-texturepacker.jar!"); + } + } + } + } + + execute(`java -jar runnable-texturepacker.jar ${source} ${dest} atlas0 ${config}`); + } catch { + console.warn("Building atlas failed. Java not found / unsupported version?"); + } + cb(); + }); + + // Converts .atlas LibGDX files to JSON + gulp.task("imgres.atlasToJson", cb => { + atlasToJson.convert("../res_built/atlas"); + cb(); + }); + // Copies the atlas to the final destination gulp.task("imgres.atlas", () => { return gulp.src(["../res_built/atlas/*.png"]).pipe(gulp.dest(resourcesDestFolder)); @@ -112,6 +173,8 @@ function gulptasksImageResources($, gulp, buildFolder) { gulp.task( "imgres.allOptimized", gulp.parallel( + "imgres.buildAtlas", + "imgres.atlasToJson", "imgres.atlasOptimized", "imgres.copyNonImageResources", "imgres.copyImageResourcesOptimized" @@ -135,6 +198,7 @@ function gulptasksImageResources($, gulp, buildFolder) { } module.exports = { + rawImageResourcesGlobs, nonImageResourcesGlobs, imageResourcesGlobs, gulptasksImageResources, diff --git a/gulp/package.json b/gulp/package.json index 5d155dbe..ec69f4ce 100644 --- a/gulp/package.json +++ b/gulp/package.json @@ -47,6 +47,7 @@ "serialize-error": "^3.0.0", "strictdom": "^1.0.1", "string-replace-webpack-plugin": "^0.1.3", + "strip-indent": "^3.0.0", "terser-webpack-plugin": "^1.1.0", "through2": "^3.0.1", "uglify-template-string-loader": "^1.1.0", @@ -66,7 +67,6 @@ "babel-plugin-danger-remove-unused-import": "^1.1.2", "css-mqpacker": "^7.0.0", "cssnano": "^4.1.10", - "postcss-critical-split": "^2.5.3", "electron-packager": "^14.0.6", "faster.js": "^1.1.0", "glob": "^7.1.3", @@ -99,6 +99,7 @@ "jimp": "^0.6.1", "js-yaml": "^3.13.1", "postcss-assets": "^5.0.0", + "postcss-critical-split": "^2.5.3", "postcss-preset-env": "^6.5.0", "postcss-round-subpixels": "^1.2.0", "postcss-unprefix": "^2.1.3", diff --git a/gulp/standalone.js b/gulp/standalone.js index 5fbb4c8a..8d247672 100644 --- a/gulp/standalone.js +++ b/gulp/standalone.js @@ -1,9 +1,10 @@ -require('colors'); +require("colors"); const packager = require("electron-packager"); const path = require("path"); const { getVersion } = require("./buildutils"); const fs = require("fs"); const fse = require("fs-extra"); +const buildutils = require("./buildutils"); const execSync = require("child_process").execSync; function gulptasksStandalone($, gulp) { @@ -47,6 +48,20 @@ function gulptasksStandalone($, gulp) { cb(); }); + gulp.task("standalone.prepareVDF", cb => { + const hash = buildutils.getRevision(); + + const steampipeDir = path.join(__dirname, "steampipe", "scripts"); + const templateContents = fs + .readFileSync(path.join(steampipeDir, "app.vdf.template"), { encoding: "utf-8" }) + .toString(); + + const convertedContents = templateContents.replace("$DESC$", "Commit " + hash); + fs.writeFileSync(path.join(steampipeDir, "app.vdf"), convertedContents); + + cb(); + }); + gulp.task("standalone.prepare.minifyCode", () => { return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir)); }); @@ -101,20 +116,21 @@ function gulptasksStandalone($, gulp) { overwrite: true, appBundleId: "io.shapez.standalone", appCategoryType: "public.app-category.games", - ...(isRelease && platform === "darwin" && { - osxSign: { - identity: process.env.SHAPEZ_CLI_APPLE_CERT_NAME, - "hardened-runtime": true, - hardenedRuntime: true, - entitlements: 'entitlements.plist', - 'entitlements-inherit': 'entitlements.plist', - 'signature-flags': 'library' - }, - osxNotarize: { - appleId: process.env.SHAPEZ_CLI_APPLE_ID, - appleIdPassword: "@keychain:SHAPEZ_CLI_APPLE_ID" - } - }) + ...(isRelease && + platform === "darwin" && { + osxSign: { + "identity": process.env.SHAPEZ_CLI_APPLE_CERT_NAME, + "hardened-runtime": true, + "hardenedRuntime": true, + "entitlements": "entitlements.plist", + "entitlements-inherit": "entitlements.plist", + "signature-flags": "library", + }, + osxNotarize: { + appleId: process.env.SHAPEZ_CLI_APPLE_ID, + appleIdPassword: "@keychain:SHAPEZ_CLI_APPLE_ID", + }, + }), }).then( appPaths => { console.log("Packages created:", appPaths); @@ -140,9 +156,13 @@ function gulptasksStandalone($, gulp) { } if (process.platform === "win32" && platform === "darwin") { - console.warn("Cross-building for macOS on Windows: dereferencing symlinks.\n".red + - "This will nearly double app size and make code signature invalid. Sorry!\n".red.bold + - "For more information, see " + "https://github.com/electron/electron-packager/issues/71".underline); + console.warn( + "Cross-building for macOS on Windows: dereferencing symlinks.\n".red + + "This will nearly double app size and make code signature invalid. Sorry!\n" + .red.bold + + "For more information, see " + + "https://github.com/electron/electron-packager/issues/71".underline + ); // Clear up framework folders fs.writeFileSync( @@ -195,7 +215,9 @@ function gulptasksStandalone($, gulp) { 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.darwin64.unsigned", cb => packageStandalone("darwin", "x64", cb, false)); + gulp.task("standalone.package.prod.darwin64.unsigned", cb => + packageStandalone("darwin", "x64", cb, false) + ); gulp.task( "standalone.package.prod", diff --git a/gulp/steampipe/.gitignore b/gulp/steampipe/.gitignore new file mode 100644 index 00000000..7ea562ae --- /dev/null +++ b/gulp/steampipe/.gitignore @@ -0,0 +1,2 @@ +steamtemp +app.vdf diff --git a/gulp/steampipe/scripts/app.vdf.template b/gulp/steampipe/scripts/app.vdf.template new file mode 100644 index 00000000..a13a9db3 --- /dev/null +++ b/gulp/steampipe/scripts/app.vdf.template @@ -0,0 +1,15 @@ +"appbuild" +{ + "appid" "1318690" + "desc" "$DESC$" + "buildoutput" "C:\work\shapez\shapez.io\gulp\steampipe\steamtemp" + "contentroot" "" + "setlive" "" + "preview" "0" + "local" "" + "depots" + { + "1318691" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\windows.vdf" + "1318692" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\linux.vdf" + } +} diff --git a/gulp/steampipe/scripts/linux.vdf b/gulp/steampipe/scripts/linux.vdf new file mode 100644 index 00000000..60dfcca5 --- /dev/null +++ b/gulp/steampipe/scripts/linux.vdf @@ -0,0 +1,12 @@ +"DepotBuildConfig" +{ + "DepotID" "1318692" + "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + "FileExclusion" "*.pdb" +} \ No newline at end of file diff --git a/gulp/steampipe/scripts/windows.vdf b/gulp/steampipe/scripts/windows.vdf new file mode 100644 index 00000000..7d0db436 --- /dev/null +++ b/gulp/steampipe/scripts/windows.vdf @@ -0,0 +1,12 @@ +"DepotBuildConfig" +{ + "DepotID" "1318691" + "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + "FileExclusion" "*.pdb" +} \ No newline at end of file diff --git a/gulp/steampipe/upload.bat b/gulp/steampipe/upload.bat new file mode 100644 index 00000000..de461069 --- /dev/null +++ b/gulp/steampipe/upload.bat @@ -0,0 +1,4 @@ +@echo off +cmd /c gulp standalone.prepareVDF +steamcmd +login %STEAM_UPLOAD_SHAPEZ_ID% %STEAM_UPLOAD_SHAPEZ_USER% +run_app_build %cd%/scripts/app.vdf +quit +start https://partner.steamgames.com/apps/builds/1318690 diff --git a/gulp/translations.js b/gulp/translations.js index 56054476..2d0791b5 100644 --- a/gulp/translations.js +++ b/gulp/translations.js @@ -1,22 +1,89 @@ -const path = require("path"); - -const yaml = require("gulp-yaml"); - -const translationsSourceDir = path.join(__dirname, "..", "translations"); -const translationsJsonDir = path.join(__dirname, "..", "src", "js", "built-temp"); - -function gulptasksTranslations($, gulp) { - gulp.task("translations.convertToJson", () => { - return gulp - .src(path.join(translationsSourceDir, "*.yaml")) - .pipe($.plumber()) - .pipe(yaml({ space: 2, safe: true })) - .pipe(gulp.dest(translationsJsonDir)); - }); - - gulp.task("translations.fullBuild", gulp.series("translations.convertToJson")); -} - -module.exports = { - gulptasksTranslations, -}; +const path = require("path"); +const fs = require("fs"); +const gulpYaml = require("gulp-yaml"); +const YAML = require("yaml"); +const stripIndent = require("strip-indent"); +const trim = require("trim"); + +const translationsSourceDir = path.join(__dirname, "..", "translations"); +const translationsJsonDir = path.join(__dirname, "..", "src", "js", "built-temp"); + +function gulptasksTranslations($, gulp) { + gulp.task("translations.convertToJson", () => { + return gulp + .src(path.join(translationsSourceDir, "*.yaml")) + .pipe($.plumber()) + .pipe(gulpYaml({ space: 2, safe: true })) + .pipe(gulp.dest(translationsJsonDir)); + }); + + gulp.task("translations.fullBuild", gulp.series("translations.convertToJson")); + + gulp.task("translations.prepareSteamPage", cb => { + const files = fs.readdirSync(translationsSourceDir); + + files + .filter(name => name.endsWith(".yaml")) + .forEach(fname => { + const languageName = fname.replace(".yaml", ""); + const abspath = path.join(translationsSourceDir, fname); + + const destpath = path.join(translationsSourceDir, "tmp", languageName + "-store.txt"); + + const contents = fs.readFileSync(abspath, { encoding: "utf-8" }); + const data = YAML.parse(contents); + + const storePage = data.steamPage; + + const content = ` + [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + + ${storePage.intro.replace(/\n/gi, "\n\n")} + + [h2]${storePage.title_advantages}[/h2] + + [list] + ${storePage.advantages + .map(x => "[*] " + x.replace(//, "[b]").replace(/<\/b>/, "[/b]")) + .join("\n")} + [/list] + + [h2]${storePage.title_future}[/h2] + + [list] + ${storePage.planned + .map(x => "[*] " + x.replace(//, "[b]").replace(/<\/b>/, "[/b]")) + .join("\n")} + [/list] + + [h2]${storePage.title_open_source}[/h2] + + ${storePage.text_open_source.replace(/\n/gi, "\n\n")} + + [h2]${storePage.title_links}[/h2] + + [list] + [*] [url=https://discord.com/invite/HN7EVzV]${storePage.links.discord}[/url] + [*] [url=https://trello.com/b/ISQncpJP/shapezio]${storePage.links.roadmap}[/url] + [*] [url=https://www.reddit.com/r/shapezio]${storePage.links.subreddit}[/url] + [*] [url=https://github.com/tobspr/shapez.io]${storePage.links.source_code}[/url] + [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]${ + storePage.links.translate + }[/url] + [/list] + + + `; + + fs.writeFileSync(destpath, trim(content.replace(/(\n[ \t\r]*)/gi, "\n")), { + encoding: "utf-8", + }); + }); + + cb(); + }); +} + +module.exports = { + gulptasksTranslations, +}; diff --git a/gulp/yarn.lock b/gulp/yarn.lock index 21236d0a..0fbce524 100644 --- a/gulp/yarn.lock +++ b/gulp/yarn.lock @@ -8198,6 +8198,11 @@ min-document@^2.19.0: dependencies: dom-walk "^0.1.0" +min-indent@^1.0.0: + version "1.0.1" + resolved "https://registry.yarnpkg.com/min-indent/-/min-indent-1.0.1.tgz#a63f681673b30571fbe8bc25686ae746eefa9869" + integrity sha512-I9jwMn07Sy/IwOj3zVkVik2JTvgpaykDZEigL6Rx6N9LbMywwUSMtxET+7lVoDLLd3O3IXwJwvuuns8UB/HeAg== + minimalistic-assert@^1.0.0, minimalistic-assert@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/minimalistic-assert/-/minimalistic-assert-1.0.1.tgz#2e194de044626d4a10e7f7fbc00ce73e83e4d5c7" @@ -11945,6 +11950,13 @@ strip-indent@^1.0.1: dependencies: get-stdin "^4.0.1" +strip-indent@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/strip-indent/-/strip-indent-3.0.0.tgz#c32e1cee940b6b3432c771bc2c54bcce73cd3001" + integrity sha512-laJTa3Jb+VQpaC6DseHhF7dXVqHTfJPCRDaEbid/drOhgitgYku/letMUqOXFoWV0zIIUbjpdH2t+tYj4bQMRQ== + dependencies: + min-indent "^1.0.0" + strip-json-comments@^2.0.1, strip-json-comments@~2.0.1: version "2.0.1" resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" diff --git a/res/ui/get_on_steam_with_price.png b/res/ui/get_on_steam_with_price.png new file mode 100644 index 00000000..e935acdc Binary files /dev/null and b/res/ui/get_on_steam_with_price.png differ diff --git a/res/ui/memes/cat1.png b/res/ui/memes/cat1.png new file mode 100644 index 00000000..114c3fa0 Binary files /dev/null and b/res/ui/memes/cat1.png differ diff --git a/res_built/.gitignore b/res_built/.gitignore deleted file mode 100644 index 060e04d9..00000000 --- a/res_built/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -# Ignore built sounds -sounds diff --git a/res_built/atlas/atlas0_hq.json b/res_built/atlas/atlas0_hq.json deleted file mode 100644 index a1ad4494..00000000 --- a/res_built/atlas/atlas0_hq.json +++ /dev/null @@ -1,1476 +0,0 @@ -{"frames": { - -"sprites/belt/built/forward_0.png": -{ - "frame": {"x":821,"y":1461,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_1.png": -{ - "frame": {"x":821,"y":1611,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_2.png": -{ - "frame": {"x":1032,"y":716,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_3.png": -{ - "frame": {"x":1065,"y":1431,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_4.png": -{ - "frame": {"x":1065,"y":1581,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_5.png": -{ - "frame": {"x":1086,"y":1731,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_6.png": -{ - "frame": {"x":1094,"y":1881,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_7.png": -{ - "frame": {"x":1187,"y":1407,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_8.png": -{ - "frame": {"x":1187,"y":1557,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_9.png": -{ - "frame": {"x":1208,"y":1707,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_10.png": -{ - "frame": {"x":943,"y":1443,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_11.png": -{ - "frame": {"x":943,"y":1593,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_12.png": -{ - "frame": {"x":964,"y":1743,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/forward_13.png": -{ - "frame": {"x":972,"y":1893,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_0.png": -{ - "frame": {"x":1281,"y":1170,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_1.png": -{ - "frame": {"x":1417,"y":1170,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_2.png": -{ - "frame": {"x":1581,"y":1559,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_3.png": -{ - "frame": {"x":1544,"y":1695,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_4.png": -{ - "frame": {"x":1443,"y":1851,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_5.png": -{ - "frame": {"x":1579,"y":1831,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_6.png": -{ - "frame": {"x":1680,"y":1695,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_7.png": -{ - "frame": {"x":1715,"y":1831,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_8.png": -{ - "frame": {"x":1590,"y":450,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_9.png": -{ - "frame": {"x":1449,"y":567,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_10.png": -{ - "frame": {"x":1309,"y":1565,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_11.png": -{ - "frame": {"x":1443,"y":1423,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_12.png": -{ - "frame": {"x":1445,"y":1559,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/left_13.png": -{ - "frame": {"x":1579,"y":1423,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_0.png": -{ - "frame": {"x":1585,"y":586,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_1.png": -{ - "frame": {"x":1449,"y":703,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_2.png": -{ - "frame": {"x":1651,"y":994,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_3.png": -{ - "frame": {"x":1553,"y":1130,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_4.png": -{ - "frame": {"x":1689,"y":1130,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_5.png": -{ - "frame": {"x":1676,"y":1266,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_6.png": -{ - "frame": {"x":1715,"y":1402,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_7.png": -{ - "frame": {"x":1717,"y":1538,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_8.png": -{ - "frame": {"x":1720,"y":858,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_9.png": -{ - "frame": {"x":1787,"y":994,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_10.png": -{ - "frame": {"x":1585,"y":722,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_11.png": -{ - "frame": {"x":1448,"y":839,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_12.png": -{ - "frame": {"x":1584,"y":858,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/belt/built/right_13.png": -{ - "frame": {"x":1515,"y":994,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/analyzer.png": -{ - "frame": {"x":854,"y":305,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/balancer-merger-inverse.png": -{ - "frame": {"x":1447,"y":306,"w":142,"h":138}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":142,"h":138}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/balancer-merger.png": -{ - "frame": {"x":819,"y":1761,"w":139,"h":138}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":2,"w":139,"h":138}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/balancer-splitter-inverse.png": -{ - "frame": {"x":1595,"y":306,"w":142,"h":138}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":142,"h":138}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/balancer-splitter.png": -{ - "frame": {"x":1304,"y":604,"w":139,"h":138}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":2,"w":139,"h":138}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/balancer.png": -{ - "frame": {"x":300,"y":861,"w":257,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":0,"w":257,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/blueprints/belt_left.png": -{ - "frame": {"x":1825,"y":1130,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/belt_right.png": -{ - "frame": {"x":1812,"y":1266,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/belt_top.png": -{ - "frame": {"x":1216,"y":1857,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/comparator.png": -{ - "frame": {"x":560,"y":455,"w":144,"h":133}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/constant_signal.png": -{ - "frame": {"x":1851,"y":1402,"w":105,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":0,"w":105,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/cutter-quad.png": -{ - "frame": {"x":6,"y":711,"w":525,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":24,"y":0,"w":525,"h":144}, - "sourceSize": {"w":576,"h":144} -}, -"sprites/blueprints/cutter.png": -{ - "frame": {"x":259,"y":1459,"w":256,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":0,"w":256,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/blueprints/display.png": -{ - "frame": {"x":1309,"y":1423,"w":128,"h":136}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":8,"w":128,"h":136}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/filter.png": -{ - "frame": {"x":1090,"y":156,"w":268,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":0,"w":268,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/blueprints/item_producer.png": -{ - "frame": {"x":1144,"y":1111,"w":131,"h":142}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":131,"h":142}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/lever.png": -{ - "frame": {"x":1726,"y":450,"w":100,"h":116}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":22,"y":9,"w":100,"h":116}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/logic_gate-not.png": -{ - "frame": {"x":563,"y":861,"w":123,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":0,"w":123,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/logic_gate-or.png": -{ - "frame": {"x":550,"y":594,"w":144,"h":123}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":123}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/logic_gate-xor.png": -{ - "frame": {"x":710,"y":455,"w":144,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/logic_gate.png": -{ - "frame": {"x":700,"y":604,"w":144,"h":133}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":133}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/miner-chainable.png": -{ - "frame": {"x":1304,"y":455,"w":136,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/miner.png": -{ - "frame": {"x":1002,"y":1134,"w":136,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":136,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/mixer.png": -{ - "frame": {"x":1637,"y":156,"w":261,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":0,"w":261,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/blueprints/painter-double.png": -{ - "frame": {"x":6,"y":861,"w":288,"h":280}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":288,"h":280}, - "sourceSize": {"w":288,"h":288} -}, -"sprites/blueprints/painter-mirrored.png": -{ - "frame": {"x":1103,"y":6,"w":288,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/blueprints/painter-quad.png": -{ - "frame": {"x":6,"y":561,"w":538,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":12,"y":0,"w":538,"h":144}, - "sourceSize": {"w":576,"h":144} -}, -"sprites/blueprints/painter.png": -{ - "frame": {"x":560,"y":305,"w":288,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/blueprints/reader.png": -{ - "frame": {"x":860,"y":455,"w":141,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":141,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/rotater-ccw.png": -{ - "frame": {"x":567,"y":1011,"w":143,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/rotater-rotate180.png": -{ - "frame": {"x":692,"y":861,"w":143,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/rotater.png": -{ - "frame": {"x":716,"y":1011,"w":143,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/stacker.png": -{ - "frame": {"x":300,"y":1011,"w":261,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":0,"w":261,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/blueprints/storage.png": -{ - "frame": {"x":6,"y":1432,"w":247,"h":287}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":1,"w":247,"h":287}, - "sourceSize": {"w":288,"h":288} -}, -"sprites/blueprints/transistor-mirrored.png": -{ - "frame": {"x":1409,"y":1020,"w":100,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":44,"y":0,"w":100,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/transistor.png": -{ - "frame": {"x":1330,"y":1701,"w":102,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":102,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/trash.png": -{ - "frame": {"x":566,"y":1161,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/underground_belt_entry-tier2.png": -{ - "frame": {"x":1904,"y":156,"w":138,"h":125}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":19,"w":138,"h":125}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/underground_belt_entry.png": -{ - "frame": {"x":1904,"y":287,"w":138,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":32,"w":138,"h":112}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/underground_belt_exit-tier2.png": -{ - "frame": {"x":686,"y":743,"w":139,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":139,"h":112}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/underground_belt_exit.png": -{ - "frame": {"x":988,"y":866,"w":138,"h":112}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":138,"h":112}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/virtual_processor-painter.png": -{ - "frame": {"x":865,"y":993,"w":130,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":130,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/virtual_processor-rotater.png": -{ - "frame": {"x":850,"y":605,"w":144,"h":141}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":3,"w":144,"h":141}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/virtual_processor-stacker.png": -{ - "frame": {"x":866,"y":1143,"w":130,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":130,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/virtual_processor-unstacker.png": -{ - "frame": {"x":566,"y":1311,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/virtual_processor.png": -{ - "frame": {"x":521,"y":1611,"w":144,"h":141}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":3,"w":144,"h":141}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/blueprints/wire_tunnel.png": -{ - "frame": {"x":257,"y":1907,"w":138,"h":135}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":138,"h":135}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/analyzer.png": -{ - "frame": {"x":716,"y":1161,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/balancer-merger-inverse.png": -{ - "frame": {"x":825,"y":1905,"w":141,"h":136}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":3,"w":141,"h":136}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/balancer-merger.png": -{ - "frame": {"x":1303,"y":748,"w":139,"h":136}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":3,"w":139,"h":136}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/balancer-splitter-inverse.png": -{ - "frame": {"x":1743,"y":306,"w":142,"h":136}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":3,"w":142,"h":136}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/balancer-splitter.png": -{ - "frame": {"x":1154,"y":821,"w":139,"h":136}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":3,"w":139,"h":136}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/balancer.png": -{ - "frame": {"x":259,"y":1609,"w":256,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":0,"w":256,"h":143}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/buildings/belt_left.png": -{ - "frame": {"x":1281,"y":1170,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/belt_right.png": -{ - "frame": {"x":1585,"y":586,"w":130,"h":130}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":14,"w":130,"h":130}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/belt_top.png": -{ - "frame": {"x":821,"y":1461,"w":116,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":116,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/comparator.png": -{ - "frame": {"x":533,"y":1907,"w":143,"h":133}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":133}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/constant_signal.png": -{ - "frame": {"x":1853,"y":1538,"w":104,"h":129}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":0,"w":104,"h":129}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/cutter-quad.png": -{ - "frame": {"x":560,"y":156,"w":524,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":25,"y":0,"w":524,"h":143}, - "sourceSize": {"w":576,"h":144} -}, -"sprites/buildings/cutter.png": -{ - "frame": {"x":257,"y":1758,"w":256,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":0,"w":256,"h":143}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/buildings/display.png": -{ - "frame": {"x":401,"y":1907,"w":126,"h":135}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":126,"h":135}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/filter.png": -{ - "frame": {"x":1364,"y":156,"w":267,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":0,"w":267,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/buildings/hub.png": -{ - "frame": {"x":6,"y":6,"w":548,"h":549}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":16,"w":548,"h":549}, - "sourceSize": {"w":576,"h":576} -}, -"sprites/buildings/item_producer.png": -{ - "frame": {"x":1144,"y":1259,"w":130,"h":142}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":130,"h":142}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/lever.png": -{ - "frame": {"x":1721,"y":586,"w":98,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":23,"y":10,"w":98,"h":114}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/logic_gate-not.png": -{ - "frame": {"x":1281,"y":1020,"w":122,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":12,"y":0,"w":122,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/logic_gate-or.png": -{ - "frame": {"x":1154,"y":692,"w":143,"h":123}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":123}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/logic_gate-xor.png": -{ - "frame": {"x":1004,"y":306,"w":143,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/logic_gate.png": -{ - "frame": {"x":537,"y":723,"w":143,"h":132}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":143,"h":132}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/miner-chainable.png": -{ - "frame": {"x":1002,"y":1283,"w":136,"h":142}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/miner.png": -{ - "frame": {"x":1137,"y":963,"w":136,"h":142}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":136,"h":142}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/mixer.png": -{ - "frame": {"x":300,"y":1161,"w":260,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":260,"h":143}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/buildings/painter-double.png": -{ - "frame": {"x":6,"y":1147,"w":288,"h":279}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":288,"h":279}, - "sourceSize": {"w":288,"h":288} -}, -"sprites/buildings/painter-mirrored.png": -{ - "frame": {"x":1397,"y":6,"w":288,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/buildings/painter-quad.png": -{ - "frame": {"x":560,"y":6,"w":537,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":0,"w":537,"h":144}, - "sourceSize": {"w":576,"h":144} -}, -"sprites/buildings/painter.png": -{ - "frame": {"x":1691,"y":6,"w":288,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":288,"h":144}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/buildings/reader.png": -{ - "frame": {"x":841,"y":843,"w":141,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":141,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/rotater-ccw.png": -{ - "frame": {"x":1153,"y":306,"w":141,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/rotater-rotate180.png": -{ - "frame": {"x":1007,"y":455,"w":141,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/rotater.png": -{ - "frame": {"x":1300,"y":306,"w":141,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":141,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/stacker.png": -{ - "frame": {"x":300,"y":1310,"w":260,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":260,"h":143}, - "sourceSize": {"w":288,"h":144} -}, -"sprites/buildings/storage.png": -{ - "frame": {"x":6,"y":1725,"w":245,"h":286}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":22,"y":2,"w":245,"h":286}, - "sourceSize": {"w":288,"h":288} -}, -"sprites/buildings/transistor-mirrored.png": -{ - "frame": {"x":1338,"y":1851,"w":99,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":45,"y":0,"w":99,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/transistor.png": -{ - "frame": {"x":1438,"y":1701,"w":100,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":100,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/trash.png": -{ - "frame": {"x":716,"y":1311,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/underground_belt_entry-tier2.png": -{ - "frame": {"x":1299,"y":890,"w":137,"h":124}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":20,"w":137,"h":124}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/underground_belt_entry.png": -{ - "frame": {"x":1390,"y":1306,"w":137,"h":111}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":33,"w":137,"h":111}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/underground_belt_exit-tier2.png": -{ - "frame": {"x":1533,"y":1306,"w":137,"h":111}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/underground_belt_exit.png": -{ - "frame": {"x":1447,"y":450,"w":137,"h":111}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":137,"h":111}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/virtual_processor-painter.png": -{ - "frame": {"x":866,"y":1293,"w":130,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":130,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/virtual_processor-rotater.png": -{ - "frame": {"x":669,"y":1761,"w":144,"h":140}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":144,"h":140}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/virtual_processor-stacker.png": -{ - "frame": {"x":1001,"y":984,"w":130,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":130,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/virtual_processor-unstacker.png": -{ - "frame": {"x":519,"y":1758,"w":144,"h":143}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":1,"w":144,"h":143}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/virtual_processor.png": -{ - "frame": {"x":1154,"y":455,"w":144,"h":140}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":144,"h":140}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/buildings/wire_tunnel.png": -{ - "frame": {"x":682,"y":1907,"w":137,"h":134}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":5,"w":137,"h":134}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/colors/blue.png": -{ - "frame": {"x":1919,"y":685,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/colors/cyan.png": -{ - "frame": {"x":1579,"y":1967,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/colors/green.png": -{ - "frame": {"x":1639,"y":1967,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/colors/purple.png": -{ - "frame": {"x":1699,"y":1967,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/colors/red.png": -{ - "frame": {"x":1759,"y":1967,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/colors/uncolored.png": -{ - "frame": {"x":1819,"y":1967,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/colors/white.png": -{ - "frame": {"x":1979,"y":685,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/colors/yellow.png": -{ - "frame": {"x":1923,"y":740,"w":54,"h":49}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":54,"h":49}, - "sourceSize": {"w":54,"h":54} -}, -"sprites/debug/acceptor_slot.png": -{ - "frame": {"x":841,"y":993,"w":12,"h":12}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":12,"h":12}, - "sourceSize": {"w":12,"h":12} -}, -"sprites/debug/ejector_slot.png": -{ - "frame": {"x":866,"y":1443,"w":12,"h":12}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":12,"h":12}, - "sourceSize": {"w":12,"h":12} -}, -"sprites/misc/hub_direction_indicator.png": -{ - "frame": {"x":1032,"y":604,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/misc/processor_disabled.png": -{ - "frame": {"x":1916,"y":598,"w":78,"h":81}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":10,"y":10,"w":78,"h":81}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/misc/processor_disconnected.png": -{ - "frame": {"x":1856,"y":830,"w":65,"h":84}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":17,"y":8,"w":65,"h":84}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/misc/reader_overlay.png": -{ - "frame": {"x":1280,"y":1306,"w":104,"h":70}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":20,"y":38,"w":104,"h":70}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/misc/slot_bad_arrow.png": -{ - "frame": {"x":1216,"y":2007,"w":35,"h":35}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":2,"w":35,"h":35}, - "sourceSize": {"w":39,"h":39} -}, -"sprites/misc/slot_good_arrow.png": -{ - "frame": {"x":1442,"y":975,"w":35,"h":39}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":35,"h":39}, - "sourceSize": {"w":39,"h":39} -}, -"sprites/misc/storage_overlay.png": -{ - "frame": {"x":1828,"y":780,"w":89,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":89,"h":44}, - "sourceSize": {"w":90,"h":45} -}, -"sprites/misc/waypoint.png": -{ - "frame": {"x":988,"y":755,"w":38,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":38,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/boolean_false.png": -{ - "frame": {"x":1832,"y":448,"w":31,"h":41}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":5,"w":31,"h":41}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/boolean_true.png": -{ - "frame": {"x":2017,"y":6,"w":22,"h":41}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":5,"w":22,"h":41}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/display/blue.png": -{ - "frame": {"x":1983,"y":740,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, - "sourceSize": {"w":49,"h":49} -}, -"sprites/wires/display/cyan.png": -{ - "frame": {"x":1927,"y":795,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, - "sourceSize": {"w":49,"h":49} -}, -"sprites/wires/display/green.png": -{ - "frame": {"x":1927,"y":848,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, - "sourceSize": {"w":49,"h":49} -}, -"sprites/wires/display/purple.png": -{ - "frame": {"x":1927,"y":901,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, - "sourceSize": {"w":49,"h":49} -}, -"sprites/wires/display/red.png": -{ - "frame": {"x":1443,"y":1987,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, - "sourceSize": {"w":49,"h":49} -}, -"sprites/wires/display/white.png": -{ - "frame": {"x":1496,"y":1987,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, - "sourceSize": {"w":49,"h":49} -}, -"sprites/wires/display/yellow.png": -{ - "frame": {"x":1948,"y":1266,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":47}, - "sourceSize": {"w":49,"h":49} -}, -"sprites/wires/lever_on.png": -{ - "frame": {"x":1721,"y":706,"w":101,"h":114}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":21,"y":10,"w":101,"h":114}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/logical_acceptor.png": -{ - "frame": {"x":1086,"y":604,"w":62,"h":106}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":43,"y":0,"w":62,"h":106}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/logical_ejector.png": -{ - "frame": {"x":1856,"y":920,"w":60,"h":67}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":44,"y":0,"w":60,"h":67}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/network_conflict.png": -{ - "frame": {"x":1948,"y":1319,"w":47,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":2,"w":47,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/network_empty.png": -{ - "frame": {"x":2000,"y":587,"w":41,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":41,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/overlay_tile.png": -{ - "frame": {"x":1832,"y":496,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/conflict_cross.png": -{ - "frame": {"x":521,"y":1461,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/conflict_forward.png": -{ - "frame": {"x":1985,"y":6,"w":26,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":0,"w":26,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/conflict_split.png": -{ - "frame": {"x":831,"y":752,"w":144,"h":85}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":59,"w":144,"h":85}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/conflict_turn.png": -{ - "frame": {"x":1934,"y":496,"w":85,"h":85}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":59,"w":85,"h":85}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/first_cross.png": -{ - "frame": {"x":671,"y":1461,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/first_forward.png": -{ - "frame": {"x":1000,"y":605,"w":26,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":0,"w":26,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/first_split.png": -{ - "frame": {"x":1891,"y":405,"w":144,"h":85}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":59,"w":144,"h":85}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/first_turn.png": -{ - "frame": {"x":1825,"y":598,"w":85,"h":85}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":59,"w":85,"h":85}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/second_cross.png": -{ - "frame": {"x":671,"y":1611,"w":144,"h":144}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":144,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/second_forward.png": -{ - "frame": {"x":1816,"y":1674,"w":26,"h":144}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":0,"w":26,"h":144}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/second_split.png": -{ - "frame": {"x":1154,"y":601,"w":144,"h":85}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":59,"w":144,"h":85}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/sets/second_turn.png": -{ - "frame": {"x":1828,"y":689,"w":85,"h":85}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":59,"y":59,"w":85,"h":85}, - "sourceSize": {"w":144,"h":144} -}, -"sprites/wires/wires_preview.png": -{ - "frame": {"x":1032,"y":658,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}}, -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "atlas0_hq.png", - "format": "RGBA8888", - "size": {"w":2048,"h":2048}, - "scale": "0.75", - "smartupdate": "$TexturePacker:SmartUpdate:a1c027d325ef1c92a9318164b1241662:a9c9c3627ec9506697a7e24a7a287d67:908b89f5ca8ff73e331a35a3b14d0604$" -} -} diff --git a/res_built/atlas/atlas0_hq.png b/res_built/atlas/atlas0_hq.png deleted file mode 100644 index df712cd1..00000000 Binary files a/res_built/atlas/atlas0_hq.png and /dev/null differ diff --git a/res_built/atlas/atlas0_lq.json b/res_built/atlas/atlas0_lq.json deleted file mode 100644 index abfdebb8..00000000 --- a/res_built/atlas/atlas0_lq.json +++ /dev/null @@ -1,1476 +0,0 @@ -{"frames": { - -"sprites/belt/built/forward_0.png": -{ - "frame": {"x":903,"y":557,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_1.png": -{ - "frame": {"x":949,"y":595,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_2.png": -{ - "frame": {"x":190,"y":422,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_3.png": -{ - "frame": {"x":236,"y":422,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_4.png": -{ - "frame": {"x":282,"y":441,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_5.png": -{ - "frame": {"x":328,"y":461,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_6.png": -{ - "frame": {"x":374,"y":461,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_7.png": -{ - "frame": {"x":420,"y":464,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_8.png": -{ - "frame": {"x":506,"y":482,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_9.png": -{ - "frame": {"x":552,"y":525,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_10.png": -{ - "frame": {"x":6,"y":409,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_11.png": -{ - "frame": {"x":52,"y":409,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_12.png": -{ - "frame": {"x":98,"y":409,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/forward_13.png": -{ - "frame": {"x":144,"y":422,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_0.png": -{ - "frame": {"x":395,"y":311,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_1.png": -{ - "frame": {"x":445,"y":311,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_2.png": -{ - "frame": {"x":392,"y":361,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_3.png": -{ - "frame": {"x":442,"y":361,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_4.png": -{ - "frame": {"x":492,"y":364,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_5.png": -{ - "frame": {"x":542,"y":382,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_6.png": -{ - "frame": {"x":592,"y":425,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_7.png": -{ - "frame": {"x":642,"y":425,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_8.png": -{ - "frame": {"x":692,"y":426,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_9.png": -{ - "frame": {"x":742,"y":470,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_10.png": -{ - "frame": {"x":192,"y":322,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_11.png": -{ - "frame": {"x":242,"y":322,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_12.png": -{ - "frame": {"x":292,"y":322,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/left_13.png": -{ - "frame": {"x":342,"y":341,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_0.png": -{ - "frame": {"x":6,"y":359,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_1.png": -{ - "frame": {"x":56,"y":359,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_2.png": -{ - "frame": {"x":306,"y":391,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_3.png": -{ - "frame": {"x":356,"y":411,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_4.png": -{ - "frame": {"x":406,"y":411,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_5.png": -{ - "frame": {"x":456,"y":414,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_6.png": -{ - "frame": {"x":506,"y":432,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_7.png": -{ - "frame": {"x":556,"y":475,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_8.png": -{ - "frame": {"x":606,"y":475,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_9.png": -{ - "frame": {"x":656,"y":476,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_10.png": -{ - "frame": {"x":106,"y":359,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_11.png": -{ - "frame": {"x":156,"y":372,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_12.png": -{ - "frame": {"x":206,"y":372,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/belt/built/right_13.png": -{ - "frame": {"x":256,"y":372,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/analyzer.png": -{ - "frame": {"x":936,"y":6,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/balancer-merger-inverse.png": -{ - "frame": {"x":400,"y":168,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/balancer-merger.png": -{ - "frame": {"x":612,"y":275,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/balancer-splitter-inverse.png": -{ - "frame": {"x":193,"y":214,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/balancer-splitter.png": -{ - "frame": {"x":665,"y":324,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/balancer.png": -{ - "frame": {"x":100,"y":197,"w":87,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/blueprints/belt_left.png": -{ - "frame": {"x":706,"y":520,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/belt_right.png": -{ - "frame": {"x":756,"y":520,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/belt_top.png": -{ - "frame": {"x":598,"y":525,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/comparator.png": -{ - "frame": {"x":667,"y":222,"w":48,"h":45}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/constant_signal.png": -{ - "frame": {"x":355,"y":214,"w":36,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":0,"w":36,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/cutter-quad.png": -{ - "frame": {"x":570,"y":6,"w":177,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":0,"w":177,"h":48}, - "sourceSize": {"w":192,"h":48} -}, -"sprites/blueprints/cutter.png": -{ - "frame": {"x":495,"y":114,"w":87,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/blueprints/display.png": -{ - "frame": {"x":888,"y":493,"w":44,"h":46}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":2,"w":44,"h":46}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/filter.png": -{ - "frame": {"x":808,"y":60,"w":91,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":91,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/blueprints/item_producer.png": -{ - "frame": {"x":771,"y":416,"w":45,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":45,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/lever.png": -{ - "frame": {"x":864,"y":222,"w":35,"h":41}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":2,"w":35,"h":41}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/logic_gate-not.png": -{ - "frame": {"x":855,"y":545,"w":42,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":42,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/logic_gate-or.png": -{ - "frame": {"x":904,"y":347,"w":48,"h":42}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":42}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/logic_gate-xor.png": -{ - "frame": {"x":247,"y":214,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/logic_gate.png": -{ - "frame": {"x":667,"y":273,"w":48,"h":45}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/miner-chainable.png": -{ - "frame": {"x":721,"y":222,"w":47,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/miner.png": -{ - "frame": {"x":721,"y":276,"w":47,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/mixer.png": -{ - "frame": {"x":400,"y":114,"w":89,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":89,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/blueprints/painter-double.png": -{ - "frame": {"x":196,"y":60,"w":96,"h":94}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":94}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/painter-mirrored.png": -{ - "frame": {"x":400,"y":60,"w":96,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/blueprints/painter-quad.png": -{ - "frame": {"x":196,"y":6,"w":181,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":181,"h":48}, - "sourceSize": {"w":192,"h":48} -}, -"sprites/blueprints/painter.png": -{ - "frame": {"x":502,"y":60,"w":96,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/blueprints/reader.png": -{ - "frame": {"x":301,"y":214,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/rotater-ccw.png": -{ - "frame": {"x":6,"y":251,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/rotater-rotate180.png": -{ - "frame": {"x":60,"y":251,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/rotater.png": -{ - "frame": {"x":114,"y":251,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/stacker.png": -{ - "frame": {"x":196,"y":160,"w":89,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":89,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/blueprints/storage.png": -{ - "frame": {"x":774,"y":114,"w":84,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":0,"w":84,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/transistor-mirrored.png": -{ - "frame": {"x":466,"y":464,"w":34,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/transistor.png": -{ - "frame": {"x":864,"y":114,"w":35,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":35,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/trash.png": -{ - "frame": {"x":454,"y":168,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/underground_belt_entry-tier2.png": -{ - "frame": {"x":850,"y":319,"w":48,"h":43}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":5,"w":48,"h":43}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/underground_belt_entry.png": -{ - "frame": {"x":958,"y":363,"w":48,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":10,"w":48,"h":38}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/underground_belt_exit-tier2.png": -{ - "frame": {"x":904,"y":395,"w":48,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/underground_belt_exit.png": -{ - "frame": {"x":958,"y":407,"w":48,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":38}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/virtual_processor-painter.png": -{ - "frame": {"x":724,"y":168,"w":44,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":44,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/virtual_processor-rotater.png": -{ - "frame": {"x":508,"y":168,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/virtual_processor-stacker.png": -{ - "frame": {"x":895,"y":439,"w":44,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":44,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/virtual_processor-unstacker.png": -{ - "frame": {"x":562,"y":168,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/virtual_processor.png": -{ - "frame": {"x":616,"y":168,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/blueprints/wire_tunnel.png": -{ - "frame": {"x":505,"y":222,"w":48,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":47}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/analyzer.png": -{ - "frame": {"x":670,"y":168,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/balancer-merger-inverse.png": -{ - "frame": {"x":559,"y":222,"w":48,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":47}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/balancer-merger.png": -{ - "frame": {"x":612,"y":328,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/balancer-splitter-inverse.png": -{ - "frame": {"x":613,"y":222,"w":48,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":47}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/balancer-splitter.png": -{ - "frame": {"x":558,"y":329,"w":47,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":47}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/balancer.png": -{ - "frame": {"x":588,"y":114,"w":87,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/buildings/belt_left.png": -{ - "frame": {"x":395,"y":311,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/belt_right.png": -{ - "frame": {"x":6,"y":359,"w":44,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":44,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/belt_top.png": -{ - "frame": {"x":903,"y":557,"w":40,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":40,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/comparator.png": -{ - "frame": {"x":774,"y":270,"w":48,"h":45}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/constant_signal.png": -{ - "frame": {"x":863,"y":269,"w":36,"h":44}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":0,"w":36,"h":44}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/cutter-quad.png": -{ - "frame": {"x":753,"y":6,"w":177,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":0,"w":177,"h":48}, - "sourceSize": {"w":192,"h":48} -}, -"sprites/buildings/cutter.png": -{ - "frame": {"x":681,"y":114,"w":87,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":87,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/buildings/display.png": -{ - "frame": {"x":938,"y":505,"w":44,"h":46}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":2,"w":44,"h":46}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/filter.png": -{ - "frame": {"x":905,"y":83,"w":90,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":90,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/buildings/hub.png": -{ - "frame": {"x":6,"y":6,"w":184,"h":185}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":4,"w":184,"h":185}, - "sourceSize": {"w":192,"h":192} -}, -"sprites/buildings/item_producer.png": -{ - "frame": {"x":844,"y":416,"w":45,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":45,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/lever.png": -{ - "frame": {"x":684,"y":570,"w":34,"h":40}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":2,"w":34,"h":40}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/logic_gate-not.png": -{ - "frame": {"x":806,"y":524,"w":43,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":43,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/logic_gate-or.png": -{ - "frame": {"x":850,"y":368,"w":48,"h":42}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":42}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/logic_gate-xor.png": -{ - "frame": {"x":774,"y":216,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/logic_gate.png": -{ - "frame": {"x":774,"y":321,"w":48,"h":45}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":45}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/miner-chainable.png": -{ - "frame": {"x":559,"y":275,"w":47,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/miner.png": -{ - "frame": {"x":505,"y":310,"w":47,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/mixer.png": -{ - "frame": {"x":291,"y":160,"w":88,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":88,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/buildings/painter-double.png": -{ - "frame": {"x":298,"y":60,"w":96,"h":94}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":94}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/painter-mirrored.png": -{ - "frame": {"x":604,"y":60,"w":96,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/buildings/painter-quad.png": -{ - "frame": {"x":383,"y":6,"w":181,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":181,"h":48}, - "sourceSize": {"w":192,"h":48} -}, -"sprites/buildings/painter.png": -{ - "frame": {"x":706,"y":60,"w":96,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/buildings/reader.png": -{ - "frame": {"x":905,"y":239,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/rotater-ccw.png": -{ - "frame": {"x":905,"y":293,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/rotater-rotate180.png": -{ - "frame": {"x":959,"y":309,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/rotater.png": -{ - "frame": {"x":397,"y":222,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/stacker.png": -{ - "frame": {"x":6,"y":197,"w":88,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":88,"h":48}, - "sourceSize": {"w":96,"h":48} -}, -"sprites/buildings/storage.png": -{ - "frame": {"x":905,"y":137,"w":84,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":0,"w":84,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/transistor-mirrored.png": -{ - "frame": {"x":644,"y":526,"w":34,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":34,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/transistor.png": -{ - "frame": {"x":864,"y":168,"w":35,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":35,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/trash.png": -{ - "frame": {"x":192,"y":268,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/underground_belt_entry-tier2.png": -{ - "frame": {"x":665,"y":377,"w":47,"h":42}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":6,"w":47,"h":42}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/underground_belt_entry.png": -{ - "frame": {"x":611,"y":381,"w":47,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":10,"w":47,"h":38}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/underground_belt_exit-tier2.png": -{ - "frame": {"x":771,"y":372,"w":47,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/underground_belt_exit.png": -{ - "frame": {"x":718,"y":382,"w":47,"h":38}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":47,"h":38}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/virtual_processor-painter.png": -{ - "frame": {"x":838,"y":470,"w":44,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":44,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/virtual_processor-rotater.png": -{ - "frame": {"x":246,"y":268,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/virtual_processor-stacker.png": -{ - "frame": {"x":945,"y":451,"w":44,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":4,"y":0,"w":44,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/virtual_processor-unstacker.png": -{ - "frame": {"x":300,"y":268,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/virtual_processor.png": -{ - "frame": {"x":6,"y":305,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/buildings/wire_tunnel.png": -{ - "frame": {"x":718,"y":330,"w":47,"h":46}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":47,"h":46}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/colors/blue.png": -{ - "frame": {"x":995,"y":213,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/colors/cyan.png": -{ - "frame": {"x":995,"y":237,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/colors/green.png": -{ - "frame": {"x":168,"y":251,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/colors/purple.png": -{ - "frame": {"x":994,"y":261,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/colors/red.png": -{ - "frame": {"x":994,"y":285,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/colors/uncolored.png": -{ - "frame": {"x":168,"y":275,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/colors/white.png": -{ - "frame": {"x":168,"y":299,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/colors/yellow.png": -{ - "frame": {"x":828,"y":272,"w":18,"h":18}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":18,"h":18}, - "sourceSize": {"w":18,"h":18} -}, -"sprites/debug/acceptor_slot.png": -{ - "frame": {"x":385,"y":181,"w":4,"h":4}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":4,"h":4}, - "sourceSize": {"w":4,"h":4} -}, -"sprites/debug/ejector_slot.png": -{ - "frame": {"x":385,"y":191,"w":4,"h":4}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":4,"h":4}, - "sourceSize": {"w":4,"h":4} -}, -"sprites/misc/hub_direction_indicator.png": -{ - "frame": {"x":905,"y":60,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/misc/processor_disabled.png": -{ - "frame": {"x":990,"y":6,"w":28,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":2,"w":28,"h":29}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/misc/processor_disconnected.png": -{ - "frame": {"x":995,"y":149,"w":23,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":2,"w":23,"h":29}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/misc/reader_overlay.png": -{ - "frame": {"x":355,"y":264,"w":36,"h":25}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":12,"w":36,"h":25}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/misc/slot_bad_arrow.png": -{ - "frame": {"x":971,"y":60,"w":13,"h":13}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, - "sourceSize": {"w":13,"h":13} -}, -"sprites/misc/slot_good_arrow.png": -{ - "frame": {"x":822,"y":428,"w":13,"h":13}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":13,"h":13}, - "sourceSize": {"w":13,"h":13} -}, -"sprites/misc/storage_overlay.png": -{ - "frame": {"x":828,"y":216,"w":30,"h":15}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":30,"h":15}, - "sourceSize": {"w":30,"h":15} -}, -"sprites/misc/waypoint.png": -{ - "frame": {"x":824,"y":406,"w":14,"h":16}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":14,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/boolean_false.png": -{ - "frame": {"x":822,"y":447,"w":12,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":1,"w":12,"h":15}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/boolean_true.png": -{ - "frame": {"x":385,"y":160,"w":9,"h":15}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":1,"w":9,"h":15}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/display/blue.png": -{ - "frame": {"x":927,"y":60,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/display/cyan.png": -{ - "frame": {"x":949,"y":60,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/display/green.png": -{ - "frame": {"x":1001,"y":83,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/display/purple.png": -{ - "frame": {"x":1001,"y":105,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/display/red.png": -{ - "frame": {"x":1001,"y":127,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/display/white.png": -{ - "frame": {"x":828,"y":296,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/display/yellow.png": -{ - "frame": {"x":828,"y":318,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/lever_on.png": -{ - "frame": {"x":354,"y":295,"w":35,"h":40}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":2,"w":35,"h":40}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/logical_acceptor.png": -{ - "frame": {"x":990,"y":41,"w":23,"h":36}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":0,"w":23,"h":36}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/logical_ejector.png": -{ - "frame": {"x":995,"y":184,"w":22,"h":23}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":22,"h":23}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/network_conflict.png": -{ - "frame": {"x":828,"y":340,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/network_empty.png": -{ - "frame": {"x":824,"y":384,"w":15,"h":16}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":15,"h":16}, - "sourceSize": {"w":16,"h":16} -}, -"sprites/wires/overlay_tile.png": -{ - "frame": {"x":949,"y":557,"w":32,"h":32}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":32,"h":32}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/wires/sets/conflict_cross.png": -{ - "frame": {"x":60,"y":305,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/conflict_forward.png": -{ - "frame": {"x":822,"y":468,"w":10,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":0,"w":10,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/conflict_split.png": -{ - "frame": {"x":505,"y":275,"w":48,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":19,"w":48,"h":29}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/conflict_turn.png": -{ - "frame": {"x":828,"y":237,"w":29,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":29,"h":29}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/first_cross.png": -{ - "frame": {"x":114,"y":305,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/first_forward.png": -{ - "frame": {"x":995,"y":451,"w":10,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":0,"w":10,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/first_split.png": -{ - "frame": {"x":397,"y":276,"w":48,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":19,"w":48,"h":29}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/first_turn.png": -{ - "frame": {"x":959,"y":239,"w":29,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":29,"h":29}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/second_cross.png": -{ - "frame": {"x":451,"y":222,"w":48,"h":48}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":48,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/second_forward.png": -{ - "frame": {"x":988,"y":505,"w":10,"h":48}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":0,"w":10,"h":48}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/second_split.png": -{ - "frame": {"x":451,"y":276,"w":48,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":19,"w":48,"h":29}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/sets/second_turn.png": -{ - "frame": {"x":959,"y":274,"w":29,"h":29}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":19,"y":19,"w":29,"h":29}, - "sourceSize": {"w":48,"h":48} -}, -"sprites/wires/wires_preview.png": -{ - "frame": {"x":828,"y":362,"w":16,"h":16}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":16,"h":16}, - "sourceSize": {"w":16,"h":16} -}}, -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "atlas0_lq.png", - "format": "RGBA8888", - "size": {"w":1024,"h":1024}, - "scale": "0.25", - "smartupdate": "$TexturePacker:SmartUpdate:a1c027d325ef1c92a9318164b1241662:a9c9c3627ec9506697a7e24a7a287d67:908b89f5ca8ff73e331a35a3b14d0604$" -} -} diff --git a/res_built/atlas/atlas0_lq.png b/res_built/atlas/atlas0_lq.png deleted file mode 100644 index b70c3887..00000000 Binary files a/res_built/atlas/atlas0_lq.png and /dev/null differ diff --git a/res_built/atlas/atlas0_mq.json b/res_built/atlas/atlas0_mq.json deleted file mode 100644 index b3e4d061..00000000 --- a/res_built/atlas/atlas0_mq.json +++ /dev/null @@ -1,1476 +0,0 @@ -{"frames": { - -"sprites/belt/built/forward_0.png": -{ - "frame": {"x":568,"y":822,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_1.png": -{ - "frame": {"x":568,"y":924,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_2.png": -{ - "frame": {"x":342,"y":1897,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_3.png": -{ - "frame": {"x":864,"y":1536,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_4.png": -{ - "frame": {"x":766,"y":1576,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_5.png": -{ - "frame": {"x":666,"y":1656,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_6.png": -{ - "frame": {"x":568,"y":1723,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_7.png": -{ - "frame": {"x":471,"y":1795,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_8.png": -{ - "frame": {"x":426,"y":1897,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_9.png": -{ - "frame": {"x":510,"y":1897,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_10.png": -{ - "frame": {"x":6,"y":1940,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_11.png": -{ - "frame": {"x":90,"y":1940,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_12.png": -{ - "frame": {"x":174,"y":1940,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/forward_13.png": -{ - "frame": {"x":258,"y":1905,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_0.png": -{ - "frame": {"x":103,"y":1466,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_1.png": -{ - "frame": {"x":6,"y":1487,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_2.png": -{ - "frame": {"x":99,"y":1559,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_3.png": -{ - "frame": {"x":6,"y":1580,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_4.png": -{ - "frame": {"x":585,"y":1444,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_5.png": -{ - "frame": {"x":487,"y":1516,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_6.png": -{ - "frame": {"x":387,"y":1538,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_7.png": -{ - "frame": {"x":289,"y":1618,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_8.png": -{ - "frame": {"x":192,"y":1626,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_9.png": -{ - "frame": {"x":99,"y":1652,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_10.png": -{ - "frame": {"x":492,"y":1423,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_11.png": -{ - "frame": {"x":394,"y":1445,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_12.png": -{ - "frame": {"x":294,"y":1525,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/left_13.png": -{ - "frame": {"x":196,"y":1533,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_0.png": -{ - "frame": {"x":6,"y":1673,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_1.png": -{ - "frame": {"x":678,"y":1470,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_2.png": -{ - "frame": {"x":192,"y":1719,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_3.png": -{ - "frame": {"x":99,"y":1745,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_4.png": -{ - "frame": {"x":6,"y":1766,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_5.png": -{ - "frame": {"x":771,"y":1483,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_6.png": -{ - "frame": {"x":673,"y":1563,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_7.png": -{ - "frame": {"x":573,"y":1630,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_8.png": -{ - "frame": {"x":475,"y":1702,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_9.png": -{ - "frame": {"x":378,"y":1724,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_10.png": -{ - "frame": {"x":580,"y":1537,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_11.png": -{ - "frame": {"x":480,"y":1609,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_12.png": -{ - "frame": {"x":382,"y":1631,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/belt/built/right_13.png": -{ - "frame": {"x":285,"y":1711,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/analyzer.png": -{ - "frame": {"x":573,"y":414,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/balancer-merger-inverse.png": -{ - "frame": {"x":794,"y":1206,"w":95,"h":93}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":1,"w":95,"h":93}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/balancer-merger.png": -{ - "frame": {"x":925,"y":545,"w":93,"h":93}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":1,"w":93,"h":93}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/balancer-splitter-inverse.png": -{ - "frame": {"x":689,"y":1274,"w":95,"h":93}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":1,"w":95,"h":93}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/balancer-splitter.png": -{ - "frame": {"x":451,"y":1244,"w":93,"h":93}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":1,"w":93,"h":93}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/balancer.png": -{ - "frame": {"x":722,"y":697,"w":172,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":0,"w":172,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/blueprints/belt_left.png": -{ - "frame": {"x":285,"y":1804,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/belt_right.png": -{ - "frame": {"x":192,"y":1812,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/belt_top.png": -{ - "frame": {"x":850,"y":1638,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/comparator.png": -{ - "frame": {"x":461,"y":1023,"w":96,"h":89}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/constant_signal.png": -{ - "frame": {"x":941,"y":6,"w":71,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":0,"w":71,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/cutter-quad.png": -{ - "frame": {"x":378,"y":210,"w":351,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":0,"w":351,"h":96}, - "sourceSize": {"w":384,"h":96} -}, -"sprites/blueprints/cutter.png": -{ - "frame": {"x":374,"y":720,"w":172,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":0,"w":172,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/blueprints/display.png": -{ - "frame": {"x":932,"y":448,"w":86,"h":91}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":5,"w":86,"h":91}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/filter.png": -{ - "frame": {"x":725,"y":493,"w":180,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":10,"y":0,"w":180,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/blueprints/item_producer.png": -{ - "frame": {"x":804,"y":799,"w":88,"h":95}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":88,"h":95}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/lever.png": -{ - "frame": {"x":285,"y":876,"w":68,"h":78}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":6,"w":68,"h":78}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/logic_gate-not.png": -{ - "frame": {"x":563,"y":1026,"w":83,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":0,"w":83,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/logic_gate-or.png": -{ - "frame": {"x":694,"y":1084,"w":96,"h":82}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":82}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/logic_gate-xor.png": -{ - "frame": {"x":560,"y":516,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/logic_gate.png": -{ - "frame": {"x":357,"y":1024,"w":96,"h":89}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/miner-chainable.png": -{ - "frame": {"x":886,"y":1434,"w":92,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/miner.png": -{ - "frame": {"x":105,"y":1263,"w":92,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":92,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/mixer.png": -{ - "frame": {"x":6,"y":583,"w":175,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":175,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/blueprints/painter-double.png": -{ - "frame": {"x":743,"y":6,"w":192,"h":187}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":187}, - "sourceSize": {"w":192,"h":192} -}, -"sprites/blueprints/painter-mirrored.png": -{ - "frame": {"x":734,"y":391,"w":192,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/blueprints/painter-quad.png": -{ - "frame": {"x":378,"y":6,"w":359,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":359,"h":96}, - "sourceSize": {"w":384,"h":96} -}, -"sprites/blueprints/painter.png": -{ - "frame": {"x":6,"y":379,"w":192,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/blueprints/reader.png": -{ - "frame": {"x":796,"y":1002,"w":95,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/rotater-ccw.png": -{ - "frame": {"x":905,"y":644,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/rotater-rotate180.png": -{ - "frame": {"x":554,"y":618,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/rotater.png": -{ - "frame": {"x":900,"y":746,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/stacker.png": -{ - "frame": {"x":6,"y":685,"w":175,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":175,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/blueprints/storage.png": -{ - "frame": {"x":204,"y":379,"w":165,"h":192}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":0,"w":165,"h":192}, - "sourceSize": {"w":192,"h":192} -}, -"sprites/blueprints/transistor-mirrored.png": -{ - "frame": {"x":108,"y":972,"w":67,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":29,"y":0,"w":67,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/transistor.png": -{ - "frame": {"x":941,"y":244,"w":68,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/trash.png": -{ - "frame": {"x":552,"y":720,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/underground_belt_entry-tier2.png": -{ - "frame": {"x":180,"y":1173,"w":93,"h":84}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":12,"w":93,"h":84}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/underground_belt_entry.png": -{ - "frame": {"x":890,"y":1353,"w":93,"h":75}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":21,"w":93,"h":75}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/underground_belt_exit-tier2.png": -{ - "frame": {"x":351,"y":1182,"w":94,"h":75}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":94,"h":75}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/underground_belt_exit.png": -{ - "frame": {"x":787,"y":1402,"w":93,"h":75}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":0,"w":93,"h":75}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/virtual_processor-painter.png": -{ - "frame": {"x":804,"y":900,"w":87,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":87,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/virtual_processor-rotater.png": -{ - "frame": {"x":466,"y":923,"w":96,"h":94}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":96,"h":94}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/virtual_processor-stacker.png": -{ - "frame": {"x":557,"y":1224,"w":87,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":87,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/virtual_processor-unstacker.png": -{ - "frame": {"x":702,"y":799,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/virtual_processor.png": -{ - "frame": {"x":359,"y":924,"w":96,"h":94}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":96,"h":94}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/blueprints/wire_tunnel.png": -{ - "frame": {"x":550,"y":1326,"w":93,"h":91}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":2,"y":2,"w":93,"h":91}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/analyzer.png": -{ - "frame": {"x":898,"y":848,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/balancer-merger-inverse.png": -{ - "frame": {"x":790,"y":1305,"w":94,"h":91}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":94,"h":91}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/balancer-merger.png": -{ - "frame": {"x":688,"y":1373,"w":93,"h":91}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":2,"w":93,"h":91}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/balancer-splitter-inverse.png": -{ - "frame": {"x":895,"y":1256,"w":95,"h":91}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":95,"h":91}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/balancer-splitter.png": -{ - "frame": {"x":6,"y":1193,"w":93,"h":91}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":2,"w":93,"h":91}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/balancer.png": -{ - "frame": {"x":187,"y":774,"w":171,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/buildings/belt_left.png": -{ - "frame": {"x":103,"y":1466,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/belt_right.png": -{ - "frame": {"x":6,"y":1673,"w":87,"h":87}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":9,"w":87,"h":87}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/belt_top.png": -{ - "frame": {"x":568,"y":822,"w":78,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":78,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/comparator.png": -{ - "frame": {"x":180,"y":1078,"w":96,"h":89}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":89}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/constant_signal.png": -{ - "frame": {"x":941,"y":99,"w":70,"h":86}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":0,"w":70,"h":86}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/cutter-quad.png": -{ - "frame": {"x":378,"y":312,"w":350,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":16,"y":0,"w":350,"h":96}, - "sourceSize": {"w":384,"h":96} -}, -"sprites/buildings/cutter.png": -{ - "frame": {"x":6,"y":787,"w":171,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":0,"w":171,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/buildings/display.png": -{ - "frame": {"x":561,"y":1128,"w":84,"h":90}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":6,"w":84,"h":90}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/filter.png": -{ - "frame": {"x":375,"y":516,"w":179,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":0,"w":179,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/buildings/hub.png": -{ - "frame": {"x":6,"y":6,"w":366,"h":367}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":10,"w":366,"h":367}, - "sourceSize": {"w":384,"h":384} -}, -"sprites/buildings/item_producer.png": -{ - "frame": {"x":201,"y":1432,"w":87,"h":95}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":5,"y":0,"w":87,"h":95}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/lever.png": -{ - "frame": {"x":108,"y":1074,"w":66,"h":77}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":15,"y":6,"w":66,"h":77}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/logic_gate-not.png": -{ - "frame": {"x":99,"y":1838,"w":82,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":82,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/logic_gate-or.png": -{ - "frame": {"x":694,"y":995,"w":96,"h":83}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":83}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/logic_gate-xor.png": -{ - "frame": {"x":466,"y":822,"w":96,"h":95}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":95}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/logic_gate.png": -{ - "frame": {"x":694,"y":901,"w":96,"h":88}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":88}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/miner-chainable.png": -{ - "frame": {"x":104,"y":1365,"w":91,"h":95}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/miner.png": -{ - "frame": {"x":6,"y":1386,"w":91,"h":95}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":91,"h":95}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/mixer.png": -{ - "frame": {"x":725,"y":595,"w":174,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":174,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/buildings/painter-double.png": -{ - "frame": {"x":743,"y":199,"w":192,"h":186}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":186}, - "sourceSize": {"w":192,"h":192} -}, -"sprites/buildings/painter-mirrored.png": -{ - "frame": {"x":6,"y":481,"w":192,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/buildings/painter-quad.png": -{ - "frame": {"x":378,"y":108,"w":359,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":8,"y":0,"w":359,"h":96}, - "sourceSize": {"w":384,"h":96} -}, -"sprites/buildings/painter.png": -{ - "frame": {"x":375,"y":414,"w":192,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":192,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/buildings/reader.png": -{ - "frame": {"x":897,"y":1052,"w":95,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/rotater-ccw.png": -{ - "frame": {"x":796,"y":1104,"w":95,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/rotater-rotate180.png": -{ - "frame": {"x":693,"y":1172,"w":95,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/rotater.png": -{ - "frame": {"x":897,"y":1154,"w":95,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":95,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/stacker.png": -{ - "frame": {"x":374,"y":618,"w":174,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":174,"h":96}, - "sourceSize": {"w":192,"h":96} -}, -"sprites/buildings/storage.png": -{ - "frame": {"x":204,"y":577,"w":164,"h":191}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":1,"w":164,"h":191}, - "sourceSize": {"w":192,"h":192} -}, -"sprites/buildings/transistor-mirrored.png": -{ - "frame": {"x":285,"y":960,"w":66,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":30,"y":0,"w":66,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/transistor.png": -{ - "frame": {"x":941,"y":346,"w":68,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":0,"w":68,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/trash.png": -{ - "frame": {"x":897,"y":950,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/underground_belt_entry-tier2.png": -{ - "frame": {"x":203,"y":1263,"w":92,"h":83}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":13,"w":92,"h":83}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/underground_belt_entry.png": -{ - "frame": {"x":301,"y":1263,"w":92,"h":74}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":22,"w":92,"h":74}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/underground_belt_exit-tier2.png": -{ - "frame": {"x":301,"y":1343,"w":92,"h":74}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":92,"h":74}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/underground_belt_exit.png": -{ - "frame": {"x":203,"y":1352,"w":92,"h":74}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":92,"h":74}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/virtual_processor-painter.png": -{ - "frame": {"x":399,"y":1343,"w":87,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":87,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/virtual_processor-rotater.png": -{ - "frame": {"x":181,"y":978,"w":96,"h":94}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":96,"h":94}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/virtual_processor-stacker.png": -{ - "frame": {"x":301,"y":1423,"w":87,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":9,"y":0,"w":87,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/virtual_processor-unstacker.png": -{ - "frame": {"x":364,"y":822,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/virtual_processor.png": -{ - "frame": {"x":6,"y":1093,"w":96,"h":94}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":96,"h":94}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/buildings/wire_tunnel.png": -{ - "frame": {"x":6,"y":1290,"w":92,"h":90}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":3,"w":92,"h":90}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/colors/blue.png": -{ - "frame": {"x":652,"y":891,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/colors/cyan.png": -{ - "frame": {"x":652,"y":931,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/colors/green.png": -{ - "frame": {"x":652,"y":971,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/colors/purple.png": -{ - "frame": {"x":652,"y":1011,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/colors/red.png": -{ - "frame": {"x":652,"y":1051,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/colors/uncolored.png": -{ - "frame": {"x":652,"y":1091,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/colors/white.png": -{ - "frame": {"x":651,"y":1131,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/colors/yellow.png": -{ - "frame": {"x":651,"y":1171,"w":36,"h":34}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":2,"w":36,"h":34}, - "sourceSize": {"w":36,"h":36} -}, -"sprites/debug/acceptor_slot.png": -{ - "frame": {"x":911,"y":527,"w":8,"h":8}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, - "sourceSize": {"w":8,"h":8} -}, -"sprites/debug/ejector_slot.png": -{ - "frame": {"x":911,"y":541,"w":8,"h":8}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":8,"h":8}, - "sourceSize": {"w":8,"h":8} -}, -"sprites/misc/hub_direction_indicator.png": -{ - "frame": {"x":649,"y":1406,"w":32,"h":32}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":32,"h":32}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/misc/processor_disabled.png": -{ - "frame": {"x":675,"y":414,"w":53,"h":55}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":6,"w":53,"h":55}, - "sourceSize": {"w":64,"h":64} -}, -"sprites/misc/processor_disconnected.png": -{ - "frame": {"x":675,"y":475,"w":44,"h":57}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":11,"y":5,"w":44,"h":57}, - "sourceSize": {"w":64,"h":64} -}, -"sprites/misc/reader_overlay.png": -{ - "frame": {"x":941,"y":191,"w":70,"h":47}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":13,"y":25,"w":70,"h":47}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/misc/slot_bad_arrow.png": -{ - "frame": {"x":321,"y":1202,"w":24,"h":24}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":1,"w":24,"h":24}, - "sourceSize": {"w":26,"h":26} -}, -"sprites/misc/slot_good_arrow.png": -{ - "frame": {"x":321,"y":1170,"w":24,"h":26}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":1,"y":0,"w":24,"h":26}, - "sourceSize": {"w":26,"h":26} -}, -"sprites/misc/storage_overlay.png": -{ - "frame": {"x":656,"y":664,"w":60,"h":30}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":60,"h":30}, - "sourceSize": {"w":60,"h":30} -}, -"sprites/misc/waypoint.png": -{ - "frame": {"x":321,"y":1132,"w":26,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":26,"h":32}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/wires/boolean_false.png": -{ - "frame": {"x":996,"y":1256,"w":21,"h":28}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":6,"y":3,"w":21,"h":28}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/wires/boolean_true.png": -{ - "frame": {"x":911,"y":493,"w":15,"h":28}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":7,"y":3,"w":15,"h":28}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/wires/display/blue.png": -{ - "frame": {"x":651,"y":1211,"w":33,"h":33}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, - "sourceSize": {"w":33,"h":33} -}, -"sprites/wires/display/cyan.png": -{ - "frame": {"x":650,"y":1250,"w":33,"h":33}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, - "sourceSize": {"w":33,"h":33} -}, -"sprites/wires/display/green.png": -{ - "frame": {"x":650,"y":1289,"w":33,"h":33}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, - "sourceSize": {"w":33,"h":33} -}, -"sprites/wires/display/purple.png": -{ - "frame": {"x":282,"y":1132,"w":33,"h":33}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, - "sourceSize": {"w":33,"h":33} -}, -"sprites/wires/display/red.png": -{ - "frame": {"x":282,"y":1171,"w":33,"h":33}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, - "sourceSize": {"w":33,"h":33} -}, -"sprites/wires/display/white.png": -{ - "frame": {"x":649,"y":1328,"w":33,"h":33}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, - "sourceSize": {"w":33,"h":33} -}, -"sprites/wires/display/yellow.png": -{ - "frame": {"x":649,"y":1367,"w":33,"h":33}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":33,"h":33}, - "sourceSize": {"w":33,"h":33} -}, -"sprites/wires/lever_on.png": -{ - "frame": {"x":108,"y":889,"w":68,"h":77}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":14,"y":6,"w":68,"h":77}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/logical_acceptor.png": -{ - "frame": {"x":654,"y":763,"w":42,"h":71}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":28,"y":0,"w":42,"h":71}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/logical_ejector.png": -{ - "frame": {"x":652,"y":840,"w":41,"h":45}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":29,"y":0,"w":41,"h":45}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/network_conflict.png": -{ - "frame": {"x":279,"y":1210,"w":32,"h":30}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":1,"w":32,"h":30}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/wires/network_empty.png": -{ - "frame": {"x":146,"y":1157,"w":28,"h":32}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":3,"y":0,"w":28,"h":32}, - "sourceSize": {"w":32,"h":32} -}, -"sprites/wires/overlay_tile.png": -{ - "frame": {"x":283,"y":1062,"w":64,"h":64}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":64,"h":64}, - "sourceSize": {"w":64,"h":64} -}, -"sprites/wires/sets/conflict_cross.png": -{ - "frame": {"x":183,"y":876,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/conflict_forward.png": -{ - "frame": {"x":1000,"y":848,"w":18,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":39,"y":0,"w":18,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/conflict_split.png": -{ - "frame": {"x":459,"y":1118,"w":96,"h":57}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":39,"w":96,"h":57}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/conflict_turn.png": -{ - "frame": {"x":662,"y":538,"w":57,"h":57}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":39,"y":39,"w":57,"h":57}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/first_cross.png": -{ - "frame": {"x":6,"y":889,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/first_forward.png": -{ - "frame": {"x":999,"y":950,"w":18,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":39,"y":0,"w":18,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/first_split.png": -{ - "frame": {"x":353,"y":1119,"w":96,"h":57}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":39,"w":96,"h":57}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/first_turn.png": -{ - "frame": {"x":662,"y":601,"w":57,"h":57}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":39,"y":39,"w":57,"h":57}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/second_cross.png": -{ - "frame": {"x":6,"y":991,"w":96,"h":96}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":96,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/second_forward.png": -{ - "frame": {"x":998,"y":1052,"w":18,"h":96}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":39,"y":0,"w":18,"h":96}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/second_split.png": -{ - "frame": {"x":455,"y":1181,"w":96,"h":57}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":0,"y":39,"w":96,"h":57}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/sets/second_turn.png": -{ - "frame": {"x":656,"y":700,"w":57,"h":57}, - "rotated": false, - "trimmed": true, - "spriteSourceSize": {"x":39,"y":39,"w":57,"h":57}, - "sourceSize": {"w":96,"h":96} -}, -"sprites/wires/wires_preview.png": -{ - "frame": {"x":108,"y":1157,"w":32,"h":32}, - "rotated": false, - "trimmed": false, - "spriteSourceSize": {"x":0,"y":0,"w":32,"h":32}, - "sourceSize": {"w":32,"h":32} -}}, -"meta": { - "app": "https://www.codeandweb.com/texturepacker", - "version": "1.0", - "image": "atlas0_mq.png", - "format": "RGBA8888", - "size": {"w":1024,"h":2048}, - "scale": "0.5", - "smartupdate": "$TexturePacker:SmartUpdate:a1c027d325ef1c92a9318164b1241662:a9c9c3627ec9506697a7e24a7a287d67:908b89f5ca8ff73e331a35a3b14d0604$" -} -} diff --git a/res_built/atlas/atlas0_mq.png b/res_built/atlas/atlas0_mq.png deleted file mode 100644 index 2d2a5ae9..00000000 Binary files a/res_built/atlas/atlas0_mq.png and /dev/null differ diff --git a/res_raw/atlas.json b/res_raw/atlas.json new file mode 100644 index 00000000..9e548568 --- /dev/null +++ b/res_raw/atlas.json @@ -0,0 +1,22 @@ +{ + "pot": true, + "paddingX": 2, + "paddingY": 2, + "edgePadding": true, + "rotation": false, + "maxWidth": 2048, + "useIndexes": false, + "alphaThreshold": 1, + "maxHeight": 2048, + "stripWhitespaceX": true, + "stripWhitespaceY": true, + "duplicatePadding": true, + "alias": true, + "fast": false, + "limitMemory": false, + "combineSubdirectories": true, + "flattenPaths": false, + "bleedIterations": 4, + "scale": [0.25, 0.5, 0.75], + "scaleSuffix": ["_lq", "_mq", "_hq"] +} diff --git a/res_raw/atlas.tps b/res_raw/atlas.tps deleted file mode 100644 index 3aaaa257..00000000 --- a/res_raw/atlas.tps +++ /dev/null @@ -1,623 +0,0 @@ - - - - fileFormatVersion - 4 - texturePackerVersion - 5.4.0 - autoSDSettings - - - scale - 0.75 - extension - _hq - spriteFilter - - acceptFractionalValues - - maxTextureSize - - width - 2048 - height - 2048 - - - - scale - 0.5 - extension - _mq - spriteFilter - - acceptFractionalValues - - maxTextureSize - - width - 2048 - height - 2048 - - - - scale - 0.25 - extension - _lq - spriteFilter - - acceptFractionalValues - - maxTextureSize - - width - 2048 - height - 2048 - - - - allowRotation - - shapeDebug - - dpi - 72 - dataFormat - json - textureFileName - - flipPVR - - pvrCompressionQuality - PVR_QUALITY_NORMAL - atfCompressData - - mipMapMinSize - 32768 - etc1CompressionQuality - ETC1_QUALITY_LOW_PERCEPTUAL - etc2CompressionQuality - ETC2_QUALITY_LOW_PERCEPTUAL - dxtCompressionMode - DXT_PERCEPTUAL - jxrColorFormat - JXR_YUV444 - jxrTrimFlexBits - 0 - jxrCompressionLevel - 0 - ditherType - NearestNeighbour - backgroundColor - 0 - libGdx - - filtering - - x - Linear - y - Linear - - - shapePadding - 2 - jpgQuality - 80 - pngOptimizationLevel - 0 - webpQualityLevel - 101 - textureSubPath - - atfFormats - - textureFormat - png - borderPadding - 4 - maxTextureSize - - width - 2048 - height - 2048 - - fixedTextureSize - - width - -1 - height - -1 - - algorithmSettings - - algorithm - MaxRects - freeSizeMode - Best - sizeConstraints - POT - forceSquared - - maxRects - - heuristic - Best - - basic - - sortBy - Best - order - Ascending - - polygon - - alignToGrid - 1 - - - dataFileNames - - data - - name - ../res_built/atlas/atlas{n}{v}.json - - - multiPack - - forceIdenticalLayout - - outputFormat - RGBA8888 - alphaHandling - ClearTransparentPixels - contentProtection - - key - - - autoAliasEnabled - - trimSpriteNames - - prependSmartFolderName - - autodetectAnimations - - globalSpriteSettings - - scale - 1 - scaleMode - Smooth - extrude - 2 - trimThreshold - 2 - trimMargin - 1 - trimMode - Trim - tracerTolerance - 200 - heuristicMask - - defaultPivotPoint - 0.5,0.5 - writePivotPoints - - - individualSpriteSettings - - sprites/belt/built/forward_0.png - sprites/belt/built/forward_1.png - sprites/belt/built/forward_10.png - sprites/belt/built/forward_11.png - sprites/belt/built/forward_12.png - sprites/belt/built/forward_13.png - sprites/belt/built/forward_2.png - sprites/belt/built/forward_3.png - sprites/belt/built/forward_4.png - sprites/belt/built/forward_5.png - sprites/belt/built/forward_6.png - sprites/belt/built/forward_7.png - sprites/belt/built/forward_8.png - sprites/belt/built/forward_9.png - sprites/belt/built/left_0.png - sprites/belt/built/left_1.png - sprites/belt/built/left_10.png - sprites/belt/built/left_11.png - sprites/belt/built/left_12.png - sprites/belt/built/left_13.png - sprites/belt/built/left_2.png - sprites/belt/built/left_3.png - sprites/belt/built/left_4.png - sprites/belt/built/left_5.png - sprites/belt/built/left_6.png - sprites/belt/built/left_7.png - sprites/belt/built/left_8.png - sprites/belt/built/left_9.png - sprites/belt/built/right_0.png - sprites/belt/built/right_1.png - sprites/belt/built/right_10.png - sprites/belt/built/right_11.png - sprites/belt/built/right_12.png - sprites/belt/built/right_13.png - sprites/belt/built/right_2.png - sprites/belt/built/right_3.png - sprites/belt/built/right_4.png - sprites/belt/built/right_5.png - sprites/belt/built/right_6.png - sprites/belt/built/right_7.png - sprites/belt/built/right_8.png - sprites/belt/built/right_9.png - sprites/blueprints/analyzer.png - sprites/blueprints/balancer-merger-inverse.png - sprites/blueprints/balancer-merger.png - sprites/blueprints/balancer-splitter-inverse.png - sprites/blueprints/balancer-splitter.png - sprites/blueprints/belt_left.png - sprites/blueprints/belt_right.png - sprites/blueprints/belt_top.png - sprites/blueprints/comparator.png - sprites/blueprints/constant_signal.png - sprites/blueprints/display.png - sprites/blueprints/lever.png - sprites/blueprints/logic_gate-not.png - sprites/blueprints/logic_gate-or.png - sprites/blueprints/logic_gate-xor.png - sprites/blueprints/logic_gate.png - sprites/blueprints/miner-chainable.png - sprites/blueprints/miner.png - sprites/blueprints/reader.png - sprites/blueprints/rotater-ccw.png - sprites/blueprints/rotater-rotate180.png - sprites/blueprints/rotater.png - sprites/blueprints/transistor-mirrored.png - sprites/blueprints/transistor.png - sprites/blueprints/trash.png - sprites/blueprints/underground_belt_entry-tier2.png - sprites/blueprints/underground_belt_entry.png - sprites/blueprints/underground_belt_exit-tier2.png - sprites/blueprints/underground_belt_exit.png - sprites/blueprints/virtual_processor-painter.png - sprites/blueprints/virtual_processor-rotater.png - sprites/blueprints/virtual_processor-stacker.png - sprites/blueprints/virtual_processor-unstacker.png - sprites/blueprints/virtual_processor.png - sprites/blueprints/wire_tunnel.png - sprites/buildings/analyzer.png - sprites/buildings/balancer-merger-inverse.png - sprites/buildings/balancer-merger.png - sprites/buildings/balancer-splitter-inverse.png - sprites/buildings/balancer-splitter.png - sprites/buildings/comparator.png - sprites/buildings/constant_signal.png - sprites/buildings/display.png - sprites/buildings/lever.png - sprites/buildings/logic_gate-not.png - sprites/buildings/logic_gate-or.png - sprites/buildings/logic_gate-xor.png - sprites/buildings/logic_gate.png - sprites/buildings/miner-chainable.png - sprites/buildings/reader.png - sprites/buildings/rotater-ccw.png - sprites/buildings/rotater-rotate180.png - sprites/buildings/transistor-mirrored.png - sprites/buildings/transistor.png - sprites/buildings/underground_belt_entry-tier2.png - sprites/buildings/underground_belt_entry.png - sprites/buildings/underground_belt_exit-tier2.png - sprites/buildings/underground_belt_exit.png - sprites/buildings/virtual_processor-painter.png - sprites/buildings/virtual_processor-rotater.png - sprites/buildings/virtual_processor-stacker.png - sprites/buildings/virtual_processor-unstacker.png - sprites/buildings/virtual_processor.png - sprites/buildings/wire_tunnel.png - sprites/misc/reader_overlay.png - sprites/wires/lever_on.png - sprites/wires/sets/conflict_cross.png - sprites/wires/sets/conflict_forward.png - sprites/wires/sets/conflict_split.png - sprites/wires/sets/conflict_turn.png - sprites/wires/sets/first_cross.png - sprites/wires/sets/first_forward.png - sprites/wires/sets/first_split.png - sprites/wires/sets/first_turn.png - sprites/wires/sets/second_cross.png - sprites/wires/sets/second_forward.png - sprites/wires/sets/second_split.png - sprites/wires/sets/second_turn.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 48,48,96,96 - scale9Paddings - 48,48,96,96 - scale9FromFile - - - sprites/blueprints/balancer.png - sprites/blueprints/cutter.png - sprites/blueprints/filter.png - sprites/blueprints/mixer.png - sprites/blueprints/painter-mirrored.png - sprites/blueprints/painter.png - sprites/blueprints/stacker.png - sprites/buildings/balancer.png - sprites/buildings/filter.png - sprites/buildings/painter-mirrored.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 96,48,192,96 - scale9Paddings - 96,48,192,96 - scale9FromFile - - - sprites/blueprints/cutter-quad.png - sprites/blueprints/painter-quad.png - sprites/buildings/cutter-quad.png - sprites/buildings/painter-quad.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 192,48,384,96 - scale9Paddings - 192,48,384,96 - scale9FromFile - - - sprites/blueprints/painter-double.png - sprites/blueprints/storage.png - sprites/buildings/painter-double.png - sprites/buildings/storage.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 96,96,192,192 - scale9Paddings - 96,96,192,192 - scale9FromFile - - - sprites/buildings/belt_left.png - sprites/buildings/belt_right.png - sprites/buildings/belt_top.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 32,32,63,63 - scale9Paddings - 32,32,63,63 - scale9FromFile - - - sprites/buildings/cutter.png - sprites/buildings/mixer.png - sprites/buildings/painter.png - sprites/buildings/stacker.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 64,32,128,64 - scale9Paddings - 64,32,128,64 - scale9FromFile - - - sprites/buildings/hub.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 192,192,384,384 - scale9Paddings - 192,192,384,384 - scale9FromFile - - - sprites/buildings/miner.png - sprites/buildings/rotater.png - sprites/buildings/trash.png - sprites/misc/processor_disabled.png - sprites/misc/processor_disconnected.png - sprites/wires/logical_acceptor.png - sprites/wires/logical_ejector.png - sprites/wires/overlay_tile.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 32,32,64,64 - scale9Paddings - 32,32,64,64 - scale9FromFile - - - sprites/colors/blue.png - sprites/colors/cyan.png - sprites/colors/green.png - sprites/colors/purple.png - sprites/colors/red.png - sprites/colors/uncolored.png - sprites/colors/white.png - sprites/colors/yellow.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 18,18,36,36 - scale9Paddings - 18,18,36,36 - scale9FromFile - - - sprites/debug/acceptor_slot.png - sprites/debug/ejector_slot.png - sprites/misc/hub_direction_indicator.png - sprites/misc/waypoint.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 8,8,16,16 - scale9Paddings - 8,8,16,16 - scale9FromFile - - - sprites/misc/slot_bad_arrow.png - sprites/misc/slot_good_arrow.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 24,24,48,48 - scale9Paddings - 24,24,48,48 - scale9FromFile - - - sprites/misc/storage_overlay.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 44,22,89,43 - scale9Paddings - 44,22,89,43 - scale9FromFile - - - sprites/wires/boolean_false.png - sprites/wires/boolean_true.png - sprites/wires/network_conflict.png - sprites/wires/network_empty.png - sprites/wires/wires_preview.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 16,16,32,32 - scale9Paddings - 16,16,32,32 - scale9FromFile - - - sprites/wires/display/blue.png - sprites/wires/display/cyan.png - sprites/wires/display/green.png - sprites/wires/display/purple.png - sprites/wires/display/red.png - sprites/wires/display/white.png - sprites/wires/display/yellow.png - - pivotPoint - 0.5,0.5 - spriteScale - 1 - scale9Enabled - - scale9Borders - 11,11,22,22 - scale9Paddings - 11,11,22,22 - scale9FromFile - - - - fileList - - sprites - - ignoreFileList - - replaceList - - ignoredWarnings - - commonDivisorX - 1 - commonDivisorY - 1 - packNormalMaps - - autodetectNormalMaps - - normalMapFilter - - normalMapSuffix - - normalMapSheetFileName - - exporterProperties - - - diff --git a/res_raw/sprites/blueprints/balancer-merger-inverse.png b/res_raw/sprites/blueprints/balancer-merger-inverse.png index db528f32..3940e0a6 100644 Binary files a/res_raw/sprites/blueprints/balancer-merger-inverse.png and b/res_raw/sprites/blueprints/balancer-merger-inverse.png differ diff --git a/res_raw/sprites/blueprints/balancer-merger.png b/res_raw/sprites/blueprints/balancer-merger.png index 3e3c81f7..a9554f33 100644 Binary files a/res_raw/sprites/blueprints/balancer-merger.png and b/res_raw/sprites/blueprints/balancer-merger.png differ diff --git a/res_raw/sprites/blueprints/balancer-splitter-inverse.png b/res_raw/sprites/blueprints/balancer-splitter-inverse.png index 90a429c0..c9c4c4c9 100644 Binary files a/res_raw/sprites/blueprints/balancer-splitter-inverse.png and b/res_raw/sprites/blueprints/balancer-splitter-inverse.png differ diff --git a/res_raw/sprites/blueprints/balancer-splitter.png b/res_raw/sprites/blueprints/balancer-splitter.png index 93488fd9..3d59d05f 100644 Binary files a/res_raw/sprites/blueprints/balancer-splitter.png and b/res_raw/sprites/blueprints/balancer-splitter.png differ diff --git a/res_raw/sprites/blueprints/logic_gate-or.png b/res_raw/sprites/blueprints/logic_gate-or.png index f58c3656..e8b4573a 100644 Binary files a/res_raw/sprites/blueprints/logic_gate-or.png and b/res_raw/sprites/blueprints/logic_gate-or.png differ diff --git a/res_raw/sprites/blueprints/logic_gate-xor.png b/res_raw/sprites/blueprints/logic_gate-xor.png index 97823a7a..9a711fe4 100644 Binary files a/res_raw/sprites/blueprints/logic_gate-xor.png and b/res_raw/sprites/blueprints/logic_gate-xor.png differ diff --git a/res_raw/sprites/blueprints/logic_gate.png b/res_raw/sprites/blueprints/logic_gate.png index de59fa57..5b492203 100644 Binary files a/res_raw/sprites/blueprints/logic_gate.png and b/res_raw/sprites/blueprints/logic_gate.png differ diff --git a/res_raw/sprites/blueprints/underground_belt_entry-tier2.png b/res_raw/sprites/blueprints/underground_belt_entry-tier2.png index 9a4beb66..796dff59 100644 Binary files a/res_raw/sprites/blueprints/underground_belt_entry-tier2.png and b/res_raw/sprites/blueprints/underground_belt_entry-tier2.png differ diff --git a/res_raw/sprites/blueprints/underground_belt_entry.png b/res_raw/sprites/blueprints/underground_belt_entry.png index aa237b6d..f9ad0ba5 100644 Binary files a/res_raw/sprites/blueprints/underground_belt_entry.png and b/res_raw/sprites/blueprints/underground_belt_entry.png differ diff --git a/res_raw/sprites/blueprints/underground_belt_exit-tier2.png b/res_raw/sprites/blueprints/underground_belt_exit-tier2.png index b9c97b75..be78107b 100644 Binary files a/res_raw/sprites/blueprints/underground_belt_exit-tier2.png and b/res_raw/sprites/blueprints/underground_belt_exit-tier2.png differ diff --git a/res_raw/sprites/blueprints/underground_belt_exit.png b/res_raw/sprites/blueprints/underground_belt_exit.png index 760f63a9..9f02504d 100644 Binary files a/res_raw/sprites/blueprints/underground_belt_exit.png and b/res_raw/sprites/blueprints/underground_belt_exit.png differ diff --git a/res_raw/sprites/blueprints/virtual_processor-rotater.png b/res_raw/sprites/blueprints/virtual_processor-rotater.png index cf283717..1cf0e901 100644 Binary files a/res_raw/sprites/blueprints/virtual_processor-rotater.png and b/res_raw/sprites/blueprints/virtual_processor-rotater.png differ diff --git a/res_raw/sprites/buildings/balancer-merger-inverse.png b/res_raw/sprites/buildings/balancer-merger-inverse.png index 1d9bd4c9..ff9c3833 100644 Binary files a/res_raw/sprites/buildings/balancer-merger-inverse.png and b/res_raw/sprites/buildings/balancer-merger-inverse.png differ diff --git a/res_raw/sprites/buildings/balancer-merger.png b/res_raw/sprites/buildings/balancer-merger.png index f0f80a0b..7101c824 100644 Binary files a/res_raw/sprites/buildings/balancer-merger.png and b/res_raw/sprites/buildings/balancer-merger.png differ diff --git a/res_raw/sprites/buildings/balancer-splitter-inverse.png b/res_raw/sprites/buildings/balancer-splitter-inverse.png index 704663c0..4a765fa4 100644 Binary files a/res_raw/sprites/buildings/balancer-splitter-inverse.png and b/res_raw/sprites/buildings/balancer-splitter-inverse.png differ diff --git a/res_raw/sprites/buildings/balancer-splitter.png b/res_raw/sprites/buildings/balancer-splitter.png index d5a72dd4..e8fb62be 100644 Binary files a/res_raw/sprites/buildings/balancer-splitter.png and b/res_raw/sprites/buildings/balancer-splitter.png differ diff --git a/res_raw/sprites/buildings/logic_gate-or.png b/res_raw/sprites/buildings/logic_gate-or.png index 1b9c9e34..f2995a86 100644 Binary files a/res_raw/sprites/buildings/logic_gate-or.png and b/res_raw/sprites/buildings/logic_gate-or.png differ diff --git a/res_raw/sprites/buildings/logic_gate-xor.png b/res_raw/sprites/buildings/logic_gate-xor.png index c7d43a58..3828e4a0 100644 Binary files a/res_raw/sprites/buildings/logic_gate-xor.png and b/res_raw/sprites/buildings/logic_gate-xor.png differ diff --git a/res_raw/sprites/buildings/logic_gate.png b/res_raw/sprites/buildings/logic_gate.png index 2d206aa3..aa0ad6fd 100644 Binary files a/res_raw/sprites/buildings/logic_gate.png and b/res_raw/sprites/buildings/logic_gate.png differ diff --git a/res_raw/sprites/buildings/underground_belt_entry-tier2.png b/res_raw/sprites/buildings/underground_belt_entry-tier2.png index 3a30f4b5..96dd4f66 100644 Binary files a/res_raw/sprites/buildings/underground_belt_entry-tier2.png and b/res_raw/sprites/buildings/underground_belt_entry-tier2.png differ diff --git a/res_raw/sprites/buildings/underground_belt_entry.png b/res_raw/sprites/buildings/underground_belt_entry.png index 3b771f60..c1e4c4e8 100644 Binary files a/res_raw/sprites/buildings/underground_belt_entry.png and b/res_raw/sprites/buildings/underground_belt_entry.png differ diff --git a/res_raw/sprites/buildings/underground_belt_exit-tier2.png b/res_raw/sprites/buildings/underground_belt_exit-tier2.png index 87c59bf3..e3c8df88 100644 Binary files a/res_raw/sprites/buildings/underground_belt_exit-tier2.png and b/res_raw/sprites/buildings/underground_belt_exit-tier2.png differ diff --git a/res_raw/sprites/buildings/underground_belt_exit.png b/res_raw/sprites/buildings/underground_belt_exit.png index c281ed0e..9614ae11 100644 Binary files a/res_raw/sprites/buildings/underground_belt_exit.png and b/res_raw/sprites/buildings/underground_belt_exit.png differ diff --git a/res_raw/sprites/buildings/virtual_processor-rotater.png b/res_raw/sprites/buildings/virtual_processor-rotater.png index 327e8e13..6cad3244 100644 Binary files a/res_raw/sprites/buildings/virtual_processor-rotater.png and b/res_raw/sprites/buildings/virtual_processor-rotater.png differ diff --git a/src/css/ingame_hud/cat_memes.scss b/src/css/ingame_hud/cat_memes.scss new file mode 100644 index 00000000..ddb0ae3f --- /dev/null +++ b/src/css/ingame_hud/cat_memes.scss @@ -0,0 +1,23 @@ +#ingame_HUD_CatMemes { + position: absolute; + @include S(width, 150px); + @include S(height, 150px); + background: transparent center center / contain no-repeat; + + right: 0; + @include S(bottom, 150px); + + & { + /* @load-async */ + background-image: uiResource("res/ui/memes/cat1.png") !important; + } + + @include InlineAnimation(0.5s ease-in-out) { + 0% { + transform: translateX(100%); + } + 100% { + transform: none; + } + } +} diff --git a/src/css/ingame_hud/pinned_shapes.scss b/src/css/ingame_hud/pinned_shapes.scss index 8ff13fe7..671f5aa5 100644 --- a/src/css/ingame_hud/pinned_shapes.scss +++ b/src/css/ingame_hud/pinned_shapes.scss @@ -17,13 +17,10 @@ grid-template-rows: 1fr 1fr; @include S(margin-bottom, 4px); color: #333438; - // text-shadow: #{D(1px)} #{D(1px)} 0 rgba(0, 10, 20, 0.2); - &.unpinable { - > canvas { - cursor: pointer; - pointer-events: all; - } + &.removable { + cursor: pointer; + pointer-events: all; } > canvas { @@ -31,16 +28,9 @@ @include S(height, 25px); grid-column: 1 / 2; grid-row: 1 / 3; - pointer-events: all; - transition: transform 0.1s ease-in-out; - transform-origin: D(2px) center; - will-change: transform; - position: relative; + pointer-events: none; z-index: 20; - &:hover { - transform: scale(2); - z-index: 21; - } + position: relative; } > .amountLabel, diff --git a/src/css/ingame_hud/standalone_advantages.scss b/src/css/ingame_hud/standalone_advantages.scss index 02c0f5e2..065ad6ac 100644 --- a/src/css/ingame_hud/standalone_advantages.scss +++ b/src/css/ingame_hud/standalone_advantages.scss @@ -16,6 +16,7 @@ grid-template-rows: #{D(40px)}; align-items: center; } + .lowerBar { width: 100%; display: flex; @@ -57,10 +58,7 @@ @include S(margin, 0); @include S(width, 180px); @include S(height, 40px); - & { - /* @load-async */ - background: #171a23 uiResource("get_on_steam.png") center center / contain no-repeat; - } + background: #171a23 center center / contain no-repeat; @include S(border-radius, $globalBorderRadius); } diff --git a/src/css/main.scss b/src/css/main.scss index 9e26fa95..5c4686e9 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -53,6 +53,7 @@ @import "ingame_hud/shape_viewer"; @import "ingame_hud/sandbox_controller"; @import "ingame_hud/standalone_advantages"; +@import "ingame_hud/cat_memes"; // prettier-ignore $elements: @@ -74,7 +75,7 @@ ingame_HUD_DebugInfo, ingame_HUD_EntityDebugger, ingame_HUD_InteractiveTutorial, ingame_HUD_TutorialHints, -ingame_HUD_buildings_toolbar, +ingame_HUD_BuildingsToolbar, ingame_HUD_wires_toolbar, ingame_HUD_BlueprintPlacer, ingame_HUD_Waypoints_Hint, @@ -93,7 +94,8 @@ ingame_HUD_ShapeViewer, ingame_HUD_StandaloneAdvantages, ingame_HUD_UnlockNotification, ingame_HUD_SettingsMenu, -ingame_HUD_ModalDialogs; +ingame_HUD_ModalDialogs, +ingame_HUD_CatMemes; $zindex: 100; diff --git a/src/css/resources.scss b/src/css/resources.scss index 15f94d04..08bfa43f 100644 --- a/src/css/resources.scss +++ b/src/css/resources.scss @@ -75,3 +75,17 @@ $languages: en, de, cs, da, et, es-419, fr, it, pt-BR, sv, tr, el, ru, uk, zh-TW background-image: uiResource("languages/#{$language}.svg") !important; } } + +/* +PRICE +*/ + +.steam_1_pr { + /* @load-async */ + background-image: uiResource("get_on_steam_with_price.png") !important; +} + +.steam_2_npr { + /* @load-async */ + background-image: uiResource("get_on_steam.png") !important; +} diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index 455bcf6c..cf0ab718 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -133,10 +133,7 @@ width: 100%; @include S(height, 40px); @include S(width, 180px); - & { - /* @load-async */ - background: #171a23 uiResource("get_on_steam.png") center center / contain no-repeat; - } + background: #171a23 center center / contain no-repeat; overflow: hidden; display: block; text-indent: -999em; diff --git a/src/js/application.js b/src/js/application.js index 1a8ca21f..d9ca7641 100644 --- a/src/js/application.js +++ b/src/js/application.js @@ -29,6 +29,7 @@ import { MobileWarningState } from "./states/mobile_warning"; import { PreloadState } from "./states/preload"; import { SettingsState } from "./states/settings"; import { ShapezGameAnalytics } from "./platform/browser/game_analytics"; +import { RestrictionManager } from "./core/restriction_manager"; /** * @typedef {import("./platform/game_analytics").GameAnalyticsInterface} GameAnalyticsInterface @@ -70,6 +71,9 @@ export class Application { this.inputMgr = new InputDistributor(this); this.backgroundResourceLoader = new BackgroundResourcesLoader(this); + // Restrictions (Like demo etc) + this.restrictionMgr = new RestrictionManager(this); + // Platform dependent stuff /** @type {StorageInterface} */ diff --git a/src/js/changelog.js b/src/js/changelog.js index 2907d796..95aca51d 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -6,14 +6,6 @@ export const CHANGELOG = [ "⚠️⚠️This update is HUGE, view the full changelog here! ⚠️⚠️", ], }, - { - 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)", - "I'm still working on the wires update, I hope to release it mid july!", - ], - }, { version: "1.1.18", date: "27.06.2020", diff --git a/src/js/core/config.js b/src/js/core/config.js index 4d49c50e..57224b6a 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -1,5 +1,3 @@ -import { queryParamOptions } from "./query_parameters"; - export const IS_DEBUG = G_IS_DEV && typeof window !== "undefined" && @@ -7,13 +5,10 @@ export const IS_DEBUG = (window.location.host.indexOf("localhost:") >= 0 || window.location.host.indexOf("192.168.0.") >= 0) && window.location.search.indexOf("nodebug") < 0; -export const IS_DEMO = queryParamOptions.fullVersion - ? false - : (!G_IS_DEV && !G_IS_STANDALONE) || - (typeof window !== "undefined" && window.location.search.indexOf("demo") >= 0); - export const SUPPORT_TOUCH = false; +export const IS_MAC = navigator.platform.toLowerCase().indexOf("mac") >= 0; + const smoothCanvas = true; export const THIRDPARTY_URLS = { @@ -25,6 +20,8 @@ export const THIRDPARTY_URLS = { standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/", }; +export const A_B_TESTING_LINK_TYPE = Math.random() > 0.5 ? "steam_1_pr" : "steam_2_npr"; + export const globalConfig = { // Size of a single tile in Pixels. // NOTICE: Update webpack.production.config too! @@ -62,7 +59,7 @@ export const globalConfig = { undergroundBeltMaxTilesByTier: [5, 9], - readerAnalyzeIntervalSeconds: G_IS_DEV ? 3 : 10, + readerAnalyzeIntervalSeconds: 10, buildingSpeeds: { cutter: 1 / 4, diff --git a/src/js/core/read_write_proxy.js b/src/js/core/read_write_proxy.js index 6d26fa2b..7c96149b 100644 --- a/src/js/core/read_write_proxy.js +++ b/src/js/core/read_write_proxy.js @@ -81,10 +81,6 @@ export class ReadWriteProxy { return this.writeAsync(); } - getCurrentData() { - return this.currentData; - } - /** * * @param {object} obj diff --git a/src/js/core/restriction_manager.js b/src/js/core/restriction_manager.js new file mode 100644 index 00000000..fb34acb8 --- /dev/null +++ b/src/js/core/restriction_manager.js @@ -0,0 +1,155 @@ +/* typehints:start */ +import { Application } from "../application"; +/* typehints:end */ +import { IS_MAC } from "./config"; +import { ExplainedResult } from "./explained_result"; +import { queryParamOptions } from "./query_parameters"; +import { ReadWriteProxy } from "./read_write_proxy"; + +export class RestrictionManager extends ReadWriteProxy { + /** + * @param {Application} app + */ + constructor(app) { + super(app, "restriction-flags.bin"); + + this.currentData = this.getDefaultData(); + } + + // -- RW Proxy Impl + + /** + * @param {any} data + */ + verify(data) { + return ExplainedResult.good(); + } + + /** + */ + getDefaultData() { + return { + version: this.getCurrentVersion(), + savegameV1119Imported: false, + }; + } + + /** + */ + getCurrentVersion() { + return 1; + } + + /** + * @param {any} data + */ + migrate(data) { + // Todo + return ExplainedResult.good(); + } + + initialize() { + return this.readAsync().then(() => { + if (this.currentData.savegameV1119Imported) { + console.warn("Levelunlock is granted to current user due to past savegame"); + } + }); + } + + // -- End RW Proxy Impl + + /** + * Checks if there are any savegames from the 1.1.19 version + */ + onHasLegacySavegamesChanged(has119Savegames = false) { + if (has119Savegames && !this.currentData.savegameV1119Imported) { + this.currentData.savegameV1119Imported = true; + console.warn("Current user now has access to all levels due to 1119 savegame"); + return this.writeAsync(); + } + return Promise.resolve(); + } + + /** + * Returns if the app is currently running as the limited version + * @returns {boolean} + */ + isLimitedVersion() { + if (IS_MAC) { + // On mac, the full version is always active + return false; + } + + if (G_IS_STANDALONE) { + // Standalone is never limited + return false; + } + + if (queryParamOptions.fullVersion) { + // Full version is activated via flag + return false; + } + + if (G_IS_DEV) { + return typeof window !== "undefined" && window.location.search.indexOf("demo") >= 0; + } + + return true; + } + + /** + * Returns if the app markets the standalone version on steam + * @returns {boolean} + */ + getIsStandaloneMarketingActive() { + return this.isLimitedVersion(); + } + + /** + * Returns if exporting the base as a screenshot is possible + * @returns {boolean} + */ + getIsExportingScreenshotsPossible() { + return !this.isLimitedVersion(); + } + + /** + * Returns the maximum number of supported waypoints + * @returns {number} + */ + getMaximumWaypoints() { + return this.isLimitedVersion() ? 2 : 1e20; + } + + /** + * Returns if the user has unlimited savegames + * @returns {boolean} + */ + getHasUnlimitedSavegames() { + return !this.isLimitedVersion(); + } + + /** + * Returns if the app has all settings available + * @returns {boolean} + */ + getHasExtendedSettings() { + return !this.isLimitedVersion(); + } + + /** + * Returns if all upgrades are available + * @returns {boolean} + */ + getHasExtendedUpgrades() { + return !this.isLimitedVersion() || this.currentData.savegameV1119Imported; + } + + /** + * Returns if all levels & freeplay is available + * @returns {boolean} + */ + getHasExtendedLevelsAndFreeplay() { + return !this.isLimitedVersion() || this.currentData.savegameV1119Imported; + } +} diff --git a/src/js/core/utils.js b/src/js/core/utils.js index 60be9859..49e8499a 100644 --- a/src/js/core/utils.js +++ b/src/js/core/utils.js @@ -266,7 +266,6 @@ export function findNiceIntegerValue(num) { * Formats a big number * @param {number} num * @param {string=} separator The decimal separator for numbers like 50.1 (separator='.') - * @param {number=} number of significant figures to include (for values >= 1000) * @returns {string} */ export function formatBigNumber(num, separator = T.global.decimalSeparator, precision = 3) { @@ -678,3 +677,72 @@ export function fillInLinkIntoTranslation(translation, link) { .replace("", "") .replace("", ""); } + +/** + * 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); +} + +/** + * Starts a file chooser + * @param {string} acceptedType + */ +export function startFileChoose(acceptedType = ".bin") { + var input = document.createElement("input"); + input.type = "file"; + input.accept = acceptedType; + + return new Promise(resolve => { + input.onchange = _ => resolve(input.files[0]); + input.click(); + }); +} + +const romanLiterals = [ + "0", // NULL + "I", + "II", + "III", + "IV", + "V", + "VI", + "VII", + "VIII", + "IX", + "X", + "XI", + "XII", + "XIII", + "XIV", + "XV", + "XVI", + "XVII", + "XVIII", + "XIX", + "XX", +]; + +/** + * + * @param {number} number + * @returns {string} + */ +export function getRomanNumber(number) { + number = Math.max(0, Math.round(number)); + if (number < romanLiterals.length) { + return romanLiterals[number]; + } + return String(number); +} diff --git a/src/js/game/belt_path.js b/src/js/game/belt_path.js index b162f09f..eb55d613 100644 --- a/src/js/game/belt_path.js +++ b/src/js/game/belt_path.js @@ -1111,7 +1111,7 @@ export class BeltPath extends BasicSerializableObject { isFirstItemProcessed = false; this.spacingToFirstItem += clampedProgress; - if (remainingVelocity < 0.01) { + if (remainingVelocity < 1e-7) { break; } } diff --git a/src/js/game/blueprint.js b/src/js/game/blueprint.js index c26fb12f..63989393 100644 --- a/src/js/game/blueprint.js +++ b/src/js/game/blueprint.js @@ -1,13 +1,9 @@ import { globalConfig } from "../core/config"; import { DrawParameters } from "../core/draw_parameters"; -import { createLogger } from "../core/logging"; import { findNiceIntegerValue } from "../core/utils"; import { Vector } from "../core/vector"; import { Entity } from "./entity"; import { GameRoot } from "./root"; -import { blueprintShape } from "./upgrades"; - -const logger = createLogger("blueprint"); export class Blueprint { /** @@ -142,7 +138,7 @@ export class Blueprint { * @param {GameRoot} root */ canAfford(root) { - return root.hubGoals.getShapesStoredByKey(blueprintShape) >= this.getCost(); + return root.hubGoals.getShapesStoredByKey(root.gameMode.getBlueprintShapeKey()) >= this.getCost(); } /** diff --git a/src/js/game/buildings/virtual_processor.js b/src/js/game/buildings/virtual_processor.js index 79d65b22..b4f91762 100644 --- a/src/js/game/buildings/virtual_processor.js +++ b/src/js/game/buildings/virtual_processor.js @@ -110,12 +110,7 @@ export class MetaVirtualProcessorBuilding extends MetaBuilding { pinComp.setSlots([ { pos: new Vector(0, 0), - direction: enumDirection.left, - type: enumPinSlotType.logicalEjector, - }, - { - pos: new Vector(0, 0), - direction: enumDirection.right, + direction: enumDirection.top, type: enumPinSlotType.logicalEjector, }, { diff --git a/src/js/game/camera.js b/src/js/game/camera.js index 8f5b850e..107d1fb4 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -511,7 +511,11 @@ export class Camera extends BasicSerializableObject { this.clampZoomLevel(); this.desiredZoom = null; - const mousePosition = this.root.app.mousePosition; + let mousePosition = this.root.app.mousePosition; + if (!this.root.app.settings.getAllSettings().zoomToCursor) { + mousePosition = new Vector(this.root.gameWidth / 2, this.root.gameHeight / 2); + } + if (mousePosition) { const worldPos = this.root.camera.screenToWorld(mousePosition); const worldDelta = worldPos.sub(this.center); diff --git a/src/js/game/core.js b/src/js/game/core.js index 306643f9..2df8989f 100644 --- a/src/js/game/core.js +++ b/src/js/game/core.js @@ -31,6 +31,7 @@ import { KeyActionMapper } from "./key_action_mapper"; import { GameLogic } from "./logic"; import { MapView } from "./map_view"; import { defaultBuildingVariant } from "./meta_building"; +import { RegularGameMode } from "./modes/regular"; import { ProductionAnalytics } from "./production_analytics"; import { GameRoot } from "./root"; import { ShapeDefinitionManager } from "./shape_definition_manager"; @@ -101,6 +102,9 @@ export class GameCore { // Needs to come first root.dynamicTickrate = new DynamicTickrate(root); + // Init game mode + root.gameMode = new RegularGameMode(root); + // Init classes root.camera = new Camera(root); root.map = new MapView(root); diff --git a/src/js/game/game_mode.js b/src/js/game/game_mode.js new file mode 100644 index 00000000..15403eb5 --- /dev/null +++ b/src/js/game/game_mode.js @@ -0,0 +1,71 @@ +/* typehints:start */ +import { enumHubGoalRewards } from "./tutorial_goals"; +/* typehints:end */ + +import { GameRoot } from "./root"; + +/** @typedef {{ + * shape: string, + * amount: number + * }} UpgradeRequirement */ + +/** @typedef {{ + * required: Array + * improvement?: number, + * excludePrevious?: boolean + * }} TierRequirement */ + +/** @typedef {Array} UpgradeTiers */ + +/** @typedef {{ + * shape: string, + * required: number, + * reward: enumHubGoalRewards, + * throughputOnly?: boolean + * }} LevelDefinition */ + +export class GameMode { + /** + * + * @param {GameRoot} root + */ + constructor(root) { + this.root = root; + } + + /** + * Should return all available upgrades + * @returns {Object} + */ + getUpgrades() { + abstract; + return null; + } + + /** + * Returns the blueprint shape key + * @returns {string} + */ + getBlueprintShapeKey() { + abstract; + return null; + } + + /** + * Returns the goals for all levels including their reward + * @returns {Array} + */ + getLevelDefinitions() { + abstract; + return null; + } + + /** + * Should return whether free play is available or if the game stops + * after the predefined levels + * @returns {boolean} + */ + getIsFreeplayAvailable() { + return true; + } +} diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index e01ab868..e7a1fea7 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -1,14 +1,13 @@ -import { globalConfig, IS_DEMO } from "../core/config"; +import { globalConfig } from "../core/config"; import { RandomNumberGenerator } from "../core/rng"; -import { clamp, findNiceIntegerValue, randomChoice, randomInt } from "../core/utils"; +import { clamp } from "../core/utils"; import { BasicSerializableObject, types } from "../savegame/serialization"; import { enumColors } from "./colors"; import { enumItemProcessorTypes } from "./components/item_processor"; import { enumAnalyticsDataSource } from "./production_analytics"; import { GameRoot } from "./root"; import { enumSubShape, ShapeDefinition } from "./shape_definition"; -import { enumHubGoalRewards, tutorialGoals } from "./tutorial_goals"; -import { UPGRADES } from "./upgrades"; +import { enumHubGoalRewards } from "./tutorial_goals"; export class HubGoals extends BasicSerializableObject { static getId() { @@ -23,27 +22,36 @@ export class HubGoals extends BasicSerializableObject { }; } - deserialize(data) { + /** + * + * @param {*} data + * @param {GameRoot} root + */ + deserialize(data, root) { const errorCode = super.deserialize(data); if (errorCode) { return errorCode; } - if (IS_DEMO) { - this.level = Math.min(this.level, tutorialGoals.length); + const levels = root.gameMode.getLevelDefinitions(); + + // If freeplay is not available, clamp the level + if (!root.gameMode.getIsFreeplayAvailable()) { + this.level = Math.min(this.level, levels.length); } // Compute gained rewards for (let i = 0; i < this.level - 1; ++i) { - if (i < tutorialGoals.length) { - const reward = tutorialGoals[i].reward; + if (i < levels.length) { + const reward = levels[i].reward; this.gainedRewards[reward] = (this.gainedRewards[reward] || 0) + 1; } } // Compute upgrade improvements - for (const upgradeId in UPGRADES) { - const tiers = UPGRADES[upgradeId]; + const upgrades = this.root.gameMode.getUpgrades(); + for (const upgradeId in upgrades) { + const tiers = upgrades[upgradeId]; const level = this.upgradeLevels[upgradeId] || 0; let totalImprovement = 1; for (let i = 0; i < level; ++i) { @@ -84,17 +92,16 @@ export class HubGoals extends BasicSerializableObject { */ this.upgradeLevels = {}; - // Reset levels - for (const key in UPGRADES) { - this.upgradeLevels[key] = 0; - } - /** * Stores the improvements for all upgrades * @type {Object} */ this.upgradeImprovements = {}; - for (const key in UPGRADES) { + + // Reset levels first + const upgrades = this.root.gameMode.getUpgrades(); + for (const key in upgrades) { + this.upgradeLevels[key] = 0; this.upgradeImprovements[key] = 1; } @@ -120,7 +127,10 @@ export class HubGoals extends BasicSerializableObject { * @returns {boolean} */ isEndOfDemoReached() { - return IS_DEMO && this.level >= tutorialGoals.length; + return ( + !this.root.gameMode.getIsFreeplayAvailable() && + this.level >= this.root.gameMode.getLevelDefinitions().length + ); } /** @@ -215,8 +225,9 @@ export class HubGoals extends BasicSerializableObject { */ computeNextGoal() { const storyIndex = this.level - 1; - if (storyIndex < tutorialGoals.length) { - const { shape, required, reward, throughputOnly } = tutorialGoals[storyIndex]; + const levels = this.root.gameMode.getLevelDefinitions(); + if (storyIndex < levels.length) { + const { shape, required, reward, throughputOnly } = levels[storyIndex]; this.currentGoal = { /** @type {ShapeDefinition} */ definition: this.root.shapeDefinitionMgr.getShapeFromShortKey(shape), @@ -254,7 +265,7 @@ export class HubGoals extends BasicSerializableObject { * Returns whether we are playing in free-play */ isFreePlay() { - return this.level >= tutorialGoals.length; + return this.level >= this.root.gameMode.getLevelDefinitions().length; } /** @@ -262,7 +273,7 @@ export class HubGoals extends BasicSerializableObject { * @param {string} upgradeId */ canUnlockUpgrade(upgradeId) { - const tiers = UPGRADES[upgradeId]; + const tiers = this.root.gameMode.getUpgrades()[upgradeId]; const currentLevel = this.getUpgradeLevel(upgradeId); if (currentLevel >= tiers.length) { @@ -270,11 +281,6 @@ export class HubGoals extends BasicSerializableObject { return false; } - if (IS_DEMO && currentLevel >= 4) { - // DEMO - return false; - } - if (G_IS_DEV && globalConfig.debug.upgradesNoCost) { return true; } @@ -296,7 +302,7 @@ export class HubGoals extends BasicSerializableObject { */ getAvailableUpgradeCount() { let count = 0; - for (const upgradeId in UPGRADES) { + for (const upgradeId in this.root.gameMode.getUpgrades()) { if (this.canUnlockUpgrade(upgradeId)) { ++count; } @@ -314,7 +320,7 @@ export class HubGoals extends BasicSerializableObject { return false; } - const upgradeTiers = UPGRADES[upgradeId]; + const upgradeTiers = this.root.gameMode.getUpgrades()[upgradeId]; const currentLevel = this.getUpgradeLevel(upgradeId); const tierData = upgradeTiers[currentLevel]; diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 189654c1..a9edffd0 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -15,7 +15,7 @@ import { HUDKeybindingOverlay } from "./parts/keybinding_overlay"; import { HUDUnlockNotification } from "./parts/unlock_notification"; import { HUDGameMenu } from "./parts/game_menu"; import { HUDShop } from "./parts/shop"; -import { IS_MOBILE, globalConfig, IS_DEMO } from "../../core/config"; +import { IS_MOBILE, globalConfig } from "../../core/config"; import { HUDMassSelector } from "./parts/mass_selector"; import { HUDVignetteOverlay } from "./parts/vignette_overlay"; import { HUDStatistics } from "./parts/statistics"; @@ -45,8 +45,8 @@ import { HUDLeverToggle } from "./parts/lever_toggle"; import { HUDLayerPreview } from "./parts/layer_preview"; import { HUDMinerHighlight } from "./parts/miner_highlight"; import { HUDBetaOverlay } from "./parts/beta_overlay"; -import { HUDPerformanceWarning } from "./parts/performance_warning"; import { HUDStandaloneAdvantages } from "./parts/standalone_advantages"; +import { HUDCatMemes } from "./parts/cat_memes"; export class GameHUD { /** @@ -87,7 +87,6 @@ export class GameHUD { layerPreview: new HUDLayerPreview(this.root), minerHighlight: new HUDMinerHighlight(this.root), - performanceWarning: new HUDPerformanceWarning(this.root), // Typing hints /* typehints:start */ @@ -115,9 +114,10 @@ export class GameHUD { this.parts.entityDebugger = new HUDEntityDebugger(this.root); } - if (IS_DEMO) { + if (this.root.app.restrictionMgr.getIsStandaloneMarketingActive()) { this.parts.watermark = new HUDWatermark(this.root); this.parts.standaloneAdvantages = new HUDStandaloneAdvantages(this.root); + this.parts.catMemes = new HUDCatMemes(this.root); } if (G_IS_DEV && globalConfig.debug.renderChanges) { diff --git a/src/js/game/hud/parts/beta_overlay.js b/src/js/game/hud/parts/beta_overlay.js index 1b2fa259..3a515d29 100644 --- a/src/js/game/hud/parts/beta_overlay.js +++ b/src/js/game/hud/parts/beta_overlay.js @@ -7,7 +7,7 @@ export class HUDBetaOverlay extends BaseHUDPart { parent, "ingame_HUD_BetaOverlay", [], - "

UNSTABLE BETA VERSION

Steam Release: 9th October 2020!" + "

UNSTABLE BETA VERSION

Unfinalized & potential buggy content!" ); } diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index 47bf1363..e1040c3b 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -1,202 +1,203 @@ -import { DrawParameters } from "../../../core/draw_parameters"; -import { STOP_PROPAGATION } from "../../../core/signal"; -import { TrackedState } from "../../../core/tracked_state"; -import { makeDiv } from "../../../core/utils"; -import { Vector } from "../../../core/vector"; -import { T } from "../../../translations"; -import { enumMouseButton } from "../../camera"; -import { KEYMAPPINGS } from "../../key_action_mapper"; -import { blueprintShape } from "../../upgrades"; -import { BaseHUDPart } from "../base_hud_part"; -import { DynamicDomAttach } from "../dynamic_dom_attach"; -import { Blueprint } from "../../blueprint"; -import { SOUNDS } from "../../../platform/sound"; - -export class HUDBlueprintPlacer extends BaseHUDPart { - createElements(parent) { - const blueprintCostShape = this.root.shapeDefinitionMgr.getShapeFromShortKey(blueprintShape); - const blueprintCostShapeCanvas = blueprintCostShape.generateAsCanvas(80); - - this.costDisplayParent = makeDiv(parent, "ingame_HUD_BlueprintPlacer", [], ``); - - makeDiv(this.costDisplayParent, null, ["label"], T.ingame.blueprintPlacer.cost); - const costContainer = makeDiv(this.costDisplayParent, null, ["costContainer"], ""); - this.costDisplayText = makeDiv(costContainer, null, ["costText"], ""); - costContainer.appendChild(blueprintCostShapeCanvas); - } - - initialize() { - this.root.hud.signals.buildingsSelectedForCopy.add(this.createBlueprintFromBuildings, this); - - /** @type {TypedTrackedState} */ - this.currentBlueprint = new TrackedState(this.onBlueprintChanged, this); - /** @type {Blueprint?} */ - this.lastBlueprintUsed = null; - - const keyActionMapper = this.root.keyMapper; - keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); - keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.abortPlacement, this); - keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); - keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); - - this.root.camera.downPreHandler.add(this.onMouseDown, this); - this.root.camera.movePreHandler.add(this.onMouseMove, this); - - this.root.hud.signals.selectedPlacementBuildingChanged.add(this.abortPlacement, this); - this.root.signals.editModeChanged.add(this.onEditModeChanged, this); - - this.domAttach = new DynamicDomAttach(this.root, this.costDisplayParent); - this.trackedCanAfford = new TrackedState(this.onCanAffordChanged, this); - } - - abortPlacement() { - if (this.currentBlueprint.get()) { - this.currentBlueprint.set(null); - - return STOP_PROPAGATION; - } - } - - /** - * Called when the layer was changed - * @param {Layer} layer - */ - onEditModeChanged(layer) { - // Check if the layer of the blueprint differs and thus we have to deselect it - const blueprint = this.currentBlueprint.get(); - if (blueprint) { - if (blueprint.layer !== layer) { - this.currentBlueprint.set(null); - } - } - } - - /** - * Called when the blueprint is now affordable or not - * @param {boolean} canAfford - */ - onCanAffordChanged(canAfford) { - this.costDisplayParent.classList.toggle("canAfford", canAfford); - } - - update() { - const currentBlueprint = this.currentBlueprint.get(); - this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0); - this.trackedCanAfford.set(currentBlueprint && currentBlueprint.canAfford(this.root)); - } - - /** - * Called when the blueprint was changed - * @param {Blueprint} blueprint - */ - onBlueprintChanged(blueprint) { - if (blueprint) { - this.lastBlueprintUsed = blueprint; - this.costDisplayText.innerText = "" + blueprint.getCost(); - } - } - - /** - * mouse down pre handler - * @param {Vector} pos - * @param {enumMouseButton} button - */ - onMouseDown(pos, button) { - if (button === enumMouseButton.right) { - if (this.currentBlueprint.get()) { - this.abortPlacement(); - return STOP_PROPAGATION; - } - } - - const blueprint = this.currentBlueprint.get(); - if (!blueprint) { - return; - } - - if (!blueprint.canAfford(this.root)) { - this.root.soundProxy.playUiError(); - return; - } - - const worldPos = this.root.camera.screenToWorld(pos); - const tile = worldPos.toTileSpace(); - if (blueprint.tryPlace(this.root, tile)) { - const cost = blueprint.getCost(); - this.root.hubGoals.takeShapeByKey(blueprintShape, cost); - this.root.soundProxy.playUi(SOUNDS.placeBuilding); - } - } - - /** - * Mose move handler - */ - onMouseMove() { - // Prevent movement while blueprint is selected - if (this.currentBlueprint.get()) { - return STOP_PROPAGATION; - } - } - - /** - * Called when an array of bulidings was selected - * @param {Array} uids - */ - createBlueprintFromBuildings(uids) { - if (uids.length === 0) { - return; - } - this.currentBlueprint.set(Blueprint.fromUids(this.root, uids)); - } - - /** - * Attempts to rotate the current blueprint - */ - rotateBlueprint() { - if (this.currentBlueprint.get()) { - if (this.root.keyMapper.getBinding(KEYMAPPINGS.placement.rotateInverseModifier).pressed) { - this.currentBlueprint.get().rotateCcw(); - } else { - this.currentBlueprint.get().rotateCw(); - } - } - } - - /** - * Attempts to paste the last blueprint - */ - pasteBlueprint() { - if (this.lastBlueprintUsed !== null) { - if (this.lastBlueprintUsed.layer !== this.root.currentLayer) { - // Not compatible - this.root.soundProxy.playUiError(); - return; - } - - this.root.hud.signals.pasteBlueprintRequested.dispatch(); - this.currentBlueprint.set(this.lastBlueprintUsed); - } else { - this.root.soundProxy.playUiError(); - } - } - - /** - * - * @param {DrawParameters} parameters - */ - draw(parameters) { - const blueprint = this.currentBlueprint.get(); - if (!blueprint) { - return; - } - const mousePosition = this.root.app.mousePosition; - if (!mousePosition) { - // Not on screen - return; - } - - const worldPos = this.root.camera.screenToWorld(mousePosition); - const tile = worldPos.toTileSpace(); - blueprint.draw(parameters, tile); - } -} +import { DrawParameters } from "../../../core/draw_parameters"; +import { STOP_PROPAGATION } from "../../../core/signal"; +import { TrackedState } from "../../../core/tracked_state"; +import { makeDiv } from "../../../core/utils"; +import { Vector } from "../../../core/vector"; +import { SOUNDS } from "../../../platform/sound"; +import { T } from "../../../translations"; +import { Blueprint } from "../../blueprint"; +import { enumMouseButton } from "../../camera"; +import { KEYMAPPINGS } from "../../key_action_mapper"; +import { BaseHUDPart } from "../base_hud_part"; +import { DynamicDomAttach } from "../dynamic_dom_attach"; + +export class HUDBlueprintPlacer extends BaseHUDPart { + createElements(parent) { + const blueprintCostShape = this.root.shapeDefinitionMgr.getShapeFromShortKey( + this.root.gameMode.getBlueprintShapeKey() + ); + const blueprintCostShapeCanvas = blueprintCostShape.generateAsCanvas(80); + + this.costDisplayParent = makeDiv(parent, "ingame_HUD_BlueprintPlacer", [], ``); + + makeDiv(this.costDisplayParent, null, ["label"], T.ingame.blueprintPlacer.cost); + const costContainer = makeDiv(this.costDisplayParent, null, ["costContainer"], ""); + this.costDisplayText = makeDiv(costContainer, null, ["costText"], ""); + costContainer.appendChild(blueprintCostShapeCanvas); + } + + initialize() { + this.root.hud.signals.buildingsSelectedForCopy.add(this.createBlueprintFromBuildings, this); + + /** @type {TypedTrackedState} */ + this.currentBlueprint = new TrackedState(this.onBlueprintChanged, this); + /** @type {Blueprint?} */ + this.lastBlueprintUsed = null; + + const keyActionMapper = this.root.keyMapper; + keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.abortPlacement, this); + keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); + keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); + + this.root.camera.downPreHandler.add(this.onMouseDown, this); + this.root.camera.movePreHandler.add(this.onMouseMove, this); + + this.root.hud.signals.selectedPlacementBuildingChanged.add(this.abortPlacement, this); + this.root.signals.editModeChanged.add(this.onEditModeChanged, this); + + this.domAttach = new DynamicDomAttach(this.root, this.costDisplayParent); + this.trackedCanAfford = new TrackedState(this.onCanAffordChanged, this); + } + + abortPlacement() { + if (this.currentBlueprint.get()) { + this.currentBlueprint.set(null); + + return STOP_PROPAGATION; + } + } + + /** + * Called when the layer was changed + * @param {Layer} layer + */ + onEditModeChanged(layer) { + // Check if the layer of the blueprint differs and thus we have to deselect it + const blueprint = this.currentBlueprint.get(); + if (blueprint) { + if (blueprint.layer !== layer) { + this.currentBlueprint.set(null); + } + } + } + + /** + * Called when the blueprint is now affordable or not + * @param {boolean} canAfford + */ + onCanAffordChanged(canAfford) { + this.costDisplayParent.classList.toggle("canAfford", canAfford); + } + + update() { + const currentBlueprint = this.currentBlueprint.get(); + this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0); + this.trackedCanAfford.set(currentBlueprint && currentBlueprint.canAfford(this.root)); + } + + /** + * Called when the blueprint was changed + * @param {Blueprint} blueprint + */ + onBlueprintChanged(blueprint) { + if (blueprint) { + this.lastBlueprintUsed = blueprint; + this.costDisplayText.innerText = "" + blueprint.getCost(); + } + } + + /** + * mouse down pre handler + * @param {Vector} pos + * @param {enumMouseButton} button + */ + onMouseDown(pos, button) { + if (button === enumMouseButton.right) { + if (this.currentBlueprint.get()) { + this.abortPlacement(); + return STOP_PROPAGATION; + } + } + + const blueprint = this.currentBlueprint.get(); + if (!blueprint) { + return; + } + + if (!blueprint.canAfford(this.root)) { + this.root.soundProxy.playUiError(); + return; + } + + const worldPos = this.root.camera.screenToWorld(pos); + const tile = worldPos.toTileSpace(); + if (blueprint.tryPlace(this.root, tile)) { + const cost = blueprint.getCost(); + this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost); + this.root.soundProxy.playUi(SOUNDS.placeBuilding); + } + } + + /** + * Mose move handler + */ + onMouseMove() { + // Prevent movement while blueprint is selected + if (this.currentBlueprint.get()) { + return STOP_PROPAGATION; + } + } + + /** + * Called when an array of bulidings was selected + * @param {Array} uids + */ + createBlueprintFromBuildings(uids) { + if (uids.length === 0) { + return; + } + this.currentBlueprint.set(Blueprint.fromUids(this.root, uids)); + } + + /** + * Attempts to rotate the current blueprint + */ + rotateBlueprint() { + if (this.currentBlueprint.get()) { + if (this.root.keyMapper.getBinding(KEYMAPPINGS.placement.rotateInverseModifier).pressed) { + this.currentBlueprint.get().rotateCcw(); + } else { + this.currentBlueprint.get().rotateCw(); + } + } + } + + /** + * Attempts to paste the last blueprint + */ + pasteBlueprint() { + if (this.lastBlueprintUsed !== null) { + if (this.lastBlueprintUsed.layer !== this.root.currentLayer) { + // Not compatible + this.root.soundProxy.playUiError(); + return; + } + + this.root.hud.signals.pasteBlueprintRequested.dispatch(); + this.currentBlueprint.set(this.lastBlueprintUsed); + } else { + this.root.soundProxy.playUiError(); + } + } + + /** + * + * @param {DrawParameters} parameters + */ + draw(parameters) { + const blueprint = this.currentBlueprint.get(); + if (!blueprint) { + return; + } + const mousePosition = this.root.app.mousePosition; + if (!mousePosition) { + // Not on screen + return; + } + + const worldPos = this.root.camera.screenToWorld(mousePosition); + const tile = worldPos.toTileSpace(); + blueprint.draw(parameters, tile); + } +} diff --git a/src/js/game/hud/parts/buildings_toolbar.js b/src/js/game/hud/parts/buildings_toolbar.js index b492f291..05ffc795 100644 --- a/src/js/game/hud/parts/buildings_toolbar.js +++ b/src/js/game/hud/parts/buildings_toolbar.js @@ -42,7 +42,7 @@ export class HUDBuildingsToolbar extends HUDBaseToolbar { ], visibilityCondition: () => !this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === "regular", - htmlElementId: "ingame_HUD_buildings_toolbar", + htmlElementId: "ingame_HUD_BuildingsToolbar", }); } } diff --git a/src/js/game/hud/parts/cat_memes.js b/src/js/game/hud/parts/cat_memes.js new file mode 100644 index 00000000..f3af2be4 --- /dev/null +++ b/src/js/game/hud/parts/cat_memes.js @@ -0,0 +1,21 @@ +import { makeDiv } from "../../../core/utils"; +import { BaseHUDPart } from "../base_hud_part"; +import { DynamicDomAttach } from "../dynamic_dom_attach"; + +const memeShowIntervalSeconds = 70 * 60; +const memeShowDuration = 5; + +export class HUDCatMemes extends BaseHUDPart { + createElements(parent) { + this.element = makeDiv(parent, "ingame_HUD_CatMemes"); + } + + initialize() { + this.domAttach = new DynamicDomAttach(this.root, this.element); + } + + update() { + const now = this.root.time.realtimeNow(); + this.domAttach.update(now % memeShowIntervalSeconds > memeShowIntervalSeconds - memeShowDuration); + } +} diff --git a/src/js/game/hud/parts/performance_warning.js b/src/js/game/hud/parts/performance_warning.js deleted file mode 100644 index 4875acc8..00000000 --- a/src/js/game/hud/parts/performance_warning.js +++ /dev/null @@ -1,16 +0,0 @@ -import { T } from "../../../translations"; -import { BaseHUDPart } from "../base_hud_part"; - -export class HUDPerformanceWarning extends BaseHUDPart { - initialize() { - this.warningShown = false; - this.root.signals.entityManuallyPlaced.add(this.checkAfterPlace, this); - } - - checkAfterPlace() { - if (!this.warningShown && this.root.entityMgr.entities.length > 10000) { - this.root.hud.parts.dialogs.showInfo(T.dialogs.entityWarning.title, T.dialogs.entityWarning.desc); - this.warningShown = true; - } - } -} diff --git a/src/js/game/hud/parts/pinned_shapes.js b/src/js/game/hud/parts/pinned_shapes.js index 91663c56..542a38b2 100644 --- a/src/js/game/hud/parts/pinned_shapes.js +++ b/src/js/game/hud/parts/pinned_shapes.js @@ -1,12 +1,11 @@ import { ClickDetector } from "../../../core/click_detector"; -import { formatBigNumber, makeDiv, arrayDeleteValue } from "../../../core/utils"; -import { ShapeDefinition } from "../../shape_definition"; -import { BaseHUDPart } from "../base_hud_part"; -import { blueprintShape, UPGRADES } from "../../upgrades"; -import { enumHubGoalRewards } from "../../tutorial_goals"; -import { enumAnalyticsDataSource } from "../../production_analytics"; -import { T } from "../../../translations"; import { globalConfig } from "../../../core/config"; +import { arrayDeleteValue, formatBigNumber, makeDiv } from "../../../core/utils"; +import { T } from "../../../translations"; +import { enumAnalyticsDataSource } from "../../production_analytics"; +import { ShapeDefinition } from "../../shape_definition"; +import { enumHubGoalRewards } from "../../tutorial_goals"; +import { BaseHUDPart } from "../base_hud_part"; /** * Manages the pinned shapes on the left side of the screen @@ -82,7 +81,7 @@ export class HUDPinnedShapes extends BaseHUDPart { updateShapesAfterUpgrade() { for (let i = 0; i < this.pinnedShapes.length; ++i) { const key = this.pinnedShapes[i]; - if (key === blueprintShape) { + if (key === this.root.gameMode.getBlueprintShapeKey()) { // Ignore blueprint shapes continue; } @@ -107,13 +106,14 @@ export class HUDPinnedShapes extends BaseHUDPart { if (key === this.root.hubGoals.currentGoal.definition.getHash()) { return this.root.hubGoals.currentGoal.required; } - if (key === blueprintShape) { + if (key === this.root.gameMode.getBlueprintShapeKey()) { return null; } // Check if this shape is required for any upgrade - for (const upgradeId in UPGRADES) { - const upgradeTiers = UPGRADES[upgradeId]; + const upgrades = this.root.gameMode.getUpgrades(); + for (const upgradeId in upgrades) { + const upgradeTiers = upgrades[upgradeId]; const currentTier = this.root.hubGoals.getUpgradeLevel(upgradeId); const tierHandle = upgradeTiers[currentTier]; @@ -138,7 +138,10 @@ export class HUDPinnedShapes extends BaseHUDPart { * @param {string} key */ isShapePinned(key) { - if (key === this.root.hubGoals.currentGoal.definition.getHash() || key === blueprintShape) { + if ( + key === this.root.hubGoals.currentGoal.definition.getHash() || + key === this.root.gameMode.getBlueprintShapeKey() + ) { // This is a "special" shape which is always pinned return true; } @@ -178,7 +181,7 @@ export class HUDPinnedShapes extends BaseHUDPart { // Pin blueprint shape as well if (this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_blueprints)) { this.internalPinShape({ - key: blueprintShape, + key: this.root.gameMode.getBlueprintShapeKey(), canUnpin: false, className: "blueprint", }); @@ -214,11 +217,11 @@ export class HUDPinnedShapes extends BaseHUDPart { let detector = null; if (canUnpin) { - element.classList.add("unpinable"); + element.classList.add("removable"); detector = new ClickDetector(element, { consumeEvents: true, preventDefault: true, - targetOnly: true, + targetOnly: false, }); detector.click.add(() => this.unpinShape(key)); } else { @@ -291,6 +294,7 @@ export class HUDPinnedShapes extends BaseHUDPart { * @param {string} key */ unpinShape(key) { + console.log("unpin", key); arrayDeleteValue(this.pinnedShapes, key); this.rerenderFull(); } @@ -306,7 +310,7 @@ export class HUDPinnedShapes extends BaseHUDPart { return; } - if (key === blueprintShape) { + if (key === this.root.gameMode.getBlueprintShapeKey()) { // Can not pin the blueprint shape return; } diff --git a/src/js/game/hud/parts/sandbox_controller.js b/src/js/game/hud/parts/sandbox_controller.js index f71b87e0..592487ee 100644 --- a/src/js/game/hud/parts/sandbox_controller.js +++ b/src/js/game/hud/parts/sandbox_controller.js @@ -1,9 +1,7 @@ -import { BaseHUDPart } from "../base_hud_part"; import { makeDiv } from "../../../core/utils"; +import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; -import { blueprintShape, UPGRADES } from "../../upgrades"; import { enumNotificationType } from "./notifications"; -import { tutorialGoals } from "../../tutorial_goals"; export class HUDSandboxController extends BaseHUDPart { createElements(parent) { @@ -75,10 +73,11 @@ export class HUDSandboxController extends BaseHUDPart { } giveBlueprints() { - if (!this.root.hubGoals.storedShapes[blueprintShape]) { - this.root.hubGoals.storedShapes[blueprintShape] = 0; + const shape = this.root.gameMode.getBlueprintShapeKey(); + if (!this.root.hubGoals.storedShapes[shape]) { + this.root.hubGoals.storedShapes[shape] = 0; } - this.root.hubGoals.storedShapes[blueprintShape] += 1e9; + this.root.hubGoals.storedShapes[shape] += 1e9; } maxOutAll() { @@ -89,7 +88,7 @@ export class HUDSandboxController extends BaseHUDPart { } modifyUpgrade(id, amount) { - const upgradeTiers = UPGRADES[id]; + const upgradeTiers = this.root.gameMode.getUpgrades()[id]; const maxLevel = upgradeTiers.length; this.root.hubGoals.upgradeLevels[id] = Math.max( @@ -122,9 +121,10 @@ export class HUDSandboxController extends BaseHUDPart { // Compute gained rewards hubGoals.gainedRewards = {}; + const levels = this.root.gameMode.getLevelDefinitions(); for (let i = 0; i < hubGoals.level - 1; ++i) { - if (i < tutorialGoals.length) { - const reward = tutorialGoals[i].reward; + if (i < levels.length) { + const reward = levels[i].reward; hubGoals.gainedRewards[reward] = (hubGoals.gainedRewards[reward] || 0) + 1; } } diff --git a/src/js/game/hud/parts/screenshot_exporter.js b/src/js/game/hud/parts/screenshot_exporter.js index 59e76c63..dd81f8b6 100644 --- a/src/js/game/hud/parts/screenshot_exporter.js +++ b/src/js/game/hud/parts/screenshot_exporter.js @@ -1,13 +1,13 @@ -import { BaseHUDPart } from "../base_hud_part"; -import { KEYMAPPINGS } from "../../key_action_mapper"; -import { IS_DEMO, globalConfig } from "../../../core/config"; -import { T } from "../../../translations"; -import { createLogger } from "../../../core/logging"; -import { StaticMapEntityComponent } from "../../components/static_map_entity"; -import { Vector } from "../../../core/vector"; import { makeOffscreenBuffer } from "../../../core/buffer_utils"; +import { globalConfig } from "../../../core/config"; import { DrawParameters } from "../../../core/draw_parameters"; +import { createLogger } from "../../../core/logging"; import { Rectangle } from "../../../core/rectangle"; +import { Vector } from "../../../core/vector"; +import { T } from "../../../translations"; +import { StaticMapEntityComponent } from "../../components/static_map_entity"; +import { KEYMAPPINGS } from "../../key_action_mapper"; +import { BaseHUDPart } from "../base_hud_part"; const logger = createLogger("screenshot_exporter"); @@ -19,7 +19,7 @@ export class HUDScreenshotExporter extends BaseHUDPart { } startExport() { - if (IS_DEMO) { + if (!this.root.app.restrictionMgr.getIsExportingScreenshotsPossible()) { this.root.hud.parts.dialogs.showFeatureRestrictionInfo(T.demo.features.exportingBase); return; } @@ -87,7 +87,7 @@ export class HUDScreenshotExporter extends BaseHUDPart { const parameters = new DrawParameters({ context, visibleRect, - desiredAtlasScale: chunkScale, + desiredAtlasScale: 0.25, root: this.root, zoomLevel: chunkScale, }); diff --git a/src/js/game/hud/parts/settings_menu.js b/src/js/game/hud/parts/settings_menu.js index b4850e0f..eb902934 100644 --- a/src/js/game/hud/parts/settings_menu.js +++ b/src/js/game/hud/parts/settings_menu.js @@ -43,7 +43,7 @@ export class HUDSettingsMenu extends BaseHUDPart { ]; for (let i = 0; i < buttons.length; ++i) { - const { title, action, id } = buttons[i]; + const { action, id } = buttons[i]; const element = document.createElement("button"); element.classList.add("styledButton"); diff --git a/src/js/game/hud/parts/shop.js b/src/js/game/hud/parts/shop.js index 4a25d16e..96521898 100644 --- a/src/js/game/hud/parts/shop.js +++ b/src/js/game/hud/parts/shop.js @@ -1,9 +1,8 @@ import { ClickDetector } from "../../../core/click_detector"; import { InputReceiver } from "../../../core/input_receiver"; -import { formatBigNumber, makeDiv } from "../../../core/utils"; +import { formatBigNumber, getRomanNumber, makeDiv } from "../../../core/utils"; import { T } from "../../../translations"; import { KeyActionMapper, KEYMAPPINGS } from "../../key_action_mapper"; -import { UPGRADES } from "../../upgrades"; import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; @@ -21,7 +20,7 @@ export class HUDShop extends BaseHUDPart { this.upgradeToElements = {}; // Upgrades - for (const upgradeId in UPGRADES) { + for (const upgradeId in this.root.gameMode.getUpgrades()) { const handle = {}; handle.requireIndexToElement = []; @@ -59,7 +58,7 @@ export class HUDShop extends BaseHUDPart { rerenderFull() { for (const upgradeId in this.upgradeToElements) { const handle = this.upgradeToElements[upgradeId]; - const upgradeTiers = UPGRADES[upgradeId]; + const upgradeTiers = this.root.gameMode.getUpgrades()[upgradeId]; const currentTier = this.root.hubGoals.getUpgradeLevel(upgradeId); const currentTierMultiplier = this.root.hubGoals.upgradeImprovements[upgradeId]; @@ -68,7 +67,7 @@ export class HUDShop extends BaseHUDPart { // Set tier handle.elemTierLabel.innerText = T.ingame.shop.tier.replace( "", - "" + T.ingame.shop.tierLabels[currentTier] + getRomanNumber(currentTier + 1) ); handle.elemTierLabel.setAttribute("data-tier", currentTier); diff --git a/src/js/game/hud/parts/standalone_advantages.js b/src/js/game/hud/parts/standalone_advantages.js index 8eb3d478..4e39e005 100644 --- a/src/js/game/hud/parts/standalone_advantages.js +++ b/src/js/game/hud/parts/standalone_advantages.js @@ -1,4 +1,4 @@ -import { THIRDPARTY_URLS } from "../../../core/config"; +import { A_B_TESTING_LINK_TYPE, THIRDPARTY_URLS } from "../../../core/config"; import { InputReceiver } from "../../../core/input_receiver"; import { makeDiv } from "../../../core/utils"; import { T } from "../../../translations"; @@ -33,16 +33,17 @@ export class HUDStandaloneAdvantages extends BaseHUDPart {
- -
` ); this.trackClicks(this.contentDiv.querySelector("button.steamLinkButton"), () => { this.root.app.analytics.trackUiClick("standalone_advantage_visit_steam"); - this.root.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage + "?ref=savs"); + this.root.app.platformWrapper.openExternalLink( + THIRDPARTY_URLS.standaloneStorePage + "?ref=savs&prc=" + A_B_TESTING_LINK_TYPE + ); this.close(); }); this.trackClicks(this.contentDiv.querySelector("button.otherCloseButton"), () => { diff --git a/src/js/game/hud/parts/unlock_notification.js b/src/js/game/hud/parts/unlock_notification.js index 5fea2892..5fa0e3e2 100644 --- a/src/js/game/hud/parts/unlock_notification.js +++ b/src/js/game/hud/parts/unlock_notification.js @@ -1,14 +1,14 @@ import { globalConfig } from "../../../core/config"; import { gMetaBuildingRegistry } from "../../../core/global_registries"; +import { InputReceiver } from "../../../core/input_receiver"; import { makeDiv } from "../../../core/utils"; import { SOUNDS } from "../../../platform/sound"; import { T } from "../../../translations"; import { defaultBuildingVariant } from "../../meta_building"; -import { enumHubGoalRewards, tutorialGoals } from "../../tutorial_goals"; +import { enumHubGoalRewards } from "../../tutorial_goals"; +import { enumHubGoalRewardsToContentUnlocked } from "../../tutorial_goals_mappings"; import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; -import { enumHubGoalRewardsToContentUnlocked } from "../../tutorial_goals_mappings"; -import { InputReceiver } from "../../../core/input_receiver"; import { enumNotificationType } from "./notifications"; export class HUDUnlockNotification extends BaseHUDPart { @@ -53,7 +53,9 @@ export class HUDUnlockNotification extends BaseHUDPart { showForLevel(level, reward) { this.root.soundProxy.playUi(SOUNDS.levelComplete); - if (level > tutorialGoals.length) { + const levels = this.root.gameMode.getLevelDefinitions(); + // Don't use getIsFreeplay() because we want the freeplay level up to show + if (level > levels.length) { this.root.hud.signals.notification.dispatch( T.ingame.notifications.freeplayLevelComplete.replace("", String(level)), enumNotificationType.success diff --git a/src/js/game/hud/parts/watermark.js b/src/js/game/hud/parts/watermark.js index 10e48e6d..4a75ea76 100644 --- a/src/js/game/hud/parts/watermark.js +++ b/src/js/game/hud/parts/watermark.js @@ -4,6 +4,9 @@ import { T } from "../../../translations"; import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; +const watermarkShowIntervalSeconds = G_IS_DEV ? 120 : 7 * 60; +const watermarkShowDuration = 5; + export class HUDWatermark extends BaseHUDPart { createElements(parent) { this.element = makeDiv( @@ -38,7 +41,9 @@ export class HUDWatermark extends BaseHUDPart { } update() { - this.domAttach.update(this.root.time.realtimeNow() % (G_IS_DEV ? 20 : 180) < 5); + this.domAttach.update( + this.root.time.realtimeNow() % watermarkShowIntervalSeconds < watermarkShowDuration + ); } onWatermarkClick() { diff --git a/src/js/game/hud/parts/waypoints.js b/src/js/game/hud/parts/waypoints.js index 1aed7df2..a6f37b93 100644 --- a/src/js/game/hud/parts/waypoints.js +++ b/src/js/game/hud/parts/waypoints.js @@ -1,5 +1,5 @@ import { makeOffscreenBuffer } from "../../../core/buffer_utils"; -import { globalConfig, IS_DEMO, THIRDPARTY_URLS } from "../../../core/config"; +import { globalConfig, THIRDPARTY_URLS } from "../../../core/config"; import { DrawParameters } from "../../../core/draw_parameters"; import { Loader } from "../../../core/loader"; import { DialogWithForm } from "../../../core/modal_dialog_elements"; @@ -302,7 +302,7 @@ export class HUDWaypoints extends BaseHUDPart { // Show info that you can have only N markers in the demo, // actually show this *after* entering the name so you want the // standalone even more (I'm evil :P) - if (IS_DEMO && this.waypoints.length > 2) { + if (this.waypoints.length > this.root.app.restrictionMgr.getMaximumWaypoints()) { this.root.hud.parts.dialogs.showFeatureRestrictionInfo( "", T.dialogs.markerDemoLimit.desc diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index 9c1b2f96..872db1d2 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -248,6 +248,8 @@ export function getStringForKeyCode(code) { return ","; case 189: return "-"; + case 190: + return "."; case 191: return "/"; case 219: @@ -260,7 +262,9 @@ export function getStringForKeyCode(code) { return "'"; } - return String.fromCharCode(code); + return (48 <= code && code <= 57) || (65 <= code && code <= 90) + ? String.fromCharCode(code) + : "[" + code + "]"; } export class Keybinding { diff --git a/src/js/game/map_view.js b/src/js/game/map_view.js index 0f2ceb89..296291e9 100644 --- a/src/js/game/map_view.js +++ b/src/js/game/map_view.js @@ -26,11 +26,6 @@ export class MapView extends BaseMap { /** @type {CanvasRenderingContext2D} */ this.cachedBackgroundContext = null; - /** - * Cached pattern of the stripes background - * @type {CanvasPattern} */ - this.cachedBackgroundPattern = null; - this.internalInitializeCachedBackgroundCanvases(); this.root.signals.aboutToDestruct.add(this.cleanup, this); @@ -42,7 +37,6 @@ export class MapView extends BaseMap { cleanup() { freeCanvas(this.cachedBackgroundCanvas); this.cachedBackgroundCanvas = null; - this.cachedBackgroundPattern = null; } /** @@ -191,19 +185,15 @@ export class MapView extends BaseMap { * @param {DrawParameters} parameters */ drawBackground(parameters) { - if (!this.cachedBackgroundPattern) { - this.cachedBackgroundPattern = parameters.context.createPattern( - this.cachedBackgroundCanvas, - "repeat" - ); - } - // Render tile grid if (!this.root.app.settings.getAllSettings().disableTileGrid) { const dpi = this.backgroundCacheDPI; parameters.context.scale(1 / dpi, 1 / dpi); - parameters.context.fillStyle = this.cachedBackgroundPattern; + parameters.context.fillStyle = parameters.context.createPattern( + this.cachedBackgroundCanvas, + "repeat" + ); parameters.context.fillRect( parameters.visibleRect.x * dpi, parameters.visibleRect.y * dpi, diff --git a/src/js/game/modes/regular.js b/src/js/game/modes/regular.js new file mode 100644 index 00000000..b7f84216 --- /dev/null +++ b/src/js/game/modes/regular.js @@ -0,0 +1,480 @@ +import { findNiceIntegerValue } from "../../core/utils"; +import { GameMode } from "../game_mode"; +import { ShapeDefinition } from "../shape_definition"; +import { enumHubGoalRewards } from "../tutorial_goals"; + +const rocketShape = "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw"; +const finalGameShape = "RuCw--Cw:----Ru--"; +const preparementShape = "CpRpCp--:SwSwSwSw"; +const blueprintShape = "CbCbCbRb:CwCwCwCw"; + +// Tiers need % of the previous tier as requirement too +const tierGrowth = 2.5; + +/** + * Generates all upgrades + * @returns {Object} */ +function generateUpgrades(limitedVersion = false) { + const fixedImprovements = [0.5, 0.5, 1, 1, 2, 1, 1]; + const numEndgameUpgrades = limitedVersion ? 0 : 1000 - fixedImprovements.length - 1; + + function generateInfiniteUnlocks() { + return new Array(numEndgameUpgrades).fill(null).map((_, i) => ({ + required: [ + { shape: preparementShape, amount: 30000 + i * 10000 }, + { shape: finalGameShape, amount: 20000 + i * 5000 }, + { shape: rocketShape, amount: 20000 + i * 5000 }, + ], + excludePrevious: true, + })); + } + + // Fill in endgame upgrades + for (let i = 0; i < numEndgameUpgrades; ++i) { + if (i < 20) { + fixedImprovements.push(0.1); + } else if (i < 50) { + fixedImprovements.push(0.05); + } else if (i < 100) { + fixedImprovements.push(0.025); + } else { + fixedImprovements.push(0.0125); + } + } + + const upgrades = { + belt: [ + { + required: [{ shape: "CuCuCuCu", amount: 60 }], + }, + { + required: [{ shape: "--CuCu--", amount: 500 }], + }, + { + required: [{ shape: "CpCpCpCp", amount: 1000 }], + }, + { + required: [{ shape: "SrSrSrSr:CyCyCyCy", amount: 6000 }], + }, + { + required: [{ shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", amount: 25000 }], + }, + { + required: [{ shape: preparementShape, amount: 25000 }], + excludePrevious: true, + }, + { + required: [ + { shape: preparementShape, amount: 25000 }, + { shape: finalGameShape, amount: 50000 }, + ], + excludePrevious: true, + }, + ...generateInfiniteUnlocks(), + ], + + miner: [ + { + required: [{ shape: "RuRuRuRu", amount: 300 }], + }, + { + required: [{ shape: "Cu------", amount: 800 }], + }, + { + required: [{ shape: "ScScScSc", amount: 3500 }], + }, + { + required: [{ shape: "CwCwCwCw:WbWbWbWb", amount: 23000 }], + }, + { + required: [{ shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", amount: 50000 }], + }, + { + required: [{ shape: preparementShape, amount: 25000 }], + excludePrevious: true, + }, + { + required: [ + { shape: preparementShape, amount: 25000 }, + { shape: finalGameShape, amount: 50000 }, + ], + excludePrevious: true, + }, + ...generateInfiniteUnlocks(), + ], + + processors: [ + { + required: [{ shape: "SuSuSuSu", amount: 500 }], + }, + { + required: [{ shape: "RuRu----", amount: 600 }], + }, + { + required: [{ shape: "CgScScCg", amount: 3500 }], + }, + { + required: [{ shape: "CwCrCwCr:SgSgSgSg", amount: 25000 }], + }, + { + required: [{ shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", amount: 50000 }], + }, + { + required: [{ shape: preparementShape, amount: 25000 }], + excludePrevious: true, + }, + { + required: [ + { shape: preparementShape, amount: 25000 }, + { shape: finalGameShape, amount: 50000 }, + ], + excludePrevious: true, + }, + ...generateInfiniteUnlocks(), + ], + + painting: [ + { + required: [{ shape: "RbRb----", amount: 600 }], + }, + { + required: [{ shape: "WrWrWrWr", amount: 3800 }], + }, + { + required: [{ shape: "RpRpRpRp:CwCwCwCw", amount: 6500 }], + }, + { + required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp", amount: 25000 }], + }, + { + required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp:CwCwCwCw", amount: 50000 }], + }, + { + required: [{ shape: preparementShape, amount: 25000 }], + excludePrevious: true, + }, + { + required: [ + { shape: preparementShape, amount: 25000 }, + { shape: finalGameShape, amount: 50000 }, + ], + excludePrevious: true, + }, + ...generateInfiniteUnlocks(), + ], + }; + + // Automatically generate tier levels + for (const upgradeId in upgrades) { + const upgradeTiers = upgrades[upgradeId]; + + let currentTierRequirements = []; + for (let i = 0; i < upgradeTiers.length; ++i) { + const tierHandle = upgradeTiers[i]; + tierHandle.improvement = fixedImprovements[i]; + const originalRequired = tierHandle.required.slice(); + + for (let k = currentTierRequirements.length - 1; k >= 0; --k) { + const oldTierRequirement = currentTierRequirements[k]; + if (!tierHandle.excludePrevious) { + tierHandle.required.unshift({ + shape: oldTierRequirement.shape, + amount: oldTierRequirement.amount, + }); + } + } + currentTierRequirements.push( + ...originalRequired.map(req => ({ + amount: req.amount, + shape: req.shape, + })) + ); + currentTierRequirements.forEach(tier => { + tier.amount = findNiceIntegerValue(tier.amount * tierGrowth); + }); + } + } + + // VALIDATE + if (G_IS_DEV) { + for (const upgradeId in upgrades) { + upgrades[upgradeId].forEach(tier => { + tier.required.forEach(({ shape }) => { + try { + ShapeDefinition.fromShortKey(shape); + } catch (ex) { + throw new Error("Invalid upgrade goal: '" + ex + "' for shape" + shape); + } + }); + }); + } + } + + return upgrades; +} + +/** + * Generates the level definitions + * @param {boolean} limitedVersion + */ +export function generateLevelDefinitions(limitedVersion = false) { + const levelDefinitions = [ + // 1 + // Circle + { + shape: "CuCuCuCu", // belts t1 + required: 30, + reward: enumHubGoalRewards.reward_cutter_and_trash, + }, + + // 2 + // Cutter + { + shape: "----CuCu", // + required: 40, + reward: enumHubGoalRewards.no_reward, + }, + + // 3 + // Rectangle + { + shape: "RuRuRuRu", // miners t1 + required: 70, + reward: enumHubGoalRewards.reward_balancer, + }, + + // 4 + { + shape: "RuRu----", // processors t2 + required: 70, + reward: enumHubGoalRewards.reward_rotater, + }, + + // 5 + // Rotater + { + shape: "Cu----Cu", // belts t2 + required: 170, + reward: enumHubGoalRewards.reward_tunnel, + }, + + // 6 + { + shape: "Cu------", // miners t2 + required: 270, + reward: enumHubGoalRewards.reward_painter, + }, + + // 7 + // Painter + { + shape: "CrCrCrCr", // unused + required: 300, + reward: enumHubGoalRewards.reward_rotater_ccw, + }, + + // 8 + { + shape: "RbRb----", // painter t2 + required: 480, + reward: enumHubGoalRewards.reward_mixer, + }, + + // 9 + // Mixing (purple) + { + shape: "CpCpCpCp", // belts t3 + required: 600, + reward: enumHubGoalRewards.reward_merger, + }, + + // 10 + // STACKER: Star shape + cyan + { + shape: "ScScScSc", // miners t3 + required: 800, + reward: enumHubGoalRewards.reward_stacker, + }, + + // 11 + // Chainable miner + { + shape: "CgScScCg", // processors t3 + required: 1000, + reward: enumHubGoalRewards.reward_miner_chainable, + }, + + // 12 + // Blueprints + { + shape: "CbCbCbRb:CwCwCwCw", + required: 1000, + reward: enumHubGoalRewards.reward_blueprints, + }, + + // 13 + // Tunnel Tier 2 + { + shape: "RpRpRpRp:CwCwCwCw", // painting t3 + required: 3800, + reward: enumHubGoalRewards.reward_underground_belt_tier_2, + }, + + // DEMO STOPS HERE + ...(limitedVersion + ? [ + { + shape: "RpRpRpRp:CwCwCwCw", + required: 0, + reward: enumHubGoalRewards.reward_demo_end, + }, + ] + : [ + // 14 + // Belt reader + { + shape: "--Cg----:--Cr----", // unused + required: 16, // Per second! + reward: enumHubGoalRewards.reward_belt_reader, + throughputOnly: true, + }, + + // 15 + // Storage + { + shape: "SrSrSrSr:CyCyCyCy", // unused + required: 10000, + reward: enumHubGoalRewards.reward_storage, + }, + + // 16 + // Quad Cutter + { + shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", // belts t4 (two variants) + required: 6000, + reward: enumHubGoalRewards.reward_cutter_quad, + }, + + // 17 + // Double painter + { + shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) + required: 20000, + reward: enumHubGoalRewards.reward_painter_double, + }, + + // 18 + // Rotater (180deg) + { + shape: "Sg----Sg:CgCgCgCg:--CyCy--", // unused + required: 20000, + reward: enumHubGoalRewards.reward_rotater_180, + }, + + // 19 + // Compact splitter + { + shape: "CpRpCp--:SwSwSwSw", + required: 25000, + reward: enumHubGoalRewards.reward_splitter, + }, + + // 20 + // WIRES + { + shape: finalGameShape, + required: 25000, + reward: enumHubGoalRewards.reward_wires_painter_and_levers, + }, + + // 21 + // Filter + { + shape: "CrCwCrCw:CwCrCwCr:CrCwCrCw:CwCrCwCr", + required: 25000, + reward: enumHubGoalRewards.reward_filter, + }, + + // 22 + // Constant signal + { + shape: "Cg----Cr:Cw----Cw:Sy------:Cy----Cy", + required: 25000, + reward: enumHubGoalRewards.reward_constant_signal, + }, + + // 23 + // Display + { + shape: "CcSyCcSy:SyCcSyCc:CcSyCcSy", + required: 25000, + reward: enumHubGoalRewards.reward_display, + }, + + // 24 Logic gates + { + shape: "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy", + required: 25000, + reward: enumHubGoalRewards.reward_logic_gates, + }, + + // 25 Virtual Processing + { + shape: "Rg--Rg--:CwRwCwRw:--Rg--Rg", + required: 25000, + reward: enumHubGoalRewards.reward_virtual_processing, + }, + + // 26 Freeplay + { + shape: "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw", + required: 50000, + reward: enumHubGoalRewards.reward_freeplay, + }, + ]), + ]; + + if (G_IS_DEV) { + levelDefinitions.forEach(({ shape }) => { + try { + ShapeDefinition.fromShortKey(shape); + } catch (ex) { + throw new Error("Invalid tutorial goal: '" + ex + "' for shape" + shape); + } + }); + } + + return levelDefinitions; +} + +const fullVersionUpgrades = generateUpgrades(false); +const demoVersionUpgrades = generateUpgrades(true); + +const fullVersionLevels = generateLevelDefinitions(false); +const demoVersionLevels = generateLevelDefinitions(true); + +export class RegularGameMode extends GameMode { + constructor(root) { + super(root); + } + + getUpgrades() { + return this.root.app.restrictionMgr.getHasExtendedUpgrades() + ? fullVersionUpgrades + : demoVersionUpgrades; + } + + getIsFreeplayAvailable() { + return this.root.app.restrictionMgr.getHasExtendedLevelsAndFreeplay(); + } + + getBlueprintShapeKey() { + return blueprintShape; + } + + getLevelDefinitions() { + return this.root.app.restrictionMgr.getHasExtendedLevelsAndFreeplay() + ? fullVersionLevels + : demoVersionLevels; + } +} diff --git a/src/js/game/root.js b/src/js/game/root.js index dd224dd8..6f1e7c36 100644 --- a/src/js/game/root.js +++ b/src/js/game/root.js @@ -1,221 +1,225 @@ -/* eslint-disable no-unused-vars */ -import { Signal } from "../core/signal"; -import { RandomNumberGenerator } from "../core/rng"; -import { createLogger } from "../core/logging"; - -// Type hints -/* typehints:start */ -import { GameTime } from "./time/game_time"; -import { EntityManager } from "./entity_manager"; -import { GameSystemManager } from "./game_system_manager"; -import { GameHUD } from "./hud/hud"; -import { MapView } from "./map_view"; -import { Camera } from "./camera"; -import { InGameState } from "../states/ingame"; -import { AutomaticSave } from "./automatic_save"; -import { Application } from "../application"; -import { SoundProxy } from "./sound_proxy"; -import { Savegame } from "../savegame/savegame"; -import { GameLogic } from "./logic"; -import { ShapeDefinitionManager } from "./shape_definition_manager"; -import { HubGoals } from "./hub_goals"; -import { BufferMaintainer } from "../core/buffer_maintainer"; -import { ProductionAnalytics } from "./production_analytics"; -import { Entity } from "./entity"; -import { ShapeDefinition } from "./shape_definition"; -import { BaseItem } from "./base_item"; -import { DynamicTickrate } from "./dynamic_tickrate"; -import { KeyActionMapper } from "./key_action_mapper"; -import { Vector } from "../core/vector"; -/* typehints:end */ - -const logger = createLogger("game/root"); - -/** @type {Array} */ -export const layers = ["regular", "wires"]; - -/** - * The game root is basically the whole game state at a given point, - * combining all important classes. We don't have globals, but this - * class is passed to almost all game classes. - */ -export class GameRoot { - /** - * Constructs a new game root - * @param {Application} app - */ - constructor(app) { - this.app = app; - - /** @type {Savegame} */ - this.savegame = null; - - /** @type {InGameState} */ - this.gameState = null; - - /** @type {KeyActionMapper} */ - this.keyMapper = null; - - // Store game dimensions - this.gameWidth = 500; - this.gameHeight = 500; - - // Stores whether the current session is a fresh game (true), or was continued (false) - /** @type {boolean} */ - this.gameIsFresh = true; - - // Stores whether the logic is already initialized - /** @type {boolean} */ - this.logicInitialized = false; - - // Stores whether the game is already initialized, that is, all systems etc have been created - /** @type {boolean} */ - this.gameInitialized = false; - - /** - * Whether a bulk operation is running - */ - this.bulkOperationRunning = false; - - //////// Other properties /////// - - /** @type {Camera} */ - this.camera = null; - - /** @type {HTMLCanvasElement} */ - this.canvas = null; - - /** @type {CanvasRenderingContext2D} */ - this.context = null; - - /** @type {MapView} */ - this.map = null; - - /** @type {GameLogic} */ - this.logic = null; - - /** @type {EntityManager} */ - this.entityMgr = null; - - /** @type {GameHUD} */ - this.hud = null; - - /** @type {GameSystemManager} */ - this.systemMgr = null; - - /** @type {GameTime} */ - this.time = null; - - /** @type {HubGoals} */ - this.hubGoals = null; - - /** @type {BufferMaintainer} */ - this.buffers = null; - - /** @type {AutomaticSave} */ - this.automaticSave = null; - - /** @type {SoundProxy} */ - this.soundProxy = null; - - /** @type {ShapeDefinitionManager} */ - this.shapeDefinitionMgr = null; - - /** @type {ProductionAnalytics} */ - this.productionAnalytics = null; - - /** @type {DynamicTickrate} */ - this.dynamicTickrate = null; - - /** @type {Layer} */ - this.currentLayer = "regular"; - - this.signals = { - // Entities - entityManuallyPlaced: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - entityAdded: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - entityChanged: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - entityGotNewComponent: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - entityComponentRemoved: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - entityQueuedForDestroy: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - entityDestroyed: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - - // Global - resized: /** @type {TypedSignal<[number, number]>} */ (new Signal()), - readyToRender: /** @type {TypedSignal<[]>} */ (new Signal()), - aboutToDestruct: /** @type {TypedSignal<[]>} */ new Signal(), - - // Game Hooks - gameSaved: /** @type {TypedSignal<[]>} */ (new Signal()), // Game got saved - gameRestored: /** @type {TypedSignal<[]>} */ (new Signal()), // Game got restored - - gameFrameStarted: /** @type {TypedSignal<[]>} */ (new Signal()), // New frame - - storyGoalCompleted: /** @type {TypedSignal<[number, string]>} */ (new Signal()), - upgradePurchased: /** @type {TypedSignal<[string]>} */ (new Signal()), - - // Called right after game is initialized - postLoadHook: /** @type {TypedSignal<[]>} */ (new Signal()), - - shapeDelivered: /** @type {TypedSignal<[ShapeDefinition]>} */ (new Signal()), - itemProduced: /** @type {TypedSignal<[BaseItem]>} */ (new Signal()), - - bulkOperationFinished: /** @type {TypedSignal<[]>} */ (new Signal()), - - editModeChanged: /** @type {TypedSignal<[Layer]>} */ (new Signal()), - - // Called to check if an entity can be placed, second parameter is an additional offset. - // Use to introduce additional placement checks - prePlacementCheck: /** @type {TypedSignal<[Entity, Vector]>} */ (new Signal()), - - // Called before actually placing an entity, use to perform additional logic - // for freeing space before actually placing. - freeEntityAreaBeforeBuild: /** @type {TypedSignal<[Entity]>} */ (new Signal()), - }; - - // RNG's - /** @type {Object.>} */ - this.rngs = {}; - - // Work queue - this.queue = { - requireRedraw: false, - }; - } - - /** - * Destructs the game root - */ - destruct() { - logger.log("destructing root"); - this.signals.aboutToDestruct.dispatch(); - - this.reset(); - } - - /** - * Resets the whole root and removes all properties - */ - reset() { - if (this.signals) { - // Destruct all signals - for (let i = 0; i < this.signals.length; ++i) { - this.signals[i].removeAll(); - } - } - - if (this.hud) { - this.hud.cleanup(); - } - if (this.camera) { - this.camera.cleanup(); - } - - // Finally free all properties - for (let prop in this) { - if (this.hasOwnProperty(prop)) { - delete this[prop]; - } - } - } -} +/* eslint-disable no-unused-vars */ +import { Signal } from "../core/signal"; +import { RandomNumberGenerator } from "../core/rng"; +import { createLogger } from "../core/logging"; + +// Type hints +/* typehints:start */ +import { GameTime } from "./time/game_time"; +import { EntityManager } from "./entity_manager"; +import { GameSystemManager } from "./game_system_manager"; +import { GameHUD } from "./hud/hud"; +import { MapView } from "./map_view"; +import { Camera } from "./camera"; +import { InGameState } from "../states/ingame"; +import { AutomaticSave } from "./automatic_save"; +import { Application } from "../application"; +import { SoundProxy } from "./sound_proxy"; +import { Savegame } from "../savegame/savegame"; +import { GameLogic } from "./logic"; +import { ShapeDefinitionManager } from "./shape_definition_manager"; +import { HubGoals } from "./hub_goals"; +import { BufferMaintainer } from "../core/buffer_maintainer"; +import { ProductionAnalytics } from "./production_analytics"; +import { Entity } from "./entity"; +import { ShapeDefinition } from "./shape_definition"; +import { BaseItem } from "./base_item"; +import { DynamicTickrate } from "./dynamic_tickrate"; +import { KeyActionMapper } from "./key_action_mapper"; +import { Vector } from "../core/vector"; +import { GameMode } from "./game_mode"; +/* typehints:end */ + +const logger = createLogger("game/root"); + +/** @type {Array} */ +export const layers = ["regular", "wires"]; + +/** + * The game root is basically the whole game state at a given point, + * combining all important classes. We don't have globals, but this + * class is passed to almost all game classes. + */ +export class GameRoot { + /** + * Constructs a new game root + * @param {Application} app + */ + constructor(app) { + this.app = app; + + /** @type {Savegame} */ + this.savegame = null; + + /** @type {InGameState} */ + this.gameState = null; + + /** @type {KeyActionMapper} */ + this.keyMapper = null; + + // Store game dimensions + this.gameWidth = 500; + this.gameHeight = 500; + + // Stores whether the current session is a fresh game (true), or was continued (false) + /** @type {boolean} */ + this.gameIsFresh = true; + + // Stores whether the logic is already initialized + /** @type {boolean} */ + this.logicInitialized = false; + + // Stores whether the game is already initialized, that is, all systems etc have been created + /** @type {boolean} */ + this.gameInitialized = false; + + /** + * Whether a bulk operation is running + */ + this.bulkOperationRunning = false; + + //////// Other properties /////// + + /** @type {Camera} */ + this.camera = null; + + /** @type {HTMLCanvasElement} */ + this.canvas = null; + + /** @type {CanvasRenderingContext2D} */ + this.context = null; + + /** @type {MapView} */ + this.map = null; + + /** @type {GameLogic} */ + this.logic = null; + + /** @type {EntityManager} */ + this.entityMgr = null; + + /** @type {GameHUD} */ + this.hud = null; + + /** @type {GameSystemManager} */ + this.systemMgr = null; + + /** @type {GameTime} */ + this.time = null; + + /** @type {HubGoals} */ + this.hubGoals = null; + + /** @type {BufferMaintainer} */ + this.buffers = null; + + /** @type {AutomaticSave} */ + this.automaticSave = null; + + /** @type {SoundProxy} */ + this.soundProxy = null; + + /** @type {ShapeDefinitionManager} */ + this.shapeDefinitionMgr = null; + + /** @type {ProductionAnalytics} */ + this.productionAnalytics = null; + + /** @type {DynamicTickrate} */ + this.dynamicTickrate = null; + + /** @type {Layer} */ + this.currentLayer = "regular"; + + /** @type {GameMode} */ + this.gameMode = null; + + this.signals = { + // Entities + entityManuallyPlaced: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + entityAdded: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + entityChanged: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + entityGotNewComponent: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + entityComponentRemoved: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + entityQueuedForDestroy: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + entityDestroyed: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + + // Global + resized: /** @type {TypedSignal<[number, number]>} */ (new Signal()), + readyToRender: /** @type {TypedSignal<[]>} */ (new Signal()), + aboutToDestruct: /** @type {TypedSignal<[]>} */ new Signal(), + + // Game Hooks + gameSaved: /** @type {TypedSignal<[]>} */ (new Signal()), // Game got saved + gameRestored: /** @type {TypedSignal<[]>} */ (new Signal()), // Game got restored + + gameFrameStarted: /** @type {TypedSignal<[]>} */ (new Signal()), // New frame + + storyGoalCompleted: /** @type {TypedSignal<[number, string]>} */ (new Signal()), + upgradePurchased: /** @type {TypedSignal<[string]>} */ (new Signal()), + + // Called right after game is initialized + postLoadHook: /** @type {TypedSignal<[]>} */ (new Signal()), + + shapeDelivered: /** @type {TypedSignal<[ShapeDefinition]>} */ (new Signal()), + itemProduced: /** @type {TypedSignal<[BaseItem]>} */ (new Signal()), + + bulkOperationFinished: /** @type {TypedSignal<[]>} */ (new Signal()), + + editModeChanged: /** @type {TypedSignal<[Layer]>} */ (new Signal()), + + // Called to check if an entity can be placed, second parameter is an additional offset. + // Use to introduce additional placement checks + prePlacementCheck: /** @type {TypedSignal<[Entity, Vector]>} */ (new Signal()), + + // Called before actually placing an entity, use to perform additional logic + // for freeing space before actually placing. + freeEntityAreaBeforeBuild: /** @type {TypedSignal<[Entity]>} */ (new Signal()), + }; + + // RNG's + /** @type {Object.>} */ + this.rngs = {}; + + // Work queue + this.queue = { + requireRedraw: false, + }; + } + + /** + * Destructs the game root + */ + destruct() { + logger.log("destructing root"); + this.signals.aboutToDestruct.dispatch(); + + this.reset(); + } + + /** + * Resets the whole root and removes all properties + */ + reset() { + if (this.signals) { + // Destruct all signals + for (let i = 0; i < this.signals.length; ++i) { + this.signals[i].removeAll(); + } + } + + if (this.hud) { + this.hud.cleanup(); + } + if (this.camera) { + this.camera.cleanup(); + } + + // Finally free all properties + for (let prop in this) { + if (this.hasOwnProperty(prop)) { + delete this[prop]; + } + } + } +} diff --git a/src/js/game/systems/constant_signal.js b/src/js/game/systems/constant_signal.js index 0b2f38da..aaf31a19 100644 --- a/src/js/game/systems/constant_signal.js +++ b/src/js/game/systems/constant_signal.js @@ -12,7 +12,6 @@ import { GameSystemWithFilter } from "../game_system_with_filter"; import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON } from "../items/boolean_item"; import { COLOR_ITEM_SINGLETONS } from "../items/color_item"; import { ShapeDefinition } from "../shape_definition"; -import { blueprintShape } from "../upgrades"; export class ConstantSignalSystem extends GameSystemWithFilter { constructor(root) { @@ -61,7 +60,9 @@ export class ConstantSignalSystem extends GameSystemWithFilter { this.root.shapeDefinitionMgr.getShapeItemFromDefinition( this.root.hubGoals.currentGoal.definition ), - this.root.shapeDefinitionMgr.getShapeItemFromShortKey(blueprintShape), + this.root.shapeDefinitionMgr.getShapeItemFromShortKey( + this.root.gameMode.getBlueprintShapeKey() + ), ...this.root.hud.parts.pinnedShapes.pinnedShapes.map(key => this.root.shapeDefinitionMgr.getShapeItemFromShortKey(key) ), diff --git a/src/js/game/systems/hub.js b/src/js/game/systems/hub.js index bed410c6..3370f679 100644 --- a/src/js/game/systems/hub.js +++ b/src/js/game/systems/hub.js @@ -1,4 +1,4 @@ -import { globalConfig, IS_DEMO } from "../../core/config"; +import { globalConfig } from "../../core/config"; import { smoothenDpi } from "../../core/dpi_manager"; import { DrawParameters } from "../../core/draw_parameters"; import { drawSpriteClipped } from "../../core/draw_utils"; diff --git a/src/js/game/systems/logic_gate.js b/src/js/game/systems/logic_gate.js index 46d040c0..4545a331 100644 --- a/src/js/game/systems/logic_gate.js +++ b/src/js/game/systems/logic_gate.js @@ -154,22 +154,18 @@ export class LogicGateSystem extends GameSystemWithFilter { /** * @param {Array} parameters - * @returns {[BaseItem, BaseItem]} + * @returns {BaseItem} */ compute_ROTATE(parameters) { const item = parameters[0]; if (!item || item.getItemType() !== "shape") { // Not a shape - return [null, null]; + return null; } const definition = /** @type {ShapeItem} */ (item).definition; - const rotatedDefinitionCCW = this.root.shapeDefinitionMgr.shapeActionRotateCCW(definition); const rotatedDefinitionCW = this.root.shapeDefinitionMgr.shapeActionRotateCW(definition); - return [ - this.root.shapeDefinitionMgr.getShapeItemFromDefinition(rotatedDefinitionCCW), - this.root.shapeDefinitionMgr.getShapeItemFromDefinition(rotatedDefinitionCW), - ]; + return this.root.shapeDefinitionMgr.getShapeItemFromDefinition(rotatedDefinitionCW); } /** diff --git a/src/js/game/tutorial_goals.js b/src/js/game/tutorial_goals.js index f7b56ffe..84634b0a 100644 --- a/src/js/game/tutorial_goals.js +++ b/src/js/game/tutorial_goals.js @@ -1,7 +1,3 @@ -import { IS_DEMO } from "../core/config"; -import { ShapeDefinition } from "./shape_definition"; -import { finalGameShape } from "./upgrades"; - /** * Don't forget to also update tutorial_goals_mappings.js as well as the translations! * @enum {string} @@ -40,229 +36,3 @@ export const enumHubGoalRewards = { no_reward: "no_reward", no_reward_freeplay: "no_reward_freeplay", }; - -export const tutorialGoals = [ - // 1 - // Circle - { - shape: "CuCuCuCu", // belts t1 - required: 30, - reward: enumHubGoalRewards.reward_cutter_and_trash, - }, - - // 2 - // Cutter - { - shape: "----CuCu", // - required: 40, - reward: enumHubGoalRewards.no_reward, - }, - - // 3 - // Rectangle - { - shape: "RuRuRuRu", // miners t1 - required: 70, - reward: enumHubGoalRewards.reward_balancer, - }, - - // 4 - { - shape: "RuRu----", // processors t2 - required: 70, - reward: enumHubGoalRewards.reward_rotater, - }, - - // 5 - // Rotater - { - shape: "Cu----Cu", // belts t2 - required: 170, - reward: enumHubGoalRewards.reward_tunnel, - }, - - // 6 - { - shape: "Cu------", // miners t2 - required: 270, - reward: enumHubGoalRewards.reward_painter, - }, - - // 7 - // Painter - { - shape: "CrCrCrCr", // unused - required: 300, - reward: enumHubGoalRewards.reward_rotater_ccw, - }, - - // 8 - { - shape: "RbRb----", // painter t2 - required: 480, - reward: enumHubGoalRewards.reward_mixer, - }, - - // 9 - // Mixing (purple) - { - shape: "CpCpCpCp", // belts t3 - required: 600, - reward: enumHubGoalRewards.reward_merger, - }, - - // 10 - // STACKER: Star shape + cyan - { - shape: "ScScScSc", // miners t3 - required: 800, - reward: enumHubGoalRewards.reward_stacker, - }, - - // 11 - // Chainable miner - { - shape: "CgScScCg", // processors t3 - required: 1000, - reward: enumHubGoalRewards.reward_miner_chainable, - }, - - // 12 - // Blueprints - { - shape: "CbCbCbRb:CwCwCwCw", - required: 1000, - reward: enumHubGoalRewards.reward_blueprints, - }, - - // 13 - // Tunnel Tier 2 - { - shape: "RpRpRpRp:CwCwCwCw", // painting t3 - required: 3800, - reward: enumHubGoalRewards.reward_underground_belt_tier_2, - }, - - // DEMO STOPS HERE - ...(IS_DEMO - ? [ - { - shape: "RpRpRpRp:CwCwCwCw", - required: 0, - reward: enumHubGoalRewards.reward_demo_end, - }, - ] - : [ - // 14 - // Belt reader - { - shape: "--Cg----:--Cr----", // unused - required: 16, // Per second! - reward: enumHubGoalRewards.reward_belt_reader, - throughputOnly: true, - }, - - // 15 - // Storage - { - shape: "SrSrSrSr:CyCyCyCy", // unused - required: 10000, - reward: enumHubGoalRewards.reward_storage, - }, - - // 16 - // Quad Cutter - { - shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", // belts t4 (two variants) - required: 6000, - reward: enumHubGoalRewards.reward_cutter_quad, - }, - - // 17 - // Double painter - { - shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) - required: 20000, - reward: enumHubGoalRewards.reward_painter_double, - }, - - // 18 - // Rotater (180deg) - { - shape: "Sg----Sg:CgCgCgCg:--CyCy--", // unused - required: 20000, - reward: enumHubGoalRewards.reward_rotater_180, - }, - - // 19 - // Compact splitter - { - shape: "CpRpCp--:SwSwSwSw", - required: 25000, - reward: enumHubGoalRewards.reward_splitter, - }, - - // 20 - // WIRES - { - shape: finalGameShape, - required: 25000, - reward: enumHubGoalRewards.reward_wires_painter_and_levers, - }, - - // 21 - // Filter - { - shape: "CrCwCrCw:CwCrCwCr:CrCwCrCw:CwCrCwCr", - required: 25000, - reward: enumHubGoalRewards.reward_filter, - }, - - // 22 - // Constant signal - { - shape: "Cg----Cr:Cw----Cw:Sy------:Cy----Cy", - required: 25000, - reward: enumHubGoalRewards.reward_constant_signal, - }, - - // 23 - // Display - { - shape: "CcSyCcSy:SyCcSyCc:CcSyCcSy", - required: 25000, - reward: enumHubGoalRewards.reward_display, - }, - - // 24 Logic gates - { - shape: "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy", - required: 25000, - reward: enumHubGoalRewards.reward_logic_gates, - }, - - // 25 Virtual Processing - { - shape: "Rg--Rg--:CwRwCwRw:--Rg--Rg", - required: 25000, - reward: enumHubGoalRewards.reward_virtual_processing, - }, - - // 26 Freeplay - { - shape: "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw", - required: 50000, - reward: enumHubGoalRewards.reward_freeplay, - }, - ]), -]; - -if (G_IS_DEV) { - tutorialGoals.forEach(({ shape }) => { - try { - ShapeDefinition.fromShortKey(shape); - } catch (ex) { - throw new Error("Invalid tutorial goal: '" + ex + "' for shape" + shape); - } - }); -} diff --git a/src/js/game/upgrades.js b/src/js/game/upgrades.js deleted file mode 100644 index 14422cb2..00000000 --- a/src/js/game/upgrades.js +++ /dev/null @@ -1,211 +0,0 @@ -import { findNiceIntegerValue } from "../core/utils"; -import { ShapeDefinition } from "./shape_definition"; - -export const preparementShape = "CpRpCp--:SwSwSwSw"; -export const finalGameShape = "RuCw--Cw:----Ru--"; -export const rocketShape = "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw"; -export const blueprintShape = "CbCbCbRb:CwCwCwCw"; - -const fixedImprovements = [0.5, 0.5, 1, 1, 2, 1, 1]; - -const numEndgameUpgrades = G_IS_DEV || G_IS_STANDALONE ? 20 - fixedImprovements.length - 1 : 0; - -function generateEndgameUpgrades() { - return new Array(numEndgameUpgrades).fill(null).map((_, i) => ({ - required: [ - { shape: preparementShape, amount: 30000 + i * 10000 }, - { shape: finalGameShape, amount: 20000 + i * 5000 }, - { shape: rocketShape, amount: 20000 + i * 5000 }, - ], - excludePrevious: true, - })); -} - -for (let i = 0; i < numEndgameUpgrades; ++i) { - fixedImprovements.push(0.1); -} - -/** @typedef {{ - * shape: string, - * amount: number - * }} UpgradeRequirement */ - -/** @typedef {{ - * required: Array - * improvement?: number, - * excludePrevious?: boolean - * }} TierRequirement */ - -/** @typedef {Array} UpgradeTiers */ - -/** @type {Object} */ -export const UPGRADES = { - belt: [ - { - required: [{ shape: "CuCuCuCu", amount: 60 }], - }, - { - required: [{ shape: "--CuCu--", amount: 500 }], - }, - { - required: [{ shape: "CpCpCpCp", amount: 1000 }], - }, - { - required: [{ shape: "SrSrSrSr:CyCyCyCy", amount: 6000 }], - }, - { - required: [{ shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", amount: 25000 }], - }, - { - required: [{ shape: preparementShape, amount: 25000 }], - excludePrevious: true, - }, - { - required: [ - { shape: preparementShape, amount: 25000 }, - { shape: finalGameShape, amount: 50000 }, - ], - excludePrevious: true, - }, - ...generateEndgameUpgrades(), - ], - - miner: [ - { - required: [{ shape: "RuRuRuRu", amount: 300 }], - }, - { - required: [{ shape: "Cu------", amount: 800 }], - }, - { - required: [{ shape: "ScScScSc", amount: 3500 }], - }, - { - required: [{ shape: "CwCwCwCw:WbWbWbWb", amount: 23000 }], - }, - { - required: [{ shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", amount: 50000 }], - }, - { - required: [{ shape: preparementShape, amount: 25000 }], - excludePrevious: true, - }, - { - required: [ - { shape: preparementShape, amount: 25000 }, - { shape: finalGameShape, amount: 50000 }, - ], - excludePrevious: true, - }, - ...generateEndgameUpgrades(), - ], - - processors: [ - { - required: [{ shape: "SuSuSuSu", amount: 500 }], - }, - { - required: [{ shape: "RuRu----", amount: 600 }], - }, - { - required: [{ shape: "CgScScCg", amount: 3500 }], - }, - { - required: [{ shape: "CwCrCwCr:SgSgSgSg", amount: 25000 }], - }, - { - required: [{ shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", amount: 50000 }], - }, - { - required: [{ shape: preparementShape, amount: 25000 }], - excludePrevious: true, - }, - { - required: [ - { shape: preparementShape, amount: 25000 }, - { shape: finalGameShape, amount: 50000 }, - ], - excludePrevious: true, - }, - ...generateEndgameUpgrades(), - ], - - painting: [ - { - required: [{ shape: "RbRb----", amount: 600 }], - }, - { - required: [{ shape: "WrWrWrWr", amount: 3800 }], - }, - { - required: [{ shape: "RpRpRpRp:CwCwCwCw", amount: 6500 }], - }, - { - required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp", amount: 25000 }], - }, - { - required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp:CwCwCwCw", amount: 50000 }], - }, - { - required: [{ shape: preparementShape, amount: 25000 }], - excludePrevious: true, - }, - { - required: [ - { shape: preparementShape, amount: 25000 }, - { shape: finalGameShape, amount: 50000 }, - ], - excludePrevious: true, - }, - ...generateEndgameUpgrades(), - ], -}; - -// Tiers need % of the previous tier as requirement too -const tierGrowth = 2.5; - -// Automatically generate tier levels -for (const upgradeId in UPGRADES) { - const upgradeTiers = UPGRADES[upgradeId]; - - let currentTierRequirements = []; - for (let i = 0; i < upgradeTiers.length; ++i) { - const tierHandle = upgradeTiers[i]; - tierHandle.improvement = fixedImprovements[i]; - const originalRequired = tierHandle.required.slice(); - - for (let k = currentTierRequirements.length - 1; k >= 0; --k) { - const oldTierRequirement = currentTierRequirements[k]; - if (!tierHandle.excludePrevious) { - tierHandle.required.unshift({ - shape: oldTierRequirement.shape, - amount: oldTierRequirement.amount, - }); - } - } - currentTierRequirements.push( - ...originalRequired.map(req => ({ - amount: req.amount, - shape: req.shape, - })) - ); - currentTierRequirements.forEach(tier => { - tier.amount = findNiceIntegerValue(tier.amount * tierGrowth); - }); - } -} - -// VALIDATE -if (G_IS_DEV) { - for (const upgradeId in UPGRADES) { - UPGRADES[upgradeId].forEach(tier => { - tier.required.forEach(({ shape }) => { - try { - ShapeDefinition.fromShortKey(shape); - } catch (ex) { - throw new Error("Invalid upgrade goal: '" + ex + "' for shape" + shape); - } - }); - }); - } -} diff --git a/src/js/platform/browser/game_analytics.js b/src/js/platform/browser/game_analytics.js index ea23509b..a3947be6 100644 --- a/src/js/platform/browser/game_analytics.js +++ b/src/js/platform/browser/game_analytics.js @@ -1,14 +1,12 @@ import { globalConfig } from "../../core/config"; import { createLogger } from "../../core/logging"; +import { queryParamOptions } from "../../core/query_parameters"; +import { BeltComponent } from "../../game/components/belt"; +import { StaticMapEntityComponent } from "../../game/components/static_map_entity"; import { GameRoot } from "../../game/root"; import { InGameState } from "../../states/ingame"; import { GameAnalyticsInterface } from "../game_analytics"; import { FILE_NOT_FOUND } from "../storage"; -import { blueprintShape, UPGRADES } from "../../game/upgrades"; -import { tutorialGoals } from "../../game/tutorial_goals"; -import { BeltComponent } from "../../game/components/belt"; -import { StaticMapEntityComponent } from "../../game/components/static_map_entity"; -import { queryParamOptions } from "../../core/query_parameters"; const logger = createLogger("game_analytics"); @@ -190,23 +188,26 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { /** * Returns true if the shape is interesting + * @param {GameRoot} root * @param {string} key */ - isInterestingShape(key) { - if (key === blueprintShape) { + isInterestingShape(root, key) { + if (key === root.gameMode.getBlueprintShapeKey()) { return true; } // Check if its a story goal - for (let i = 0; i < tutorialGoals.length; ++i) { - if (key === tutorialGoals[i].shape) { + const levels = root.gameMode.getLevelDefinitions(); + for (let i = 0; i < levels.length; ++i) { + if (key === levels[i].shape) { return true; } } // Check if its required to unlock an upgrade - for (const upgradeKey in UPGRADES) { - const upgradeTiers = UPGRADES[upgradeKey]; + const upgrades = root.gameMode.getUpgrades(); + for (const upgradeKey in upgrades) { + const upgradeTiers = upgrades[upgradeKey]; for (let i = 0; i < upgradeTiers.length; ++i) { const tier = upgradeTiers[i]; const required = tier.required; @@ -226,7 +227,9 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { * @param {GameRoot} root */ generateGameDump(root) { - const shapeIds = Object.keys(root.hubGoals.storedShapes).filter(this.isInterestingShape.bind(this)); + const shapeIds = Object.keys(root.hubGoals.storedShapes).filter(key => + this.isInterestingShape(root, key) + ); let shapes = {}; for (let i = 0; i < shapeIds.length; ++i) { shapes[shapeIds[i]] = root.hubGoals.storedShapes[shapeIds[i]]; diff --git a/src/js/platform/browser/wrapper.js b/src/js/platform/browser/wrapper.js index 56705025..232a743b 100644 --- a/src/js/platform/browser/wrapper.js +++ b/src/js/platform/browser/wrapper.js @@ -1,214 +1,202 @@ -import { globalConfig, IS_DEMO, IS_MOBILE } from "../../core/config"; -import { createLogger } from "../../core/logging"; -import { queryParamOptions } from "../../core/query_parameters"; -import { clamp } from "../../core/utils"; -import { GamedistributionAdProvider } from "../ad_providers/gamedistribution"; -import { NoAdProvider } from "../ad_providers/no_ad_provider"; -import { PlatformWrapperInterface } from "../wrapper"; -import { StorageImplBrowser } from "./storage"; -import { StorageImplBrowserIndexedDB } from "./storage_indexed_db"; - -const logger = createLogger("platform/browser"); - -export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { - initialize() { - this.recaptchaTokenCallback = null; - - this.embedProvider = { - id: "shapezio-website", - adProvider: NoAdProvider, - iframed: false, - externalLinks: true, - iogLink: true, - unlimitedSavegames: IS_DEMO ? false : true, - showDemoBadge: IS_DEMO, - }; - - if (!G_IS_STANDALONE && queryParamOptions.embedProvider) { - const providerId = queryParamOptions.embedProvider; - this.embedProvider.iframed = true; - this.embedProvider.iogLink = false; - - switch (providerId) { - case "armorgames": { - this.embedProvider.id = "armorgames"; - break; - } - - case "iogames.space": { - this.embedProvider.id = "iogames.space"; - this.embedProvider.iogLink = true; - this.embedProvider.unlimitedSavegames = true; - this.embedProvider.showDemoBadge = false; - break; - } - - case "miniclip": { - this.embedProvider.id = "miniclip"; - break; - } - - case "gamedistribution": { - this.embedProvider.id = "gamedistribution"; - this.embedProvider.externalLinks = false; - this.embedProvider.adProvider = GamedistributionAdProvider; - break; - } - - case "kongregate": { - this.embedProvider.id = "kongregate"; - break; - } - - case "crazygames": { - this.embedProvider.id = "crazygames"; - break; - } - - default: { - logger.error("Got unsupported embed provider:", providerId); - } - } - } - - logger.log("Embed provider:", this.embedProvider.id); - - return this.detectStorageImplementation() - .then(() => this.initializeAdProvider()) - .then(() => super.initialize()); - } - - detectStorageImplementation() { - return new Promise(resolve => { - logger.log("Detecting storage"); - - if (!window.indexedDB) { - logger.log("Indexed DB not supported"); - this.app.storage = new StorageImplBrowser(this.app); - resolve(); - return; - } - - // Try accessing the indexedb - let request; - try { - request = window.indexedDB.open("indexeddb_feature_detection", 1); - } catch (ex) { - logger.warn("Error while opening indexed db:", ex); - this.app.storage = new StorageImplBrowser(this.app); - resolve(); - return; - } - request.onerror = err => { - logger.log("Indexed DB can *not* be accessed: ", err); - logger.log("Using fallback to local storage"); - this.app.storage = new StorageImplBrowser(this.app); - resolve(); - }; - request.onsuccess = () => { - logger.log("Indexed DB *can* be accessed"); - this.app.storage = new StorageImplBrowserIndexedDB(this.app); - resolve(); - }; - }); - } - - getHasUnlimitedSavegames() { - return this.embedProvider.unlimitedSavegames; - } - - getShowDemoBadges() { - return this.embedProvider.showDemoBadge; - } - - getId() { - return "browser@" + this.embedProvider.id; - } - - getUiScale() { - if (IS_MOBILE) { - return 1; - } - - const avgDims = Math.min(this.app.screenWidth, this.app.screenHeight); - return clamp((avgDims / 1000.0) * 1.9, 0.1, 10); - } - - getSupportsRestart() { - return true; - } - - getTouchPanStrength() { - return IS_MOBILE ? 1 : 0.5; - } - - openExternalLink(url, force = false) { - logger.log("Opening external:", url); - if (force || this.embedProvider.externalLinks) { - window.open(url); - } else { - // Do nothing - alert( - "This platform does not allow opening external links. You can play on https://shapez.io directly to open them.\n\nClicked Link: " + - url - ); - } - } - - performRestart() { - logger.log("Performing restart"); - window.location.reload(true); - } - - /** - * Detects if there is an adblocker installed - * @returns {Promise} - */ - detectAdblock() { - return Promise.race([ - new Promise(resolve => { - // If the request wasn't blocked within a very short period of time, this means - // the adblocker is not active and the request was actually made -> ignore it then - setTimeout(() => resolve(false), 30); - }), - new Promise(resolve => { - fetch("https://googleads.g.doubleclick.net/pagead/id", { - method: "HEAD", - mode: "no-cors", - }) - .then(res => { - resolve(false); - }) - .catch(err => { - resolve(true); - }); - }), - ]); - } - - initializeAdProvider() { - if (G_IS_DEV && !globalConfig.debug.testAds) { - logger.log("Ads disabled in local environment"); - return Promise.resolve(); - } - - // First, detect adblocker - return this.detectAdblock().then(hasAdblocker => { - if (hasAdblocker) { - logger.log("Adblock detected"); - return; - } - - const adProvider = this.embedProvider.adProvider; - this.app.adProvider = new adProvider(this.app); - return this.app.adProvider.initialize().catch(err => { - logger.error("Failed to initialize ad provider, disabling ads:", err); - this.app.adProvider = new NoAdProvider(this.app); - }); - }); - } - - exitApp() { - // Can not exit app - } -} +import { globalConfig, IS_MOBILE } from "../../core/config"; +import { createLogger } from "../../core/logging"; +import { queryParamOptions } from "../../core/query_parameters"; +import { clamp } from "../../core/utils"; +import { GamedistributionAdProvider } from "../ad_providers/gamedistribution"; +import { NoAdProvider } from "../ad_providers/no_ad_provider"; +import { PlatformWrapperInterface } from "../wrapper"; +import { StorageImplBrowser } from "./storage"; +import { StorageImplBrowserIndexedDB } from "./storage_indexed_db"; + +const logger = createLogger("platform/browser"); + +export class PlatformWrapperImplBrowser extends PlatformWrapperInterface { + initialize() { + this.recaptchaTokenCallback = null; + + this.embedProvider = { + id: "shapezio-website", + adProvider: NoAdProvider, + iframed: false, + externalLinks: true, + iogLink: true, + }; + + if (!G_IS_STANDALONE && queryParamOptions.embedProvider) { + const providerId = queryParamOptions.embedProvider; + this.embedProvider.iframed = true; + this.embedProvider.iogLink = false; + + switch (providerId) { + case "armorgames": { + this.embedProvider.id = "armorgames"; + break; + } + + case "iogames.space": { + this.embedProvider.id = "iogames.space"; + this.embedProvider.iogLink = true; + break; + } + + case "miniclip": { + this.embedProvider.id = "miniclip"; + break; + } + + case "gamedistribution": { + this.embedProvider.id = "gamedistribution"; + this.embedProvider.externalLinks = false; + this.embedProvider.adProvider = GamedistributionAdProvider; + break; + } + + case "kongregate": { + this.embedProvider.id = "kongregate"; + break; + } + + case "crazygames": { + this.embedProvider.id = "crazygames"; + break; + } + + default: { + logger.error("Got unsupported embed provider:", providerId); + } + } + } + + logger.log("Embed provider:", this.embedProvider.id); + + return this.detectStorageImplementation() + .then(() => this.initializeAdProvider()) + .then(() => super.initialize()); + } + + detectStorageImplementation() { + return new Promise(resolve => { + logger.log("Detecting storage"); + + if (!window.indexedDB) { + logger.log("Indexed DB not supported"); + this.app.storage = new StorageImplBrowser(this.app); + resolve(); + return; + } + + // Try accessing the indexedb + let request; + try { + request = window.indexedDB.open("indexeddb_feature_detection", 1); + } catch (ex) { + logger.warn("Error while opening indexed db:", ex); + this.app.storage = new StorageImplBrowser(this.app); + resolve(); + return; + } + request.onerror = err => { + logger.log("Indexed DB can *not* be accessed: ", err); + logger.log("Using fallback to local storage"); + this.app.storage = new StorageImplBrowser(this.app); + resolve(); + }; + request.onsuccess = () => { + logger.log("Indexed DB *can* be accessed"); + this.app.storage = new StorageImplBrowserIndexedDB(this.app); + resolve(); + }; + }); + } + + getId() { + return "browser@" + this.embedProvider.id; + } + + getUiScale() { + if (IS_MOBILE) { + return 1; + } + + const avgDims = Math.min(this.app.screenWidth, this.app.screenHeight); + return clamp((avgDims / 1000.0) * 1.9, 0.1, 10); + } + + getSupportsRestart() { + return true; + } + + getTouchPanStrength() { + return IS_MOBILE ? 1 : 0.5; + } + + openExternalLink(url, force = false) { + logger.log("Opening external:", url); + if (force || this.embedProvider.externalLinks) { + window.open(url); + } else { + // Do nothing + alert( + "This platform does not allow opening external links. You can play on https://shapez.io directly to open them.\n\nClicked Link: " + + url + ); + } + } + + performRestart() { + logger.log("Performing restart"); + window.location.reload(true); + } + + /** + * Detects if there is an adblocker installed + * @returns {Promise} + */ + detectAdblock() { + return Promise.race([ + new Promise(resolve => { + // If the request wasn't blocked within a very short period of time, this means + // the adblocker is not active and the request was actually made -> ignore it then + setTimeout(() => resolve(false), 30); + }), + new Promise(resolve => { + fetch("https://googleads.g.doubleclick.net/pagead/id", { + method: "HEAD", + mode: "no-cors", + }) + .then(res => { + resolve(false); + }) + .catch(err => { + resolve(true); + }); + }), + ]); + } + + initializeAdProvider() { + if (G_IS_DEV && !globalConfig.debug.testAds) { + logger.log("Ads disabled in local environment"); + return Promise.resolve(); + } + + // First, detect adblocker + return this.detectAdblock().then(hasAdblocker => { + if (hasAdblocker) { + logger.log("Adblock detected"); + return; + } + + const adProvider = this.embedProvider.adProvider; + this.app.adProvider = new adProvider(this.app); + return this.app.adProvider.initialize().catch(err => { + logger.error("Failed to initialize ad provider, disabling ads:", err); + this.app.adProvider = new NoAdProvider(this.app); + }); + }); + } + + exitApp() { + // Can not exit app + } +} diff --git a/src/js/platform/electron/wrapper.js b/src/js/platform/electron/wrapper.js index 69bc9695..941aff44 100644 --- a/src/js/platform/electron/wrapper.js +++ b/src/js/platform/electron/wrapper.js @@ -1,65 +1,57 @@ -import { PlatformWrapperImplBrowser } from "../browser/wrapper"; -import { getIPCRenderer } from "../../core/utils"; -import { createLogger } from "../../core/logging"; -import { StorageImplElectron } from "./storage"; -import { PlatformWrapperInterface } from "../wrapper"; - -const logger = createLogger("electron-wrapper"); - -export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { - initialize() { - this.app.storage = new StorageImplElectron(this); - return PlatformWrapperInterface.prototype.initialize.call(this); - } - - getId() { - return "electron"; - } - - getSupportsRestart() { - return true; - } - - openExternalLink(url) { - logger.log(this, "Opening external:", url); - window.open(url, "about:blank"); - } - - getSupportsAds() { - return false; - } - - getHasUnlimitedSavegames() { - return true; - } - - getShowDemoBadges() { - return false; - } - - performRestart() { - logger.log(this, "Performing restart"); - window.location.reload(true); - } - - initializeAdProvider() { - return Promise.resolve(); - } - - getSupportsFullscreen() { - return true; - } - - setFullscreen(flag) { - getIPCRenderer().send("set-fullscreen", flag); - } - - getSupportsAppExit() { - return true; - } - - exitApp() { - logger.log(this, "Sending app exit signal"); - getIPCRenderer().send("exit-app"); - } -} +import { PlatformWrapperImplBrowser } from "../browser/wrapper"; +import { getIPCRenderer } from "../../core/utils"; +import { createLogger } from "../../core/logging"; +import { StorageImplElectron } from "./storage"; +import { PlatformWrapperInterface } from "../wrapper"; + +const logger = createLogger("electron-wrapper"); + +export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { + initialize() { + this.app.storage = new StorageImplElectron(this); + return PlatformWrapperInterface.prototype.initialize.call(this); + } + + getId() { + return "electron"; + } + + getSupportsRestart() { + return true; + } + + openExternalLink(url) { + logger.log(this, "Opening external:", url); + window.open(url, "about:blank"); + } + + getSupportsAds() { + return false; + } + + performRestart() { + logger.log(this, "Performing restart"); + window.location.reload(true); + } + + initializeAdProvider() { + return Promise.resolve(); + } + + getSupportsFullscreen() { + return true; + } + + setFullscreen(flag) { + getIPCRenderer().send("set-fullscreen", flag); + } + + getSupportsAppExit() { + return true; + } + + exitApp() { + logger.log(this, "Sending app exit signal"); + getIPCRenderer().send("exit-app"); + } +} diff --git a/src/js/platform/sound.js b/src/js/platform/sound.js index 1fceaf3e..9d5a8461 100644 --- a/src/js/platform/sound.js +++ b/src/js/platform/sound.js @@ -29,6 +29,8 @@ export const SOUNDS = { }; export const MUSIC = { + // The theme always depends on the standalone only, even if running the full + // version in the browser theme: G_IS_STANDALONE ? "theme-full" : "theme-short", menu: "menu", }; diff --git a/src/js/platform/wrapper.js b/src/js/platform/wrapper.js index 9c35a8e4..f80c2fd6 100644 --- a/src/js/platform/wrapper.js +++ b/src/js/platform/wrapper.js @@ -1,142 +1,131 @@ -/* typehints:start */ -import { Application } from "../application"; -/* typehints:end */ - -import { IS_MOBILE } from "../core/config"; - -export class PlatformWrapperInterface { - constructor(app) { - /** @type {Application} */ - this.app = app; - } - - /** @returns {string} */ - getId() { - abstract; - return "unknown-platform"; - } - - /** - * Returns the UI scale, called on every resize - * @returns {number} */ - getUiScale() { - return 1; - } - - /** @returns {boolean} */ - getSupportsRestart() { - abstract; - return false; - } - - /** - * Whether the user has unlimited savegames - */ - getHasUnlimitedSavegames() { - return true; - } - - getShowDemoBadges() { - return false; - } - - /** - * Returns the strength of touch pans with the mouse - */ - getTouchPanStrength() { - return 1; - } - - /** @returns {Promise} */ - initialize() { - document.documentElement.classList.add("p-" + this.getId()); - return Promise.resolve(); - } - - /** - * Should initialize the apps ad provider in case supported - * @returns {Promise} - */ - initializeAdProvider() { - return Promise.resolve(); - } - - /** - * Should return the minimum supported zoom level - * @returns {number} - */ - getMinimumZoom() { - return 0.1 * this.getScreenScale(); - } - - /** - * Should return the maximum supported zoom level - * @returns {number} - */ - getMaximumZoom() { - return 3.5 * this.getScreenScale(); - } - - getScreenScale() { - return Math.min(window.innerWidth, window.innerHeight) / 1024.0; - } - - /** - * Should return if this platform supports ads at all - */ - getSupportsAds() { - return false; - } - - /** - * Attempt to open an external url - * @param {string} url - * @param {boolean=} force Whether to always open the url even if not allowed - */ - openExternalLink(url, force = false) { - abstract; - } - - /** - * Attempt to restart the app - */ - performRestart() { - abstract; - } - - /** - * Returns whether this platform supports a toggleable fullscreen - */ - getSupportsFullscreen() { - return false; - } - - /** - * Should set the apps fullscreen state to the desired state - * @param {boolean} flag - */ - setFullscreen(flag) { - abstract; - } - - /** - * Returns whether this platform supports quitting the app - */ - getSupportsAppExit() { - return false; - } - - /** - * Attempts to quit the app - */ - exitApp() { - abstract; - } - - /** - * Whether this platform supports a keyboard - */ - getSupportsKeyboard() { - return !IS_MOBILE; - } -} +/* typehints:start */ +import { Application } from "../application"; +/* typehints:end */ + +import { IS_MOBILE } from "../core/config"; + +export class PlatformWrapperInterface { + constructor(app) { + /** @type {Application} */ + this.app = app; + } + + /** @returns {string} */ + getId() { + abstract; + return "unknown-platform"; + } + + /** + * Returns the UI scale, called on every resize + * @returns {number} */ + getUiScale() { + return 1; + } + + /** @returns {boolean} */ + getSupportsRestart() { + abstract; + return false; + } + + /** + * Returns the strength of touch pans with the mouse + */ + getTouchPanStrength() { + return 1; + } + + /** @returns {Promise} */ + initialize() { + document.documentElement.classList.add("p-" + this.getId()); + return Promise.resolve(); + } + + /** + * Should initialize the apps ad provider in case supported + * @returns {Promise} + */ + initializeAdProvider() { + return Promise.resolve(); + } + + /** + * Should return the minimum supported zoom level + * @returns {number} + */ + getMinimumZoom() { + return 0.1 * this.getScreenScale(); + } + + /** + * Should return the maximum supported zoom level + * @returns {number} + */ + getMaximumZoom() { + return 3.5 * this.getScreenScale(); + } + + getScreenScale() { + return Math.min(window.innerWidth, window.innerHeight) / 1024.0; + } + + /** + * Should return if this platform supports ads at all + */ + getSupportsAds() { + return false; + } + + /** + * Attempt to open an external url + * @param {string} url + * @param {boolean=} force Whether to always open the url even if not allowed + */ + openExternalLink(url, force = false) { + abstract; + } + + /** + * Attempt to restart the app + */ + performRestart() { + abstract; + } + + /** + * Returns whether this platform supports a toggleable fullscreen + */ + getSupportsFullscreen() { + return false; + } + + /** + * Should set the apps fullscreen state to the desired state + * @param {boolean} flag + */ + setFullscreen(flag) { + abstract; + } + + /** + * Returns whether this platform supports quitting the app + */ + getSupportsAppExit() { + return false; + } + + /** + * Attempts to quit the app + */ + exitApp() { + abstract; + } + + /** + * Whether this platform supports a keyboard + */ + getSupportsKeyboard() { + return !IS_MOBILE; + } +} diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js index ace30eff..10f38fef 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -6,8 +6,7 @@ import { ReadWriteProxy } from "../core/read_write_proxy"; import { BoolSetting, EnumSetting, RangeSetting, BaseSetting } from "./setting_types"; import { createLogger } from "../core/logging"; import { ExplainedResult } from "../core/explained_result"; -import { THEMES, THEME, applyGameTheme } from "../game/theme"; -import { IS_DEMO } from "../core/config"; +import { THEMES, applyGameTheme } from "../game/theme"; import { T } from "../translations"; import { LANGUAGES } from "../languages"; @@ -187,7 +186,9 @@ export const allApplicationSettings = [ app.platformWrapper.setFullscreen(value); } }, - !IS_DEMO + /** + * @param {Application} app + */ app => app.restrictionMgr.getHasExtendedSettings() ), new BoolSetting( @@ -215,7 +216,9 @@ export const allApplicationSettings = [ applyGameTheme(id); document.documentElement.setAttribute("data-theme", id); }, - enabled: !IS_DEMO, + enabledCb: /** + * @param {Application} app + */ app => app.restrictionMgr.getHasExtendedSettings(), }), new EnumSetting("autosaveInterval", { @@ -255,6 +258,7 @@ export const allApplicationSettings = [ new BoolSetting("enableMousePan", enumCategories.advanced, (app, value) => {}), new BoolSetting("alwaysMultiplace", enumCategories.advanced, (app, value) => {}), + new BoolSetting("zoomToCursor", enumCategories.advanced, (app, value) => {}), new BoolSetting("clearCursorOnDeleteWhilePlacing", enumCategories.advanced, (app, value) => {}), new BoolSetting("enableTunnelSmartplace", enumCategories.advanced, (app, value) => {}), new BoolSetting("vignette", enumCategories.userInterface, (app, value) => {}), @@ -271,7 +275,9 @@ export const allApplicationSettings = [ category: enumCategories.performance, restartRequired: false, changeCb: (app, id) => {}, - enabled: !IS_DEMO, + enabledCb: /** + * @param {Application} app + */ app => app.restrictionMgr.getHasExtendedSettings(), }), new BoolSetting("lowQualityMapResources", enumCategories.performance, (app, value) => {}), @@ -317,6 +323,7 @@ class SettingsStorage { this.disableTileGrid = false; this.lowQualityTextures = false; this.simplifiedBelts = false; + this.zoomToCursor = true; /** * @type {Object.} @@ -355,7 +362,7 @@ export class ApplicationSettings extends ReadWriteProxy { * @returns {SettingsStorage} */ getAllSettings() { - return this.getCurrentData().settings; + return this.currentData.settings; } /** @@ -527,7 +534,7 @@ export class ApplicationSettings extends ReadWriteProxy { } getCurrentVersion() { - return 28; + return 29; } /** @param {{settings: SettingsStorage, version: number}} data */ @@ -660,6 +667,11 @@ export class ApplicationSettings extends ReadWriteProxy { data.version = 28; } + if (data.version < 29) { + data.settings.zoomToCursor = true; + data.version = 29; + } + return ExplainedResult.good(); } } diff --git a/src/js/profile/setting_types.js b/src/js/profile/setting_types.js index 7d07ca99..66c9f01d 100644 --- a/src/js/profile/setting_types.js +++ b/src/js/profile/setting_types.js @@ -13,13 +13,13 @@ export class BaseSetting { * @param {string} id * @param {string} categoryId * @param {function(Application, any):void} changeCb - * @param {boolean} enabled + * @param {function(Application) : boolean=} enabledCb */ - constructor(id, categoryId, changeCb, enabled) { + constructor(id, categoryId, changeCb, enabledCb = null) { this.id = id; this.categoryId = categoryId; this.changeCb = changeCb; - this.enabled = enabled; + this.enabledCb = enabledCb; /** @type {Application} */ this.app = null; @@ -39,6 +39,7 @@ export class BaseSetting { } /** + * Binds all parameters * @param {Application} app * @param {HTMLElement} element * @param {any} dialogs @@ -49,19 +50,37 @@ export class BaseSetting { this.dialogs = dialogs; } - getHtml() { + /** + * Returns the HTML for this setting + * @param {Application} app + */ + getHtml(app) { abstract; return ""; } + /** + * Returns whether this setting is enabled and available + * @param {Application} app + */ + getIsAvailable(app) { + return this.enabledCb ? this.enabledCb(app) : true; + } + syncValueToElement() { abstract; } + /** + * Attempts to modify the setting + */ modify() { abstract; } + /** + * Shows the dialog that a restart is required + */ showRestartRequiredDialog() { const { restart } = this.dialogs.showInfo( T.dialogs.restartRequired.title, @@ -74,6 +93,7 @@ export class BaseSetting { } /** + * Validates the set value * @param {any} value * @returns {boolean} */ @@ -96,10 +116,10 @@ export class EnumSetting extends BaseSetting { iconPrefix = null, changeCb = null, magicValue = null, - enabled = true, + enabledCb = null, } ) { - super(id, category, changeCb, enabled); + super(id, category, changeCb, enabledCb); this.options = options; this.valueGetter = valueGetter; @@ -110,10 +130,14 @@ export class EnumSetting extends BaseSetting { this.magicValue = magicValue; } - getHtml() { + /** + * @param {Application} app + */ + getHtml(app) { + const available = this.getIsAvailable(app); return ` -
- ${this.enabled ? "" : `${T.demo.settingNotAvailable}`} +
+ ${available ? "" : `${T.demo.settingNotAvailable}`}
@@ -180,14 +204,18 @@ export class EnumSetting extends BaseSetting { } export class BoolSetting extends BaseSetting { - constructor(id, category, changeCb = null, enabled = true) { - super(id, category, changeCb, enabled); + constructor(id, category, changeCb = null, enabledCb = null) { + super(id, category, changeCb, enabledCb); } - getHtml() { + /** + * @param {Application} app + */ + getHtml(app) { + const available = this.getIsAvailable(app); return ` -
- ${this.enabled ? "" : `${T.demo.settingNotAvailable}`} +
+ ${available ? "" : `${T.demo.settingNotAvailable}`}
@@ -226,13 +254,13 @@ export class RangeSetting extends BaseSetting { id, category, changeCb = null, - enabled = true, defaultValue = 1.0, minValue = 0, maxValue = 1.0, - stepSize = 0.0001 + stepSize = 0.0001, + enabledCb = null ) { - super(id, category, changeCb, enabled); + super(id, category, changeCb, enabledCb); this.defaultValue = defaultValue; this.minValue = minValue; @@ -240,10 +268,14 @@ export class RangeSetting extends BaseSetting { this.stepSize = stepSize; } - getHtml() { + /** + * @param {Application} app + */ + getHtml(app) { + const available = this.getIsAvailable(app); return ` -
- ${this.enabled ? "" : `${T.demo.settingNotAvailable}`} +
+ ${available ? "" : `${T.demo.settingNotAvailable}`}
diff --git a/src/js/savegame/savegame_manager.js b/src/js/savegame/savegame_manager.js index 52f9dc14..ed31dbcf 100644 --- a/src/js/savegame/savegame_manager.js +++ b/src/js/savegame/savegame_manager.js @@ -40,13 +40,6 @@ export class SavegameManager extends ReadWriteProxy { return 1002; } - /** - * @returns {SavegamesData} - */ - getCurrentData() { - return super.getCurrentData(); - } - verify(data) { // TODO / FIXME!!!! return ExplainedResult.good(); @@ -96,6 +89,14 @@ export class SavegameManager extends ReadWriteProxy { return new Savegame(this.app, { internalId, metaDataRef: metadata }); } + /** + * Returns if this manager has any savegame of a 1.1.19 version, which + * enables all levels + */ + getHasAnyLegacySavegames() { + return this.currentData.savegames.some(savegame => savegame.version === 1005 || savegame.level > 14); + } + /** * Deletes a savegame * @param {SavegameMetadata} game @@ -149,7 +150,9 @@ export class SavegameManager extends ReadWriteProxy { }); this.currentData.savegames.push(metaData); - this.sortSavegames(); + + // Notice: This is async and happening in the background + this.updateAfterSavegamesChanged(); return new Savegame(this.app, { internalId: id, @@ -157,8 +160,16 @@ export class SavegameManager extends ReadWriteProxy { }); } + /** + * Attempts to import a savegame + * @param {object} data + */ importSavegame(data) { const savegame = this.createNewSavegame(); + + // Track legacy savegames + const isOldSavegame = data.version < 1006; + const migrationResult = savegame.migrate(data); if (migrationResult.isBad()) { return Promise.reject("Failed to migrate: " + migrationResult.reason); @@ -170,7 +181,19 @@ export class SavegameManager extends ReadWriteProxy { return Promise.reject("Verification failed: " + verification.result); } - return savegame.writeSavegameAndMetadata().then(() => this.sortSavegames()); + return savegame + .writeSavegameAndMetadata() + .then(() => this.updateAfterSavegamesChanged()) + .then(() => this.app.restrictionMgr.onHasLegacySavegamesChanged(isOldSavegame)); + } + + /** + * Hook after the savegames got changed + */ + updateAfterSavegamesChanged() { + return this.sortSavegames() + .then(() => this.writeAsync()) + .then(() => this.app.restrictionMgr.onHasLegacySavegamesChanged(this.getHasAnyLegacySavegames())); } /** @@ -219,7 +242,7 @@ export class SavegameManager extends ReadWriteProxy { if (G_IS_DEV && globalConfig.debug.disableSavegameWrite) { return Promise.resolve(); } - return this.sortSavegames().then(() => this.writeAsync()); + return this.updateAfterSavegamesChanged(); }); } } diff --git a/src/js/savegame/savegame_serializer.js b/src/js/savegame/savegame_serializer.js index 552bc35c..c1247225 100644 --- a/src/js/savegame/savegame_serializer.js +++ b/src/js/savegame/savegame_serializer.js @@ -130,7 +130,7 @@ export class SavegameSerializer { errorReason = errorReason || root.time.deserialize(savegame.time); errorReason = errorReason || root.camera.deserialize(savegame.camera); errorReason = errorReason || root.map.deserialize(savegame.map); - errorReason = errorReason || root.hubGoals.deserialize(savegame.hubGoals); + errorReason = errorReason || root.hubGoals.deserialize(savegame.hubGoals, root); errorReason = errorReason || root.hud.parts.pinnedShapes.deserialize(savegame.pinnedShapes); errorReason = errorReason || root.hud.parts.waypoints.deserialize(savegame.waypoints); errorReason = errorReason || this.internal.deserializeEntityArray(root, savegame.entities); diff --git a/src/js/savegame/schemas/1006.js b/src/js/savegame/schemas/1006.js index 29f2c64f..d1c0b48f 100644 --- a/src/js/savegame/schemas/1006.js +++ b/src/js/savegame/schemas/1006.js @@ -19,7 +19,6 @@ import { getCodeFromBuildingData } from "../../game/building_codes.js"; import { StaticMapEntityComponent } from "../../game/components/static_map_entity.js"; import { Entity } from "../../game/entity.js"; import { defaultBuildingVariant, MetaBuilding } from "../../game/meta_building.js"; -import { finalGameShape } from "../../game/upgrades.js"; import { SavegameInterface_V1005 } from "./1005.js"; const schema = require("./1006.json"); @@ -152,7 +151,8 @@ export class SavegameInterface_V1006 extends SavegameInterface_V1005 { stored[shapeKey] = rebalance(stored[shapeKey]); } - stored[finalGameShape] = 0; + // Reset final game shape + stored["RuCw--Cw:----Ru--"] = 0; // Reduce goals if (dump.hubGoals.currentGoal) { diff --git a/src/js/states/keybindings.js b/src/js/states/keybindings.js index b68626c7..a01629f1 100644 --- a/src/js/states/keybindings.js +++ b/src/js/states/keybindings.js @@ -1,179 +1,173 @@ -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 { IS_DEMO } from "../core/config"; - -export class KeybindingsState extends TextualGameState { - constructor() { - super("KeybindingsState"); - } - - getStateHeaderTitle() { - return T.keybindings.title; - } - - getMainContentHTML() { - return ` - -
- ${T.keybindings.hint} - - -
- -
- -
- `; - } - - onEnter() { - const keybindingsElem = this.htmlElement.querySelector(".keybindings"); - - this.trackClicks(this.htmlElement.querySelector(".resetBindings"), this.resetBindings); - - for (const category in KEYMAPPINGS) { - const categoryDiv = document.createElement("div"); - categoryDiv.classList.add("category"); - keybindingsElem.appendChild(categoryDiv); - - const labelDiv = document.createElement("strong"); - labelDiv.innerText = T.keybindings.categoryLabels[category]; - labelDiv.classList.add("categoryLabel"); - categoryDiv.appendChild(labelDiv); - - for (const keybindingId in KEYMAPPINGS[category]) { - const mapped = KEYMAPPINGS[category][keybindingId]; - - const elem = document.createElement("div"); - elem.classList.add("entry"); - elem.setAttribute("data-keybinding", keybindingId); - categoryDiv.appendChild(elem); - - const title = document.createElement("span"); - title.classList.add("title"); - title.innerText = T.keybindings.mappings[keybindingId]; - elem.appendChild(title); - - const mappingDiv = document.createElement("span"); - mappingDiv.classList.add("mapping"); - elem.appendChild(mappingDiv); - - const editBtn = document.createElement("button"); - editBtn.classList.add("styledButton", "editKeybinding"); - - const resetBtn = document.createElement("button"); - resetBtn.classList.add("styledButton", "resetKeybinding"); - - if (mapped.builtin) { - editBtn.classList.add("disabled"); - resetBtn.classList.add("disabled"); - } else { - this.trackClicks(editBtn, () => this.editKeybinding(keybindingId)); - this.trackClicks(resetBtn, () => this.resetKeybinding(keybindingId)); - } - elem.appendChild(editBtn); - elem.appendChild(resetBtn); - } - } - this.updateKeybindings(); - } - - editKeybinding(id) { - // if (IS_DEMO) { - // this.dialogs.showFeatureRestrictionInfo(T.demo.features.customizeKeybindings); - // return; - // } - - const dialog = new Dialog({ - app: this.app, - title: T.dialogs.editKeybinding.title, - contentHTML: T.dialogs.editKeybinding.desc, - buttons: ["cancel:good"], - type: "info", - }); - - dialog.inputReciever.keydown.add(({ keyCode, shift, alt, event }) => { - if (keyCode === 27) { - this.dialogs.closeDialog(dialog); - return; - } - - if (event) { - event.preventDefault(); - } - - if (event.target && event.target.tagName === "BUTTON" && keyCode === 1) { - return; - } - - if ( - // Enter - keyCode === 13 - ) { - // Ignore builtins - return; - } - - this.app.settings.updateKeybindingOverride(id, keyCode); - - this.dialogs.closeDialog(dialog); - this.updateKeybindings(); - }); - - dialog.inputReciever.backButton.add(() => {}); - this.dialogs.internalShowDialog(dialog); - - this.app.sound.playUiSound(SOUNDS.dialogOk); - } - - updateKeybindings() { - const overrides = this.app.settings.getKeybindingOverrides(); - for (const category in KEYMAPPINGS) { - for (const keybindingId in KEYMAPPINGS[category]) { - const mapped = KEYMAPPINGS[category][keybindingId]; - - const container = this.htmlElement.querySelector("[data-keybinding='" + keybindingId + "']"); - assert(container, "Container for keybinding not found: " + keybindingId); - - let keyCode = mapped.keyCode; - if (overrides[keybindingId]) { - keyCode = overrides[keybindingId]; - } - - const mappingDiv = container.querySelector(".mapping"); - mappingDiv.innerHTML = getStringForKeyCode(keyCode); - mappingDiv.classList.toggle("changed", !!overrides[keybindingId]); - - const resetBtn = container.querySelector("button.resetKeybinding"); - resetBtn.classList.toggle("disabled", mapped.builtin || !overrides[keybindingId]); - } - } - } - - resetKeybinding(id) { - this.app.settings.resetKeybindingOverride(id); - this.updateKeybindings(); - } - - resetBindings() { - const { reset } = this.dialogs.showWarning( - T.dialogs.resetKeybindingsConfirmation.title, - T.dialogs.resetKeybindingsConfirmation.desc, - ["cancel:good", "reset:bad"] - ); - - reset.add(() => { - this.app.settings.resetKeybindingOverrides(); - this.updateKeybindings(); - - this.dialogs.showInfo(T.dialogs.keybindingsResetOk.title, T.dialogs.keybindingsResetOk.desc); - }); - } - - getDefaultPreviousState() { - return "SettingsState"; - } -} +import { Dialog } from "../core/modal_dialog_elements"; +import { TextualGameState } from "../core/textual_game_state"; +import { getStringForKeyCode, KEYMAPPINGS } from "../game/key_action_mapper"; +import { SOUNDS } from "../platform/sound"; +import { T } from "../translations"; + +export class KeybindingsState extends TextualGameState { + constructor() { + super("KeybindingsState"); + } + + getStateHeaderTitle() { + return T.keybindings.title; + } + + getMainContentHTML() { + return ` + +
+ ${T.keybindings.hint} + + +
+ +
+ +
+ `; + } + + onEnter() { + const keybindingsElem = this.htmlElement.querySelector(".keybindings"); + + this.trackClicks(this.htmlElement.querySelector(".resetBindings"), this.resetBindings); + + for (const category in KEYMAPPINGS) { + const categoryDiv = document.createElement("div"); + categoryDiv.classList.add("category"); + keybindingsElem.appendChild(categoryDiv); + + const labelDiv = document.createElement("strong"); + labelDiv.innerText = T.keybindings.categoryLabels[category]; + labelDiv.classList.add("categoryLabel"); + categoryDiv.appendChild(labelDiv); + + for (const keybindingId in KEYMAPPINGS[category]) { + const mapped = KEYMAPPINGS[category][keybindingId]; + + const elem = document.createElement("div"); + elem.classList.add("entry"); + elem.setAttribute("data-keybinding", keybindingId); + categoryDiv.appendChild(elem); + + const title = document.createElement("span"); + title.classList.add("title"); + title.innerText = T.keybindings.mappings[keybindingId]; + elem.appendChild(title); + + const mappingDiv = document.createElement("span"); + mappingDiv.classList.add("mapping"); + elem.appendChild(mappingDiv); + + const editBtn = document.createElement("button"); + editBtn.classList.add("styledButton", "editKeybinding"); + + const resetBtn = document.createElement("button"); + resetBtn.classList.add("styledButton", "resetKeybinding"); + + if (mapped.builtin) { + editBtn.classList.add("disabled"); + resetBtn.classList.add("disabled"); + } else { + this.trackClicks(editBtn, () => this.editKeybinding(keybindingId)); + this.trackClicks(resetBtn, () => this.resetKeybinding(keybindingId)); + } + elem.appendChild(editBtn); + elem.appendChild(resetBtn); + } + } + this.updateKeybindings(); + } + + editKeybinding(id) { + const dialog = new Dialog({ + app: this.app, + title: T.dialogs.editKeybinding.title, + contentHTML: T.dialogs.editKeybinding.desc, + buttons: ["cancel:good"], + type: "info", + }); + + dialog.inputReciever.keydown.add(({ keyCode, shift, alt, event }) => { + if (keyCode === 27) { + this.dialogs.closeDialog(dialog); + return; + } + + if (event) { + event.preventDefault(); + } + + if (event.target && event.target.tagName === "BUTTON" && keyCode === 1) { + return; + } + + if ( + // Enter + keyCode === 13 + ) { + // Ignore builtins + return; + } + + this.app.settings.updateKeybindingOverride(id, keyCode); + + this.dialogs.closeDialog(dialog); + this.updateKeybindings(); + }); + + dialog.inputReciever.backButton.add(() => {}); + this.dialogs.internalShowDialog(dialog); + + this.app.sound.playUiSound(SOUNDS.dialogOk); + } + + updateKeybindings() { + const overrides = this.app.settings.getKeybindingOverrides(); + for (const category in KEYMAPPINGS) { + for (const keybindingId in KEYMAPPINGS[category]) { + const mapped = KEYMAPPINGS[category][keybindingId]; + + const container = this.htmlElement.querySelector("[data-keybinding='" + keybindingId + "']"); + assert(container, "Container for keybinding not found: " + keybindingId); + + let keyCode = mapped.keyCode; + if (overrides[keybindingId]) { + keyCode = overrides[keybindingId]; + } + + const mappingDiv = container.querySelector(".mapping"); + mappingDiv.innerHTML = getStringForKeyCode(keyCode); + mappingDiv.classList.toggle("changed", !!overrides[keybindingId]); + + const resetBtn = container.querySelector("button.resetKeybinding"); + resetBtn.classList.toggle("disabled", mapped.builtin || !overrides[keybindingId]); + } + } + } + + resetKeybinding(id) { + this.app.settings.resetKeybindingOverride(id); + this.updateKeybindings(); + } + + resetBindings() { + const { reset } = this.dialogs.showWarning( + T.dialogs.resetKeybindingsConfirmation.title, + T.dialogs.resetKeybindingsConfirmation.desc, + ["cancel:good", "reset:bad"] + ); + + reset.add(() => { + this.app.settings.resetKeybindingOverrides(); + this.updateKeybindings(); + + this.dialogs.showInfo(T.dialogs.keybindingsResetOk.title, T.dialogs.keybindingsResetOk.desc); + }); + } + + getDefaultPreviousState() { + return "SettingsState"; + } +} diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index b8191306..a3f06ca0 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -1,21 +1,23 @@ -import { GameState } from "../core/game_state"; import { cachebust } from "../core/cachebust"; -import { globalConfig, IS_DEMO, THIRDPARTY_URLS } from "../core/config"; +import { A_B_TESTING_LINK_TYPE, globalConfig, THIRDPARTY_URLS } from "../core/config"; +import { GameState } from "../core/game_state"; +import { DialogWithForm } from "../core/modal_dialog_elements"; +import { FormElementInput } from "../core/modal_dialog_forms"; +import { ReadWriteProxy } from "../core/read_write_proxy"; import { - makeDiv, - makeButtonElement, formatSecondsToTimeAgo, - waitNextFrame, + generateFileDownload, isSupportedBrowser, makeButton, + makeButtonElement, + makeDiv, removeAllChildren, + startFileChoose, + waitNextFrame, } from "../core/utils"; -import { ReadWriteProxy } from "../core/read_write_proxy"; import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs"; -import { T } from "../translations"; import { getApplicationSettingById } from "../profile/application_settings"; -import { FormElementInput } from "../core/modal_dialog_forms"; -import { DialogWithForm } from "../core/modal_dialog_elements"; +import { T } from "../translations"; const trim = require("trim"); @@ -24,23 +26,6 @@ const trim = require("trim"); * @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() { super("MainMenuState"); @@ -49,18 +34,16 @@ export class MainMenuState extends GameState { getInnerHTML() { const bannerHtml = `

${T.demoBanners.title}

-

${T.demoBanners.intro}

- - Get the shapez.io standalone! + Get the shapez.io standalone! `; - return ` + const showDemoBadges = this.app.restrictionMgr.getIsStandaloneMarketingActive(); + return `
- ${ G_IS_STANDALONE || G_IS_DEV ? ` @@ -74,17 +57,14 @@ export class MainMenuState extends GameState { - - -
- +
- ${IS_DEMO ? `
${bannerHtml}
` : ""} + ${showDemoBadges ? `
${bannerHtml}
` : ""}
@@ -95,12 +75,9 @@ export class MainMenuState extends GameState { }
- -
-
`; } + /** + * Asks the user to import a savegame + */ requestImportSavegame() { if ( - IS_DEMO && this.app.savegameMgr.getSavegamesMetaData().length > 0 && - !this.app.platformWrapper.getHasUnlimitedSavegames() + !this.app.restrictionMgr.getHasUnlimitedSavegames() ) { this.app.analytics.trackUiClick("importgame_slot_limit_show"); this.showSavegameSlotLimit(); return; } - var input = document.createElement("input"); - input.type = "file"; - input.accept = ".bin"; - - input.onchange = e => { - const file = input.files[0]; + // Create a 'fake' file-input to accept savegames + startFileChoose(".bin").then(file => { if (file) { + const closeLoader = this.dialogs.showLoadingDialog(); waitNextFrame().then(() => { this.app.analytics.trackUiClick("import_savegame"); - const closeLoader = this.dialogs.showLoadingDialog(); const reader = new FileReader(); reader.addEventListener("load", event => { const contents = event.target.result; @@ -194,8 +168,7 @@ export class MainMenuState extends GameState { reader.readAsText(file, "utf-8"); }); } - }; - input.click(); + }); } onBackButton() { @@ -311,8 +284,11 @@ export class MainMenuState extends GameState { } onSteamLinkClicked() { - this.app.analytics.trackUiClick("main_menu_steam_link_2"); - this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage + "?ref=mmsl2"); + this.app.analytics.trackUiClick("main_menu_steam_link_" + A_B_TESTING_LINK_TYPE); + this.app.platformWrapper.openExternalLink( + THIRDPARTY_URLS.standaloneStorePage + "?ref=mmsl2&prc=" + A_B_TESTING_LINK_TYPE + ); + return false; } @@ -554,9 +530,8 @@ export class MainMenuState extends GameState { onPlayButtonClicked() { if ( - IS_DEMO && this.app.savegameMgr.getSavegamesMetaData().length > 0 && - !this.app.platformWrapper.getHasUnlimitedSavegames() + !this.app.restrictionMgr.getHasUnlimitedSavegames() ) { this.app.analytics.trackUiClick("startgame_slot_limit_show"); this.showSavegameSlotLimit(); diff --git a/src/js/states/preload.js b/src/js/states/preload.js index b35b369d..c1746da6 100644 --- a/src/js/states/preload.js +++ b/src/js/states/preload.js @@ -145,6 +145,11 @@ export class PreloadState extends GameState { this.app.backgroundResourceLoader.startLoading(); }) + .then(() => this.setStatus("Initializing restrictions")) + .then(() => { + return this.app.restrictionMgr.initialize(); + }) + .then(() => this.setStatus("Initializing savegame")) .then(() => { return this.app.savegameMgr.initialize().catch(err => { diff --git a/src/js/states/settings.js b/src/js/states/settings.js index 5e22492a..36dee5d8 100644 --- a/src/js/states/settings.js +++ b/src/js/states/settings.js @@ -1,169 +1,169 @@ -import { TextualGameState } from "../core/textual_game_state"; -import { formatSecondsToTimeAgo } from "../core/utils"; -import { allApplicationSettings, enumCategories } from "../profile/application_settings"; -import { T } from "../translations"; - -export class SettingsState extends TextualGameState { - constructor() { - super("SettingsState"); - } - - getStateHeaderTitle() { - return T.settings.title; - } - - getMainContentHTML() { - return ` - - - -
- ${this.getSettingsHtml()} -
- - `; - } - - getCategoryButtonsHtml() { - return Object.keys(enumCategories) - .map(key => enumCategories[key]) - .map( - category => - ` - - ` - ) - .join(""); - } - - getSettingsHtml() { - const categoriesHTML = {}; - - Object.keys(enumCategories).forEach(key => { - const catName = enumCategories[key]; - categoriesHTML[catName] = `
`; - }); - - for (let i = 0; i < allApplicationSettings.length; ++i) { - const setting = allApplicationSettings[i]; - - categoriesHTML[setting.categoryId] += setting.getHtml(); - } - - return Object.keys(categoriesHTML) - .map(k => categoriesHTML[k] + "
") - .join(""); - } - - renderBuildText() { - const labelVersion = this.htmlElement.querySelector(".buildVersion"); - const lastBuildMs = new Date().getTime() - G_BUILD_TIME; - const lastBuildText = formatSecondsToTimeAgo(lastBuildMs / 1000.0); - - const version = T.settings.versionBadges[G_APP_ENVIRONMENT]; - - labelVersion.innerHTML = ` - - ${G_BUILD_VERSION} @ ${version} @ ${G_BUILD_COMMIT_HASH} - - - ${T.settings.buildDate.replace("", lastBuildText)}
-
`; - } - - onEnter(payload) { - this.renderBuildText(); - this.trackClicks(this.htmlElement.querySelector(".about"), this.onAboutClicked, { - preventDefault: false, - }); - - const keybindingsButton = this.htmlElement.querySelector(".editKeybindings"); - - if (keybindingsButton) { - this.trackClicks(keybindingsButton, this.onKeybindingsClicked, { preventDefault: false }); - } - - 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(); - this.trackClicks( - element, - () => { - setting.modify(); - }, - { preventDefault: false } - ); - }); - } - - 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"); - } - - onKeybindingsClicked() { - this.moveToStateAddGoBack("KeybindingsState"); - } -} +import { TextualGameState } from "../core/textual_game_state"; +import { formatSecondsToTimeAgo } from "../core/utils"; +import { allApplicationSettings, enumCategories } from "../profile/application_settings"; +import { T } from "../translations"; + +export class SettingsState extends TextualGameState { + constructor() { + super("SettingsState"); + } + + getStateHeaderTitle() { + return T.settings.title; + } + + getMainContentHTML() { + return ` + + + +
+ ${this.getSettingsHtml()} +
+ + `; + } + + getCategoryButtonsHtml() { + return Object.keys(enumCategories) + .map(key => enumCategories[key]) + .map( + category => + ` + + ` + ) + .join(""); + } + + getSettingsHtml() { + const categoriesHTML = {}; + + Object.keys(enumCategories).forEach(key => { + const catName = enumCategories[key]; + categoriesHTML[catName] = `
`; + }); + + for (let i = 0; i < allApplicationSettings.length; ++i) { + const setting = allApplicationSettings[i]; + + categoriesHTML[setting.categoryId] += setting.getHtml(this.app); + } + + return Object.keys(categoriesHTML) + .map(k => categoriesHTML[k] + "
") + .join(""); + } + + renderBuildText() { + const labelVersion = this.htmlElement.querySelector(".buildVersion"); + const lastBuildMs = new Date().getTime() - G_BUILD_TIME; + const lastBuildText = formatSecondsToTimeAgo(lastBuildMs / 1000.0); + + const version = T.settings.versionBadges[G_APP_ENVIRONMENT]; + + labelVersion.innerHTML = ` + + ${G_BUILD_VERSION} @ ${version} @ ${G_BUILD_COMMIT_HASH} + + + ${T.settings.buildDate.replace("", lastBuildText)}
+
`; + } + + onEnter(payload) { + this.renderBuildText(); + this.trackClicks(this.htmlElement.querySelector(".about"), this.onAboutClicked, { + preventDefault: false, + }); + + const keybindingsButton = this.htmlElement.querySelector(".editKeybindings"); + + if (keybindingsButton) { + this.trackClicks(keybindingsButton, this.onKeybindingsClicked, { preventDefault: false }); + } + + 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(); + this.trackClicks( + element, + () => { + setting.modify(); + }, + { preventDefault: false } + ); + }); + } + + 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"); + } + + onKeybindingsClicked() { + this.moveToStateAddGoBack("KeybindingsState"); + } +} diff --git a/src/js/tsconfig.json b/src/js/tsconfig.json index 8a151000..7ecc605a 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": ["DOM","ES2018"], /* 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'. */ diff --git a/sync-translations.js b/sync-translations.js index 8fc30f40..649daf1e 100644 --- a/sync-translations.js +++ b/sync-translations.js @@ -16,7 +16,7 @@ const originalContents = fs const original = YAML.parse(originalContents); -const placeholderRegexp = /[[<]([a-zA-Z_0-9]+)[\]<]/gi; +const placeholderRegexp = /[[<]([a-zA-Z_0-9/-_]+?)[\]>]/gi; function match(originalObj, translatedObj, path = "/") { for (const key in originalObj) { @@ -29,6 +29,7 @@ function match(originalObj, translatedObj, path = "/") { const valueMatching = translatedObj[key]; if (typeof valueOriginal !== typeof valueMatching) { console.warn(" | MISMATCHING type (obj|non-obj) in", path + key); + translatedObj[key] = originalObj[key]; continue; } diff --git a/translations/.gitignore b/translations/.gitignore new file mode 100644 index 00000000..6f7f420d --- /dev/null +++ b/translations/.gitignore @@ -0,0 +1 @@ +tmp diff --git a/translations/README.md b/translations/README.md index 596da8d8..020c7ca6 100644 --- a/translations/README.md +++ b/translations/README.md @@ -33,6 +33,7 @@ The base language is English and can be found [here](base-en.yaml). - [Ukrainian](base-uk.yaml) - [Indonesian](base-ind.yaml) - [Serbian](base-sr.yaml) +- [Czech](base-cz.yaml) (If you want to translate into a new language, see below!) diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml index 5788fa3e..06802274 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -1,62 +1,49 @@ steamPage: - shortText: shapez.io is a game about building factories to automate the creation - and processing of increasingly complex shapes across an infinitely - expanding map. - 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'll progress within the game and unlock upgrades to speed up your factory. - - 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]! - - 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. - - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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) - [*] 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] - - [b]This game is 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] - - [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] - [/list] + shortText: لعبة شيبز (أشكال) هي لعبة تدور حول بناء مصانع وتوصيلها حتى تقوم بشكل + .آلي بصناعة أشكال مختلفة تزداد تعقيدا في خريطة لانهائية. discordLinkShort: Official Discord + intro: >- + لعبة شيبز (أشكال) هي لعبة مريحة تقوم فيها ببناء مصانع ووتشغيلها آليا لصناعة أشكال هندسية. + + مع التقدم في المستوى، تزداد الأشكال تعقيداً، فيتوجب عليك التوسع في الخريطة اللانهائية، وذلك ليس كافياً للتقدم في مستوى اللعبة + حيث عليك صناعة المزيد بأضعاف مضاعفة لتلبية الطلب، الشيء الوحيد الذي يمكنه مساعدتك هو التوسع. + + بينما في البداية تقوم بصناعة أشكال مختلفة، تتطلب منك المراحل المتقدمة تلوين هذه الأشكال، حيث يتوجب عليك استخراج وخلط الألوان. + + عند شراءك اللعبة على ستيم (Steam) تحصل على الإصدار الكامل للعبة، ولكن يمكن أيضاً لعبة نسخة تجريبية على موقع shapez.io ثم يمكنك القرار لاحقا + title_advantages: ميزات نسخة الحاسوب + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Loading error: Error @@ -131,7 +118,9 @@ dialogs: text: "Failed to load your savegame:" confirmSavegameDelete: title: Confirm deletion - text: Are you sure you want to delete the game? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Failed to delete text: "Failed to delete the savegame:" @@ -191,8 +180,7 @@ dialogs: title: New Marker titleEdit: Edit Marker desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) + 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! @@ -471,8 +459,9 @@ buildings: input. quad: name: Painter (Quad) - description: Allows you to color each quadrant of the shape with a different - color. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Trash @@ -590,11 +579,12 @@ buildings: storyRewards: 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! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotating desc: The rotater has been unlocked! It rotates shapes @@ -617,9 +607,9 @@ storyRewards: stacked on top of the left input! 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: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: The tunnel has been unlocked - You can now tunnel items @@ -632,9 +622,10 @@ storyRewards: variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can + desc: "You have unlocked the chained extractor! It can forward its resources to other extractors so you - can more efficiently extract resources! + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Tier II desc: You have unlocked a new variant of the tunnel - It has a @@ -651,13 +642,18 @@ storyRewards: once consuming just one color instead of two! reward_storage: title: Storage Buffer - desc: You have unlocked a variant of the trash - It allows you - to store items up to a given capacity! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! 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!) + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Blueprints desc: You can now copy and paste parts of your factory! Select @@ -694,8 +690,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-cat.yaml b/translations/base-cat.yaml index 07db5caf..88478494 100644 --- a/translations/base-cat.yaml +++ b/translations/base-cat.yaml @@ -2,61 +2,52 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - 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. - - Al lliurar les formes geomètriques sol·licitades, progressaràs i desbloquejaràs millores per accelerar la teva fàbrica. - - Com que la demanda de figures va augmentant, hauràs de augmentar proporcionalment la teva fàbrica per satisfer la demanda. Però no t'oblidis dels recursos, ja que t'hauràs d'expandre a través del [b]mapa infinit[/b]! - - Sovint, hauràs de començar a mesclar color i pintar les figures amb aquests; combina roig, verd i blau per produïr diferents colors i pintar les figures amb aquests per satisfer la demanda. - - Aquest joc presenta 18 nivells progressius (Els quals ja haurien de mantenir-te ocupat durant hores!) però estic constantment afegint nou contingut. Tenim moltes coses planejades! - - La compra del joc et dona accés a versió independent amb característiques adicionals, i també rebràs accés a les noves característiques que es desenvolupin. - - [b]Ventatges de la Versió Independent[/b] - - [list] - [*] Mode Oscur - [*] Punts d'interès il·limitats - [*] Guardar partides il·limitades - [*] Configuracions Adicionals - [*] Pròximament: Cables i Energia! Objectiu (aproximadament) per finals de Juliol del 2020. - [*] Pròximament: Més Nivells - [*] Em permet seguir desenvolupant shapez.io ❤️ - [/list] - - [b]Futures Actualitzacions[/b] - - Actualitzo el joc sovint i intent treure una actualització nova per setmana! - - [list] - [*] Mapes i reptes diferents (p.e. mapes amb obstacles) - [*] Trencaclosques (Entrega la figura amb una àrea/conjunt d'edificis delimitats) - [*] Un "Mode Història" on els edificis tenen un cost - [*] Generador de mapes configurable (Configura el tamany/densitat de les formes/recursos, llavors i més) - [*] Formes geomètriques adicionals - [*] Millores de rendiment (El joc ja funciona força bé!) - [*] Moltes coses més! - [/list] - - [b]Aquest joc és de codi obert![/b] - - Qualsevol pot contribuir, estic involucrat activament en la comunitat i intento revisar tots els suggeriments i tenir en compte els comentaris sempre que sigui possible. Assegureu-vos de consultar el meu tauler de trello per obtenir el full de ruta complet! - - [b]Enllaços[/b] - - [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] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io es un joc relaxant en el qual has de construir fàbriques per a + la producció automàtica de formes geomètriques. + + A mesura que el nivell augmenta, les formes esdevenen més complexes, i has d'explorar el mapa infinit. + + Per si això no era suficient, la demanda de formes creixerà exponencialment, pel que hauràs d'escalar les teves fàbriques! + + Mentre que al principi només processes formes, més envant les hauràs de colorejar, pel que necessitaràs extreure y mesclar colors! + + Si compres el joc a Steam tendràs accés al joc complet, però també pots jugar a la demo a shapez.io primer i decidir-te més tard! + title_advantages: "Avantatges de la versió completa:" + advantages: + - 12 Nous nivells per a un total de 26 nivells + - 18 Nous edificis per construir una fàbrica completament + automatitzada! + - 20 Nivells de millora per més hores de diversió! + - Actualització de Cablejat per a una dimensió totalment nova! + - Mode Oscur! + - Pots guardar jocs il·limitats + - Marcadors il·limitats + - Em dones suport! ❤️ + title_future: Contingut Planejat + planned: + - Llibreria de plànols (Exclusiu de la versió completa) + - Trofeus d'Steam + - Mode Puzzle + - Minimapa + - Mods + - Mode Sandbox + - ... i mot més! + title_open_source: Aquest joc és de codi obert! + title_links: Enllaços + links: + discord: Discord Oficial + roadmap: Full de ruta + subreddit: Subreddit + source_code: Codi font (GitHub) + translate: Ajuda a traduir-lo + text_open_source: >- + Qualsevol pot contribuir, i estic activament involucrat en la comunitat + i intent prestar atenció a tots els suggeriments i tenir en compte tots + el comentaris. + + Assegura't de mirar el meu tauler de Trello per al full de ruta complet! global: loading: Carregant error: Error @@ -103,7 +94,7 @@ mainMenu: helpTranslate: Ajuda a traduir-lo! madeBy: Creat per browserWarning: >- - + Disculpa, però el joc funcionarà lent al teu navegador! Aconsegueix el joc complet o descarrega't chrome per una millor experiència. savegameLevel: Nivell savegameLevelUnknown: Nivell desconegut @@ -132,7 +123,9 @@ dialogs: text: "Ha ocurrit un error al intentar carregar la teva partida:" confirmSavegameDelete: title: Eliminar - text: Estàs segur que vols eliminar la partida guardada? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Error en eliminar text: "Ha ocurrit un error al intentar eliminar la teva partida:" @@ -193,10 +186,9 @@ dialogs: transportadores ja col·locades.
" createMarker: title: Nou Marcador - titleEdit: Edit Marker - desc: 'Dona-li un nom significatiu, també pots usar claus de - les figures (Pots generarles a: aquí)' + titleEdit: Editar Marcador + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) markerDemoLimit: desc: En la Demo només pots crear dos marcadors, aconsegueix la versió completa per gaudir de l'experiència completa! @@ -206,18 +198,18 @@ dialogs: conte que aquest procés pot ser molt lent i inclús crashear el teu joc! editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Configura la Senyal + descItems: "Tria un ítem predefinit:" + descShortKey: ... o introdueix uncódi de forma (El qual pots + generar aqui) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Canviar el nom. + desc: Canviar el nom de la partida guardada. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Alerta de rendiment + desc: Has col·locat molts edificis, això és una alerta amistosa de que el joc no + pot suportar edificis infinits, així que intenta mantenir els teus + dissenys minimament compactes! ingame: keybindingsOverlay: moveMap: Moure @@ -356,39 +348,39 @@ ingame: connectedMiners: one_miner: 1 Miner n_miners: Miners - limited_items: Limited to + limited_items: Limitat a watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Versió demo + desc: Premeu aquí per veure les avantatges d'Steam! + get_on_steam: Comprar a Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Aconsegueix la versió completa! + no_thanks: No, gràcies! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Nivells now + desc: Per a un total de 26 nivells! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Nous edificis + desc: Automatitza la teva fàbrica completament! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: Guarda ∞ partides + desc: Tantes com vulguis! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Nivells de millora + desc: La versió demo només en té 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Marcadors + desc: Mai et perdis per el mapa! wires: - title: Wires - desc: An entirely new dimension! + title: Cables + desc: Una nova dimensió! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Mode Oscur + desc: Deixa de fer-te mal als ulls! support: - title: Support me - desc: I develop it in my spare time! + title: Dona'm suport + desc: EL desenvolupo en el meu temps lliure! shopUpgrades: belt: name: Cintes transportadores, Distribuidors i Túnels @@ -407,7 +399,7 @@ buildings: deliver: Envia toUnlock: per a desbloquejar levelShortcut: NVL - endOfDemo: End of Demo + endOfDemo: Fi de la Demo belt: default: name: Cinta transportadora @@ -418,9 +410,9 @@ buildings: name: Cable description: Permet transportar energia. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Cable + description: Transfereix senyals, que poden ser ítems, colors o booleà. Cables + de diferents colors no es connecten entre ells. miner: default: name: Extractor @@ -438,12 +430,12 @@ buildings: description: Permet transportar recursos per sota d'edificis i cintes. cutter: default: - name: Cisalla + name: Tallador description: Talla figures de dalt a baix i produeix les dues meitats. Si utilitzes sols una part, assegura't de destruir l'altra o es pararà! quad: - name: Cisalla (Quàdruple) + name: Tallador (Quàdruple) description: Talla figures en quatre parts. Si no utilitzes totes les parts, assegura't de destruir les altres o es pararà! rotater: @@ -454,8 +446,8 @@ buildings: name: Rotador (Antihorari) description: Rota formes en sentit antihorari 90 graus. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Rotador (180) + description: Rota formes 180 graus. stacker: default: name: Apilador @@ -479,129 +471,137 @@ buildings: description: Pinta les figures de l'esquerra amb el color de dalt. quad: name: Pintor (Quàdruple) - description: Permet pintar cadascun dels quadrants de forma diferent. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Paperera description: Acepta objectes de tots els costats i els destrueix. Permanentment. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Equilibrador + description: Multifuncional - Reparteix uniformament totes les entrades a totes + les sortides. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Fusionador (compacte) + description: Fusiona dues cintes transportadores en una. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Fusionador (compacte) + description: Fusiona dues cintes transportadores en una. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Divisor (compacte) + description: Divideix una cinta transportadora en dues. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Divisor (compacte) + description: Divideix una cinta transportadora en dues. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Emmagatzematge + description: Emmagatzema articles en excés fins a una capacitat determinada. + Prioritza la sortida esquerra i es pot utilitzar com a porta de + desbordament. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Encreuament de cablejat + description: Permet creuar dos cables sense conectar-los. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Senyal Constant + description: EEmet una senyal constant, que pot esser una forma, color o + booleana (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Interruptor + description: Pot esser alternat per emetre una senyal booleana (1 / 0) a la capa + de cablejat. logic_gate: default: - name: AND Gate + name: Porta AND description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, color or boolean "1") not: name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + description: Emet una senyal booleana "1" si les dues entrades són vertaderes. + (Vertadera significa que la senyal és una forma, un color o la + senyal booleana "1"). xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Porta XOR + description: Emet una senyal booleana "1" si i només si una de les senyals és + vertadera. (Vertadera significa que la senyal és una forma, un + color o la senyal booleana "1"). or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Porta OR + description: Emet una senyal booleana "1" si una de les senyals és vertadera. + (Vertadera significa que la senyal és una forma, un color o la + senyal booleana "1"). transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Deixa passar la senyal inferior si la senyal lateral és vertadera + (una forma, color o "1"). mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Deixa passar la senyal inferior si la senyal lateral és vertadera + (una forma, color o "1"). filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtre + description: Conecta una senyal per redirigir tots els ítems que coincideixin + amb la senyal a la part superior, i la resta a la dreta. També + es pot controlar amb senyals booleanes. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Pantalla + description: Conecta una senyal per que es mostri a la pantalla. Pot ser una + forma, color o booleà reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Lector de cinta + description: Permet mesurar el rendiment de la cinta. Emet el darrer ítem llegit + a la capa de cablejat (un pic desbloquejada). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Analitzador de formes + description: Analitza el quadrant superior dret de la capa més baixa de la forma + i retorna el color i la forma. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Comparador + description: Retorna una senyal booleana "1" si les dues senyals són exactament + iguales.Pot comparar formes, colors i booleans. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Tallador virtual + description: Talla la forma virtual en dues parts. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Rotador Virtual + description: Rota la forma virtual, tant en sentit horari com antihorari. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Desapilador Virtual + description: Extreu la capa superior a la sortida dreta i la resta a la sortida + esquerra. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Apilador Virtual + description: Apila la figura de l'entrada dreta damunt l'entrada esquerra. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Pintador Virtual + description: Pinta la capa de l'entrada inferior amb la figura de la entrada + dreta. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Productor d'ítems + description: Només avaliable en mode "sandbox", emet la senyal de la capa de + cablejat a la capa normal. storyRewards: reward_cutter_and_trash: title: Tallar figures - desc: Acabes de desbloquejar la Cisalla - talla les figures per - la meitat de dalt a baix; sense importar la seva/ua - orientació!

Assegura't d'eliminar les parts que no utilitzes, - si no es pararà - Es per això que t'he donat una - paperera, utilitza-la! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotar desc: El Rotador s'ha desbloquejat! Rota formes en sentit @@ -625,10 +625,9 @@ storyRewards: s'apilarà damunt de la de l'esquerra! reward_splitter: title: Distribuïdor - desc: El distribuïdor multifuncional s'ha desbloquejat - Pot - ser utilitzat per a construir fàbriques més grans per mitjà de la - separació i fusió de figures de diferents - cintes!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Túnel desc: El túnel s'ha desbloquejat - Ara pots passar objectes a @@ -641,17 +640,18 @@ storyRewards: variants! reward_miner_chainable: title: Extractor en cadena - desc: Has desbloquejat el extractor en cadena! Pot - passar els seus recursos a altres extractors perquè - pugues extraure recursos més eficientment! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Túnel de Nivell II desc: Has desbloquejat una nova variant del túnel - Té una major distància màxima, i ara pots mesclar tipus de túnels! reward_cutter_quad: - title: Cisalla quàdruple - desc: Has desbloquejat una variant de la cisalla - Et permet + title: Tallador quàdruple + desc: Has desbloquejat una variant de la tallador - Et permet tallar figures en quatre parts en lloc de sols en dos! reward_painter_double: @@ -661,14 +661,18 @@ storyRewards: consumint sols un color en lloc de dos! reward_storage: title: Magatzem de reserva - desc: Has desbloquejat una variant de la paperera - Et permet - emmagatzemar objectes fins a una capacitat màxima! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Joc lliure - desc: Ho has fet! Has desbloquejat el mode de joc lliure! Això - significa que les figures ara són generades aleatòriament! (No - t'angoixis/es, hi ha més contingut planejat per a la versió completa - - fora del web) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Plànols desc: Ara pots copiar i apegar/enxegar parts de la teva/ua @@ -687,78 +691,82 @@ storyRewards: desc: Enhorabona! Per cert, hi ha més contingut planejat per a la versió completa - fora del web! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

+ title: Equilibrador + desc: Has desbloquejat el multifuncional equilibrador! Pot + ésser emprat per construir fàbriques més grans dividint i + fusionant ítems a múltiples cintes!

reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Fusionador Compacte + desc: Has desbloquejat una variant fusionadora de + l'equilibrador. Accepta dues entrades i les fusiona + en una cinta! reward_belt_reader: - title: Belt reader + title: Lector de cinta desc: You have now unlocked the belt reader! It allows you to measure the throughput of a belt.

And wait until you unlock wires - then it gets really useful! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Rotador (180 graus) + desc: Acabes de desbloquejar un altre rotador!. Et permet rotar + una forma 180 graus. reward_display: - title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + title: Pantalla + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Senyal constant + desc: >- + Has desbloquejat l'emisor de senyal constant a la + capa de cables! És molt util per conectar-los a filtres + d'ítems, per exemple.

Pot emetre una + forma, color or + booleà (1 / 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Portes lògiques + desc: Has desbloquejat les portes lògiques! No fa falta + t'emocionis per això, però és molt guai!

Amb aquestes portes + lògiques pots computar operacions AND, OR, XOR i NOT.

També + tens disponible un transistor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Processament Virtual + desc: Acabes de desbloquejar un munt de nous edificis que et permeten + simular el processament de figures!

Ara + pots simular una tallador, rotador, apilador i més a la capa de + cables! Amb això ara tens tres opcions per continuar el + joc:

- Construir una màquina automàtica + que crea totes les formes demanades per el NEXE (Recoman + provar-ho!).

- Construir algo guai amb cables.

- + Continua jugant normalment.

Triis el que triis, recorda + passar-ho bé! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." + title: Cables i Pintador Quàdruple + desc: "\"Has desbloquejat la Capa de Cables: És una capa + separada damunt la capa normal i introdueix moltes mecàniques + noves!

Per començar t'he desbloquejat el Pintador + Quàdruple. Conecta les ranures que vols pintar a la capa de + Cables!

Per canviar a la capa de Cables, prem + E.\"" reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtre d'Ítems + desc: Has desbloquejat el Filtre d'Ítems! Filtrarà els ítems a + la part superior o a la part dreta depenent de si coincideixen amb + la senyal de la capa de Cables o no.

També pots conectar-li + una senyal booleana (1 / 0) per encendra-la per complet o apagarla. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Final de la Demo + desc: Has arribat al final de la Demo! settings: title: Opcions categories: general: General - userInterface: User Interface - advanced: Advanced - performance: Performance + userInterface: Interfície d'Usuari + advanced: Avançat + performance: Rendiment versionBadges: dev: Desenvolupament - staging: Staging + staging: Posada en escena prod: Producció buildDate: Generat labels: @@ -868,47 +876,48 @@ settings: description: Desactiva els diàlegs d'advertència que es mostren en tallar / suprimir més de 100 entitats. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Volum de sò + description: Defineix el volum dels sons musicVolume: - title: Music Volume - description: Set the volume for music + title: Volum de música + description: Defineix el volum de la música lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Map de Recursos de Baixa Qualitat + description: Simplifica la renderització dels recursos en el mapa al fer zoom + per millorar el rendiment. Fins i tot es veu més net, així que + assegureu-vos de provar-ho! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Desactiva la Graella + description: Desactivar la graella pot ajudar al rendiment. També fa que el joc + es vegi més net! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Esborreu el cursor en fer clic amb el botó dret + description: Encés per defecte, borra el cursor quan es prem el botó dret + mentres hi ha un edifici seleccionat. Si es desactiva, pots + eliminar edificis prement amb el botó dret mentres col·loques un + altre edifici. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Textures de baixa qualitat (Molt lleig) + description: Emprar textures de baixa qualitat per millorar el rendiment. Aixó + farà que el joc sigui molt lleig! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Mostrar les vores dels Chunks + description: El joc està dividit en chunks de 16x16 caselles. Si es selecciona + aquesta opció, les vores dels chunks es mostraràn. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Triar el miner a la zona de recursos + description: Seleccionat per defecte, es selecciona el miner si empres la pipeta + damunt una zona de recursos. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Cintes simplificades (Lleig) + description: No renderitze els ítems de les cintes fins que passis el ratolí per + sobre, per millorar el rendiment.No recoman usar aquesta opció + si no necessites un augment de rendiment. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Activa el desplaçament del ratolí + description: Permet moure el mapa quan mous el cursor a les vores de la + pantalla. La velocitat de moviment depèn de la configuració de + Velocitat de Moviment. rangeSliderPercentage: % keybindings: title: Combinacions de tecles @@ -945,7 +954,7 @@ keybindings: belt: Cinta transportadora underground_belt: Túnel miner: Extractor - cutter: Cisalla + cutter: Tallador rotater: Rotador stacker: Apilador mixer: Mesclador de colors @@ -954,13 +963,13 @@ keybindings: wire: Cable pipette: Pipeta rotateWhilePlacing: Rotar - rotateInverseModifier: "Modifier: Rotar en sentit antihorari" + rotateInverseModifier: "Modificador: Rotar en sentit antihorari" cycleBuildingVariants: Rotar les Variants confirmMassDelete: Eliminar àrea pasteLastBlueprint: Afferar el darrer pla cycleBuildings: Rotar els Buildings lockBeltDirection: Habilitar el planificador de cintes transportadores - switchDirectionLockSide: "Planner: Canviar costat" + switchDirectionLockSide: "Planificador: Canviar costat" massSelectStart: Manteniu premut i arrossegueu per començar massSelectSelectMultiple: Seleccionar múltiples àrees massSelectCopy: Copiar àrea @@ -968,21 +977,21 @@ keybindings: placementDisableAutoOrientation: Desactivar orientació automàtica placeMultiple: Mantenir-se en mode de col·locació placeInverse: Invertir orientació automàtica de les cintes transportadores - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + balancer: Equilibrador + storage: Emmagatzematge + constant_signal: Senyal Constant + logic_gate: Porta lògica + lever: Interruptor (regular) + filter: Filtre + wire_tunnel: Creuament de Cables + display: Pantalla + reader: Lector de cinta + virtual_processor: Tallador Virtual transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Analitzador de Figura + comparator: Comparador + item_producer: Productor d'items (Sandbox) + copyWireValue: "Cables: Copiar valor davall el cursor" about: title: Sobre aquest Joc body: >- @@ -1008,63 +1017,78 @@ demo: exportingBase: Exportar la base com a Imatge settingNotAvailable: No disponible en la versió de demostració. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - El NEXE accepta qualsevol tipus d’entrada, no només la forma actual. + - Assegureu-vos que les vostres fàbriques siguin modulars; donarà els seus + fruits. + - No construïu massa a prop del NEXE, ja que serà un enorme caos. + - Si l'apilament no funciona, proveu de canviar les entrades. + - Podeu canviar la direcció del planificador de cinturons prement R . + - Mantenir premut CTRL permet arrossegar cinturons sense orientació + automàtica. + - Les proporcions continuen igual, sempre que totes les millores de + velocitat es facin al mateix nivell. + - L’execució en sèrie és més eficient que la paral·lela. + - Desbloquejaràs més variants d’edificis més endavant en el joc. + - Podeu utilitzar T per canviar entre diferents variants. + - La simetria és clau! + - Podeu teixir diferents nivells de túnels. + - "Intenteu construir fàbriques compactes: donarà els seus fruits!" + - El pintor té una variant reflectida que podeu seleccionar amb T + - Tenir les relacions constructives adequades maximitzarà l’eficiència. + - Al nivell màxim, 5 extractors ompliran un sol cinturó. + - No us oblideu dels túnels! + - No cal dividir els articles de manera uniforme per obtenir una eficiència + completa. + - Mantenint premut SHIFT s’activarà el planificador de cinturons, + cosa que us permetrà col·locar llargues línies de cinturons fàcilment. + - Els talladors sempre tallen verticalment, independentment de la seva + orientació. + - Per obtenir blanc barregeu els tres colors primaris. + - La memòria intermèdia d’emmagatzematge prioritza la primera sortida. + - "Invertiu temps per crear dissenys repetibles: val la pena." + - Si mantingueu CTRL permet col·locar diversos edificis. + - Podeu mantenir premut ALT per invertir la direcció dels cinturons + col·locats. + - L’eficiència és clau! + - Les formes geomètriques que apareixen més lluny del NEXE són més complexes. + - Les màquines tenen una velocitat limitada, dividiu-les per obtenir la + màxima eficiència. + - Utilitzeu equilibradors per maximitzar la vostra eficiència. + - L’organització és important. Intenteu no creuar massa els transportadors. + - Planifiqueu amb antelació, o serà un enorme caos! + - No borreu les vostres antigues fàbriques! Les necessitareu per + desbloquejar actualitzacions. + - Proveu de superar el nivell 20 pel vostre compte abans de buscar ajuda. + - No compliqueu les coses, intenteu ser senzill i arribareu molt lluny. + - És possible que hàgiu de tornar a utilitzar fàbriques més endavant del + joc. Planifiqueu les vostres fàbriques de forma que puguin ser + reutilitzables. + - De vegades, podeu trobar una forma necessària al mapa sense crear-la amb + apiladors. + - Els molins de vent o molins de vent complets mai no poden generar de forma + natural. + - Pinteu les formes abans de tallar per obtenir la màxima eficiència. + - Amb els mòduls, l’espai és només una percepció; una preocupació per als + homes mortals. + - Feu una fàbrica de plànols independent. Són importants per als mòduls. + - Feu una ullada més de prop al mesclador de colors i les vostres preguntes + seran contestades. + - Utilitzeu CTRL + Feu clic per seleccionar una àrea. + - Construir massa a prop del centre pot dificultar els projectes posteriors. + - La icona de fixació situada al costat de cada forma de la llista + d'actualitzacions la fixa a la pantalla. + - Barregeu tots els colors primaris per fer blanc. + - Teniu un mapa infinit, no restringiu la vostra fàbrica, amplieu-la. + - També proveu Factorio! És el meu joc preferit. + - El tallador de quadres talla en sentit horari a partir de la part superior + dreta. + - Podeu descarregar els vostres jocs desats al menú principal. + - Aquest joc té moltes combinacions de tecles útils. Assegureu-vos de + consultar el fitxer pàgina de configuració. + - Aquest joc té moltes opcions de configuració, no oblideu consultar-les. + - El marcador del concentrador té una petita brúixola per indicar-ne la + direcció. + - Per netejar els cinturons, talleu la zona i enganxeu-la al mateix lloc. + - Premeu F4 per mostrar la vostra tarifa FPS i Tick. + - Premeu F4 dues vegades per mostrar el mosaic del ratolí i la càmera. + - Podeu fer clic a una forma fixada al costat esquerre per desenganxar-la. diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index ba77b5d0..16e231d3 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -1,59 +1,51 @@ steamPage: 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ě. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Oficiální Discord + intro: >- + Shapez.io je relaxační hra, ve které musíte stavět továrny pro + automatizaci výroby geometrických tvarů. - 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. + Jak se zvyšuje úroveň, tvary se stávají stále složitějšími a vy se musíte rozšířit po nekonečné mapě. - 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 jako by to nestačilo, musíte také produkovat exponenciálně více, abyste uspokojili požadavky - jediná věc, která pomáhá, je škálování! - 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. + Zatímco tvary zpracováváte pouze na začátku, musíte je později obarvit - k tomu musíte těžit a míchat barvy! - 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! + Koupením hry na platformě Steam vám dá přístup k plné verzi hry, ale také můžete hrát demo verzi na shapez.io a potom se můžete rozhodnou jestli hru koupíte! + title_advantages: Výhody samostatné verze hry + advantages: + - 12 Nových úrovní celkem 26 úrovní + - 18 Nových budov pro plně automatizovanou továrnu! + - 20 vylepšení pro mnoho hodin zábavy! + - Wires Update pro zcela nové rozměry! + - Dark Mode! + - Neomezený počet uložených her + - Neomezené značky + - Podpořte mě! ❤️ + title_future: Plánovaný kontent + planned: + - Blueprintová knihovna + - Steam Achievements + - Puzzle Mód + - Minimapa + - Módy + - Sandbox Mód + - ... a o hodně víc! + title_open_source: Tato hra je open source! + title_links: Odkazy + links: + discord: Oficiální Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Pomozte přeložit hru! + text_open_source: |- + Kdokoli může přispět, jsem aktivně zapojený do komunity, + pokouším se zkontrolovat všechny návrhy a vzít v úvahu zpětnou vazbu všude, + kde je to možné. - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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] - - [b]This game is 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] - - [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] - [/list] - discordLinkShort: Official Discord + Nezapomeňte se podívat na můj trello board, kde najdete kompletní plán! global: loading: Načítám error: Chyba @@ -104,7 +96,7 @@ mainMenu: newGame: Nová hra madeBy: Vytvořil subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Nepojmenovaný dialogs: buttons: ok: OK @@ -129,7 +121,9 @@ dialogs: text: "Nepovedlo se načíst vaši uloženou hru:" confirmSavegameDelete: title: Potvrdit smazání - text: Opravdu chcete smazat hru? + text: Jste si jisti, že chcete smazat tuto uloženou hru?

+ '' s úrovní

Tato akce je + nevratná! savegameDeletionError: title: Chyba mazání text: "Nepovedlo se smazat vaši uloženou hru:" @@ -179,9 +173,8 @@ dialogs: umístěných pásů.
" createMarker: title: Nová značka - desc: Pojmenuj jí nějak výstižně, též ji můžeš doplnit zkratkou - pro tvar (Kterou si můžete vytvořit zde) + desc: Použijte smysluplný název, můžete také zahrnout krátký + klíč tvaru (který můžete vygenerovat zde) titleEdit: Upravit značku markerDemoLimit: desc: V ukázce můžete vytvořit pouze dvě značky. Získejte plnou verzi pro @@ -199,18 +192,17 @@ dialogs: title: Potvrdit vyjmutí desc: Nemůžeš si dovolit vložení této oblasti! Skutečně ji chceš vyjmout? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Nastavte signál + descItems: "Vyberte předdefinovanou položku:" + descShortKey: ... nebo zadejte krátký klíč tvaru (který + můžete vygenerovat zde) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Přejmenovat uloženou hru + desc: Zde můžeš přejmenovat svoji uloženou hru. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Varování výkonu + desc: Umístili jste spoustu budov, to je jen přátelská připomínka. Hra nezvládne + nekonečný počet budov - zkuste udržet své továrny kompaktní! ingame: keybindingsOverlay: moveMap: Posun mapy @@ -231,7 +223,7 @@ ingame: copySelection: Kopírovat clearSelection: Zrušit výběr pipette: Kapátko - switchLayers: Změnit vrstvi + switchLayers: Změnit vrstvy buildingPlacement: cycleBuildingVariants: Zmáčkněte pro přepínání mezi variantami. hotkeyLabel: "Klávesová zkratka: " @@ -251,7 +243,7 @@ ingame: notifications: newUpgrade: Nová aktualizace je k dispozici! gameSaved: Hra byla uložena. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Level byl dokončen! shop: title: Vylepšení buttonUnlock: Vylepšit @@ -349,37 +341,37 @@ ingame: n_miners: Extraktorů limited_items: Limit je watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Demo verze + desc: Kliknutím sem zobrazíte výhody Steam verze! + get_on_steam: Získejte na steamu standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Získejte plnou verzy! + no_thanks: Ne, děkuji! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Nových úrovní + desc: Celkem 26 úrovní! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Nových budov + desc: Plně automatizujte svou továrnu! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Uložených her + desc: Tolik, kolik vaše srdce touží! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 vylepšení + desc: Tato demo verze má pouze 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Značek + desc: Nikdy se neztraťte ve své továrně! wires: - title: Wires - desc: An entirely new dimension! + title: Kabely + desc: Zcela nový rozměr! darkmode: title: Dark Mode - desc: Stop hurting your eyes! + desc: Přestanou vás bolet oči! support: - title: Support me - desc: I develop it in my spare time! + title: Podpořte mě + desc: Vyvíjím to ve svém volném čase! shopUpgrades: belt: name: Pásy, distribuce & tunely @@ -398,12 +390,12 @@ buildings: deliver: Dodejte toUnlock: pro odemčení levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: konec Demo verze belt: default: name: Dopravníkový pás - description: Přepravuje tvary a barvy, přidržením můžete umístit více pásů za - sebe tahem. + description: Přepravuje tvary a barvy, přidržením můžete tahem umístit více pásů + za sebou. miner: default: name: Extraktor @@ -436,9 +428,9 @@ buildings: description: Otáčí tvary o 90 stupňů po směru hodinových ručiček. ccw: name: Rotor (opačný) - description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček + description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček. rotate180: - name: Rotor (180) + name: Rotor (180°) description: Otáčí tvary o 180 stupňů. stacker: default: @@ -458,14 +450,16 @@ buildings: description: Obarví tvary z levých vstupů barvou z horního vstupu. quad: name: Barvič (čtyřnásobný) - description: Umožňuje obarvit každý dílek tvaru samostatně. + description: Umožnuje obarvit každou čtvrtinu tvaru individuálně. Jen + čtvrtiny se vstupy barev s logickým signálem na vrstvě kabelů + budou obarveny! mirrored: name: Barvič description: Obarví celý tvar v levém vstupu barvou z pravého vstupu. trash: default: name: Koš - description: Příjmá tvary a barvy ze všech stran a smaže je. Navždy. + description: Přijímá tvary a barvy ze všech stran a smaže je. Navždy. wire: default: name: Kabel @@ -478,10 +472,10 @@ buildings: name: Vyvažovač description: Multifunkční - Rozděluje vstupy do výstupy. merger: - name: Spojka (kompaktní) + name: Spojovač (kompaktní) description: Spojí dva pásy do jednoho. merger-inverse: - name: Spojka (kompaktní) + name: Spojovač (kompaktní) description: Spojí dva pásy do jednoho. splitter: name: Rozdělovač (kompaktní) @@ -492,12 +486,12 @@ buildings: storage: default: name: Sklad - description: Skladuje věci navíc až do naplnění kapacity. Může být použit na - skladová ní surovin navíc. + description: Skladuje přebytečné věci až do naplnění kapacity. Může být použit na + skladování surovin navíc. wire_tunnel: default: name: Křížení kabelů - description: Umožňuje křížení dvou kabeů bez jejich spojení. + description: Umožňuje křížení dvou kabelů bez jejich spojení. constant_signal: default: name: Konstantní signál @@ -559,7 +553,7 @@ buildings: description: Virtuálně rozřízne tvar svisle na dvě části. rotater: name: Virtuální rotor - description: Virtuálně Otáčí tvary o 90 stupňů po směru hodinových ručiček. + description: Virtuálně otáčí tvary o 90 stupňů po směru hodinových ručiček. unstacker: name: Virtuální extrahátor description: Virtuálně extrahuje nejvyšší vrstvu do pravého výstupu a zbývající @@ -573,17 +567,18 @@ buildings: description: Virtuálně obarví celý tvar v levém vstupu barvou z pravého vstupu. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Výrobník předmětů + description: Dostupný pouze v sandboxovém módu, vydává daný signál z + vrstvy kabelů na běžnou vrstvu. storyRewards: reward_cutter_and_trash: title: Řezání tvarů - desc: Právě jste odemknuli pilu - řeže tvary - svisle bez ohledu na svou - orientaci!

Nezapomeňte se zbavovat odpadu, jinak se - vám zasekne produkce - pro tento účel jsem vám odemknul - koš, který můžete použít na mazání odpadu! + desc: Právě jste odemkli pilu, která řeže tvary + svisle na poloviny bez ohledu na její + orientaci!

Nezapoměňte se zbavit zbytku tvarů, jinak + se vám produkce zasekne - za tímto účelem + jsem vám dal koš, který smaže + vše, co do něj vložíte! reward_rotater: title: Otáčení desc: Rotor byl právě odemčen! Otáčí tvary po směru hodinových @@ -605,9 +600,9 @@ storyRewards: vpravo se nalepí na tvar vlevo! reward_splitter: title: Rozřazování/Spojování pásu - desc: Multifuknční balancer byl právě odemčen - Může být použít - pro stavbu větších továren díky tomu, že rozřazuje - tvary mezi dva pásy!

+ desc: Právě jste odemkli rozdělovací variantu + vyvažovače - Přijímá jeden vstup a rozdělí ho + na dva! reward_tunnel: title: Tunel desc: Tunel byl právě odemčen - Umožňuje vézt suroviny pod @@ -619,9 +614,10 @@ storyRewards: 'T' pro přepnutí mezi variantami! reward_miner_chainable: title: Napojovací extraktor - desc: Odemknuli jste variantu extraktoru! Může - přesměrovat vytěžené zdroje do dalších extraktorů - pro efektivnější těžbu! + desc: "Právě jste odemkli napojovací extraktor! Může + předat své zdroje ostatním extraktorům, čímž + můžete efektivněji těžit více zdrojů!

PS: Starý + extraktor bude od teď nahrazen ve vašem panelu nástrojů!" reward_underground_belt_tier_2: title: Tunel II. úrovně desc: Odemknuli jste tunel II. úrovně - Má delší @@ -637,13 +633,18 @@ storyRewards: barvy! reward_storage: title: Sklad - desc: Odemknuli jste variantu koše - Umožňuje vám skladovat - věci až do určité kapacity! + desc: Právě jste odemkli sklad - Umožnuje skladovat přebytečné věci + až do naplnění kapacity!

Dává prioritu levému + výstupu, takže ho také můžete použít jako průtokovou bránu! reward_freeplay: title: Volná hra - desc: Dokázali jste to! Odemknuli jste volnou hru! Další tvary - jsou již náhodně generované! (pro plnou verzi plánujeme více - obsahu!) + desc: Zvládli jste to! Odemkli jste mód volné hry! To znamená, + budou od teď náhodně generovány!

+ Vzhledem k tomu, že Hub nadále potřebuje propustnost + , především doporučuji postavit továrnu, která automaticky + doručí požadovaný tvar!

Hub vysílá požadovaný + tvar na vrstvu kabelů, takže jediné co musíte udělat, je analyzovat tvar a + automaticky nastavit svou továrnu dle této analýzy. reward_blueprints: title: Plány desc: Nyní můžete kopírovat a vkládat části továrny! Vyberte @@ -661,68 +662,70 @@ storyRewards: title: Další úroveň desc: Gratuluji! Mimochodem, více obsahu najdete v plné verzi! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

+ title: Vyvažovač + desc: Multifunkční vyvažovač byl odemknut - Může + být použit ke zvětšení vašich továren rozdělováním a spojováním + předmětů na několik pásu!

reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Kompaktní spojovač + desc: Právě jste odemkli spojovací variantu + vyvažovače - Přijímá dva vstupy a spojí je + do jednoho! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Čtečka pásů + desc: Právě jste odemkli čtečku pásů! Umožnuje vám + změřit propustnost pásu.

A počkejte na odemčení + kabelů - později to bude velmi užitečné! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Rotor (180°) + desc: Právě jste odemkli 180 stupňoví rotor! - Umožňuje + vám otáčet tvar o 180 stupňů! reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "Právě jste odemkli Display - Připojte signál ve + vrstvě kabelů pro vizualizaci!

PS: Všimli jste si, že čtečka + pásů a sklad vysílájí jejich poslední přečtěný předmět? Zkuste ho ukázat na + displeji!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Konstantní signál + desc: Právě jste odemkli konstantní signál na vrstvě + kabelů! Tohle je například užitečné pro připojení k filtrům předmětů + .

Konstantní signál může vysílat + tvar, barvu nebo + logickou hodnotu (1 / 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Logické brány + desc: Právě jste odemkli logické brány! Nemusíte být zrovna nadšení, + ale ve skutečnosti je to celkem cool!

S těmito bránami + můžete propočítat AND, OR, XOR a NOT operace.

Jako + bonus navíc vám také zpřístupním tranzistor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Virtuální zpracování + desc: Právě jsem zpřístupnil spoustu nových budov, které vám umožní + simulovat výrobu různých tvarů!

Můžete + teď také simulovat pilu, rotor, kombinátor a mnoho dalšího na vrstvě kabelů! + Nadále máte tři možnosti, jak pokračovat ve hře:

- + Postavit automatickou továrnu k vytvoření jakéhokoliv + tvaru požadovaného Hubem (Doporučuji to alespoň vyzkoušet!).

- Postavit + něco zajímavého s použitím kabelů.

- Pokračovat ve hře + pravidelně.

Bez ohledu na tvou volbu, nezapomeň si svou hru užít! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press + title: Kabely a čtyřnásobný barvič + desc: "Právě jste odemkli vrstvu kabelů: Je to samostatná + vrstva navíc oproti běžné vrstvě a představuje spoustu nových + možností!

Do začátku jsem zpřístupnil čtyřnásobný + barvič - Připojte vstupy, které byste chtěli obarvit + na vrstvě kabelů!

Pro přepnutí mezi vrstvami stiskněte klávesu E." reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtr předmětů + desc: Právě jste odemkli filtr předmětů! Nasměruje předměty buď + na horní nebo pravý výstup podle toho, zda se shodují + nebo neshodují se signálem na vrstvě kabelů.

Také můžete vyslat logickou hodnotu + (1 / 0) pro zapnutí nebo kompletní vypnutí filtru. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Konec demo verze + desc: Právě jste dosáhli konce demo verze! settings: title: Nastavení categories: @@ -833,52 +836,52 @@ settings: description: Zapné různé nástroje, které vám umožní hrát hru i pokud jste barvoslepí. 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. + title: Rotace dle typu budov + description: Každý typ budovy si zapamatuje poslední rotaci, na kterou jste je individuálně + nastavili. Tohle může být pohodlnější pokud často + přepínáte mezi pokládáním budov různých typů. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Hlasitost zvuků + description: Nastavte hlasitost zvukových efektů musicVolume: - title: Music Volume - description: Set the volume for music + title: Hlasitost hudby + description: Nastavte hlasitost hudby lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Nižší kvalita zdrojů na mapě + description: Zjednoduší vykreslování zdrojů na mapě při přiblížení pro + zlepšení výkonu. Také to zlepšuje vzhled hry, takže neváhejte toto nastavení + vyzkoušet! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Vypnout mřížku + description: Vypnutí mřížky částic může pomoct s výkonem. Toto nastavení + zlepšuje vzhled hry! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Uvolní kurzor při kliknutím pravým tlačitkem + description: Povoleno dle výchozího nastavení, uvolní kurzor pokaždé co kliknete pravým tlačítkem, + když máte budovu vybranou pro pokládání. Při vypnutí, + můžete smazat budovy při kliknutí pravým tlačikem spolu s položením dalších + budov. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Nižší kvalita textur (Horší vzhled) + description: Používá nižší kvalitu textur pro zlepšení výkonu. Toto nastavení + zhorší vzhled hry! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Zobrazit hranice oblastí + description: Hra je rozdělena na oblasti 16x16 částic. Pokud je toto nastavení povolené, + zobrazí se hranice těchto oblastí. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Vybrat extraktor na naležistě zdrojů + description: Povoleno dle výchozího nastavení, vybere extraktor, pokud použijete kapátko pro + kliknutí na nalezistě zdrojů. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Zjednodušené pásy (Horší vzhled) + description: Nevykresluje předměty na pásech, pokud nad nimi nepřejíždíte kurzorem, pro ušetření + výkonu. Nedoporučuji hrát s tímto nastavením, pokud + opravdu nepotřebujete ušetřit výkon. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Posouvání myší + description: Umožnuje posouvání po mapě, pokud myší přejedete na okraj + obrazovky. Rychlost žáleží na nastavení rychlosti pohybu. rangeSliderPercentage: % keybindings: title: Klávesové zkratky @@ -936,23 +939,23 @@ keybindings: switchDirectionLockSide: Otočit strany zámku plánovače pipette: Kapátko menuClose: Zavřít menu - switchLayers: Změnit vrstvi + switchLayers: Změnit vrstvy wire: Kabel - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing + balancer: Vyvažovač + storage: Sklad + constant_signal: Konstantní signál + logic_gate: Logická brána + lever: Přepínač (běžný) + filter: Filtr + wire_tunnel: Křížení kabelů display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + reader: Čtečka pásů + virtual_processor: Virtuální pila + transistor: Tranzistor + analyzer: Analyzátor tvarů + comparator: Porovnávač + item_producer: Výrobník předmětů (Sandbox) + copyWireValue: "Kabely: Zkopírovat hodnotu pod kurzorem" about: title: O hře body: >- @@ -978,63 +981,63 @@ demo: exportingBase: Exportovat celou základnu jako obrázek settingNotAvailable: Nedostupné v demo verzi. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Hub přijímá vstup jakéhokoliv tvaru, nejen právě požadovaný tvar! + - Ujistěte se, že vaše továrny jsou rozšiřitelné - vyplatí se to! + - Nestavte přilíš blízko Hubu nebo vznikne velký chaos! + - Pokud skládání nefunguje, zkuste prohodit vstupy. + - Směr plánovače pásů můžete změnit stisknutím klávesy R. + - Držení klávesy CTRL umožnuje natažení pásů bez auto-orientace. + - Poměry zůstávají stejné, dokud jsou všechny vylepšení na stejné úrovní. + - Sériové zapojení je efektivnější nez paralelní. + - V průběhu hry později odemknete další varianty mnoha budov! + - Můžete použít klávesu T k přepnutí mezi různými variantami. + - Symetrie je klíčová! + - Můžete proplétat různé úrovně tunelů. + - Snažte se postavit kompaktní továrny - vyplatí se to! + - Barvič má zrcadlově otočenou variantu, kterou můžete vybrat klávesou T + - Užití správné kombinace vylepšení maximalizuje efektivitu. + - Na maximální úrovní, 5 extraktorů zaplní jeden celý pás. + - Nezapomeňte na tunely! + - Pro plnou efektivitu nemusíte rozdělovat předměty rovnoměrně. + - Držení klávesy SHIFT spolu s pásy aktivuje plánovač pásy, který vám snadno umožní + postavit dlouhé řady pásů. + - Pily řežou vždy svisle, bez ohledu na jejich orientaci. + - Smícháním všech 3 barev získáte bílou barvu. + - Sklad preferuje levý výstup. + - Investujte čas pro vytvoření opakovatelných designů - ulehčí vám to pozdější expanzy! + - Držení klávesy CTRL umožnuje postavit více budov stejného typu. + - Můžete podržet klávesu ALT k obrácení směru pokládaných pásů. + - Efektivita je klíčová! + - Nalezistě zdrojů, které jsou více vzdálené od Hubu, jsou větší. + - Továrny mají omezenou rychlost, rozdělte předměty pro vyšší efektivitu. + - Použijte vyvažovače pro maximalizaci efektivity. + - Organizace je důležitá. Zkuste nekřížit příliš mnoho pásů. + - Plánujte dopředu, abyste předešli vzniku velkého chaosu! + - Neodstraňujte své staré továrny! Budete je potřebovat pro další vylepšení. + - Před vyhledáním pomoci zkuste sami porazit úroveň 20! + - Snažte se věci nekomplikovat, zůstaňtě u jednoduchých designů a dostanete se daleko. + - Možná budete muset použít stejné továrny i v budoucnu. Vytvořte své továrny takovým stylem, + abyste je mohli použít i v dalších případech. + - V nektěrých případech můžete najít celý požadovaný tvar bez nutnosti jeho výroby s pomocí + kombinátorů. + - Celý tvar typu mlýnu se na mapě nikdy nevyskytne. + - Obarvěte své tvary před řezáním pro zvýšení efektivity. + - S moduly, prostor je pouze vnímáním; starost pro smrtelníky. + - Vytvořtě si samostatnou továrnu jen na plány (blueprinty). Jsou důležité pro moduly. + - Podívejte se zblízka na míchač barev, a vaše otázky budou odpovězeny. + - Použijte klávesu CTRL a myš pro označení oblasti. + - Pokud stavíte příliš blízko Hubu, v budoucnu můžete narazit na problémy s dalšími projekty. + - Ikona připínáčku vedle každého tvaru vám umožnuje připnout tvar, čímž se vám bude neustále zobrazovat vlevo na obrazovce. + - Smíchejte všechny základní barvy pro vytvoření bílé barvy! + - Vaše mapa je nekonečná, nesnažte se postavit továrnu na malinkém prostoru, rozšiřte se do okolí! + - Neváhejte vyzkoušet hru Factorio! Je to má oblíbená hra. + - Rozebírač funguje po směru hodinových ručiček, počínaje pravým horním rohem! + - V hlavním menu můžete stáhnout své uložené hry! + - Tato hra má spoustu užitečných klávesových zkratek! Určitě si je projděte v + nastavení. + - Tato hra má spoustu nastavení, určitě si je projděte! + - Značka Hubu má vedle sebe malý kompas, který ukazuje směr k Hubu! + - Pro vyčistění pásů, vyjměte budovy z prostoru a pak je zkopírujte zpět na stejné místo. + - Stisknutím F4 zobrazíte FPS a rychlost ticků. + - Stisknutím F4 dvakrát zobrazíte častici myši a kamery. + - Můžete kliknout na připínáček vlevo vedle připnutého tvaru k jeho odepnutí. diff --git a/translations/base-da.yaml b/translations/base-da.yaml index 4c746791..e36b438c 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -1,62 +1,52 @@ steamPage: - shortText: shapez.io handler om at bygge fabrikker på en grænseløs spilleflade + 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - 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. - - Når efterspurgte figurer bliver afleveret, vil du gøre fremskridt i spillet og modtage opgraderinger, der gør din fabrik hurtigere. - - 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]! - - 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. - - Dette spil indeholder 18 fremadskridende Niveauers (Som allerede burde holde dig beskæftiget i timevis!) men jeg tilføjer hele tiden nyt - Der er en hel masse planlagt! - - 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] - [*] 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: Niveauer - [*] Støtter mig i yderligere at udvikle shapez.io ❤️ - [/list] - - [b]Fremtidige Opdateringer[/b] - - Jeg opdaterer spillet meget ofte og prøver at få frigivet en opdatering mindst hver uge! - - [list] - [*] 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]Dette spil er open source![/b] - - 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]Link[/b] - - [list] - [*] [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]Kildekode (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Hjælp med at oversætte[/url] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io er et afslapet spil hvor du skal bygge fabrikker for at + automatisere productionen af geometriske figurer. + + Jo længer du når, jo mere kompliseret bliver figurene, og du bliver nød til at spræde dig ud på den grænseløse spilleflade. + + og hvis det ikke var nok, så skal du også producere eksponentielt flere figurer for at måde behovene spillet giver dig - det eneste der virker er skalering! + + Mens du i starten kun laver former, skal du senere farve lægge dem - for at gøre dette skal du udvinde og blande farver! + + At købe spllet på Steam, giver dig adgang til det fulde spil, men du kan også spille en demo version på shapez.io og vælge senere! + title_advantages: Steam version Fordele + advantages: + - 12 Nye Niveauer for i alt 26 niveauer + - 18 Nye Byginger for en fuldt autmaticeret fabrik! + - 20 Upgraderings Niveauer for mange timers sjov! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Uendelige Markører + - Hjælp med at støtte mig! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Indlæser error: Fejl @@ -86,7 +76,7 @@ global: control: CTRL alt: ALT escape: ESC - shift: SKIFT + shift: SKIFT/SHIFT space: MELLEMRUM demoBanners: title: Demo Version @@ -131,7 +121,9 @@ dialogs: text: "Det lykkedes ikke at åbne dit gemte spil:" confirmSavegameDelete: title: Bekræft sletning - text: Er du sikker på du vil slette dit gemte spil? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Sletning fejlede text: "Det lykkedes ikke at slette dit gemte spil:" @@ -187,9 +179,8 @@ dialogs: transportbånd.
" createMarker: 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) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Rediger Markør markerDemoLimit: desc: Du kan kun lave to markører i demoen. Køb spillet for uendelige markører! @@ -463,7 +454,9 @@ buildings: description: Farver figurerne fra venstre side med farven fra toppen. quad: name: Maler (Quad) - description: Lader dig farve hver fjerdel af figuren med forskellige farver. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Skraldespand @@ -589,11 +582,12 @@ buildings: storyRewards: reward_cutter_and_trash: 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! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotation desc: Drejeren er nu tilgængelig! Den drejer figurer 90 grader @@ -607,8 +601,8 @@ storyRewards: indstillingerne!" reward_mixer: title: Farveblanding - desc: Farveblanderen er nu tilgængelig - Kombiner to farver ved - brug af (strong>additiv blanding
med denne bygning! + desc: The mixer has been unlocked - It mixes two colors using + additive blending! reward_stacker: title: Stabler desc: Du kan du stable figurer med stableren! Begge inputs @@ -617,9 +611,9 @@ storyRewards: stablet ovenpå det venstre! reward_splitter: title: Fordeler/Sammenlægger - desc: Den flerfunktionelle Fordeler er nu tilgængelig - Den kan - bruges til at bygge større fabrikker ved at fordele og - sammenlægge varer på flere bælter!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: Tunnellen er nu tilgængelig - Du kan nu lave tuneller @@ -631,9 +625,10 @@ storyRewards: trykke 'T'! reward_miner_chainable: 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! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Trin II desc: Du har fået adgang til en variant af tunnellen - Den har @@ -651,13 +646,18 @@ storyRewards: og bruger kun en farve i stedet for to. reward_storage: title: Opbevaringsbuffer - desc: Du har fået adgang til en variant af skraldespanden - Den - lader dig opbevare varer til en hvis kapacitet! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: 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 betalte version!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Arbejdstegninger desc: Du kan nu kopiere og indsætte dele af din fabrik! Vælg et @@ -695,8 +695,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-de.yaml b/translations/base-de.yaml index 10adc5cc..1487517e 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -1,65 +1,50 @@ +--- steamPage: shortText: In shapez.io nutzt du die vorhandenen Ressourcen, um mit deinen Maschinen durch Kombination immer komplexere Formen zu erschaffen. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - In shapez.io musst du Maschinen geschickt verbinden, damit Formen automatisiert erstellt, bearbeitet und kombiniert werden. - - 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! - - 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]! - - Bald wirst du Farben mischen und deine Formen damit bemalen lassen. Staple dann deine fertigen Formen aufeinander und lasse so die wildesten Kreationen entstehen. - - 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! - - 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 - [*] Unbegrenzte Anzahl an Wegpunkten - [*] Unbegrenzte Anzahl an Speicherständen - [*] Zusätzliche Einstellungen - [*] Es kommen: Kabel & Energie! Voraussichtlich gegen Ende Juli 2020 - [*] Es kommen: Mehr Levels - [*] Unterstütze die Entwicklung von shapez.io ❤️ - [/list] - - [b]Geplante Funktionen[/b] - - Ich bin aktiv mit der Entwicklung beschäftigt und versuche jede Woche ein Update oder den aktuellen Stand der Entwicklung zu veröffentlichen. - - [list] - [*] Verschiedene Karten und Herausforderungen (z.B. Karten mit Hindernissen) - [*] Puzzle (Liefere die geforderte Form mit begrenztem Platz/limitierten Gebäuden) - [*] Eine Kampagne mit Gebäudekosten - [*] Konfigurierbarer Kartengenerator (Ändere die Grösse/Anzahl/Dichte der Ressourcenflecken, den Seed und vieles mehr) - [*] Mehr Formentypen - [*] Performanceverbesserungen (Das Spiel läuft bereits sehr gut!) - [*] Und vieles mehr! - [/list] - - [b]Das Spiel ist Open Source![/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]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]Quelltext (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Hilf beim Übersetzen[/url] - [/list] - discordLinkShort: Official Discord + discordLinkShort: Offizieller Discord + intro: >- + Du magst Automatisierungsspiele? Dann bist du hier genau richtig! + shapez.io ist ein ruhiges Spiel, in dem du Fabriken zur automatisierten Produktion von geometrischen Formen bauen musst. + Mit steigendem Level werden die Formen immer komplexer, und du musst dich auf der unendlich großen Karte ausbreiten. + Das ist noch nicht alles, denn du musst exponentiell mehr produzieren, um die Anforderungen zu erfüllen - Da hilft nur skalieren! + Während du am Anfang nur Formen verarbeitest, musst du diese später auch einfärben - Dafür musst du Farben extrahieren und mischen! + Der Kauf des Spiels auf Steam gibt dir Zugriff auf die Vollversion, aber du kannst auch zuerst die Demo auf shapez.io spielen und dich später entscheiden! + title_advantages: Vorteile der Vollversion + advantages: + - 12 Neue Level für insgesamt 26 Level + - 18 Neue Gebäude für eine komplett automatisierte Fabrik! + - 20 Upgrade-Stufen für viele Stunden Spielspaß + - Wires-Update für eine komplett neue Dimension! + - Dark-Mode! + - Unbegrenzte Speicherstände + - Unbegrenzte Wegpunkte + - Unterstütze mich! ❤️ + title_future: Geplante Inhalte + planned: + - Blaupausen-Bibliothek + - Errungenschaften auf Steam + - Puzzel-Modus + - Minimap + - Modunterstützung + - Sandkastenmodus + - ... und noch viel mehr! + title_open_source: Dieses Spiel ist quelloffen! + text_open_source: >- + Jeder kann etwas zum Spiel beitragen! Ich engagiere mich aktiv in der + Community und versuche alle Vorschläge zu berücksichtigen. + Die vollständige Roadmap findet ihr auf meinem Trello-Board! + title_links: Links + links: + discord: Offizieller Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Quellcode (GitHub) + translate: Hilf beim Übersetzen global: loading: Laden error: Fehler - thousandsDivider: . + thousandsDivider: "." decimalSeparator: "," suffix: thousands: k @@ -88,25 +73,25 @@ global: shift: UMSCH space: LEER demoBanners: - title: Demo Version - intro: Kauf die Standalone für alle Features! + title: Demo-Version + intro: Kauf die Vollversion für alle Features! mainMenu: play: Spielen - changelog: Änderungsprotokoll continue: Fortsetzen newGame: Neues Spiel + changelog: Änderungsprotokoll subreddit: Reddit importSavegame: Importieren - openSourceHint: Dieses Spiel ist Open Source! + openSourceHint: Dieses Spiel ist quelloffen! discordLink: Offizieller Discord Server helpTranslate: Hilf beim Übersetzen! madeBy: Ein Spiel von browserWarning: Sorry, aber das Spiel wird in deinem Browser langsam laufen! - Kaufe die Standalone-Version oder verwende Chrome für die beste + Kaufe die Vollversion oder verwende Google Chrome für die beste Erfahrung! savegameLevel: Level savegameLevelUnknown: Unbekanntes Level - savegameUnnamed: Unnamed + savegameUnnamed: Unbenannt dialogs: buttons: ok: OK @@ -115,32 +100,33 @@ dialogs: later: Später restart: Neustart reset: Zurücksetzen - getStandalone: Standalone Ansehen - deleteGame: Ich weiß, was ich tue! + getStandalone: Zur Vollversion + deleteGame: Ich weiß, was ich tue viewUpdate: Update anzeigen showUpgrades: Upgrades anzeigen showKeybindings: Kürzel anzeigen importSavegameError: - title: Importierfehler - text: "Fehler beim Importieren deines Spielstands:" + title: Importfehler + text: "Fehler beim Importieren deines Speicherstands:" importSavegameSuccess: - title: Spielstand importieren - text: Dein Spielstand wurde erfolgreich importiert. + title: Speicherstand importiert + text: Dein Speicherstand wurde erfolgreich importiert. gameLoadFailure: - title: Der Spielstand ist kaputt - text: Der Spielstand konnte nicht geladen werden. + title: Der Speicherstand ist kaputt + text: Der Speicherstand konnte nicht geladen werden. Sorry! confirmSavegameDelete: title: Löschen bestätigen - text: Bist du sicher, dass du den Spielstand löschen willst? + text: Bist du sicher, dass du folgenden Speicherstand löschen willst?

+ '' auf Level

Das kann nicht rückgängig gemacht werden! savegameDeletionError: - title: Löschen gescheitert - text: "Das Löschen des Spiels ist gescheitert:" + title: Löschen fehlgeschlagen + text: "Das Löschen des Speicherstands ist fehlgeschlagen:" restartRequired: - title: Neustart benötigt + title: Neustart nötig text: Du musst das Spiel neu starten, um die Einstellungen anzuwenden. editKeybinding: title: Tastenbelegung ändern - desc: Drücke die (Maus-)Taste, die du belegen möchtest, oder ESC um abzubrechen. + desc: Drücke die (Maus-)Taste, die du belegen möchtest, oder ESC zum Abbrechen. resetKeybindingsConfirmation: title: Tastenbelegung zurücksetzen desc: Dies wird alle deine Tastenbelegungen auf den Standard zurücksetzen. Bist @@ -150,31 +136,32 @@ dialogs: desc: Die Tastenbelegung wurde auf den Standard zurückgesetzt! featureRestriction: title: Demo-Version - desc: Du hast ein Feature gefunden (), welches nicht in der Demo - enthalten ist. Erwerbe die Standalone für das volle Erlebnis! + desc: Du hast ein Feature benutzt (), welches nicht in der Demo + enthalten ist. Erwerbe die Vollversion für das volle Erlebnis! oneSavegameLimit: - title: Begrenzte Spielstände - desc: Du kannst in der Demo nur einen Spielstand haben. Bitte lösche den - existierenden Spielstand oder hole dir die Standalone! + title: Begrenzte Speicherstände + desc: Du kannst in der Demo nur einen Speicherstand haben. Bitte lösche den + existierenden oder hole dir die Vollversion! updateSummary: title: Neues Update! desc: "Hier sind die Änderungen, seitdem du das letzte Mal gespielt hast:" upgradesIntroduction: - title: Upgrades Freischalten - desc: Viele deiner Formen können noch benutzt werden, um Upgrades freizuschalten + title: Upgrades freischalten + desc: >- + Viele deiner Formen können noch benutzt werden, um Upgrades freizuschalten - Zerstöre deine alten Fabriken nicht! Den Upgrade-Tab findest du oben rechts im Bildschirm. massDeleteConfirm: title: Löschen bestätigen - desc: Du löscht sehr viele Gebäude ( um genau zu sein)! Bist du dir + desc: Du löscht viele Gebäude ( um genau zu sein)! Bist du dir sicher? massCutConfirm: title: Ausschneiden bestätigen - desc: Du schneidest sehr viele Gebäude aus ( um genau zu sein)! Bist du + desc: Du schneidest viele Gebäude aus ( um genau zu sein)! Bist du dir sicher? massCutInsufficientConfirm: title: Ausschneiden bestätigen - desc: Du kannst dir das Einfügen nicht leisten! Bist du sicher, dass du trotzdem + desc: Du wirst dir das Einfügen nicht leisten können! Bist du sicher, dass du trotzdem Ausschneiden möchtest? blueprintsNotUnlocked: title: Noch nicht freigeschaltet @@ -191,32 +178,26 @@ dialogs: ALT: Invertiere die Platzierungsrichtung der Förderbänder.
createMarker: title: Neuer Marker - desc: Gib ihm einen griffigen Namen. Du kannst sogar die - Abkürzung einer Form eingeben (Diese kann hier generiert - werden). titleEdit: Marker bearbeiten + desc: Gib ihm einen griffigen Namen. Du kannst auch den Kurz-Code einer Form eingeben (Welchen du hier generieren kannst). + editSignal: + title: Signal setzen + descItems: "Wähle ein vordefiniertes Item:" + descShortKey: ... oder gib den Kurz-Code einer Form an (Welchen du hier generieren kannst). markerDemoLimit: - desc: Du kannst nur 2 Marker in der Demo benutzen. Hol dir die Standalone, um + desc: Du kannst nur 2 Marker in der Demo benutzen. Hole dir die Vollversion, um unendlich viele Marker zu erstellen! exportScreenshotWarning: title: Bildschirmfoto exportieren desc: 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! - editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Speicherstand umbenennen + desc: Hier kannst du deinen Speicherstand umbenennen. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Leistungswarnung + desc: Du hast eine Menge Gebäude platziert. Das hier ist nur ein freundlicher Hinweis, dass das Spiel nicht mit unendlich vielen Gebäuden umgehen kann. Halte deine Fabriken kompakt! ingame: keybindingsOverlay: moveMap: Bewegen @@ -247,9 +228,9 @@ ingame: cyan: Cyan white: Weiß black: Schwarz - uncolored: Farblos + uncolored: Grau buildingPlacement: - cycleBuildingVariants: Wechsle Variante + cycleBuildingVariants: Drücke zum Wechseln hotkeyLabel: "Taste: " infoTexts: speed: Geschw. @@ -267,7 +248,7 @@ ingame: notifications: newUpgrade: Ein neues Upgrade ist verfügbar! gameSaved: Dein Spiel wurde gespeichert. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Level abgeschlossen! shop: title: Upgrades buttonUnlock: Upgrade @@ -299,16 +280,14 @@ ingame: dataSources: stored: title: Gelagert - description: Zeigt die Menge an Formen, die im Hub gelagert sind. + description: Alle im Hub gelagerten Formen. produced: title: Produziert - description: Zeigt die Menge an Formen, die deine gesamte Fabrik produziert - (inkl. Zwischenprodukte). + description: Alle in deiner Fabrik hergestellten Formen inkl. Zwischenprodukte. delivered: - title: Abgeliefert - description: Zeigt die Menge an Formen, die im zentralen Gebäude abgeliefert - werden. - noShapesProduced: Es werden noch keine Formen produziert oder abgeliefert. + title: Geliefert + description: An den Hub gelieferte Formen. + noShapesProduced: Es werden noch keine Formen produziert oder geliefert. shapesDisplayUnits: second: / s minute: / m @@ -317,10 +296,6 @@ ingame: playtime: Spielzeit buildingsPlaced: Gebäude beltsPlaced: Förderbänder - buttons: - continue: Weiter - settings: Einstellungen - menu: Zurück zum Menü tutorialHints: title: Brauchst du Hilfe? showHint: Hinweis @@ -328,7 +303,7 @@ ingame: blueprintPlacer: cost: Kosten waypoints: - waypoints: Markierungen + waypoints: Marker hub: Hub description: Linksklick auf einen Marker, um dort hinzugelangen. Rechtsklick, um ihn zu löschen.

Drücke , um einen Marker aus @@ -340,53 +315,54 @@ ingame: empty: Leer copyKey: Schlüssel kopieren interactiveTutorial: - title: Tutorial + title: Einführung hints: 1_1_extractor: Platziere einen Extrahierer auf der Kreisform, um sie zu extrahieren! - 1_2_conveyor: "Verbinde den Extrahierer mit einem Förderband + 1_2_conveyor: "Verbinde den Extrahierer mit einem Fließband und schließe ihn am Hub an!

Tipp: Drücke und - ziehe das Förderband mit der Maus!" + ziehe das Fließband mit der Maus!" 1_3_expand: "Dies ist KEIN Idle-Game! Baue mehr Extrahierer und Förderbänder, um das Ziel schneller zu erreichen.

Tipp: Halte UMSCH, um mehrere Gebäude zu platzieren und nutze R, um sie zu rotieren." connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: Ein Extrahierer + n_miners: Extrahierer + limited_items: Begrenzt auf watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Demo-Version + desc: Klicke hier, um die Vorteile der Vollversion zu sehen! + get_on_steam: Zur Vollversion + standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Vorteile der Vollversion + no_thanks: Nein, danke! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Neue Level + desc: Für insgesamt 26 Level! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Neue Gebäude + desc: Automatisiere deine Fabrik! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Speicherstände + desc: So viele dein Herz begehrt! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Upgrade-Stufen + desc: Diese Demo hat nur 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Marker + desc: Verliere nie den Überblick! wires: title: Wires - desc: An entirely new dimension! + desc: Eine ganz neue Dimension! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Dark-Mode + desc: Werde nicht mehr geblendet! support: - title: Support me - desc: I develop it in my spare time! + title: Unterstütze Mich + desc: Ich entwickle in meiner Freizeit! shopUpgrades: belt: name: Förderbänder, Verteiler & Tunnel @@ -403,12 +379,12 @@ shopUpgrades: buildings: hub: deliver: Liefere - toUnlock: "Für folgende Belohnung:" + toUnlock: "und schalte frei:" levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: Ende der Demo belt: default: - name: Förderband + name: Fließband description: Transportiert Items. Halte und ziehe, um mehrere zu platzieren. miner: default: @@ -427,25 +403,41 @@ buildings: name: Tunnel Stufe II description: Erlaubt dir, Formen und Farbe unter Gebäuden und Förderbändern durchzuleiten. Höhere Reichweite. + balancer: + default: + name: Verteiler + description: Multifunktional - Verteilt alle Eingänge gleichmäßig auf die Ausgänge. + merger: + name: Kombinierer (kompakt) + description: Kombiniert zwei Fließbänder zu einem. + merger-inverse: + name: Kombinierer (kompakt) + description: Kombiniert zwei Fließbänder zu einem. + splitter: + name: Aufteiler (kompakt) + description: Teilt ein Fließband in zwei. + splitter-inverse: + name: Aufteiler (kompakt) + description: Teilt ein Fließband in zwei. cutter: default: name: Schneider description: Zerschneidet Formen von oben nach unten. Benutze oder zerstöre beide Hälften, sonst verstopft die Maschine! quad: - name: Schneider (4-fach) + name: Schneider (vierfach) description: Zerschneidet Formen in vier Teile. Benutze oder zerstöre alle Viertel, sonst verstopft die Maschine! rotater: default: - name: Rotierer (-90°) + name: Rotierer (90°) description: Rotiert Formen im Uhrzeigersinn um 90 Grad. ccw: - name: Rotierer (+90°) + name: Rotierer (-90°) description: Rotiert Formen gegen den Uhrzeigersinn um 90 Grad. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Rotierer (180°) + description: Rotiert formen um 180 Grad. stacker: default: name: Stapler @@ -465,143 +457,126 @@ buildings: description: Färbt die ganze Form aus dem linken Eingang mit der Farbe aus dem oberen Eingang. double: - name: Färber (2-fach) + name: Färber (zweifach) description: Färbt beide Formen aus dem linken Eingang mit der Farbe aus dem oberen Eingang. quad: - name: Färber (4-fach) - description: Erlaubt es, jedes einzelne Viertel einer Form beliebig einzufärben. + name: Färber (vierfach) + description: Erlaubt dir, jeden Quadranten der Form individuell zu färben. Nur + Quadranten mit einem wahren Signal auf der Wires-Ebene + werden angemalt! trash: default: name: Mülleimer description: Akzeptiert Formen und Farben aus jeder Richtung und zerstört sie. Für immer ... - wire: - default: - name: Stromkabel - description: Erlaubt dir Strom zu transportieren. - second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. - balancer: - default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. - merger: - name: Merger (compact) - description: Merges two conveyor belts into one. - merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. - splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. - splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Speicher + description: + Speichert überschüssige Gegenstände, bis zu einer bestimmten Kapazität. Priorisiert den linken + Ausgang und kann als Überlauftor verwendet werden. + wire: + default: + name: Signalkabel + description: Erlaubt den Transport von Signalen. Das sind Items, Farben oder Wahrheitswerte (1 oder 0). Unterschiedlich gefärbte Kabel verbinden sich nicht. + second: + name: Signalkabel + description: Erlaubt den Transport von Signalen. Das sind Items, Farben oder Wahrheitswerte (1 oder 0). Unterschiedlich gefärbte Kabel verbinden sich nicht. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Kabelkreuzung + description: Erschafft eine isolierte Kreuzung zweier Kabel. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Signalgeber + description: Sendet ein konstantes Signal. Du wählst zwischen Formen, Farben oder + Wahrheitswerten (1 oder 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Schalter + description: + Sendet einen Wahrheitswert (1 oder 0) auf der Wires-Ebene abhängig von seiner Stellung, + welcher dann z.B. zur Steuerung eines Filters verwendet werden kann. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: UND Gatter + description: Gibt eine "1" aus, wenn beide Eingänge wahr sind (wahr bedeutet Form, + Farbe oder "1"). not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NICHT Gatter + description: Gibt eine "1" aus, wenn der Eingang nicht wahr ist (wahr bedeutet Form, + Farbe oder "1"). xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: XOR Gatter + description: Gibt eine "1" aus, wenn einer der Eingänge wahr ist, aber nicht beide + (wahr bedeutet Form, Farbe oder "1"). or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: ODER Gatter + description: Gibt eine "1" aus, wenn einer der Eingänge wahr ist (wahr bedeutet Form, Farbe oder "1"). transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Leitet den unteren Eingang weiter, wenn der seitliche Eingang wahr ist (eine Form, + Farbe oder "1"). mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Leitet den unteren Eingang weiter, wenn der seitliche Eingang wahr ist (eine Form, + Farbe oder "1"). filter: default: name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + description: Verbinde ein Signal, um alle passenden Gegenstände nach oben zu leiten und die + restlichen nach rechts. Kann auch mit Wahrheitswerten gesteuert werden. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Anzeige + description: Verbinde ein Signal, um es auf der Anzeige darzustellen. Es kann eine Form, + Farbe oder ein Wahrheitswert sein. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Fließbandkontrolle + description: + Ermöglicht es, den durchschnittlichen Durchsatz des Fließbandes zu messen. Gibt den letzten + Gegenstand auf der Wires-Ebene aus (sobald freigeschaltet). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Formanalyse + description: Analysiert den oberen rechten Quadranten der untersten Schicht der Form + und gibt seine Form und Farbe zurück. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Vergleich + description: Gibt eine "1" zurück, wenn beide Signale genau gleich sind. Kann Formen, Farben und Wahrheitswerte vergleichen. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Virtueller Schneider + description: Schneidet die Form virtuell in zwei Hälften. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Virtueller Rotierer + description: Dreht die Form virtuell, sowohl im als auch gegen den Uhrzeigersinn. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Virtueller Entstapler + description: Extrahiert virtuell die oberste Ebene nach rechts und die + die restlichen Ebenen nach links. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Virtueller Stapler + description: Stapelt virtuell die rechte Form auf die linke. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Virtueller Färber + description: Färbt virtuell die Form vom unteren Eingang mit der Farbe aus dem rechten Eingang. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Item-Produzent + description: Nur im Sandkastenmodus verfügbar. Gibt das Signal aus der Wires-Ebene auf der regulären Ebene aus. storyRewards: reward_cutter_and_trash: title: Formen zerschneiden - desc: Du hast den Schneider freigeschaltet! Er zerschneidet - Formen von oben nach unten, unabhängig von ihrer - Orientierung.

Stelle sicher, dass du den Abfall loswirst, - sonst verstopft die Maschine! Dafür habe ich dir - extra einen Mülleimer freigeschaltet. + desc: + Du hast gerade den Schneider freigeschaltet, der Formen in zwei Hälften schneidet, + von oben nach unten, unabhängig der Orientierung!

Achte darauf, den Abfall loszuwerden, oder + er wird verstopfen und blockieren - Zu diesem Zweck habe ich dir den Mülleimer gegeben, der + alles entsorgt, was du hineintust! reward_rotater: title: Rotieren desc: Der Rotierer wurde freigeschaltet! Er rotiert Formen im @@ -623,12 +598,10 @@ storyRewards: sie nebeneinander, werden sie verschmolzen. Anderenfalls wird die rechte auf die linke Form gestapelt. - reward_splitter: - title: Verteiler/Kombinierer - desc: Der multifunktionale Verteiler wurde freigeschaltet! Er - ermöglicht die Konstruktion größerer Fabriken, indem er Items auf - mehrere Förderbänder verteilt oder diese - zusammenführt!

+ reward_balancer: + title: Verteiler + desc: Der multifunktionale Verteiler wurde freigeschaltet! Er kann + benutzt werden, um größere Fabriken zu bauen, indem Items auf Fließbänder aufgeteilt oder zusammengelegt werden! reward_tunnel: title: Tunnel desc: Der Tunnel wurde freigeschaltet! Du kannst Items nun @@ -641,76 +614,74 @@ storyRewards: verschiedene Varianten zuzugreifen. reward_miner_chainable: title: Extrahierer (Kette) - desc: Du hast den Extrahierer (Kette) freigeschaltet! Damit - können die Ressourcen an den Nächsten weitergegeben - werden, um Ressourcen effizienter zu extrahieren. + desc: >- + Du hast den Kettenextrahierer freigeschaltet! Er kann + seine Resourcen an andere Extrahierer weiterleiten!

+ PS: Die alten Extrahierer wurde jetzt in deiner Symbolleiste ersetzt! reward_underground_belt_tier_2: title: Tunnel Stufe II desc: Du hast eine neue Variante des Tunnels freigeschaltet! Dieser hat eine höhere Reichweite und du kannst beide Tunnel miteinander mischen. + reward_merger: + title: Kompakter Kombinierer + desc: Du hast eine kompakte Variante des Verteilers + freigeschaltet! Der Kombinierer vereint zwei Eingäge zu einem Ausgang. + reward_splitter: + title: Kompakter Aufteiler + desc: Du hast eine kompakte Variante des Verteilers + freigeschaltet! Der Aufteiler spaltet einen Eingang in zwei Aufgänge auf. + reward_belt_reader: + title: Fließbandkontrolle + desc: Du hast nun die Fließbandkontrolle freigeschaltet! Damit kannst du dir + den Durchsatz eines Fließbandes anzeigen lassen.

Wenn du Stromkabel freischaltest, + wird er um eine sehr nützliche Funktion ergänzt! reward_cutter_quad: title: Schneider (4-fach) desc: Du hast eine neue Variante des Schneiders freigeschaltet! - Damit kannst du Formen in alle vier Teile - zerschneiden. + Damit kannst du Formen in alle vier Teile zerschneiden. reward_painter_double: title: Färber (2-fach) desc: Du hast eine neue Variante des Färbers freigeschaltet! Hiermit kannst du zwei Formen auf einmal färben und verbrauchst nur eine Farbe. reward_storage: - title: Zwischenlager - desc: Du hast eine neue Variante des Mülleimers freigeschaltet! - Bis zu einer gewissen Kapazität können hier Items zwischengelagert - werden. - reward_freeplay: - title: Freies Spiel - desc: Du hast es geschafft! Du bist im freien Spiel angekommen! - Das heißt, dass abzuliefernde Formen jetzt zufällig generiert - werden! (Keine Sorge, für die Standaloneversion ist noch mehr - geplant!) + title: Lager + desc: Du hast das Lager freigeschaltet! Es erlaubt dir, + Gegenstände bis zu einer bestimmten Kapazität zu speichern!

+ Es priorisiert den linken Ausgang, also kannst du es auch als Überlauftor benutzen! reward_blueprints: - title: Blaupause + title: Blaupausen desc: Jetzt kannst du Teile deiner Fabrik kopieren und einfügen! Wähle ein Areal aus (Halte STRG und ziehe mit deiner Maus) und drücke 'C', um zu kopieren.

Einfügen ist - nicht kostenlos, du musst + nicht kostenlos! Du musst Blaupausenformen produzieren, um die Kopierkosten zu decken (Welche du gerade produziert hast)! - no_reward: - title: Nächstes Level - desc: "Dieses Level hat dir keine Belohnung gegeben, aber im Nächsten gibt es - eine!

PS: Denke daran, deine alten Fabriken nicht zu - zerstören - Du wirst sie später alle noch brauchen, - um Upgrades freizuschalten!" - no_reward_freeplay: - title: Nächstes Level - desc: Herzlichen Glückwunsch! Apropos, in der Standalone-Version ist noch vieles - mehr geplant! - reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

- reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! - reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Rotierer (180°) + desc: Du hast eine weitere Variante des Rotierers freigeschaltet! Mit ihm + kannst du Formen um 180° drehen (Überraschung! :D). + reward_wires_painter_and_levers: + title: Wires & Quad Painter + desc: "You just unlocked the Wires Layer: It is a separate + layer on top of the regular layer and introduces a lot of new + mechanics!

For the beginning I unlocked you the Quad + Painter - Connect the slots you would like to paint with on + the wires layer!

To switch to the wires layer, press + E." + reward_filter: + title: Item Filter + desc: You unlocked the Item Filter! It will route items either + to the top or the right output depending on whether they match the + signal from the wires layer or not.

You can also pass in a + boolean signal (1 / 0) to entirely activate or disable it. reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires @@ -734,35 +705,39 @@ storyRewards: shape requested by the HUB (I recommend to try it!).

- Build something cool with wires.

- Continue to play regulary.

Whatever you choose, remember to have fun! - reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." - reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + no_reward: + title: Nächstes Level + desc: "Dieses Level hat dir keine Belohnung gegeben, aber im Nächsten gibt es + eine!

PS: Denke daran, deine alten Fabriken nicht zu + zerstören - Du wirst sie später alle noch brauchen, + um Upgrades freizuschalten!" + no_reward_freeplay: + title: Nächstes Level + desc: Du hast das nächste Level freigeschaltet! + reward_freeplay: + title: Freies Spiel + desc: Du hast es geschafft! Du hast den Freispiel-Modus freigeschaltet! Das bedeutet, + dass die abzuliefernden Formen jetzt zufällig erzeugt werden!

+ Da der Hub ab jetzt einen bestimmten Durchsatz benötigt, empfehle ich dringend, eine Maschine zu bauen, + die automatisch die gewünschte Form liefert!

+ Der Hub gibt die gewünschte Form auf der Wires-Ebene aus. Also musst du sie nur analysieren und + basierend darauf automatisch deine Fabrik konfigurieren. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Ende der Demo + desc: Du bist am Ende der Demo angekommen! settings: title: Einstellungen categories: general: Allgemein userInterface: Benutzeroberfläche advanced: Erweitert - performance: Performance + performance: Leistung versionBadges: dev: Entwicklung staging: Beta prod: Produktion buildDate: Gebaut am + rangeSliderPercentage: % labels: uiScale: title: HUD Größe @@ -878,46 +853,44 @@ settings: description: Deaktiviert die Warnung, welche beim Löschen und Ausschneiden von mehr als 100 Feldern angezeigt wird. lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Minimalistische Ressourcen + description: Vereinfacht die Darstellung der Ressourcen auf der hereingezoomten Karte + zur Verbesserung der Leistung. Die Darstellung ist übersichtlicher, also probiere + es ruhig aus! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Gitter deaktivieren + description: Das Deaktivieren des Gitters kann deine Leistung verbessern. Außerdem vereinfacht + es die Darstellung! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Abwählen mit Rechtsklick + description: Standardmäßig eingeschaltet, wählt es das aktuelle, zur Platzierung ausgewählte Gebäude + ab, wenn du die rechte Masutaste drückst. Wenn du es abschaltest, kannst du mit der rechten + Maustaste Gebäude löschen, während du im Platzierungsmodus bist. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Niedrige Texturqualität (Unschön) + description: Das Spiel verwendet eine niedrigere Auflösung bei den Texturen. + Allerdings leidet die Grafik des Spiels sehr darunter! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Chunk-Ränder anzeigen + description: Das Spiel ist in Blöcke (Chunks) aus je 16x16 Feldern aufgeteilt. Diese Einstellung + lässt dich die Grenzen zwischen den Chunks anzeigen. + pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Automatisch Extrahierer auswählen + description: Standardmäßig eingeschaltet, wählst du automatisch den Extrahierer, wenn du mit + der Pipette auf einen Ressourcenfleck zeigst simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Minimalistische Förderbänder (Unschön) + description: Zur Verbesserung der Leistung werden die Items auf Förderbändern nur angezeigt, + wenn du deine Maus darüber bewegst. Hier leidet sowohl die Grafik, also auch dein + Spielerlebnis. Benutze die Funktion nur, wenn du auf die Leistung wirklich angewiesen bist! enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. - rangeSliderPercentage: % + title: Scrollen am Bildschirmrand + description: Damit kannst du dich über die Karte bewegen, indem du deinen Mauszeiger am + Bildschirmrand platzierst. Die Geschwindigkeit stimmt dabei mit den Tasten überein. keybindings: title: Tastenbelegung - hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene - Platzierungsoptionen." + hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene Platzierungsoptionen." resetKeybindings: Tastenbelegung zurücksetzen categoryLabels: general: Anwendung @@ -938,7 +911,7 @@ keybindings: centerMap: Karte zentrieren mapZoomIn: Reinzoomen mapZoomOut: Rauszoomen - createMarker: Markierung erstellen + createMarker: Marker erstellen menuOpenShop: Upgrades menuOpenStats: Statistiken menuClose: Menü schließen @@ -946,61 +919,59 @@ keybindings: toggleFPSInfo: FPS und Debug-Info an/aus switchLayers: Ebenen wechseln exportScreenshot: Ganze Fabrik als Foto exportieren - belt: Förderband + belt: Fließband + balancer: Verteiler underground_belt: Tunnel miner: Extrahierer cutter: Schneider - rotater: Rotierer (-90°) + rotater: Rotierer (90°) stacker: Stapler mixer: Farbmischer painter: Färber trash: Mülleimer + storage: Lager + wire: Stromkabel + constant_signal: Signalgeber + logic_gate: Logikgatter + lever: Schalter (regulär) + filter: Filter + wire_tunnel: Kabelkreuzung + display: Anzeige + reader: Fließbandkontrolle + virtual_processor: Virtueller Schneider + transistor: Transistor + analyzer: Formanalyse + comparator: Vergleich + item_producer: Item-Produzent (Sandkastenmodus) pipette: Pipette rotateWhilePlacing: Rotieren rotateInverseModifier: "Modifikator: stattdessen gegen den UZS rotieren" cycleBuildingVariants: Nächste Variante auswählen - confirmMassDelete: Massenlöschung bestätigen + confirmMassDelete: Löschen bestätigen pasteLastBlueprint: Letzte Blaupause einfügen cycleBuildings: Nächstes Gebäude auswählen lockBeltDirection: Bandplaner aktivieren switchDirectionLockSide: "Bandplaner: Seite wechseln" + copyWireValue: "Kabel: Wert unter Mauszeiger kopieren" massSelectStart: Halten und ziehen zum Beginnen massSelectSelectMultiple: Mehrere Areale markieren massSelectCopy: Areal kopieren massSelectCut: Areal ausschneiden placementDisableAutoOrientation: Automatische Orientierung deaktivieren placeMultiple: Im Platziermodus bleiben - placeInverse: Automatische Förderbandorientierung invertieren - wire: Stromkabel - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + placeInverse: Automatische Fließbandorientierung invertieren about: title: Über dieses Spiel body: >- - Dieses Spiel hat einen offenen Quellcode (Open Source) und wurde von Tobias Springer (das bin ich!) entwickelt.

- Wenn du etwas zum Spiel beitragen möchtest, dann schaue dir shapez.io auf GitHub an.

- - Das Spiel wurde erst durch die großartige Discord-Community um meine Spiele möglich gemacht. Komm doch einfach mal auf dem Discord-Server vorbei!

- + Das Spiel wurde erst durch die großartige Discord-Community um meine Spiele möglich gemacht. + Komm doch einfach mal auf dem Discord-Server vorbei!

Der Soundtrack wurde von Peppsen komponiert! Klasse Typ.

- - Abschließend möchte ich meinem Kumpel Niklas danken! Ohne unsere etlichen gemeinsamen Stunden in Factorio wäre dieses Projekt nie zustande gekommen. + Abschließend möchte ich meinem Kumpel Niklas danken! + Ohne unsere etlichen gemeinsamen Stunden in Factorio wäre dieses Projekt nie zustande gekommen. changelog: title: Änderungen demo: @@ -1012,63 +983,59 @@ demo: exportingBase: Ganze Fabrik als Foto exportieren settingNotAvailable: Nicht verfügbar in der Demo. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Der Hub akzeptiert alle Formen, nicht nur die aktuell geforderten! + - Stelle sicher, dass deine Fabriken modular sind. Es zahlt sich irgendwann aus! + - Baue nicht zu nah am Hub, sonst entsteht ein riesiges Chaos! + - Wenn der Stapler nicht die richtige Form ausspuckt, wechsle doch mal die Eingänge. + - Du kannst mit R die Richtung des Bandplaners umkehren. + - Halte STRG, um die Förderbänder ohne automatische Orientierung zu platzieren. + - Die Verhältnisse der Maschinen bleiben gleich, wenn du die Upgrades gleichmäßig kaufst. + - Serielle Ausführung ist effizienter als parallele. + - Für viele Gebäude wirst du im Spielverlauf neue Varianten freischalten! + - Du kanst T drücken, um auf andere Varianten des Gebäudes zu wechseln. + - Symmetrie ist der Schlüssel! + - Du kannst verschiedene Arten von Tunneln miteinander verweben. + - Versuche kompakte Fabriken zu bauen. Es zahlt sich aus! + - Der Färber hat eine spiegelverkehrte Variante, die du mit T auswählen kannst. + - Das richtige Verhältnis der Gebäude maximiert die Effizienz. + - Auf der gleichen Upgrade-Stufe genügen 5 Extrahierer für ein ganzes Fließband. + - Vergiss die Tunnel nicht! + - Für maximale Effizienz musst du die Items nicht gleichmässig aufteilen. + - Das Halten von UMSCH aktiviert den Bandplaner, der lange Förderbänder ganz einfach platziert. + - Schneider teilen die Form immer vertikal, unabhängig von der Orientierung. + - Weiß erhälst du aus der Kombination aller 3 Grundfarben. + - Das Lager gibt Items immer zuerst am linken Ausgang ab. + - Es lohnt sich, Zeit in den Bau von wiederverwendbaren Designs zu stecken! + - Das Halten von STRG ermöglicht dir, mehrere Gebäude zu platzieren. + - Du kanst ALT gedrückt halten, um die Richtung der Förderbänder umzukehren. + - Effizienz ist entscheidend! + - Abbaubare Formen werden komplexer, je weiter sie vom Hub entfernt sind. + - Gebäude haben eine limitierte Geschwindigkeit. Teile die Last zwischen mehreren auf. + - Benutze Aufteiler, um deine Effizienz zu maximieren. + - Organisation ist wichtig! Verheddere dich nicht in einem Gewirr aus Förderbändern. + - Plane vorher und lasse dir Platz für Reserven, oder es gibt ein riesiges Chaos! + - Lösche deine alten Fabriken nicht! Du benötigst sie um Upgrades freizuschalten. + - Versuche Level 20 alleine zu meistern, bevor du nach Hilfe suchst! + - Mache es dir nicht zu kompliziert! Auch mit einfachen Konzepten kommst du hier sehr weit. + - Manche Fabriken musst du später wiederverwenden. Also baue sie so, damit du genau das kannst. + - Manchmal kannst du die gewünschte Form auf der Karte finden, ohne sie herstellen zu müssen. + - Vollständige Windmühlen werden nicht natürlich generiert. + - Färbe deine Formen vor dem Schneiden! Das geht viel schneller. + - Mit Modulen wird Platz nur noch zum Begriff; eine Sorge für Sterbliche. + - Stelle deinen Nachschub an Blaupausen sicher. Ohne sie sind Module nutzlos. + - Schau dir den Farbmischer genauer an und du wirst deine Antwort finden. + - Benutze STRG + Rechtsklick, um einen Bereich zu selektieren. + - Zu nahe am Hub zu bauen, kann späteren Projekten im Weg stehen. + - Die Reißzwecke neben Formen in der Upgrade-Liste lässt sie dich am Bildschirm anheften. + - Mische alle drei Grundfarben, um Weiß zu erhalten! + - Du hast eine unendlich grosse Karte, nutze den Platz und expandiere! + - Probier auch mal Factorio! Es ist mein Lieblingsspiel. + - Der Vierfachschneider schneidet im Uhrzeigersinn von oben rechts beginnend! + - Du kannst deine Speicherstände im Hauptmenü herunterladen! + - Diese Spiel hat viele nützliche Tastenbelegungen! Schau sie dir in den Einstellungen an. + - Dieses Spiel hat eine Menge Einstellungen, schaue sie dir einmal an! + - Die Richtung zu deinem Hub ist oben rechts mit einer kleinen Kompassnadel markiert! + - Um alle Förderbänder zu leeren, schneide den Bereich aus und füge ihn auf der selben Position wieder ein. + - Drücke F4 um deine FPS und Tickrate anzuzeigen. + - Drücke doppelt F4 um den Standort des Mauszeigers und der Kamera zu bestimmen. + - Du kannst die angehefteten Formen am linken Rand wieder entfernen. diff --git a/translations/base-el.yaml b/translations/base-el.yaml index 20835f77..a9b567ec 100644 --- a/translations/base-el.yaml +++ b/translations/base-el.yaml @@ -2,59 +2,51 @@ steamPage: shortText: Στο shapez.io χτήζεις εργοστάσια για να αυτοματοποιήσεις την δημιουργία και τον συνδιασμό σχημάτων αυξανόμενης πολυπλοκότητας σε έναν ατέλειωτο χάρτη. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - Στο shapez.io χτήζεις εργοστάσια για να αυτοματοποιήσεις την δημιουργία και τον συνδιασμό σχημάτων αυξανόμενης πολυπλοκότητας σε έναν ατέλειωτο χάρτη. Όταν παραδώσεις τα απαιτούμενα σχήματα, θα προχωρήσεις στο παιχνίδι και θα ξεκλειδώσεις αναβαθμήσεις για να επιταχύνεις το εργοστάσιό σου. - - Επειδή η ζήτηση για σχήματα αυξάνεται συνεχώς, θα πρέπει να επεκτείνεις το εργοστάσιό σου για να την ικανοποιήσεις - Μήν ξεχάσεις, για να βρείς όλους τους πόρους που χρειάζεσαι θα πρέπει να εξαπλωθείς στον [b]άτελείωτο χάρτη[/b]! - - Σύντομα θα πρέπει να αναμείξεις χρώματα και να βάψεις σχήματα - Ανάμειξε κόκκινο, πράσινο και μπλέ για να φτιάξεις διαφορετικά χρώματα και να βάψεις σχήματα ώστε να ικανοποιήσεις την ζήτηση. - - Το παιχνίδι έχει 18 βαθμιαία επίπεδα (που ήδη θα σε απασχολήσουν για ώρες!) και συνεχίζω να προσθέτω περιεχόμενο - Έχω ακόμα πολλά σχέδια! - - Αγόράζοντας το παιχνίδι λαμβάνεις την αυτόνομη έκδοση (standalone) με πολλές επιπλέον δυνατότητες, καθώς και πρόσβαση σε νέες δυνατότητες που ακόμα αναπτύσσονται. - - [b]Πλεονεκτήματα Αυτόνομης Έκδοσης[/b] - - [list] - [*] Σκοτεινή λειτουργία - [*] Απεριόριστα σημεία γρήγορης κίνησης της κάμερας στον χάρτη - [*] Απεριόριστα αποθηκευμένα παιχνίδια - [*] Πρόσθετες ρυθμίσεις - [*] Στο κοντινό μέλλον: Καλώδια και ενέργεια! Aναμένεται (περίπου) τέλος Ιουλίου 2020. - [*] Στο κοντινό μέλλον: Περισσότερα επίπεδα - [*] Μου επιτρέπει να αναπτήξω περεταίρω το shapez.io ❤️ - [/list] - - [b]Μελλοντικές ενημερώσεις[/b] - - Ενημερώνω το παιχνίδι πολύ συχνά και προσπαθώ να προωγώ ενημερώσεις σχεδόν κάθε εβδομάδα! - - [list] - [*] Διαφορετικοί χάρτες και προκλήσεις (π.χ. χάρτες με εμπόδια) - [*] Πάζλ (Παράδωσε το αιτούμενο σχήμα με περιορισμένο χώρο / κτήρια) - [*] Ένα σενάριο όπου τα κτήρια έχουν κόστος - [*] Διαμορφώσιμη δημιουργία χάρτη (Με επιλογές για το μέγεθος και την πυκνότητα των πόρων και άλλα) - [*] Επιπλέον σχήματα! - [*] Βελτιώσεις απόδοσης (Το παιχνίδι λειτουργεί ήδη πολύ καλά!) - [*] Και πολλά άλλα! - [/list] - - [b]Αυτό το παιχνίδι είναι ανοιχτού κώδικα![/b] - - Όλοι μπορούν να συνεισφέρουν, συμμετέχω ενεργά στην κοινότητα και προσπαθώ να εξετάσω όλες τις προτάσεις και να λάβω υπόψη τα σχόλια όπου είναι δυνατόν. Δείτε το trello board μου για τον πλήρη χάρτη πορείας! - - [b]Σύνδεσμοι[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Επίσημο Discord[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Χάρτης πορείας[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Πηγαίος κώδικας (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Βοήθησε με μεταφράσεις[/url] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Φόρτωση error: Σφάλμα @@ -130,7 +122,9 @@ dialogs: text: "Η φώρτοση του αποθηκευμένου παιχνιδιού ήταν αποτυχής:" confirmSavegameDelete: title: Επιβεβαίωση διαγραφής - text: Είσαι βέβαιος/η ότι θέλεις να διαγράψεις το παιχνίδι; + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Αποτυχία διαγραφής text: "Η διαγραφή του αποθηκευμένου παιχνιδιού ήταν αποτυχής:" @@ -150,9 +144,9 @@ dialogs: desc: Οι συνδιασμών πλήκτρων επαναφέρθηκαν στις προεπιλεγμένες τιμές τους! featureRestriction: title: Έκδοση Demo - desc: Προσπάθησες να χρησιμοποιήσεις μία δυνατότητα που δεν είναι διαθέσιμη στην - έκδοση demo. Αποκτήστε την αυτόνομη έκδοση για την ολοκληρομένη - εμπειρία! + 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: Περιορισμένα αποθηκευμένα παιχνίδια desc: Στην demo έκδοση μπορείς να έχεις μόνο ένα αποθηκευμένο παιχνίδι. Παρακαλώ @@ -187,9 +181,8 @@ dialogs: τον προσανατολισμό των τοποθετούμενων ιμάντων.
" createMarker: title: Νέο Σημάδι - desc: Δώσ' του ένα όνομα με νόημα. Μπορείς επίσης να χρησημοποιήσεις και τον - σύντομο κώδικα ενός σχήματος (τον οποίο μπορείς να - βρείς εδώ) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Επεξεργασία Σημαδιού markerDemoLimit: desc: Στην έκδωση demo μπορείς να βάλεις μέχρι δύο σημάδια στον χάρτη. @@ -469,8 +462,9 @@ buildings: την επάνω είσοδο. quad: name: Βαφέας (Τετάρτων) - description: Επιτρέπει να χρωματίσει κάθε τεταρτημόριο του σχήματος με - διαφορετικό χρώμα. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Βαφέας description: Χρωματίζει ολόκληρο το σχήμα στην αριστερή είσοδο με το χρώμα από @@ -605,12 +599,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Κοπή σχημάτων - desc: Μόλις ξεκλείδωσες τον κόπτη - κόβει σχήματα κατά το ήμισυ - από πάνω προς τα κάτω ανεξάρτητα από τον - προσανατολισμό του!

Φρόντισε να καταστρέψεις κομμάτια που δεω - χρησημοποιείς αλλιώς η λειτουργία θα σταματήσει - - Για το σκοπό αυτό σου έδωσα τον κάδο απορριμμάτων, ο οποίος - καταστρέφει ό,τι είδη μεταφερθούν εκεί! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Περιστροφή desc: Ο Περιστροφέας ξεκλειδώθηκε! Το κτήριο αυτό περιστρέφει @@ -636,10 +630,9 @@ storyRewards: αριστερής! reward_splitter: title: Διαχωρισμός/Συγχώνευση - desc: Ο πολυλειτουργικός Ισορροπηστής είναι πλέον διαθέσιμος - - Μπορεί να χρησιμοποιηθεί για την κατασκευή μεγαλύτερων εργοστασίων - με διαχωρισμό και συγχώνευση ειδών σε/από πολλούς - μεταφορικούς ιμάντες!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Σήραγγα desc: Το Σήραγγα είναι πλέον διαθέσιμο - Τώρα μπορείς να @@ -652,10 +645,10 @@ storyRewards: παραλλαγές του! reward_miner_chainable: title: Αλυσιδωτός Αποσπαστής - desc: Ξεκλείδωσες τον Αλυσιδωτός Αποσπαστής! Μπορεί να - προωθήσει τους αποσπασμένους πόρους σε άλλους - αποσπαστές, ώστε να μπορείτε να αποσπάσεις πιο αποτελεσματικά - πόρους! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Σήραγγα Βαθμίδα II desc: Ξεκλείδωσες μια νέα παραλλαγή της Σήραγγας - Καλύπτει @@ -672,14 +665,18 @@ storyRewards: ταυτόχρονα, καταναλώνοντας μόνο ένα χρώμα αντί για δύο! reward_storage: title: Αποθηκευτικός χώρος - desc: Ξεκλείδωσες μια παραλλαγή του Κάδου Απορριμμάτων - - Επιτρέπει την αποθήκευση ειδών έως μια δεδομένη χωρητικότητα! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Ελεύθερο παιχνίδι - desc: Τα κατάφερες! Ξεκλείδωσες την λειτουργία ελεύθερου - παιχνιδιού! Από εδώ και πέρα τα σχήματα δημιουργούνται - τυχαία! (Μην ανυσηχείς, περισσότερο περιεχόμενο έρχεται σύντομα στην - αυτόνομη έκδοση!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Σχεδιαγράμματα desc: Μπορείς πλέον να κάνεις αντιγραφή και επικόλληση στα μέρη @@ -720,8 +717,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-en.yaml b/translations/base-en.yaml index d69c4c45..df1f5b25 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -27,65 +27,50 @@ steamPage: # This is the text shown above the Discord link discordLinkShort: Official 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: - # - Do not translate the first line (This is the gif image at the start of the store) - # - Please keep the markup (Stuff like [b], [list] etc) in the same format - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + intro: >- + You like automation games? Then you are in the right place! - shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map. + shapez.io is a relaxed game in which you have to build factories for the automated production of geometric shapes. As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - Upon delivering the requested shapes you'll progress within the game and unlock upgrades to speed up your factory. + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! While you only have to process shapes at the beginning, you will later have to color them - by extracting and mixing colors! - 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]! + Buying the game on Steam gives you access to the full version, but you can also play a demo at shapez.io first and decide later! - 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. + title_advantages: Standalone Advantages + advantages: + - 12 New Levels for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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) - [*] 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] - - [b]This game is open source![/b] + title_future: Planned Content + planned: + - Blueprint Library + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + text_open_source: >- 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] + title_links: Links - [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] - [/list] + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate global: loading: Loading @@ -137,7 +122,7 @@ 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! + Get the full game to unlock all features and content! mainMenu: play: Play @@ -153,7 +138,7 @@ mainMenu: # 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 Google Chrome for the full experience. + Sorry, but the game is known to run slowly on your browser! Get the standalone version or download Google Chrome for the full experience. savegameLevel: Level savegameLevelUnknown: Unknown Level @@ -215,7 +200,7 @@ dialogs: keybindingsResetOk: title: Keybindings reset - desc: The keybindings have been reset to their respective defaults! + desc: All keybindings have been reset to their defaults values! featureRestriction: title: Demo Version @@ -233,7 +218,7 @@ dialogs: upgradesIntroduction: title: Unlock Upgrades desc: >- - All shapes you produce can be used to unlock upgrades - Don't destroy your old factories! + 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: @@ -281,16 +266,12 @@ dialogs: 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! + desc: You requested to export your base as a screenshot. Please note that this will be quite slow for a bigger base and could potentially crash your game! renameSavegame: title: Rename Savegame desc: You can rename your savegame here. - entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that the game can not handle an endless count of buildings - So try to keep your factories compact! - ingame: # This is shown in the top left corner and displays useful keybindings in # every situation @@ -370,10 +351,6 @@ ingame: # Gets replaced to e.g. "Tier IX" tier: Tier - # The roman number for each tier - tierLabels: - [I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII, XIII, XIV, XV, XVI, XVII, XVIII, XIX, XX] - maximumLevel: MAXIMUM LEVEL (Speed x) # The "Statistics" window @@ -382,13 +359,13 @@ ingame: dataSources: stored: title: Stored - description: Displaying amount of stored shapes in your central building. + description: All shapes stored within the Hub. produced: title: Produced - description: Displaying all shapes your whole factory produces, including intermediate products. + description: All shapes produced within your factory, including intermediate products. delivered: title: Delivered - description: Displaying shapes which are delivered to your central building. + description: Shapes which are being delivered to the Hub. noShapesProduced: No shapes have been produced so far. # Displays the shapes per second, e.g. '523 / s' @@ -400,15 +377,9 @@ ingame: # Settings menu, when you press "ESC" settingsMenu: playtime: Playtime - buildingsPlaced: Buildings beltsPlaced: Belts - buttons: - continue: Continue - settings: Settings - menu: Menu - # Bottom left tutorial hints tutorialHints: title: Need help? @@ -445,15 +416,15 @@ ingame: # Connected miners connectedMiners: - one_miner: 1 Miner - n_miners: Miners + one_miner: 1 Extractor + n_miners: Extractors limited_items: Limited to # Pops up in the demo every few minutes watermark: title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + desc: Click here to see the advantages of the standalone version! + get_on_steam: Get on Steam standaloneAdvantages: title: Get the full version! @@ -565,10 +536,10 @@ buildings: 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! + 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 clog and 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! + description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other parts or it will clog and stall! rotater: default: @@ -584,7 +555,7 @@ buildings: stacker: default: name: &stacker Stacker - description: Combines both items side by side. If this is not possible, they are stacked on top of each other. + description: Combines its inputs, on the same layer if possible, otherwise the right input is stacked on top of the left input. mixer: default: @@ -621,7 +592,7 @@ buildings: wire: default: name: &wire Wire - description: &wire_desc Transfers signals, which can be items, colors or booleans (1 / 0). Different colored wires do not connect. + description: &wire_desc Transfers signals, which can be items, colours or booleans (1 or 0). Differently-coloured wires do not connect to each other. second: name: *wire @@ -630,17 +601,17 @@ buildings: wire_tunnel: default: name: &wire_tunnel Wire Crossing - description: Allows to cross two wires without connecting them. + description: Allows two wires to cross without connecting to each other. constant_signal: default: name: &constant_signal Constant Signal - description: Emits a constant signal, which can be either a shape, color or boolean (1 / 0). + description: Emits a constant signal, which can be either a shape, color or boolean (1 or 0). lever: default: name: &lever Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, which can then be used to control for example an item filter. + description: Can be toggled to emit a boolean signal (1 or 0) on the wires layer, which can then be used to control components, for example an item filter. logic_gate: default: @@ -688,7 +659,7 @@ buildings: comparator: default: name: &comparator Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare shapes, items and booleans. + description: Returns boolean "1" if both signals are exactly equal. Can compare shapes, colors and booleans. virtual_processor: default: @@ -709,7 +680,7 @@ buildings: painter: name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on the right input. + description: Virtually paints the shape from the bottom input with the color on the right input. item_producer: default: @@ -720,7 +691,7 @@ 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 in 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 have given you the trash, which destroys everything you put into it! + desc: You just unlocked the cutter, which cuts shapes in half from top to bottom regardless of its orientation!

Be sure to get rid of the waste, or otherwise it will clog and stall - For this purpose I have given you the trash, which destroys everything you put into it! reward_rotater: title: Rotating @@ -741,7 +712,7 @@ storyRewards: reward_balancer: title: Balancer - desc: The multifunctional balancer has been unlocked - It can be used to build bigger factories by splitting and merging items onto multiple belts!

+ desc: The multifunctional balancer has been unlocked - It can be used to build bigger factories by splitting and merging items onto multiple belts! reward_tunnel: title: Tunnel @@ -811,7 +782,7 @@ storyRewards: Item Filter desc: >- You unlocked the Item Filter! It will route items either to the top or the right output depending on whether they match the signal from the wires layer or not.

- You can also pass in a boolean signal (1 / 0) to entirely activate or disable it. + You can also pass in a boolean signal (1 or 0) to entirely activate or disable it. reward_display: title: Display @@ -823,13 +794,13 @@ storyRewards: title: Constant Signal desc: >- You unlocked the constant signal building on the wires layer! This is useful to connect it to item filters for example.

- The constant signal can emit a shape, color or boolean (1 / 0). + The constant signal can emit a shape, color or boolean (1 or 0). reward_logic_gates: title: Logic Gates desc: >- You unlocked logic gates! You don't have to be excited about this, but it's actually super cool!

- With those gates you can now compute AND, OR, XOR and NOT operations.

+ With logic gates you can now compute AND, OR, XOR and NOT operations.

As a bonus on top I also just gave you a transistor! reward_virtual_processing: @@ -981,7 +952,7 @@ settings: alwaysMultiplace: title: Multiplace description: >- - If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. + If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to constantly holding SHIFT. offerHints: title: Hints & Tutorials @@ -1011,7 +982,7 @@ settings: disableCutDeleteWarnings: title: Disable Cut/Delete Warnings description: >- - Disables the warning dialogs brought up when cutting/deleting more than 100 entities. + Disables the warning dialogues brought up when cutting/deleting more than 100 entities. lowQualityMapResources: title: Low Quality Map Resources @@ -1040,9 +1011,9 @@ settings: The game is divided into chunks of 16x16 tiles, if this setting is enabled the borders of each chunk are displayed. pickMinerOnPatch: - title: Pick miner on resource patch + title: Select extractor on resource patch description: >- - Enabled by default, selects the miner if you use the pipette when hovering a resource patch. + Enabled by default, selects the extractor if you use the pipette when hovering a resource patch. simplifiedBelts: title: Simplified Belts (Ugly) @@ -1050,9 +1021,14 @@ settings: Does not render belt items except when hovering the belt to save performance. I do not recommend to play with this setting if you do not absolutely need the performance. enableMousePan: - title: Enable Mouse Pan + title: Screen Edge Panning description: >- - Allows to move the map by moving the cursor to the edges of the screen. The speed depends on the Movement Speed setting. + Allows panning the map by moving the cursor to the edges of the screen. The scroll speed depends on the Movement Speed setting. + + zoomToCursor: + title: Zoom towards Cursor + description: >- + If activated the zoom will happen in the direction of your mouse position, otherwise in the middle of the screen. keybindings: title: Keybindings @@ -1190,7 +1166,7 @@ tips: - Holding SHIFT will activate the belt planner, letting you place long lines of belts easily. - Cutters always cut vertically, regardless of their orientation. - To get white mix all three colors. - - The storage buffer priorities the first output. + - The storage buffer prioritises the left output. - Invest time to build repeatable designs - it's worth it! - Holding CTRL allows to place multiple buildings. - You can hold ALT to invert the direction of placed belts. @@ -1205,15 +1181,15 @@ tips: - Don't complicate things, try to stay simple and you'll go far. - You may need to re-use factories later in the game. Plan your factories to be re-usable. - Sometimes, you can find a needed shape in the map without creating it with stackers. - - Full windmills / pinwheels can never spawn naturally. + - Full windmills/pinwheels can never spawn naturally. - Color your shapes before cutting for maximum efficiency. - With modules, space is merely a perception; a concern for mortal men. - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. + - Have a closer look at the color mixer, and your questions will be answered. - Use CTRL + Click to select an area. - Building too close to the hub can get in the way of later projects. - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! + - Mix all three primary colors to make white! - You have an infinite map, don't cramp your factory, expand! - Also try Factorio! It's my favorite game. - The quad cutter cuts clockwise starting from the top right! diff --git a/translations/base-es.yaml b/translations/base-es.yaml index 4f065668..e6833bcd 100644 --- a/translations/base-es.yaml +++ b/translations/base-es.yaml @@ -2,59 +2,51 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Discord oficial + intro: >- + Shapez.io es un juego tranquilo en el que tienes que construir fábricas para la + producción automatizada de formas geométricas. - shapez.io es un juego basado en la construcción de fábricas para automatizar la creación y combinación de figuras en un mapa que se expande infinitamente. Entrega las figuras requeridas para progresar y desbloquear mejoras para aumentar la velocidad de tu fábrica. + A medida que el nivel aumenta, las formas se vuelven más y más complejas, y tienes que extenderte en un mapa infinito. - Al aumentar la demanda, necesitarás escalar tu fábrica para ajustarte a las necesidades - ¡No te olvides de los recursos, necesitarás expandirte en el [b]mapa infinito[/b]! + Y por si fuera poco, también tienes que producir exponencialmente más para satisfacer las demandas - ¡lo único que ayuda es escalar! - Después necesitarás mezclar colores para pintar las figuras - Combina recursos de colores rojo, verde y azul para producir diferentes colores y pintar figuras para satisfacer la demanda. + Mientras que sólo procesas formas al principio, tienes que colorearlas después - ¡para ello tienes que extraer y mezclar los colores! - Este juego cuenta con 18 niveles (¡Que te mantendrán ocupado durante horas!) pero estoy constantemente añadiendo nuevo contenido - ¡Hay mucho planeado! + Comprando el juego en Steam tienes acceso a la versión completa, ¡pero también puedes jugar una demo en shapez.io primero y decidir después! + title_advantages: Ventajas del juego + advantages: + - 12 nuevos niveles de un total de 26 niveles + - 18 nuevos edificios ¡para una fábrica totalmente automatizada! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Modo oscuro! + - Partidad guardadas ilimitadas + - Marcadores ilimitados + - Support me! ❤️ + title_future: Contenido futuro + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + Anybody can contribute, I'm actively involved in the community and + attempt to review all suggestions and take feedback into consideration + where possible. - Comprando el juego tendrás acceso a la versión completa con contenido adicional, además del contenido en desarrollo. - - [b]Ventajas del juego completo[/b] - - [list] - [*] Modo oscuro - [*] Puntos de referencia ilimitados - [*] Partidas guardadas ilimitadas - [*] Ajustes adicionales - [*] Próximamente: ¡Cables y Energía! Aproximadamente para finales de julio de 2020. - [*] Próximamente: Más niveles - [*] Ayúdame a seguir desarrollando shapez.io ❤️ - [/list] - - [b]Futuras actualizaciones[/b] - - ¡Estoy actualizando el juego muy a menudo e intentando subir actualizaciones al menos una vez a la semana! - - [list] - [*] Diferentes mapas y desafíos (por ejemplo: mapas con obstáculos) - [*] Puzles (Entrega la forma requerida con una zona o conjunto de edificios restringidos) - [*] Modo historia en el que los edificios tengan un coste - [*] Generador de mapas configurable (Configurar recursos, forma, tamaño, densidad, semilla y más) - [*] Más tipos de figuras - [*] Mejoras de rendimiento (¡Aunque el juego ya funciona muy bien!) - [*] ¡Y mucho más! - [/list] - - [b]¡Este juego es de código abierto![/b] - - Cualquiera puede contribuir, estoy activamente involucrado en la comunidad e intento leer todas las sugerencias y considerar todas las propuestas planteadas. ¡Comprueba mi tablero de Trello para ver todo lo planificado! - - [b]Enlaces[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Discord oficial[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Hoja de ruta[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Código fuente (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Ayuda a traducir[/url] - [/list] - discordLinkShort: Official Discord + Be sure to check out my trello board for the full roadmap! global: loading: Cargando error: Error @@ -129,7 +121,9 @@ dialogs: text: "No se ha podido cargar la partida guardada:" confirmSavegameDelete: title: Confirmar borrado - text: ¿Seguro que quieres borrar la partida? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Fallo al borrar text: "Fallo al borrar la partida guardada:" @@ -192,9 +186,8 @@ dialogs: createMarker: title: Nuevo marcador titleEdit: Editar marcador - desc: Dale un nombre significativo, también puedes agregarle la - clave de una forma (La cual puedes generar aquí) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) markerDemoLimit: desc: Solo puedes crear dos marcadores en la versión de prueba. ¡Obtén el juego completo para marcadores ilimitados! @@ -480,8 +473,9 @@ buildings: la entrada de arriba. quad: name: Pintor (Cuádruple) - description: Permite colorear cada cuadrante de una figura con un color - distinto. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Basurero @@ -599,11 +593,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Cortador de figuras - desc: ¡Acabas de desbloquear el cortador - corta las figuras - por la mitad de arriba abajo sin importar su - orientación!

Asegúrate de deshacerte de lo que no vayas a - usar o se parará - ¡Para eso te he dado un - basurero, que destruye todo lo que le pongas! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotador desc: ¡El rotador se ha desbloqueado! Rota figuras en sentido @@ -627,9 +622,9 @@ storyRewards: será apilada encima de la entrada izquierda! reward_splitter: title: Separador/Fusionador - desc: El balanceador multiusos se ha desbloqueado - ¡Se puede - usar para construir fábricas más grandes separando y uniendo - elementos en varias cintas transportadoras!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Túnel desc: El túnel se ha desbloqueado - ¡Ahora puedes transportar @@ -641,9 +636,10 @@ storyRewards: y pulsa 'T' para ciclar por sus variantes reward_miner_chainable: title: Extractor en cadena - desc: ¡Has desbloqueado el extractor en cadena! Puede - enviar los recursos a otros extractores, extrayendo - recursos más eficientemente. + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Túnel nivel II desc: Has desbloqueado una nueva variante del túnel - ¡Tiene un @@ -660,14 +656,18 @@ storyRewards: consumiendo solo un color en vez de dos! reward_storage: title: Almacenamiento intermedio - desc: Has desbloqueado una variante del basurero - ¡Permite - almacenar elementos hasta una cierta capacidad! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Juego libre - desc: ¡Lo has conseguido! ¡Has desbloqueado el Juego Libre! - ¡Esto significa que ahora las figuras se generan aleatoriamente! - (¡No te preocupes, hay más contenido planeado para el juego - completo!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Planos desc: ¡Ahora puedes copiar y pegar partes de tu fábrica! @@ -707,8 +707,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index cadfb0b3..3c708224 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -2,59 +2,51 @@ steamPage: shortText: shapez.io on peli tehtaiden rakentamisesta, joiden avulla automatisoidaan yhä monimutkaisempien muotojen luonti and yhdisteleminen loputtomassa maailmassa. - 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. - - 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]! - - 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! - - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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] - - [b]This game is 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] - - [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] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Ladataan error: Virhe @@ -129,7 +121,9 @@ dialogs: text: "Tallennuksen lataus epäonnistui:" confirmSavegameDelete: title: Varmista poisto - text: Oletko varma että haluat poistaa tallennuksen? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Poisto epäonnistui text: "Tallennuksen poisto epäonnistui:" @@ -185,9 +179,8 @@ dialogs: Käännä sijoitettavien hihnojen suunta.
" createMarker: title: Uusi Merkki - desc: Anna merkille kuvaava nimi, voit myös sisällyttää muodon lyhyen - avaimen siihen. (Lyhyen avaimen voit luoda täällä) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Muokkaa merkkiä markerDemoLimit: desc: Voit tehdä vain kaksi mukautettua merkkiä demoversiossa. Hanki itsenäinen @@ -475,7 +468,9 @@ buildings: sisääntulosta tulevalla värillä. quad: name: Painter (Neljännes) - description: Sallii muodon neljäsosien värjäämisen eri väreillä. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Roskakori @@ -593,11 +588,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Muotojen Leikkaus - desc: Avasit Leikkurin - se leikkaa muotoja puoliksi - ylhäältä alaspäin riippumatta sen - suunnasta!

Varmista, että pääset eroon jätteistä, tai muuten - se jumittuu - Tätä varten saat Roskiksen, joka - tuhoaa kaiken mitä laitat sinne! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Kääntö desc: Avasit Kääntäjän! Se kääntää muotoja myötäpäivään 90 @@ -621,9 +617,9 @@ storyRewards: päälle! reward_splitter: title: Tasaaja - desc: Avasit monikäyttöisen Tasaajan - Sitä voidaan käyttää - isompien tehtaiden rakennukseen jakamaan ja yhdistämään - tavaroita monille hihnoille!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunneli desc: Avasit Tunnelin - Nyt voit kuljettaa tavaroita @@ -635,9 +631,10 @@ storyRewards: painamalla 'T' vaihtaaksesi sen muotoja! reward_miner_chainable: title: Sarja Kaivaja - desc: Avasit Sarja Kaivajan! Se voi välittää sen - resurssit muille kaivajille, jotta voit kaivaa resursseja - tehokkaammin! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunneli Taso II desc: Avasit uuden muodon Tunnelista - Siinä on pidempi @@ -653,13 +650,18 @@ storyRewards: kerrallaan käyttäen vain yhden värin kahden sijaan! reward_storage: title: Varasto Puskuri - desc: Avasit muodon Roskiksesta - Se sallii resurssien - säilyttämisen tiettyyn kapasiteettiin asti! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Vapaapeli - desc: Sinä teit sen! Avasit Vapaapelitilan! Tämä tarkoittaa - sitä, että muodot tehdään nyt satunnaisesti! (Ei hätää, lisää - sisältöä on suunnitteilla itsenäiseen peliin!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Piirustukset desc: Nyt voit Kopioida ja Liittää paloja tehtaastasi! Valitse @@ -697,8 +699,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index a3bbe81a..b4065df9 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -2,72 +2,59 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Discord officiel + intro: >- + Vous aimez les jeux d’automatisation ? Ce jeu est pour vous ! - 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. + shapez.io est un jeu calme où vous devrez construire des usines pour produire automatiquement des formes géométriques. À mesure que le niveau augmente, les formes deviennent de plus en plus complexes, et vous devrez vous étendre sur la carte infinie. - En livrant les formes requises, vous progresserez et débloquerez des améliorations pour accélérer votre usine. + Et en plus, vous devrez aussi produire de plus en plus pour satisfaire la demande. La seule solution est de construire en plus grand ! Au début vous ne ferez que découper les formes, mais plus tard vous devrez les peindre — et pour ça vous devrez extraire et mélanger des couleurs ! - Vous devrez agrandir votre usine pour répondre à l’augmentation de la demande en formes — Mais n’oubliez pas les ressources, vous devrez vous étendre au milieu de cette [b]carte infinie[/b] ! + En achetant le jeu sur Steam, vous aurez accès à la version complète, mais vous pouvez aussi jouer à une démo sur shapez.io et vous décider ensuite ! + title_advantages: Avantages de la version complète + advantages: + - 12 nouveaux niveaux avec 26 niveaux en tout + - 18 nouveaux bâtiments pour automatiser entièrement votre usine ! + - 20 niveaux d’amélioration pour s’amuser pendant des heures ! + - Les câbles ouvrent une toute nouvelle dimension ! + - Mode sombre ! + - Sauvegardes illimitées + - Balises illimitées + - Me soutenir ! ❤️ + title_future: Prévu + planned: + - Bibliothèque de patrons + - Succès sur Steam + - Mode réflexion + - Mini-carte + - Mods + - Mode bac à sable + - …et bien plus ! + title_open_source: Ce jeu est open source ! + text_open_source: >- + Tout le monde peut contribuer. Je suis très impliqué dans la communauté + et j’essaie de lire toutes les suggestions et de prendre en compte vos + retours quand c’est possible. - Bientôt, vous devrez mélanger 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 quelques heures !) mais je développe constamment plus de contenu — Il y a beaucoup de choses prévues ! - - Acheter le jeu vous donne accès à la version complète qui a des fonctionnalités supplémentaires, et vous pourrez aussi accéder aux fonctionnalités fraîchement développées. - - [b]Avantages de la version complète (standalone)[/b] - - [list] - [*] Mode sombre - [*] Balises infinies - [*] Parties infinies - [*] Plus d’options - [*] Prochainement : Câbles et énergie ! Prévu pour (environ) fin juillet 2020. - [*] Prochainement : Plus de niveaux - [*] Aidez-moi à continuer de développer shapez.io ❤️ - [/list] - - [b]Mises à jour à venir[/b] - - Je fais souvent des mises à jour et j’essaye d’en sortir une par semaine ! - - [list] - [*] Différentes cartes et challenges (e.g. carte avec obstacles) - [*] Casse-tête (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é, graine aléatoire et plus) - [*] Plus de niveaux - [*] Amélioration des performances (Le jeu tourne déjà plutôt bien !) - [*] Et bien plus ! - [/list] - - [b]Ce jeu est open source ![/b] - - Tout le monde peut contribuer, je suis très impliqué dans la communauté et j’essaye de répondre à toutes les suggestions et prendre en compte vos retours si possible. Jetez un coup d’œil à mon Trello pour le suivi du projet et les plans de développement ! - - [b]Liens[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Discord officiel[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Trello[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Code source (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Aidez à traduire[/url] - [/list] - discordLinkShort: Official Discord + N’oubliez pas de consulter mon tableau Trello pour voir tout le plan de développement ! + title_links: Liens + links: + discord: Discord officiel + roadmap: Plan de développement + subreddit: Reddit + source_code: Code source (GitHub) + translate: Aidez à traduire global: loading: Chargement error: Erreur - thousandsDivider:   + thousandsDivider: " " decimalSeparator: "," suffix: thousands: k millions: M billions: G trillions: T - infinite: inf + infinite: ∞ time: oneSecondAgo: il y a une seconde xSecondsAgo: il y a  secondes @@ -76,10 +63,10 @@ global: oneHourAgo: il y a une heure xHoursAgo: il y a  heures oneDayAgo: il y a un jour - xDaysAgo: il y a  jours - secondsShort:  s - minutesAndSecondsShort:  m  s - hoursAndMinutesShort:  h  m + xDaysAgo: il y a jours + secondsShort:  s + minutesAndSecondsShort:  m  s + hoursAndMinutesShort:  h  m xMinutes:  minutes keys: tab: TAB @@ -89,7 +76,7 @@ global: shift: MAJ space: ESPACE demoBanners: - title: Version démo + title: Version de démo intro: Achetez la version complète pour débloquer toutes les fonctionnalités ! mainMenu: play: Jouer @@ -111,7 +98,7 @@ mainMenu: dialogs: buttons: ok: OK - delete: Effacer + delete: Supprimer cancel: Annuler later: Plus tard restart: Relancer @@ -150,8 +137,8 @@ dialogs: title: Réinitialisation des contrôles desc: Les contrôles ont été remis à défaut ! featureRestriction: - title: Version démo - desc: Vous avez essayé d’accéder à la fonction () qui n’est pas + title: Version de démo + desc: Vous avez essayé d’accéder à la fonction “” qui n’est pas disponible dans la démo. Pensez à acheter la version complète pour une expérience optimale ! oneSavegameLimit: @@ -161,15 +148,15 @@ dialogs: version complète ! updateSummary: title: Nouvelle mise à jour ! - desc: "Voici les changements depuis votre dernière session :" + desc: "Voici les changements depuis votre dernière session de jeu :" upgradesIntroduction: title: Débloquer les améliorations desc: Toutes les formes que vous produisez peuvent être utilisées pour débloquer - des améliorations — Ne détruisez pas vos anciennes + des améliorations — Ne détruisez pas vos anciennes usines ! L’onglet des améliorations se trouve dans le coin supérieur droit de l’écran. massDeleteConfirm: - title: Confirmation de suppression + title: Confirmer la suppression desc: Vous allez supprimer beaucoup de bâtiments ( pour être précis) ! Êtes-vous sûr de vouloir faire ça ? massCutConfirm: @@ -182,24 +169,28 @@ dialogs: la couper ? blueprintsNotUnlocked: title: Pas encore débloqué - desc: Les patrons n’ont pas encore été débloqués ! Terminez le niveau 12 pour y - avoir accès. + desc: Terminez le niveau 12 pour avoir accès aux patrons ! keybindingsIntroduction: title: Raccourcis utiles - desc: "Le jeu a de nombreux raccourcis facilitant la construction de grandes + desc: '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.
MAJ : Laissez + class="keybinding">CTRL + glisser : Sélectionne une zone à + copier / supprimer.
MAJ : Laissez appuyé pour placer plusieurs fois le même bâtiment.
ALT : Inverse l’orientation des convoyeurs - placés.
" + class="keybinding">ALT : Inverse l’orientation des convoyeurs + placés.
' createMarker: title: Nouvelle balise titleEdit: Modifier cette balise - desc: Donnez-lui un nom, vous pouvez aussi inclure le raccourci + desc: Donnez-lui un nom. Vous pouvez aussi inclure le raccourci d’une forme (que vous pouvez générer ici). + editSignal: + title: Définir le signal + descItems: "Choisissez un objet prédéfini :" + descShortKey: …ou entrez le raccourci d’une forme (que vous + pouvez générer ici) markerDemoLimit: desc: Vous ne pouvez créer que deux balises dans la démo. Achetez la version complète pour en placer autant que vous voulez ! @@ -211,16 +202,11 @@ dialogs: renameSavegame: title: Renommer la sauvegarde desc: Vous pouvez renommer la sauvegarde ici. - editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Avertissement sur les performances + desc: Vous avez placé beaucoup de bâtiments. Ceci est juste un rappel amical que + le jeu ne peut pas gérer un nombre infini de bâtiments, alors + essayez de garder vos usines compactes ! ingame: keybindingsOverlay: moveMap: Déplacer @@ -259,10 +245,10 @@ ingame: speed: Vitesse range: Portée storage: Espace de stockage - oneItemPerSecond: 1 forme ⁄ s - itemsPerSecond:  formes ⁄ s + oneItemPerSecond: 1 forme ⁄ s + itemsPerSecond:  formes ⁄ s itemsPerSecondDouble: (×2) - tiles:  cases + tiles: cases levelCompleteNotification: levelTitle: Niveau  completed: Terminé @@ -271,7 +257,7 @@ ingame: notifications: newUpgrade: Une nouvelle amélioration est disponible ! gameSaved: Votre partie a été sauvegardée. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Niveau  complet ! shop: title: Améliorations buttonUnlock: Améliorer @@ -297,7 +283,7 @@ ingame: - XVIII - XIX - XX - maximumLevel: NIVEAU MAXIMAL (Vitesse ×) + maximumLevel: NIVEAU MAX (Vitesse ×) statistics: title: Statistiques dataSources: @@ -313,9 +299,9 @@ ingame: description: Affiche les formes qui ont été livrées dans votre bâtiment central. noShapesProduced: Aucune forme produite pour le moment. shapesDisplayUnits: - second:  ⁄ s - minute:  ⁄ m - hour:  ⁄ h + second:  ⁄ s + minute:  ⁄ m + hour:  ⁄ h settingsMenu: playtime: Temps de jeu buildingsPlaced: Bâtiments @@ -334,86 +320,86 @@ ingame: waypoints: Balise hub: Centre description: Cliquez sur une balise pour vous y rendre, clic-droit pour - l’effacer.

Appuyez sur pour créer une balise sur - la vue actuelle, ou clic-droit pour en créer une - sur l’endroit pointé. + la supprimer.

Appuyez sur pour créer une balise + sur la vue actuelle, ou clic-droit pour en créer + une sur l’endroit pointé. creationSuccessNotification: La balise a été créée. shapeViewer: - title: Calques + title: Couches empty: Vide - copyKey: Copier le raccourci de la forme + copyKey: Copier le raccourci interactiveTutorial: title: Tutoriel hints: 1_1_extractor: Placez un extracteur sur une forme en cercle pour l’extraire ! 1_2_conveyor: "Connectez l’extracteur avec un convoyeur vers - votre centre !

Astuce : Cliquez et faites - glisser le convoyeur avec votre souris !" + votre centre !

Astuce : Cliquez et faites + glisser le convoyeur avec la 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 but.

Astuce : Gardez MAJ - enfoncé pour placer plusieurs extracteurs, et utilisez - R pour les faire pivoter." + plus vite votre but.

Astuce : Gardez + MAJ enfoncé pour placer plusieurs extracteurs, + et utilisez R pour les faire pivoter." connectedMiners: - one_miner: 1 extracteur + one_miner: 1 extracteur n_miners:  extracteurs - limited_items: Limité à + limited_items: Limité à  watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Version de démo + desc: Cliquez ici pour voir les avantages de la version Steam ! + get_on_steam: Acheter sur Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Obtenir la version complète + no_thanks: Non merci ! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 nouveaux niveaux + desc: Pour un total de 26 niveaux ! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 nouveaux bâtiments + desc: Automatisez entièrement votre usine ! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: Sauvegardes ∞ + desc: Autant que votre cœur le désire ! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 niveaux d’amélioration + desc: Cette version de démonstration n’en a que 5 ! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: Balises ∞ + desc: Ne vous perdez plus jamais dans votre usine ! wires: - title: Wires - desc: An entirely new dimension! + title: Câbles + desc: Une toute nouvelle dimension ! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Mode sombre + desc: Plus jamais mal aux yeux ! support: - title: Support me - desc: I develop it in my spare time! + title: Me soutenir + desc: Je le développe pendant mon temps libre ! shopUpgrades: belt: name: Convoyeurs, distributeurs et tunnels - description: Vitesse × → × + description: Vitesse × → × miner: name: Extraction - description: Vitesse × → × + description: Vitesse × → × processors: name: Découpage, rotation et empilage - description: Vitesse × → × + description: Vitesse × → × painting: name: Mélange et peinture - description: Vitesse × → × + description: Vitesse × → × buildings: hub: deliver: Livrez toUnlock: pour débloquer levelShortcut: NV - endOfDemo: End of Demo + endOfDemo: Fin de la démo belt: default: name: Convoyeur - description: Transporte les objets, maintenez et faites glisser pour en placer + description: Transporte les objets. Maintenez et faites glisser pour en placer plusieurs. miner: default: @@ -429,7 +415,7 @@ buildings: description: Permet de faire passer des ressources sous les bâtiments et les convoyeurs. tier2: - name: Tunnel niveau II + name: Tunnel niveau II description: Permet de faire passer des ressources sous les bâtiments et les convoyeurs. balancer: @@ -531,23 +517,26 @@ buildings: lever: default: name: Interrupteur - description: Peut être basculé pour émettre un signal booléen (1 / 0) dans le + description: Peut être basculé pour émettre un signal booléen (1 / 0) sur le calque de câblage, qui peut être utilisé pour contrôler par exemple un filtre à formes. logic_gate: default: name: Porte ET - description: Émet un “1” booléen si les deux entrées sont vraies. + description: Émet un “1” booléen si les deux entrées sont vraies (une forme, + couleur ou “1”). not: name: Porte INVERSEUR - description: Émet un “1” booléen si l’entrée n'est pas vraie. + description: Émet un “1” booléen si l’entrée n’est pas vraie (une forme, couleur + ou “1”). xor: name: Porte OU-EXCLUSIF - description: Émet un “1” booléen si une des entrées est vraie, mais pas les - deux. + description: Émet un “1” booléen si une des entrées est vraie (une forme, + couleur ou “1”), mais pas les deux. or: name: Porte OU - description: Émet un “1” booléen si une des entrées est vraie. + description: Émet un “1” booléen si une des entrées est vraie (une forme, + couleur ou “1”). transistor: default: name: Transistor @@ -570,7 +559,7 @@ buildings: couleur, ou un booléen. reader: default: - name: Débitmètre + name: Lecteur de débit description: Mesure le débit d’un convoyeur. Émet sur le calque de câblage (une fois déverrouillé) la dernière forme ou couleur mesurée. analyzer: @@ -592,7 +581,7 @@ buildings: description: Fait pivoter virtuellement la forme de 90 degrés vers la droite. unstacker: name: Décombineur virtuel - description: Renvoie la couche supérieur à droite, et les couches restantes à + description: Renvoie la couche supérieure à droite, et les couches restantes à gauche. stacker: name: Combineur virtuel @@ -602,32 +591,31 @@ buildings: description: Peint virtuellement la forme du bas avec la couleur de droite. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Générateur d’objet + description: Seulement disponible en mode bac à sable. Renvoie le signal du + calque de câblage sur le calque normal. storyRewards: reward_cutter_and_trash: title: Découpage de formes - desc: Vous venez de débloquer le découpeur — il coupe des - formes en deux de haut en bas quelle que soit son - orientation !

Assurez-vous de vous débarrasser des déchets, - sinon gare au blocage — À cet effet, je mets à - votre disposition la poubelle, qui détruit tout ce que vous y - mettez ! + desc: Vous avez débloqué le découpeur. Il coupe des formes en + deux de haut en bas quelle que soit son + orientation !

Assurez-vous de vous débarrasser des déchets, + sinon gare au blocage. À cet effet, je mets à votre + disposition la poubelle, qui détruit tout ce que vous y mettez ! reward_rotater: title: Rotation - desc: Le pivoteur a été débloqué ! Il pivote les formes de - 90 degrés vers la droite. + desc: Le pivoteur a été débloqué ! Il pivote les formes de 90 + degrés vers la droite. reward_painter: title: Peintre - desc: "Le peintre a été débloqué — Extrayez des pigments de + desc: "Le peintre a été débloqué. Extrayez des pigments de couleur (comme vous le faites avec les formes) et combinez-les avec une forme dans un peintre pour les colorier !

PS : Si vous êtes daltonien, il y a un mode daltonien paramétrable dans les préférences !" reward_mixer: title: Mélangeur de couleurs - desc: Le mélangeur a été débloqué — Combinez deux couleurs en + desc: Le mélangeur a été débloqué. Combinez deux couleurs en utilisant la synthèse additive des couleurs avec ce bâtiment ! reward_stacker: @@ -639,19 +627,19 @@ storyRewards: placée au-dessus de la forme de gauche. reward_balancer: title: Répartiteur - desc: Le répartiteur multifonctionnel a été débloqué — Il peut + desc: Le répartiteur multifonctionnel a été débloqué. Il peut être utilisé pour construire de plus grandes usines en distribuant équitablement et rassemblant les formes entre plusieurs convoyeurs !

reward_tunnel: title: Tunnel - desc: Le tunnel a été débloqué — Vous pouvez maintenant faire + desc: Le tunnel a été débloqué. Vous pouvez maintenant faire passer des formes sous les convoyeurs et les bâtiments ! reward_rotater_ccw: title: Pivoteur inversé - desc: Vous avez débloqué une variante du pivoteur — Elle permet + desc: Vous avez débloqué une variante du pivoteur. Elle permet de faire pivoter vers la gauche ! Pour le construire, sélectionnez - le pivoteur et appuyez sur 'T' pour alterner entre les + le pivoteur et appuyez sur “T” pour alterner entre les variantes ! reward_miner_chainable: title: Extracteur en série @@ -666,24 +654,22 @@ storyRewards: les deux variantes de tunnels ! reward_merger: title: Fusionneur compact - desc: Vous avez déverrouillé une variante du fusionneur du - répartiteur. Il accepte deux entrées et les - fusionne en un seul convoyeur ! + desc: Vous avez débloqué une variante du répartiteur. Il + accepte deux entrées et les fusionne en un seul convoyeur ! reward_splitter: title: Répartiteur compact desc: Vous avez débloqué une variante compacte du répartiteur — - Elle accepte deux entrées et les rassemble en une sortie ! + Il accepte une seule entrée et la divise en deux sorties ! reward_belt_reader: - title: Lecteur de convoyeur - desc: Vous avez maintenant déverrouillé le lecteur de convoyeur - ! Il vous permet de mesurer le débit d'un convoyeur.

Et - attendez de déverrouiller les câbles, alors cela deviendra vraiment - utile ! + title: Lecteur de débit + desc: Vous avez débloqué le lecteur de débit ! Il vous permet + de mesurer le débit d’un convoyeur.

Et attendez de + déverrouiller les câbles, il sera alors très utile ! reward_cutter_quad: title: Quadruple découpeur desc: Vous avez débloqué une variante du découpeur — Elle - permet de découper les formes en quatre parties à - la place de simplement deux ! + permet de découper les formes en quatre parties + plutôt que seulement deux ! reward_painter_double: title: Double peintre desc: Vous avez débloqué une variante du peintre — Elle @@ -694,82 +680,92 @@ storyRewards: title: Tampon de stockage desc: Vous avez débloqué le bâtiment de stockage. Il permet de stocker des objets jusqu’à une certaine limite !

Il priorise - la sortie gauche, vous pouvez donc également l'utiliser comme - porte de débordement ! + la sortie gauche, vous pouvez donc aussi l’utiliser comme + drain de débordement ! reward_blueprints: title: Patrons desc: Vous pouvez maintenant copier et coller des parties de votre usine ! 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). + 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). reward_rotater_180: title: Retourneur - desc: Vous venez de déverrouiller le retourneur ! Il vous - permet de faire pivoter une forme de 180 degrés (Surprise ! :D) + desc: Vous avez débloqué le retourneur ! Il permet de faire + pivoter une forme de 180 degrés (Surprise ! :D) + reward_wires_painter_and_levers: + title: Câbles & quadruple peintre + desc: "Vous avez débloqué le calque de câblage : C’est un + calque au-dessus du calque normal, qui introduit beaucoup de + nouvelles mécaniques de jeu !

Pour commencer, je vous + débloque le quadruple peintre. Connectez les + entrées à peindre sur le calque de câblage.

Pour voir le + calque de câblage, appuyez sur E." + reward_filter: + title: Filtre à objets + desc: Vous avez débloqué le filtre à objets ! Il dirige les + objets en haut ou à droite selon qu’ils correspondent ou non au + signal provenant du calque de câblage.

Vous pouvez aussi + connecter un signal booléen (1 / 0) pour l’activer ou le désactiver + complètement. reward_display: title: Afficheur - desc: Vous avez déverrouillé l'afficheur ! Connectez-y un câble - signal pour visualiser une couleur, une forme ou un booléen ! + desc: "Vous avez débloqué l’afficheur ! Connectez-y un signal + sur le calque de câblage pour afficher une couleur, une forme ou un + booléen !

PS : Avez-vous remarqué que le lecteur de débit et + le stockage émettent le dernier objet vu ? Essayez de le montrer sur + un écran !" reward_constant_signal: title: Constante - desc: Vous avez déverrouillé la constante basé sur le calque de - câblage ! Elle est utile pour la connecter à des filtres - d'éléments par exemple.

La constante peut émettre + desc: Vous avez débloqué l’émetteur de constante sur le calque + de câblage ! Vous pouvez par exemple la connecter à des + filtres à objets.

La constante peut émettre une forme, une couleur ou un - booléen (1 / 0). + booléen (1 / 0). reward_logic_gates: title: Portes logiques - desc: Vous avez déverrouillé les portes logiques ! Vous n'êtes - pas obligé d'être excité à ce sujet, mais c'est vraiment super cool - !

Avec ces portes, vous pouvez maintenant effectuer des - opérations booléennes ET, OU, OU-EXCLUSIF et INVERSEUR ! + desc: "Vous avez débloqué les portes logiques ! Vous n’êtes pas + obligé de trouver ça génial, mais en fait c’est super cool !

+ Avec ces portes, vous pouvez maintenant faire les opérations + booléennes ET, OU, OU-EXCLUSIF et INVERSEUR !

Et la cerise + sur le gâteau : je vous donne aussi le + transistor !" reward_virtual_processing: title: Traitement virtuel - desc: Je viens de donner tout un tas de nouveaux bâtiments qui vous permettent - de simuler du traitement de forme !

Vous - pouvez maintenant simuler un découpeur, un pivoteur, un combineur et - plus encore sur le calque de câblage !

Avec cela, vous avez - maintenant trois options pour continuer le jeu :

- - Construire une machine automatisée pour créer toute - forme possible demandée par le centre (c'est cool, je le jure - !).

- Construire quelque chose de cool avec des - câbles.

- Continuer à jouer régulièrement. + desc: Je viens de vous donner tout un tas de nouveaux bâtiments qui vous + permettent de simuler le traitement des + formes !

Vous pouvez maintenant simuler un + découpeur, un pivoteur, un combineur et plus encore sur le calque de + câblage !

Avec ça, vous avez trois possibilités pour + continuer le jeu :

- Construire une machine + automatisée pour fabriquer n’importe quelle forme demandée + par le centre (je conseille d’essayer !).

- Construire + quelque chose de cool avec des câbles.

- Continuer à jouer + normalement.

Dans tous les cas, l’important c’est de + s’amuser ! no_reward: title: Niveau suivant - desc: "Ce niveau n’a pas de récompense mais le prochain, si !

PS : Ne - détruisez pas votre usine actuelle — Vous aurez besoin de + desc: "Ce niveau n’a pas de récompense mais le prochain, si !

PS : Ne + détruisez pas votre usine actuelle. Vous aurez besoin de toutes ces formes plus tard pour débloquer des améliorations." no_reward_freeplay: title: Niveau suivant - desc: Bravo ! À propos, plus de contenu est prévu pour la version complète ! + desc: Bravo ! reward_freeplay: title: Mode libre desc: Vous y êtes arrivé ! Vous avez débloqué le mode libre ! Cela veut dire que dorénavant, les formes sont générées - aléatoirement !

Étant donné que le centre - ne demandera que de faibles quantités, je recommande fortement de - construire une machine qui délivre automatiquement la forme demandée - ! - reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." - reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + aléatoirement !

Comme le centre va demander + un gros débit à partir de maintenant, je recommande + vivement de construire une machine qui fabrique automatiquement la + forme demandée.

Le centre émet la forme demandée sur le + calque de câblage, donc vous n’avez qu’à l’analyser et l’utiliser + pour configurer automatiquement votre usine. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Fin de la démo + desc: Vous avez atteint la fin de la version de démo ! settings: title: Options categories: @@ -819,7 +815,7 @@ settings: super_fast: Très rapide movementSpeed: title: Vitesse de déplacement - description: Change la vitesse de déplacement de l’écran avec les touches + description: Change la vitesse de déplacement de l’écran avec les touches du clavier. speeds: super_slow: Très lent @@ -860,11 +856,12 @@ settings: dark: Sombre light: Clair refreshRate: - title: Fréquence de simulation - description: Si vous avez un moniteur à fréquence élevée, changez le taux de - rafraichissement pour que le jeu fonctionne correctement à cette - haute fréquence. Ceci pourrait cependant diminuer vos IPS - (itérations par seconde) si votre ordinateur est trop lent. + title: Fréquence de rafraîchissement + description: Détermine la fréquence de simulation du jeu par seconde. En + général, un taux de rafraîchissement plus élevé se traduit par + une meilleure précision mais une performance plus mauvaise. Si + la fréquence de rafraîchissement est basse, les débits peuvent + ne pas être exacts. alwaysMultiplace: title: Placement multiple description: Si activé, tous les bâtiments resteront sélectionnés tant que vous @@ -872,7 +869,7 @@ settings: en permanence. offerHints: title: Indices - description: Affiche ou non le bouton 'Afficher un indice' dans le coin + description: Affiche ou non le bouton “Afficher un indice” dans le coin inférieur gauche. enableTunnelSmartplace: title: Tunnels intelligents @@ -882,8 +879,8 @@ settings: effacés. vignette: title: Effet de vignette - description: Permet l’affichage de l’effet de vignette qui assombrit les coins - de l’écran afin de rendre le texte plus facile à lire. + description: Active l’effet de vignette qui assombrit les coins de l’écran pour + rendre le texte plus facile à lire. rotationByBuilding: title: Rotation par catégorie de bâtiment description: Chaque catégorie de bâtiment enregistre le sens de rotation que @@ -896,9 +893,9 @@ settings: n’affichant que les ratios. Si désactivé, montre une description et une image. disableCutDeleteWarnings: - title: Désactive les avertissements pour Couper / Effacer + title: Désactive les avertissements pour Couper / Supprimer description: Désactive la boîte de dialogue qui s’affiche lorsque vous vous - apprêtez à couper / effacer plus de 100 entités. + apprêtez à couper / supprimer plus de 100 entités. lowQualityMapResources: title: Ressources de la carte de plus basse qualité description: Simplifie le rendu des ressources sur la carte lorsqu’elle est @@ -920,12 +917,12 @@ settings: performances. Rend le jeu très moche ! displayChunkBorders: title: Montrer les secteurs - description: Le jeu est divisé en secteurs de 16×16 cases. Si ce réglage est + description: Le jeu est divisé en secteurs de 16×16 cases. Si ce réglage est activé, les limites de chaque secteur sont affichées. pickMinerOnPatch: - title: Choisir l’extracteur sur une mine de ressources + title: Choisir l’extracteur sur un gisement de ressources description: Activé par défaut, sélectionne l’extracteur si vous utilisez la - pipette en survolant une mine de ressources. + pipette en survolant un gisement de ressources. simplifiedBelts: title: Convoyeurs simplifiés (moche) description: Désactive le rendu des formes et couleurs sur les convoyeurs sauf @@ -984,15 +981,16 @@ keybindings: wire: Câble constant_signal: Constante logic_gate: Porte logique - lever: Interrupteur (normal) + lever: Interrupteur filter: Filtre wire_tunnel: Tunnel à câble display: Afficheur - reader: Débitmètre + reader: Lecteur de débit virtual_processor: Découpeur virtuel transistor: Transistor analyzer: Analyseur de formes comparator: Comparateur + item_producer: Générateur d’objets (bac à sable) pipette: Pipette rotateWhilePlacing: Pivoter rotateInverseModifier: "Variante : Pivote à gauche" @@ -1002,15 +1000,14 @@ keybindings: cycleBuildings: Alterner entre les bâtiments lockBeltDirection: Utiliser le planificateur de convoyeurs switchDirectionLockSide: "Planificateur : changer de côté" + copyWireValue: "Câble : Copier la valeur sous le curseur" massSelectStart: Cliquez et glissez pour commencer massSelectSelectMultiple: Sélectionner plusieurs zones massSelectCopy: Copier la sélection massSelectCut: Couper la sélection placementDisableAutoOrientation: Désactiver l’orientation automatique placeMultiple: Rester en mode placement - placeInverse: Inverser le mode d’orientation automatique - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + placeInverse: Inverser l’orientation des convoyeurs about: title: À propos de ce jeu body: >- @@ -1036,29 +1033,28 @@ demo: exportingBase: Exporter une image de toute la base settingNotAvailable: Indisponible dans la démo. tips: - - Le centre accepte les entrées de toutes sortes, pas seulement la forme - actuelle ! - - Assurez-vous que vos usines soient modulaires, cela paiera ! - - Ne construisez pas trop près du centre, ou ce sera un énorme chaos ! - - Si l'empilement ne fonctionne pas, essayez d'échanger les entrées. + - Le centre n’importe quelle forme, pas seulement la forme actuelle ! + - Assurez-vous que vos usines soient modulaires, cela paiera ! + - Ne construisez pas trop près du centre, ou ce sera un énorme chaos ! + - Si l’empilement ne fonctionne pas, essayez d’échanger les entrées. - Vous pouvez changer le sens du planificateur de convoyeur en appuyant sur R. - Maintenir CTRL permet de déposer les convoyeurs sans auto-orientation. - - Les ratios restent les mêmes, tant que toutes les améliorations sont de + - Les ratios restent les mêmes, tant que toutes les améliorations sont au même niveau. - - L'exécution en série est plus efficace qu'en parallèle. - - Vous débloquerez plus de variantes de bâtiments plus tard dans le jeu ! + - L’exécution en série est plus efficace qu’en parallèle. + - Vous débloquerez plus de variantes de bâtiments plus tard dans le jeu ! - Vous pouvez utiliser T pour basculer entre différentes variantes. - - La symétrie est la clé ! + - La symétrie est la clé ! - Vous pouvez entrelacer différents niveaux de tunnels. - - Essayez de construire des usines compactes, cela paiera ! + - Essayez de construire des usines compactes, cela paiera ! - Le peintre a une variante en miroir que vous pouvez sélectionner avec T - - Avoir les bons ratios de construction maximisera l'efficacité. + - Avoir les bons ratios de construction maximisera l’efficacité. - Au niveau maximum, 5 extracteurs rempliront un seul convoyeur. - - N'oubliez pas les tunnels ! - - Vous n'avez pas besoin de répartir les objets uniformément pour une + - N’oubliez pas les tunnels ! + - Vous n’avez pas besoin de répartir les objets uniformément pour une efficacité totale. - Maintenir MAJ activera le planificateur de convoyeur, vous permettant de placer facilement de longues lignes de convoyeur. @@ -1066,52 +1062,52 @@ tips: orientation. - Pour obtenir du blanc, mélangez les trois couleurs. - Le stockage priorise la première sortie. - - Investissez du temps pour créer des designs reproductibles, ça vaut le - coup ! + - Investissez du temps pour créer des patrons reproductibles, ça vaut le + coup ! - Maintenir CTRL permet de placer plusieurs bâtiments. - - Vous pouvez maintenir ALT pour inverser la direction des ceintures - placées. - - L'efficacité est la clé ! - - Les patchs de forme plus éloignés du moyeu sont plus complexes. + - Vous pouvez maintenir ALT pour inverser la direction des convoyeurs + placés. + - L’efficacité est la clé ! + - Les gisements plus éloignés du centre produisent des formes plus complexes. - Les machines ont une vitesse limitée, divisez-les pour une efficacité maximale. - - Utilisez des équilibreurs pour maximiser votre efficacité. - - L'organisation est importante. Essayez de ne pas trop traverser les + - Utilisez des répartiteurs pour maximiser votre efficacité. + - L’organisation est importante. Essayez de ne pas trop croiser les convoyeurs. - - Planifiez à l'avance, ou ce sera un énorme chaos ! - - Ne supprimez pas vos anciennes usines ! Vous en aurez besoin pour + - Planifiez à l’avance, ou ce sera un énorme chaos ! + - Ne supprimez pas vos anciennes usines ! Vous en aurez besoin pour débloquer des améliorations. - - Essayez de battre le niveau 18 par vous-même avant de demander de l'aide ! + - Essayez de réussir le niveau 18 par vous-même avant de demander de l’aide ! - Ne compliquez pas les choses, essayez de rester simple et vous irez loin. - Vous devrez peut-être réutiliser les usines plus tard dans le jeu. - Planifiez vos usines pour qu'elles soient réutilisables. + Planifiez vos usines pour qu’elles soient réutilisables. - Parfois, vous pouvez trouver une forme nécessaire sur la carte sans la créer avec des combineurs. - - Les formes en moulins à vent complet ne peuvent jamais apparaître + - Les formes en hélice complètes ne peuvent jamais apparaître naturellement. - Colorez vos formes avant de les découper pour une efficacité maximale. - - Avec les modules, l'espace n'est qu'une perception; une préoccupation pour - les hommes mortels. - - Créez une usine de patrons distincte. Ils sont importants pour les modules. + - Avec les modules, l’espace n’est qu’une perception ; une préoccupation + pour les hommes mortels. + - Créez une usine de patrons à part. Ils sont importants pour les modules. - Regardez de plus près le mélangeur de couleur et vous aurez la réponse à vos questions. - - Utilisez CTRL + clic pour sélectionner une zone. + - Utilisez CTRL + clic pour sélectionner une zone. - Construire trop près du centre peut gêner les projets futurs. - - L'icône d'épingle à côté de chaque forme dans la liste d'améliorations - l'épingle à l'écran. - - Mélangez toutes les couleurs primaires ensemble pour faire du blanc ! - - Vous avez une carte infinie, n'encombrez pas votre usine, développez-vous ! - - Essayez également Factorio ! C'est mon jeu préféré. - - Le découpeur quadruple coupe dans le sens des aiguilles d'une montre à - partir du coin supérieur droit ! - - Vous pouvez télécharger vos sauvegardes dans le menu principal ! - - Ce jeu a beaucoup de raccourcis clavier utiles ! Assurez-vous de consulter - la page des paramètres. - - Ce jeu a beaucoup de paramètres, assurez-vous de les vérifier ! + - L’icône d’épingle à côté de chaque forme dans la liste d’améliorations + épingle la forme à l’écran. + - Mélangez toutes les couleurs primaires ensemble pour faire du blanc ! + - Vous avez une carte infinie, n’encombrez pas votre usine, développez-vous ! + - Essayez aussi Factorio ! C’est mon jeu préféré. + - Le découpeur quadruple coupe dans le sens des aiguilles d’une montre à + partir du coin supérieur droit ! + - Vous pouvez télécharger vos sauvegardes dans le menu principal ! + - Ce jeu a beaucoup de raccourcis clavier utiles ! Pensez à regarder la page + des paramètres. + - Ce jeu a beaucoup de paramètres, pensez à les regarder ! - Le marqueur de votre centre a une petite boussole pour indiquer sa - direction ! + direction ! - Pour nettoyer les convoyeurs, coupez la zone puis collez-la au même endroit. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Appuyez sur F4 pour voir vos IPS et votre fréquence de rafraîchissement. + - Appuyez deux fois sur F4 pour voir les coordonnées. + - Cliquez sur une forme épinglée à gauche pour l’enlever. diff --git a/translations/base-hr.yaml b/translations/base-hr.yaml index e777e0ee..70759c8e 100644 --- a/translations/base-hr.yaml +++ b/translations/base-hr.yaml @@ -1,59 +1,51 @@ steamPage: shortText: shapez.io je igra o izradi tvornica za automatizaciju stvaranja i spajanja sve složenijih oblika unutar beskonačno velike mape. - 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. - - 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]! - - 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! - - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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] - - [b]This game is 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] - - [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] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Učitavanje error: Greška @@ -128,7 +120,9 @@ dialogs: text: "Neuspješno učitavanje spremljene igre:" confirmSavegameDelete: title: Potvrdi brisanje - text: Jesi li siguran da želiš izbrisati spremljenu igru? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Greška prilikom brisanja text: "Neuspješno brisanje spremljene igre:" @@ -183,9 +177,8 @@ dialogs: smjer postavljenih pokretnih traka.
" createMarker: title: Novi Putokaz - desc: Daj mu smisleno ime. Može se uključiti i kratki kod - oblika. (Koju možeš generirati ovdje) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Edit Marker markerDemoLimit: desc: U demo verziji se mogu stvoriti samo dva putokaza istovremeno. Nabavi @@ -466,7 +459,9 @@ buildings: description: Boja oblike na lijevom ulazu bojom s gornjeg ulaza. quad: name: Bojač (Četverostruki) - description: Dopušta bojanje svake četvrtine oblika različitom bojom. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Smeće @@ -584,11 +579,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Rezanje Oblika - desc: Rezač je otključan! Ovaj stroj reže oblike od - vrha prema dnu bez obzira na orijentaciju - građevine!

Višak se mora odbaciti kako bi se izbjegao - zastoj. - Za tu svrhu postoji smeće, koje uništava - sve što u njega uđe. + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Obrtanje desc: Obrtač je otključan! Ovaj stroj okreće oblike za 90 @@ -610,9 +606,9 @@ storyRewards: vrh
lijevog! reward_splitter: title: Razdjeljivanje i sjedinjavanje - desc: Multifunkcionalni balancer je otključan! Može ga se - iskoristiti za razdjeljivanje i sjedinjavanje - oblika na više pokretnih traka!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunel desc: Tunel je otključan - Omogućava slanje stvari ispod traka @@ -624,8 +620,10 @@ storyRewards: za mijenjanje njegove varijante
! reward_miner_chainable: title: Lančani rudar - desc: Otključan je lančani rudar! Može proslijediti - svoje resurse drugim rudarima za efikasnije rudarenje! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunel Razine II desc: Otključana je nova varijanta tunela - Ima veći @@ -641,13 +639,18 @@ storyRewards: once consuming just one color instead of two! 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 the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! 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!) + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Blueprints desc: You can now copy and paste parts of your factory! Select @@ -684,8 +687,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml index af291558..86e9cbcd 100644 --- a/translations/base-hu.yaml +++ b/translations/base-hu.yaml @@ -2,61 +2,51 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - 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. - - 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. - - 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! - - 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. - - 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! - - 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] - [*] É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]Tervezett Frissítések[/b] - - Nagyon gyakran frissítem a játékot, igyekszem minden héten egy új frissítést kiadni! - - [list] - [*] 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]A játék nyílt forráskódú![/b] - - 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]Linkek[/b] - - [list] - [*] [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]Forráskód (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Segíts lefordítani[/url] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Betöltés error: Hiba @@ -132,7 +122,9 @@ dialogs: text: "Nem sikerült betölteni a mentésed:" confirmSavegameDelete: title: Törlés megerősítése - text: Biztos, hogy ki akarod törölni? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Sikertelen törlés text: "Nem sikerült törölni a mentésed:" @@ -193,9 +185,8 @@ dialogs: lehelyezéskor.
" createMarker: title: Új Jelölő - desc: Adj neki egy nevet, vagy egy alakzat gyorskódját (amit itt tudsz - legenerálni) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Jelölő Szerkesztése markerDemoLimit: desc: A Demó verzióban csak két Jelölőd lehet. Vásárold meg az Önálló verziót, @@ -479,7 +470,9 @@ buildings: é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. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Kuka @@ -598,11 +591,12 @@ buildings: storyRewards: 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! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotating desc: The rotater has been unlocked! It rotates shapes @@ -625,9 +619,9 @@ storyRewards: stacked on top of the left input! 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: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: The tunnel has been unlocked - You can now pipe items @@ -639,9 +633,10 @@ storyRewards: press 'T' to cycle its variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can + desc: "You have unlocked the chained extractor! It can forward its resources to other extractors so you - can more efficiently extract resources! + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Tier II desc: You have unlocked a new variant of the tunnel - It has a @@ -658,13 +653,18 @@ storyRewards: once consuming just one color instead of two! 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 the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! 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!) + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Blueprints desc: You can now copy and paste parts of your factory! Select @@ -701,8 +701,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index c635b58b..3f069627 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -2,61 +2,51 @@ steamPage: shortText: Shapez.io adalah game tentang membangun pabrik untuk mengotomatiskan pembuatan dan pemrosesan bentuk-bentuk yang semakin kompleks di peta yang meluas tanpa batas. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - shapez.io adalah permainan membangun pabrik dengan tujuan untuk mengautomatiskan pembentukan dan pemrosesan bentuk-bentuk yang bertambah semakin kompleks di peta yang meluas tanpa batas. - - Setelah pengiriman bentuk-bentuk yang diminta, Anda akan maju dalam permainan dan membuka tingkatan versi-versi mesin selanjutnya untuk mempercepat pabrik Anda. - - Seiring meningkatnya kesulitan dari bentuk-bentuk yang diminta, Anda harus meningkatkan pabrik Anda untuk mengatasi kesulitan tersebut – Jangan lupa dengan sumber daya, Anda harus memperluas ke seluruh [b]area yang tidak terbatas[/b]! - - Kemudian Anda harus mencampurkan warna-warna dan mencat bentuk-bentuk tersebut – Campurkan merah, hijau, dan biru untuk memproduksi warna-warna lain dan mencat bentuk-bentuk tersebut untuk memenuhi permintaan. - - Permainan ini mempunyai 18 level-level progresif (yang mana akan membuat Anda sibuk berjam-jam!), akan tetapi saya akan terus menambahkan konten-konten baru – Ada banyak yang direncanakan! - - Membeli permainan ini akan memberikan Anda akses ke versi penuh yang memiliki fitur-fitur tambahan, dan Anda juga akan menerima akses ke fitur-fitur yang baru dikembangkan. - - [b]Keuntungan Versi Penuh[/b] - - [list] - [*] Mode Malam - [*] Titik Arah Tak Terhingga - [*] Penyimpanan Permainan Tak Terhingga - [*] Pengaturan-pengaturan Tambahan - [*] Akan datang: Kawat & Energi! Akan dicoba untuk dicapai sekitar akhir Juli 2020. - [*] Akan datang: Level-level tambahan - [*] Mendukung saya untuk terus mengembangkan shapez.io ❤️ - [/list] - - [b]Pembaruan di masa yang akan datang[/b] - - Saya seringkali membarui permainan ini dan terus mencoba untuk menciptakan pembaruan paling sedikit sekali seminggu! - - [list] - [*] Peta-peta dan tantangan-tantangan berbeda (contohnya, peta-peta dengan berbagai rintangan) - [*] Berbagai teka-teki (Kirim bentuk yang diminta dengan area terbatas atau sekelompok bangunan tertentu) - [*] Modus cerita dimana bangunan-bangunan memiliki biaya. - [*] Generator peta yang dapat dikonfigurasi (Konfigurasikan sumber daya/ukuran bentuk/kepadatan, benih dan lainnya) - [*] Tipe-tipe bentuk tambahan - [*] Peningkatan kinerja (Permainannya sudah bekerja cukup baik!) - [*] Dan masih banyak lagi! - [/list] - - [b]Permainan ini bekerja secara open source![/b] - - Siapa saja dapat berkontribusi, saya terlibat aktif di dalam komunitas dan akan mencoba untuk meninjau dan menerima semua saran untuk dipertimbangkan dimana memungkinkan. Pastikan Anda periksa papan trello saya untuk peta perencanaan yang lengkap! - - [b]Tautan-tautan[/b] - - [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] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io adalah game santai dimana anda harus membuat pabrik untuk + mengotomatiskan produksi bentuk-bentuk geometris. + + Semakin meningkatnya level, bentuk-bentuknya menjadi lebih kompleks, dan anda perlu meluas di peta yang tak terbatas. + + Dan jita itu tidak cukup, anda juga perlu untuk memproduksi secara ekxponensial untuk memenuhkan kebutuhan - hal yang membantu hanyalah memperbesar pabrik! + + Walaupun anda hanya memproses bentuk di awal, anda perlu mewarnainya untuk nanti - untuk ini, anda perlu untuk mengekstrak dan mencampur warna! + + Membeli game ini di Steam memberikan anda akses ke versi lengkap, namun anda juga dapat mencoba demo dan memutuskan nanti! + title_advantages: Keuntungan versi penuh + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Sedang memuat error: Terjadi kesalahan @@ -132,7 +122,9 @@ dialogs: text: "Gagal memuat data simpanan Anda:" confirmSavegameDelete: title: Konfirmasi Penghapusan - text: Apakah Anda yakin untuk menghapus data permainan? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Gagal Menghapus text: "Gagal untuk menghapus data simpanan:" @@ -196,9 +188,8 @@ dialogs: createMarker: title: Penanda Baru titleEdit: Sunting Penanda - desc: Berikan nama yang berarti, Anda juga dapat memasukkan tombol - pintas suatu bentuk (yang dapat Anda buat disini) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) markerDemoLimit: desc: Anda hanya dapat memuat dua penanda pada versi demo. Dapatkan versi penuh untuk penanda-penanda tak terhingga! @@ -420,12 +411,12 @@ buildings: beberapa. wire: default: - name: Kawat Energi - description: Memungkinkan anda untuk mengangkut energi. + name: Kabel + description: Memungkinkan anda untuk mengangkut Energi. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Kabel + description: Mentransfer sinyal, dapat berupa bentuk, warna, atau boolean (1 / 0). + Kabel dengan warna berbeda tidak akan menyambung. miner: default: name: Ekstraktor @@ -464,13 +455,13 @@ buildings: name: Pemutar (Berlawanan Arah Jarum Jam) description: Memutar bentuk berlawanan arah jarum jam sebesar 90 derajat. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Pemutar (180) + description: Memutar bentuk searah jarum jam sebesar 180 derajat. stacker: default: - name: Penyusun - description: Menggabungkan kedua artikel. Apabila mereka tidak dapat - digabungkan, artikel kanan akan diletakkan diatas artikel kiri. + name: Penumpuk + description: Menumpukkan kedua bentuk. Apabila mereka tidak dapat + digabungkan, bentuk kanan akan diletakkan diatas bentuk kiri. mixer: default: name: Pencampur Warna @@ -489,131 +480,129 @@ buildings: description: Mencat bentuk-bentuk dari input kiri dengan warna dari input atas. quad: name: Pencat (Empat Bagian) - description: Memungkinkan Anda untuk mencat setiap kuadran bentuk dengan - warna-warna berbeda. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Tong Sampah description: Menerima input dari semua sisi dan menghancurkannya. Selamanya. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Pengimbang + description: Multifungsional - Mendistribusikan seluruh input secara merata ke seluruh output. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Penggabung (Kompak) + description: Menggabungkan dua sabuk konveyor menjadi satu. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Penggabung (Kompak) + description: Menggabungkan dua sabuk konveyor menjadi satu. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Pemisah (Kompak) + description: Memisahkan satu sabuk konveyor menjadi dua. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Pemisah (Kompak) + description: Memisahkan satu sabuk konveyor menjadi dua. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Tempat Penyimpanan + description: Menyumpan bentuk yang berlebuhan, hingga kapasitas yang tertentu. Memprioritaskan output dari kiri wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Penyebrangan Kabel + description: Memungkinkan untuk menyebrangkan 2 kabel tanpa menyambungkannya. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Sinyal Konstan + description: Mengeluarkan sinyal yang konstan, dapat berupa bentuk, warna atau boolean (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Saklar + description: Dapat diubah untuk mengeluarkan sinyal boolean (1 / 0) pada lapisan kabel, + yang bisa digunakan untuk mengontrol seperti penyaring. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Gerbang AND + description: Mengeluarkan boolean "1" jika kedua input adalah benar. (Benar berarti sebuah bentuk, + warna atau boolean "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Gerbang NOT + description: Mengeluarkan boolean "1" jika input adalah tidak benar. (Benar berarti sebuah bentuk, + warna atau boolean "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Gerbang XOR + description: Mengeluarkan boolean "1" jika kedua input adalah benar, namun bukan keduanya. + (Benar berarti sebuah bentuk, warna atau boolean "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Gerbang OR + description: Mengeluarkan boolean "1" jika satu input adalah benar. (Benar berarti sebuah bentuk, + warna atau boolean "1") transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Melanjutkan sinyal dari input bawah jika input samping adalah benar (sebuah bentuk, + warna atau boolean "1") mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Melanjutkan sinyal dari input bawah jika input samping adalah benar (sebuah bentuk, + warna atau boolean "1") filter: default: name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + description: Hubungkan sebuah sinyal untuk merutekan semua benda yang cocok ke atas dan + sisanya ke kanan. Dapat juga dikontrol dengan sinyal boolean display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Layar + description: Hubungkan dengan sebuah sinyal untuk ditunjukkan pada layar - Dapat berupa bentuk, + warna atau boolean. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Pembaca Sabuk Konveyor + description: Memungkinkan untuk mengukur rata-rata benda yang melewati sabuk konveyor. Mengeluarkan output benda terakhir + yang dilewati pada lapisan kabel (Setelah terbuka). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Penganalisa bentuk + description: Menganalisa perempat bentuk pada kanan atas dan lapisan terbawah + lalu mengeluarkan bentuk dan warnanya. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Pembanding + description: Mengeluarkan boolean "1" jika kedua sinya adalah sama. Dapat membandingkan + Bentuk, warna dan boolean. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Pemotong Virtual + description: Memotong bentuk secara virtual menjadi dua bagian. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Pemutar Virtual + description: Memutar bentuk secara virtual, searah jarum jam dan tidak searah jarum jam. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Pemisah Tumpukan Virtual + description: Memisahkan lapisan teratas secara virtual ke output kanan dan + sisanya ke output kiri. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Penumpuk Virtual + description: Menumpuk bentuk kanan ke bentuk kiri secara virtual. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Pencat Virtual + description: Mengecat bentuk dari input bawah dengan warna + dari input kanan. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Pembuat Artikel + description: Hanya tersedia di dalam mode sandbox , Mengeluarkan sinyal yang diberikan dari + lapisan kabel ke lapisan biasa. storyRewards: reward_cutter_and_trash: title: Memotong Bentuk - desc: Anda baru saja membuka pemotong - ia memotong - bentuk-bentuk separuhnya dari atas ke bawah tanpa - memperhatikan orientasinya!

Pastikan Anda membuang yang tidak - terpakai, atau mesin akan macet - Untuk tujuan ini - saya memberikan Anda tong sampah, yang menghancurkan semua yang anda - masukkan kedalamnya! + desc: Pemotong telah dibuka, yang dapat memotong bentuk menjadi dua + secara vertikal apapun + orientasinya!

Pastikan untuk membuang sisanya, jika + tidak ini dapat menghambat dan memperlambat - karena ini + anda diberikan Tong sampah, yang menghapus + semua yang anda masukkan! reward_rotater: title: Memutar desc: Pemutar telah dibuka! Ia memutar bentuk-bentuk searah @@ -638,10 +627,9 @@ storyRewards: akan diletakkan diatas input kiri! reward_splitter: title: Pembagi/Penggabung - desc: Pengimbang multifungsi telah dibuka – Ia dapat digunakan - untuk membangun pabrik yang lebih besar dengan membagi dan - menggabungkan artikel-artikel ke berbagai sabuk - konveyor!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Terowongan desc: Terowongan telah dibuka – Sekarang Anda dapat memindahkan @@ -655,9 +643,10 @@ storyRewards: varian! reward_miner_chainable: title: Merantai Ekstraktor - desc: Anda telah membuka ekstraktor rantai! Ia dapat - meneruskan sumberdaya ekstraksinya ke ekstraktor - selanjutnya sehingga Anda dapat mengekstraksi dengan lebih efisien! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Terowongan Tingkat II desc: Anda telah membuka varian baru terowongan - Ia memiliki @@ -675,15 +664,18 @@ storyRewards: sekaligus mengonsumsi hanya satu warna daripada dua! reward_storage: title: Penyangga Penyimpanan - desc: Anda telah membuka varian dari tong sampah - Ia - memungkinkan Anda untuk menyimpan artikel-artikel sebanyak kapasitas - tertentu! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Permainan Bebas - desc: Anda berhasil! Anda telah membuka mode permainan bebas! - Ini berarti sekarang bentuk-bentuk akan dihasilkan secara acak! - (Jangan khawatir, lebih banyak konten akan direncanakan untuk versi - penuh!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Cetak Biru desc: Anda sekarang dapat menyalin dan meletakkan bagian dari @@ -724,8 +716,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-it.yaml b/translations/base-it.yaml index 97e7b541..7b006b89 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -2,61 +2,51 @@ steamPage: shortText: In shapez.io potrai costruire delle fabbriche per automatizzare la creazione e la combinazione di forme sempre più complesse, in una mappa infinita. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Discord ufficiale + intro: >- + Shapez.io è un gioco tranquillo nel quale dovrai costruire delle + fabbriche per la produzione automatizzata di forme geometriche. - In shapez.io potrai costruire delle fabbriche per automatizzare la creazione e la combinazione di forme sempre più complesse, in una mappa infinita. + All'aumentare del livello, le forme diventeranno sempre più complesse e dovrai espanderti sempre di più nella mappa infinita. - Una volta che avrai consegnato le forme richieste, progredirai nel gioco e sbloccherai dei miglioramenti per rendere la tua fabbrica più veloce. + E come se non bastasse, dovrai produrre esponenzialmente di più per soddisfare le richieste, l'unica possibilità è andare su grande scala! - Per rispondere alla crescente richiesta di forme, dovrai ingrandire la tua fabbrica - Non dimenticarti delle risorse, però; dovrai espanderti attraverso la [b]mappa infinita[/b]! + All'inizio lavorerai solo con le forme, ma in seguito dovrai colorarle; a questo scopo dovrai estrarre e mescolare i colori! - Presto dovrai mescolare colori e usarli per verniciare le tue forme - Combina le risorse dei colori rosso, verde e blu per produrre colori differenti, verniciare le forme con essi e soddisfare la richiesta. + Comprare il gioco su Steam ti garantirà l'accesso alla versone completa, ma puoi anche giocare una demo su shapez.io e decidere in seguito! + title_advantages: Vantaggi della versione completa + advantages: + - 12 nuovi livelli per un totale di 26 livelli + - 18 nuovi edifici per una fabbrica completamente automatizzata! + - 20 gradi di miglioramenti per molte ore di divertimento! + - L'aggiornamento dei Cavi per una dimensione completamente nuova! + - Modalità scura! + - Salvataggi illimitati + - Segnapunti illimitati + - Mi sostieni! ❤️ + title_future: Contenuti pianificati + planned: + - Archivio dei progetti (esclusiva della versione completa) + - Achievement di steam + - Modalità puzzle + - Minimappa + - Mod + - Modalità sandbox + - ... e molto altro! + title_open_source: Questo gioco è open source! + title_links: Link + links: + discord: Server Discord ufficiale + roadmap: Tabella di marcia + subreddit: Reddit + source_code: Codice sorgente (GitHub) + translate: Aiutaci a tradurre + text_open_source: >- + Chiunque può contribuire, partecipo attivamente nella community e cerco + di leggere tutti i suggerimenti e di prendere in considerazione tutti i + feedback, quando possibile. - Nel gioco sono presenti 18 livelli progressivi (Che già dovrebbero tenerti occupato per ore) Ma sto costantemente aggiungendo nuovi contenuti - C'è molto in programma! - - Acquistare il gioco ti darà accesso alla versione standalone, con caratteristiche aggiuntive e l'accesso ai nuovi contenuti sviluppati. - - [b]Vantaggi della versione completa[/b] - - [list] - [*] Modalità scura - [*] Segnapunti illimitati - [*] Salvataggi illimitati - [*] Opzioni aggiuntive - [*] In arrivo: Cavi ed energia! Previsti (approssimativamente) per la fine di Luglio 2020. - [*] Coming soon: Più livelli - [*] Mi consente di svillupare ulteriormente shapez.io ❤️ - [/list] - - [b]Aggiornamenti futuri[/b] - - Sto aggiornando il gioco molto di frequente e cerco di pubblicare un nuovo aggiornamento almeno una volta a settimana. - - [list] - [*] Mappe diverse e sfide (ad esempio mappe con ostacoli) - [*] Rompicapi (Consegna la forma richiesta utilizzando un'area limitata o un insieme ristretto di edifici) - [*] Una modalità storia in cui gli edifici hanno un costo. - [*] Generatore della mappa configurabile (Configura dimensione e densità delle forme/risorse, seed e altro) - [*] Tipi di forma aggiuntivi. - [*] Miglioramenti delle prestazioni (Il gioco funziona già piuttosto bene!) - [*] E molto altro! - [/list] - - [b]Questo gioco è open source![/b] - - Chiunque può contribuire, interagisco attivamente con la community, cerco leggere tutti i suggerimenti e tengo in considerazione i feedback quando possibile. Visita la mia pagina su trello per la tabella di marcia completa! - - [b]Links[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Server ufficiale Discord[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Tabella di marcia[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Codice sorgente(GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Aiuto per le traduzioni[/url] - [/list] - discordLinkShort: Official Discord + Controlla la mia pagina di trello per la tabella di marcia completa! global: loading: Caricamento error: Errore @@ -106,7 +96,7 @@ mainMenu: newGame: Nuova partita madeBy: Creato da subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Senza nome dialogs: buttons: ok: OK @@ -131,12 +121,14 @@ dialogs: text: "Impossibile caricare il salvataggio:" confirmSavegameDelete: title: Conferma eliminazione - text: Vuoi davvero eliminare la partita? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Impossibile eliminare text: "Impossibile eliminare il salvataggio:" restartRequired: - title: Restart richiesto + title: Riavvio richiesto text: Per applicare le nuove impostazioni è necessario riavviare del gioco. editKeybinding: title: Cambia comandi @@ -163,7 +155,7 @@ dialogs: desc: "Qui puoi trovare i cambiamenti dall'ultima volta che hai giocato:" upgradesIntroduction: title: Miglioramenti sbloccati - desc: Tutte le forme che produci possono essere utilizzate per i miglioramenti - + desc: Tutte le forme che produci possono essere utilizzate per i miglioramenti. Non distruggere le tue vecchie fabbriche! Puoi trovare i miglioramenti nell'angolo in alto a destra dello schermo. massDeleteConfirm: @@ -186,9 +178,8 @@ dialogs: trasportatori.
" createMarker: title: Nuovo segnapunto - desc: Dagli un nome con un significato, puoi anche includere il - codice di una figura (Che puoi generare qui) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Modifica segnapunto markerDemoLimit: desc: Puoi creare solo due segnapunti personalizzati nella Demo. Ottieni la @@ -207,18 +198,18 @@ dialogs: desc: Non puoi permetterti di incollare quest'area! Sei sicuro di volerla tagliare? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Imposta il segnale + descItems: "Scegli un oggetto predefinito:" + descShortKey: ... o inserisci il codice di una forma (Che puoi + generare qui) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Rinomina salvataggio. + desc: Qui puoi cambiare il nome del salvataggio. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Attento alle prestazioni + desc: Hai posizionato molti edifici, questo messaggio serve a ricordarti che il + gioco non può gestire una quantità infinita di edifici. Quindi cerca + di mantenere le tue fabbriche compatte! ingame: keybindingsOverlay: moveMap: Sposta @@ -299,7 +290,7 @@ ingame: delivered: title: Consegnate description: Mostra le forme che vengono consegnate all'edificio centrale. - noShapesProduced: No shapes have been produced so far. + noShapesProduced: Nessuna forma prodotta finora. shapesDisplayUnits: second: / s minute: / m @@ -321,7 +312,7 @@ ingame: waypoints: waypoints: Segnapunti hub: HUB - description: Click sinistro su un segnapunto per raggiungerlo, click destro per + description: Clic sinistro su un segnapunto per raggiungerlo, clic destro per cancellarlo.

Premi per creare un segnapunto dalla visuale corrente, oppure click destro per creare un segnapunto nella posizione selezionata. @@ -354,41 +345,41 @@ ingame: empty: Vuoto copyKey: Copia codice connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 trivella + n_miners: trivelle + limited_items: Limitato a watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Versione demo + desc: Clicca qui per vedere i vantaggi della versione Steam! + get_on_steam: Ottieni su Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Ottieni la versione completa! + no_thanks: No, grazie! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 nuovi livelli! + desc: Per un totale di 26 livelli! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 nuovi edifici + desc: Automatizza completamente la tua fabbrica! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ salvataggi + desc: Quanti ne desideri! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 gradi di miglioramenti + desc: Questa demo ne ha solo 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ segnapunti + desc: Non perderti nella tua fabbrica! wires: - title: Wires - desc: An entirely new dimension! + title: Cavi + desc: Un'intera nuova dimensione! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Modalità scura + desc: Smettila di maltrattare i tuoi occhi! support: - title: Support me - desc: I develop it in my spare time! + title: Sostienimi + desc: Lo sviluppo nel tempo libero! shopUpgrades: belt: name: Nastri, distribuzione e tunnel @@ -442,8 +433,8 @@ buildings: name: Ruotatrice (Ant.) description: Ruota le forme di 90 gradi in senso antiorario. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Ruotatrice (180) + description: Ruota le forme di 180 gradi. stacker: default: name: Impilatrice @@ -464,8 +455,9 @@ buildings: destro. quad: name: Verniciatrice (4x) - description: Consente di colorare ogni quadrante della forma con un colore - diverso. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Verniciatrice description: Colora l'intera forma dall'ingresso sinistro con il colore @@ -478,133 +470,138 @@ buildings: deliver: Consegna toUnlock: per sbloccare levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: Fine della demo wire: default: name: Cavo energetico description: Ti consente di trasportare energia. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Cavo + description: Trasmette segnali, che possono essere oggetti, colori o booleani (1 + / 0). Cavi di colore diverso non si connettono. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Bilanciatore + description: Multifunzionale, distribuisce equamente gli ogetti in ingresso tra + tutte le uscite. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Aggregatore (compatto) + description: Unisce due nastri in uno. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Aggregatore (compatto) + description: Unisce due nastri in uno. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Separatore (compatto) + description: Divide un nastro in due. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Separatore (compatto) + description: Divide un nastro in due. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Stoccaggio + description: Immagazzina gli oggetti in eccesso, fino ad una capacità massima. + Prioritizza l'uscita sinistra e può quindi essere usato per + gestire le eccedenze. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Incrocio cavi + description: Consente a due cavi di attraversarsi senza connettersi. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Segnale costante + description: Emette un segnale costante, che può essere una forma, un colore o + un booleano (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Bottone + description: Può essere azionato per emettere un segnale booleano (1 / 0) nel + livello dei cavi, che può essere usato per controllare, per + esempio, un filtro. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Porta AND + description: Emette un "1" booleano se entrambi gli ingressi sono veri. (Vero + significa forma, colore o "1" boolean) not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Porta NOT + description: Emette un "1" booleano se l'ingresso è falso. (Vero significa + forma, colore o "1" booleano) xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Porta XOR + description: Emette un "1" booleano se uno degli ingressi è vero, ma non se lo + sono entrambi. (Vero significa forma, colore o "1" booleano) or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Porta OR + description: Emette un "1" booleano se uno degli ingressi è vero. (Vero + significa forma, colore o "1" booleano) transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Inoltra il segnale dall'ingresso inferiore se l'ingresso laterale è + vero (una forma, un colore o "1"). mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Inoltra il segnale dall'ingresso inferiore se l'ingresso laterale è + vero (una forma, un colore o "1"). filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtro + description: Collega un segnale per mandare tutti gli oggetti corrispondenti + verso l'alto e i restanti verso destra. Può essere controllato + anche con segnali booleani. display: default: name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + description: Collega un segnale per mostrarlo sul display. Può essere una forma, + un colore o un booleano. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Lettore di nastri + description: Misura la portata media del nastro. Emette l'ultimo oggetto + transitato come segnale sul livello dei cavi (una volta + sbloccato). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Analizzatore di forma + description: Analizza il quadrante in alto a destra dello strato più basso della + forma e ne restituisce forma e colore. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Comparatore + description: Emette un "1" booleano se i due segnali sono identici. Può + comparare forme, colori e booleani. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Tagliatrice virtuale + description: Taglia virtualmente la forma in due metà. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Ruotatrice virtuale + description: Ruota virtualmente la forma, sia in senso orario che antiorario. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Disimpilatrice virtuale + description: Estrae virtualmente lo strato più alto e lo emette a destra, i + restanti sono emessi a sinistra. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Impilatrice virtuale + description: Impila visrtualmente la forma destra sulla sinistra. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Verniciatrice virtuale + description: Vernicia virtualmente la forma dall'ingresso inferiore con il + colore dall'ingresso destro. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Generatore di oggetti + description: Disponibile solo nella modalità sandbox, emette il segnale dal + livello dei cavi come oggetti sul livello normale. storyRewards: reward_cutter_and_trash: title: Taglio forme - desc: Hai appena sbloccato la tagliatrice - taglia le forme - verticalmente indipendentemente da come è - orientata!

Elimina gli scarti, o altrimenti si - bloccherà - A questo scopo ti ho dato un cestino, che - distrugge qualsiasi cosa tu metta dentro! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotazione desc: La ruotatrice è stata sbloccata! Ruota le forme di 90 @@ -622,48 +619,53 @@ storyRewards: combinare due colori mediante sintesi additiva! reward_splitter: title: Separatore/Agrregatore - desc: Il bilanciatore multifunzione è stato sbloccato - Può - essere usato per costruire fabbriche più grandi unendo o - dividendo gli oggetti tra diversi nastri!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel - desc: Il tunnel è stato sbloccato - In questo modo puoi + desc: Il tunnel è stato sbloccato. In questo modo puoi trasportare oggetti al di sotto di nastri ed edifici! reward_rotater_ccw: title: Rotazione antioraria - desc: Hai sbloccato una variante della ruotatrice - Consente di + desc: Hai sbloccato una variante della ruotatrice. Consente di ruotare in senso antiorario! Per costruirla, seleziona la ruotatrice e premi 'T' per cambiare variante! reward_miner_chainable: title: Estrattore a catena - desc: Hai sbloccato l'estrattore a catena! Può - trasferire le sue risorse ad altri estrattori, così - puoi estrarre risorse in modo più efficiente! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel grado II - desc: Hai sbloccato una nuova variante del tunnel - Ha un + desc: Hai sbloccato una nuova variante del tunnel. Ha un raggio più ampio e puoi anche mischiare le due varianti ora! reward_cutter_quad: title: Taglio quadruplo - desc: Hai sbloccato una variante della tagliatrice - Cconsente + desc: Hai sbloccato una variante della tagliatrice. Cconsente di tagliare le forme in quattro parti invece che in due! reward_painter_double: title: Verniciatura doppia - desc: Hai sbloccato una variante della verniciatrice - Funziona + desc: Hai sbloccato una variante della verniciatrice. Funziona come una normale verniciatrice, ma processa due forme alla volta consumando solo un'unità di colore invece che due! reward_storage: title: Unità di stoccaggio - desc: Hai sbloccato una variante del cestino - Consente di - immagazzinare oggetti fino ad una certa capacità! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Modalità libera - desc: Ce l'hai fatta! Hai sbloccato la modalità libera! Questo - significa che adesso le forme sono generate casualmente! (Non - preoccuparti, altri contenuti sono in programma per la versione - completa!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Progetti desc: Ora puoi copiare ed incollare parti della tua fabbrica! @@ -674,7 +676,7 @@ storyRewards: no_reward: title: Prossimo livello desc: "Questo livello non ti ha dato alcuna ricompensa, ma il prossimo lo farà! -

PS: Meglio non distruggere la fabbrica che hai costruito - +

PS: Meglio non distruggere la fabbrica che hai costruito. Successivamente avrai bisogno di tutte quelle forme per sbloccare i miglioramenti!" no_reward_freeplay: @@ -682,74 +684,79 @@ storyRewards: desc: Congratulazioni! Ci sono altri contenuti in prgramma per la versione completa! reward_stacker: - title: Stacker - desc: You can now combine shapes with the stacker! 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: Impilatrice + desc: Ora puoi combinare forme con l'impilatrice! I due + ingressi vengono combinati e se possono essere messi uno accanto + all'altro, verranno fusi. Altrimenti, l'ingresso + destro è impilato sopra il sinistro! reward_balancer: - title: Balancer + title: Bilanciatore desc: The multifunctional balancer has been unlocked - It can be used to build bigger factories by splitting and merging items onto multiple belts!

reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Aggregatore compatto + desc: Hai sbloccato un aggregatore, variante del + bilanciatore. Acetta due ingressi e li aggrega su + un unico nastro! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Lettore di nastri + desc: Hai sbloccato il lettore di nastri! Consente di misurare + la portata di un nastro.

E aspetta di sbloccare i cavi, + allora sì che sarà molto utile! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Ruotatrice (180 gradi) + desc: Hai appena sbloccato la ruotatrice a 180 gradi! Consente + di ruotare una forma di 180 gradi (Sorpresa! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Sengale costante + desc: Hai sblocatto l'edificio segnale costante sul livello dei + cavi! È utile collegarlo ai filtri oggetti per + esempio.

Il segnale costante può emettere una + forma, un colore o un + booleano (1 / 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Porte logiche + desc: Hai sbloccato le porte logiche! Magari non ne sarai + entusiasta, ma in realtà sono fantastiche!

Con quelle porte + ora puoi eseguire le operazioni logiche di AND, OR, XOR e + NOT.

Come bonus extra ti ho anche regalato un + transistor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Lavorazione virtuale + desc: Ti ho appena dato un bel po' di nuovi edifici che ti consentono di + simulare la lavorazione delle forme!

Ora + puoi simulare una tagliatrice, una ruotatrice, un'impilatrice e + molto altro sul livello dei cavi! In questo modo hai tre opzioni per + continuare il gioco:

-Costruisci una macchina + automatica per creare ogni possibile forma richiesta + dall'HUB (ti consiglio di provarci!).

- Costruisci qualcosa + di interessante con i cavi.

- Continua a giocare + normalmente.

Qualsiasi cosa tu scelga, riordati di + divertirti! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." + title: Cavi e Verniciatrice quadrupla + desc: "Hai appena sbloccato il livello dei cavi: È un livello + separato al di sopra di quello normale e introduce un sacco di nuove + meccaniche!

Per il momento ti ho sbloccato la + Verniciatrice quadrupla. Collega gli ingressi con i + quali vuoi dipingere nel livello dei cavi!

Per passare al + livello dei cavi, premi E." reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtro oggetti + desc: Hai sbloccato il filtro oggetti! Smisterà gli oggetti + verso l'alto o verso destra a seconda che corrispondano al sengale + dal livello dei cavi o no.

Puoi anche mandargli un segnale + booleano (1 / 0) per attivarlo o disattivarlo completamente. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Fine della demo + desc: Hai raggiunto la fine della demo! settings: title: Impostazioni categories: @@ -870,47 +877,49 @@ settings: selezionato indipendentemente dagli altri tipi. È utile se cambi spesso tipo di edificio. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Volume suoni + description: Imposta il volume per gli effetti sonori musicVolume: - title: Music Volume - description: Set the volume for music + title: Volume musica + description: Imposta il volume per la musica lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Risorse sulla mappa a bassa qualità + description: Semplifica il rendering delle risorse sulla mappa quando ingrandita + per migliorare le prestazioni. Ha anche un aspetto più pulito, + provalo! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Disattiva griglia + description: Disattivare la griglia può migliorare le prestazioni. Rende anche + il gioco visualmente più pulito! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Deseleziona edificio con il clic destro + description: Abilitato di default, se hai un edificio selezionato e premi il + tasto destro, deselezionerai l'edificio. Se disabilitato, puoi + cancellare edifici premendo il tasto destro mentre posizioni + edifici. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Texture in bassa qualità (Brutto) + description: Usa texture a bassa qualità per migliorare le prestazioni. Quesro + renderà il gioco molto brutto! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Mostra confini dei Chunk + description: Il gioco è diviso in blocchi 16x16 (Chunk), se attivi questa + opzione, i confini tra i Chunk verranno mostrati. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Scegli estrattore sui giacimenti di risorse + description: Attivato di default, seleziona l'estrattore se usi il contagocce + quando il cursore è su un giacimento risorse. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Nastri semplificati (Brutto) + description: Non renderizza gli oggetti sui nastri a meno che il cursore non sia + sopra il nastro per migliorare le prestazioni. Non lo raccomando + a meno che tu non abbia assolutamente bisogno di migliorare le + prestazioni. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Abilita scorrimento con il mouse + description: Consente di spostare la mappa spostando il mouse verso il bordo + dello schermo. La velocità dipende dall'impostazione Velocità di + movimento. rangeSliderPercentage: % keybindings: title: Comandi @@ -969,22 +978,22 @@ keybindings: pipette: Contagocce menuClose: Chiudi menù switchLayers: Cambia livello - wire: Cavo energetico - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing + wire: Cavo + balancer: Bilanciatore + storage: Stoccaggio + constant_signal: Segnale costante + logic_gate: Porta logica + lever: Bottone (normale) + filter: Filtro + wire_tunnel: Incrocio cavi display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + reader: Lettore nastri + virtual_processor: Tagliatrice virtuale transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Analizzatore forme + comparator: Comparatore + item_producer: Generatore di oggetti (Sandbox) + copyWireValue: "Cavi: Copia valore sotto il cursore" about: title: Riguardo questo gioco body: >- @@ -1010,63 +1019,76 @@ demo: exportingBase: Esportazione dell'intera base come immagine settingNotAvailable: Non disponibile nella demo. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - L'hub centrale accetta qualsiasi forma, non solo l'obiettivo corrente! + - Costruisci fabbriche modulari, sarà utile! + - Non costruire troppo vicino all'hub o diventerà tutto caotico! + - Se l'impilamento non funziona, prova a scambiare gli ingressi. + - Puoi cambiare la direzione del pianificatore nastri premendo R. + - Tenere premuto CTRL consente di trascinare i nastri senza + auto-orientamento. + - I rapporti rimangono uguali, fintanto che tutti i miglioramenti sono allo + stesso livello, + - L'esecuzione seriale è più efficiente di quella parallela. + - Più avanti nel gioco sbloccherai altre varianti degli edifici! + - Puoi usare T per cambiare variante. + - La simmetria è la chiave! + - Puoi intrecciare gradi diversi del tunnel. + - Cerca di costruire fabbriche compatte, sarai ricompensato! + - La verniciatrice ha una variante speculare che puoi selezionare con + T + - Avere i giusti rapporti tra gli edifici massimizzerà l'efficienza. + - Al massimo livello, 5 estrattori saturano un singolo nastro. + - Non dimenticare i tunnel! + - Non devi per forza dividere gli oggetti equamente per la massima + efficienza. + - Tenere premuto SHIFT attiva il pianificatore nastri, facilitando il + posizionamento dei nastri più lunghi + - Le tagliatrici tagliano sempre in verticale, indipendentemente dalla + direzione. + - Mischia tutti i tre colori per fare il bianco. + - L'unità di stoccaggio prioritizza la prima uscita. + - Impiega tempo per costruire design replicabili, ne vale la pena! + - Tenere premuto CTRL ti consente di piazzare multipli edifici. + - Puoi tenere premuto ALT per invertire la direzione dei nastri + posizionati. + - L'efficienza è la chiave! + - I giacimenti più lontani dall'hub contengono forme più complesse. + - Le macchine hanno una velocità limitata, distribuisci il carico per la + massima efficienza. + - Usa i bilanciatori per massimizzare l'efficienza. + - L'organizzazione è importante. Cerca di non incrociare troppo i nastri. + - Pianifica in anticipo, o diventerà tutto caotico! + - Non distruggere le tue vecchie fabbriche! Ti serviranno per sbloccare dei + miglioramenti. + - Cerca di risolvere il livello 20 da solo prima di chiedere aiuto! + - Non complicare le cose, cerca di mantenere la semplicità e farai strada. + - Dovrai riusare le tue fabbriche più avanti nel gioco. Pianifica le tue + fabbriche in modo che siano reutilizzabili. + - A volte, puoi trovare la forma che ti serve nella mappa senza crearla con + le impilatrici. + - Non troverai mai giacimenti di girandole complete. + - Colora le tue forme prima di tagliarle per la massima efficienza. + - Con i moduli, lo spazio è solo percezione, una preoccupazione per uomini + mortali. + - Costruisci una fabbrica dedicata per i progetti. Sono importanti per i + moduli. + - Guarda da vicino il mixer dei colori, e le tue domande avranno risposta. + - Usa CTRL + Clic per selezionare un'area. + - Costruire troppo vicino all'hub potrebbe intralciare progetti futuri. + - Premere la puntina vicino a ogni forma nel menù miglioramenti la farà + visualizzare sempre a schermo + - Mescola tutti i colori primari per fare il bianco! + - Hai una mappa finita, non incastrare la tua fabbrica, espanditi! + - Prova anhe factorio! È il mio gioco preferito. + - La tagliatrice quadrupla taglia in senso orario a partire dal quadrante in + alto a destra! + - Puoi scaricare i salvataggi dal menù principale! + - Questo gioco ha molti tasti di scelta rapida! Dai un'occhiata alla pagina + delle impostazioni + - Questo gioco ha molte impostazioni, dai un'occhiata! + - Il segnapunto dell'hub ha una piccola bussola per indicarne la direzione! + - Per svutare i nastri, taglia e re-incolla l'area nello stesso punto. + - Premi F4 per mostrare FPS e Tick al secondo. + - Press F4 due volte per mostrare la casella del cursore e della telecamera. + - Puoi cliccare a sinistra di una forma fermata a schermo per rimuoverla + dalla lisata. diff --git a/translations/base-ja.yaml b/translations/base-ja.yaml index 8c10a944..67372906 100644 --- a/translations/base-ja.yaml +++ b/translations/base-ja.yaml @@ -1,63 +1,55 @@ +--- steamPage: shortText: shapez.ioは無限のマップ内で様々な"形"を資源とし、段々と複雑になっていく形の作成や合成の自動化を目指して工場を構築するゲームです。 - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: 公式Discord + intro: >- + 工場の自動化ゲームはお好きですか?それなら間違いないでしょう! - shapez.ioは無限のマップ内で様々な"形"を資源とし、段々と複雑になっていく形の作成や合成の自動化を目指して工場を構築するゲームです。 求められた"形"を届けることで様々なアップグレードを手に入れることができ、さらに工場の効率を上げることができます。 + Shapez.ioは、様々な幾何学的形状を生成するために工場を建設する、落ち着いたゲームです。レベルが上がる毎に生成すべき形はどんどん複雑になり、工場を無限に広がるマップに拡張する必要があります。 - "形"の需要が増えるにつれ、工場を拡大する必要があります - より多くの資源を手に入れるために[b]無限のマップ[!b]を開拓していく必要があります。 + しかし、それだけでは不十分です。需要は指数関数的に上昇し、より多くの形状を生産する必要があり――"スケーリング"が、唯一の対抗策と成り得ます。最初は形状を加工するだけですが、後々着色も必要になってきます――それには色を抽出して、混ぜ合わせることが必要です! - "形"に色を塗る必要もあります - 赤、緑、青を混ぜ、さまざまな色を作り需要に応じて色が塗られた"形"を製造できます。 + Steamでゲームを購入するとフルバージョンで遊ぶことができますが、まずshapez.ioでデモをプレイし、その後で決めることもできます! + title_advantages: スタンドアロン版の特典 + advantages: + - 新しい12個のレベルが追加され、全部で26個のレベルになります。 + - 新しい18個のパーツが自動化工場建設のために使用できます! + - 20個のアップデートティアによって多くの時間楽しむことができます! + - ワイヤアップデートによって全く新次元の体験を得られます! + - ダークモード! + - セーブ数の上限がなくなります。 + - マップマーカー数の上限がなくなります。 + - 私をサポートできる!❤️ - 現在このゲームには18個のレベルがあり、今後これを拡大していく予定です - 他にも様々なアップデートを準備しています! + title_future: 計画中の要素 + planned: + - ブループリント (スタンドアロン版専用) + - Steamの実績 + - パズルモード + - ミニマップ + - MOD対応 + - サンドボックスモード + - ……あともっとたくさんの要素! + title_open_source: このゲームはオープンソースです! - このゲームを買うことによってスタンドアローン版の様々な機能が使えるようになり、新しいアップデートもすぐに手に入ります。 + text_open_source: >- + 誰でも参加することができます。私はコミュニティに積極的に参加し、すべての提案を確認し、可能な場合はフィードバックしようとしています。 - [b]スタンドアローン版で使える機能[/b] + 完全なロードマップについては、Trello boardを確認してください! - [list] - [*] ダークモード - [*] ウェイポイントの制限がありません - [*] セーブの数の制限がありません - [*] 様々な設定 - [*] 追加予定: ワイヤーとエネルギー! (7月末を目指しています) - [*] 追加予定: より多くのレベル - [*] shapez.io開発が助けられます❤️ - [/list] + title_links: リンク + links: + discord: 公式Discord + roadmap: ロードマップ + subreddit: Subreddit + source_code: ソースコード(GitHub) + translate: 翻訳を助けてください! - [b]今後の予定[/b] - - 週に一回はアップデートを出せることを目指しています。 - - [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] - - [b]このゲームはオープンソースです![/b] - - 誰でもこのゲームの開発を手伝うことができ、私もプレーヤーの意見をできるだけゲームに取り入れようとしています。 Trelloで今後の予定が全て確認できます。 - - [b]外部リンク[/b] - - [list] - [*] [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] - discordLinkShort: Official Discord global: loading: ロード中 error: エラー thousandsDivider: "," - decimalSeparator: . + decimalSeparator: "." suffix: thousands: k millions: M @@ -65,18 +57,18 @@ global: trillions: T infinite: 無限 time: - oneSecondAgo: 1 秒前 - xSecondsAgo: 秒前 - oneMinuteAgo: 1 分前 - xMinutesAgo: 分前 - oneHourAgo: 1 時間前 - xHoursAgo: 時間前 - oneDayAgo: 1 日前 - xDaysAgo: 日前 + oneSecondAgo: 1秒前 + xSecondsAgo: 秒前 + oneMinuteAgo: 1分前 + xMinutesAgo: 分前 + oneHourAgo: 1時間前 + xHoursAgo: 時間前 + oneDayAgo: 1日前 + xDaysAgo: 日前 secondsShort: 秒 - minutesAndSecondsShort: 秒 - hoursAndMinutesShort: 時間 分 - xMinutes: 分 + minutesAndSecondsShort: 秒 + hoursAndMinutesShort: 時間分 + xMinutes: 分 keys: tab: TAB control: CTRL @@ -86,22 +78,25 @@ global: space: SPACE demoBanners: title: デモ版 - intro: スタンドアローン版を手に入れ、すべての機能をアンロックしましょう! + intro: >- + スタンドアローン版を手に入れ、すべての機能をアンロックしましょう! mainMenu: play: プレイ - changelog: 更新履歴 - importSavegame: インポート - openSourceHint: このゲームはオープンソースです - discordLink: 公式Discord - helpTranslate: 翻訳に参加 - browserWarning: このゲームはお使いのブラウザでは速度が落ちることがあります。スタンドアローン版を入手するか、Chromeでプレイすることでこの問題は避けられます。 - savegameLevel: レベル - savegameLevelUnknown: 不明なレベル continue: 続きから newGame: 新規ゲーム - madeBy: 制作者 + changelog: 更新履歴 subreddit: Reddit - savegameUnnamed: Unnamed + importSavegame: インポート + openSourceHint: このゲームはオープンソースです + discordLink: 公式Discordサーバー + helpTranslate: 翻訳を助けてください! + madeBy: によって作られました + browserWarning: >- + このゲームはお使いのブラウザでは速度が落ちることがあります。スタンドアローン版を入手するか、Chromeでプレイすることでこの問題は避けられます。 + + savegameLevel: レベル + savegameLevelUnknown: 不明なレベル + savegameUnnamed: 無名のデータ dialogs: buttons: ok: OK @@ -115,87 +110,116 @@ dialogs: viewUpdate: アップデートを見る showUpgrades: アップグレード表示 showKeybindings: キー設定表示 + importSavegameError: title: インポートエラー - text: "セーブデータのインポートに失敗しました:" + text: >- + セーブデータのインポートに失敗しました: + importSavegameSuccess: title: セーブデータのインポートに成功 - text: セーブデータをインポートしました + text: セーブデータをインポートしました。 + gameLoadFailure: title: ゲームが壊れています - text: "セーブデータのロードに失敗しました:" + text: >- + セーブデータのロードに失敗しました: + confirmSavegameDelete: title: 削除確認 - text: 本当に削除しますか? + text: >- + 本当に削除しますか?

+ レベル: ''

+ この操作は取り消しできません! + savegameDeletionError: title: 削除に失敗 - text: "セーブデータの削除に失敗しました:" + text: >- + セーブデータの削除に失敗しました: + restartRequired: title: 再起動が必要 text: 設定を反映するには再起動が必要です + editKeybinding: title: キー設定の変更 - desc: 割当てるキーかマウスボタンを押してください。ESCでキャンセルします。 + desc: 割り当てるキーかマウスボタンを押してください。ESCでキャンセルします。 + resetKeybindingsConfirmation: title: キー設定のリセット desc: すべてのキー設定を初期値に戻します。実行する前によく確認してください。 + keybindingsResetOk: title: キー設定のリセット desc: キー設定を初期値に設定しました! + featureRestriction: title: デモ版 desc: アクセスした要素 () はデモ版では利用できません。スタンドアローン版の入手をご検討ください! + oneSavegameLimit: title: セーブデータ制限 desc: デモ版ではひとつのセーブデータのみ保持できます。既存のデータを削除するか、スタンドアローン版の入手をご検討ください! + updateSummary: title: 新アップデート! - desc: "前回からの変更点:" + desc: >- + 前回からの変更点: + upgradesIntroduction: title: アップグレード解除 desc: すべての納品された形はアップグレードの解除のためにカウントされています。作った生産ラインを削除しないようにしてください! アップグレードタブは画面の右上から確認できます。 + massDeleteConfirm: title: 削除確認 desc: 多数の建造物を削除しようとしています! ( 個の選択) 続行しますか? - blueprintsNotUnlocked: - title: 未解除 - desc: レベル12をクリアしてブループリント機能を解除してください! - keybindingsIntroduction: - title: 便利なキー設定 - desc: "このゲームには大規模な工場の構築をスムーズにするため、沢山のキー設定があります。 - 以下に数例を示します。詳細はキー設定を確認してください

CTRL + ドラッグ: 削除範囲を指定
SHIFT: 押し続けると1種の建造物を連続配置
ALT: 設置されたベルトの方向を逆転させる
" - createMarker: - title: マーカーを設置 - titleEdit: マーカーを編集 - desc: わかりやすい名前をつけてください。形を表す短いキーを含めることもできます。(ここから生成できます) - markerDemoLimit: - desc: デモ版ではマーカー設置は2つまでに制限されています。スタンドアローン版は無制限です! + massCutConfirm: title: カット確認 desc: 多数の建造物をカットしようとしています! ( 個の選択) 続行しますか? + massCutInsufficientConfirm: title: カット確認 desc: 設置コストが不足しています! 続行しますか? + + blueprintsNotUnlocked: + title: 未解除 + desc: レベル12をクリアしてブループリント機能を解除してください! + + keybindingsIntroduction: + title: 便利なキー設定 + desc: >- + このゲームには大規模な工場の構築をスムーズにするため、沢山のキー設定があります。 + 以下に数例を示します。詳細はキー設定を確認してください

+ CTRL + ドラッグ: 削除範囲を指定
+ SHIFT: 押し続けると1種の建造物を連続配置
+ ALT: 設置されたベルトの方向を逆転させる
+ + createMarker: + title: マーカーを設置 + titleEdit: マーカーを編集 + desc: わかりやすい名前をつけてください。形を表す短いキーを含めることもできます。(ここから生成できます) + editSignal: + title: 信号を設定 + descItems: >- + プリセットを選択: + descShortKey: もしくは形を表す短いキーを入力してください。 (ここから生成できます) + + markerDemoLimit: + desc: デモ版ではマーカー設置は2つまでに制限されています。スタンドアローン版は無制限です! + exportScreenshotWarning: title: スクリーンショット出力 desc: スクリーンショット出力を実行します。この処理は工場の全体像があまりに大きいと、 ゲームが遅くなったりクラッシュしてしまう可能性があります! - editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: セーブデータの名前を変更 + desc: セーブデータの名前を変更することができます + entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: パフォーマンスの警告 + desc: あなたは沢山の工場を配置しましたが、このゲームは無限の建物を処理できるわけではありません。これは友好的なリマインダですが、より工場をコンパクトにすることに挑戦してみてください。 + ingame: keybindingsOverlay: moveMap: マップ移動 @@ -216,10 +240,23 @@ ingame: copySelection: コピー clearSelection: 選択範囲をクリア pipette: ピペット - switchLayers: Switch layers + switchLayers: レイヤーを変更 + + colors: + red: 赤 + green: 緑 + blue: 青 + yellow: 黄 + purple: マゼンタ + cyan: シアン + white: 白 + black: 黒 + uncolored: 無色 + buildingPlacement: cycleBuildingVariants: キーを押して変更 hotkeyLabel: "ホットキー: " + infoTexts: speed: スピード range: レンジ @@ -228,41 +265,27 @@ ingame: itemsPerSecond: アイテム / 秒 itemsPerSecondDouble: (x2) tiles: タイル + levelCompleteNotification: levelTitle: レベル completed: 完了 unlockText: を解除! buttonNextLevel: 次のレベル + notifications: newUpgrade: 新しいアップグレードが利用可能です! gameSaved: ゲームをセーブしました。 - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: レベル をクリアしました! + shop: title: アップグレード buttonUnlock: アップグレード tier: 第 段階 + tierLabels: - - I - - II - - III - - IV - - V - - VI - - VII - - VIII - - IX - - X - - XI - - XII - - XIII - - XIV - - XV - - XVI - - XVII - - XVIII - - XIX - - XX + [I, II, III, IV, V, VI, VII, VIII, IX, X, XI, XII, XIII, XIV, XV, XVI, XVII, XVIII, XIX, XX] maximumLevel: 最大レベル (スピード x) + statistics: title: 統計情報 dataSources: @@ -276,437 +299,453 @@ ingame: title: 納品済 description: 中央の建造物に納品された形の総数です。 noShapesProduced: まだ形が生産されていません。 + shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / 秒 + minute: / 分 + hour: / 時間 + settingsMenu: playtime: プレイ時間 + buildingsPlaced: 建造物 beltsPlaced: ベルト + buttons: - continue: コンティニュー + continue: 続ける settings: 設定 menu: メニューに戻る + tutorialHints: title: ヒントが必要ですか? showHint: ヒントを見る hideHint: 閉じる + blueprintPlacer: cost: コスト + waypoints: waypoints: マーカー hub: HUB - description: マーカーを左クリックでその場所にジャンプ、右クリックで削除します。

- キーを押すことで現在地にマーカーを設置します。選択した位置で右クリックすることでもマーカー設置できます。 + description: >- + マーカーを左クリックでその場所にジャンプ、右クリックで削除します。

+ キーを押すことで現在地にマーカーを設置します。選択した位置で右クリックすることでもマーカー設置できます。 creationSuccessNotification: マーカーを設置しました + shapeViewer: + title: レイヤー + empty: 空 + copyKey: キーをコピー + interactiveTutorial: title: チュートリアル hints: 1_1_extractor: 抽出機円の形 の上において抽出しましょう! - 1_2_conveyor: "抽出機を コンベアベルト でHUBまで繋げましょう!

Tip: - マウスのドラッグ でベルトを引けます。" + 1_2_conveyor: >- + 抽出機を コンベアベルト でHUBまで繋げましょう!

Tip: マウスのドラッグ でベルトを引けます。 + 1_3_expand: "このゲームは放置系のゲームではありません! もっと早く要件を満たせるように、追加の抽出機とベルトを設置しましょう。

Tip: SHIFT キーを押し続けると抽出機を連続配置できます。Rキーで設置方向を回転できます。" - colors: - red: 赤 - green: 緑 - blue: 青 - yellow: 黄 - purple: 紫 - cyan: シアン - white: 白 - uncolored: 無色 - black: 黒 - shapeViewer: - title: レイヤー - empty: 空 - copyKey: Copy Key + connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1個の抽出機 + n_miners: 個の抽出機 + limited_items: に制限されます + watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: デモバージョン + desc: Steamバージョンの特典を確認するには、ここをクリックしてください! + get_on_steam: steamで購入 standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: フルバージョンを購入 + no_thanks: いいえ、結構です points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 新しい12個のレベル + desc: 全部で26個のレベルになります! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 新しい18個の設置物 + desc: あなたの工場を完全自動化しましょう! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: 無限個のセーブデータ + desc: あなたが望むだけデータを作成できます! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20個のアップデートティア + desc: このデモバージョンでは5ティアのみです! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: 無限個のマップマーカー + desc: これでもうあなたの工場を見失いません! wires: - title: Wires - desc: An entirely new dimension! + title: ワイヤ + desc: 新次元の体験を得られます! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: ダークモード + desc: 目に優しい! support: - title: Support me - desc: I develop it in my spare time! + title: 製作者をサポート + desc: 余暇に制作しています! shopUpgrades: belt: - name: ベルト、ディストリビュータ & トンネル + name: ベルト、ディストリビュータとトンネル description: スピード x → x miner: name: 抽出機 description: スピード x → x processors: - name: 切断、回転 & 積み重ね + name: 切断、回転と積み重ね description: スピード x → x painting: - name: 混合 & 着色 + name: 混合と着色 description: スピード x → x buildings: hub: deliver: 納品 toUnlock: 解除 levelShortcut: レベル - endOfDemo: End of Demo + endOfDemo: お試し終了 belt: default: - name: コンベアベルト + name: &belt コンベアベルト description: アイテムを輸送します。マウスドラッグで連続配置できます。 miner: default: - name: 抽出機 + name: &miner 抽出機 description: 形や色の上に設置することで抽出できます。 chainable: name: 連鎖抽出機 description: 形や色の上に設置することで抽出できます。連鎖設置可能です。 underground_belt: default: - name: トンネル + name: &underground_belt トンネル description: 建造物や他のベルトの地下を通してベルトを配置できます。 tier2: name: トンネル レベルII description: 建造物や他のベルトの地下を通してベルトを配置できます。 + balancer: + default: + name: &balancer 分配機/合流機 + description: 多機能 - すべての入力をすべての出力に均等に分配します。 + merger: + name: 合流機(コンパクト) + description: 2つの入力を1つの出力に合流させます。 + merger-inverse: + name: 合流機(コンパクト) + description: 2つの入力を1つの出力に合流させます。 + splitter: + name: 分配機(コンパクト) + description: 1つの入力を2つの出力に分配します。 + splitter-inverse: + name: 分配機(コンパクト) + description: 1つの入力を2つの出力に分配します。 cutter: default: - name: 切断機 + name: &cutter 切断機 description: 形を上下の直線で切断し、双方を出力します。もしひとつの出力しか使わない場合、他の出力を破棄しないと出力が詰まって停止することに注意してください! quad: name: 切断機 (四分割) description: 形を四分割します。もしひとつの出力しか使わない場合、他の出力を破棄しないと出力が詰まって停止することに注意してください! rotater: default: - name: 回転機 + name: &rotater 回転機 description: 形を時計回り方向に90度回転します。 ccw: name: 回転機 (逆) description: 形を反時計回り方向に90度回転します。 rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: 回転機 (180度) + description: 形を180度回転します。 stacker: default: - name: 積層機 + name: &stacker 積層機 description: 入力アイテムを積み重ねます。もしうまく統合できなかった場合は、右の入力アイテムを左の入力アイテムの上に重ねます。 mixer: default: - name: 混合機 + name: &mixer 混合機 description: 2つの色を加算混合で混ぜ合わせます。 painter: default: - name: 着色機 - description: 左から入力された形の全体を、右から入力された色で着色します。 + name: &painter 着色機 + description: &painter_desc 左から入力された形の全体を、上から入力された色で着色します。 + mirrored: + name: *painter + description: 左から入力された形の全体を、下から入力された色で着色します。 double: name: 着色機 (ダブル) description: 左から入力された形を、上から入力された色で着色します。 quad: name: 着色機 (四分割) - description: 入力された形を四分割づつ別の色で塗り分けられます。 - mirrored: - name: 着色機 - description: 左から入力された形の全体を、右から入力された色で着色します。 + description: 入力された形を四分割づつ別の色で塗り分けられます。 真らしい信号が流れているスロットのみがペイントされます! + trash: default: - name: ゴミ箱 + name: &trash ゴミ箱 description: すべての辺からの入力を破棄します。永遠に。 - wire: - default: - name: Energy Wire - description: Allows you to transport energy. - second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. - balancer: - default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. - merger: - name: Merger (compact) - description: Merges two conveyor belts into one. - merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. - splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. - splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: &storage ストレージ + description: >- + 所定の容量まで、アイテムを蓄えることができます。左側の出力が優先され、オーバーフローゲートとして利用できます。 + wire: + default: + name: &wire ワイヤ + description: &wire_desc 形状、色、真偽値(1/0)の信号を運ぶことができます。異なる色のワイヤは互いに接続しません。 + second: + name: *wire + description: *wire_desc + wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: &wire_tunnel 交差ワイヤ + description: 2本のワイヤを接続させることなく交差させることができます。 constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: &constant_signal 定値信号 + description: 常に同じ値を出力します。形状、色、真偽値(1/0)が使用できます。 lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: &lever スイッチ + description: >- + ワイヤ上に真偽値(1/0)を出力できます。スイッチを押すことで1と0を切り替えることができ、 + それを利用してアイテムフィルタ等を制御できます。 logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: ANDゲート + description: 両方の入力が真らしいなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NOTゲート + description: 入力が真らしくないなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: XORゲート + description: 両方の入力のうち片方のみが真らしいなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: ORゲート + description: 両方の入力のうち少なくとも片方が真らしいなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: &transistor トランジスタ + description: &transistor_desc 横からの入力が真らしいなら、下からの入力を通過させます。(真らしいとは、形状、色、または真偽値"1"のことです) mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: *transistor + description: *transistor_desc filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: &filter アイテムフィルタ + description: >- + 入力された信号と一致するアイテムを上部に通過させ、残りを右側に通過させます。 + 真偽値(1/0)でも制御できます。 display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: &display ディスプレイ + description: >- + 入力された信号をディスプレイに表示します。 + 形状、色、真偽値のいずれでも可能です。 reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: &reader ベルトリーダ + description: >- + 平均スループットを計測できます。 アンロック後は、 + 最後に通過したアイテムの情報を出力します。 analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: &analyzer 形状解析機 + description: 形状の最下層の右上の形状を分析し、形状と色に分解します。 comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: &comparator 比較機 + description: >- + 両方の信号が完全に一致している場合、真偽値"1"を出力します。 + 形状、色、真偽値を比較できます。 virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: &virtual_processor 仮想切断機 + description: 形状の信号を2つに切断できます。 rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: 仮想回転機 + description: 形状の信号を時計回り、反時計回りに回転させます。 unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: 仮想分離機 + description: 形状の信号の最上層を右側に出力し、残りの層を左側に出力します。 stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: 仮想積層機 + description: 左側の形状の信号の上に右側の形状の信号を合成します。 painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: 仮想着色機 + description: 下の形状の信号を右の色の信号で着色します。 item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: なんでも抽出機 + description: サンドボックスモードでのみ使用可能で、ワイヤレイヤーで与えられた信号の形状を通常レイヤーに出力します。 + storyRewards: reward_cutter_and_trash: title: 形の切断 - desc: 切断機が利用可能になりました。これは入力された形を、向きを考慮せず上下の直線で半分に切断します。

利用しない側の出力に注意しましょう。破棄するなどをしない限り詰まって停止してしまいます - - このためにゴミ箱も用意しました。入力アイテムをすべて破棄できます。 + desc: 切断機が利用可能になりました。これは入力された形を、向きを考慮せず上下の直線で半分に切断します。

利用しない側の出力に注意しましょう。破棄するなどをしない限り詰まって停止してしまいます - このためにゴミ箱も用意しました。入力アイテムをすべて破棄できます! reward_rotater: title: 回転 desc: 回転機が利用可能になりました。形を時計回り方向に90度回転させます。 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!" + desc: >- + 着色機が利用可能になりました。(今まで形状でやってきた方法で)色を抽出し、 + 形状と合成することで着色します!

追伸: もし色覚特性をお持ちでしたら、 + 設定に色覚特性モードがあります! reward_mixer: title: 色の混合 - desc: 混合機が利用可能になりました。 - - この建造物は2つの色を加算混合で混ぜ合わせます。 + desc: 混合機が利用可能になりました。 - この建造物は2つの色を加算混合で混ぜ合わせます。 reward_stacker: title: 積層機 desc: 積層機で形を組み合わせ可能になりました。双方の入力を組み合わせ、もし連続した形になっていればそれらは融合してひとつになります! もしできなかった場合は、左の入力の上に右の入力が重なります。 - reward_splitter: + reward_balancer: title: 分配機/合流機 - desc: 多機能な分配機/合流機が利用可能になりました。 - - より大規模な工場を構築するため、複数のベルト間でアイテムを合流、分配できます!

+ desc: >- + 多機能な分配機/合流機が利用可能になりました。 - より大規模な工場を構築するため、複数のベルト間でアイテムを合流、分配できます!

reward_tunnel: title: トンネル desc: トンネルが利用可能になりました。 - 他のベルトや建造物の地下を通してベルトが配置可能です! reward_rotater_ccw: title: 反時計回りの回転 - desc: 回転機のバリエーションが利用可能になりました。 - - 反時計回りの回転ができるようになります! 回転機を選択し、'T'キーを押すことで方向の切り替えができます + desc: 回転機のバリエーションが利用可能になりました。 - 反時計回りの回転ができるようになります! 回転機を選択し、'T'キーを押すことで方向の切り替えができます reward_miner_chainable: title: 連鎖抽出機 - desc: 連鎖抽出機が利用可能になりました。他の抽出機に出力を渡すことができるので、資源の抽出がより効率的になります! + desc: >- + 連鎖抽出機が利用可能になりました。他の抽出機に出力を渡すことができるので、資源の抽出がより効率的になります! + 補足: ツールバーの旧い抽出機が置き換えられました! reward_underground_belt_tier_2: title: トンネル レベルII - desc: トンネルのバリエーションが利用可能になりました。 - - 距離拡張版が追加され、以前のものと組み合わせて目的に応じて利用することができます! + desc: トンネルのバリエーションが利用可能になりました。 - 距離拡張版が追加され、以前のものと組み合わせて目的に応じて利用することができます! + reward_merger: + title: コンパクトな合流機 + desc: >- + 合流機コンパクトバージョンが利用可能になりました! - 2つの入力を1つの出力に合流させます! + reward_splitter: + title: コンパクトな分配機 + desc: >- + 分配機コンパクトバージョンが利用可能になりました! - 1つの入力を2つの出力に分配します! + reward_belt_reader: + title: ベルトリーダ + desc: >- + ベルトリーダが利用可能になりました!ベルトのスループットを計測できます。

ワイヤーのロックが解除されれば、より便利になります! reward_cutter_quad: title: 四分割 - desc: 切断機のバリエーションが利用可能になりました。 - + desc: >- + 切断機のバリエーションが利用可能になりました。 - 上下の二分割ではなく、四分割に切断できます! reward_painter_double: title: 着色機 (ダブル) - desc: 着色機のバリエーションが利用可能になりました。 - + desc: >- + 着色機のバリエーションが利用可能になりました。 - 通常の着色機と同様に機能しますが、ひとつの色の消費で一度に2つの形を着色処理できます! reward_storage: title: 余剰の貯蓄 - desc: ゴミ箱のバリエーションが利用可能になりました。 - 容量上限までアイテムを格納することができます! - reward_freeplay: - title: フリープレイ - desc: やりましたね! フリープレイモードが利用可能になりました。 - これからは形はランダムに生成されます! - (ご心配なく。スタンドアローン版はさらなる追加コンテンツが計画されています) + desc: >- + ゴミ箱のバリエーションが利用可能になりました。 - 容量上限までアイテムを格納することができます!

+ 左側の出力を優先するため、オーバーフローゲートとしても使用できます! + reward_blueprints: title: ブループリント desc: 工場の建造物のコピー&ペーストが利用可能になりました! 範囲選択(CTRLキーを押したままマウスドラッグ)した状態で、'C'キーを押すことでコピーができます。

ペーストはタダではありません。ブループリントの形を生産することで可能になります!(たった今納品したものです) + reward_rotater_180: + title: 180度の回転 + desc: >- + 回転機のバリエーションが利用可能になりました! + 180度の回転ができるようになります!(サプライズ! :D) + reward_wires_painter_and_levers: + title: ワイヤ&着色機(四分割) + desc: >- + ワイヤレイヤが利用可能になりました!: 通常レイヤとは別のレイヤーであり、異なる機能が使用できます!

+ 最初に、着色機(四分割)が利用可能です。着色したいスロットを、ワイヤレイヤで接続します。

+ ワイヤレイヤに切り替えるには、Eを押します。 + reward_filter: + title: アイテムフィルタ + desc: >- + アイテムフィルタが利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、 + アイテムを上部または右側の出力に分離します。

真偽値(0/1)信号を利用することで + どんなアイテムでも通過させるか、または通過させないかを選ぶこともできます。 + reward_display: + title: ディスプレイ + desc: >- + ディスプレイが利用可能になりました! ワイヤレイヤで信号を接続することで、その内容を視認することができます! + 補足: ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか?ディスプレイに表示するのを試してみてください! + reward_constant_signal: + title: 定数信号 + desc: >- + 定数信号が利用可能になりました! + これは、例えばアイテムフィルタに接続する場合に便利です。 + 定数信号は、形状、または真偽値(1/0)を出力できます。 + reward_logic_gates: + title: 論理ゲート + desc: >- + 論理ゲートが利用可能になりました! 興奮するほどでは + ありませんが、これらは非常に優秀です!

+ AND, OR, XOR and NOTを計算できます!

ボーナスとしてトランジスタも追加しました! + reward_virtual_processing: + title: 仮想処理 + desc: >- + 形状処理をシミュレートできる新しい部品を沢山追加しました!

+ ワイヤレイヤで切断、回転、積層をシミュレートできるようになりました。 + これからゲームを続けるにあたり、3つの方法があります:

+ - 完全自動化された機械を構築し、HUBが要求する形状を作成する(試してみることをオススメします!)。

+ - ワイヤでイカしたものを作る。

+ - 今までのように工場を建設する。

+ いずれにしても、楽しんでください! + no_reward: title: 次のレベル - desc: "このレベルには報酬はありません。次にはあるでしょう!

PS: すでに作った生産ラインは削除しないようにしましょう。 - - 生産された形はすべて、後にアップグレードの解除のために必要になりま\ - す!" + desc: >- + このレベルには報酬はありません。次にはあるでしょう!

補足: すでに作った生産ラインは削除しないようにしましょう。 - + 生産された形はすべて、後にアップグレードの解除のために必要になります! no_reward_freeplay: title: 次のレベル - desc: おめでとうございます! スタンドアローン版ではさらなる追加要素が計画されています! - reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

- reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! - reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! - reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) - reward_display: - title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! - reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). - reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! - reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! - reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." - reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + desc: >- + おめでとうございます! + reward_freeplay: + title: フリープレイ + desc: >- + やりましたね! フリープレイモードが利用可能になりました。 - これからは納品すべき形はランダムに生成されます!

+ 今後、ハブにはスループットが必要になるため、要求する形状を自動的に納品するマシンを構築することを強くお勧めします!

+ ハブは要求する形状をワイヤー層に出力するので、それを分析し自動的に調整する工場を作成するだけです。 + reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: お試し終了 + desc: >- + デモ版の最後に到達しました! settings: title: 設定 categories: - general: General - userInterface: User Interface - advanced: Advanced - performance: Performance + general: 一般設定 + userInterface: ユーザーインターフェイス + advanced: 高度な設定 + performance: パフォーマンス versionBadges: - dev: Development + dev: 開発 staging: Staging prod: Production - buildDate: Built + buildDate: にビルド + rangeSliderPercentage: % labels: uiScale: title: 画面表示サイズ - description: ユーザーインターフェイスのサイズを変更します。解像度をベースに調整されますが、この設定でそれを変更できます。 + description: >- + ユーザーインターフェイスのサイズを変更します。解像度をベースに調整されますが、この設定でそれを変更できます。 scales: super_small: 極小 small: 小 regular: 普通 large: 大 huge: 極大 + autosaveInterval: + title: オートセーブ間隔 + description: >- + ゲームが自動的にセーブされる頻度を設定します。無効化することも可能です。 + + intervals: + one_minute: 1分 + two_minutes: 2分 + five_minutes: 5分 + ten_minutes: 10分 + twenty_minutes: 20分 + disabled: 無効 scrollWheelSensitivity: title: ズーム感度 description: マウスやトラックパッドでのズーム感度を変更します。 @@ -716,9 +755,22 @@ settings: regular: 普通 fast: 速 super_fast: 超速 + movementSpeed: + title: 移動速度 + description: キーボードを使用した際の画面の移動速度を変更します。 + speeds: + super_slow: 激遅 + slow: 遅い + regular: 普通 + fast: 速い + super_fast: 超速 + extremely_fast: ちょっぱや language: title: 言語 description: 言語を変更します。すべての翻訳はユーザーからの協力で成り立っており、まだ完全には完了していない可能性があります! + enableColorBlindHelper: + title: 色覚モード + description: 色覚特性を持っていてもゲームがプレイできるようにするための各種ツールを有効化します。 fullscreen: title: フルスクリーン description: フルスクリーンでのプレイが推奨です。スタンドアローン版のみ変更可能です。 @@ -728,6 +780,13 @@ settings: musicMuted: title: BGMミュート description: 有効に設定するとすべてのBGMをミュートします。 + soundVolume: + title: 音量(SE) + description: 効果音の音量を設定してください。 + + musicVolume: + title: 音量(BGM) + description: 音楽の音量を設定してください。 theme: title: ゲームテーマ description: ゲームテーマを選択します。 (ライト / ダーク). @@ -743,16 +802,7 @@ settings: offerHints: title: ヒントとチュートリアル description: ゲーム中、ヒントとチュートリアルを表示します。レベルごとに不要なUI要素も非表示になり、ゲームに集中しやすくなります。 - movementSpeed: - title: 移動速度 - description: キーボードを使用した際の画面の移動速度を変更します。 - speeds: - super_slow: 極遅 - slow: 遅 - regular: 普通 - fast: 速 - super_fast: 超速 - extremely_fast: 超々速 + enableTunnelSmartplace: title: スマートトンネル description: 有効にすると、トンネルを設置した際に不要なベルトを自動的に除去します。 @@ -760,77 +810,56 @@ settings: vignette: title: ビネット description: 画面の隅を暗くして文字を読みやすくするビネットを有効化します。 - autosaveInterval: - title: オートセーブ間隔 - description: ゲームが自動的にセーブされる頻度を設定します。無効化することも可能です。 - intervals: - one_minute: 1 分 - two_minutes: 2 分 - five_minutes: 5 分 - ten_minutes: 10 分 - twenty_minutes: 20 分 - disabled: 無効 + rotationByBuilding: + title: 回転の記憶(部品別) + description: それぞれの部品ごとの回転を記憶させます。頻繁に設置物を変更する場合、より快適に建設が行なえます。 compactBuildingInfo: title: コンパクトな建造物情報 description: レートのみを表示することで、建造物の情報ボックスを短くします。選択しない場合は、説明文と画像も表示されます。 disableCutDeleteWarnings: title: カット/削除の警告を無効化 - description: 100個以上のエンティティをカット/削除する際に表示される警告ダイアログを無効にします。 - enableColorBlindHelper: - title: 色覚モード - description: 色覚異常を持っていてもゲームがプレイできるようにするための各種ツールを有効化します。 - 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. - soundVolume: - title: Sound Volume - description: Set the volume for sound effects - musicVolume: - title: Music Volume - description: Set the volume for music + description: >- + 100個以上のエンティティをカット/削除する際に表示される警告ダイアログを無効にします。 + lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: リソース表示の簡易化 + description: ズームインしたときのリソース表示を簡素化して、パフォーマンスを向上させます。 + 外見もすっきりしますので、ぜひお試しください! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: グリッドの無効化 + description: 配置用のグリッドを無効にして、パフォーマンスを向上させます。 + これにより、ゲームの見た目もすっきりします。 clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: 右クリックで配置をキャンセル + description: + デフォルトで有効です。建物を設置しているときに右クリックすると、選択中の建物がキャンセルされます。 + 無効にすると、建物の設置中に右クリックで建物を削除できます。 lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: 低品質のテクスチャ(視認性低下) + description: 低品質のテクスチャを使用してパフォーマンスを向上させます。 + ゲームの視認性が非常に低下します! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: チャンクの境界線を表示する + description: このゲームでは16x16タイルのチャンクで構成されています。 + 有効にすると、チャンクの境界線が表示されます。 pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: 資源で抽出機を選択 + description: デフォルトで有効です。資源の上でスポイトを使用すると、抽出機を選択します。 simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: ベルトを単純化(視認性低下) + description: ベルトにカーソルを合わせているとき以外、ベルトで運ばれているアイテムを描画しません。 + パフォーマンスを向上させますが、パフォーマンスが極端に必要な場合以外でこの設定で遊ぶことは推奨しません。 enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. - rangeSliderPercentage: % + title: マウスで画面を移動 + description: 画面の端にカーソルを合わせることで移動できます。移動速度を設定することで、速度を変更できます。 + keybindings: title: キー設定 - hint: "Tip: CTRL, SHIFT, ALTを利用するようにしてください。これらはそれぞれ建造物配置の際の機能があります。" + hint: >- + Tip: CTRL, SHIFT, ALTを利用するようにしてください。これらはそれぞれ建造物配置の際の機能があります。 + resetKeybindings: キー設定をリセット + categoryLabels: general: アプリケーション ingame: ゲーム @@ -846,64 +875,75 @@ keybindings: mapMoveRight: 右移動 mapMoveDown: 下移動 mapMoveLeft: 左移動 + mapMoveFaster: より速く移動 centerMap: マップ中央移動 + mapZoomIn: ズームイン mapZoomOut: ズームアウト createMarker: マーカー設置 + menuOpenShop: アップグレード menuOpenStats: 統計情報 menuClose: メニューを閉じる + toggleHud: HUD切り替え toggleFPSInfo: FPS、デバッグ情報表示切り替え - belt: コンベアベルト - underground_belt: トンネル - miner: 抽出機 - cutter: 切断機 - rotater: 回転機 - stacker: 積層機 - mixer: 混合機 - painter: 着色機 - trash: ゴミ箱 + switchLayers: レイヤを変更 + exportScreenshot: 工場の全体像を画像出力 + + # --- Do not translate the values in this section + belt: *belt + balancer: *balancer + underground_belt: *underground_belt + miner: *miner + cutter: *cutter + rotater: *rotater + stacker: *stacker + mixer: *mixer + painter: *painter + trash: *trash + storage: *storage + wire: *wire + constant_signal: *constant_signal + logic_gate: Logic Gate + lever: *lever + filter: *filter + wire_tunnel: *wire_tunnel + display: *display + reader: *reader + virtual_processor: *virtual_processor + transistor: *transistor + analyzer: *analyzer + comparator: *comparator + item_producer: なんでも抽出機(サンドボックス) + # --- + + pipette: スポイト rotateWhilePlacing: 回転 - rotateInverseModifier: "Modifier: 逆時計回りにする" + rotateInverseModifier: >- + Modifier: 逆時計回りにする cycleBuildingVariants: バリエーション変更 confirmMassDelete: 複数選択削除の確認 + pasteLastBlueprint: 直前のブループリントをペーストする cycleBuildings: 建造物の選択 + lockBeltDirection: ベルトプランナーを有効化 + switchDirectionLockSide: >- + プランナー: 通る側を切り替え + copyWireValue: >- + ワイヤ: カーソルに合っている形状信号をキーとしてコピー massSelectStart: マウスドラッグで開始 massSelectSelectMultiple: 複数範囲選択 massSelectCopy: 範囲コピー + massSelectCut: 範囲カット + placementDisableAutoOrientation: 自動向き合わせ無効 placeMultiple: 配置モードの維持 placeInverse: ベルトの自動向き合わせを逆転 - pasteLastBlueprint: 直前のブループリントをペーストする - massSelectCut: 範囲カット - exportScreenshot: 工場の全体像を画像出力 - mapMoveFaster: より速く移動 - lockBeltDirection: ベルトプランナーを有効化 - switchDirectionLockSide: "プランナー: 通る側を切り替え" - pipette: ピペット - switchLayers: Switch layers - wire: Energy Wire - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + about: title: このゲームについて body: >- - このゲームはオープンソースであり、Tobias Springer (私)によって開発されています。

+ このゲームはオープンソースであり、Tobias Springer (私)によって開発されています。

開発に参加したい場合は以下をチェックしてみてください。shapez.io on github.

@@ -921,65 +961,63 @@ demo: oneGameLimit: セーブデータの1個制限 customizeKeybindings: キー設定のカスタマイズ exportingBase: 工場の全体像の画像出力 + settingNotAvailable: デモ版では利用できません。 + tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - ハブは現在指定されている形状だけではなく、あらゆる種類の入力を受け付けることができます。 + - あなたの工場が拡張可能か確認してください - あとで報われるでしょう! + - ハブのすぐ近くに建設しないでください。ぐちゃぐちゃになりますよ。 + - 積層が上手く行かない場合は、入力を入れ替えてみてください。 + - Rを押すと、ベルトプランナーの経由方向を切り替えることができます。 + - CTRLを押したままドラッグすると、向きを保ったままベルトを設置できます。 + - アップグレードが同じティアなら、お互いの比率は同じです。 + - 直列処理は、並列処理より効率的です。 + - 後半になると、より多くの建物のバリエーションを解除できます。 + - Tを押すと、建物のバリエーションを切り替えることができます。 + - 対称性が重要です! + - ティアの違うトンネル同士は、同じラインに重ねることができます。 + - コンパクトに工場を作ってみてください - あとで報われるでしょう! + - 着色機には鏡写しのバリエーションがあり、Tで選択できます。 + - 適切な比率で建設することで、効率が最大化できます。 + - 最大レベルでは、1つのベルトは5つの抽出機で満たすことができます。 + - トンネルを忘れないでください。 + - 最大限の効率を得るためには、アイテムを均等に分割する必要はありません。 + - SHIFTを押したままベルトを設置するとベルトプランナーが有効になり、 + - 切断機は向きを考慮せず、常に垂直に切断します。 + - 白を作るためには、3色全てを混ぜます。 + - ストレージは優先出力を優先して出力します。 + - 増築可能なデザインを作るために時間を使ってください - それには価値があります! + - SHIFTを使用すると複数の建物を配置できます。 + - ALTを押しながらベルトを設置すると、逆向きに設置できます。 + - 効率が重要です! + - ハブから遠くに離れるほど、形状資源はより複雑な形になります。 + - 機械の速度には上限があるので、最大効率を得るためには入力を分割します。 + - 効率を最大化するために分配機/合流機を使用できます。 + - 構成が重要です。ベルトを交差させすぎないようにしてください。 + - 事前設計が重要です。さもないとぐちゃぐちゃになりますよ! + - 旧い工場を撤去しないでください!アップグレードを行うために、それらが必要になります。 + - 助けなしでレベル20をクリアしてみてください! + - 複雑にしないでください。単純に保つことができれば、成功することができるでしょう。 + - ゲームの後半で工場を再利用する必要があるかもしれません。 + - 積層機を使用することなく、必要な形状資源を発見することができるかもしれません。 + - 完全な風車の形は資源としては生成されません。 + - 最大の効率を得るためには、切断する前に着色をしてください。 + - モジュールとは、知覚こそが空間を生むものである。これは、人間である限り。 + - 工場の設計図を蓄えておいてください。それらを再利用することで、新たな工場が作成できます。 + - 混合機をよく見ると、色の混ぜ方が解ります。 + - CTRL + クリックで範囲選択ができます。 + - ハブに近すぎる設計物を作ると、のちの設計の邪魔になる可能性があります。 + - アップグレードリストの各形状の横にあるピンのアイコンは、それを画面左に固定します。 + - 原色全てを混ぜ合わせると白になります! + - マップは無限の広さがあります。臆せずに拡張してください。 + - Factorioもプレイしてみてください!私のお気に入りのゲームです。 + - 切断機(四分割)は右上から時計回りに切断します! + - メインメニューからセーブデータを保存できます! + - このゲームには便利なキーバインドがたくさんあります!設定ページを見てみてください。 + - このゲームにはたくさんの設定があります!是非チェックしてみてください! + - ハブを示すマーカーには、その方向を示す小さなコンパスがあります。 + - ベルトをクリアするには、範囲選択して同じ場所に貼り付けをします。 + - F4を押すことで、FPSとTickレートを表示することができます。 + - F4を2回押すと、マウスとカメラの座標を表示することができます。 + - 左のピン留めされた図形をクリックして、固定を解除できます。 diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml index 1414fa43..7c244125 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -1,63 +1,48 @@ steamPage: shortText: shapez.io는 무한한 공간에서 점점 더 복잡한 도형의 생산과 조합을 자동화하는 공장을 짓는 게임입니다. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: 공식 Discord + intro: + Shapez.io는 다양한 기하학적 도형을 만드는 공장을 건설하는 편안한 게임입니다. 레벨이 올라갈수록 더욱 복잡한 도형을 만들어야 하고 그만큼 무한히 커지는 지도 안에 당신의 공장을 세워야 합니다. - shapez.io는 무한한 공간에서 점점 더 복잡한 도형의 생산과 조합을 자동화하는 공장을 짓는 게임입니다. 요청된 도형을 전달해 게임을 진행하고 업그레이드를 통해 공장을 가속시킬 수 있습니다. + 심지어 그것만으로는 충분하지 않을 겁니다. 수요는 기하급수적으로 늘어나게 될 것이고, 더욱 복잡한 도형을 더욱 많이 생산하여야 하므로, 유일하게 도움이 되는 것은 끊임없이 확장을 하는 것입니다! 처음에는 단순한 도형만을 만들지만, 나중에는 색소를 추출하고 혼합하여 도형에 색칠을 해야 합니다! - 도형에 대한 수요가 증가함에 따라, 여러분은 수요에 맞게 공장을 확장해야 합니다. - [b]무한한 공간[/b]으로 확장하여 도형 재료를 구하는 것도 잊지 마세요. + Steam에서 게임을 구매하여 정식 버전의 콘텐츠를 사용하실 수 있지만, 먼저 Shapez.io의 체험판 버전을 플레이해보시고 구매를 고려하셔도 됩니다! + title_advantages: 정식 버전의 장점 + advantages: + - 새로운 12 레벨의 추가로 총 26레벨까지 + - 완벽한 자동화를 위한 새로운 18개의 건물! + - 20 티어 업그레이드로 오랫동안 즐겨보세요! + - 전선 업데이트로 완전히 새로운 차원을 접해보세요! + - 다크 모드! + - 무한한 세이브 파일 + - 무한한 마커 + - 저를 지원해주세요! ❤️ + title_future: 계획된 콘텐츠 + planned: + - 청사진 라이브러리 + - Steam 도전과제 + - 퍼즐 모드 + - 미니맵 + - 모드 + - 샌드박스 모드 + - ... 그리고 더 다양한 것까지! + title_open_source: 이 게임은 오픈 소스입니다! + title_links: 링크 + links: + discord: 공식 Discord + roadmap: 로드맵 + subreddit: Subreddit + source_code: 소스 코드 (GitHub) + translate: 번역에 도움주세요 + text_open_source: + 누구나 번역에 기여하실 수 있으며, 저는 커뮤니티에서 적극적으로 참여하여 모든 제안을 검토하고 가능한 모든 피드백도 고려하고자 합니다. - 곧이어 여러분은 색을 섞고 도형을 색칠 할 것입니다. - 빨강, 초록, 파랑 색을 섞어서 만든 다양한 색으로 수요를 만족시키세요. - - 이 게임에는 18개의 레벨이 있습니다 (이것 만으로도 여러분은 이미 몇시간이 걸렸을 거예요!) 하지만 저는 항상 새로운 콘텐츠를 추가하고 있습니다 - 계획해 놓은 것들이 많습니다! - - 게임을 구입하면 추가 기능이 있는 독립 실행형 버전을 이용할 수 있으며 새로 개발된 기능도 이용할 수 있습니다. - - [b]유료 버전의 장점[/b] - - [list] - [*] 다크 모드 - [*] 제한 없는 마커 - [*] 제한 없는 저장 - [*] 더 다양한 설정 - [*] 출시 예고: 전선 & 에너지! 2020년 7월 말을 목표로 하는 중. - [*] 출시 예고: 더 많은 레벨 - [*] shapez.io를 개발하는 데 도움이 됨 ❤️ - [/list] - - [b]향후 업데이트[/b] - - 저는 게임을 자주 업데이트하고 있고 적어도 매주마다 업데이트를 추진하려고 노력 중입니다! - - [list] - [*] 다양한 맵과 챌린지 (e.g. 장애물이 있는 맵) - [*] 퍼즐 (제한된 영역/건물만으로 도형 전달하기) - [*] 건물에 비용이 드는 스토리 모드 - [*] 설정 가능한 맵 생성기 (자원/도형, 크기/밀도, 시드 등) - [*] 더 많은 종류의 도형 - [*] 성능 향상 (지금도 게임이 잘 되긴 합니다!) - [*] 그 외 다수! - [/list] - - [b]이 게임은 오픈소스 입니다![/b] - - 누구나 참여할 수 있으며, 저는 커뮤니티에 적극적으로 참여하고 있고 가능한 경우 모든 제안을 검토하고 피드백을 고려하려고 합니다. 전체 로드맵을 위해 반드시 내 Trello 보드를 확인하세요! - - [b]링크[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]공식 디스코드[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]로드맵[/url] - [*] [url=https://www.reddit.com/r/shapezio]서브레딧[/url] - [*] [url=https://github.com/tobspr/shapez.io]소스 코드 (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]번역을 도와주세요![/url] - [/list] - discordLinkShort: Official Discord + 모든 로드맵을 보시려면 저의 trello 보드를 참고해주세요. global: - loading: 로딩중 - error: 에러 + loading: 불러오는 중 + error: 오류 thousandsDivider: "," - decimalSeparator: . + decimalSeparator: "." suffix: thousands: k millions: M @@ -85,8 +70,8 @@ global: shift: SHIFT space: SPACE demoBanners: - title: 무료 버전 - intro: 유료 버전을 구매해서 모든 콘텐츠를 사용해 보세요! + title: 체험판 버전 + intro: 정식 버전을 구매해서 모든 콘텐츠를 사용해 보세요! mainMenu: play: 시작 changelog: 버전 기록 @@ -94,15 +79,14 @@ mainMenu: openSourceHint: 이 게임은 오픈 소스입니다! discordLink: 공식 디스코드 서버 helpTranslate: 번역을 도와주세요! - browserWarning: 이 게임은 당신의 브라우저에서 느리게 작동하는 것으로 알려져 있습니다. 더 좋은 성능을 위해 유료 버전을 구매하거나 - 크롬을 다운받으세요. + browserWarning: 이 게임은 현재 브라우저에서 느리게 작동하는 것으로 알려져 있습니다! 더 좋은 성능을 위해 정식 버전을 구매하거나 Google Chrome 브라우저를 다운로드하세요. savegameLevel: 레벨 - savegameLevelUnknown: 레벨 모름 + savegameLevelUnknown: 미확인 레벨 continue: 계속하기 - newGame: 새 게임 + newGame: 새로하기 madeBy: 제작 - subreddit: 레딧 - savegameUnnamed: Unnamed + subreddit: Reddit + savegameUnnamed: 이름 없음 dialogs: buttons: ok: 확인 @@ -118,132 +102,136 @@ dialogs: showKeybindings: 조작법 보기 importSavegameError: title: 불러오기 오류 - text: "저장 파일을 불러오지 못했습니다:" + text: + 세이브 파일을 불러오지 못했습니다: importSavegameSuccess: - title: 저장 파일 불러오기 성공 - text: 저장 파일을 성공적으로 불러왔습니다. + title: 세이브 파일 불러오기 성공 + text: 세이브 파일을 성공적으로 불러왔습니다. gameLoadFailure: - title: 저장 파일 에러 - text: "저장 파일을 불러오지 못했습니다:" + title: 세이브 파일 에러 + text: + 세이브 파일을 불러오지 못했습니다: confirmSavegameDelete: title: 삭제 확인 - text: 이 게임 파일을 정말로 삭제하겠습니까? + text: 이 세이브 파일을 정말로 삭제하시겠습니까?

+ '' 레벨

+ 이 작업은 되돌릴 수 없습니다! savegameDeletionError: title: 삭제 실패 - text: 저장 파일을 삭제하지 못했습니다. + text: 세이브 파일을 삭제하지 못했습니다. restartRequired: - title: 다시 시작 필요 - text: 설정을 적용하려면 게임을 다시 시작해야 됩니다. + title: 게임 재시작 필요 + text: 설정을 적용하려면 게임을 재시작해야 합니다. editKeybinding: - title: 키바인딩 바꾸기 + title: 조작법 바꾸기 desc: 당신이 원하는 키나 마우스 버튼을 눌러서 바꾸거나 ESC를 눌러 취소하세요. resetKeybindingsConfirmation: - title: 키바인딩 재설정 - desc: 이것은 모든 키바인딩을 기본값으로 초기화합니다. + title: 조작법 초기화 + desc: 설정된 모든 조작법이 기본값으로 초기화됩니다. 초기화 전에 확인해 주세요. keybindingsResetOk: - title: 키바인딩 재설정 완료 - desc: 모든 키바인딩이 기본값으로 재설정 되었습니다! + title: 조작법 초기화 완료 + desc: 모든 조작법이 기본값으로 초기화 되었습니다! featureRestriction: title: 체험판 버전 - desc: 체험판 버전에는 없는 콘텐츠()로 시도했습니다. 유료 버전을 구입해서 모든 콘텐츠를 사용해보세요! + desc: 체험판 버전에는 없는 콘텐츠 ()로 시도했습니다. 정식 버전을 구입해서 모든 콘텐츠를 사용해보세요! oneSavegameLimit: - title: 저장파일 개수 제한 - desc: 체험판 버전에서는 저장 파일을 한 번에 한 개만 사용할 수 있습니다. 이미 있는 저장 파일을 지우거나 유료 버전을 구입 해주새요. + title: 세이브 파일 개수 제한 + desc: 체험판 버전에서는 세이브 파일을 한 번에 한 개만 사용할 수 있습니다. 이미 있는 세이브 파일을 지우거나 정식 버전을 구입 해주새요. updateSummary: - title: 신규 버전! - desc: 지난번 플레이 이후 변경사항은 다음과 같습니다. + title: 새로운 업데이트! + desc: 지난번 플레이 이후 변경 사항은 다음과 같습니다. upgradesIntroduction: title: 업그레이드 하기 - desc: 여러분이 만든 모든 도형은 업그레이드에 사용 될 수 있습니다! - 만들어 놓은 공장을 허물지 마세요! + desc: + 기존의 공장을 허물지 마세요! 여러분이 그동안 만들어 수집한 모든 도형은 업그레이드에 사용됩니다. 업그레이드 버튼은 화면의 오른쪽 위에 있습니다. massDeleteConfirm: title: 삭제 확인 - desc: 당신은 많은 건물을 삭제하려고 하고있습니다! (정확히는 개) 삭제하시겠습니까? + desc: 굉장히 많은 수 (정확히는 개)의 건물을 삭제하려 합니다! 이 작업을 수행하시겠습니까? massCutConfirm: title: 자르기 확인 - desc: 당신은 많은 건물을 자르려고 하고있습니다! (정확히는 개) 자르시겠습니까? + desc: 굉장히 많은 수 (정확히는 개)의 건물을 자르려고 합니다! 이 작업을 수행하시겠습니까? blueprintsNotUnlocked: title: 아직 사용 불가 - desc: 복사 기능은 아직 열리지 않았습니다! 레벨을 올려서 잠금을 해제하세요. + desc: 12 레벨부터 청사진 기능이 해금됩니다! keybindingsIntroduction: - title: 유용한 키바인딩 - desc: "큰 공장을 지을 때 유용한 키바인딩이 많습니다! 아래를 확인하세요.나머지 키바인딩도 - 확인해보세요!!

CTRL + - Drag: 영역을 선택해서 복사/삭제하세요.
SHIFT: - 한꺼번에 여러 개의 건물을 배치하세요.
ALT: 설치된 - 컨베이어 벨트의 방향을 바꾸세요.
" + title: 유용한 조작법 + desc: >- + 이 게임에는 거대한 공장을 수월하게 세우기 위한 많은 조작법이 있습니다. + 아래는 그 대표적인 것이며, 자세한 조작법은 조작법 설정을 참고해주세요!

+ CTRL + 드래그: 영역을 선택합니다.
+ SHIFT: 누르는 동안 같은 건물을 여러개 배치할 수 있습니다.
+ ALT: 배치된 벨트의 방향을 반전시킵니다.
createMarker: title: 새로운 마커 - desc: 이 장소에 이름을 지어주세요, 당신은 원하는 모양으로 단축키를 생성할 수 있습니다. (여기에서 만들 수 있습니다.) titleEdit: 마커 변경 + desc: 의미있는 이름을 정해주거나 단축키를 통해 도형을 직접 삽입할 수도 있습니다. (여기에서 만드실 수 있습니다). + markerDemoLimit: - desc: 체험판 버전에서는 마커를 2개 까지만 놓을 수 있습니다. 유료 버전을 구입하면 마커를 무제한으로 놓을 수 있습니다! + desc: 체험판 버전에서는 마커를 2개 까지만 배치할 수 있습니다. 정식 버전을 구입하면 마커를 무제한으로 배치할 수 있습니다! exportScreenshotWarning: title: 스크린샷 내보내기 - desc: 당신은 공장을 스크린샷으로 내보내려 하고있습니다. 공장이 너무 큰 경우에는 시간이 오래 걸리거나 게임이 꺼질 수도 있음을 - 알려드립니다! + desc: 당신의 공장을 스크린샷으로 내보내려 합니다. 매우 거대한 크기의 공장이라면 그 처리 시간이 상당히 오래 걸릴 것이며, 최악의 경우 게임이 중단될 수 있습니다! massCutInsufficientConfirm: title: 자르기 확인 - desc: 이 곳에는 붙여넣기를 할 수 없습니다! 정말 자르시겠습니까? + desc: 이 영역에는 붙여넣기를 할 수 없습니다! 정말 자르시겠습니까? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: 신호 설정 + descItems: + 미리 정의된 아이템을 선택합니다: + descShortKey: ... 또는 도형 단축키를 사용합니다 (여기에서 만드실 수 있습니다). renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: 세이브 파일 이름 설정 + desc: 여기에서 세이브 파일의 이름을 바꿀 수 있습니다. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: 성능 경고 + desc: 너무 많은 건물을 배치했습니다. 이것은 단지 게임이 무한할 정도로 많은 건물을 처리할 수 없다는 것을 알려주는 친절한 알림일 뿐입니다. 공장을 작게 유지해주세요! ingame: keybindingsOverlay: - moveMap: 움직이기 + moveMap: 이동 selectBuildings: 영역 선택 - stopPlacement: 건물 놓기 중지 + stopPlacement: 배치 중단 rotateBuilding: 건물 회전 - placeMultiple: 여러 개 놓기 + placeMultiple: 건물 여러번 배치 reverseOrientation: 방향 뒤집기 disableAutoOrientation: 자동 회전 끄기 - toggleHud: UI 끄기/키기 - placeBuilding: 건물 놓기 - createMarker: 마커 놓기 + toggleHud: HUD 토글 + placeBuilding: 건물 배치 + createMarker: 마커 배치 delete: 삭제 pasteLastBlueprint: 마지막 청사진 붙여넣기 - lockBeltDirection: 벨트 플래너 활성화하기 - plannerSwitchSide: 벨트 플래너 방향바꾸기 - cutSelection: 선택된 부분 자르기 - copySelection: 선택된 부분 복사하기 - clearSelection: 선택된 부분 지우기 - pipette: 스포이드 + lockBeltDirection: 벨트 계획기 활성화 + plannerSwitchSide: 벨트 계획기 방향 전환 + cutSelection: 자르기 + copySelection: 복사하기 + clearSelection: 지우기 + pipette: 피펫 switchLayers: 레이어 전환 buildingPlacement: - cycleBuildingVariants: 를 눌러 변형된 버전 선택 - hotkeyLabel: "Hotkey: " + cycleBuildingVariants: 키를 눌러 변형 전환 + hotkeyLabel: + 단축키: infoTexts: speed: 속도 range: 최대 거리 - storage: 저장공간 + storage: 용량 oneItemPerSecond: 초당 1개 itemsPerSecond: 초당 개 itemsPerSecondDouble: (x2) tiles: 타일 levelCompleteNotification: - levelTitle: 레벨 + levelTitle: 레벨 completed: 완료 unlockText: 잠금 해제! buttonNextLevel: 다음 레벨 notifications: - newUpgrade: 새로운 업그레이드를 할 수 있습니다! + newUpgrade: 새로운 업그레이드가 있습니다! gameSaved: 게임이 저장되었습니다. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: 레벨 성공! shop: title: 업그레이드 - buttonUnlock: 업그레이드하기 - tier: 티어 + buttonUnlock: 업그레이드 + tier: 티어 tierLabels: - I - II @@ -265,28 +253,28 @@ ingame: - XVIII - XIX - XX - maximumLevel: 최대 레벨 (속도 x) + maximumLevel: 최종 레벨 (속도 x) statistics: title: 통계 dataSources: stored: title: 저장된 도형 - description: 당신의 중앙 건물에 저장되어 있는 도형들의 수 + description: 허브에 저장되어 있는 도형의 개수 produced: title: 제작된 도형 - description: 당신의 공장에서 만들어지고 있는 모든 도형의 개수 + description: 공장에서 만들어지고 있는 모든 도형의 개수 delivered: - title: 도착한 도형 - description: 당신의 중앙 건물에 도착하고 있는 도형의 개수 + title: 운송된 도형 + description: 허브에 도착하고 있는 도형의 개수 noShapesProduced: 지금까지 제작된 도형이 없습니다. shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: 초당 + minute: 분당 + hour: 시간당 settingsMenu: playtime: 플레이 시간 - buildingsPlaced: 배치한 건물 - beltsPlaced: 배치한 컨베이어 벨트 + buildingsPlaced: 건물 수 + beltsPlaced: 벨트 수 buttons: continue: 계속하기 settings: 설정 @@ -299,72 +287,70 @@ ingame: cost: 가격 waypoints: waypoints: 마커 - hub: 중앙 건물 - description: 마커를 좌클릭해서 그곳으로 가고, 우클릭해서 삭제합니다.

을 눌러 지금 있는 곳에 - 마커를 놓거나 우클릭해서 원하는 곳에 놓으세요. + hub: 허브 + description: 마커를 좌클릭하여 그곳으로 이동하고, 우클릭으로 삭제할 수 있습니다.

마커를 배치하기 위해 키로 지금 있는 위치에 혹은 우클릭하여 원하는 위치에 배치할 수 있습니다. creationSuccessNotification: 마커가 성공적으로 생성되었습니다. interactiveTutorial: title: 튜토리얼 hints: - 1_1_extractor: 추출기원 모양의 도형에 놓아서 추출하세요! - 1_2_conveyor: "추출기를 컨베이어 벨트로 당신의 중앙 건물에 연결하세요!

팁: 마우스로 - 벨트를 클릭하고 드래그하세요!" - 1_3_expand: "이것은 방치형 게임이 아닙니다! 추출기를 더 놓아 목표를 빨리 - 달성하세요.

팁: SHIFT를 눌러 여러 개의 추출기를 놓고 - R로 방향을 바꾸세요." + 1_1_extractor: 원형 도형을 추출하기 위해 그 위에 추출기를 선택한 뒤 배치하여 추출하세요! + 1_2_conveyor: + 이제 컨베이어 벨트를 추출기와 허브를 서로 연결하세요!

팁: 벨트를 마우스로 클릭한 뒤 드래그하세요! + 1_3_expand: + 이 게임은 방치형 게임이 아닙니다! 더 많은 추출기와 벨트를 만들어 지정된 목표를 빨리 달성하세요.

팁: SHIFT 키를 누른 상태에서는 빠르게 배치할 수 있고, R 키를 눌러 회전할 수 있습니다. colors: - red: 빨강 - green: 초록 - blue: 파랑 - yellow: 노랑 - purple: 보라 - cyan: 청록 - white: 하양 + red: 빨간색 + green: 초록색 + blue: 파란색 + yellow: 노란색 + purple: 보라색 + cyan: 시안색 + white: 흰색 + black: 검은색 uncolored: 회색 - black: 검정 shapeViewer: title: 층 empty: 비었음 copyKey: 키 복사하기 connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 추출기 1 개 + n_miners: 추출기 개 + limited_items: 개로 제한됨 watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: 체험판 버전 + desc: 정식 버전의 장점을 보려면 여기를 클릭하세요! + get_on_steam: Steam으로 가기 standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: 정식 버전을 구매하세요! + no_thanks: 괜찮아요! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 새로운 12 레벨 + desc: 최대 26 레벨로 확장됩니다! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 새로운 18개의 건축물 + desc: 완벽한 자동화된 공장을 위한 건물들입니다! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: 무한한 세이브 파일 + desc: 당신이 내키는대로 마음껏 할 수 있습니다! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 티어까지 확장된 업그레이드 + desc: 체험판에서는 5 티어까지만 사용할 수 있습니다! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: 무한한 마커 배치 + desc: 넓은 공장에서 길을 잃지 마세요! wires: - title: Wires - desc: An entirely new dimension! + title: 전선 + desc: 완전히 새로운 차원의 도입! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: 다크 모드 + desc: 당신의 눈을 피곤하게 만들지 마세요! support: - title: Support me - desc: I develop it in my spare time! + title: 저를 지원해주세요 + desc: 저는 여가 시간에 게임을 개발합니다! shopUpgrades: belt: - name: 컨베이어 벨트, 배분기, 터널 + name: 벨트, 밸런서, 터널 description: 속도 x → x miner: name: 추출기 @@ -373,341 +359,302 @@ shopUpgrades: name: 절단기, 회전기, 결합기 description: 속도 x → x painting: - name: 색 혼합기, 도형 색칠기 + name: 혼합기, 색칠기 description: 속도 x → x buildings: hub: deliver: 목표 toUnlock: 보상 levelShortcut: 레벨 - endOfDemo: End of Demo + endOfDemo: 체험판 끝 belt: default: name: 컨베이어 벨트 - description: 도형을 운반. 클릭 및 드래그해서 여러 개 배치. + description: 아이템을 운송합니다. 클릭 드래그하여 긴 줄을 한번에 배치할 수 있습니다. miner: default: name: 추출기 - description: 도형 또는 색소 위에 놓아서 추출하기 + description: 도형이나 색소 위에 배치하여 추출합니다. chainable: - name: 체인 추출기 - description: 도형 또는 색소 위에 놓아서 추출하기. 여러 개를 연결할 수 있음. + name: 연쇄 추출기 + description: 도형이나 색소 위에 배치하여 추출합니다. 서로 연결될 수 있습니다. underground_belt: default: name: 터널 - description: 도형을 건물과 벨트 밑으로 통과시킴. + description: 건물과 벨트 아래로 공간을 만들어 아이템을 통과시킵니다. tier2: name: 터널 티어 II - description: 도형을 건물과 벨트 밑으로 터널 보다 빨리 통과시킴. + description: 건물과 벨트 아래로 공간을 만들어 아이템을 통과시킵니다. cutter: default: name: 절단기 - description: 도형을 위에서 아래로 2개로 나눈다. 만약, 출력한 2개중 1개만 사용하면 기계가 멈추니 사용하지 않는 - 나머지 한 개는 버릴 것 + description: 도형을 수직으로 잘라 두 가지 도형으로 나눕니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 절단기가 막혀 멈추게 됩니다! quad: - name: 절단기 (4단) - description: 도형을 4개로 나눈다. 만약, 한 개만 사용하면 기계가 멈추니 나머지는 버릴 것 + name: 4단 절단기 + description: 도형을 즉시 네 개로 자릅니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 절단기가 막혀 멈추게 됩니다! rotater: default: name: 회전기 - description: 도형을 시계방향으로 90도 회전시킨다. + description: 도형을 시계 방향으로 90도 회전시킵니다. ccw: - name: 회전기 (반시계방향) - description: 도형을 반시계방향으로 90도 회전시킨다. + name: 반시계 방향 회전기 + description: 도형을 반시계 방향으로 90도 회전시킵니다. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: 180도 회전기 + description: 도형을 180도 회전시킵니다. stacker: default: name: 결합기 - description: 도형 2개를 쌓는다. 합칠 수가 없다면 오른쪽 도형이 왼쪽 도형 위에 놓아진다. + description: 도형을 서로 결합하고 쌓습니다. 서로 결합할 수 있다면 두 도형을 붙여 하나로 만들고, 그렇지 않으면 오른쪽 도형이 왼쪽 도형 위에 쌓이게 됩니다. mixer: default: - name: 색 혼합기 - description: 두가지 색을 섞어서 다른 색을 만든다. + name: 색소 혼합기 + description: 두 가지의 색소를 혼합해 다른 혼합 색소를 만듭니다. painter: default: - name: 도형 색칠기 - description: 도형을 색소로 색칠한다. + name: 색칠기 + description: 색소를 이용해 도형을 색칠합니다. 위쪽에서 받는 색소로 왼쪽에서 받는 도형 전체를 색칠합니다. double: - name: 2단 도형 색칠기 - description: 왼쪽에 입력되는 도형을 위에서 입력되는 색소로 색칠한다. + name: 2단 색칠기 + description: 색소를 이용해 도형을 색칠합니다. 위쪽에서 받는 색소로 왼쪽에서 받는 도형 전체를 색칠합니다. quad: - name: 4단 도형 색칠기 - description: 도형의 4가지 분단을 각각 다른 색으로 색칠할 수 있다. + name: 4단 색칠기 + description: 도형의 각 사분면에 개별적으로 색상을 칠할 수 있습니다. 전선 레이어를 통해 참 신호가 있는 슬롯만 칠해집니다! mirrored: - name: 도형 색칠기 - description: 도형을 색소로 색칠한다. + name: 색칠기 + description: 색소를 이용해 도형을 색칠합니다. 아래쪽에서 받는 색소로 왼쪽에서 받는 도형 전체를 색칠합니다. trash: default: name: 휴지통 - description: 양쪽에서 오는 모든 입력물을 버린다. + description: 어느 곳에서든 들어오는 아이템을 영원히 파괴합니다. wire: default: name: 전선 - description: 에너지를 전송한다. + description: 아이템, 색상, 또는 불 값 (0 혹은 1)이 될 수 있는 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: 전선 + description: 아이템, 색상, 또는 불 값 (0 혹은 1)이 될 수 있는 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: 밸런서 + description: 들어오는 아이템을 균등하게 분배합니다. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: 압축형 병합기 + description: 컨베이어 벨트 두 줄을 한 줄로 합칩니다. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: 압축형 병합기 + description: 컨베이어 벨트 두 줄을 한 줄로 합칩니다. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: 압축형 분배기 + description: 컨베이어 벨트 한 줄을 두 줄로 나눕니다. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: 압축형 분배기 + description: 컨베이어 벨트 한 줄을 두 줄로 나눕니다. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: 저장고 + description: 아이템을 지정된 용량까지 저장합니다. 왼쪽 출력이 가장 우선되므로 오버플로 회로로 사용할 수 있습니다. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: 전선 교차 장치 + description: 두 전선이 서로 연결되지 않고 교차할 수 있도록 합니다. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: 일정 신호 + description: 모양, 색상, 또는 불 값 (1 혹은 0)이 될 수 있는 상수 신호를 방출합니다. lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: 스위치 + description: 전선 레이어에서 불 값 (1 또는 0)를 방출하도록 전환할 수 있으며, 그 후 아이템 선별같은 구성 요소를 제어하는 데 사용될 수 있습니다. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: AND 회로 + description: 두 입력이 모두 참일 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NOT 회로 + description: 입력이 거짓일 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: XOR 회로 + description: 입력 중 하나만 참이고 둘 다 같지 않을 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: OR 회로 + description: 입력 중 하나 이상이 참일 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: 트랜지스터 + description: 양 옆의 입력이 참일 경우 아래쪽 입력을 전달합니다 (모양, 색상, 또는 값 "1"일 경우). mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: 트랜지스터 + description: 양 옆의 입력이 참일 경우 아래쪽 입력을 전달합니다 (모양, 색상, 또는 값 "1"일 경우) filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: 선별기 + description: 신호를 연결하여 일치하는 모든 아이템은 위로, 나머지 아이템은 오른쪽으로 내보냅니다. 불 값으로도 제어할 수 있습니다. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: 디스플레이 + description: 신호를 연결하여 디스플레이에 도형이나 색상 또는 불 값을 표시합니다. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: 벨트 판독기 + description: 벨트의 평균 처리량을 측정합니다. (잠금 해제된) 전선 레이어에서 마지막으로 읽은 아이템을 출력합니다. analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: 도형 분석기 + description: 도형의 가장 낮은 레이어의 오른쪽 상단 사분면을 분석하고 모양과 색상을 반환합니다. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: 비교기 + description: 두 신호가 정확히 동일할 경우 불 값 "1"을 반환합니다. 도형, 색상, 불 값을 비교할 수 있습니다. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: 가상 절단기 + description: 가상으로 도형을 잘라 반으로 나눕니다. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: 가상 회전기 + description: 가상으로 도형을 시계 방향이나 반시계 방향으로 회전합니다. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: 가상 결합해제기 + description: 가상으로 최상단에 있는 레이어를 오른쪽으로 출력하고, 나머지는 왼쪽으로 출력합니다. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: 가상 결합기 + description: 가상으로 오른쪽 도형을 왼쪽 도형에 쌓습니다. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: 가상 색칠기 + description: 가상으로 하단 입력의 모양을 오른쪽 입력의 색상으로 칠합니다. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: 아이템 생성기 + description: 샌드박스 모드에서만 사용할 수 있는 아이템으로, 일반 레이어 위에 있는 전선 레이어에서 주어진 신호를 출력합니다. storyRewards: reward_cutter_and_trash: title: 절단기 - desc: 절단기가 잠금 해제되었습니다! 절단기는 도형을 세로로 잘라 반으로 - 나눕니다.

사용하지 않는 도형은 휴지통에 버려주세요. 그렇지 않으면 절단기가 멈출 - 것입니다. + desc: 절단기가 잠금 해제되었습니다! 절단기는 들어오는 도형이 어떤 모양을 하고 있던 수직으로 잘라 반으로 나눕니다!

쓰지 않는 도형은 쓰레기로 처리하세요. 그렇지 않으면 작동을 멈출 것입니다!

이러한 목적을 위해 휴지통도 함께 지급되었습니다. 휴지통에 들어간 것은 모두 파괴됩니다! reward_rotater: title: 회전기 - desc: 회전기가 잠금 해제되었습니다! 이것은 도형을 시계방향으로 90도 회전 시킵니다. + desc: 회전기가 잠금 해제되었습니다! 회전기는 들어오는 도형을 시계 방향으로 90도 회전시켜줍니다. reward_painter: title: 색칠기 - desc: "색칠기가 잠금 해제되었습니다. - 추출한 색소(도형을 추출하는 것처럼)를 색칠기에서 도형과 합쳐 - 색칠된 도형을 얻으세요!

추신: 색맹이라면, 설정에서 색맹 모드를 활성화 - 시키세요!" + desc: >- + 색칠기가 잠금 해제되었습니다! 도형과 마찬가지로 색소를 추출하고 색칠기에 넣거 도형과 결합하여 색칠된 도형을 만들도록 하세요!

추신: 만약 당신이 색맹이라면, 설정에서 색맹 모드를 활성화하세요! reward_mixer: title: 혼합기 - desc: 혼합기가 잠금 해제되었습니다! 이 건물로 두 색소를 혼합하세요! + desc: 혼합기가 잠금 해제되었습니다! 서로 다른 두 색소를 혼합하여 새로운 혼합 색소를 얻을 수 있습니다! reward_stacker: title: 결합기 - desc: 결합기가 잠금 해제되었습니다! 두 도형이 서로 옆에 놓을 수 있는 경우, 두 도형이 - 결합됩니다. 그렇지 않은 경우, 오른쪽 도형이 왼쪽 도형 위에 - 쌓이게됩니다. + desc: 결합기가 잠금 해제되었습니다! 이제 결합기를 통해 여러 도형을 붙이고 결합할 수 있습니다! 들어오는 두 도형의 모양이 서로 나란히 붙일 수 있다면, 하나의 도형으로 결합됩니다. 만약 서로 겹쳐진다면, 오른쪽 도형이 왼쪽 도형의 위에 쌓이게 됩니다! reward_splitter: - title: 배분기 - desc: 다양한 용도로 쓰이는 배분기가 잠금 해제되었습니다! 배분기로 도형들을 여러 개의 벨트에 - 합하거나 나누어서 큰 공장을 지을 수 있습니다.

+ title: 압축형 분배기 + desc: 밸런서의 새로운 형태인 분배기가 잠금 해제되었습니다! 이제 벨트 한 줄을 즉시 두 줄로 분배합니다! reward_tunnel: title: 터널 - desc: 터널이 잠금 해제되었습니다! 자원을 건물과 벨트 밑으로 운송 할 수 있습니다. + desc: 터널이 잠금 해제되었습니다! 이제 벨트와 건물 아래로 공간을 만들어내 옮길 수 있습니다! reward_rotater_ccw: - title: 회전기 (반시계방향) - desc: 반시계방향 회전기가 잠금 해제되었습니다! 이것을 배치하려면 회전기를 선택하고 - T를 눌러서 변형된 버전을 사용하세요! + title: 반시계 방향 회전기 + desc: 반시계 방향 회전기가 잠금 해제되었습니다! 반시계 방향 회전기는 회전기의 다른 형태로, 이름처럼 들어오는 도형을 반시계 방향으로 90도만큼 회전시킵니다! 제작하려면 회전기를 선택한 후 'T' 키를 눌러 다른 형태로 전환하세요! reward_miner_chainable: - title: 체인 추출기 - desc: 체인 추출기가 잠금 해제되었습니다! 체인 추출기는 자원을 다른 추출기로 - 전달하여 효율적으로 추출할 수 있게 합니다. + title: 연쇄 추출기 + desc: >- + 연쇄 추출기가 잠금 해제되었습니다! 자원을 보다 더욱 효율적으로 추출할 수 있도록 앞에 있는 추출기로 자원을 보낼 수 있습니다!

+ 추신: 이제 툴바에 있는 기존 추출기는 연쇄 추출기로 대체되었습니다! reward_underground_belt_tier_2: title: 터널 티어 II - desc: 새로운 종류의 터널이 잠금 해제되었습니다! 새 터널은 보다 넓은 범위를 - 가졌으며, 터널들은 같은 종류끼리만 연결됩니다. + desc: 터널의 새로운 형태가 잠금 해제되었습니다! 터널 티어 II는 더욱 긴 거리를 운송할 수 있고 기존 터널과 겹쳐지지 않고도 자원을 보낼 수 있습니다! reward_cutter_quad: - title: 절단기 (4단) - desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 새 절단기는 도형을 2조각이 아니라 - 4조각으로 자릅니다. + title: 4단 절단기 + desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 4단 절단기는 도형을 두 조각이 아닌 네 조각으로 자를 수 있습니다! reward_painter_double: - title: 색칠기 (2단) - desc: 새로운 종류의 색칠기가 잠금 해제되었습니다! 새 색칠기는 색소 하나로 2개의 - 도형을 색칠할 수 있습니다. + title: 2단 색칠기 + desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 일반적인 색칠기와 거의 동일하지만, 하나의 색소를 사용하여 동시에 두 개의 도형을 색칠할 수 있습니다! reward_storage: - title: 저장소 - desc: 저장소가 잠금 해제되었습니다! 주어진 용량만큼 자원을 저장할 수 있습니다! + title: 저장고 + desc: + 저장고가 잠금 해제되었습니다! 저장고는 최대 용량까지 도형을 저장할 수 있습니다!

+ 왼쪽 출력이 우선되므로 오버플로 회로로도 활용될 수 있습니다! reward_freeplay: - title: 자유 모드 - desc: 해내셨군요! 자유 모드가 잠금 해제되었습니다! 이제 도형이 랜덤으로 생성됩니다! (걱정 마세요, - 유료버전에는 더 많은 컨텐츠가 계획되어 있습니다!) + title: 자유플레이 + desc: + 드디어 해내셨군요! 자유플레이 모드가 잠금 해제되었습니다! 이는 즉 앞으로 도형이 무작위로 생성됩니다.

+ 이제부터 허브는 처리량이 필요하므로 요청하는 도형을 자동으로 전달하는 공장을 구축하는 것이 좋습니다.

+ 허브는 요청된 도형을 전선 레이어에서 출력하므로 이를 분석하고 기반으로 하여 공장을 자동으로 구성하기만 하면 됩니다. reward_blueprints: title: 청사진 - desc: 이제부터는 공장의 일부 영역을 복사하여 붙여넣기 할 수 있습니다! CTRL을 누르면서 드래그해서 먼저 - 영역을 선택하세요.

그 다음에는 C, DEL, ESC 로 복사하거나, 지우거나, 취소 - 하세요.

복사는 무료가 이닙니다. 특별한 "화폐" 도형으로 돈을 지불하고 복사가 됩니다. + desc: 이제 공장의 일부를 복사하고 붙여넣는 기능을 사용할 수 있습니다! 영역을 선택 (CTRL 키를 누른 채 마우스로 드래그)한 뒤 'C' 키를 눌러 복사할 수 있습니다.

하지만 공짜는 아닙니다, 청사진 모양 도형을 허브에 저장하고 그것을 일부 사용해 붙여넣기 기능을 사용할 수 있습니다! (방금 당신이 만든 것입니다.) no_reward: title: 다음 레벨 - desc: "이 단계는 아무런 보상이 없습니다. 하지만 다음 단계에는 있죠!

추신: 현존하는 공장을 부수지 않는 것이 좋습니다. - - 추후 업그레이드를 해제하기 위해 모든 도형들이 - 필요합니다!" + desc: + 이번 레벨의 보상은 없네요. 대신 다음 레벨에서 줄겁니다!

추신: 기존 공장을 파괴하는 것은 좋지 않은 선택입니다. 나중에 업그레이드를 잠금 해제하려면 기존의 모든 도형이 필요합니다! no_reward_freeplay: title: 다음 레벨 - desc: 축하드립니다! 유료 버전을 위한 더 많은 컨텐츠를 만들고 있습니다. + desc: 축하드립니다! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

+ title: 밸런서 + desc: 밸런서가 잠금 해제되었습니다! 다목적 밸런서를 통해 여러 벨트의 아이템을 서로 다른 벨트로 분할하거나 합침으로써 더욱 거대한 공장을 만들 수 있습니다! reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: 압축형 병합기 + desc: 밸런서의 새로운 형태인 병합기가 잠금 해제되었습니다! 이제 벨트 두 줄을 즉시 한 줄로 병합합니다! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: 벨트 판독기 + desc: 벨트 판독기가 잠금 해제되었습니다! 이제 벨트의 처리량을 확인할 수 있습니다.

그리고, 전선이 잠금 해제될 때 까지 기다리신다면 정말 유용하게 사용할 수 있을 겁니다! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: 180도 회전기 + desc: 180도 회전기가 잠금 해제되었습니다! 이제 도형을 바로 180도로 회전시킬 수 있습니다. (짜잔! :D) reward_display: - title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + title: 디스플레이 + desc: >- + 디스플레이가 잠금 해제되었습니다! 이제 신호를 전선 레이어에 연결해 시각화할 수 있습니다.

+ 추신: 벨트 판독기와 저장고가 마지막으로 읽은 아이템을 출력했나요? 디스플레이로 한번 봐보세요! reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: 일정 신호 + desc: + 전선 레이어에서 구축할 수 있는 일정 신호가 잠금 해제되었습니다! 간단한 예시로, 아이템 선별에 연결하여 사용하는 데 유용합니다.

+ 일정 신호는 도형, 색상, 혹은 불 값 (1 혹은 0)을 출력할 수 있습니다. reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: 논리 회로 + desc: + 논리 회로가 잠금 해제되었습니다! 굳이 흥분할 필요는 없지만, 진짜 멋진 기술입니다!

+ 논리 회로를 통해 이제 AND, OR, XOR, NOT 논리 연산을 할 수 있습니다.

+ 보너스로, 트랜지스터도 지급되었습니다! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: 가상 처리 + desc: + 도형의 처리를 시뮬레이션할 수 있는 다양한 새로운 건물이 잠금 해제되었습니다!

+ 이제 전선 레이어에서 도형에 대한 절단기, 회전기, 결합기 등을 가상으로 시뮬레이션할 수 있습니다! + 이제 게임 진행에 있어 다음 세 가지의 방법이 존재합니다:

+ - 완전 자동화된 기계를 구축하고 허브에서 요구되는 도형을 제작합니다. (먼저 시도해볼 것을 권합니다!).

+ - 전선을 통해 멋진 것들 만듭니다.

+ - 평소처럼 게임을 진행합니다.

+ 어떤 방식으로든, 재미있게 게임을 플레이해주시길 바랍니다! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." + title: 전선과 4단 색칠기 + desc: + 이제 전선 레이어를 사용할 수 있게 되었습니다! 전서 ㄴ레이어는 일반 레이어 위에 존재하는 별도의 레이어로, 이를 통한 다양하고 새로운 메커니즘을 소개하겠습니다!

+ 우선 4단 색칠기가 잠금 해제되었습니다. 전선 레이어에서 색칠하고 싶은 슬롯에 전선을 연결하세요! + 전선 레이어로 전환하려면 E 키를 누르세요. reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: 아이템 선별기 + desc: + 아이템 선별기가 잠금 해제되었습니다! 전선 레이어의 신호와 일치하는지에 대한 여부로 아이템을 위쪽 출력이나 오른쪽 출력으로 보냅니다.

+ 불 값 (1 또는 0)을 전달하여 완전히 활성화과 비활성화를 전환할 수 있습니다. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: 체험판 끝 + desc: 체험판 콘텐츠가 모두 끝이 났습니다! settings: title: 설정 categories: general: 일반 - userInterface: 유저 인터페이스 + userInterface: 사용자 인터페이스 advanced: 고급 - performance: Performance + performance: 성능 versionBadges: dev: 개발 staging: 검증 prod: 배포 - buildDate: 날짜 + buildDate: 제작 labels: uiScale: title: UI 크기 - description: "UI의 크기를 변경시키기:" + description: 사용자 인터페이스의 크기를 변경합니다. 인터페이스는 당신의 해상도에 따라 확장되는데 이 설정은 그 확장의 정도를 제어합니다. scales: super_small: 매우 작게 small: 작게 @@ -715,8 +662,8 @@ settings: large: 크게 huge: 매우 크게 scrollWheelSensitivity: - title: 확대 민감도 - description: 마우스 휠이나 트랙패드로 확대하는 데의 민감도 + title: 화면 줌 감도 + description: (마우스 휠이나 트랙 패드를 통한) 화면 줌 인/아웃 감도를 설정합니다. sensitivity: super_slow: 매우 느리게 slow: 느리게 @@ -725,20 +672,20 @@ settings: super_fast: 매우 빠르게 movementSpeed: title: 이동 속도 - description: 키보드를 사용할 때, 화면 이동 속도를 설정합니다. + description: 키보드나 마우스를 화면 테두리로 옮겨 화면을 이동할 때 이동 속도를 설정합니다. speeds: super_slow: 매우 느리게 slow: 느리게 regular: 보통 fast: 빠르게 super_fast: 매우 빠르게 - extremely_fast: 극한의 속도 + extremely_fast: 극도로 빠르게 language: title: 언어 - description: 언어 바꾸기 - 모든 언어팩은 사용자들이 만든 것이므로 정확하지 않을 수 있습니다! + description: 언어를 바꿉니다. 모든 언어팩은 사용자들이 모여 만드므로 정확하지 않을 수 있습니다! fullscreen: - title: 전체화면 - description: 이 게임은 전체화면으로 하는 것이 가장 좋습니다. 전체화면은 유료 버전에서만 가능합니다. + title: 전체 화면 + description: 이 게임은 전체 화면으로 하는 것이 가장 좋습니다. 전체 화면 기능은 정식 버전에서만 가능합니다. soundsMuted: title: 효과음 끄기 description: 모든 효과음을 끕니다. @@ -747,30 +694,27 @@ settings: description: 모든 배경 음악을 끕니다. theme: title: 게임 테마 - description: 게임 테마를 고르세요. (밝음/어두움). + description: 게임 테마를 고르세요. (라이트/다크). themes: - dark: 어두운 테마 - light: 밝은 테마 + dark: 다크 + light: 라이트 refreshRate: - title: 시뮬레이션 빈도 - description: 144hz 모니터가 있다면 이 설정을 바꿔 게임이 높은 빈도로 적절히 시뮬레이션되게 하세요. 만약에 컴퓨터가 느리다면 - FPS에 영양을 미칠 수 있습니다. + title: 틱 빈도 + description: 이것은 초당 발생하는 게임 틱 수를 결정합니다. 일반적으로 틱 속도가 높을수록 정밀도는 향상되나 성능은 낮아집니다. 낮은 틱 빈도에서는 처리량이 정확하지 않을 수 있습니다. alwaysMultiplace: - title: 항상 여러 개 배치 - description: 활성화된 경우 모든 건물은 따로 취소하기 전까지 배치 후 선택된 상태로 유지됩니다. SHIFT를 계속 누르고 있는 것과 - 같은 효과입니다. + title: 다수 배치 항시 켜기 + description: 활성화할 경우 모든 건물은 배치한 후 취소할 때 까지 커서에 선택된 상태를 유지합니다. 이 기능은 SHIFT 키를 계속 누르는 것과 같습니다. offerHints: title: 힌트와 튜토리얼 - description: 이것을 끄면 힌트와 튜토리얼이 나오지 않습니다. 또한 특정 UI 요소를 지정된 레벨까지 숨겨 게임에 쉽게 들어갈 수 - 있습니다. + description: 게임 플레이하는 동안 힌트와 튜토리얼을 보여줄 지를 결정합니다. 또한 게임에 더 쉽게 빠져들 수 있도록 특정 레벨까지 특정한 UI 요소를 숨깁니다. enableTunnelSmartplace: - title: 스마트 터널 - description: 활성화 시키면, 터널을 설치하는 것이 자동적으로 불필요한 벨트를 없앱니다. 또한, 터널을 당겨서 남는 터널을 없앱니다. + title: 지능적인 터널 배치 + description: 활성화할 경우 터널을 설치할 때 터널 사이에 있는 불필요한 벨트를 제거합니다. 또한 터널을 당겨서 남는 터널을 없앱니다. vignette: title: 비네트 효과 description: 화면의 모서리를 어둡게 만들어 텍스트를 읽기 쉽게 해주는 비네트 효과를 활성화 시킵니다. autosaveInterval: - title: 자동저장 주기 + title: 자동 저장 주기 description: 자동저장을 얼마나 자주 할 것인지 정합니다. 자동저장 기능을 끌 수도 있습니다. intervals: one_minute: 1분 @@ -778,105 +722,95 @@ settings: five_minutes: 5분 ten_minutes: 10분 twenty_minutes: 20분 - disabled: 기능 끄기 + disabled: 끄기 compactBuildingInfo: - title: 간단한 건물 정보 - description: 건물의 정보창을 해당 건물의 능률만 보이도록 줄입니다. 아니면, 설명과 이미지가 보입니다. + title: 건물 정보 간소화 + description: 건물에 대한 정보 상자를 줄여 처리 비율만 나타냅니다. 아니라면 설명과 이미지가 함께 표시됩니다. disableCutDeleteWarnings: - title: 자르기/삭제 경고기능 끄기 - description: 100개 이상의 건물을 자르기/삭제할 때 경고창이 나오지 않게 합니다. + title: 자르기 및 삭제 경고 끄기 + description: 100개가 넘는 개체를 자르거나 삭제할 때 표시되는 경고창을 띄우지 않도록 합니다. enableColorBlindHelper: title: 색맹 모드 - description: 색맹이 게임을 플레이하는데 도움을 주는 다양한 도구를 활성화 시킵니다. + description: 색맹 사용자를 위해 게임을 플레이하는 데 도움을 주는 다양한 도구를 활성화합니다. rotationByBuilding: title: 건물 유형에 따른 방향 - description: 각 건물 유형은 최근에 설정한 방향을 개별적으로 기억합니다. 다른 유형의 건물 배치 간에 자주 방향을 전환할 경우, 이 - 방법이 더 편할 수 있습니다. + description: 각 건물 유형마다 개별적으로 마지막으로 설정했던 방향을 기억하도록 합니다. 다른 건물 변형을 자주 전환하는 경우 이 방법이 더욱 편할 수 있습니다. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: 효과음 볼륨 + description: 효과음의 볼륨을 조절합니다. musicVolume: - title: Music Volume - description: Set the volume for music + title: 음악 볼륨 + description: 음악 볼륨을 조절합니다. lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: 저품질 지도 자원 + description: 성능 향상을 위해 지도 확대 시 자원의 렌더링을 단순화합니다. + 더욱 깨끗해 보이는 편이니 꼭 해보세요! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: 그리드 비활성화 + description: 성능 향상을 위해 타일 그리드를 비활성화할 수 있습니다. 이 역시 게임을 더욱 깨끗하게 보여줍니다! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: 우클릭 시 커서 지우기 + description: 기본적으로 활성화되어 있으며, 배치할 건물을 선택한 상태에서 마우스 우클릭 시 커서를 지웁니다. 비활성화할 경우, 건물을 커서에 선택한 채로 우클릭하면 바로 건물을 삭제할 수 있습니다. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: 저품질 텍스처 (못생김) + description: 성능 향상을 위해 낮은 품질의 텍스처를 사용합니다. 이것은 게임을 아주 못생기게 만들 겁니다! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: 청크 경계 표시 + description: 게임의 청크는 16x16의 타일로 나누어지며, 이 설정을 활성화하면 각 청크의 테두리가 표시됩니다. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: 자원 패치에서 추출기 즉시 선택 + description: 기본적으로 활성화되어 있으며, 자원 패치에서 피펫 기능을 사용 시 즉시 추출기를 선택합니다. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: 벨트 단순화 (못생김) + description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 할 정도로 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: 화면 가장자리 패닝 + description: 커서를 화면 가장자리로 옮기면 스크롤되어 지도를 이동할 수 있습니다. 스크롤 속도는 이동 속도 설정에 따릅니다. rangeSliderPercentage: % keybindings: - title: 키바인딩 - hint: "팁: CTRL, SHIFT, ALT를 활용하세요. 건물을 배치할 때 유용합니다." - resetKeybindings: 키바인딩 리셋 + title: 조작법 + hint: + 팁: CTRL, SHIFT, ALT를 적절히 사용하세요! 건물을 배치할 때 유용합니다. + resetKeybindings: 초기화 categoryLabels: - general: 앱 + general: 애플리케이션 ingame: 게임 navigation: 둘러보기 - placement: 놓기 - massSelect: 다중 선택 + placement: 배치 + massSelect: 대량 선택 buildings: 건물 단축키 - placementModifiers: 배치 옵션 + placementModifiers: 배치 설정 mappings: confirm: 확인 back: 취소 - mapMoveUp: 위로 가기 - mapMoveRight: 오른쪽으로 가기 - mapMoveDown: 밑으로 가기 - mapMoveLeft: 왼쪽으로 가기 - centerMap: 맵 중앙으로 가기 + mapMoveUp: 위쪽 이동 + mapMoveRight: 오른쪽 이동 + mapMoveDown: 아래쪽 이동 + mapMoveLeft: 왼쪽 이동 + centerMap: 맵 중앙으로 이동 mapZoomIn: 확대 mapZoomOut: 축소 - createMarker: 마커 놓기 + createMarker: 마커 배치 menuOpenShop: 업그레이드 menuOpenStats: 통계 - toggleHud: UI보기/숨기기 - toggleFPSInfo: FPS 와 디버그 보기/숨기기 + toggleHud: HUD 토글 + toggleFPSInfo: FPS와 디버그 정보 토글 belt: 컨베이어 벨트 underground_belt: 터널 miner: 추출기 cutter: 절단기 rotater: 회전기 stacker: 결합기 - mixer: 색 혼합기 - painter: 도형 색칠기 + mixer: 혼합기 + painter: 색칠기 trash: 휴지통 rotateWhilePlacing: 회전 - rotateInverseModifier: "Modifier: 대신 반시계방향으로 회전" - cycleBuildingVariants: 변형종 사용 - confirmMassDelete: 대량 삭제 확인 - pasteLastBlueprint: 최근 청사진 붙여넣기 - cycleBuildings: 건물 사이클 + rotateInverseModifier: + 변경: 대신 반시계 방향 + cycleBuildingVariants: 형태 전환 + confirmMassDelete: 대량 삭제 + pasteLastBlueprint: 마지막 청사진 붙여넣기 + cycleBuildings: 건물 전환 massSelectStart: 누르고 드래그해서 시작 massSelectSelectMultiple: 여러 곳 선택 massSelectCopy: 영역 복사 @@ -886,108 +820,105 @@ keybindings: placeInverse: 반대 방향으로 벨트 배치 exportScreenshot: 공장 전체를 이미지로 내보내기 mapMoveFaster: 더 빠르게 움직이기 - lockBeltDirection: 벨트 플래너 활성화 - switchDirectionLockSide: "플래너: 방향 바꾸기" - pipette: 스포이드 + lockBeltDirection: 벨트 계획기 활성화 + switchDirectionLockSide: + 계획기: 방향 바꾸기 + pipette: 피펫 menuClose: 메뉴 닫기 switchLayers: 레이어 전환 wire: 전선 - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + balancer: 밸런서 + storage: 저장고 + constant_signal: 일정 신호 + logic_gate: 논리 회로 + lever: 레버 + filter: 선별기 + wire_tunnel: 전선 교차 장치 + display: 디스플레이 + reader: 벨트 판독기 + virtual_processor: 가상 절단기 + transistor: 트랜지스터 + analyzer: 도형 분석기 + comparator: 비교기 + item_producer: 아이템 생성기 (샌드박스) + copyWireValue: + 전선: 커서 아래 값 복사 about: - title: 이 게임의 정보 - body: >- - 이 게임은 오픈소스이고, Tobias + title: 게임 정보 + body: 이 게임은 오픈소스이고, Tobias Springer가 개발했습니다.

- 이 게임을 위해 이바지하고 싶다면, shapez.io on github를 확인하세요.

+ 이 게임을 위해 기여하고 싶다면, shapez.io on github를 확인하세요.

- 이 게임은 디스코드 커뮤니티의 공헌이 없었다면 불가능했을 것입니다. 우리 디스코드 커뮤니티에 꼭 참여해주세요! 디스코드 서버!

+ 이 게임은 Discord 커뮤니티의 공헌이 없었다면 불가능했을 것입니다. 우리 Discord 커뮤니티에 꼭 참여해주세요! Discord 서버!

사운드 트랙 제작자는 Peppsen입니다. - 킹갓제너럴 Peppsen!

마지막으로, 나의 절친 Niklas에게 크나큰 감사를 표합니다 - 우리가 함께 해낸 Factorio가 아니었다면, 이 게임은 존재하지 않았을 겁니다! changelog: - title: 업데이트 기록 + title: 업데이트 목록 demo: features: - restoringGames: 게임 자장 파일 리스토어 하기 - importingGames: 게임 저장 파일 불러오기 - oneGameLimit: 게임 저장 파일 최대 1개 - customizeKeybindings: 키 설정하기 + restoringGames: 게임 세이브 파일 복원 하기 + importingGames: 게임 세이브 파일 불러오기 + oneGameLimit: 게임 세이브 파일 최대 1개 + customizeKeybindings: 조작법 설정하기 exportingBase: 공장 전체를 이미지로 내보내기 settingNotAvailable: 체험판 버전에서 사용 불가 tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - 허브는 단지 필요로 하는 도형은 물론, 모든 형태의 도형 입력을 허용합니다! + - 공장을 짓기 전에 확장 가능성을 고려하세요. 분명 좋은 대가를 받게 될겁니다! + - 공장을 허브에 너무 가까이 짓지 마세요. 그렇지 않으면 크나큰 혼란을 겪을 수 있습니다! + - 결합기가 작동되지 않는다면, 두 도형의 입력을 서로 바꿔보세요. + - 벨트 계획 중 R 키를 눌러 방향을 전환할 수 있습니다. + - CTRL 키를 누른 채 벨트를 배치하면 자동으로 벨트가 연결되지 않게 됩니다. + - 모든 업그레이드의 티어가 동일하다면 모든 공장의 처리 비율도 동일합니다. + - 높은 효율에는 병렬보다 직렬입니다. + - 나중에 더 많은 변형 건물을 잠금 해제할 수 있습니다! + - T 키를 눌러 건물의 다른 형태로 전환할 수 있습니다. + - 대칭이 핵심입니다! + - 서로 다른 티어의 터널은 같은 줄에서 서로 겹쳐지지 않습니다. + - 공장은 가능한 작게, 오밀조밀하게 지으세요. 분명 좋은 대가를 받게 될겁니다! + - 색칠기에는 T키로 선택할 수 있는 반전 형태가 있습니다. + - 각 건물 간의 처리 비율이 동일하다면 그 효율은 극대화됩니다. + - 최대 레벨에서, 한 줄의 벨트를 채우기 위해 다섯 개의 추출기가 필요합니다. + - 터널을 잊지 마세요! + - 완벽한 효율성을 위해 굳이 아이템을 균등하게 배분할 필요는 없습니다. + - b>SHIFT키를 누르면 벨트 계획기가 활성화되어 긴 길이의 벨트 한 줄을 쉽게 배치할 수 있습니다. + - 절단기는 들어오는 도형과 배치된 절단기의 방향에 관계 없이, 언제나 수직으로 자릅니다. + - 흰색은 세 가지의 색소를 혼합해야 합니다. + - 저장고의 양쪽 출력 중 왼쪽 출력이 가장 우선됩니다. + - 가능한 반복적으로 배치할 수 있는 일종의 연쇄 구조를 만들도록 하세요! 그만한 가치가 충분합니다! + - CTRL키를 누른 상태로 건물을 배치하여 여러 건물을 빠르게 배치할 수 있습니다. + - ALT키를 누른 상태로 벨트를 배치하면 벨트의 방향이 반전됩니다. + - 효율성이 핵심입니다! + - 허브에서 멀리 떨어질수록, 도형 패치의 형태가 더욱 복잡해집니다. + - 기계는 속도가 한정되어 있습니다. 최대 효율을 위해 자원을 분할하세요. + - 밸런서를 통해 효율성을 극대화시키세요. + - 구성이 중요합니다. 컨베이어 벨트가 서로 너무 교차되지 않도록 하세요. + - 미래를 계획하세요. 그렇지 않으면 크나큰 혼란을 겪을 수 있습니다! + - 굳이 오래된 공장을 철거하지는 마세요! 업그레이드를 하려면 이전의 도형도 필요합니다! + - 도움을 받기 전에, 혼자서 직접 레벨 20까지 클리어를 시도해보세요! + - 복잡하게 대신 단순하게, 그러면 멀리 나아갈 수 있을 겁니다. + - 나중에 지었던 공장을 재사용해야 할 때가 있을 겁니다. 언제나 공장을 재사용할 수 있도록 계획하세요. + - 간혹 굳이 절단하고 결합하지 않고도, 지도 곳곳에서 필요한 형태의 도형을 찾을 수도 있습니다. + - 온전한 모양의 풍차 모양 도형은 절대 자연적으로 생성되지 않습니다. + - 색소를 최대한 덜 사용하기 위해, 절단하기 전에 먼저 색칠기로 색칠하세요. + - 극한의 확장성을 가진 모듈 공장을 사용한다면 이 넓은 땅은 인간의 관심사에 있는 공간에 불과합니다. + - 별도의 청사진 공장을 만드세요. 언제나 확장성이 중요합니다. + - 혼합기를 잘 살펴보면, 그 질문에 대한 답을 얻을 수 있습니다. + - CTRL + 클릭을 사용하여 영역을 선택합니다. + - 공장을 허브에 가까이 지으면 나중에 거대한 프로젝트에 방해가 될 수 있습니다. + - 업그레이드 목록에 나타나는 도형 옆의 핀 아이콘을 누르면 화면에 고정됩니다. + - 세 가지의 기본 색상을 모두 섞어서 흰색을 만드세요! + - 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 맘껏 확장하세요! + - Factorio도 플레이 해보세요! 제가 가장 좋아하는 게임입니다. + - 4단 절단기는 오른쪽 상단부터 시계 방향으로 차례로 절단합니다. + - 메인 메뉴에서 세이브 파일을 다운로드 할 수 있습니다. + - 이 게임에는 유용한 조작법이 많습니다! 설정 페이지에서 확인해보세요. + - 이 게임에는 다양한 설정이 있습니다. 꼭 확인해 보세요! + - 허브의 마커에는 방향을 나타내는 작은 나침반이 있습니다! + - 벨트를 제거하고 싶다면 해당 영역을 잘라낸 다음, 같은 위치에 붙여 넣으세요. + - F4 키를 누르면 FPS와 틱 비율을 표시합니다. + - F4 키를 두번 누르면 마우스와 카메라의 타일을 표시합니다. + - 왼쪽에 고정된 도형을 클릭하여 고정을 해제할 수 있습니다. diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml index ade082ee..142d1fc8 100644 --- a/translations/base-lt.yaml +++ b/translations/base-lt.yaml @@ -1,59 +1,51 @@ steamPage: shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map. - 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. - - 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]! - - 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! - - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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] - - [b]This game is 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] - - [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] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Loading error: Error @@ -128,7 +120,9 @@ dialogs: text: "Failed to load your savegame:" confirmSavegameDelete: title: Confirm deletion - text: Are you sure you want to delete the game? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Failed to delete text: "Failed to delete the savegame:" @@ -179,8 +173,7 @@ 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) + key of a shape (Which you can generate here) titleEdit: Edit Marker markerDemoLimit: desc: You can only create two custom markers in the demo. Get the standalone for @@ -455,7 +448,9 @@ buildings: input. quad: name: Painter (Quad) - description: Allows to color each quadrant of the shape with a different color. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Painter description: Colors the whole shape on the left input with the color from the @@ -585,11 +580,12 @@ buildings: storyRewards: 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! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotating desc: The rotater has been unlocked! It rotates shapes @@ -612,9 +608,9 @@ storyRewards: stacked on top of the left input! 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: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: The tunnel has been unlocked - You can now tunnel items @@ -626,9 +622,10 @@ storyRewards: press 'T' to cycle its variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can + desc: "You have unlocked the chained extractor! It can forward its resources to other extractors so you - can more efficiently extract resources! + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Tier II desc: You have unlocked a new variant of the tunnel - It has a @@ -645,13 +642,18 @@ storyRewards: once consuming just one color instead of two! 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 the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! 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!) + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Blueprints desc: You can now copy and paste parts of your factory! Select @@ -688,8 +690,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index da9e79e7..bcc66885 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -2,59 +2,50 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Officiële Discord + intro: >- + Shapez.io is een spel waarin je fabrieken moet bouwen voor de + automatische productie van geometrische vormen. - shapez.io is een spel dat draait om het bouwen van fabrieken om steeds complexere vormen te produceren en deze productie te automatiseren in een oneindig groot speelveld. Door het leveren van de gevraagde vormen, kom je verder in het spel en ontgrendel je upgrades waar je fabriek sneller van wordt. + Naarmate het spel vordert, worden de vormen complexer, en moet je uitbreiden in het oneindige speelveld. - De vraag naar vormen wordt steeds groter, wat betekent dat je de fabriek moet uitbreiden om de vraag tegemoet te komen. Om de juiste grondstoffen te delven zul je steeds verder in het [b]oneindig grote speelveld[/b] moeten gaan werken! + En als dat nog niet genoeg is moet je ook nog eens steeds me produceren om aan de vraag te kunnen voldoen. Het enige dat helpt is uitbreiden! - Omdat simpele vormen snel saai worden, moet je kleuren mengen om de vormen te verven - Combineer rode, groene en blauwe grondstoffen om verschillende kleuren te produceren en gebruik deze om de vormen te verven, zodat je de vraag hiernaar tegemoet kan komen. + Ondanks het feit dat je in het begin alleen vormen maakt, komt er het punt waarop je ze moet kleuren. Deze kleuren moet je vinden en mengen! - Dit spel bevat 18 levels (Waar je al uren mee bezig zal zijn!), maar ik ben continu bezig om het spel uit te breiden - er staat veel in de planning! + Door het spel op Steam te kopen kun je de volledige versie spelen. Je kunt echter ook een demo versie spelen op shapez.io en later beslissen. + title_advantages: Standalone Voordelen + advantages: + - 12 Nieuwe Levels met een totaal van 26 levels + - 18 Nieuwe Gebouwen voor een volledig geautomatiseerde fabriek! + - 20 Upgrade Levels voor vele speeluren! + - Draden Update voor een volledig nieuwe dimensie! + - Dark Mode! + - Ongelimiteerde Saves + - Ongelimiteerde Markers + - Help mij! ❤️ + title_future: Geplande Content + planned: + - Blueprint Bibliotheek (Alleen volledige versie) + - Steam Prestaties + - Puzzel Modus + - Minimap + - Mods + - Sandbox modus + - ... en nog veel meer! + title_open_source: Dit spel is open source! + title_links: Links + links: + discord: Officiële Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help vertalen + text_open_source: >- + Iedereen mag meewerken. Ik ben actief betrokken in de community en + probeer alle suggesties en feedback te beoordelen als dat nodig is. - Wanneer je het spel koopt dan krijg je toegang tot de standalone versie. Deze heeft extra functies en je krijgt ook toegang tot nieuwe ontwikkelingen. - - [b]Standalone Voordelen[/b] - - [list] - [*] Donkere modus - [*] Oneindig veel markeringen - [*] Oneindig veel savegames - [*] Extra opties - [*] Binnenkort: Kabels & Energie! Hopelijk vanaf eind juli 2020. - [*] Binnenkort: Meer Levels - [*] Help mij om shapez.io verder te ontwikkelen ❤️ - [/list] - - [b]Geplande Updates[/b] - - Ik update het spel regelmatig en probeer dit zeker eenmaal per week te doen! - - [list] - [*] Verschillende speelvelden en uitdagingen (bijv. obstakels) - [*] Puzzels (Bezorg de gevraagde vorm binnen een afgesloten gebied of met bepaalde gebouwen) - [*] Een verhaalmodus waar gebouwen iets kosten - [*] Aanpasbare speelveldgenerator (Kies de hoeveelheid en grootte van grondstoffen, seed en meer) - [*] Meer soorten vormen - [*] Prestatieverbeteringen (Het spel loopt al vrij goed!) - [*] En nog veel meer! - [/list] - - [b]Dit spel is open source![/b] - - Iedereen kan bijdragen. Ik ben actief in de community en probeer naar alle suggesties en feedback te kijken en deze op te nemen in de ontwikkeling. Bekijk mijn trello-bord voor het volledige stappenplan! - - [b]Links[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Official Discord[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Stappenplan[/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 met vertalen[/url] - [/list] - discordLinkShort: Official Discord + Zorg dat je ook mijn trello board bekijkt voor de volledige roadmap! global: loading: Laden error: Fout @@ -129,7 +120,9 @@ dialogs: text: "Het laden van je savegame is mislukt:" confirmSavegameDelete: title: Bevestig verwijderen - text: Weet je zeker dat je het spel wil verwijderen? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Verwijderen mislukt text: "Het verwijderen van de savegame is mislukt:" @@ -184,9 +177,8 @@ dialogs: van lopende banden om te draaien wanneer je ze plaatst.
" createMarker: title: Nieuwe markering - desc: Geef het een betekenisvolle naam. Je kunt ook een - icoontje van een vorm toevoegen (die je hier kunt maken) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Edit Marker markerDemoLimit: desc: Je kunt maar twee markeringen plaatsen in de demo. Koop de standalone voor @@ -206,17 +198,17 @@ dialogs: dat je het wil knippen? editSignal: title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + descItems: "Kies een ingesteld item:" + descShortKey: ... of voer de short key van een vorm (Die je + hier kunt vinden) in. renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Hernoem opgeslagen spel + desc: Geef je opgeslagen spel een nieuwe naam. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Performance Waarschuwing + desc: Je hebt veel gebouwen geplaatst. Dit is een vriendelijke herinnering dat + het spel niet oneindig veel gebouwen kan bewaren. Probeer je + fabrieken compact te houden. ingame: keybindingsOverlay: moveMap: Beweeg speelveld @@ -230,7 +222,7 @@ ingame: placeBuilding: Plaats gebouw createMarker: Plaats markering delete: Vernietig - pasteLastBlueprint: Plak laatst gekopiëerde blauwdruk + pasteLastBlueprint: Plak laatst gekopieerde blauwdruk lockBeltDirection: Gebruik lopende band planner plannerSwitchSide: Draai de richting van de planner cutSelection: Knip @@ -257,7 +249,7 @@ ingame: notifications: newUpgrade: Er is een nieuwe upgrade beschikbaar! gameSaved: Je spel is opgeslagen. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Level is voltooid! shop: title: Upgrades buttonUnlock: Upgrade @@ -333,7 +325,7 @@ ingame: 1_2_conveyor: "Verbind de ontginner met een lopende band aan je hub!

Tip: Klik en sleep de lopende band met je muis!" - 1_3_expand: "Dit is GEEN nietsdoen-spel! bouw meer ontginners + 1_3_expand: "Dit is GEEN nietsdoen-spel! Bouw meer ontginners en lopende banden om het doel sneller te behalen.

Tip: Houd SHIFT ingedrukt om meerdere ontginners te plaatsen en gebruik R om ze te draaien." @@ -350,43 +342,43 @@ ingame: shapeViewer: title: Lagen empty: Leeg - copyKey: Kopiëer sleutel + copyKey: Kopieer sleutel connectedMiners: one_miner: 1 Miner n_miners: Miners - limited_items: Limited to + limited_items: "Gelimiteerd tot: " watermark: - title: Demo version - desc: Click here to see the Steam version advantages! + title: Demo versie + desc: Klik hier om het spel op Steam te bekijken! get_on_steam: Get on steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Koop de volledige versie! + no_thanks: Nee, bedankt! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Nieuwe Levels + desc: Voor een totaal van 26 levels! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Nieuwe Gebouwen + desc: Automatiseer je fabrieken! savegames: title: ∞ Savegames - desc: As many as your heart desires! + desc: Zo veel je maar wilt! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Upgrade Levels + desc: Deze demo heeft er enkel 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Markeringen + desc: Verdwaal nooit meer in je fabriek! wires: - title: Wires - desc: An entirely new dimension! + title: Kabels + desc: Een volledig nieuwe dimensie! darkmode: title: Dark Mode - desc: Stop hurting your eyes! + desc: Minder vervelend voor je ogen! support: - title: Support me - desc: I develop it in my spare time! + title: Help mij + desc: Ik maak dit spel in mijn vrije tijd! shopUpgrades: belt: name: Banden, Verdeler & Tunnels @@ -439,8 +431,8 @@ buildings: name: Roteerder (andersom) description: Draait vormen 90 graden tegen de klok in. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Roteerder (180) + description: Draait vormen 180 graden. stacker: default: name: Stapelaar @@ -461,7 +453,9 @@ buildings: input. quad: name: Verver (Quad) - description: Verft elke kwart van de vorm een andere kleur. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Verver description: Verft de volledige vorm in de linker input met de kleur van de @@ -480,127 +474,123 @@ buildings: name: Energiekabel description: Voor transport van energie. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Kabel + description: Vervoerd signalen, zoals items, kleuren of booleans (1 of 0). + Verschillende kleuren kabels kunnen niet verbonden worden. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Balanceerder + description: Multifunctioneel - Verdeel alle invoeren over alle uitvoeren. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Samenvoeger (compact) + description: Voeg 2 lopende banden samen. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Samenvoeger + description: Voeg 2 lopende banden samen. splitter: name: Splitter (compact) - description: Splits one conveyor belt into two. + description: Split een lopende band in tweeën. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Splitter + description: Split een lopende band in tweeën. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Opslag + description: Slaat teveel aan items of kleuren op. De linker uitvoer heeft de + voorkeur. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Kabel kruising + description: Kruis 2 kabels zonder ze te koppelen constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Constant Signaal + description: Zend een constant signaal, dit kan een vorm, kleur of boolean (1 / + 0) zijn. lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Schakelaar + description: Zend een 1 of een 0 uit afhankelijk van de stand. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: AND poort + description: Zend een 1 uit als beide invoeren hetzelfde zijn. (Kan een vorm, + kleur of boolean (1 / 0) zijn) not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NOT poort + description: Zend een 1 uit als de invoer een 0 is. xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: XOR poort + description: Zend een 1 uit als de invoeren niet hetzelfde zijn. (Kan een vorm, + kleur of boolean (1 / 0) zijn) or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: OR gate + description: Zend een 1 uit als de invoeren wel of niet hetzelfde zijn, maar + niet uit zijn. (Kan een vorm, kleur of boolean (1 / 0) zijn) transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Geeft het signaal van onder door als de zijkant 1 is. mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Geeft het signaal van onder door als de zijkant 1 is. filter: default: name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + description: Stuurt alle items van de ingestelde soort naar boven en de rest + naar rechts. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Scherm + description: Verbind een signaal met het scherm om de soort weer te geven. Kan + een vorm, kleur of boolean (1 / 0) zijn. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Lopende band lezer + description: Meet de gemiddelde doorvoer op de band. Geeft het laatste gelezen + item door aan de kabel. analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Vorm Analyse + description: Analiseerd de onderste laag rechts boven en geeft de kleur en vorm + door aan de kabel. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Vergelijker + description: Zend 1 uit als beiden invoeren gelijk zijn, kunnen vormen, kleuren + of booleans (1 / 0) zijn virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Virtuele Snijder + description: Snijdt de vorm virtueel in twee helften. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Virtuele Draaier + description: Draait de vorm virtueel met de klok mee en tegen de klok in. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Virtuele Ontstapelaar + description: Geeft de bovenste laag door aan de rechter uitvoer en de rest aan + de linker uitvoer. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Virtuele Stapelaar + description: Stapelt de rechter vorm virtueel op de linkervorm. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Virtuele Schilder + description: Schildert de vorm virtueel vanaf de onderste invoer met de vorm aan + de rechter ingang. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Item Producent + description: Alleen beschikbaar in sandbox-modus, geeft het gegeven signaal van + de kabel laag op de reguliere laag. storyRewards: reward_cutter_and_trash: title: Vormen Knippen - desc: Je hebt de knipper ontgrendeld - Deze knipt vormen half - van boven naar onder ongeacht de - oriëntatie!

Zorg dat je ongebruikte vormen weggooit, anders - loopt het vast - Dit is waarom ik je een vuilnisbak - heb gegeven, die alles wat er in komt vernietigt! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Roteren desc: De roteerder is ontgrendeld - Het draait vormen 90 graden @@ -626,10 +616,9 @@ storyRewards: linker geplaatst! reward_splitter: title: Splitter/samenvoeger - desc: De multifunctionele verdeler is ontgrendeld - Het kan - worden gebruikt om grotere fabrieken te bouwen door - voorwerpen samen te voegen of te verdelen over - meerdere lopende banden!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: De tunnel is ontgrendeld - Je kunt nu voorwerpen onder @@ -642,14 +631,15 @@ storyRewards: wisselen! reward_miner_chainable: title: Ketting-ontginner - desc: Je hebt de Ketting-ontginner ontgrendeld! Deze kan - grondstoffen doorsturen naar andere ontginners, - waardoor je efficiënter grondstoffen kan onttrekken! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Niveau II - desc: Je hebt een variant van de tunnel ontgrendeld - Deze - heeft een grotere reikwijdtetunnel - It has a + bigger range, and you can also mix-n-match those + tunnels now! reward_cutter_quad: title: Quad Knippen desc: Je hebt een variant van de knipper ontgrendeld - Dit @@ -661,14 +651,18 @@ storyRewards: tegelijk met één kleur in plaats van twee! reward_storage: title: Opslagbuffer - desc: Je hebt een variant van de vuilnisbak ontgrendeld - Het - slaat voorwerpen op tot een zekere hoeveelheid! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Vrij spel - desc: Het is gelukt! je hebt het vrije spel ontgrendeld! Dit - betekent dat gevraagde vormen vanaf nu willekeurig gegenereerd - worden! (Geen zorgen, het spel wordt in de toekomst nog verder - uitgebreid in de standalone!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Blauwdrukken desc: Je kunt nu delen van je fabriek kopiëren en plakken! @@ -688,41 +682,44 @@ storyRewards: desc: Gefeliciteerd! Even tussendoor, het spel wordt in de toekomst nog verder uitgebereid in de standalone! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

+ title: Verdeler + desc: De multifunctionele verdeler is vrijgespeeld - Dit gebouw + can worden gebruikt om je fabrieken nog groter te maken door lopende + banden te splitsen en samen te voegen!

reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Compacte samenvoeger + desc: Je hebt een variant op de samenvoeger van de + verdeler vrijgespeeld - Dit gebouw maakt van 2 + lopende banden 1! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Lopende band lezer + desc: Je hebt de lopende band lezer vrijgespeeld! Dit gebouw + geeft de doorvoer op een lopende band weer.

Wacht maar tot je + kabels vrijspeeld, dan wordt het pas echt interessant! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Draaier (180 graden) + desc: Je hebt de 180 graden draaier vrijgespeeld! - Hiermee kun + je een item op de band 180 graden draaien! reward_display: - title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + title: Scherm + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Constante Signaal + desc: Je hebt het constante signaal vrijgespeeld op de kabel + dimensie! Dit gebouw is handig in samenwerking met item + filters.

Het constante signaal kan een + vorm, kleur of + boolean (1 / 0) zijn. reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Logische poorten + desc: Je hebt de logische poorten vrijgespeeld! Misschien word + je hier nog niet zo vrolijk van, maar eigenlijk zijn ze heel erg + handig!

Met logische poorten kun je AND, OR en XOR operaties + uitvoeren.

Als bonus krijg je ook nog een + transistor van mij! reward_virtual_processing: title: Virtual Processing desc: I just gave a whole bunch of new buildings which allow you to @@ -743,13 +740,13 @@ storyRewards: E." reward_filter: title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + desc: Je hebt de Item Filter vrijgespeeld! Items worden naar + rechts of naar boven gestuurd, afhankelijk van de invoer.

Er + kan ook een boolean (1 / 0) worden ingevoerd om de filter in en uit + te schakelen. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Einde van de Demo + desc: Je hebt het einde van de demoversie bereikt! settings: title: Opties categories: @@ -864,7 +861,7 @@ settings: kunt spelen wanneer je kleurenblind bent. rotationByBuilding: title: Rotatie per type gebouw - description: Elk type gebouw onthoud apart de rotatie waarin je het voor het + description: Elk type gebouw onthoudt apart de rotatie waarin je het voor het laatst geplaatst hebt. Dit kan handig zijn wanneer je vaak tussen verschillende soorten gebouwen wisselt. soundVolume: @@ -874,41 +871,42 @@ settings: title: Music Volume description: Set the volume for music lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Lage kwaliteit van resources + description: Versimpeldde resources op de wereld wanneer ingezoomd om de + performance te verbeteren. Het lijkt ook opgeruimder, dus + probeer het zelf een keertje uit! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Zet Grid uit + description: Door de grid uit te zetten krijgt het spel een betere performance. + Het zorgt er ook voor dat het spel er opgeruimder uit ziet! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Verwijder cursor met rechtermuisknop + description: Standaard aan, Stopt met het plaatsen van gebouwen door te klikken + op de rechtermuisknop. Als deze instelling uit staat kunnen + gebouwen verwijderd worden tijdens het plaatsen door te klikken + op de rechtermuisknop. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Lage kwaliteit + description: Gebruikt een lage kwaliteit voor meer performance. Het spel ziet er + wel niet meer mooi uit! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Toon gebied omlijning + description: Het spel is verdeeld in gebieden van 16x16 tegels. Als deze + instelling is ingeschakeld, zijn de lijnen hiervan zichtbaar. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Selecteer ontginner boven resource vakje + description: Standaard aan. Selecteerd automatisch de ontginner wanneer de muis + met de pipet boven het vakje van een resource staat. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Versimpelde lopende banden + description: Toont geen items op de band tenzij je over de lopende band beweegt + met je muis. De functie wordt niet aangeraden tenzij het qua + performance echt niet anders kan! enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Schakel bewegen met muis in + description: Schakel deze functie in om met je muis het veld te kunnen bewegen. + Plaats de cursor boven, rechts, links of onder om daar naartoe + te bewegen. rangeSliderPercentage: % keybindings: title: Sneltoetsen @@ -969,20 +967,20 @@ keybindings: switchLayers: Lagen omwisselen wire: Energiekabel balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) + storage: Opslag + constant_signal: Constant Signaal + logic_gate: Logische poort + lever: Schakelaar (regulier) filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + wire_tunnel: Kabel kruising + display: Scherm + reader: Lopende band lezer + virtual_processor: Virtuele Snijder transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Vorm Analyse + comparator: Vergelijk + item_producer: Item Producent (Sandbox) + copyWireValue: "Kabels: Kopieer waarde onder cursor" about: title: Over dit spel body: >- @@ -1008,63 +1006,79 @@ demo: exportingBase: Exporteer volledige basis als afbeelding settingNotAvailable: Niet beschikbaar in de demo. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - De hub accepteert elke vorm van invoer, niet alleen de huidige vorm! + - Zorg ervoor dat uw fabrieken modulair zijn - het loont! + - Bouw niet te dicht bij de hub, anders wordt het een enorme chaos! + - Als het stapelen niet werkt, probeer dan de ingangen om te wisselen. + - U kunt de richting van de lopende band planner wijzigen door op R + te drukken. + - Door CTRL ingedrukt te houden, kunnen lopende banden worden + gesleept zonder automatische oriëntatie. + - Verhoudingen blijven hetzelfde, zolang alle upgrades zich op hetzelfde + niveau bevinden. + - Opeenvolgende uitvoering is efficiënter dan parallele uitvoering. + - Je ontgrendelt later in het spel meer varianten van gebouwen! + - U kunt T gebruiken om tussen verschillende varianten te schakelen. + - Symmetrie is de sleutel! + - Je kunt verschillende tunnels weven. + - Probeer compacte fabrieken te bouwen - het loont! + - De schilder heeft een gespiegelde variant die u kunt selecteren met + T + - Met de juiste bouwverhoudingen wordt de efficiëntie gemaximaliseerd. + - Op het maximale niveau vullen 5 ontginners een enkele band. + - Vergeet tunnels niet! + - U hoeft de items niet gelijkmatig te verdelen voor volledige efficiëntie. + - Als u SHIFT ingedrukt houdt tijdens het bouwen van lopende banden, + wordt de planner geactiveerd, zodat je gemakkelijk lange rijen kunt + plaatsen. + - Snijders snijden altijd verticaal, ongeacht hun oriëntatie. + - Meng alle drie de kleuren om wit te krijgen. + - De opslagbuffer geeft prioriteit aan de eerste uitvoer. + - Investeer tijd om herhaalbare ontwerpen te maken - het is het waard! + - Door SHIFT ingedrukt te houden, kunnen meerdere gebouwen worden + geplaatst. + - U kunt ALT ingedrukt houden om de richting van de geplaatste banden + om te keren. + - Efficiëntie is de sleutel! + - Vormontginningen die verder van de hub verwijderd zijn, zijn complexer. + - Machines hebben een beperkte snelheid, verdeel ze voor maximale + efficiëntie. + - Gebruik verdelers om uw efficiëntie te maximaliseren. + - Organisatie is belangrijk. Probeer de transportbanden niet te veel over te + steken. + - Plan van tevoren, anders wordt het een enorme chaos! + - Verwijder uw oude fabrieken niet! Je hebt ze nodig om upgrades te + ontgrendelen. + - Probeer in je eentje level 20 te verslaan voordat je hulp zoekt! + - Maak de dingen niet ingewikkeld, probeer eenvoudig te blijven en u zult + ver komen. + - Mogelijk moet u later in het spel fabrieken hergebruiken. Plan uw + fabrieken zodat ze herbruikbaar zijn. + - Soms kunt u een gewenste vorm op de kaart vinden zonder deze met + stapelaars te maken. + - Volle windmolens / vuurwielen kunnen nooit op natuurlijke wijze spawnen. + - Kleur uw vormen voordat u ze snijdt voor maximale efficiëntie. + - Bij modules is ruimte slechts een beleving; een zorg voor sterfelijke + mannen. + - Maak een aparte blueprint fabriek. Ze zijn belangrijk voor modules. + - Bekijk de kleurenmixer eens wat beter, en uw vragen worden beantwoord. + - Gebruik CTRL + klik om een gebied te selecteren. + - Te dicht bij de hub bouwen kan latere projecten in de weg staan. + - Het speldpictogram naast elke vorm in de upgradelijst zet deze vast op het + scherm. + - Meng alle primaire kleuren door elkaar om wit te maken! + - Je hebt een oneindige kaart, verkramp je fabriek niet, breid uit! + - Probeer ook Factorio! Het is mijn favoriete spel. + - De quad-snijder snijdt met de klok mee vanaf de rechterbovenhoek! + - Je kunt je savegames downloaden in het hoofdmenu! + - Deze game heeft veel handige sneltoetsen! Bekijk zeker de + instellingenpagina. + - Deze game heeft veel instellingen, bekijk ze zeker! + - De markering naar uw hub heeft een klein kompas om de richting aan te + geven! + - Om de banden leeg te maken, knipt u het gebied af en plakt u het op + dezelfde locatie. + - Druk op F4 om uw FPS en Tick Rate weer te geven. + - Druk twee keer op F4 om de tegel van je muis en camera weer te geven. + - U kunt aan de linkerkant op een vastgezette vorm klikken om deze los te + maken. diff --git a/translations/base-no.yaml b/translations/base-no.yaml index 6ac44f8c..8de1a8ce 100644 --- a/translations/base-no.yaml +++ b/translations/base-no.yaml @@ -2,59 +2,51 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Offissiell Discord + intro: >- + Shapez.io er et avslappende spill der du skal bygge fabrikker + for automatisert produksjon av geometriske former. - 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. Ved leveranse av de forespurte formene vil du komme videre i spillet og låse opp oppgraderinger for å øke farten på fabrikken din + Etterhvert som du når høyere nivåer blir formene mer og mer komplekse, og du må spre deg ut over det uendelige kartet. - Etter hvert som forespørselen av former øker, vil du være nødt til å utvide fabrikken din for å møte etterspørselen - Ikke glem ressursene, du vil bli nødt til å utvide over det [b]uendelige brettet[/b]! + Og som om det ikke var nok må du også produsere eksponensielt for å tilfredsstille etterspørselen - det eneste som hjelper er skalering! - Snart blir du nødt til å plande farger og male formene dine med dem - Kombiner røde, grønne og blåe farge ressurser for å produsere forskjellige farger og male former med dem for å tilfredstille etterspørselen. + Mens du kun produserer former i starten må du fargelegge de senere - for å gjøre dette må du hente ut og blande farger! - Dette spillet har 18 progressive nivåer (Noe som burde holde deg opptatt i flere timer allerede!) men jeg legger stadig til nytt innhold - Det er mye som er planlagt! + Ved å kjøpe spillet på Steam får du tilgang til fullversjonen, men du kan også spille en demo på shapez.io først og bestemme deg senere! + title_advantages: Fordeler med fullversjonen + advantages: + - 12 Nye nivåer til totalt 26 nivåer + - 18 Nye byggninger For en helautomatisert fabrikk! + - 20 Oppgraderingsnivåer for mange timer med moro! + - Kabeloppdateringen For en helt ny dimensjon! + - Mørkt tema! + - Uendelige lagringsplasser + - Uendelige markører + - Støtt meg! ❤️ + title_future: Planlagt innhold + planned: + - Blåkopibibliotek (Eksklusivt til fullversjonen) + - Steam-medaljer + - Puslemodus + - Minikart + - Mods + - Sandkassemodus + - ... og masse mer! + title_open_source: Dette spillet har åpen kildekode! + title_links: Lenker + links: + discord: Offisiell Discord + roadmap: Veikart + subreddit: Subreddit + source_code: Kildekode (GitHub) + translate: Hjelp til med å oversette + text_open_source: >- + Alle kan bidra, jeg er aktivt involvert i sammfunnet og prøver å se + gjennom alle forslagene og tar tilbakemeldinger i betraktning der det + er mulig. - Kjøp av spillet gir deg tilgang til den frittstående versjonen som har mange tilleggsfunksjoner og du vil også få tilgang til nyutviklede funksjoner. - - [b]Frittstående fordeler[/b] - - [list] - [*] Mørk Modus - [*] Ubegrensede Veipunkter - [*] Uendelige Lagringsfiler - [*] Tilleggsinnstillinger - [*] Kommer snart: Ledninger og strøm! Sikter mot (omtrent) slutten av Juli 2020. - [*] Kommer snart: Flere Nivåer - [*] Tillater meg å fortsette å utvikle shapez.io ❤️ - [/list] - - [b]Fremtidige Oppdateringer[/b] - - Jeg oppdaterer spillet veldig ofte og prøver å presse inn minst en oppdatering hver uke! - - [list] - [*] Forskjellige nivåer og utfordringer (f.eks. nivåer med hindringer) - [*] Gåter (lever den forspurte formen med et begrenset område / sett med bygninger) - [*] En historiemodus der bygninger har en pris - [*] Konfigurerbar kartgenerator (Konfigurer ressurser/former, størrelse/tetthet, seed og mer) - [*] Flere typer former - [*] Ytelsesforbedringer (Spillet kjører allerede ganske bra!) - [*] Og mye mer! - [/list] - - [b]Dette spillet er åpen kildekode![/b] - - Hvem som helst kan bidra, Jeg er aktivt involvert i samfunnet og forsøker å gå gjennom alle forslag og ta tilbakemelding i betraktning der det er mulig. Sørg for å sjekke trello panelet mitt for hele veikartet! - - [b]Lenker[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Offisiell Discord[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Veikart[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Kildekode (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Hjelp til å oversette[/url] - [/list] - discordLinkShort: Official Discord + Sjekk også mitt Trello-brett for hele veikartet! global: loading: Laster error: Feil @@ -130,7 +122,9 @@ dialogs: text: "Kunne ikke laste inn lagringsfilen:" confirmSavegameDelete: title: Bekreft sletting - text: Er du sikker på at du ønsker å slette lagringsfilen? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Kunne ikke slette text: "Kunne ikke slette lagringsfilen:" @@ -186,9 +180,8 @@ dialogs: samlebånd.
" createMarker: title: Ny Markør - desc: Gi markøren et meningsfullt navn, du kan også inkludere en "short - key" av et objekt (Som du kan generere her) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Rediger markør markerDemoLimit: desc: Du kan kun ha to markører i demoverjsonen. Skaff deg den frittstående @@ -465,7 +458,9 @@ buildings: inngang. quad: name: Maler (Firedobbel) - description: Farger hvert hjørne av formen med forskjellige farger. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Maler description: Maler hele formen på venstre inngang med fargen fra øverste @@ -596,11 +591,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Kutt Objekter - desc: Du åpnet nettop kutter - den kutter former i to fra - topp til bunn uavhengig av rotasjon!

Husk å - kvitt deg med alt søppel, ellers kiler det seg fast - - Derfor har jeg gitt deg søplekassen, som ødelegger alt du putter i - den! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotering desc: Rotereren har blitt tilgjengelig! Den roterer objekter @@ -624,9 +620,9 @@ storyRewards: plassert over venstre inngang! reward_splitter: title: Fordeler/Sammenslåer - desc: Den multifunksjonelle fordeleren har blitt tilgjengelig - - Den kan brukes til å bygge større fabrikker ved å fordele og - slå sammen objekter til flere samlebånd!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: Tunnelen har blitt tilgjengelig - Du kan nå transportere @@ -638,9 +634,10 @@ storyRewards: trykk 'T' for å veksle mellom variantene! reward_miner_chainable: title: Kjedeutdrager - desc: Du har åpnet kjedeutdrageren! Den sender sine - resurser videre til andre utdragere så de kan hente ut - ressurser mer effektivt! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Nivå II desc: Du har åpnet en ny variant av tunnelen - Den har @@ -657,13 +654,18 @@ storyRewards: konsumerer bare en farge istedenfor to! reward_storage: title: Lagringsbuffer - desc: Du har åpnet en variant av søpplekassen - Den lar deg - lagre objekter opp til en viss mengde! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Frispill - desc: Du klarte det! Du åpnet frispillmodus! Dette betyr at - formene er nå tilfeldig generert! (Ikke vær redd, mer innhold er - planlagt for den frittstående versjonen!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Blåkopier desc: Du kan nå kopiere og lime inn deler av fabrikken din! @@ -702,8 +704,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index 3520e796..71a5f867 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -2,59 +2,51 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Oficjalny serwer Discord + intro: >- + Shapez.io jest spokojną grą, której celem jest budowanie automatycznych fabryk + produkujących różne kształty geometryczne. - shapez.io to gra o budowie fabryk, która automatyzuje tworzenie i przetwarzanie coraz bardziej złożonych kształtów na nieskończenie powiększającej się mapie. Po dostarczeniu wymaganych kształtów będziesz postępować w grze i odblokowywać ulepszenia, aby przyspieszyć fabrykę. + W miarę zwiększania się poziomów, kształty będą stawać się coraz bardziej skomplikowane, a Twoja fabryka będzie musiała się rozpszetrzenić na mapie o nieskończonej wielkości. - Wraz ze wzrostem zapotrzebowania na kształty, będziesz musiał powiększyć swoją fabrykę, aby zaspokoić popyt - Nie zapominaj jednak o zasobach, będziesz musiał rozwinąć się na [b] nieskończonej mapie [/ b]! + A jeżeli to było mało, będziesz również musiał produkować coraz więcej kształtów, by zaspokoić wymagania - jedynym rozwiązaniem jest skalowanie fabryki! - Wkrótce będziesz musiał mieszać kolory i malować nimi kształty - Połącz zasoby kolorów czerwonego, zielonego i niebieskiego, aby uzyskać różne kolory i pomalować kształty, aby zaspokoić popyt. + Początkowo przekształcanie kształtów będzie proste, ale później będziesz również musiał je malować - wymaga to wydobywania i łączenia barwników! - Ta gra oferuje 18 poziomów progresywnych (które powinny być zajęte przez wiele godzin!), Ale ciągle dodam nowe treści - Wiele jest zaplanowanych! + Kupienie gry w serwisie Steam przyznaje Ci dostęp do pełnej wersji, ale możesz również skorzystać z wersji demonstracyjnej na strone shapez.io i rozważyć zakup później! + title_advantages: Korzyści wersji pełnej + advantages: + - 12 Nowych poziomów (razem 26 poziomów)s + - 18 Nowych budynków umożliwiających zbudowanie całkowicie automatycznej fabryki! + - 20 Poziomów ulepszeń zapewniających wiele godzin zabawy! + - Aktualizacja z przewodami dodająca całkowicie nowy wymiar! + - Tryb Ciemny! + - Nielimitowane zapisy gry + - Nielimitowane znaczniki + - Wspomóż mnie! ❤️ + title_future: Planowane funkcje + planned: + - Biblioteka schematów (Tylko dla Wersji pełnej) + - Osiągniecia + - Tryb zagadek + - Minimapa + - Modyfikacje + - Tryb piaskownicy + - ... i wiele więcej! + title_open_source: Ta gra jest open-source! + title_links: Linki + links: + discord: Oficjalny serwer Discord + roadmap: Plany gry + subreddit: Reddit + source_code: Kod źródłowy (GitHub) + translate: Pomóż w tłumaczeniu + text_open_source: >- + Każdy może pomóc w tworzeniu gry, jestem aktywny wśród społeczności + i próbuję odbierać wszystkie sugestie i brać je pod uwagę, gdzie tylko + jest to możliwe. - Zakup gry daje dostęp do samodzielnej wersji, która ma dodatkowe funkcje, a także dostęp do nowo opracowanych funkcji. - - [b]Samodzielne zalety[/b] - - [list] - [*] Tryb ciemny - [*] Nieograniczone punkty trasy - [*] Nieograniczona liczba zapisanych gier - [*] Dodatkowe ustawienia - [*] Wkrótce: przewody i energia! Dążenie do (z grubsza) końca lipca 2020 r. - [*] Wkrótce: Więcej poziomów - [*] Pozwala mi dalej rozwijać shapez.io ❤️ - [/list] - - [b]Przyszłe aktualizacje[/b] - - Aktualizuję grę bardzo często i staram się przesyłać aktualizacje przynajmniej co tydzień! - - [list] - [*] Różne mapy i wyzwania (np. Mapy z przeszkodami) - [*] Puzzle (Dostarcz żądany kształt z ograniczonym obszarem / zestawem budynków) - [*] Tryb fabularny, w którym budynki kosztują - [*] Konfigurowalny generator map (Konfiguruj rozmiar / gęstość zasobu / kształtu, ziarno i więcej) - [*] Dodatkowe typy kształtów - [*] Ulepszenia wydajności (gra działa już całkiem dobrze!) - [*] I wiele więcej! - [/list] - - [b]Ta gra jest open source![/b] - - Każdy może się przyłączyć, jestem aktywnie zaangażowany w społeczność i staram się przejrzeć wszystkie sugestie i wziąć pod uwagę opinie tam, gdzie to możliwe. Zapoznaj się z moją tablicą trello, aby zobaczyć pełną mapę drogową! - - [b]Linki[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Oficjalna 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]Kod źródłowy (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Pomóż w tłumaczeniu[/url] - [/list] - discordLinkShort: Official Discord + Sprawdź moją tablicę Trello, by zobaczyć moje dalsze plany! global: loading: Ładowanie error: Wystąpił błąd @@ -87,7 +79,7 @@ global: shift: SHIFT space: SPACJA demoBanners: - title: Wersja demo + title: Wersja demonstracyjna intro: Kup pełną wersję gry, by odblokować więcej funkcji! mainMenu: play: Rozpocznij @@ -104,7 +96,7 @@ mainMenu: savegameLevelUnknown: Nieznany poziom madeBy: Gra wykonana przez subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Zapis bez nazwy dialogs: buttons: ok: OK @@ -129,7 +121,9 @@ dialogs: text: "Nie udało się wczytać twojego zapisu gry:" confirmSavegameDelete: title: Potwierdź usuwanie - text: Jesteś pewien, że chcesz usunąć zapis? + text: Czy jesteś pewny, że chcesz usunąć poniższy zapis gry?

+ '' (poziom )

+ Ta akcja nie może być cofnięta! savegameDeletionError: title: Błąd usuwania text: "Nie udało się usunąć zapisu:" @@ -148,9 +142,9 @@ dialogs: title: Reset Klawiszologii desc: Klawiszologia została przywrócona do ustawień domyślnych! featureRestriction: - title: Wersja Demo + title: Wersja Demonstracyjna desc: Próbujesz skorzystać z "", który nie jest dostępny w wersji demo. - Rozważ zakup gry dla pełni doświadczeń! + Rozważ zakup pełnej wersji gry dla pełni doświadczeń! oneSavegameLimit: title: Limit Zapisów Gry desc: W wersji demo możesz posiadać wyłącznie jeden zapis gry. Proszę usuń @@ -183,9 +177,8 @@ dialogs: taśmociągów.
" createMarker: title: Nowy Znacznik - desc: Podaj nazwę znacznika. Możesz w niej zawrzeć kod - kształtu, który możesz wygenerować tutaj. + desc: Nadaj mu nazwę. Możesz w niej zawrzeć kod + kształtu (Który możesz wygenerować tutaj) titleEdit: Edytuj Znacznik markerDemoLimit: desc: Możesz stworzyć tylko dwa własne znaczniki w wersji demo. Zakup pełną @@ -205,18 +198,18 @@ dialogs: desc: Nie posiadasz wystarczająco kształtów schematów na wklejenie tego obszaru! Czy na pewno chcesz go wyciąć? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Ustaw Sygnał + descItems: "Ustaw wcześniej zdefiniowany przedmiot:" + descShortKey: ... albo wpisz kod kształtu (Który możesz + wygenerować tutaj) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Zmień nazwę zapisu gry + desc: Tutaj możesz zmienić nazwę zapisu gry. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Uwaga o Wydajności gry + desc: Postawiłeś dużo budynków, to jest tylko przyjazne przypomnienie, że + gra nie może utrzymać nieskończonej ilości budynków - Więc spróbuj + zrobić swoje budowle kompaktowe! ingame: keybindingsOverlay: moveMap: Ruch @@ -267,7 +260,7 @@ ingame: notifications: newUpgrade: Nowe ulepszenie dostępne! gameSaved: Postęp gry został zapisany. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Poziom został ukończony! shop: title: Ulepszenia buttonUnlock: Ulepsz @@ -309,9 +302,9 @@ ingame: description: Wyświetla kształty dostarczone do budynku głównego. noShapesProduced: Brak wyprodukowanych kształtów. shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / sek. + minute: / min. + hour: / godz. settingsMenu: playtime: Czas Gry buildingsPlaced: Budynki @@ -333,9 +326,9 @@ ingame: lub prawym, by go usunąć.

Naciśnij , by stworzyć marker na środku widoku lub prawy przycisk myszy, by stworzyć na wskazanej lokacji. - creationSuccessNotification: Utworzono znacznik. + creationSuccessNotification: Pomyślnie utworzono znacznik. shapeViewer: - title: Poziomy + title: Warstwy empty: Puste copyKey: Skopiuj kod interactiveTutorial: @@ -352,41 +345,41 @@ ingame: postawić wiele ekstraktorów. Naciśnij R, by je obracać.' connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 ekstraktor + n_miners: ekstraktorów + limited_items: Ograniczone do watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Wersja demo + desc: Kliknij tutaj, aby zobaczyć co potrafi wersja Steam! + get_on_steam: Kup na Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Kup pełną wersję! + no_thanks: Nie, dziękuję! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Nowych Poziomów + desc: Aby otrzymać 26 poziomów! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Nowych Budynków + desc: W pełni zautomatyzuj produkcję! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Zapisów Gry + desc: Twórz tyle, ile potrzebujesz! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Poziomów Ulepszeń + desc: To demo posiada tylko 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Znaczników + desc: Nigdy nie zgub się w swojej fabryce! wires: - title: Wires - desc: An entirely new dimension! + title: Przewody + desc: Całkowicie nowy wymiar! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Tryb Ciemny + desc: Przestań psuć swój wzrok! support: - title: Support me - desc: I develop it in my spare time! + title: Wspomóż mnie + desc: Tworzę tą grę w swoim wolnym czasie! shopUpgrades: belt: name: Taśmociągi, Dystrybutory & Tunele @@ -405,7 +398,7 @@ buildings: deliver: Dostarcz toUnlock: by odblokować levelShortcut: Poz. - endOfDemo: End of Demo + endOfDemo: Koniec wersji demonstracyjnej belt: default: name: Taśmociąg @@ -466,8 +459,9 @@ buildings: kształty używając 1 barwnika. quad: name: Malarz (Poczwórny) - description: Koloruje każdą ćwiartkę kształtu na inny kolor, używając - dostarczonych kolorów. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Malarz description: Koloruje kształt za pomocą koloru dostarczonego od boku. @@ -480,127 +474,126 @@ buildings: name: Przewód energetyczny description: Pozwala na transportowanie energii. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Przewód logiczny + description: + Przekazuje sygnały, które mogą być w postaci przedmiotów, kolorów lub wartości typu Prawda/Fałsz. + Przewody o różnych kolorach nie łączą sie ze sobą. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Dystrybutor + description: Wielofunkcyjny - Równo rozdziela wszystkie kształty wejściowe do wyjść. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Łącznik (kompaktowy) + description: Łączy dwa taśmociągi w jeden. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Łącznik (kompaktowy) + description: Łączy dwa taśmociągi w jeden. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Rozdzielacz (kompaktowy) + description: Rozdziela jeden taśmociąg na dwa. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Rozdzielacz (kompaktowy) + description: Rozdziela jeden taśmociąg na dwa. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Magazyn + description: Przechowuje dodatkowe przedmioty, do pewnej ilości. Może zostać użyty jako + brama przepełnieniowa. Prawe wyjście posiada większy piorytet. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Skrzyżowanie przewodów + description: Pozwala na skrzyżowanie dwóch przewodów bez ich łączenia. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Stały sygnał + description: Emituje stały sygnał, który może być w postaci przedmiotu, koloru lub wartości typu Prawda/Fałsz. lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Przełącznik + description: >- + Może zostać przełączony, by emitować sygnał typu prawda/fałsz, + co pozwala na przykład: na przełączanie filtra przedmiotów. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Bramka AND + description: Emituje sygnał "Prawda", jeżeli oba wejścia są wartością typu Prawda. + (Prawda oznacza dowolny kształt lub kolor, a także sygnał "Prawda") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Bramka NOT + description: Emituje sygnał "Prawda", jeżeli wejście NIE jest wartością typu Prawda. + (Prawda oznacza dowolny kształt lub kolor, a także sygnał "Prawda") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Bramka XOR + description: Emituje sygnał "Prawda", jeżeli tylko jedno wejście jest wartością typu Prawda. + (Prawda oznacza dowolny kształt lub kolor, a także sygnał "Prawda") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Bramka OR + description: Emituje sygnał "Prawda", jeżeli dowolne wejście jest wartością typu Prawda. + (Prawda oznacza dowolny kształt lub kolor, a także sygnał "Prawda") transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Tranzystor + description: Przekazuje dolne wejście, jeżeli wejście boczne jest wartością typu Prawda. + (Prawda oznacza dowolny kształt lub kolor, a także sygnał "Prawda") mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Tranzystor + description: Przekazuje dolne wejście, jeżeli wejście boczne jest wartością typu Prawda. + (Prawda oznacza dowolny kształt lub kolor, a także sygnał "Prawda") filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtr + description: Podłącz sygnał, by przekierować wszystkie pasujące przedmioty na górę, a + resztę na prawo. Może być również sterowany za pomocą sygnałów Prawda/Fałsz. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Wyświetlacz + description: Podłącz sygnał, by pokazać go na wyświetlaczu - Może on być kształtem, kolorem + lub wartością Prawda/Fałsz. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Czytnik taśmociągów + description: Pozwala na odczytywanie średniej przepustowości taśmociągu. Emituje ostatnio + odczytany przedmiot na warstwie przewodów (gdy ją odblokujesz). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Analizator kształtów + description: Analizuje prawą górną ćwiartkę najniższej warstwy i zwraca jej kształt i kolor. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Porównywacz + description: Zwraca sygnał "Prawda", jeżeli oba sygnały są dokładnie takie same. Działa na + kształtach, kolorach i wartościach Prawda/Fałsz. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Wirtualny Przecinak + description: Wirtualnie przecina kształt na 2 połówki rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Wirtualny Obracacz + description: Wirtualnie obraca kształt, potrafi to robić w oba kierunki. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Wirtualny Odklejacz + description: Wirtualnie oddziela najwyższą warstwę na prawe wyjście i + resztę na lewe. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Wirtualny Sklejacz + description: Wirtualnie skleja prawy kształt na lewy. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Wirtualny Malarz + description: Wirtualnie maluje kształt z dolnego wejścia barwnikiem z + prawego wejścia. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Producent kształtów + description: Dostępne tylko w trybie piaskownicy. Produkuje przedmioty z sygnału + danego na warstwie przewodów na główną warstwę. storyRewards: reward_cutter_and_trash: title: Przecinanie Kształtów - desc: "Odblokowano nową maszynę: Przecinak - tnie kształt na - pół pionowo - od góry do dołu, niezależnie od - orientacji!

Upewnij się, że zniszczysz niechciane kawałki, - ponieważ może się zatkać - Na potrzeby tego - otrzymujesz też kosz - niszczy wszystko co do niego przekierujesz!" + desc: Właśnie odblokowałeś przecinaka, który przecina kstałty na pół + od góry na dół bez znaczenia na ich orientację!

+ Upewnij się, że usuwasz śmieci - w przeciwnym przypadku maszyna zapcha + się i przestanie działać! Do tego celu dałem ci śmietnik, + który usuwa wszystko, co do niego włożysz! reward_rotater: title: Obracanie desc: "Odblokowano nową maszynę: Obracacz! Obraca wejście o 90 @@ -608,9 +601,9 @@ storyRewards: reward_painter: title: Malowanie desc: "Odblokowano nową maszynę: Maszyna Malująca - wydobądź - kilka pigmentów (identycznie jak kształty) i połącz je z kształtami + kilka barwników (identycznie jak kształty) i połącz je z kształtami aby je pomalować!

PS: Jeśli nie widzisz kolorów, w - ustawieniach znajduje się color blind mode!" + ustawieniach znajduje się tryb dla daltonistów!" reward_mixer: title: Mieszanie desc: "Odblokowano nową maszynę: Mieszadło Kolorów - Złącz dwa @@ -624,9 +617,8 @@ storyRewards: kształt po prawej jest kładziony na ten z lewej!" reward_splitter: title: Rozdzielacz/Łącznik - desc: Wielofunkcyjne urządzenie balansujące zostało odblokowane - - Może zostać wykorzystane do tworzenia większych fabryk poprzez - rozdzielanie i łączenie taśmociągów!

+ desc: Właśnie odblokowałeś rozdzielacz - typ dystrybutor, + który akceptuje jedno wejście i rozdziela je na dwa! reward_tunnel: title: Tunel desc: Tunel został odblokowany - Możesz teraz prowadzić @@ -638,9 +630,10 @@ storyRewards: naciśnij 'T', by zmieniać warianty! reward_miner_chainable: title: Wydobycie Łańcuchowe - desc: Odblokowano nowy wariant ekstraktora! Może - przekierować obiekty do ekstraktorów przed nim, - zwiększając efektywność wydobycia! + desc: "Właśnie odblokowałeś łańcuchowy ekstraktor! Może on + przekazywać swoje surowce do innych ekstraktorów, + byś mógł bardziej efektywnie wydobywać surowce!

PS: Stary ekstraktor + na pasku narzędzi został teraz zastąpiony nowym!" reward_underground_belt_tier_2: title: Tunel Poziomu II desc: Odblokowano nowy wariant tunelu - Posiada większy @@ -657,13 +650,17 @@ storyRewards: raz, pobierając wyłącznie jeden barwnik! reward_storage: title: Magazyn - desc: Odblokowano nowy wariant Kosza - Pozwala przechować pewną - ilość obiektów! + desc: Właśnie odblokowałeś magazyn - Pozwala na przecowywanie przedmiotów, + do pewnej ilości!

Prawe wyjście posiada większy piorytet, więc może być on + użyty jako brama przepełnieniowa! reward_freeplay: title: Tryb swobodny - desc: Gratulacje! Odblokowano tryb swobodny! Oznacza to, iż - kształty są teraz generowane losowo! (Nie przejmuj się, więcej - zawartości jest w planach dla wersji pełnej!) + desc: Udało ci się! Odblokowałeś tryb swobodny! To oznacza, że + kształty są teraz losowo generowane!

+ Od teraz budynek główny będzie wymagał odpowiedniej przepustowości + kształtów, zatem sugeruję budowę maszyny, która będzie atuomatycznie dostarczała + wymagany kształt!

Budynek główny emituje wymagany kształt na warstwie + przewodów, więc wystarczy analizować ten sygnał i konfigurować fabrykę bazując na nim. reward_blueprints: title: Schematy desc: Możesz teraz kopiować i wklejać części swojej fabryki! @@ -682,75 +679,73 @@ storyRewards: desc: Gratulacje! Przy okazji, więcej zawartości jest w planach dla wersji pełnej! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

+ title: Dystrybutor + desc: Właśnie odblokowałeś wielofunkcyjny dystrybutor - Pozwala + na budowę większych fabryk poprzez rozdzielanie i łączenie + taśmociągów!

reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Kompaktowy łącznik + desc: Właśnie odblokowałeś łącznik - typ dystrybutora, + który akceptuje dwa wejścia i łączy je na jeden taśmociąg! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Czytnik taśmociągów + desc: Właśnie odblokowałeś czytnik taśmociągów! Pozwala ci na + mierzenie przepustowości taśmociągu.

Czekaj tylko, aż odblokujesz przewody + logiczne - dopiero wtedy staje się bardzo użyteczny! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Obracacz (180°) + desc: Właśnie odblokowałeś kolejny wariant obraczacza! - Pozwala ci na + obrócenie kształtu o 180 stopni! reward_display: - title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + title: Wyświetlacz + desc: "Właśnie odblokowałeś Wyświetlacz - Podłącz sygnał na warstwie + przewodów, by go zwizualizować!

PS: Czy zauważyłeś, że czytnik taśmociągów + i magazyn emitują ostatni przedmiot jako sygnał? Spróbuj wyświetlić go na wyświetlaczu!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Stały sygnał + desc: >- + Właśnie odblokowałeś budynek emitujący stały sygnał na warstwie przewodów! + Jest on przydatny na przykład: do ustawiania filtrów

+ Sygnał może być kształtem, kolorem lub wartością + Prawda/Fałsz. reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Bramki logiczne + desc: Właśnie odblokowałeś bramki logiczne! Nie musisz być z tego powodu + podekscytowany, ale one są bardzo fajne!

Z tymi bramkami możesz teraz wykonywać + operacje AND, OR, XOR i NOT.

Dodatkowo dałem ci tranzystor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Wirtualne przetwarzanie + desc: Właśnie dałem ci mnóstwo budynków, które pozwolą ci + symulować przetwarzanie kształtów!

Możesz teraz symulować + przecinaka, obracacza, sklejacza i wiele więcej na warstwie przewodów! + Teraz masz trzy opcje na kontynuację gry:

- + Zbuduj zautomatyzowaną maszynę, która stworzy każdy kstałt + ządany przez budynek główny (Polecam tą opcję!).

- Zbuduj + coś ciekawego za pomocą przewodów.

- Kontynuuj zwykłą + rozgrywkę.

Cokolwiek wybierzesz, pamiętaj by się dobrze bawić! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." + title: Przewody i poczwórny malarz + desc: "Właśnie odblokowałeś Warstwę przewodów: Jest to osobna + warstwa położnoa na istniejącej, która wprowadza wiele nowych mechanik!

+ Na początek dałem ci Poczwórnego Malarza - Podłącz ćwiartki, które + chcesz pomalować na warstwie przewodów!

By przełączyć się na warstwę przewodów, + wciśnij E." reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtr przedmiotów + desc: Właśnie odblokowałeś Filtr Przedmiotów! Będzie on przekirowywał + przedmioty do górnego lub prawego wyjścia, zależnie od tego, czy pasują one do + sygnału z warstwy przewodów.

Możesz również przekazać sygnał typu Prawda/Fałsz, + by całkowicie go włączyć lub wyłączyć. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Koniec wersji demo + desc: Dotarłeś do końca wersji demo! settings: title: Ustawienia categories: general: Ogólne userInterface: Interfejs advanced: Zaawansowane - performance: Performance + performance: Wydajność versionBadges: dev: Wersja Rozwojowa staging: Wersja eksperymentalna @@ -858,47 +853,45 @@ settings: indywidualnie. Może to być wygodniejsze, jeśli często przełączasz się między umieszczaniem różne typy budynków. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Głośność dźwięków + description: Ustaw głośnośc efektów dźwiękowych musicVolume: - title: Music Volume - description: Set the volume for music + title: Głośnosć muzyki + description: Ustaw głośność muzyki lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Zasoby mapy o niskiej jakości + description: Upraszcza renderowanie zasobów na mapie, gdy kamera jest przybliżona, + by zwiększyć wydajność. Wygląda to nawet ładnie, więc wypróbuj tą funkcję! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Wyłącz siatkę + description: Wyłączenie siatki może pomóc z wydajnością. Oprócz tego, poprawia + wygląd gry! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Wyczyść kursor przy kliknięciu PPM + description: Domyślnie włączone, resetuje wybrany budynek do budowy, + gdy klikasz prawym przyciskiem myszy. Jeżeli to wyłączysz, możesz + usuwać budynki podczas budowania używając tego samego przycisku. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Tekstury niskiej jakości (Brzydkie) + description: Używa niskej jakości tekstur, by zwiększyć wydajność. Spowoduje to, + że gra będzie wyglądać bardzo brzydko! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Wyświetl granice chunków + description: Gra jest podzielona na chunki o wielkości 16x15 kratek. + Włączenie tego ustawienia powoduje wyświetlenie granicy każdego chunku. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Wybierz ekstraktor zamiast źródła + description: Domyślnie włączone, wybiera ekstraktor, jeżeli spróbujesz + wybrać źródło surowców za pomocą pipety simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Uproszczone taśmociągi (Brzydkie) + description: Nie renderuje przedmiotów na taśmociągach, jeżeli nie + są zaznaczone kursorem, by zwiększyć wydajność. Nie zalecam + używać tego ustawienia, chyba że absolutnie potrzebujesz wydajności. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Włącz przesuwanie myszą + description: Pozwala na poruszanie kamerą poprzez przez przesuwanie kursora + do granicy ekranu. Szybkość jest zależna od ustawienia Prędkość poruszania. rangeSliderPercentage: % keybindings: title: Klawiszologia @@ -958,21 +951,21 @@ keybindings: menuClose: Zamknij Menu switchLayers: Przełącz warstwy wire: Przewód Energetyczny - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + balancer: Dystrybutor + storage: Magazyn + constant_signal: Stały Sygnał + logic_gate: Bramka logiczna + lever: Przełącznik + filter: Filtr + wire_tunnel: Skrzyżowanie przewodów + display: Wyświetlacz + reader: Czytnik taśmociągów + virtual_processor: Wirtualny Przetwarzacz + transistor: Tranzystor + analyzer: Analizator Kształtów + comparator: Porównywacz + item_producer: Producent Przedmiotów (Tryb Piaskownicy) + copyWireValue: "Przewody: Skopiuj wartość pod kursorem" about: title: O Grze body: 'Ta gra jest open-source. Rozwijana jest przez R
. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Budynek główny akceptuje wejście każdego rodzaju - nie tylko aktualny kształt! + - Upewnij się, że twoje fabryki są modularne - opłaci się to! + - Nie buduj zbyt blisko budynku głównego, albo będziesz miał wielki chaos! + - Jeżeli łączenie kształtów nie działa, spróbuj zamienić wejścia. + - Możesz zmienić kierunek planera taśmociągów poprzez naciśnięcie R. + - Przytrymanie CTRL pozwala na przeciąganie taśmociągów bez automatycznego zmieniania kierunków. + - Stosunku pozostają takie same, dopóki wszystkie ulepszenia są na tym samym poziomie. + - Seryjne wykonanie jest badziej wydajne niż równoległe. + - Odblokujesz więcej wariantów budynków później w rozgrywce! + - Możesz użyć T, by zmienić warianty budynków. + - Symetria to klucz do sukcesu! + - Możesz przeplatać różne poziomy tuneli. + - Spróbuj budować kompaktowe fabryki - opłaci się to! + - Malarz ma wersję odbitą lustrzanie, którą możesz wybrać klawiszem T. + - Posiadanie budynków w odpowiednich stosunkach zmaksymalizuje wydajność. + - Na najwyższym poziomie, 5 ekstraktorów zapełni pojedynczy taśmociąg. + - Nie zapomnij o tunelach! + - Nie musisz dzielić równo przedmiotów, by osiągnąć pełną wydajność. + - Przytrymanie SHIFT aktywuje planera taśmociągów, pozwalającego ci na łatwe budowanie długich taśmociągów. + - Przecinaki zawsze tną pionowo, nie zważając na ich orientację. + - Zmieszanie wszystich 3 barwników daje biały barwnik. + - Pierwsze wyjście z magazynu ma najwyższy piorytet. + - Zainwestuj czas w budowanie powtarzalnych układów fabryk - warto! + - Przytrymanie CTRL pozwala na układanie wielu budynków tego samego typu. + - Możesz przytrzymać ALT, by odwrócić kierunek układanych taśmociągów. + - Wydajność to klucz do sukcesu! + - Kształty położone dalej od budynku głównego są bardziej skomplikowane. + - Maszyny mają limitowaną prędkość, podziel wejścia między wiele ich, by zmaksymalizować wydajność. + - Użyj dystrybutorów, by zmaksymalizować wydajność. + - Organizacja jest ważna. Próbuj nie krzyżować zbyt wielu taśmociągów. + - Planuj na przyszłość, albo wszystko będzie wielkim chaosem! + - Nie usuwaj swoich starych fabryk! Będziesz ich potrzebował, by odblokować ulepszenia. + - Spróbuj przejść poziom 20 samemu, zanim zaczniesz szukać pomocy! + - Nie komplikuj rzeczy, próbuj budować proste rzeczy, a zajdziesz daleko. + - Możesz potrzebować ponownie używać swoich fabryk w późniejszej fazie rozgrywki. Planuj swoje fabryki, by były zdatne do ponownego użycia. + - Czasami znajdziesz wymagany kształt na mapie, bez potrzeby tworzenia go za pomoca sklejaczy. + - Pełne "wiatraczki" nigdy nie pojawią się naturalnie na mapie. + - Maluj swoje kształty przed przecianiem dla maksymalnej wydajności. + - Z modułami, miejsce jest tylko tym, co postrzegamy; troska dla śmiertelników + - Zbuduj osobną fabrykę schematów. Są one bardzo potrzebne do modułów. + - Obejrz dokładnie mikser kolorów, a wszystkie twoje pytania zostaną rozwiązane. + - Przytrzymaj CTRL i przeciągnij, by zaznaczyć obszar + - Budowanie zbyt blisko budynku głównego może przeszkodzić ci w późniejszych projektach. + - Ikona pinezki przy każdym kształcie na liście ulepszeń przypina je na ekranie. + - Połącz wszystkie głowne kolory, by stworzyć biały! + - Masz nieskończoną mapę, nie ściskaj swojej fabryki, rozszerzaj ją! + - Spróbuj też Factorio! To moja ulubiona gra. + - Poczwórny przecinak tnie zgodnie z ruchem wskazówek zegara, zaczynając do prawej górnej ćwiartki! + - Możesz pobrać swoje zapisy gry w głownym menu gry! + - Ta gra posiada dużo użytecznych skrótów klawiszowych! Sprawdź stronę ustawień! + - Ta gra posiada mnóstwo ustawień, sprawdź je! + - Znacznik do budynku główneko posiada mały kompas, wskazujący do niego kierunek! + - By wyczyścić taśmociągi, wytnij obszar i wklej go w tym samym miejscu. + - Naciśnij F4, by zobaczyć ilość FPS i tempo ticków. + - Naciśnij F4 dwa razy, by zobaczyć kratkę twojej myszy i kamery. + - Możesz klinąć przypięty kształt po lewej stronie, by go odpiąć. diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index 3318e9da..4519d16a 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -1,61 +1,50 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Discord Oficial + intro: >- + Shapez.io é um jogo relaxante no qual você deve construir fábricas para + produzir formas geométricas automaticamente. - Shapez.io é um jogo sobre construir fábricas, automatizando a criação e combinação de formas cada vez mais complexas num mapa infinito. + Conforme os níveis aumentam, as formas se tornam mais complexas, e você terá que explorar o mapa infinito. - Após a entrega das formas pedidas, você avançará no jogo e desbloqueará melhorias para acelerar sua produção. + Como se já não bastasse, sua produção deve crescer exponencialmente para satisfazer a demanda - a única solução é expandir! - Conforme sua demanda por formas aumenta, você terá que aumentar sua fábrica para alcançá-la - Mas não se esqueça dos recursos, você precisará expandir pelo [b]mapa infinito[/b]! + Enquanto no começo você apenas processa as formas, mais a frente você deve pintá-las - para isso você deve extrair e misturar cores! - Em pouco tempo você terá que misturar cores e pintar suas formas com elas - Combine recursos vermelhos, verdes e azuis para produzir cores diferentes e pintar formas com elas para satisfazer a demanda. + Comprar o jogo na Steam te garante acesso à versão completa, mas você pode jogar a versão demo em shapez.io primeiro e decidir depois! + title_advantages: Vantagens da versão completa + advantages: + - 12 Novos Níveis para um total de 26 níveis! + - 18 Novas Construções para uma fábrica completamente automática! + - 20 Níveis de Melhorias para muitas horas de diversão! + - Atualização da Fiação para uma dimensão completamente nova! + - Modo Escuro! + - Saves ilimitados + - Marcadores ilimitados + - Me ajuda! ❤️ + title_future: Conteúdo Planejado + planned: + - Biblioteca de projetos (Exclusivo para a versão completa) + - Conquistas da Steam + - Modo Puzzle + - Minimapa + - Mods + - Modo Sandbox + - ... e muito mais! + title_open_source: Este jogo tem código aberto! + title_links: Links + links: + discord: Discord Oficial + roadmap: Linha do Tempo + subreddit: Subreddit + source_code: Código-fonte (GitHub) + translate: Ajude a traduzir + text_open_source: >- + Qualquer um pode contribuir, estou ativamente envolvido com a comunidade + e tento ler todas as sugestões e receber críticas quando possível. - O jogo contém 18 níveis progressivos (que já devem manter você ocupado por horas!) mas eu adiciono novo contéudo constantemente - Tem bastante coisa já planejada! - - Comprando o jogo você terá acesso à versão completa, que contém recursos adicionais e você também terá acesso aos recursos que serão desenvolvidos. - - [b]Vantagens da versão completa[/b] - - [list] - [*] Modo Escuro - [*] Pontos de Referência Ilimitados - [*] Quantidade de Saves Ilimitada - [*] Configurações adicionais - [*] Em Breve: Fios e Energia! Previsto para (mais ou menos) o fim de Julho de 2020. - [*] Em Breve: Mais Níveis - [*] Me permite desenvolver shapez.io ❤️ - [/list] - - [b]Atualizações Futuras[/b] - - Eu lanço atualizações frequentemente e estou tentando lançar pelo menos uma por semana! - - [list] - [*] Mapas diferentes e desafios (por exemplo mapas com obstáculos) - [*] Puzzles (Entregue a forma pedida com uma área restringida ou um certo conjunto de construções) - [*] Um modo história onde as construções têm um custo - [*] Um gerador de mapa customizável (configure recursos, formas, tamanho, densidade, semente e mais) - [*] Mais tipos de formas - [*] Melhorias de desempenho (o jogo já roda bem!) - [*] E muito mais! - [/list] - - [b]Esse jogo é open source![/b] - - Qualquer um pode contribuir, eu estou ativamente envolvido com a comunidade e tento ler todas as sugestões e levar o feedback em consideração quando possível. Para uma lista completa dos planos para o futuro, não se esqueça de dar uma olhada no meu quadro do Trello! - - [b]Links[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Discord oficial[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Planos para o futuro[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Código fonte(GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Ajude a traduzir[/url] - [/list] - discordLinkShort: Official Discord + Cheque minha lousa no trello para a linha do tempo completa! global: loading: Carregando error: Erro @@ -97,7 +86,7 @@ mainMenu: changelog: Changelog subreddit: Reddit importSavegame: Importar save - openSourceHint: Esse jogo é open source! + openSourceHint: Esse jogo tem código aberto! discordLink: Discord oficial helpTranslate: Ajude a traduzir! madeBy: Feito por @@ -105,7 +94,7 @@ mainMenu: completa ou baixe o Chrome para obter uma experiência completa. savegameLevel: Nível savegameLevelUnknown: Nível desconhecido - savegameUnnamed: Unnamed + savegameUnnamed: Sem nome dialogs: buttons: ok: OK @@ -130,7 +119,9 @@ dialogs: text: "Houve uma falha ao carregar seu jogo salvo:" confirmSavegameDelete: title: Confirmar exclusão - text: Tem certeza que quer excluir esse jogo salvo? + text: Tem certeza que deseja deletar o jogo a seguir?

+ '' no nível

Isso não + pode ser revertido! savegameDeletionError: title: Falha ao deletar text: "Houve uma falha ao deletar seu jogo salvo:" @@ -144,14 +135,14 @@ dialogs: title: Resetar controles desc: Essa opção deixa os controles nas definições padrão. keybindingsResetOk: - title: Resetar controles + title: Controles resetados desc: Os controles foram resetados para as definições padrão. featureRestriction: title: Versão Demo desc: Você tentou acessar um recurso () que não está disponível na demo. Considere obter a versão completa para a proceder! oneSavegameLimit: - title: Jogo salvo limitado + title: Limite de jogos salvos desc: Você pode ter apenas um jogo salvo por vez na versão demo. Remova o existente ou obtenha a versão completa! updateSummary: @@ -173,7 +164,7 @@ dialogs: continuar? massCutInsufficientConfirm: title: Confirmar Corte? - desc: You can not afford to paste this area! Are you sure you want to cut it? + desc: Você não conseguirá colar essa área! Tem certeza que quer cortá-la?? blueprintsNotUnlocked: title: Não desbloqueado ainda desc: Os projetos ainda não foram desbloqueados! Complete mais níveis para @@ -190,9 +181,8 @@ dialogs: createMarker: title: Nova Marcação titleEdit: Editar Marcador - desc: Dê um nome com significado, também pode adicionar um pequeno - código de uma forma. (Pode ser gerado
aqui) + desc: Dê um nome significativo, você também pode incluir um código + de uma forma (Você pode gerá-lo aqui) markerDemoLimit: desc: Você só pode criar dois marcadores na versão demo. Adquira a versão completa para marcadores ilimitados! @@ -202,18 +192,18 @@ dialogs: isso pode ser bastante lento para uma base grande, e até mesmo pode travar o jogo! editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Defina o sinal + descItems: "Escolha um item pré-definido:" + descShortKey: ... ou insira o código de uma forma (Você pode + gerá-lo aqui) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Renomear Save + desc: Você pode renomear seu save aqui. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Aviso de Performance + desc: Você colocou muitas construções, isso é apenas um aviso amigável de que o + jogo não suporta construções infinitas - Então tente manter suas + fábricas compactas! ingame: keybindingsOverlay: moveMap: Mover @@ -349,41 +339,41 @@ ingame: segure SHIFT para colocar vários extratores e use R para girá-los. connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 Extrator + n_miners: Extratores + limited_items: Limite de watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Versão Demo + desc: Clique aqui para ver as vantagens da versão completa! + get_on_steam: Adquira na Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Adquira a versão completa! + no_thanks: Não, obrigado! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Novos Níveis + desc: Para um total de 26 novos níveis! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Novas Construções + desc: Automatize sua fábrica inteira! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: Saves ∞ + desc: Quantos o seu coração mandar! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Níveis de Melhorias + desc: Essa demo tem apenas 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: Marcadores ∞ + desc: Nunca se perca na sua fábrica! wires: - title: Wires - desc: An entirely new dimension! + title: Fiação + desc: Uma dimensão completamente nova! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Modo Escuro + desc: Não machuque mais seus olhos! support: - title: Support me - desc: I develop it in my spare time! + title: Me ajuda + desc: Eu desenvolvo o jogo no meu tempo livre! shopUpgrades: belt: name: Esteiras, Distribuidores e Túneis @@ -402,7 +392,7 @@ buildings: deliver: Entregue toUnlock: para desbloquear levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: Fim da Demo belt: default: name: Esteira Transportadora @@ -413,9 +403,9 @@ buildings: name: Fio de Energia description: Permite transportar energia. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Fio + description: Transfere sinais, que podem ser de itens, cores ou binários (1 / + 0). Fios com cores diferentes não se conectam. miner: default: name: Extrator @@ -451,8 +441,8 @@ buildings: name: Rotacionador (Anti-horário) description: Gira as formas no sentido anti-horário em 90 graus. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Rotacionador (180) + description: Gira as formas em 180 graus. stacker: default: name: Empilhador @@ -476,129 +466,139 @@ buildings: 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. + description: Permite que você pinte cada quadrante da forma individualmente. Apenas + entradas com um sinal verdadeiro no plano de fios + serão pintadas! trash: default: name: Lixo description: Aceita qualquer item e os destrói. PARA SEMPRE. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Balanceador + description: Multifuncional - Distribui igualmente todas as entradas para todas + as saídas. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Unificador (compacto) + description: Une duas esteiras em uma. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Unificador (compacto) + description: Une duas esteiras em uma. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Divisor (compacto) + description: Divide uma esteira em duas. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Divisor (compacto) + description: Divide uma esteira em duas. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Armazenamento + description: Estoca itens em excesso, até uma certa capacidade. Prioriza a saída + da esquerda e pode ser usado como um mecanismo de escape. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Cruzamento de Fios + description: Permite cruzar dois fios sem conectá-los. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Sinal Constante + description: Emite um sinal constante, que pode ser uma forma, cor ou binário (1 + / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Interruptor + description: Pode ser ativado para emitir um sinal binário (1 / 0) no plano da + fiação, que pode então ser usado para controlar um filtro, por + exemplo. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Portão E (AND) + description: Emite um sinal binário "1" se ambas as entradas forem verdadeiras. + (Ser verdadeira significa receber um sinal de forma, cor ou + binário "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Portão NEGAR (NOT) + description: Emite um sinal binário "1" se a entrada for falsa. (Ser verdadeira + significa receber um sinal de forma, cor ou binário "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Portão OU EXCLUSIVO (XOR) + description: Emite um sinal binário "1" se uma das entradas for verdadeira, mas + não duas. (Ser verdadeira significa receber um sinal de forma, + cor ou binário "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Portão OU (OR) + description: Emite um sinal binário "1" se uma das entradas for verdadeira. (Ser + verdadeira significa receber um sinal de forma, cor ou binário + "1") transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Envia o sinal adiante se a entrada for verdadeira. (Ser verdadeira + significa receber um sinal de forma, cor ou binário "1") mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Envia o sinal adiante se a entrada for verdadeira. (Ser verdadeira + significa receber um sinal de forma, cor ou binário "1") filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtro + description: Conecte um sinal para rotear todos os itens desejador para o topo e + o restante para a direita. Pode ser controlado por sinais + binários também. display: default: name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + description: Conecte um sinal para exibí-lo no display - Pode ser uma forma, cor + ou binário. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Leitor de Esteira + description: Permite medir a passagem média de itens na esteira. Emite o último + item lido no plano da fiação (quando desbloquado). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Analizador de Formas + description: Analiza o quadrante superior direito da camada mais baixa da forma + e fornece sua forma e cor. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Comparador + description: Devolve um sinal binário "1" se ambos os sinais forem idênticos. + Pode comparar formas, itens e binário. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Cortador Virtual + description: Corta virtualmente as formas em duas metades. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Rotacionador Virtual + description: Rotaciona virtualmente a forma, tanto no sentido horário quanto no + anti-horário. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Separador Virtual + description: Extrai virtualmente a camada mais acima para a saída direita e as + restantes para a esquerda. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Empilhador Virtual + description: Empilha virtualmente a forma da direita em cima da forma da + esquerda. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Pintor Virtual + description: Pinta virtualmente a forma da entrada inferior com a forma da + entrada direita. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Fábricante de Itens + description: Disponível no modo sandbox apenas, envia o sinal recebido do plano + de fios para o plano regular. storyRewards: reward_cutter_and_trash: title: Cortando formas - 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! + desc: Você acabou de desbloquear o cortador, que corta formas pela metade + de cima para baixo independente de sua + orientação!

Lembre-se de se livrar do lixo, caso + contrário, a máquina irá entupir - Por isso + eu te dei o lixo, que destrói + tudo que você coloca nele! reward_rotater: title: Rotação desc: O rotacionador foi desbloqueado! Gira as formas no @@ -620,10 +620,10 @@ storyRewards: da outra, serão fundidas. Caso contrário, a entrada direita é empilhada em cima da entrada esquerda! reward_splitter: - title: Distribuidor - desc: O Distribuidor multifuncional foi desbloqueado - pode ser - usado para construir fábricas maiores dividindo e unindo - itens em múltiplas esteiras!

+ title: Divisor + desc: Você desbloqueou uma variante divisora do + balanceador - Ela aceita uma entrada e a divide + em duas saídas! reward_tunnel: title: Túnel desc: O túnel foi desbloqueado - Agora você pode transportar @@ -636,9 +636,10 @@ storyRewards: variantes! reward_miner_chainable: title: Extrator em Cadeia - desc: Você desbloqueou o extrator em cadeia! Ele pode - encaminhar seus recursos para outros extratores, - para que você possa extrair recursos com mais eficiência! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Túnel Classe II desc: Você desbloqueou uma nova variante do túnel - ele tem um @@ -656,13 +657,18 @@ storyRewards: tempo, consumindo apenas uma cor em vez de duas! reward_storage: title: Acúmulo de excesso - desc: Você desbloqueou uma variante do lixo - Permite armazenar - itens até uma determinada capacidade! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Modo Livre - desc: Você conseguiu! Você desbloqueou o modo de jogo livre! - Isso significa que as formas agora são geradas aleatoriamente! (Não - se preocupe, mais conteúdo está planejado para o jogo completo!) + desc: Você conseguiu! Você desbloqueou o modo livre! Isso significa + que formas agora são geradas aleatóriamente!

+ Já que o HUB vai precisar de uma entrada constante a partir de + agora, eu altamente recomendo que você construa uma máquina que entregue + automaticamente as formas pedidas!

O HUB emite a forma pedida + no plano dos fios, então tudo que você precisa fazer é analizá-la e + automaticamente configurar sua fábrica baseado nessa análise. reward_blueprints: title: Projetos desc: Agora você pode copiar e colar partes de sua fábrica! @@ -680,68 +686,73 @@ storyRewards: title: Próximo nível desc: Parabéns! Aliás, mais conteúdo vindo na versão completa! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

+ title: Balanceador + desc: O balanceador multifuncional foi desbloqueado - Ele pode + ser usado para construir fábricas maiores dividindo e unindo + itens em múltiplas esteiras!

reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Unificador Compacto + desc: Você desbloqueou uma variante unificadora do + balanceador - Ele aceita duas entradas e as junta + em uma esteira! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Leitor de Esteira + desc: Você desbloqueou o leitor de esteira! Ele permite que + você meça a passagem de itens em uma esteira.

Espere até você + desbloquear os fios - ele se torna muito útil! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Rotacionador (180 graus) + desc: Você acabou de desbloquear o rotacionador de 180 graus! - + Ele permite que você rotacione uma forma em 180 graus (Surpresa! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "Você desbloqueou o Display - Conecte um sinal no + plano de fios para poder vê-lo!

PS: Você percebeu que ambos o leitor + de esteiras e o armazenamento emitem o último item lido? Tente mostrar + isso em um display!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Sinal Constante + desc: Você desbloqueou a construção que emite um sinal + constante no plano de fios! Isso é útil para conectar no + filtro de itens por exemplo.

O sinal + constante pode emitir um sinal de forma, + cor ou binário (1 / 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Portões Lógicos + desc: Você desbloqueou portões lógicos! Você não precisa se + animar com isso, mas na verdade é SUPER legal!

Com estes + portões você pode computar operações E (AND), OU (OR), OU EXCLUSIVO + (XOR) e NEGAR (NOT).

c E para a cereja do bolo, eu também te + dei um transistor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Processamento Virtual + desc: Eu acabei de te dar um monte de novas construções que te permitem + simular o processamento de formas!

Você + pode simular um cortador, rotacionador, empilhador e mais no plano + de fiação! Com isso você tem agora três maneiras de continuar + jogando:

- Construir uma máquina automática + para criar qualquer forma possível pedida pelo HUB (Você deveria + tentar!).

- Construir algo legal com os fios.

- + Continuar jogando normalmente.

Independente da sua escolha, + lembre de se divertir! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press + title: Fios e Pintor Quádruplo + desc: "Você acabou de desbloquear o Plano de Fiação: Ele é um + plano separado no topo do plano comum e introduz um monte de novas + mecânicas!

Para começar eu te dou o Pintor + Quádruplo - Conecte a entrada que você quer que seja + colorida com o plano da fiação!

Para mudar de plano, aperte E." reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtro de Itens + desc: Você desbloqueou o Filtro de Itens! Ele irá rotear os + itens para a saída superior ou da direit dependendo se eles batem + com o sinal vindo do plano dos fios ou não.

Você também pode + inserir um sinal binário (1 / 0) para ativá-lo ou desativá-lo + completamente reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Fim da Demo + desc: Você chegou no fim da versão demo! settings: title: Opções categories: @@ -861,47 +872,49 @@ settings: description: Desativa as caixas de diálogo de aviso exibidas ao cortar / excluir mais de 100 entidades. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Volume dos sons + description: Defina um volume para os efeitos sonoros musicVolume: - title: Music Volume - description: Set the volume for music + title: Volume da música + description: Defina um volume para a música lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Recursos do Mapa em Baixa Qualidade + description: Simplifica a renderização de recursos no mapa com o zoom aplicado + para melhorar a performance. Parece até mais limpo, então tenha + certeza de testar! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Desabilite a Grade + description: Desabilitar a grade pode ajudar com a performance. Isso também faz + o jogo parecer mais limpo! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Limpar Cursor com Clique Direito + description: Habilitado por padrão, limpa o cursor sempre que você clica com o + botão direito enquanto você tem uma construção selecionada. Se + desabilitado, você pode deletar construções clicando com o botão + direito enquanto tiver algo selecionado. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Texturas de Baixa Qualidade (Feio) + description: Usa texturas de baixa qualidade para ajudar com a performance. Vai + deixar o jogo bem feio! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Mostrar Bordas das Chunks + description: O jogo é dividido em chunks de 16x16 ladrilhos, se está + configuração estiver habilitada, as bordas de cada chunk ficarão + à mostra. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Selecionar Extrator em uma Fonte de Recursos + description: Habilitador por padrão, seleciona o extrator se você usar o + conta-gotas em uma fonte de recursos. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Esteiras Simplificadas (Feio) + description: Não renderiza itens nas esteiras, exceto quando o cursor estiver em + cima da esteira, para melhorar a performance. Eu não recomendo + jogar com essa configuração habilitada se você não precisar + muito da melhoria de performance. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Habilitar Movimento com o Mouse + description: Permite mover o mapa ao mover o cursor para as bordas da tela. A + velocidade depende da configuração Velocidade de Movimento. rangeSliderPercentage: % keybindings: title: Controles @@ -947,7 +960,7 @@ keybindings: wire: Fio de Energia pipette: Conta-Gotas rotateWhilePlacing: Rotacionar - rotateInverseModifier: "Modifier: Rotação anti-horária" + rotateInverseModifier: "Modificador: Rotação anti-horária" cycleBuildingVariants: Variações confirmMassDelete: Confirmar exclusão em massa pasteLastBlueprint: Colar último projeto @@ -961,21 +974,21 @@ keybindings: placementDisableAutoOrientation: Desligar orientação automática placeMultiple: Permanecer no modo de construção placeInverse: Inverter orientação de esteira - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing + balancer: Balanceador + storage: Armazenamento + constant_signal: Sinal Constante + logic_gate: Portão Lógico + lever: Interruptor (regular) + filter: Filtro + wire_tunnel: Cruzamento de Fios display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + reader: Leitor de Esteira + virtual_processor: Cortador Virtual transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Analizador de Forma + comparator: Comparador + item_producer: Produtor de Itens (Sandbox) + copyWireValue: "Fios: Copiar valor abaixo do cursor" about: title: Sobre o jogo body: >- @@ -1001,63 +1014,71 @@ demo: exportingBase: Exportar Base inteira como Imagem settingNotAvailable: Não disponível na versão demo. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - O HUB aceita qualquer tipo de forma, não apenas a pedida! + - Tenha certeza que seus designs são modulares - vai valer a pena! + - Não construa muito perto do HUB, ou será um caos! + - Se o empilhamento não funcionar, tente inverter as entradas. + - Você pode mudar a direção do planejador de esteiras apertando R. + - Segurar CTRL permite arrastar esteiras sem a orientação automática. + - As proporções se matém, desde que todas as melhorias estejam no mesmo + nível. + - Execução em série é mais eficiete que a paralela. + - Você desbloqueará variantes de construções mais para frente no jogo! + - Você pode usar T para mudar para diferentes variantes. + - Simetria é crucial! + - Você pode entrelaçar diferentes níveis de túnel. + - Tente construir fábricas compactas - vai valer a pena! + - O pintor tem uma variante espelhada que você pode selecionar com T + - Ter as proporções certas para cada construção vai maximizar sua eficiência. + - No nível máximo, 5 extratores vão encher uma única esteira. + - Não se esqueça dos túneis! + - Você não precisa dividir os itens igualmente para ter máxima eficiência. + - Segurar SHIFT vai ativar o planejamento de esteiras, te permitindo + colocar longas esteiras mais facilmente. + - Cortadores sempre cortam verticalmente, independente da orientação. + - Misture todas as cores para obter branco. + - O armazenamento prioriza a saída primária. + - Invista tempo em construir designs que podem ser repetidos - vale a pena! + - Segurar CTRL permite colocar múltiplas construções. + - Segure ALT para inverter a direção de esteiras posicionadas. + - Efficiência é a chave! + - Fontes de recursos mais distantes do HUB são mais complexas. + - Máquinas tem uma velocidade máxima, divida os itens para uma eficiência + máxima. + - Use balanceadores para maximizar sua eficiência. + - Organização é importante. Tente não entrelaçar muitas esteiras. + - Planeje com antecedência, ou tudo será um caos! + - Não remova suas fábricas antigas! Você precisará delas para desbloquear + melhorias. + - Tente passar do nível 20 sozinho antes de pedir ajuda! + - Não complique as coisas, tente manter tudo simples e você irá longe. + - Talvez você precise reusar fábricas antigas no futuro. Planeje-as para que + sejam reutilizáveis. + - As vezes, você pode encontrar uma forma necessária no mapa sem criá-la com + empilhadores. + - Moinhos completos nunca vão aparecer naturalmente. + - Pinte suas formas antes de cortar para ter máxima eficiência. + - Com módulos, espaço é meramente uma percepção; uma preocupação para + mortais. + - Faça uma fábrica separada para projetos. Eles são importantes para os + módulos. + - Dê uma olhada mais de perto no misturador de cores, e suas perguntas serão + respondidas. + - Use CTRL + Clique para selecionar uma área. + - Construções muito perto do HUB podem entrar no caminho de projetos futuros. + - O ícone de pin ao lado de cada forma na lista de melhorias fixa essa forma + na tela. + - Misture todas as cores primárias para fazer tinta branca! + - Você tem um mapa infinito, não amontoe sua fábrica, expanda! + - Tente também Factorio! É meu jogo favorito. + - O cortador quádruplo corta no sentido anti-horário começando pelo topo + direito! + - Você pode baixar seus saves no menu principal! + - Este jogo tem um monte de teclas úteis! Tenha certeza de checar a aba de + configurações. + - Este jogo tem muitas configurações, então dê uma olhada! + - O marcador para o HUB tem uma pequena bússola para indicar sua direção! + - Para limpar as esteiras, corte a área e cole-a no mesmo lugar. + - Pressione F4 para mostrar seu FPS e taxa de tiques. + - Pressione F4 duas vezes para mostrar o ladrilho do seu mouse e da câmera. + - Você pode clicar em uma forma fixada na esquerda para tirá-la de lá. diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index 40ba7243..51bcb568 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -2,63 +2,54 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Discord Oficial + intro: >- + Shapez.io é um jogo relaxante onde tens de construir fábricas para + autumatizar a produção de formas geométricas. - shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map. + Com o aumento do nível, as formas começam a ser cada vez mais e mais complexas, e tu terás de te expandir num mapa infinito. - Upon delivering the requested shapes you'll progress within the game and unlock upgrades to speed up your factory. + E como se isso não fosse suficiente, tu também terás de produzir de forma exponencial para satisfazeres as tuas necessidades - a única coisa que ajuda é aumentar! - 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]! + Embora no inicio apenas tenhas de processar formas, mais tarde, vais ter de as colorir - para isto terás de extrair e misturar cores! - 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. + Comprar o jogo na Steam dar-te-á acesso à versão completa, mas também podes jogar a versão demo em shapez.io primeiro e decidir mais tarde! + title_advantages: Vantagens da versão completa + advantages: + - 12 Novos Níveis para um total de 26 Níves + - 18 Novas Construções para uma fábrica totalmente automatizada! + - 20 Níveis de Melhoria para muitas horas de diversão! + - Atualização de Fios para uma dimensão totalmente nova! + - Modo escuro! + - Savegames ilimitados + - Marcos ilimitados + - Ajuda-me! ❤️ + title_future: Conteúdo Planeado + planned: + - Biblioteca Blueprint (Exclusivo na versão Completa) + - Conquistas na Steam + - Modo Puzzle + - Minimapa + - Modos + - Modo Sandbox + - ... e Muito Mais! + title_open_source: Este jogo é open source (código aberto)! + title_links: Links + links: + discord: Discord Oficial + roadmap: Roteiro de desenvolvimento + subreddit: Subreddit + source_code: Código Fonte (GitHub) + translate: Ajuda a Traduzir + text_open_source: >- + Qualquer um pode contribuir, estou ativamente envolvido na comunidade e + tento ver todas as sugestões e ter em consideração o feedback recebido + assim que possível. - 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! + Segue o meu trello board para veres todo o roteiro de desenvolvimento! - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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) - [*] 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] - - [b]This game is 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] - - [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] - [/list] - discordLinkShort: Official Discord global: - loading: A carregar + loading: A Carregar error: Erro thousandsDivider: "," decimalSeparator: . @@ -107,7 +98,7 @@ mainMenu: newGame: Novo Jogo madeBy: Criado por subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Sem Nome dialogs: buttons: ok: OK @@ -132,7 +123,10 @@ dialogs: text: "Erro ao carregar o teu savegame:" confirmSavegameDelete: title: Confirmar eliminação - text: Tens a certeza que pretendes eliminar o jogo? + text: >- + Tens a certeza que queres apagar o seguinte jogo?

+ '' no nível

Isto não pode ser + desfeito! savegameDeletionError: title: Erro de eliminação text: "Erro ao eliminar o teu savegame:" @@ -187,9 +181,8 @@ dialogs: class='keybinding'>ALT: Inverte as posições.
" createMarker: title: Novo Marco - desc: Dá-lhe um nome com significado, também poderás adicionar um - pequeno código de uma forma. (Pode ser gerado aqui) + desc: Dá-lhe um nome com significado, também poderás adicionar um pequeno + código de uma forma. (Pode ser gerado aqui) titleEdit: Editar Marco markerDemoLimit: desc: Apenas podes criar dois marcos na versão Demo. Adquire o jogo completo @@ -208,18 +201,18 @@ dialogs: desc: Não consegues pagar para colar esta área! Tens a certeza que pretendes cortá-la? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Define o Sinal + descItems: "Escolhe um item pre-definido:" + descShortKey: ... ou insere o pequeno código de uma forma (Pode ser + gerado aqui) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Renomear Savegame + desc: Podes renomear o teu savegame aqui. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Aviso de Desempenho + desc: Tu colocaste muitas contruções, isto é apenas um lembrete amigável de que + o que o jogo não aguenta com um número infinito de contruções - Sendo assim tenta + manter as tuas fábricas compactas! ingame: keybindingsOverlay: moveMap: Mover @@ -354,41 +347,42 @@ ingame: empty: Vazio copyKey: Chave de cópia connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 Extrator + n_miners: Extratores + limited_items: Limite de watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Versão Demo + desc: Clica aqui para veres as vantagens da versão na Steam! + get_on_steam: Compra na Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Obtém a versão completa! + no_thanks: Não, obrigado! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Novos Níveis + desc: Para um total de 26 Níveis! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Novas contruções + desc: Para uma fábrica totalmente automatizada! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: Savegames ∞ + desc: Tantos quanto o teu corção desejar! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Níveis de melhoria + desc: Nesta versão demo apenas tens 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: Marcos ∞ + desc: Nunca te percas na tua Fábrica! wires: - title: Wires - desc: An entirely new dimension! + title: Fios + desc: Uma dimensão totalmente nova!! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Modo Escuro + desc: Não magoes os teus olhos! support: - title: Support me - desc: I develop it in my spare time! + title: Ajuda-me + desc: Eu desenvolvo este jogo no meu tempo livre! + shopUpgrades: belt: name: Tapetes, Distribuidores e Túneis @@ -406,7 +400,7 @@ buildings: belt: default: name: Tapete Rolante - description: Transporta items. Mantém pressionado e arrasta para colocar vários. + description: Transporta itens. Mantém pressionado e arrasta para colocar vários. miner: default: name: Extrator @@ -429,7 +423,7 @@ buildings: apenas usares uma parte, destrói a outra para não encravar a produção! quad: - name: Cortador (Quad) + name: Cortador (Quád) description: Corta as formas geométricas em quatro partes. Se apenas usares uma parte, destrói as outras partes para não encravar a produção! @@ -441,9 +435,10 @@ buildings: name: Rodar (CCW) description: Roda as formas 90º no sentido contrário ao dos ponteiros do relógio. + rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Rodar (180º) + description: Roda as formas 180º. stacker: default: name: Empilhador @@ -464,7 +459,9 @@ buildings: entrada superior. quad: name: Pintor (Quádruplo) - description: Pinta cada quadrante da forma geométrica com uma cor diferente. + description: Permite colorir cada quadrante da forma individualmente. Apenas + entradas com um sinal verdadeira na camada de fios + irá ser pintada! mirrored: name: Pintor description: Pinta a forma geométrica da entrada esquerda com a cor da entrada @@ -477,133 +474,142 @@ buildings: deliver: Entrega toUnlock: para desbloquear levelShortcut: NVL - endOfDemo: End of Demo + endOfDemo: Fim do Demo wire: default: name: Fio Elétrico - description: Permite o transporte de energia. + description: Tranfere sinais, que podem ser itens, cores ou um sinal binário (1 ou 0). + Fios de cores diferestes não se conectam. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Fio Elétrico + description: Tranfere sinais, que podem ser itens, cores ou um sinal binário (1 ou 0). + Fios de cores diferestes não se conectam. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Distribuidor + description: Multifunções - Distribui igualmente todas as entradas por todas as saídas. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Misturador (comp.) + description: Junta dois tapetes rolantes num só. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Misturador (comp.) + description: Junta dois tapetes rolantes num só. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Divisor (compacto) + description: Divide um tapete rolante em dois. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Divisor (compacto) + description: Divide um tapete rolante em dois. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Armazém + description: Armazena itens em excesso, até uma determinada capacidade. Dá prioridade à saída da + esquerda e pode ser usado como uma porta de transbordo. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Túnel de Fios + description: Permite que dois fios cruzem sem conectarem-se um ao outro. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Sinal Constante + description: Emite um sinal constante , que pode ser uma forma, cor ou + um sinal binário (1 ou 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Interruptor + description: Pode emitir alternadamente um sinal binário (1 ou 0) na camada de fios, + que pode posteriormente ser usado, por exemplo, num filtro de itens. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Portão AND + description: >- + Emite um sinal binário "1" se ambas as entradas forem verdadeiras. (Verdadeiro significa: + forma, cor ou sinal binário "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Portão NOT + description: >- + Emite um sinal binário "1" se a entrada não for verdadeira. (Verdadeiro significa: + forma, cor ou sinal binário "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Portão XOR + description: >- + Emite um sinal binário "1" se uma das entradas for verdadeira, mas não as duas. (Verdadeiro significa: + forma, cor ou sinal binário "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Portão OR + description: >- + Emite um sinal binário "1" se uma entrada é verdadeira. (Verdadeiro significa: + forma, cor ou sinal binário "1") transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transístor + description: Encaminha a entrada inferior se a entrada lateral for verdade + (uma forma, cor ou "1"). + mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transístor + description: Encaminha a entrada inferior se a entrada lateral for verdade + (uma forma, cor ou "1"). filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtro de Itens + description: Conecta um sinal que irá encaminhar todos os itens correspondentes + para o topo e os restantes para a direita. Também pode ser + controlado com sinais binários. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Visor + description: Conecta um sinal para mostrar no Visor - Pode ser uma forma, cor + ou um sinal binário. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Leitor de Tapete + description: + Permite medir a passagem média de itens no tapete. Fornece o último item lido na camada de + fios (quando desbloqueada). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Analizador de Forma + description: Analiza o quadrante superior direito da camada mais baixa da forma e retorna + a forma ou cor. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Comparador + description: + Produz o sinal binário "1" se ambos os itens são exatamente iguais. Pode comparar formas, + itens e sinais binários. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Cortador Virtual + description: Virtualmente, corta as formas em duas metades. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Rodador Virtual + description: Virtualmente, roda a forma tanto no sentido horário quanto no anti-horário. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Desempilhador Virtual + description: Virtualmente, remove a camada do topo para a saída da direita + e o restante para a da esquerda. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Empilhador Virtual + description: Virtualmente empilhada a forma da direita em cima do item da esquerda. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Pintor Virtual + description: Virtualmente, pinta a forma a forma da entrada de baixo + com o item da entrada da direita. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Produtor de Itens + description: Disponível apenas no modo sandbox, produz o sinal dado na + camada de fios na camada normal. storyRewards: reward_cutter_and_trash: title: Corte de formas - desc: Acabaste de desbloquear o Cortador - ele corta as formas - geométricas ao meio de cima para baixo - independentemente da orientação!

Certifica-te de que te - livras do desperdício, caso contrário encravará - - Para isso, dou-te um lixo, que destruirá tudo o que lá colocares! + desc: Acabaste de desbloquear o cortador, que corta as formas ao meio + de cima para baixo independentemente da sua + orientação!

Certefica-te de que te livras do desperdício, + caso contrário irá encravar e parar - Para este propósito + eu dei-te um lixo, que destrói + tudo o que lá colocares! reward_rotater: title: Rotação desc: O Rodador foi desbloqueado! Ele roda as formas @@ -626,10 +632,10 @@ storyRewards: entrada da direita é empilhada em cima da da esquerda! reward_splitter: - title: Distribuidor/Misturador - desc: O Distribuidor multi-funções foi desbloqueado - Pode ser - usado para construir fábricas maiores separando e - convergindo items para vários tapetes!

+ title: Divisor + desc: Desbloqueaste o dvisor uma variante do + distribuidor - Aceita uma entradae divide-a + em duas! reward_tunnel: title: Túnel desc: O Túnel foi desbloqueado - Com ele podes passar itens @@ -642,9 +648,10 @@ storyRewards: variantes! reward_miner_chainable: title: Extração em série - desc: Desbloqueaste o Extrator em série! Permite enviar - o recurso extraído para outros extratores, permitindo uma - extração mais eficiente! + desc: "Desbloqueaste o extrator em séire! Permite + enviar os recursos para outros extratores, sendo assim + permite uma extração de recursos mais eficiente!

PS: O extrator + antigo já foi trocado na tua lista de construções!" reward_underground_belt_tier_2: title: Túnel Nível II desc: Desbloqueaste uma nova variante do Túnel - Tem um @@ -662,13 +669,18 @@ storyRewards: tempo consumindo apenas uma cor em vez de duas! reward_storage: title: Armazém - desc: Desbloqueaste uma variante do Lixo - Permite armazenar - items até uma determinada capacidade! + desc: Desbloqueaste uma variante do lixo - Permite armazenar + itens, até uma determinada capacidade!

Dá prioridade à saída da + esquerda e pode ser usado como uma porta de transbordo! reward_freeplay: title: Jogo livre desc: Conseguiste! Desbloqueaste o modo jogo livre! Isto - significa que agora as formas são geradas aleatoriamente! (Não te - prepcupes, está planeado mais conteúdo para o jogo completo!) + significa que agora as formas são geradas aleatoriamente!

+ Como o edifício central vai precisar de uma taxa de rendimento a partir + de agora, recomendo vivamente a contruires uma máquina que, automaticamente, + entraga as formas pedidas!

O edifício central emite a forma pedida + na camada de fios,sendo assim tudo o que tens a fazer é analiza-la e + automaticamente configurares a tua fábrica baseada nisso. reward_blueprints: title: Projetos desc: Agora podes copiar e colar partes da tua fábrica! @@ -686,68 +698,70 @@ storyRewards: title: Próximo nível desc: Parabéns! Já agora, está planeado mais conteúdo para o jogo completo! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

+ title: Distribuidor + desc: O multifunctional distribuidor foi desbloqueado - Pode + ser usado para construbir fábricas maiores dividindo e juntando + itens por vários tapetes rolantes!

reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Misturador (compacto) + desc: Desbloqueaste um misturador, uma variante do + distribuidor - Aceita duas entradas e junta-as num só + tapete rolante! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Leitor de Tapete + desc: Desbloqueaste o leitor de tapete! Permite-te medires + a passagem média de itens no tapete.

E espera por desbloqueares + os fios - aí é que vão ser bastante úteis! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Rodar (180º) + desc: Desbloqueaste o rodador de 180 graus! - Permite-te + rodares formas 180 graus (Surpresa! :D) reward_display: - title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + title: Visor + desc: "Desbloqueaste o Visor - Conecta um sinal na + camada de fios para o visualizares!

PS: Reparaste que o leitor + de tapete e o armazém emitem o último item lido por eles? tenta mostrar isso + num visor!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Sinal Constante + desc: Desbloqueaste o sinal constante contruido na camada + de fios! Isto é útil conectado com um filtro de itens + por exemplo.

O sinal constante pode emitir uma + forma, cor ou + sinal binário (1 ou 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Portões Lógicos + desc: Desbloqueaste os portões lógicos! N tens de te excitar + com isto, mas é realmente super fixe!

Com estes portões + agora podes realizar operações AND, OR, XOR and NOT.

Como um + bónus anteriormente já de dei um transístor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Processamento Virtual + desc: Acadei de te dar um monte de novas construções, que te vão permitir + simular o processamento de formas!

Agora podes + simular um cortador,um rodador, um empilhador e muito mais na camada de fios! + Com isto, agora tens três opções para continuares o jogo:

- + Construir uma máquina automática para criar qualquer forma + possível pedida pelo Edifício Central (Reconmento-te a experimentares!).

- Contruir + algo fixe com os fios.

- Continuar a jogar + regularmente.

Independentemente da tua escolha, lembra-te de te divertires! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press + title: Fios & Pintor Quádruplo + desc: "Desbloquaste a Camada de Fios: É uma camada separada + no topo da camada normal e introduz um monte de novas + mecânicas!

Para o inicio eu dei-te o Pintor + Quádruplo - Conecta as entradasque queres pintar na + camada de fios!

Para trocares para a camada de fios, pressiona a tecla E." reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtro de Itens + desc: Desbloquaste o Filtro de Itens! Vai mandar itens ou + para o topo ou para a saída da esquerda dependendo depending se são iguais ao + sinal da camada de fios ou não.

Também podes passar um + sinal binário (1 ou 0) para ativa-lo ou desativa-lo totalmente. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Fim da Demo + desc: Tu chegaste ao fim da versão demo! settings: title: Definições categories: @@ -866,51 +880,51 @@ settings: Esta definição pode ser mais confortável se alterares frequentemente a colocação de diferentes tipos de construções. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Volume do Som + description: Define o volume para efeitos sonoros musicVolume: - title: Music Volume - description: Set the volume for music + title: Volume da Música + description: Define o volume para música lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Recursos de Mapa de Baixa Qualidade + description: Simplifica a renderização de recursos quando o mapa está ampliado para + melhorar o desempenho. Até parece mais limpo, então lembra-te de + experimentares! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Desativar Grelha + description: Desativar a grelha pode ajudar com o desempenho. Isto também + fazz o jogo parecer mais limpo! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Limpar Cursor com Clique Direito + description: Ativado por padrão, limpa o cursor sempre que pressionas o botão direito do rato + enquanto tens um edifício para colocamento. Se desativado, + podes apagar construções pressionando o botão direito do rato enquanto colocas um + edifício. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Texturas de baixa qualidade (Feio) + description: sa texturas de baixa qualidade para melhorar o desempenho. sto vai tornar o + jogo parecer muito feio! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Mostrar bordas de limites (chunk borders) + description: O jogo está dividido em partes de 16x16 quadrados, se esta dedinição estiver + ativada as bordas de cada limitece são mostradas. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Selecionar extrator num quadrado de recurso + description: Ativado por padrão, seleciona um extrator se usares a pipeta quando + estiveres com o rato em cima de um quadrado de recurso. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Tapetes rolantes simplificados (Feio) + description: Não renderiza os intens nos tapetes excepto quando tens o rato em cima do tapete + para melhorar o desempenho. Não recomendo a jogares com esta definição ativada + a não ser que precises mesmo de melhorar o desempenho. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Ativar rato panorâmico + description: Permite-te mover o mapa movento o rato nos cantos do + ecrâ. A velociade depende da definição de velocidade de movimentação. rangeSliderPercentage: % keybindings: title: Atalhos - hint: "Tip: Utiliza o CTRL, o SHIFT e o ALT! Eles permitem diferentes opções de + hint: "Dica: Utiliza o CTRL, o SHIFT e o ALT! Eles permitem diferentes opções de posicionamento." resetKeybindings: Resetar Atalhos categoryLabels: @@ -946,7 +960,7 @@ keybindings: painter: Pintor trash: Lixo rotateWhilePlacing: Rotação - rotateInverseModifier: "Modifier: Rotação CCW" + rotateInverseModifier: "Modificador: Rotação CCW" cycleBuildingVariants: Mudar variantes confirmMassDelete: Confirmar eliminação em massa cycleBuildings: Mudar construções @@ -966,23 +980,23 @@ keybindings: menuClose: Fechar Menu switchLayers: Troca de camadas wire: Fio Elétrico - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing + balancer: Distribuidor + storage: Armazém + constant_signal: Sinal Constante + logic_gate: Portões Lógicos + lever: Interruptor (normal) + filter: Filtro de itens + wire_tunnel: Túnel de Fio display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + reader: Leitor de Tapete + virtual_processor: Cortador Virtual transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Analisador de Forma + comparator: Comparador + item_producer: Produtor de Itens (Sandbox) + copyWireValue: "Fios: Copia o valor debaixo do cursor" about: - title: Sobre o jogo + title: Sobre o Jogo body: >- Este jogo é código aberto e desenvolvido por Tobias Springer @@ -1006,63 +1020,59 @@ demo: exportingBase: Exportar base como uma imagem settingNotAvailable: Não disponível no Demo. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - "O edifício central aceita qualquer entrada, não apenas a forma atual!" + - Tem a certeza que as tuas fábricas são modulares - vai valer a pena! + - "Não construas demasiado perto do edifício, ou vai ser um grande caos!" + - "Se empilhar não funciona, tenta trocar as entradas." + - Podes alternar a direção do planeador de tapete rolante ao pressionar R. + - Ao segurar CTRL podes arrastar tapetes rolantes sem auto-orientação. + - "Os rácios continuam os mesmos, desde que todos os upgrades estejam no mesmo Nível." + - Execução em série é mais eficiente que em paralelo. + - Vais desbloquear mais variações de edifícios mais tarde no jogo! + - Podes usar T para trocar entre as diferentes variantes. + - Simetria é a solução! + - Podes entrelaçar diferentes níveis de túneis. + - Tenta construir fábricas compactas - vai valer a pena! + - O pintor tem uma variante espelhada que podes selectionar com T + - Ter os rácios de edifícios corretos vai maximizar a eficiência. + - "No nível máximo, 5 extratores vão encher um tapete." + - Não te esqueças dos túneis! + - Não tens de dividir os itens uniformemente para eficiência máxima. + - Segurar SHIFT vai ativar o planeador de tapetes, deixando-te colocar longas linhas de tapetes facilmente. + - "Os cortadores cortam sempre verticalmente, independentemente da sua orientação." + - Para obter branco junta as três cores. + - O buffer do armazém prioritiza a primeira saída. + - Investe tempo para costruir designs repetiveis - vale a pena! + - Segurar CTRL permite-te colocar vários edifícios. + - Podes segurar ALT para inverter a direção de tapetes colocados. + - Eficiência é a solução! + - As formas que estão mais longes do edifício central são mais complexas. + - "As Máquinas têm uma velocidade limitada, divide-as para eficiência máxima." + - Usa balanceadores para maximizar a tua eficiência. + - Organização é importante. Tenta não cruzar tapetes demasiado. + - "Planeja antecipadamente, ou vai ser um grande caos!" + - Não removas as tuas fábricas antigas! Vais precisar delas para desbloquear upgrades. + - Tenta superar o nível 18 sozinho sem procurar ajuda! + - "Não complicas as coisas, tenta continuar simples e irás muito longe." + - Talvez precises de reusar fábricas mais tarde no jogo. Planeia as tuas fábricas para serem reutilizáveis. + - Às vezes, podes encontrar uma forma necessária no mapa sem criar-la com empilhadoras. + - Moinhos de vento e cataventos completos nunca aparecem naturalmente. + - Pinta as tuas formas antes de cortar-las para eficiência máxima. + - "Com módulos, o espaço é apenas uma percepção; uma preocupação para pessoas mortais." + - Faz uma fábrica de diagramas separada. São importantes para módulos. + - "Dá uma olhada ao misturador de cores, e as tuas questões serão respondidas." + - Use CTRL + Clique para selecionar uma área. + - Construir demasiado perto do edifício central pode ficar no caminho de projetos futuros. + - O ícone de alfinete perto duma forma na lista de upgrades vai afixar-la ao ecrã. + - Junta todas as cores primárias juntas para fazer branco! + - "Tu tens um mapa infinito, não limites a tua fábrica, expande!" + - Tenta também Factorio! É o meu jogo favorito. + - O cortador quádruplo corta no sentido dos ponteiros começando no canto superior direito! + - Podes fazer download dos teus savegames no menu principal! + - Este jogo tem muitos atalhos de teclado úteis! Não te esqueças de verificar a página de configurações. + - "Este jogo tem muitas definições, não te esqueças de as verificar!" + - O marco para o teu edifício central tem uma pequena bússola para indicar a sua direção! + - "Para limpar tapetes, corta a área e cola-a na mesma localização." + - Pressiona F4 para mostrar os teus FPS e Tick Rate. + - Pressiona F4 duas vezes para mostrar a tile do teu rato e câmara. + - Podes clicar numa forma afixada no lado direito para desafixar-la. diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index aba618a5..54c45291 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -2,59 +2,51 @@ steamPage: 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ă. - 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. - - 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]! - - 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! - - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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] - - [b]This game is 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] - - [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] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Se Încarcă error: Eroare @@ -129,7 +121,9 @@ dialogs: text: "Încercarea de încărcat savegame-ul a eșuat:" confirmSavegameDelete: title: Confirmă ștergerea - text: Ești sigur că vrei să ștergi acest joc? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Eroare la ștergere text: "Nu a reușit să se ștearga savegame-ul:" @@ -184,9 +178,8 @@ dialogs: rulante.
" createMarker: title: Nou waypoint - desc: Dă-i un nume plin de înțeles, de asemenea poți include a codul - scurt al unei forme (Pe care îl poți genera here) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Edit Marker markerDemoLimit: desc: Poți crea decât două waypoint-uri personalizate în demo. Ia standalone-ul @@ -461,8 +454,9 @@ buildings: input-ul de sus. quad: name: Mașină de pictat (Quad) - description: Permite colorarea fiecărui cadrant al formei cu o culoare diferită - . + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Mașină de pictat description: Colorează întreaga formă din input-ul stâng folosind culoarea din @@ -598,10 +592,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Tăierea formelor - desc: Tocmai ai deblocat tăietorul - taie forme pe jumate de - jos în sus indiferent de orientație!

Ține - minte să scapi de deșeuri, altfel se va opri - În - acest scop ți-am dat un gunoi, care distruge tot ce pui în el! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotitul desc: rotater-ul a fost deblocat! El rotește formele la 90 de @@ -624,10 +620,9 @@ storyRewards: pus peste input-ul stâng! reward_splitter: title: Distribuitor/Combinator - desc: Multifuncționalul distribuitor a fost deblocat - El poate - fi folosit pentru a construi fabrici mai mari prin - distribuirea și combinarea obiectelor pe benzi - multiple!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunel desc: Tunelul a fost deblocat - Acum poți deplasa obiecte prin @@ -640,9 +635,10 @@ storyRewards: printre variante! reward_miner_chainable: title: Chaining Extractor - desc: Ai deblocat Extractorul în lanț! El își poate - transmite resursele la alte extractoare ca tu să - poți extrage resurse mai eficient! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Tier II desc: Ai deblocat o variantă nouă a tunelului - El are @@ -659,13 +655,18 @@ storyRewards: forme odată consumând doar o culoare în loc de două! reward_storage: title: Depozitul - desc: Ai deblocat o variantă a gunoiului - El permite să - depoziți obiecte până într-o capacitate dată! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Jocul liber - desc: Ai făcut-o! Ai deblocat modul de joc liber! Asta înseamnă - că formele sunt acum generate aleatoriu! (Fără griji, mai mult - conținut este planificat pentru versiunea standalone!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Planuri desc: Acum poți copia și lipi părți ale fabrici tale! @@ -705,8 +706,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index c4ee9767..aa2aaf85 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -1,59 +1,51 @@ steamPage: shortText: shapez.io — это игра о строительстве фабрик для автоматизации создания и объединения все более сложных фигур на бесконечной карте. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - shapez.io — это игра о строительстве фабрик для автоматизации создания и объединения все более сложных фигур на бесконечной карте. Развивайтесь в игре и открывайте улучшения для ускорения фабрики, после доставки запрошенных ресурсов. - - По мере увеличения спроса на фигуры вам придется увеличивать свою фабрику, чтобы удовлетворить спрос. Однако, не забывайте о ресурсах, несмотря на то что вы будете расширятся на [b]бесконечной карте[/b]! - - Вскоре вам придется смешивать цвета и красить ими фигуры. Комбинируйте красный, зеленый и синий красители для получения разных цветов и красьте ими фигуры, чтобы удовлетворить спрос. - - Эта игра имеет 18 уровней развития (но и они займут вас на часы!), но я постоянно добавляю новый контент - там многое запланировано! - - Покупка игры даст доступ к полной версии, которая имеет дополнительные функции, а также вы получите доступ к недавно разработанным функциям. - - [b]Преимущества полной версии[/b] - - [list] - [*] Темный Режим - [*] Неограниченные Метки - [*] Неограниченные Сохранения - [*] Дополнительные настройки - [*] Скоро: Провода & Энергия! Запланировано (примерно) на конец июля 2020 года. - [*] Скоро: Больше уровней - [*] Позволит мне дальше разрабатывать shapez.io ❤️ - [/list] - - [b]Будущие обновления[/b] - - Я очень часто обновляю игру и пытаюсь обновлять ее как минимум каждую неделю! - - [list] - [*] Различные карты и испытания (например, карты с препятствиями) - [*] Пазлы (Доставить запрошенную фигуру с ограничением пространства / набора зданий) - [*] Режим истории, где здания стоят фигуры - [*] Настраиваемый генератор карт (настройка ресурса / размера фигуры / плотности, семя и т.д.) - [*] Дополнительные типы фигур - [*] Улучшения производительности (игра уже работает довольно хорошо!) - [*] И многое другое! - [/list] - - [b]Это игра с открытым исходным кодом![/b] - - Любой может внести свой вклад, я активно участвую в жизни сообщества и пытаюсь рассмотреть все предложения и по возможности принять во внимание отзывы. Не забудьте проверить мою доску Trello со всеми планами! - - [b]Ссылки[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Официальный Discord[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Планы[/url] - [*] [url=https://www.reddit.com/r/shapezio]Сабреддит[/url] - [*] [url=https://github.com/tobspr/shapez.io]Исходный код (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Помочь с переводом[/url] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Загрузка error: Ошибка @@ -129,7 +121,9 @@ dialogs: text: Не удалось загрузить сохранение игры. confirmSavegameDelete: title: Подтвердите удаление. - text: Вы действительно хотите удалить сохранение игры? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Ошибка удаления text: Не удалось удалить сохранение игры. @@ -183,10 +177,8 @@ dialogs: Инвертировать направление размещаемых конвейерных лент.
" createMarker: title: Новый маркер - desc: Дайте ему содержательное имя, также можно добавить - сокращение в виде фигуры (Которое можно - сгенерировать здесь) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Редактирование маркера markerDemoLimit: desc: Вы можете создать только 2 своих маркера в демо-версии. Приобретите полную @@ -460,7 +452,9 @@ buildings: description: Красит фигуру из левых входов красителем из перпендикулярного. quad: name: Покрасчик (4Вх.) - description: Позволяет раскрасить каждую четверть фигуры разными цветами. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Покрасчик description: Красит всю фигуру из левого входа красителем из перпендикулярного. @@ -594,11 +588,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Разрезание Фигур - desc: Вы только что открыли резак - он разрезает фигуры пополам - сверху вниз независимо от их ориентации!

- Обязательно избавьтесь от отходов, иначе он - остановится - для этого я дал вам мусорку, которая - уничтожит все, что в нее поместить! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Вращение desc: Разблокирован вращатель! Он поворачивает фигуры по @@ -621,9 +616,9 @@ storyRewards: правого входа наложится на фигуру из левого! reward_splitter: title: Разделитель / Соединитель - desc: Разблокирован многофункциональный разделитель! Его можно - использовать для создания больших фабрик путем разделения и - соединения конвейеров!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Туннель desc: Разблокирован туннель! Теперь вы можете транспортировать @@ -635,9 +630,10 @@ storyRewards: нажмите 'T', чтобы переключить вариант! reward_miner_chainable: title: Цепной Экстрактор - desc: Разблокирован цепной экстрактор! Он может - передавать свои ресурсы другим экстракторам, чтобы - вы могли эффективнее извлекать ресурсы! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Туннель II desc: Разблокирован новый вариант туннеля с большей @@ -653,13 +649,18 @@ storyRewards: одновременно, потребляя только один краситель вместо двух! reward_storage: title: Буферное Хранилище - desc: Разблокирован вариант мусорки - он позволяет хранить - предметы до заданной вместимости! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Свободная игра - desc: У вас получилось! Разблокирован режим свободной игры! Это - означает, что фигуры теперь генерируются случайным образом! (Не - беспокойтесь, больше контента планируется в полной версии!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Чертежи desc: Теперь вы можете копировать и вставлять части вашей @@ -697,8 +698,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml index fc59b23a..9bd566cc 100644 --- a/translations/base-sl.yaml +++ b/translations/base-sl.yaml @@ -2,57 +2,51 @@ steamPage: shortText: shapez.io je igra grajenja tovarne katere cilj je avtomatiziranje kreiranja in procesiranja vse bolj zapletenih oblik na neskončni ravnini. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - shapez.io je igra grajenja tovarne katere cilj je avtomatiziranje kreiranja in procesiranja vse bolj zapletenih oblik na neskončni ravnini. Ob dostavi zahtevanih oblik boste napredovali v igri in odklenili nadgradnje, da boste pospešili tovarno. - - Ko se bo povpraševanje po oblikah povečalo, boste morali prilagoditi svojo tovarno, da bo zadostilo povpraševanju. Ne pozabite na vire, morali pa se boste razširiti čez [b]neskončno ravnino[/b]! - - Kmalu boste morali mešati barve in z njimi barvati svoje oblike - Združite rdeče, zelene in modre barvne vire, da ustvarite različne barve in z njimi barvate oblike, da zadostite povpraševanju. - - V tej igri je 18 progresivnih stopenj (ki vas bodo zaposlile za več ur!), Vendar nenehno dodajam novo vsebino - načrtovanih novosti je veliko! Nakup igre vam omogoča dostop do samostojne različice, ki ima dodatne funkcije, prav tako pa boste imeli dostop do novo razvitih funkcij. - - [img]{STEAM_APP_IMAGE}/extras/header_standalone_advantages.png[/img] - - [list] - [*] Temna tema - [*] Neomejeno označb - [*] Neomejeno shranjenih tovarn - [*] Dodatne nastavitve - [*] Prihaja kmalu: Žice in energija! Prihajajo (približno) konec julija 2020. - [*] Prihaja kmalu: Več stopenj - [*] Omogoča mi nadaljni razvoj shapez.io ❤️ - [/list] - - [img]{STEAM_APP_IMAGE}/extras/header_future_updates.png[/img] - - Igro posodabljam zelo pogosto in poskušam dodati novosti vsaj vsak teden! - - [list] - [*] Različni zemljevidi in izzivi (npr. Zemljevidi z ovirami) - [*] Izzivi (vnesite želeno obliko z omejenim območjem / nizom zgradb) - [*] Način zgodbe, kjer imajo stavbe stroške/cene - [*] Nastavljiv generator zemljevidov (konfigurirajte velikost / gostoto oblik /, seme in več) - [*] Dodatne vrste oblik - [*] Izboljšanje zmogljivosti (igra že sedaj deluje zelo dobro!) - [*] In veliko več! - [/list] - - [img]{STEAM_APP_IMAGE}/extras/header_open_source.png[/img] - - Vsakdo lahko prispeva, aktivno sem vključen v skupnost in poskušam pregledati vse predloge in upoštevati povratne informacije, kjer je to mogoče. Bodite prepričani, da si oglejte mojo Trello ploščo za celoten načrt! - - [img]{STEAM_APP_IMAGE}/extras/header_links.png[/img] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Uradni Discord[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Načrtovane posodobitve[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Izvorna Koda (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Pomagaj pri prevodu[/url] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Loading error: Error @@ -127,7 +121,9 @@ dialogs: text: "Failed to load your savegame:" confirmSavegameDelete: title: Confirm deletion - text: Are you sure you want to delete the game? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Failed to delete text: "Failed to delete the savegame:" @@ -186,8 +182,7 @@ 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) + key of a shape (Which you can generate here) titleEdit: Edit Marker markerDemoLimit: desc: You can only create two custom markers in the demo. Get the standalone for @@ -467,8 +462,9 @@ buildings: input. quad: name: Painter (Quad) - description: Allows you to color each quadrant of the shape with a different - color. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Trash @@ -586,11 +582,12 @@ buildings: storyRewards: 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! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotating desc: The rotater has been unlocked! It rotates shapes @@ -613,9 +610,9 @@ storyRewards: stacked on top of the left input! 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: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: The tunnel has been unlocked - You can now tunnel items @@ -628,9 +625,10 @@ storyRewards: variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can + desc: "You have unlocked the chained extractor! It can forward its resources to other extractors so you - can more efficiently extract resources! + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Tier II desc: You have unlocked a new variant of the tunnel - It has a @@ -647,13 +645,18 @@ storyRewards: once consuming just one color instead of two! reward_storage: title: Storage Buffer - desc: You have unlocked a variant of the trash - It allows you - to store items up to a given capacity! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! 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!) + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Blueprints desc: You can now copy and paste parts of your factory! Select @@ -690,8 +693,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml index 6e1753b4..47aa4947 100644 --- a/translations/base-sr.yaml +++ b/translations/base-sr.yaml @@ -1,62 +1,51 @@ steamPage: shortText: shapez.io je igra o pravljenju fabrika za automatizaciju stvaranja i spajanja sve složenijih oblika na beskonačno velikoj mapi. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - shapez.io je igra o pravljenju fabrika za automatizaciju stvaranja i spajanja sve složenijih oblika na beskonačno velikoj mapi. - - Nakon dostavljanja zahtevanog oblika napredovaćete u igri i oključaćete nadogradnje za bržu fabriku. - - Kako potražnja za oblicima raste, da bi zadovoljili potražnju, moraćete da uvećate fabriku - Ne zaboravite na resurse, proširićete se na [b]beskonačnoj mapi[/b]! - - Vrlo brzo moraćete da mešate boje i farbate oblike - Pomešajte crvenu, zelenu i plavu rudu boje da biste dobili različite boje i ofarbajte oblik kako bi ispunili zahteve potražnje. - - Igra sadrži 18 progresivnih nivoa (Koji će vas zaokupirati satima!) i stalno dodajem nove stvari - Mnogo toga je planirano! - - Kupovinom igre dobijate pristup samostalnoj verziji koja poseduje dodatne funkcije, a dobićete i pristup novorazvijenim funkcijama. - - [b]Prednosti samostalne igre[/b] - - [list] - [*] Tamna tema - [*] Neobraničen broj putokaza - [*] Neograničen broj sačuvanih igara - [*] Dodatna podešavanja - [*] Uskoro: Žice i Energija! Predviđeno (otprilike) za kraj Jula 2020. - [*] Uskoro: Više nivoa - [*] Omogućavate mi da dalje radim na shapez.io ❤️ - [/list] - - [b]Buduća ažuriranja[/b] - - Trudim se da stalno ažuriram igru i da dostavim ažuriranje makar jednom nedeljno! - - [list] - [*] Različite mape i izazovi (npr. mapa sa preprekama) - [*] Slagalice (Dostavite odgovaraćuji oblik, ali uz ograničen broj građevina / oblasti) - [*] Način igre u kojem građevine imaju cenu - [*] Podesiv generator mapa (Prilagođena veličina/gustina oblika/resursa, i još.) - [*] Dodatne vrste oblika - [*] Poboljšanje performansi (Igra je već prilično fluidna!) - [*] I još mnogo toga! - [/list] - - [b]Ovo je igra otvorenog koda![/b] - - - Svako može da doprinese igri, Aktivno interagujem sa zajednicom i, kad god je to moguće, pokušavam i uzmem u obzir sve predloge i povratne informacije. Obavezno posetite potpuni plan koji se nalazi na trello tabli! - - [b]Links[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Oficijalni Discord server[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Plan[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]Izvorni kod (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Pomozite sa prevođenjem[/url] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Učitavanje error: Greška @@ -132,7 +121,9 @@ dialogs: text: "Neuspešno učitavanje sačuvane igre:" confirmSavegameDelete: title: Potrvrdi brisanje - text: Da li ste sigurni da želite da obrišete sačuvanu igru? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Greška prilikom brisanja text: "Neuspešno brisanje sačuvane igre:" @@ -191,9 +182,8 @@ dialogs: createMarker: title: Novi Putokaz titleEdit: Uredi Putokaz - desc: Dajte mu smisleno ime. Možete koristiti i kod oblika - (Koji možete napraviti ovde) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) markerDemoLimit: desc: U demo verziji možete imati samo dva putokaza istovremeno. Nabavite samostalnu igru za beskonačno mnogo putokaza! @@ -470,7 +460,9 @@ buildings: description: Farba ceo oblik na levom ulazu bojom sa gornjeg ulaza. quad: name: Farbač (četvorostruki) - description: Omogućava farbanje svake četvrtine oblika različitom bojom. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Smeće @@ -588,10 +580,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Rezanje Oblika - desc: Rezač je otključan! On reže oblike od vrha prema - dnu bez obzira na orijentaciju građevine!

Višak se - mora odbaciti kako bi se izbegao zastoj. - Za tu - svrhu postoji smeće, koje uništava sve što uđe u njega. + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Obrtanje desc: Obrtač je otključan! On okreće oblike za 90 stepeni u @@ -613,9 +607,9 @@ storyRewards: vrh levog! reward_splitter: title: Deljenje/Spajanje - desc: Multifunkcionalni balanser je otključan! Može ga se - iskoristiti za deljenje i spajanje oblika na više - pokretnih traka!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunel desc: Tunel je otključan - Omogućava prenos stvari ispod traka @@ -627,8 +621,10 @@ storyRewards: pritisni 'T' za menjanje njegove varijacije! reward_miner_chainable: title: Lančani rudar - desc: Otključan je lančani rudar! On može da prosledi - svoje resurse drugim rudarima radi efikasnijeg rudarenja! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunel II Reda desc: Otključana je nova varijacija tunela - On ima @@ -645,13 +641,18 @@ storyRewards: odjednom po ceni jedne boje umesto dve! reward_storage: title: Skladište - desc: Varijacija smeća je otključana - Omogućava skladištenje - predmeta do određenog kapaciteta! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Slobodna Igra - desc: Uspeli ste! Otključali ste mod slobodne igre! Oblici su - od sada nasumično generisani! (Bez brige, više sadržaja je planirano - za samostalnu igru!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Nacrti desc: Sada možete da kopirate i nalepljujete delove fabrike! @@ -690,8 +691,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index b19a0781..a6828af3 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -1,59 +1,51 @@ steamPage: 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. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + discordLinkShort: Officiel Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - 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 level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - 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]! + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! - 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. + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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! + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + Anybody can contribute, I'm actively involved in the community and + attempt to review all suggestions and take feedback into consideration + where possible. - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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] - - [b]This game is 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] - - [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] - [/list] - discordLinkShort: Official Discord + Be sure to check out my trello board for the full roadmap! global: loading: Laddar error: Error @@ -129,7 +121,8 @@ dialogs: text: "Kunde inte ladda sparfil:" confirmSavegameDelete: title: Bekräfta radering - text: Är du säker på att du vill radera spelet? + text: Är du säker på att du vill ta bort följande spel?

+ '' på nivå

Detta kan inte ångras! savegameDeletionError: title: Kunde inte radera text: "Kunde inte radera sparfil:" @@ -183,9 +176,8 @@ dialogs: rullband.
" 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 ) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Ändra Markör markerDemoLimit: desc: Du kan endast ha två markörer i demoversionen. Skaffa den fristående @@ -209,13 +201,11 @@ dialogs: descShortKey: ... or enter the short key of a shape (Which you can generate here) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Byt namn på sparfil + desc: Du kan byta namn på din sparfil här. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Prestanda varning + desc: Du har placerat väldigt många byggnader, det här är bara en vänlig påminnelse att spelet inte klarar av ett oändligt antal av byggnader - så försök hålla dina fabriker kompakta! ingame: keybindingsOverlay: moveMap: Flytta @@ -239,7 +229,7 @@ ingame: switchLayers: Byt lager buildingPlacement: cycleBuildingVariants: Tryck ned För att bläddra igenom varianter. - hotkeyLabel: "Hotkey: " + hotkeyLabel: "Snabbtangent: " infoTexts: speed: Hastighet range: Räckvidd @@ -256,7 +246,7 @@ ingame: notifications: newUpgrade: En ny uppgradering är tillgänglig! gameSaved: Ditt spel har sparats. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Nivå har blivit avklarad! shop: title: Upgraderingar buttonUnlock: Upgradera @@ -348,43 +338,43 @@ ingame: shapeViewer: title: Lager empty: Tom - copyKey: Copy Key + copyKey: Kopiera nyckel connectedMiners: one_miner: 1 Miner n_miners: Miners limited_items: Limited to watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Demo-version + desc: Klicka här för att se fördelarna med Steam-versionen! + get_on_steam: Skaffa på Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Skaffa den fulla versionen! + no_thanks: Nej tack! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 nya nivåer! + desc: Totalt 26 nivåer! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 nya byggnader! + desc: Automatisera din fabrik fullkomligt! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ med sparfiler + desc: Så många som du bara vill! upgrades: title: 20 Upgrade Tiers desc: This demo version has only 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ med markeringar! + desc: Tappa aldrig bort dig i din fabrik längre! wires: - title: Wires - desc: An entirely new dimension! + title: Kablar + desc: En helt ny dimension! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Mörkt läge + desc: Sluta skada dina ögon! support: - title: Support me - desc: I develop it in my spare time! + title: Stöd mig + desc: Jag utvecklar det på min fritid! shopUpgrades: belt: name: Rullband, Distributörer & Tunnlar @@ -458,7 +448,9 @@ buildings: description: Färgar formerna på de vänstra ingångarna med färgen från den högra. quad: name: Färgläggare (Quad) - description: Låter dig färglägga varje hörn av formen med olika färger. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Färgläggare description: Färgar hela formen på den vänstra ingången med färgen från den @@ -593,11 +585,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Att klippa former - desc: Du låste just upp klipparen - den klipper former på - hälften från topp till botten oavsett dess - orientation!

Se till att ta bort allt överskott, annars - kommer det att skapa uppehåll - Av denna anledning - gav jag dig skräphantering, vilket förstör allt du inputtar! + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Rotation desc: Roteraren har blivit upplåst! Den roterar former 90 @@ -620,10 +613,9 @@ storyRewards: staplas över den vänstra! reward_splitter: title: Delning/Sammanslagning - desc: Den multifunktionella balanseraren har blivit upplåst - - Den kan användas för att bygga större fabriker genom att - dela eller slå ihop objekt till flera - rullband!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Tunnel desc: Tunneln blivit upplåst- Du kan nu transportera saker @@ -635,9 +627,10 @@ storyRewards: tryck ned 'T' för att bläddra genom dess varianter! reward_miner_chainable: title: Kedjeextraktor - desc: Du har låst upp Kedjeextraktorn! Den kan föra - sina resurser framåt till andra extraktorer så att du kan - mer effektivt extrahera resurser! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Tunnel Tier II desc: Du har låst upp en ny variant av tunneln - Den har en @@ -656,13 +649,18 @@ storyRewards: två! reward_storage: title: Förvaringsbuffert - desc: Du har låst upp en ny variant av skräphantering - Den - låter dig förvara objekt upp till en viss kapacitet! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Friläge - desc: Du gjorde det! Du låste upp friläge! Det betyder att - former är nu slumpmässigt genererade! (oroa dig inte, mer innehåll - är planerat för den fristående versionen!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Ritningar desc: Du kan nu kopiera och klistra in delar av din fabrik! @@ -697,13 +695,14 @@ storyRewards: measure the throughput of a belt.

And wait until you unlock wires - then it gets really useful! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Roterare (180 grader) + desc: Du låste precis upp roteraren! - Den låter dig rotera former med 180 grader (Vilken överraskning! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires @@ -742,8 +741,8 @@ storyRewards: signal from the wires layer or not.

You can also pass in a boolean signal (1 / 0) to entirely activate or disable it. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Slutet av demo-versionen + desc: Du har nått slutet av demo-versionen! settings: title: Inställningar categories: @@ -860,11 +859,11 @@ settings: individuellt. Detta kan vara mer bekvämt om du ofta bytar byggnader som du placerar. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Ljudvolym + description: Ställ in volymen för ljudeffekter musicVolume: - title: Music Volume - description: Set the volume for music + title: Musikvolym + description: Ställ in volymen för musiken lowQualityMapResources: title: Low Quality Map Resources description: Simplifies the rendering of resources on the map when zoomed in to @@ -957,12 +956,12 @@ keybindings: lockBeltDirection: Sätt på rullbandsplanerare switchDirectionLockSide: "Planerare: Byt sida" pipette: Pipett - menuClose: Close Menu - switchLayers: Switch layers - wire: Energy Wire + menuClose: Stäng meny + switchLayers: Byt lager + wire: Elkabel balancer: Balancer - storage: Storage - constant_signal: Constant Signal + storage: Lagring + constant_signal: Konstant signal logic_gate: Logic Gate lever: Switch (regular) filter: Filter @@ -1000,12 +999,12 @@ demo: exportingBase: Exportera hela fabriken som en bild settingNotAvailable: Inte tillgänglig i demoversionen. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. + - Hubben accepterar alla sorters former, inte bara den nuvarande formen! + - Se till så dina fabriker är flexibla - det lönar sig! + - Bygg inte för nära hubben, det blir kaos! + - Om staplingen inte fungerar som förväntat kan du prova byta om dess inputs. + - Du kan ändra på bältplanneranens riktning genom att trycka R. + - Genom att hålla nere CTRL kan du dra belt utan auto-orientering. - Ratios stay the same, as long as all upgrades are on the same Tier. - Serial execution is more efficient than parallel. - You will unlock more variants of buildings later in the game! diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index ed02b33e..e186355c 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -1,60 +1,51 @@ steamPage: shortText: shapez.io giderek karmaşıklaşan şekillerin sonsuz bir harita üzerinde üretimi ve birleştirilmesi hakında bir oyundur. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - shapez.io giderek karmaşıklaşan şekillerin sonsuz bir harita üzerinde üretimi ve birleştirilmesi hakında bir oyundur. Talep edilen şekilleri verdikten sonra oyundaki geliştirmeleri açıp fabrikanızı hızlandırabilirsiniz. - - Şekiller için talep artınca fabrikanı büyütüp talebi karşılamalısın - Kaynakları unutma! Sonsuz [b]sonsuz haritada[/b] genişlemen gerekecek! - - Yakında renkleri karıştırman ve şekileri boyaman gerekecek - Talebi karşılamak için kırmızı, mavi ve yeşili karıştırıp şekilleri boyacaksın - - Bu oyun 18 kademeli seviye içerir (Seni saatlerce meşgul tutumalı) ama sürekli yeni şeyler ekliyorum - Ekleyecek çok şey var! - - Bu oyunu satın almak indirilebilir versiyonuna (Ek özellikler var) ve yeni özeliklerine erişebileceksiniz. - - [b]İndirebilir versiyonun avantajları[/b] - - [list] - [*] Karanlık mod - [*] Sonsuz işaret - [*] Sonsuz kayıt alanı - [*] Ek ayarlar - [*] Yakında geliyor: Kablo ve enerji! Temmuz sonunu hedefliyorum. - [*] Yakında geliyor: Daha fazla seviyeler - [*] Shapez.io'yu geliştirmeme izin veriyor ❤️ - [/list] - - [b]Gelecek güncellemeler[/b] - - Oyunu sık sık güncelliyorum ve en az haftada bir güncellemeye çalışıyorum! - - [list] - [*] Farklı haritalar ve görevler (Örneğin engelli haritalar) - [*] Yapbozlar (İstenen şekilleri kısıtlı bir alanda / belli yapılar ile) - [*] Hikaye modu ile yapıların maliyeti olacak. - [*] Ayarlanabilir harita yapımı(Ayarlanabilir kaynak/şekil boyut/sıklığı, seedler ve daha fazlası) - [*] Ek şekiller - [*] Performans optimizasyonları (oyun zaten iyi çalışıyor) - [*] Ve daha fazlası - [/list] - - [b]Bu oyun açık kaynaklı![/b] - - Bu oyuna herkes katkıda bulunabilir! Aktif olarak toplulukğa katkıda bulunuyorum ve bütün önerileri gözden geçirmeye çalışıyorum. Yol planıma Trello'dan bakmayı unutmayın! - - - [b]Links[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Dİscord'umuz[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]yol planı[/url] - [*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url] - [*] [url=https://github.com/tobspr/shapez.io]KAynak kodu (GitHub)[/url] - [*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Çevirmeye yardımcı olun[/url] - [/list] discordLinkShort: Official Discord + intro: >- + Shapez.io geometrik şekillerin otomatik üretimi için fabrika + kurabildiğiniz sakinleştirici bir oyundur. + + Seviye arttıkça şekiller daha karmaşık hale gelecek ve sonsuz haritada genişlemen gerekecek! + + Ve bu yeterli değilmiş gibi, şekiller için talebi karşılamak için daha fazla üretim yapmalısın - buna tek yardımcı olacak şey ise genişleme! + + En başta sadece şekilleri işlerken, sonradan onları boyaman gerekecek - bunun için boyaları çıkarmalı ve karıştırmalısın! + + Oyunu Steam'de satın almak tam sürüme erişimi sağlayacak, ama herzaman shapez.io deneme sürümünü oynayıp sonradan karar verebilirsin! + title_advantages: Bağımsıza özel Avantajlar + advantages: + - 12 Yeni Seviye toplamda 26 seviye. + - 18 Yeni Yapı tam otomatik bir fabrika için! + - 20 Geliştirme Aşaması saatlerce eğlence için! + - Kablolar Güncellemesi tamamen yeni bir boyut için! + - Gece Modu! + - Sınırsız Oyun Kaydı + - Sınırsız Yerimi + - Beni destekleyin! ❤️ + title_future: Planlanan İçerik + planned: + - Taslak Kütüphanesi (Bağımsıza Özel) + - Steam Başarımları + - Yapboz Modu + - Küçük Harita + - Modlar + - Kum Kutusu Modu + - ... ve daha fazlası! + title_open_source: Bu oyun açık kaynak kodlu! + title_links: Bağlantılar + links: + discord: Resmi Discord Sunucusu + roadmap: Yol Haritası + subreddit: Subreddit + source_code: Kaynak kodu (GitHub) + translate: Çeviriye yardım et + text_open_source: >- + Herkes bu oyuna katkıda bulunabilir. Toplulukla aktif bir şekilde + ilgileniyorum. Bütün önerileri ve geri dönüşleri incelemeye çalışıyorum + ve mümkün olanları değerlendirmeye alıyorum. + + Bütün yol haritasına Trello kartımda göz atmayı unutma! global: loading: Yüklenİyor error: Hata @@ -76,8 +67,8 @@ global: oneDayAgo: bir gün önce xDaysAgo: gün önce secondsShort: sn - minutesAndSecondsShort: dk sn - hoursAndMinutesShort: sa dk + minutesAndSecondsShort: dk dk + hoursAndMinutesShort: sa sa xMinutes: dakika keys: tab: TAB @@ -129,7 +120,8 @@ dialogs: text: "Oyun yükleme başarısız:" confirmSavegameDelete: title: Silme işlemini onayla - text: Oyunu silmek istediğinizden emin misiniz? + text:

Bu kayıdı silmek istiyor musunuz? + ''

. seviyede. Bu işlem geri alınamaz! savegameDeletionError: title: Silme başarısız text: "Oyun kaydını silme başarısız:" @@ -181,10 +173,8 @@ dialogs: taşıma bantlarının yönünü ters çevirir.
" createMarker: title: Yeni Konum İşareti - desc: İşarete anlamlı bir isim verin, aynı zamanda (buradan - oluşturabileceğiniz) bir şeklin sembolünü - ekleyebilirsiniz. + desc: Anlamlı bir isim ver. Ayrıca Şekil koduda + koyabilirsiniz (Buradan kod yapabilirisinz ) titleEdit: Konum İşaretini Düzenle markerDemoLimit: desc: Deneme sürümünde sadece iki adet yer imi oluşturabilirsiniz. Sınırsız yer @@ -203,18 +193,17 @@ dialogs: desc: Seçili yapıları yapıştırmak için yeterli kaynağınız yok! Kesmek istediğinize emin misiniz? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Sinyal Ata + descItems: "Önceden tanımlı bir eşya seçin:" + descShortKey: ... veya şekil kodunu girin (Buradan + edinebileceğiniz) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Oyun Kaydının Yeniden Adlandır + desc: Oyun kaydını buradan adlandırabilirsiniz. entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: Performans Uyarısı + desc: Dostça bir uyarı; Çok fazla yapı inşa ettiniz. Oyun sınırsız sayıda + yapıyla başa çıkamaz - Bu yüzden fabrikalarınızı az ama öz tutun! ingame: keybindingsOverlay: moveMap: Hareket Et @@ -230,7 +219,7 @@ ingame: delete: SİL pasteLastBlueprint: Son taslağı yapıştır lockBeltDirection: Taşıma bandı planlayıcısını kullan - plannerSwitchSide: Flip planner side + plannerSwitchSide: Planlayıcıyı ters çevir cutSelection: Kes copySelection: Kopyala clearSelection: Seçİmİ temİzle @@ -255,10 +244,10 @@ ingame: notifications: newUpgrade: Yeni geliştirme mevcut! gameSaved: Oyun kaydedildi. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Seviye tamamlandı! shop: - title: Geliştirmeler - buttonUnlock: Geliştir + title: Gelİştİrmeler + buttonUnlock: Gelİştİr tier: Aşama tierLabels: - I @@ -300,7 +289,7 @@ ingame: minute: / m hour: / h settingsMenu: - playtime: Oynama zamani + playtime: Oynama zamanı buildingsPlaced: Yapılar beltsPlaced: Taşıma bantları buttons: @@ -348,47 +337,47 @@ ingame: empty: Boş copyKey: Şekil Kodunu Kopyala connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 Üretici + n_miners: Üretici + limited_items: Sınır watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Deneme sürümü + desc: Steam sürümü avantajlarını görmek için buraya tıklayın! + get_on_steam: Steam'de al standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Tam versiyonu al! + no_thanks: Hayır, teşekkürler! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Yeni Seviye + desc: Toplamda 26 seviye! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Yeni Yapı + desc: Fabrikanı tamamen otomatikleştir! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Oyun Kayıtları + desc: Canın ne kadar isterse! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Geliştirme Aşaması + desc: Bu deneme sürümünde sadece 5 tane var! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Yer imleri + desc: Fabrikanda asla kaybolma! wires: - title: Wires - desc: An entirely new dimension! + title: Kablolar + desc: Tamamen yeni bir boyut! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Gece Modu + desc: Gözlerini artık yorma! support: - title: Support me - desc: I develop it in my spare time! + title: Beni destekleyin + desc: Boş zamanımda bu oyunu geliştiriyorum! shopUpgrades: belt: name: Taşıma Bandı, Dağıtıcılar & Tüneller description: Hız x → x miner: - name: Üretme + name: Üretici description: Hız x → x processors: name: Kesme, Döndürme & Kaynaştırıcı @@ -401,7 +390,7 @@ buildings: deliver: Teslİm et toUnlock: Açılacak levelShortcut: SVY - endOfDemo: End of Demo + endOfDemo: Deneme Sürümünün Sonu belt: default: name: Taşıma Bandı @@ -413,7 +402,8 @@ buildings: description: Bir şekli veya rengi üretmek için üzerlerini yerleştir. chainable: name: Üretİcİ (Zİncİrleme) - description: Place over a shape or color to extract it. Can be chained. + description: Bir şekli veya rengi üretmek için üzerlerini yerleştir. Zincirleme + bağlanabilir. underground_belt: default: name: Tünel @@ -441,8 +431,8 @@ buildings: 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. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Dödürücü (180 Derece) + description: Şekilleri 180 derece döndürür. stacker: default: name: Kaynaştırıcı @@ -451,151 +441,154 @@ buildings: mixer: default: name: Renk Karıştırıcısı - description: Mixes two colors using additive blending. İki rengi eklemeli renk - metoduyla birleştirir. + description: İki rengi eklemeli renk metoduyla birleştirir. painter: default: name: Boyayıcı description: Sol girdideki bütün şekli sağ girdideki renk ile boyar. double: - name: Boyayıcı (Çİft) + name: Boyayıcı (İkili) description: Sol girdideki şekilleri yukarı girdideki renk ile boyar. quad: name: Boyayıcı (Dörtlü) - description: Şeklin her çeyreğinin farklı bir renkle boyanmasını sağlar. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: name: Boyayıcı - description: Sol girdideki bütün şekli sağ girdideki renk ile boyar. + description: Sol girdideki bütün şekli aşağı girdideki renk ile boyar. trash: default: name: Çöp description: Her yönden giren girdileri yok eder. Tamamen. wire: default: - name: Enerji Kablosu - description: Enerji aktarmayı sağlar. + name: Kablo + description: Sinyali, eşyalar veya ikili değerler(1 / 0), aktarmayı sağlar. + Farklı renkteki kablolar bağlanamaz. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Kablo + description: Sinyali, eşyalar veya ikili değerler(1 / 0), aktarmayı sağlar. + Farklı renkteki kablolar bağlanamaz. + wire_tunnel: + default: + name: Kablo Tüneli + description: İki farklı kabloyu birbirine bağlamadan bir köprü oluşturur. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Dengeleyici + description: Çok işlevli - bütün girdileri eşit olarak bütün çıkışlara dağıtır. merger: - 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. merger-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. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Ayırıcı (tekİl) + description: Bir taşıma bandını iki çıktı verecek şekilde ayırır. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Ayırıcı (tekİl) + description: Bir taşıma bandını iki çıktı verecek şekilde ayırır. storage: default: name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. - wire_tunnel: - default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + description: Belirli bir sınıra kadar fazla eşyaları depolar. Taşırma kapısı + olarak kullanıla bilir. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Sabit Sinyal + description: Şekil, renk veya ikili değer (1 / 0) olan sabit bir sinyal + gönderir. lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Anahtar + description: Kablolarda ikili sinyal (1 / 0) gönderebilmek için açılıp + kapanabilir. Örneğin bir eşya filtresini kontrol etmek için + kullanılabilir. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: AND Kapısı + description: Eğer iki girdi de doğruysa, bu kapı"1" sinyali gönderir. (Doğru; + bir şekil, renk veya "1" girdisi demektir.) not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NOT Kapısı + description: Eğer girdi doğru değilse, bu kapı "1" sinyali gönderir. (Doğru; bir + şekil, renk veya "1" girdisi demektir.) xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: XOR Kapısı + description: Eğer iki girdiden sadece biri "1" sinyali alıyorsa, bu kapı "1" + gönderir. (Doğru; bir şekil, renk veya "1" girdisi demektir.) or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: OR Kapısı + description: Eğer iki girdiden herhangi biri "1" sinyali alıyorsa, bu kapı "1" + gönderir. (Doğru; bir şekil, renk veya "1" girdisi demektir.) transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transistör + description: Eğer yan girdi doğruysa aşağı doğru sinyal akışına izin verir. + (Şekil, renk veya "1"). mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transistör + description: Eğer yan girdi doğruysa aşağı doğru sinyal akışına izin verir. + (Şekil, renk veya "1"). filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtre + description: Bütün eşleşen eşyaları yukarı, geri kalanını aşağı göndermek için + bir sinyal bağla. İkili (1/0) sinyaller ile de kontrol + edilebilir. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Ekran + description: Ekranda göstermek için bir sinyal bağla - Bu sinyal bir şekil, renk + veya ikili değer (1/0) olabilir. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Band Okuyucu + description: Bant üzerindeki ortalama hızı ölçer. Kablo katmanında son okunan + eşyayı gösterir (açıldığında). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Şekil Analizcisi + description: Şeklin en alt katmanında sağ üst köşesinde bulunan şekli analiz + eder, şekli ve rengini verir. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Karşılaştırıcı + description: Eğer iki sinyal aynıysa "1" çıktısı verir. Şekiller, eşyalar ve + ikili değerler karşılaştırılabilir. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Sanal Kesici + description: Sanal olarak şekli ikiye böler. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Sanal Döndürücü + description: Sanal olarak şekli saat yönünde veya saatin tersi yönünde döndürür. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Sanal Katman Ayırıcı + description: Sanal olarak şeklin en üstteki katmanını ayırarak sağ çıktıya ve + geri kalanları sol çıktıya verir. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Sanal Kaynaştırıcı + description: Sanal olarak sağdaki şekli soldaki şeklin üstüne kaynaştırır. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Sanal Boyayıcı + description: Sanal olarak aşağı girdideki şekli sağ girdideki renk ile boyar. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Eşya Üretici + description: Sadece kum kutusu modunda açık, kablo katmanındaki sinyali normal + katmanda çıktı olarak verir. storyRewards: reward_cutter_and_trash: 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! + + desc: Kesici açıldı, bu alet şekilleri yönelimi ne + olursa olsun ortadan ikiye böler!

Çıkan şekilleri kullanmayı veya + çöpe atmayı unutma yoksa makine tıkanır! - Bu nedenle sana gönderdiğin + bütün her şeyi yok eden çöpü de verdim! + reward_rotater: title: Döndürme desc: Döndürücü açıldı! Döndürücü şekilleri saat yönüne 90 @@ -604,7 +597,7 @@ storyRewards: title: Boyama desc: "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 + birleştirin!

NOT: Renkleri daha kolay ayırt etmek için ayarlardan renk körü modunu kullanabilirsiniz!" reward_mixer: title: Renk Karıştırma @@ -618,10 +611,9 @@ storyRewards: üzerine kaynaştırılır! reward_splitter: 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!

+ + desc: Ayırıcıyı açtın! dengeleyicin + başka bir türü - Tek giriş alıp ikiye ayırır reward_tunnel: title: Tünel desc: Tünel açıldı - Artık eşyaları taşıma bantları ve yapılar @@ -633,17 +625,18 @@ storyRewards: seç ve türler arası geçiş yapmak için 'T' tuşuna bas! reward_miner_chainable: - 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! + title: Zincirleme Üretici + + desc: " zincirleme üreticiyiaçtın! bununla + kaynaklarını diğer çıkarıcılarla paylaşıp + daha verimli bir şekilde çıkartabilirsin!

not: Eskilerini + yenileri ile değiştirdim!" + reward_underground_belt_tier_2: 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! + desc: 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_cutter_quad: title: Çeyreğİnİ Kesme desc: Kesicinin yeni bir türünü açtın - Bu tür şekilleri iki @@ -654,14 +647,11 @@ storyRewards: gibi çalışır, fakat iki şekli birden boyayarak iki boya yerine sadece bir boya harcar! reward_storage: - 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: Ö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!) + title: Depo + desc: Depoyu açtınız! - Gönderdiğin eşyaları içinde biriktirir!

+ Öncelikli olarak sol tarafından eşyaları gönderir eğer sol taraf tıkanırsa sağ taraftan göndermeye başlar. + Bunu fazlalık eşyaları değerlendirmek için kullanabilirsin! + reward_blueprints: title: Taslaklar desc: Fabrikanın bölümlerini artık kopyalayıp @@ -672,82 +662,93 @@ storyRewards: (Az önce teslim ettiğin şekiller). no_reward: title: Sonrakİ Sevİye - desc: "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
Not: Şu anki fabrikalarını yok etmemeni öneririm + - Daha sonra Geliştirmeleri açmak için bütün hepsine ihtiyacın olacak!" + no_reward_freeplay: title: Sonrakİ Sevİye - desc: Tebrikler! Bu arada, yeni içerikler planlanıyor! - reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts!

- reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! - reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! - reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) - reward_display: - title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! - reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). - reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! - reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! - reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E." - reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + desc: Tebrikler! + reward_freeplay: + title: Özgür Mod + + desc: Başardın! Özgür modu açtın! Bu artık gelen şekillerin + rastgele oluşacağı anlamına geliyor!

+ Bundan sonra ana bölge belirli bir miktar eşya değil belirli bir miktar eşya geliş hızına + bağlı olarak level atlayacaksın, istenilen şekilleri otomatik olarak yapacak bir fabrika inşa etmeni + öneririm!

Ana bölgenin istediği şekil kablo katmanında sol taraftan sinyal olarak gönderiliyor, + yani sadece bu şekli analiz ederek üretecek tamen otomatik bir alet yapman yeterli. + reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Deneme Sürümünün Sonu + desc: Deneme sürümünün sonuna geldin! + reward_balancer: + title: Dengeleyici + + desc: Çok fonksiyonlu dengeleyeliyiciyi açtın! - daha büyük + fabrikalar yaratmak için eşyaları

birden çok bantlara ayırıp + birleştirmek için kullanılabilir! + reward_merger: + title: Tekil Birleştirici + desc: Birleştiriciyi açtın ! + dengeleyecinin bir türü - İki giriş alıp tek banta atar. + + reward_belt_reader: + title: Bant Okuyucu + desc: Bant okuyucu açıldı! Bu yapı taşıma bandındaki akış + hızını ölçmeyi sağlar.

Kabloları açana kadar bekle - o zaman + çok kullanışlı olacak. + reward_rotater_180: + title: Dödürücü (180 derece) + desc: 180 derece döndürücüyü açtınız! - Şekilleri + 180 derece döndürür (Süpriz! :D) + reward_display: + title: Ekran + desc: "Ekranda göstermek için bir sinyal bağla - Bu sinyal bir şekil, renk + veya ikili değer (1/0) olabilir" + reward_constant_signal: + title: Sabit Sinyal + desc: Şekil, renk veya ikili değer (1 / 0) olan sabit bir sinyal + gönderir. + + reward_logic_gates: + title: Mantık Kapıları + desc: Mantık kapıları açıldı! Çok heyecanlanmana gerek yok, ama + bu gerçekten havalı!

Bu kapılarla artık AND, OR, XOR veya + NOT işlemlerini hesaplatabilirsin.

Bonus olarak sana bir de + transistör verdim! + reward_virtual_processing: + title: Sanal İşleme + desc: Az önce bir sürü yen yapıya sahip oldun. Bu yapılar şekillerin + işlenmelerini sanal olarak denemeni sağlayacak!

+ Artık bir kesiciyi, döndürücüyü, kaynaştırıcıyı ve daha fazlasını + kablo katmanında deneyebilirsin! Bununla birlikte oyuna devam + edebilmek için 3 seçeneğin var:

- Merkez tarafından talep + edilen her türlü şekli üretecek otomatik bir makine + inşa et (Denemeni tavsiye ederim!).

- Kablolarla havalı + birşeyler inşa et.

- Oyuna normal bir şekilde devam + et.

Ne seçersen seç eğlenmeyi unutma! + reward_wires_painter_and_levers: + title: Kablolar ve Dörtlü Boyayıcı + desc: "Az önce Kablo Katmanını açtın: Normal oyunun bulunduğu + katmanın üzerinde ayrı bir katmandır ve bir sürü yeni özelliği + vardır!

Başlangıç olarak senin için Dörtlü + Boyayıcıyı açıyorum. - Kablo katmanında boyamak için + istediğin hatları bağla!

Kablo katmanına geçiş yapmak için + E tuşunu kullan." + reward_filter: + title: Eşya Filtresi + desc: Eşya filtresini açtın! Kablo katmanından gelen sinyalle + eşleşmelerine bağlı olarak eşyaları yukarıdaki yada aşağıdaki çıkışa + yönlendirir.

Ayrıca filtreyi tamamen açıp kapatmak için + ikili sinyal (1 / 0) kullanabilirsin. settings: title: Ayarlar categories: general: Genel userInterface: Kullanıcı Arayüzü advanced: Gelİşmİş - performance: Performance + performance: Performans versionBadges: dev: Geliştirme staging: Yükseltme @@ -812,16 +813,17 @@ settings: description: İpuçları ve eğitimleri açar. Ayrıca bazı arayüz elemanlarını oyunun daha kolay öğrenilebilmesi için gizler. 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. + title: Akıllı Tüneller + description: Aktif edildiği zaman, inşa edilen tüneller yol üzerindeki işe + yaramayan bantları otomatik olarak siler. Bu ayar aynı zamanda + tünellerin çekilerek inşa edilmesi ve aşırı uzağa yerleştirilen + tünel uçlarının silinmesini de sağlar. vignette: title: Gölgelendİrme description: Gölgelendirmeyi açar. Gölgelendirme ekranın köşelerini karartır ve yazıları daha kolay okuyabilmeinizi sağlar. autosaveInterval: - title: Otomatik Kayıt Sıklığı + title: Otomatİk Kayıt Sıklığı description: Oyunun hangi sıklıkta kaydedileceğini belirler. Ayrıca otomatik kayıt tamamen kapatılabilir. intervals: @@ -832,7 +834,7 @@ settings: twenty_minutes: 20 Dakika disabled: Devredışı compactBuildingInfo: - title: Derlİ Toplu Yapı Bilgileri + title: Derlİ Toplu Yapı Bİlgİlerİ description: 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: @@ -844,63 +846,60 @@ settings: description: Eğer renkleri seçemiyorsanız oyunu ayarlamak için çeşitli araç gereçleri aktif eder. rotationByBuilding: - title: Rotation by building type + title: Yapı Türüne Göre Döndür description: 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. movementSpeed: - title: Movement speed - description: Changes how fast the view moves when using the keyboard or moving - the mouse to the screen borders. + title: Hareket Hızı + description: Haritanın klavye veya fare ile gezinme hızını değiştirir. speeds: - super_slow: Super slow - slow: Slow - regular: Regular - fast: Fast - super_fast: Super Fast - extremely_fast: Extremely Fast + super_slow: Çok Yavaş + slow: Yavaş + regular: Normal + fast: Hızlı + super_fast: Çok Hızlı + extremely_fast: Aşırı Hızlı soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Ses Ayarı + description: Ses efektlerinin seviyesini ayarlar musicVolume: - title: Music Volume - description: Set the volume for music + title: Müzİk Ayarı + description: Müzik seviyesini ayarlar lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Düşük Kalİte Harİta Kaynakları + description: Oyun performansını artırmak için haritada görünen kaynakların çizim + kalitesinin sadeleştirir. Kaynaklar daha açık görüneceğinde bu + özelliği bir dene! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Harİta Çİzgİlerİnİ Gizle + description: Harita çizgilerini gizlemek oyun performansına yardımcı olabilir. + Aynı zamanda oyunun daha açık görünmesini sağlar! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Sağ Tık İnşa İptalİ + description: Varsayılan olarak açık. Özellik açıksa, inşa modundayken sağ yık + yapıldığında inşa modundan çıkar. Eğer özellik kapalıysa, inşa + modundan çıkmadan var olan yapıları sağ tık ile silebilirsiniz. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Düşük Kalİte Görüntü (Çirkin) + description: Performans için düşük kalite görüntü kullanır. Bu oyunun daha + çirkin görünmesine sebep olur! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Harİta Alan Sınırlarını Göster + description: Oyun 16'ya 16 alanlardan oluşur. Bu seçenek aktif olduğunda alan + sınırları görüntülenir. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Kaynak Üzerinde Üretİcİ Seç + description: Varsayılan olarak açık. Eğer pipet bir kaynağın üzerinde + kullanılırsa, üreteç yapısı inşa için seçilir. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Sadeleştİrİlmİş Bantlar (Çirkin) + description: Taşıma bandı üzerindeki eşyalar fare imleci üzerinde değilse görüntülenmez. + Eğer gerçekten performansa + ihtiyacınız yoksa bu ayarla oynamanız tavsiye edilmez. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Fare Kaydırarak Hareket Etme + description: Fareyi ekranın köşelerine getirerek hareket ettirmeyi sağlar. rangeSliderPercentage: % keybindings: title: Tuş Atamaları @@ -960,35 +959,35 @@ keybindings: menuClose: Menüyü Kapat switchLayers: Katman değiştir wire: Enerji Kablosu - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + balancer: Dengeleyici + storage: Depo + constant_signal: Sabit Sinyal + logic_gate: Mantık Kapısı + lever: Anahtar (normal) + filter: Filtre + wire_tunnel: Kablo Köprüsü + display: Ekran + reader: Bant Okuyucu + virtual_processor: Sanal Kesici transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Şekil Analizcisi + comparator: Karşılaştırıcı + item_producer: Eşya Üretici (Kum Kutusu) + copyWireValue: "Kablo: Fare altındaki değeri kopyala" about: title: Oyun Hakkında body: >- - This game is open source and developed by Tobias Springer - (this is me).

+ Bu oyun açık kaynaklıdır ve Tobias Springer (bu benim) tarafından + geliştirilmektedir.

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

+ Eğer katkıda bulunmak istiyorsanız, shapez.io Github sayfasına göz atın.

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

+ Bu oyunu yapmak, oyunlarımın etrafındaki büyük Discord topluluğu olmasaydı mümkün olmayacaktı - Gerçekten Discord sunucusuna katılmalısın!

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

+ Oyun müzikleri Peppsen tarafından yapıldı - Harika biri.

- Finally, huge thanks to my best friend Niklas - Without our factorio sessions this game would never have existed. + Son olarak, en iyi arkadaşım Niklas'a büyük teşekkürler. Factorio oyunlarımız olmasaydı bu oyun hiç var olmamış olacaktı. changelog: title: Değİşİklİk Günlüğü demo: @@ -1000,63 +999,76 @@ demo: exportingBase: Bütün merkezi resim olarak dışa aktarma settingNotAvailable: Demo sürümünde mevcut değil tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Merkez, sadece mevcut şekli değil, her türlü girişi kabul eder! + - Fabrikalarınızın modüler olduğundan emin olun - karşılığını alırsınız! + - Merkeze çok yakın inşa etmeyin, yoksa büyük bir karmaşa yaratır! + - Kaynaştırma çalışmazsa, girişleri değiştirmeyi deneyin. + - R'ye basarak bant planlayıcı yönünü değiştirebilirsiniz. + - CTRL tuşunun basılı tutulması bantların otomatik yönlendirme + olmadan sürüklenmesine izin verir. + - Tüm yükseltmeler aynı seviyede olduğu sürece oranlar aynı kalır. + - Seri işlem, paralelden daha verimlidir. + - Oyunun ilerleyen bölümlerinde daha fazla yapı çeşidinin kilidini + açacaksınız! + - Farklı yapı çeşitleri arasında geçiş yapmak için T'yi + kullanabilirsiniz. + - Simetri işin püf noktasıdır! + - Farklı tünel çeşitlerini içiçe kullanabilirsiniz. + - Düzenli fabrikalar kurmaya çalışın - karşılığını alırsınız! + - Boyayıcının, T ile seçebileceğiniz aynaya göre ters bir çeşidi + vardır. + - Doğru yapı oranlarına sahip olmak verimliliği en üst düzeye çıkaracaktır. + - En üst seviyeye geliştirilmiş 5 üretici tek bir bandı dolduracaktır. + - Tünelleri unutma! + - Tam verimlilik için öğeleri eşit olarak bölmenize gerek yoktur. + - SHIFT tuşunu basılı tutmak bant planlayıcıyı etkinleştirir ve uzun + taşıma hatlarını kolayca yerleştirmenize izin verir. + - Kesiciler, kendi yönlerinden bağımsız olarak daima dikey olarak keserler. + - Beyaz renk elde etmek için üç rengi birbiriyle karıştırın. + - Depolama yapısı ilk çıktıya öncelik verir. + - Tekrarlanabilir tasarımlar oluşturmak için zaman ayırın - buna değer! + - CTRL tuşunu basılı tutmak, birden çok yapı yerleştirmeye izin verir. + - Yerleştirilen bantların yönünü ters çevirmek için ALT tuşunu basılı + tutabilirsiniz. + - Verimlilik işin püf noktasıdır! + - Merkezden daha uzaktaki şekil kaynakları daha karmaşıktır. + - Makinelerin sınırlı bir hızı vardır, bunları maksimum verimlilik için + bölün. + - Verimliliğinizi en üst düzeye çıkarmak için dengeleyiciler kullanın. + - Organizasyon önemlidir. Bantları çok fazla birbirlerine dik geçirmemeye + çalışın. + - Yapacaklarınızı önceden planlayın, yoksa büyük bir kaos olur! + - Eski fabrikalarınızı kaldırmayın! Yükseltmelerin kilidini açmak için + onlara ihtiyacınız olacak. + - Yardım aramadan önce 20. seviyeyi kendi başına geçmeyi dene! + - İşleri karıştırmayın, basit kalmaya çalışın. Sonrasında çok + ilerleyeceksiniz. + - Fabrikaları oyunun ilerleyen bölümlerinde yeniden kullanmanız gerekebilir. + Fabrikalarınızı yeniden kullanılabilecek şekilde planlayın. + - Bazen gerekli bir şekli oluşturmadan, haritada kaynak olarak + bulabilirsiniz. + - Tam yel değirmenleri / fırıldaklar asla doğal olarak ortaya çıkamaz. + - Maksimum verimlilik için şekillerinizi kesmeden önce renklendirin. + - Modülleri ile uzay yalnızca bir algıdır; ölümlü insanlar için bir endişe + kaynağı. + - Ayrı bir taslak fabrikası yapın. Modüller için önemlidirler. + - Renk karıştırıcısına daha yakından bakın, sorularınız cevaplanacaktır. + - Bir alan seçmek için CTRL tuşuna basılı olarak tıklayın. + - Merkeze çok yakın inşa etmek sonraki projelerin önüne geçebilir. + - Geliştirme listesindeki her şeklin yanındaki iğne simgesi, onu ekrana + sabitler. + - Beyaz yapmak için tüm ana renkleri karıştırın! + - Sonsuz bir haritanız var, fabrikanızı sıkıştırmayın, genişletin! + - Ayrıca Factorio'yu deneyin! Bu benim en sevdiğim oyun. + - Dörtlü kesici, sağ üstten başlayarak saat yönünde keser! + - Kayıtlı oyunlarınızı ana menüden indirebilirsiniz! + - Bu oyunda kullanışlı birçok tuş bağlantısı var! Ayarlar sayfasını kontrol + ettiğinizden emin olun. + - Bu oyunun birçok ayarı var, kontrol ettiğinizden emin olun! + - Merkezin yer imi, yönünü belirtmek için küçük bir pusulaya sahiptir! + - Bantları temizlemek için onları kesin ve ardından aynı yere yapıştırın. + - FPS'nizi (oyun kare hızı) ve Tik Oranınızı (oyun hızı) göstermek için F4'e + basın. + - Farenizin ve kameranızın sınırlarını göstermek için F4'e iki kez basın. + - Sol tarafta sabitlenmiş bir şekle tıklayarak sabitlemesini + kaldırabilirsiniz. diff --git a/translations/base-uk.yaml b/translations/base-uk.yaml index a7166c1a..96c5694a 100644 --- a/translations/base-uk.yaml +++ b/translations/base-uk.yaml @@ -1,59 +1,51 @@ steamPage: shortText: shapez.io — це гра про будування фабрик для автоматизації створення та обробки все більш складних форм на нескінченно розширюваній мапі. - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] - - shapez.io — це гра про будування фабрик для автоматизації створення та обробки все більш складних форм на нескінченно розширюваній мапі. Після доставки потрібних форм ви просунетеся в грі та розблокуєте поліпшення, щоб пришвидшити свою фабрику. - - Коли попит на форми зростає, вам доведеться збільшити масштаб своєї фабрики, щоб задовольнити попит. Однак не забувайте про ресурси, вам доведеться розширюватися на [b]нескінченній мапі[/b]! - - Незабаром ви зможете змішути кольори і з їхньою допомогою фарбувати свої форми. Поєднуйте червоний, зелений та синій ресурси кольорів, щоб виготовити різноманітні кольори і пофарувати форми як вам заманеться. - - У цій грі є 18 передових рівнів, які повинні утримувати вас годинами. Але не турбуйтеся, я постійно додаю новий вміст — ще багато чого заплановано! - - Купуючи гру, ви отримуєте доступ до окремої версії, яка має додаткові функції, а також ви отримаєте доступ до нещодавно розроблених функцій. - - [img]{STEAM_APP_IMAGE}/extras/header_standalone_advantages.png[/img] - - [list] - [*] Темний режим - [*] Необмежені позначки - [*] Необмежені збереження - [*] Додаткові налаштування - [*] Незабаром: дроти й енергія! Гадаю, оновлення вийде у кінці липня 2020 року. - [*] Незабаром: більше рівнів. - [*] Дозволяє мені розвиватися далі shapez.io ❤️ - [/list] - - [img]{STEAM_APP_IMAGE}/extras/header_future_updates.png[/img] - - Я оновлюю гру надпрочуд часто і намагаюся випускати оновлення щотижня! - - [list] - [*] Різноманітні мапи та випробування (наприклад, мапи з перешкодами) - [*] Пазли (надайте потрібну форму з обмеженою площею/набором будівель) - [*] Режим історії, де будівлі матимуть вартість - [*] Генератор мап, який можна налаштувати (ресурс/розмір/щільність форми, зерно та багато іншого) - [*] Додаткові типи форм - [*] Поліпшення продуктивності (Гра вже працює досить добре!) - [*] Та багато чого іншого! - [/list] - - [img]{STEAM_APP_IMAGE}/extras/header_open_source.png[/img] - - Будь-хто може зробити внесок, я активно беру участь у спільноті і намагаюся оцінити всі пропозиції і відгуки, та взяти до уваги, де це можливо. Не забудьте перевірити мою дошку Trello заради повної дорожньої карти! - - [img]{STEAM_APP_IMAGE}/extras/header_links.png[/img] - - [list] - [*] [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] discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. + + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + + Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! + title_advantages: Standalone Advantages + advantages: + - 12 New Level for a total of 26 levels + - 18 New Buildings for a fully automated factory! + - 20 Upgrade Tiers for many hours of fun! + - Wires Update for an entirely new dimension! + - Dark Mode! + - Unlimited Savegames + - Unlimited Markers + - Support me! ❤️ + title_future: Planned Content + planned: + - Blueprint Library (Standalone Exclusive) + - Steam Achievements + - Puzzle Mode + - Minimap + - Mods + - Sandbox mode + - ... and a lot more! + title_open_source: This game is open source! + title_links: Links + links: + discord: Official Discord + roadmap: Roadmap + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Help translate + text_open_source: >- + 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! global: loading: Завантаження error: Помилка @@ -129,7 +121,9 @@ dialogs: text: Не вдалося завантажити вашу збережену гру. confirmSavegameDelete: title: Підтвердження - text: Ви справді хочете видалити гру? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: Виникла помилка при видаленні text: Не вдалося видалити збережену гру. @@ -190,9 +184,8 @@ dialogs: createMarker: title: Нова позначка titleEdit: Редагувати позначку - desc: Дайте їй змістовну назву. Ви також можете додати короткий - ключ форми, що можно згенерувати тут. + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) markerDemoLimit: desc: Ви можете створити тільки 2 позначки в демоверсії. Отримайте окрему версії для створення необмеженної кількості позначок. @@ -475,7 +468,9 @@ buildings: верхнього. quad: name: Фарбувач (чотири) - description: Дозволяє вам фарбувати кожну четвертину форми у різний колір. + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! trash: default: name: Смітник @@ -593,11 +588,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Різання фігур - desc: Ви тільки-но розблокували різця. Він розрізає фігури - наполовину з вершини до низу незалежно від його - орієнтації!

Обов’язково позбудьтесь відходів або він - зупиниться. Для цього є смітник, який знищує все, що - входить в нього. + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: Обертання desc: Обертач розблоковано! Він повертає форми за годинниковою @@ -611,8 +607,8 @@ storyRewards: контрастності в налаштуваннях! reward_mixer: title: Змішування кольорів - desc: Змішування кольорів розблоковано. Об’єднуйте два кольори - у цій будівлі. + desc: The mixer has been unlocked - It mixes two colors using + additive blending! reward_stacker: title: Поєднувач форм desc: Тепер ви можете поєднувати фігури з поєднувачем форм! @@ -621,10 +617,9 @@ storyRewards: з правого входу, застрягне на горі лівого входу. reward_splitter: title: Розподілювач (з’єднувач) - desc: Багатофункціональний розподілювач було розблоковано. Його - можна використовувати для створення великих фабрик, - розділяючи та об’єднуючи предмети на кілька - стрічок!

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: Тунель desc: Тунель розблоковано. Ви можете створювати тунелі для @@ -637,9 +632,10 @@ storyRewards: оберіть потрібний! reward_miner_chainable: title: Екстрактор (ланцюг.) - desc: Ви розблокували ланцюговий екстрактор! Він може - пересилати свої ресурси іншим екстракторам, щоб ви - могли ефективніше видобувати ресурси! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: Тунель II desc: Ви розблокували новий варіант тунеля. Він має @@ -656,13 +652,18 @@ storyRewards: одночасно, споживаючи лише один колір замість двох! reward_storage: title: Storage Buffer - desc: Ви розблокували інший варіант trash - It allows you to - store items up to a given capacity! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: Пісочниця - desc: Ви зробили це! Ви розблокували вільний режим! Це означає, - що форми тут створюватимуться випадкові! Не хвилюйтеся, більше - контенту планується для окремого режиму! + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: Креслення desc: Ви вже можете копіювати і вставляти частини вашої @@ -673,9 +674,9 @@ storyRewards: щойно доставили). no_reward: title: Наступний рівень - desc: Цей рівень не дав нагороди, але в наступному... щось буде.

До - речі, краще не руйнуйте свою поточну фабрику. Вам знадобляться всі - ті форми пізніше, щоб розблокувати поліпшення! + desc: "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: Наступний рівень desc: Вітаємо! До речі, більше контенту планується в окремій версії! @@ -700,8 +701,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires @@ -954,7 +957,7 @@ keybindings: lockBeltDirection: Увімкнути планувальник конвеєрних стрічок switchDirectionLockSide: "Planner: Змінити сторону" massSelectStart: Утримуйте і перетягуйте, щоб розпочати - massSelectSelectMultiple: null + massSelectSelectMultiple: Select multiple areas massSelectCopy: Копіювати ділянку massSelectCut: Вирізати ділянку placementDisableAutoOrientation: Вимкнути автоматичну орієнтацію diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index bae280d0..73933872 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -1,62 +1,46 @@ steamPage: shortText: shapez.io 是一款在无边际的地图上建造工厂、自动化生产与组合愈加复杂的图形的游戏。 - 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. - - 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]! - - 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! - - 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] - - [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 ❤️ - [/list] - - [b]Future Updates[/b] - - 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] - - [b]This game is 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] - - [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] - [/list] - discordLinkShort: Official Discord + discordLinkShort: 官方 Discord 服务器 + intro: |- + Shapez.io 是一个休闲游戏,在其中,您将建造工厂以生产各种各样的几何图形。 + 随着等级提升,您需要生产的图形将会越来越复杂,您需要在无尽的地图中不断的扩建您的工厂。 + 如果这些还不够的话,您的生产目标是指数性增长的 - 您需要持续的增大工厂的规模! + 虽然您刚开始只需要生产图形,但您之后还可以给这些图形上色 - 您需要开采并混合颜料! + 您可以在 Steam 游戏商城购买此游戏的完整版, 但您可以先游玩试玩版并体验游戏! + title_advantages: 完整版内容 + advantages: + - 12 个全新关卡 总共 26 个不同关卡 + - 18 个全新建筑 用于建造全自动工厂! + - 20 个等级升级 不停的愉快游玩! + - 导线更新包 解锁更多可能 + - 暗色模式! + - 无限数量存档 + - 无限数量地图标记 + - 支持作者! ❤️ + title_future: 预计更新 + planned: + - 建筑蓝图库 + - Steam 成就 + - 解密模式 + - 小地图 + - 模组 + - 沙盒模式 + - ... 以及更多! + title_open_source: 这个游戏是开源的! + title_links: 链接 + links: + discord: 官方 Discord 服务器 + roadmap: Roadmap + subreddit: Subreddit + source_code: 源代码 (GitHub) + translate: 帮助汉化(翻译)组! + text_open_source: |- + 任何人都可以对这个游戏做出贡献,我会活跃在游戏社区中并 尽最大可能积极参考大家对这个游戏的的全部建议和反馈。 + 请关注我的 trello board 以获取 the full roadmap! global: loading: 加载中 error: 错误 - thousandsDivider: "" + thousandsDivider: "," decimalSeparator: . suffix: thousands: K @@ -75,7 +59,7 @@ global: xDaysAgo: 天前 secondsShort: 秒 minutesAndSecondsShort: 秒 - hoursAndMinutesShort: 小时 秒 + hoursAndMinutesShort: 秒 xMinutes: 分钟 keys: tab: TAB @@ -85,8 +69,8 @@ global: shift: SHIFT space: 空格 demoBanners: - title: 演示版 - intro: 获取独立版以解锁所有功能! + title: 试玩版 + intro: 获取独立版以解锁所有游戏内容! mainMenu: play: 开始游戏 changelog: 更新日志 @@ -101,7 +85,7 @@ mainMenu: newGame: 新游戏 madeBy: 作者: subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: 未命名 dialogs: buttons: ok: 确认 @@ -126,7 +110,9 @@ dialogs: text: 未能导入你的存档: confirmSavegameDelete: title: 确认删除 - text: 你确定要删除这个存档吗? + text: Are you sure you want to delete the following game?

+ '' at level

This can not be + undone! savegameDeletionError: title: 删除错误 text: 未能删除你的存档 @@ -143,11 +129,11 @@ dialogs: title: 重置所有按键 desc: 成功重置所有按键! featureRestriction: - title: 演示版 - desc: 你尝试使用了功能。该功能在演示版中不可用。请考虑购买独立版以获得更好的体验。 + title: 试玩版 + desc: 你尝试使用了功能。该功能在试玩版中不可用。请考虑购买独立版以获得更好的体验。 oneSavegameLimit: title: 存档数量限制 - desc: 演示版中只能保存一份存档。请删除旧存档或者获取独立版! + desc: 试玩版中只能保存一份存档。请删除旧存档或者获取独立版! updateSummary: title: 更新啦! desc: "以下为自上次游戏以来更新的内容:" @@ -162,17 +148,18 @@ dialogs: desc: 你还没有解锁蓝图功能!完成更多的关卡来解锁蓝图。 keybindingsIntroduction: title: 实用按键 - desc: "这个游戏有很多能帮助搭建工厂的使用按键。 以下是其中的一些,记得在按键设置中查看其他的!

+ desc: + "这个游戏有很多能帮助搭建工厂的使用按键。 以下是其中的一些,记得在按键设置中查看其他的!

CTRL + 拖动:选择区域以复制或删除。
SHIFT: 按住以放置多个。
ALT: 反向放置传送带。
" createMarker: title: 创建地图标记 - desc: 给地图标记起一个的名字。你可以在名字中加入一个短代码以加入图形。(你可以在这里生成短代码。) - titleEdit: Edit Marker + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) + titleEdit: 编辑地图标记 markerDemoLimit: - desc: 在演示版中你只能创建两个地图标记。请获取独立版以创建更多标记。 + desc: 在试玩版中你只能创建两个地图标记。请获取独立版以创建更多标记。 massCutConfirm: title: 确认剪切 desc: 你将要剪切很多建筑,准确来说有幢! 你确定要这么做吗? @@ -188,13 +175,11 @@ dialogs: descShortKey: ... or enter the short key of a shape (Which you can generate here) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: 重命名存档 + desc: 您可以在此重命名存档。 entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: 性能警告 + desc: 您有非常多建筑,善意的提醒您,这个游戏无法处理过多的建筑 - 尝试将您的工厂压缩! ingame: keybindingsOverlay: moveMap: 移动地图 @@ -251,16 +236,16 @@ ingame: - 八 - 九 - 十 - - XI - - XII - - XIII - - XIV - - XV - - XVI - - XVII - - XVIII - - XIX - - XX + - 十一 + - 十二 + - 十三 + - 十四 + - 十五 + - 十六 + - 十七 + - 十八 + - 十九 + - 二十 maximumLevel: 最高级(倍效率) statistics: title: 统计信息 @@ -276,9 +261,9 @@ ingame: description: 显示图形送达基地并交付的速度。 noShapesProduced: 你还没有生产任何图形。 shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / 秒 + minute: / 分 + hour: / 时 settingsMenu: playtime: 游戏时间 buildingsPlaced: 建筑数量 @@ -304,7 +289,8 @@ ingame: hints: 1_1_extractor: 在圆形矿脉上放一个开采机来获取圆形! 1_2_conveyor: 用传送带将你的开采机连接到基地上!

提示:用你的鼠标按下并拖动传送带! - 1_3_expand: 这不是一个挂机游戏!建造更多的开采机和传送带来更快地完成目标。

提示:按住 + 1_3_expand: + 这不是一个挂机游戏!建造更多的开采机和传送带来更快地完成目标。

提示:按住 SHIFT 键来放置多个开采机,用 R 键旋转它们。 colors: red: 红色 @@ -321,41 +307,41 @@ ingame: empty: 空 copyKey: 复制短代码 connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 个开采机 + n_miners: 个开采机 + limited_items: 限制在 watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: 试玩版 + desc: 点击这里 了解完整版内容 + get_on_steam: 在 steam 商城购买 standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: 购买完整版! + no_thanks: 不需要,谢谢 points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 个全新关卡! + desc: 总共 26 个不同关卡! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 个全新建筑 + desc: 用于建造全自动工厂! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: 无限数量存档 + desc: 存档功能可以尽情使用 upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 个等级升级 + desc: 试玩版只有 5 个等级! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: 无限数量地图标记 + desc: 再也不会找不到自己的工厂了 wires: - title: Wires - desc: An entirely new dimension! + title: 导线更新包 + desc: 解锁更多可能! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: 暗色模式 + desc: 优雅且护眼的配色 support: - title: Support me - desc: I develop it in my spare time! + title: 支持作者 + desc: 我使用闲暇时间开发游戏! shopUpgrades: belt: name: 传送带、平衡机、隧道 @@ -403,8 +389,8 @@ buildings: name: 旋转机(逆时针) description: 将图形逆时针旋转90度。 rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: 旋转机 (180度) + description: 将图形旋转180度。 stacker: default: name: 堆叠机 @@ -422,9 +408,11 @@ buildings: description: 同时为两个输入的图形上色,每次上色只消耗一份颜色。 quad: name: 上色机(四向) - description: 为图形的四个角涂上不同的颜色。 + description: Allows you to color each quadrant of the shape individually. Only + slots with a truthy signal on the wires layer + will be painted! mirrored: - name: 上色机 + name: 上色机 (镜像) description: 将整个图形涂上输入的颜色。 trash: default: @@ -434,15 +422,14 @@ buildings: deliver: 交付 toUnlock: 来解锁 levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: 试玩版结束 wire: default: - name: Energy Wire - description: Allows you to transport energy. + name: 能量导线 + description: 用于传输能量。 second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: 导线 + description: 传输信号,信号可以是物品,颜色或者布尔值。 不同颜色的导线不会互相连接。 balancer: default: name: Balancer @@ -556,7 +543,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: 切割图形 - desc: 恭喜!你解锁了切割机。切割机会把图形从上到下切成两半。注意切割的方向和切割机的朝向无关。

记得把不需要的部分处理掉,否则这个这个建筑会停止工作。为此我给你准备了垃圾桶,它会把所有放进去的物品销毁掉。 + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: 顺时针旋转 desc: 恭喜!你解锁了旋转机。它会顺时针旋转输入的图形90度。 @@ -572,7 +564,9 @@ storyRewards: desc: 恭喜!你解锁了堆叠机。堆叠机会尝试把两个输入的图形拼贴在一起。如果有重叠的部分,右边的输入会被堆叠在左边的输入上方! reward_splitter: title: 分离与合并 - desc: 恭喜!你解锁了平衡机。在大型工厂中,平衡机负责合并或分离多个传送带上的物品。

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: 隧道 desc: 恭喜!你解锁了隧道。你现在可以从其他传送带或建筑底下运送物品了! @@ -581,7 +575,10 @@ storyRewards: desc: 恭喜!你解锁了旋转机逆时针变体。这个变体可以逆时针旋转图形。选择旋转机然后按"T"键来选取这个变体。 reward_miner_chainable: title: 链式开采机 - desc: 你解锁了链式开采机! 它能够把资源传递给其他开采机,让你可以更高效率的开采资源! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: 二级隧道 desc: 恭喜!你解锁了二级隧道。这是隧道的一个变体。二级隧道有更长的传输距离。你还可以混用不同的隧道变体! @@ -593,10 +590,18 @@ storyRewards: desc: 恭喜!你解锁了上色机双倍变体。它可以同时为两个图形上色,每次只消耗一份颜色! reward_storage: title: 仓库 - desc: 恭喜!你解锁了垃圾桶的变体。他可以存储一定数量的物品! + desc: You have unlocked the storage building - It allows you to + store items up to a given capacity!

It priorities the left + output, so you can also use it as an overflow gate! reward_freeplay: title: 自由模式 - desc: 恭喜你!你解锁了自由模式。现在图形将会是随机生成的!(不用担心,我计划在独立版本中加入更多内容!) + desc: You did it! You unlocked the free-play mode! This means + that shapes are now randomly generated!

+ Since the hub will require a throughput from now + on, I highly recommend to build a machine which automatically + delivers the requested shape!

The HUB outputs the requested + shape on the wires layer, so all you have to do is to analyze it and + automatically configure your factory based on that. reward_blueprints: title: 蓝图 desc: 你现在可以复制粘贴你的工厂的一部分了!按住 CTRL @@ -629,8 +634,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires @@ -905,7 +912,7 @@ demo: oneGameLimit: 最多一个存档 customizeKeybindings: 按键设置 exportingBase: 导出工厂截图 - settingNotAvailable: 在演示版中不可用。 + settingNotAvailable: 在试玩版中不可用。 tips: - The hub accepts input of any kind, not just the current shape! - Make sure your factories are modular - it will pay out! diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index fc81a84e..4549d539 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -1,59 +1,43 @@ steamPage: shortText: shapez.io 是一款在一個無邊際的地圖上建造工廠、自動化生產與組合愈加複雜圖形的遊戲。 - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] shapez.io - 是一款在一個無邊無際的地圖上建造工廠、將生產與組合愈加複雜圖形自動化的遊戲。 - - 在指定圖形送達基地後,你會晉級且解鎖能加速生產的新功能。 - - 當指定圖形的數量增加時,你必須擴充你的工廠才能應付訂單 -- 但別忘記資源,你需要在[b]無邊無際的地圖[/b]上擴充。 - - 不久後你將需要混色並為圖形上色 -- 混和紅、綠、藍以創造新顏色再將圖形上色來達成目標。 - - 遊戲目前有十八關(應該也夠你忙一陣子了),而我還有很多計畫,持續更新中! - - 購買獨立版的你即擁有額外內容,也會優先接觸新開發內容。 - - [b]獨立版的額外內容[/b] - - [list] - [*] 深色主題 - [*] 地圖標記數量無限制 - [*] 存檔數量無限制 - [*] 更多設定 - [*] 即將到來: 電線與能源! 目標在2020年七月底(左右)問世。 - [*] 即將到來: 更多新關卡 - [*] 幫助我繼續開發 shapez.io ❤️ - [/list] - - [b]未來更新[/b] - - 我時常更新遊戲,希望能周更! - - [list] - [*] 不同的地圖與挑戰(像是有障礙物的地圖) - [*] 迷宮(在地圖受限制或只能使用特定建築的情況下送達圖形) - [*] 一個蓋建築物需要成本的故事模式 - [*] 可調控的地圖生成器(資源/圖形/密度可調整、隨機生成種子等等) - [*] 更多圖形種類 - [*] 遊戲效能提升(即使目前已經不錯了) - [*] 還有更多更多! - [/list] - - [b]這個遊戲是開源的![/b] - - 任何人都可以貢獻,我在社群裡很活耀、嘗試回復所有的建議並盡量參考大家的意見。 欲知詳情,別忘了造訪我的 Trello 喔! - - [b]連結[/b] - - [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] - [/list] - discordLinkShort: Official Discord + discordLinkShort: 官方 Discord 伺服器 + intro: |- + 你喜歡自動化生產的遊戲類型嗎?那你來對地方了! + Shapez.io 是一款建造工廠、自動化生產與組合圖形的休閒遊戲。 + 每當玩家不斷晉級,形狀會越來越複雜,你的工廠將在一個無邊際的地圖上不斷擴展。 + 除此之外,你也必須不斷累加你的生產量來達到升級的需求,達成目標的方法無他,只有不段地擴張! + 遊戲初期只需要組合特定圖形,接著玩家會被要求幫圖形上色,有時甚至需要先混色才能達到目標。 + 玩家可以在 Steam 購買本游戲的單機版,如果還在猶豫,也可以到 shapez.io 先免費試玩再決定! + title_advantages: 單機版優點 + advantages: + - 12 個新關卡 (總共有26關) + - 18 個新建築 幫助玩家自動化整個工廠! + - 20 個升級 讓遊玩時間更久! + - 電路更新 帶給玩家新次元體驗! + - 深色模式! + - 無限存檔 + - 無限標記 + - 支持我! ❤️ + title_future: Planned Content + planned: + - 藍圖圖庫(單機版獨有) + - Steam 成就 + - 拼圖模式 + - 迷你地圖 + - 模組 + - 沙盒模式 + - ... 還有更多! + title_open_source: 本遊戲已開源! + title_links: 連結 + links: + discord: 官方 Discord 伺服器 + roadmap: Roadmap + subreddit: Reddit + source_code: Source code (GitHub) + translate: 幫助我們翻譯! + text_open_source: |- + 任何人都可以幫助我開發遊戲或提供建議,我很活躍於各個社群媒體,也會讀所有的建議與回饋、並嘗試改善。 + 記得查看我的 trello board 以了解我的完整計畫! global: loading: 加載中 error: 錯誤 @@ -87,13 +71,13 @@ global: space: 空格 demoBanners: title: 演示版 - intro: 獲取獨立版以解鎖所有功能! + intro: 獲取單機版以解鎖所有功能! mainMenu: play: 開始遊戲 changelog: 更新日誌 importSavegame: 導入 openSourceHint: 本遊戲已開源! - discordLink: 官方Discord伺服器 + discordLink: 官方 Discord 伺服器 helpTranslate: 幫助我們翻譯! browserWarning: 很抱歉, 本遊戲在當前瀏覽器上可能運行緩慢! 使用chrome或者獲取獨立版以得到更好的體驗。 savegameLevel: Level @@ -102,7 +86,7 @@ mainMenu: newGame: 新遊戲 madeBy: 作者: subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: 未命名 dialogs: buttons: ok: 確認 @@ -127,7 +111,9 @@ dialogs: text: 存檔載入失敗: confirmSavegameDelete: title: 確認刪除 - text: 你確定要刪除這存檔嗎? + text: 你確定要刪除這個存檔?

+ '' 在第

級 + 不能反悔喔! savegameDeletionError: title: 刪除錯誤 text: 存檔刪除失敗 @@ -163,17 +149,18 @@ dialogs: desc: 你還沒有解鎖藍圖功能!完成更多的關卡來解鎖藍圖。 keybindingsIntroduction: title: 實用按鍵 - desc: "這個遊戲有很多能幫助搭建工廠的使用按鍵。 以下是其中的一些,記得在按鍵設置中查看其他的!

+ desc: + "這個遊戲有很多能幫助搭建工廠的使用按鍵。 以下是其中的一些,記得在按鍵設置中查看其他的!

CTRL + 拖動:選擇區域以復製或刪除。
SHIFT: 按住以放置多個。
ALT: 反向放置傳送帶。
" createMarker: title: 創建標記 - desc: 給地圖標記起一個的名字。你可以在名字中加入一個短代碼以加入圖形。 (你可以在這裡生成短代碼。) + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) titleEdit: Edit Marker markerDemoLimit: - desc: 在演示版中你只能創建兩個地圖標記。請獲取獨立版以創建更多標記。 + desc: 在演示版中你只能創建兩個地圖標記。請獲取單機版以創建更多標記。 massCutConfirm: title: 確認剪下 desc: 你將要剪下很多建築,準確來說有幢!你確定要這麼做嗎? @@ -181,21 +168,19 @@ dialogs: title: 工廠截圖 desc: 你將要匯出你的工廠的截圖。如果你的基地很大,截圖過程將會很慢,甚至有可能導致遊戲當掉! massCutInsufficientConfirm: - title: Confirm cut - desc: You can not afford to paste this area! Are you sure you want to cut it? + title: 確認剪下 + desc: 你的複製圖形不夠貼上!你確定要剪下嗎? editSignal: title: Set Signal descItems: "Choose a pre-defined item:" descShortKey: ... or enter the short key of a shape (Which you can generate here) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: 重新命名存檔 + desc: 你可以在這裡重新命名存檔 entityWarning: - title: Performance Warning - desc: You have placed a lot of buildings, this is just a friendly reminder that - the game can not handle an endless count of buildings - So try to - keep your factories compact! + title: 效能警告 + desc: 你放置太多建築了,遊戲沒有辦法支撐無限數量的建築,善意提醒:最好降低工廠佔用的空間! ingame: keybindingsOverlay: moveMap: 移動 @@ -216,7 +201,7 @@ ingame: copySelection: 複製選取 clearSelection: 清空選取 pipette: 吸附 - switchLayers: Switch layers + switchLayers: 切換層 buildingPlacement: cycleBuildingVariants: 按鍵以選擇建築變體. hotkeyLabel: "快捷鍵: " @@ -229,14 +214,14 @@ ingame: itemsPerSecondDouble: (2倍) tiles: 格 levelCompleteNotification: - levelTitle: Level + levelTitle: 第級 completed: 完成 unlockText: 解鎖! buttonNextLevel: 下一關 notifications: newUpgrade: 有新的更新啦! gameSaved: 遊戲已保存。 - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: 已完成第級! shop: title: 建築升級 buttonUnlock: 升級 @@ -252,16 +237,16 @@ ingame: - 捌 - 玖 - 拾 - - XI - - XII - - XIII - - XIV - - XV - - XVI - - XVII - - XVIII - - XIX - - XX + - 拾壹 + - 拾貳 + - 拾叁 + - 拾肆 + - 拾伍 + - 拾陸 + - 拾柒 + - 拾捌 + - 拾玖 + - 貳拾 maximumLevel: 最高級(倍效率) statistics: title: 統計資訊 @@ -277,9 +262,9 @@ ingame: description: 顯示圖形送達基地的速度。 noShapesProduced: 你還沒有生產任何圖形。 shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / 秒 + minute: / 分 + hour: / 時 settingsMenu: playtime: 遊戲時間 buildingsPlaced: 建築數量 @@ -297,8 +282,8 @@ ingame: waypoints: waypoints: 地圖標記 hub: 基地 - description: 滑鼠左鍵按標記跳轉到它,按右鍵將其刪除。
-
從當前視圖創建一個標記,或按右鍵創建一個標記。 所選位置的標記。 + description: 在標記上按左鍵以快速移動到標記區域,在標記上按右鍵以刪除該標記。 +

為當前區域建立地圖標記或按 right-click 為選取區域建立地圖標記。 creationSuccessNotification: 成功創建地圖標記。 interactiveTutorial: title: 教程 @@ -306,7 +291,8 @@ ingame: 1_1_extractor: 在圓形礦脈上放一個開採機來獲取圓形! 1_2_conveyor: 用傳送帶將你的開採機連接到基地上!

提示:用你的游標按下並拖動傳送帶! - 1_3_expand: 這不是一個放置型遊戲!建造更多的開採機和傳送帶來更快地完成目標。

+ 1_3_expand: + 這不是一個放置型遊戲!建造更多的開採機和傳送帶來更快地完成目標。

提示:按住SHIFT鍵來放置多個開採機,用R鍵旋轉它們。 colors: red: 紅 @@ -331,33 +317,33 @@ ingame: desc: Click here to see the Steam version advantages! get_on_steam: Get on steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: 取得單機版! + no_thanks: 不用了,謝謝! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 個新關卡 + desc: 總共26關! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 個新建築 + desc: 邁向完全自動化! savegames: - title: ∞ Savegames + title: ∞ 個存檔 desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 個等級 + desc: 試玩版只有 5 個。 markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ 個地圖標記 + desc: 再也不會迷失在一望無際的地圖裡! wires: - title: Wires - desc: An entirely new dimension! + title: 電路 + desc: 全新次元! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: 深色模式 + desc: 要保養眼球~ support: - title: Support me - desc: I develop it in my spare time! + title: 支持我 + desc: 遊戲使我利用閒暇時間做的! shopUpgrades: belt: name: 傳送帶、平衡機、隧道 @@ -405,8 +391,8 @@ buildings: name: 旋轉機(逆時針) description: 將圖形逆時針旋轉90度。 rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: 旋轉機 (180度) + description: 將圖形旋轉180度。 stacker: default: name: 混合機 @@ -424,7 +410,8 @@ buildings: description: 同時為兩個輸入的圖形上色,每次上色只消耗一份顏色塗料。 quad: name: 上色機(四向) - description: 為圖形的四個角塗上不同的顏色。 + description: 分別為圖形的四個部分上色。 + 只有 truthy signal 的格子會被上色。 mirrored: name: 上色機 description: 將整個圖形塗上輸入的顏色。 @@ -436,36 +423,35 @@ buildings: deliver: 交付 toUnlock: 來解鎖 levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: 試玩結束 wire: default: - name: Energy Wire - description: Allows you to transport energy. + name: 能量電線 + description: 傳輸能量。 second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: 電線 + description: 傳輸訊號,訊號可以是物件,顏色或布林值(0或1)。 + 不同顏色的電線無法互相連接。 balancer: default: - name: Balancer + name: 平衡機 description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: 合流機(右) + description: 將兩個傳送帶整合成一個。 merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: 合流機(左) + description: 將兩個傳送帶整合成一個。 splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: 分流機(右) + description: 將單個傳送帶分流成兩個。 splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: 分流機(左) + description: 將單個傳送帶分流成兩個。 storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: 倉庫 + description: 儲存多餘的物品,有一定儲存上限。優先從左側輸出,可以被用來作為溢流門。 wire_tunnel: default: name: Wire Crossing @@ -558,8 +544,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: 切割圖形 - desc: 切割機已解鎖。不論切割機的方向,它都會把圖形垂直地切成兩半。 -

記得把不需要的部分處理掉,否則這個這個建築會停止運作。為此我給你準備了垃圾桶,它會把所有放進去的物品銷毀掉。 + desc: You just unlocked the cutter, which cuts shapes in half + from top to bottom regardless of its + orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose + I have given you the trash, which destroys + everything you put into it! reward_rotater: title: 順時針旋轉 desc: 旋轉機已解鎖。它會順時針旋轉輸入的圖形90度。 @@ -574,40 +564,52 @@ storyRewards: desc: 混合機已解鎖。如果沒有重疊的部分,混合機會嘗試把兩個輸入的圖形拼貼在一起。如果有重疊的部分,右邊的輸入會被到左邊的輸入上方! reward_splitter: title: 分離/合併 - desc: 平衡機已解鎖。在大型工廠中,平衡機負責合併或分離多個傳送帶上的物品。 -

+ desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! reward_tunnel: title: 隧道 desc: 隧道已解鎖。你現在可以從其他傳送帶或建築底下運送物品了! reward_rotater_ccw: title: 逆時針旋轉 - desc: 您已解鎖了旋轉器的變體-它可以逆時針旋轉! 要構建它,請選擇旋轉器,然後按“T”鍵切換其變種! + 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: 鏈式開採機 - desc: 鏈式開採機變體已解鎖。它是開採機的一個變體。它可以將開採出來的資源傳遞給其他的開採機,使得資源提取更加高效! + desc: "You have unlocked the chained extractor! It can + forward its resources to other extractors so you + can more efficiently extract resources!

PS: The old + extractor has been replaced in your toolbar now!" reward_underground_belt_tier_2: title: 貳級隧道 desc: 貳級隧道變體已解鎖。這個隧道有更長的傳輸距離。你還可以混用不同的隧道變體! reward_cutter_quad: title: 四分切割機 - desc: 您已解鎖了四分切割機的變體-它允許您將形狀直接切割為四個部分,而不是兩個! + desc: You have unlocked a variant of the cutter - It allows you + to cut shapes in four parts instead of just two! reward_painter_double: title: 雙倍上色機 - desc: 您已經解鎖了雙倍上色機的變體-它可以作為常規畫家使用,但一次只能處理兩個形狀,而只消耗一種顏色而不是兩種顏色! + desc: You have unlocked a variant of the painter - It works + similar to the regular painter but processes two shapes at + once, consuming just one color instead of two! reward_storage: title: 倉庫 - desc: 倉庫變體已解鎖。它可以暫時儲存一些材料,有容量上限。 + desc: 倉庫 已解鎖: + 可以儲存多餘的物品,有一定儲存上限。

優先從左側輸出,可以被用來作為溢流門。 reward_freeplay: title: 自由模式 - desc: 恭喜你!你解鎖了自由模式!現在圖形將會是隨機生成的! (不用擔心,我計劃在獨立版本中加入更多內容!) + desc: 你做到了!你解鎖了自由模式!現在圖形將會是隨機生成的!

+ 從現在開始,基地會要求流量下限,因此我強烈建議你建造全自動化的生產線。

+ 基地會在電路層輸出他需要的形狀,你只需要分析這些訊號,然後依照需求自動調整你的工廠。 reward_blueprints: title: 藍圖 - desc: 現在,您可以複製並貼上工廠的各個部分! - 選擇一個區域(按住CTRL,然後用游標拖動),然後按'C'將其複制。
-
複製不是免費的,您需要用藍圖 形狀來支付! - (您剛交付的那些)。 + 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). no_reward: title: 下一關 desc: "這一關沒有獎勵,但是下一關有!

PS: @@ -636,8 +638,10 @@ storyRewards: you to rotate a shape by 180 degress (Surprise! :D) reward_display: title: Display - desc: You have unlocked the Display - Connect a signal on the - wires layer to visualize its contents! + desc: "You have unlocked the Display - Connect a signal on the + wires layer to visualize it!

PS: Did you notice the belt + reader and storage output their last read item? Try showing it on a + display!" reward_constant_signal: title: Constant Signal desc: You unlocked the constant signal building on the wires