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/.gitattributes b/.gitattributes deleted file mode 100644 index 61b4b3c3..00000000 --- a/.gitattributes +++ /dev/null @@ -1,4 +0,0 @@ -*.wav filter=lfs diff=lfs merge=lfs -text -*.webm filter=lfs diff=lfs merge=lfs -text -*.mp3 filter=lfs diff=lfs merge=lfs -text -*.psd filter=lfs diff=lfs merge=lfs -text 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 e430ce9a..00e57ecc 100644 --- a/README.md +++ b/README.md @@ -22,15 +22,14 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts ## Building -- Make sure git `git lfs` extension is on your path -- Run `git lfs pull` to download sound assets - 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 @@ -116,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/.gitattributes b/gulp/.gitattributes deleted file mode 100644 index d899f655..00000000 --- a/gulp/.gitattributes +++ /dev/null @@ -1 +0,0 @@ -*.wav filter=lfs diff=lfs merge=lfs -text 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/buildutils.js b/gulp/buildutils.js index 041c8b1d..ea253773 100644 --- a/gulp/buildutils.js +++ b/gulp/buildutils.js @@ -25,6 +25,14 @@ module.exports = { }); }, + getTag() { + try { + return execSync("git describe --tag --exact-match").toString("ascii"); + } catch (e) { + throw new Error('Current git HEAD is not a version tag'); + } + }, + getVersion() { return trim(fs.readFileSync(path.join(__dirname, "..", "version")).toString()); }, diff --git a/gulp/entitlements.plist b/gulp/entitlements.plist new file mode 100644 index 00000000..8f574f5f --- /dev/null +++ b/gulp/entitlements.plist @@ -0,0 +1,12 @@ + + + + + com.apple.security.cs.allow-jit + + com.apple.security.cs.allow-unsigned-executable-memory + + com.apple.security.cs.debugger + + + diff --git a/gulp/gulpfile.js b/gulp/gulpfile.js index 3e03fcc7..7b0416ca 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"], @@ -42,6 +25,10 @@ const envVars = [ "SHAPEZ_CLI_STAGING_FTP_PW", "SHAPEZ_CLI_LIVE_FTP_USER", "SHAPEZ_CLI_LIVE_FTP_PW", + "SHAPEZ_CLI_APPLE_ID", + "SHAPEZ_CLI_APPLE_CERT_NAME", + "SHAPEZ_CLI_GITHUB_USER", + "SHAPEZ_CLI_GITHUB_TOKEN", ]; for (let i = 0; i < envVars.length; ++i) { @@ -78,13 +65,12 @@ docs.gulptasksDocs($, gulp, buildFolder); const standalone = require("./standalone"); standalone.gulptasksStandalone($, gulp, buildFolder); +const releaseUploader = require("./release-uploader"); +releaseUploader.gulptasksReleaseUploader($, gulp, buildFolder); + const translations = require("./translations"); translations.gulptasksTranslations($, gulp, buildFolder); -// FIXME -// const cordova = require("./cordova"); -// cordova.gulptasksCordova($, gulp, buildFolder); - ///////////////////// BUILD TASKS ///////////////////// // Cleans up everything @@ -96,8 +82,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 => { @@ -184,10 +178,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 @@ -225,6 +221,8 @@ gulp.task( gulp.series( "utils.cleanup", "utils.copyAdditionalBuildFiles", + "imgres.buildAtlas", + "imgres.atlasToJson", "imgres.atlas", "sounds.dev", "imgres.copyImageResources", @@ -240,12 +238,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" ) @@ -299,6 +298,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" + ) +); + // Deploying! gulp.task( "main.deploy.alpha", diff --git a/gulp/html.js b/gulp/html.js index 4351209a..0ba58a15 100644 --- a/gulp/html.js +++ b/gulp/html.js @@ -54,19 +54,19 @@ function gulptasksHTML($, gulp, buildFolder) { document.head.appendChild(css); // Append async css - const asyncCss = document.createElement("link"); - asyncCss.rel = "stylesheet"; - asyncCss.type = "text/css"; - asyncCss.media = "none"; - asyncCss.setAttribute("onload", "this.media='all'"); - asyncCss.href = cachebust("async-resources.css"); - if (integrity) { - asyncCss.setAttribute( - "integrity", - computeIntegrityHash(path.join(buildFolder, "async-resources.css")) - ); - } - document.head.appendChild(asyncCss); + // const asyncCss = document.createElement("link"); + // asyncCss.rel = "stylesheet"; + // asyncCss.type = "text/css"; + // asyncCss.media = "none"; + // asyncCss.setAttribute("onload", "this.media='all'"); + // asyncCss.href = cachebust("async-resources.css"); + // if (integrity) { + // asyncCss.setAttribute( + // "integrity", + // computeIntegrityHash(path.join(buildFolder, "async-resources.css")) + // ); + // } + // document.head.appendChild(asyncCss); if (app) { // Append cordova link 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/release-uploader.js b/gulp/release-uploader.js new file mode 100644 index 00000000..eececa4a --- /dev/null +++ b/gulp/release-uploader.js @@ -0,0 +1,66 @@ +const path = require("path"); +const fs = require("fs"); +const execSync = require("child_process").execSync; +const { Octokit } = require("@octokit/rest"); +const buildutils = require("./buildutils"); + +function gulptasksReleaseUploader($, gulp, buildFolder) { + const standaloneDir = path.join(__dirname, "..", "tmp_standalone_files"); + const darwinApp = path.join(standaloneDir, "shapez.io-standalone-darwin-x64", "shapez.io-standalone.app"); + const dmgName = "shapez.io-standalone.dmg"; + const dmgPath = path.join(standaloneDir, "shapez.io-standalone-darwin-x64", dmgName); + + gulp.task("standalone.uploadRelease.darwin64.cleanup", () => { + return gulp.src(dmgPath, { read: false, allowEmpty: true }).pipe($.clean({ force: true })); + }); + + gulp.task("standalone.uploadRelease.darwin64.compress", cb => { + console.log("Packaging disk image", dmgPath); + execSync(`hdiutil create -format UDBZ -srcfolder ${darwinApp} ${dmgPath}`); + cb(); + }); + + gulp.task("standalone.uploadRelease.darwin64.upload", async cb => { + const currentTag = buildutils.getTag(); + + const octokit = new Octokit({ + auth: process.env.SHAPEZ_CLI_GITHUB_TOKEN + }); + + const createdRelease = await octokit.request("POST /repos/{owner}/{repo}/releases", { + owner: process.env.SHAPEZ_CLI_GITHUB_USER, + repo: "shapez.io", + tag_name: currentTag, + name: currentTag, + draft: true + }); + + const { data: { id, upload_url } } = createdRelease; + console.log(`Created release ${id} for tag ${currentTag}`); + + const dmgContents = fs.readFileSync(dmgPath); + const dmgSize = fs.statSync(dmgPath).size; + console.log("Uploading", dmgContents.length / 1024 / 1024, "MB to", upload_url); + + await octokit.request({ + method: "POST", + url: upload_url, + headers: { + "content-type": "application/x-apple-diskimage" + }, + name: dmgName, + data: dmgContents + }); + + cb(); + }); + + gulp.task("standalone.uploadRelease.darwin64", + gulp.series( + "standalone.uploadRelease.darwin64.cleanup", + "standalone.uploadRelease.darwin64.compress", + "standalone.uploadRelease.darwin64.upload" + )); +} + +module.exports = { gulptasksReleaseUploader }; diff --git a/gulp/standalone.js b/gulp/standalone.js index 3b0112d4..8d247672 100644 --- a/gulp/standalone.js +++ b/gulp/standalone.js @@ -1,8 +1,10 @@ +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) { @@ -46,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)); }); @@ -80,8 +96,9 @@ function gulptasksStandalone($, gulp) { * @param {'win32'|'linux'|'darwin'} platform * @param {'x64'|'ia32'} arch * @param {function():void} cb + * @param {boolean=} isRelease */ - function packageStandalone(platform, arch, cb) { + function packageStandalone(platform, arch, cb, isRelease = true) { const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml")); packager({ @@ -99,6 +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", + }, + }), }).then( appPaths => { console.log("Packages created:", appPaths); @@ -123,7 +155,15 @@ function gulptasksStandalone($, gulp) { fs.chmodSync(path.join(appPath, "play.sh"), 0o775); } - if (platform === "darwin") { + 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 + ); + // Clear up framework folders fs.writeFileSync( path.join(appPath, "play.sh"), @@ -175,6 +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", 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/package.json b/package.json index bdc0eb53..acd23c07 100644 --- a/package.json +++ b/package.json @@ -71,6 +71,7 @@ "yawn-yaml": "^1.5.0" }, "devDependencies": { + "@octokit/rest": "^18.0.6", "@typescript-eslint/eslint-plugin": "3.0.1", "@typescript-eslint/parser": "3.0.1", "autoprefixer": "^9.4.3", diff --git a/src/css/ingame_hud/beta_overlay.scss b/src/css/ingame_hud/beta_overlay.scss index 816cddb2..caadd127 100644 --- a/src/css/ingame_hud/beta_overlay.scss +++ b/src/css/ingame_hud/beta_overlay.scss @@ -1,8 +1,24 @@ #ingame_HUD_BetaOverlay { position: fixed; @include S(top, 10px); - @include S(right, 15px); + left: 50%; + transform: translateX(-50%); color: $colorRedBright; @include Heading; text-transform: uppercase; + + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + text-align: center; + + h2 { + @include PlainText; + } + + span { + color: #555; + @include SuperSmallText; + } } diff --git a/src/css/ingame_hud/blueprint_placer.scss b/src/css/ingame_hud/blueprint_placer.scss index e1cf06ef..36d1cdad 100644 --- a/src/css/ingame_hud/blueprint_placer.scss +++ b/src/css/ingame_hud/blueprint_placer.scss @@ -1,39 +1,40 @@ -#ingame_HUD_BlueprintPlacer { - position: absolute; - @include S(top, 50px); - left: 50%; - transform: translateX(-50%); - color: #333; - z-index: 9999; - background: $ingameHudBg; - @include S(padding, 5px); - display: flex; - flex-direction: column; - color: #fff; - @include S(width, 120px); - align-items: center; - justify-content: center; - - .label { - @include PlainText; - text-transform: uppercase; - } - .costContainer { - display: flex; - align-items: center; - @include Heading; - - > canvas { - @include S(margin-left, 5px); - @include S(width, 30px); - @include S(height, 30px); - } - } - - &:not(.canAfford) { - background: rgba(98, 27, 41, 0.8); - // .costContainer { - color: rgb(255, 97, 128); - // } - } -} +#ingame_HUD_BlueprintPlacer { + position: absolute; + @include S(top, 70px); + left: 50%; + transform: translateX(-50%); + color: #333; + z-index: 9999; + background: $ingameHudBg; + @include S(padding, 5px); + display: flex; + flex-direction: column; + color: #fff; + @include S(width, 120px); + align-items: center; + justify-content: center; + @include S(border-radius, $globalBorderRadius); + + .label { + @include PlainText; + text-transform: uppercase; + } + .costContainer { + display: flex; + align-items: center; + @include Heading; + + > canvas { + @include S(margin-left, 5px); + @include S(width, 30px); + @include S(height, 30px); + } + } + + &:not(.canAfford) { + background: rgba(98, 27, 41, 0.8); + // .costContainer { + color: rgb(255, 97, 128); + // } + } +} diff --git a/src/css/ingame_hud/buildings_toolbar.scss b/src/css/ingame_hud/buildings_toolbar.scss index a20626af..54205d64 100644 --- a/src/css/ingame_hud/buildings_toolbar.scss +++ b/src/css/ingame_hud/buildings_toolbar.scss @@ -27,7 +27,7 @@ @include S(border-radius, $globalBorderRadius); @include DarkThemeOverride { - background-color: rgba(darken($darkModeGameBackground, 15), 0.4); + background-color: rgba(darken($darkModeGameBackground, 15), 0.95); } &.secondary { 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/dialogs.scss b/src/css/ingame_hud/dialogs.scss index 3cfdbde8..ad3f76d0 100644 --- a/src/css/ingame_hud/dialogs.scss +++ b/src/css/ingame_hud/dialogs.scss @@ -178,6 +178,29 @@ display: list-item; } } + + .ingameItemChooser { + @include S(margin, 10px, 0); + display: grid; + @include S(grid-column-gap, 3px); + @include S(grid-row-gap, 5px); + grid-template-columns: repeat(10, 1fr); + align-items: center; + justify-items: center; + + canvas { + pointer-events: all; + @include S(width, 25px); + @include S(height, 25px); + position: relative; + cursor: pointer; + @include IncreasedClickArea(3px); + + &:hover { + opacity: 0.9; + } + } + } } > .buttons { @@ -220,7 +243,7 @@ content: " "; display: inline-block; background: rgba(#fff, 0.6); - @include InlineAnimation(5s linear) { + @include InlineAnimation(3s linear) { 0% { width: 100%; } 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 new file mode 100644 index 00000000..065ad6ac --- /dev/null +++ b/src/css/ingame_hud/standalone_advantages.scss @@ -0,0 +1,169 @@ +#ingame_HUD_StandaloneAdvantages { + .content { + @include S(width, 440px); + @include S(min-height, 300px); + } + p { + @include PlainText; + } + + .points { + display: grid; + grid-template-columns: 1fr 1fr; + @include S(grid-column-gap, 10px); + @include S(grid-row-gap, 20px); + @include S(margin, 10px, 0, 20px); + grid-template-rows: #{D(40px)}; + align-items: center; + } + + .lowerBar { + width: 100%; + display: flex; + flex-direction: column; + align-items: center; + justify-content: center; + overflow: hidden; + + > button { + transition: opacity 0.12s ease-in-out; + &:hover { + opacity: 0.85; + } + } + + .otherCloseButton { + @include SuperSmallText; + @include S(margin-right, 30px); + color: #aaa; + @include S(margin, 0); + @include IncreasedClickArea(0px); + @include S(margin-top, 15px); + + @include InlineAnimation(5s ease-in-out) { + 0% { + opacity: 0.05; + } + 50% { + opacity: 0.05; + } + 100% { + opacity: 1; + } + } + } + + .steamLinkButton { + @include IncreasedClickArea(5px); + @include S(margin, 0); + @include S(width, 180px); + @include S(height, 40px); + background: #171a23 center center / contain no-repeat; + + @include S(border-radius, $globalBorderRadius); + } + } + + .point { + display: grid; + grid-template-columns: #{D(55px)} auto; + grid-template-rows: 1fr 1fr; + + > strong { + grid-column: 2 / 3; + grid-row: 1 / 2; + @include PlainText; + text-transform: uppercase; + font-weight: bold; + } + + > p { + grid-column: 2 / 3; + grid-row: 2 / 3; + @include SuperSmallText; + opacity: 0.8; + } + + background: transparent #{D(10px)} center / #{D(30px)} no-repeat; + + &.levels { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_new_levels.png"); + } + > strong { + color: #f13555; + } + } + + &.upgrades { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_upgrades.png"); + } + > strong { + color: #8a00ff; + } + } + + &.buildings { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_buildings.png"); + } + > strong { + color: #3fce8b; + } + } + + &.wires { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_wires.png"); + } + > strong { + color: #ef2fdb; + } + } + + &.markers { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_markers.png"); + } + > strong { + color: #4294ff; + } + } + + &.savegames { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_savegames.png"); + } + > strong { + color: #ff9500; + } + } + + &.darkmode { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_dark_mode.png"); + } + > strong { + color: #292c32; + } + } + + &.support { + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/advantage_support.png"); + } + > strong { + color: #e72d2d; + } + } + } +} diff --git a/src/css/ingame_hud/watermark.scss b/src/css/ingame_hud/watermark.scss index 78a56462..76ec224c 100644 --- a/src/css/ingame_hud/watermark.scss +++ b/src/css/ingame_hud/watermark.scss @@ -1,22 +1,85 @@ #ingame_HUD_Watermark { position: absolute; - & { - /* @load-async */ - background: uiResource("get_on_steam.png") center center / contain no-repeat; - } - @include S(width, 110px); - @include S(height, 40px); - @include S(top, 10px); + @include S(border-radius, $globalBorderRadius); + @include S(top, 70px); pointer-events: all; cursor: pointer; - @include S(left, 160px); + left: 50%; + text-align: center; + + background: rgba(207, 65, 65, 0.8); + color: #fff; + transform: translateX(-50%); + @include PlainText; + @include S(padding, 10px); - transition: all 0.12s ease-in; - transition-property: opacity, transform; - transform: skewX(-0.5deg); &:hover { - transform: skewX(-1deg) scale(1.02); - opacity: 0.9; + transform: translateX(-50%) scale(1.02) !important; + } + + > strong { + @include PlainText; + text-transform: uppercase; + } + > p { + @include SuperSmallText; + opacity: 0.7; + } + + opacity: 0; + + &.visible { + @include InlineAnimation(0.5s ease-in-out) { + 0% { + opacity: 0; + } + 100% { + opacity: 1; + } + } + opacity: 1; + } + + &:not(.visible) { + @include InlineAnimation(0.5s ease-in-out) { + 0% { + opacity: 1; + } + 100% { + opacity: 0; + } + } + } +} + +#ingame_HUD_WatermarkClicker { + @include S(top, 55px); + position: absolute; + left: 50%; + transform: translateX(-50%) !important; + @include SuperSmallText; + color: $colorBlueBright; + text-transform: uppercase; + pointer-events: all; + cursor: pointer; + display: flex; + align-items: center; + + &:hover { + opacity: 0.9; + } + + &::after { + @include S(margin-left, 4px); + content: ""; + @include S(width, 10px); + @include S(height, 10px); + display: inline-flex; + background: center center / contain no-repeat; + & { + /* @load-async */ + background-image: uiResource("res/ui/icons/demo_steam_link_indicator.png"); + } } } diff --git a/src/css/main.scss b/src/css/main.scss index a045beef..4f6a771e 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -52,6 +52,8 @@ @import "ingame_hud/color_blind_helper"; @import "ingame_hud/shape_viewer"; @import "ingame_hud/sandbox_controller"; +@import "ingame_hud/standalone_advantages"; +@import "ingame_hud/cat_memes"; // prettier-ignore $elements: @@ -71,12 +73,13 @@ ingame_HUD_KeybindingOverlay, ingame_HUD_Notifications, ingame_HUD_DebugInfo, ingame_HUD_EntityDebugger, -ingame_HUD_InteractiveTutorial, ingame_HUD_TutorialHints, -ingame_HUD_buildings_toolbar, +ingame_HUD_InteractiveTutorial, +ingame_HUD_BuildingsToolbar, ingame_HUD_wires_toolbar, ingame_HUD_BlueprintPlacer, ingame_HUD_Waypoints_Hint, +ingame_HUD_WatermarkClicker, ingame_HUD_Watermark, ingame_HUD_ColorBlindBelowTileHelper, ingame_HUD_SandboxController, @@ -88,9 +91,11 @@ ingame_HUD_BetaOverlay, ingame_HUD_Shop, ingame_HUD_Statistics, 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 af0b712c..08bfa43f 100644 --- a/src/css/resources.scss +++ b/src/css/resources.scss @@ -1,6 +1,6 @@ $buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, trash, underground_belt, wire, constant_signal, logic_gate, lever, filter, wire_tunnel, display, virtual_processor, reader, storage, - transistor, analyzer, comparator; + transistor, analyzer, comparator, item_producer; @each $building in $buildings { [data-icon="building_icons/#{$building}.png"] { @@ -12,8 +12,8 @@ $buildings: belt, cutter, miner, mixer, painter, rotater, balancer, stacker, tra $buildingsAndVariants: belt, balancer, underground_belt, underground_belt-tier2, miner, miner-chainable, cutter, cutter-quad, rotater, rotater-ccw, stacker, mixer, painter-double, painter-quad, trash, storage, reader, rotater-rotate180, display, constant_signal, wire, wire_tunnel, logic_gate-or, logic_gate-not, - logic_gate-xor, analyzer, virtual_processor-rotater, virtual_processor-unstacker, - virtual_processor-stacker, virtual_processor-painter, wire-second, painter, painter-mirrored; + logic_gate-xor, analyzer, virtual_processor-rotater, virtual_processor-unstacker, item_producer, + virtual_processor-stacker, virtual_processor-painter, wire-second, painter, painter-mirrored, comparator; @each $building in $buildingsAndVariants { [data-icon="building_tutorials/#{$building}.png"] { /* @load-async */ @@ -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 141a02cf..95aca51d 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,51 +1,9 @@ export const CHANGELOG = [ { version: "1.2.0", - date: "unreleased", + date: "09.10.2020", entries: [ - "WIRES", - "Reworked menu UI design (by dengr1605)", - "Allow holding ALT in belt planner to reverse direction (by jakobhellermann)", - "Clear cursor when trying to pipette the same building twice (by hexy)", - "Fixed level 18 stacker bug: If you experienced it already, you know it, if not, I don't want to spoiler (by hexy)", - "Added keybinding to close menus (by isaisstillalive / Sandwichs-del)", - "Fix rare crash regarding the buildings toolbar (by isaisstillalive)", - "Fixed some phrases (by EnderDoom77)", - "Zoom towards mouse cursor (by Dimava)", - "Added multiple settings to optimize the performance", - "Updated the soundtrack again, it is now 40 minutes in total!", - "Added a button to the statistics dialog to disable the sorting (by squeek502)", - "Tier 2 tunnels are now 9 tiles wide, so the gap between is 8 tiles (double the tier 1 range)", - "Updated and added new translations (Thanks to all contributors!)", - "Show connected chained miners on hover", - "Added setting to be able to delete buildings while placing (inspired by hexy)", - "You can now adjust the sound and music volumes! (inspired by Yoshie2000)", - "Some hud elements now have reduced opacity when hovering, so you can see through (inspired by mvb005)", - "Mark pinned shapes in statistics dialog and show them first (inspired by davidburhans)", - "Added setting to show chunk borders", - "Quad painters have been reworked! They now are integrated with the wires, and only paint the shape when the value is 1 (inspired by dengr1605)", - "There are now compact 1x1 balancers available to be unlocked!", - "Replaced level completion sound to be less distracting", - "Allow editing waypoints (by isaisstillalive)", - "Show confirmation when cutting area which is too expensive to get pasted again (by isaisstillalive)", - "Show mouse and camera tile on debug overlay (F4) (by dengr)", - "Fix belt planner placing the belt when a dialog opens in the meantime", - "Added confirmation when deleting a savegame", - "Make chained mainer the default and only option after unlocking it", - "Fixed tunnels entrances connecting to exits sometimes when they shouldn't", - "You can now pan the map with your mouse by moving the cursor to the edges of the screen!", - "Added setting to auto select the extractor when pipetting a resource patch (by Exund)", - "You can now change the unit (seconds / minutes / hours) in the statistics dialog", - "The initial belt planner direction is now based on the cursor movement (by MizardX)", - "Fix preferred variant not getting saved when clicking on the hud (by Danacus)", - ], - }, - { - 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!", + "⚠️⚠️This update is HUGE, view the full changelog here! ⚠️⚠️", ], }, { diff --git a/src/js/core/background_resources_loader.js b/src/js/core/background_resources_loader.js index b3a7671b..bbd37036 100644 --- a/src/js/core/background_resources_loader.js +++ b/src/js/core/background_resources_loader.js @@ -1,215 +1,232 @@ -/* typehints:start */ -import { Application } from "../application"; -/* typehints:end */ - -import { Loader } from "./loader"; -import { createLogger } from "./logging"; -import { Signal } from "./signal"; -import { SOUNDS, MUSIC } from "../platform/sound"; -import { AtlasDefinition, atlasFiles } from "./atlas_definitions"; -import { initBuildingCodesAfterResourcesLoaded } from "../game/meta_building_registry"; - -const logger = createLogger("background_loader"); - -const essentialMainMenuSprites = [ - "logo.png", - ...G_ALL_UI_IMAGES.filter(src => src.startsWith("ui/") && src.indexOf(".gif") < 0), -]; -const essentialMainMenuSounds = [ - SOUNDS.uiClick, - SOUNDS.uiError, - SOUNDS.dialogError, - SOUNDS.dialogOk, - SOUNDS.swishShow, - SOUNDS.swishHide, -]; - -const essentialBareGameAtlases = atlasFiles; -const essentialBareGameSprites = G_ALL_UI_IMAGES.filter(src => src.indexOf(".gif") < 0); -const essentialBareGameSounds = [MUSIC.theme]; - -const additionalGameSprites = []; -// @ts-ignore -const additionalGameSounds = [...Object.values(SOUNDS), ...Object.values(MUSIC)]; - -export class BackgroundResourcesLoader { - /** - * - * @param {Application} app - */ - constructor(app) { - this.app = app; - - this.registerReady = false; - this.mainMenuReady = false; - this.bareGameReady = false; - this.additionalReady = false; - - this.signalMainMenuLoaded = new Signal(); - this.signalBareGameLoaded = new Signal(); - this.signalAdditionalLoaded = new Signal(); - - this.numAssetsLoaded = 0; - this.numAssetsToLoadTotal = 0; - - // Avoid loading stuff twice - this.spritesLoaded = []; - this.soundsLoaded = []; - } - - getNumAssetsLoaded() { - return this.numAssetsLoaded; - } - - getNumAssetsTotal() { - return this.numAssetsToLoadTotal; - } - - getPromiseForMainMenu() { - if (this.mainMenuReady) { - return Promise.resolve(); - } - - return new Promise(resolve => { - this.signalMainMenuLoaded.add(resolve); - }); - } - - getPromiseForBareGame() { - if (this.bareGameReady) { - return Promise.resolve(); - } - - return new Promise(resolve => { - this.signalBareGameLoaded.add(resolve); - }); - } - - startLoading() { - this.internalStartLoadingEssentialsForMainMenu(); - } - - internalStartLoadingEssentialsForMainMenu() { - logger.log("⏰ Start load: main menu"); - this.internalLoadSpritesAndSounds(essentialMainMenuSprites, essentialMainMenuSounds) - .catch(err => { - logger.warn("⏰ Failed to load essentials for main menu:", err); - }) - .then(() => { - logger.log("⏰ Finish load: main menu"); - this.mainMenuReady = true; - this.signalMainMenuLoaded.dispatch(); - this.internalStartLoadingEssentialsForBareGame(); - }); - } - - internalStartLoadingEssentialsForBareGame() { - logger.log("⏰ Start load: bare game"); - this.internalLoadSpritesAndSounds( - essentialBareGameSprites, - essentialBareGameSounds, - essentialBareGameAtlases - ) - .catch(err => { - logger.warn("⏰ Failed to load essentials for bare game:", err); - }) - .then(() => { - logger.log("⏰ Finish load: bare game"); - this.bareGameReady = true; - initBuildingCodesAfterResourcesLoaded(); - this.signalBareGameLoaded.dispatch(); - this.internalStartLoadingAdditionalGameAssets(); - }); - } - - internalStartLoadingAdditionalGameAssets() { - const additionalAtlases = []; - logger.log("⏰ Start load: additional assets (", additionalAtlases.length, "images)"); - this.internalLoadSpritesAndSounds(additionalGameSprites, additionalGameSounds, additionalAtlases) - .catch(err => { - logger.warn("⏰ Failed to load additional assets:", err); - }) - .then(() => { - logger.log("⏰ Finish load: additional assets"); - this.additionalReady = true; - this.signalAdditionalLoaded.dispatch(); - }); - } - - /** - * @param {Array} sprites - * @param {Array} sounds - * @param {Array} atlases - * @returns {Promise} - */ - internalLoadSpritesAndSounds(sprites, sounds, atlases = []) { - this.numAssetsToLoadTotal = sprites.length + sounds.length + atlases.length; - this.numAssetsLoaded = 0; - - let promises = []; - - for (let i = 0; i < sounds.length; ++i) { - if (this.soundsLoaded.indexOf(sounds[i]) >= 0) { - // Already loaded - continue; - } - - this.soundsLoaded.push(sounds[i]); - promises.push( - this.app.sound - .loadSound(sounds[i]) - .catch(err => { - logger.warn("Failed to load sound:", sounds[i]); - }) - .then(() => { - this.numAssetsLoaded++; - }) - ); - } - - for (let i = 0; i < sprites.length; ++i) { - if (this.spritesLoaded.indexOf(sprites[i]) >= 0) { - // Already loaded - continue; - } - this.spritesLoaded.push(sprites[i]); - promises.push( - Loader.preloadCSSSprite(sprites[i]) - .catch(err => { - logger.warn("Failed to load css sprite:", sprites[i]); - }) - .then(() => { - this.numAssetsLoaded++; - }) - ); - } - - for (let i = 0; i < atlases.length; ++i) { - const atlas = atlases[i]; - promises.push( - Loader.preloadAtlas(atlas) - .catch(err => { - logger.warn("Failed to load atlas:", atlas.sourceFileName); - }) - .then(() => { - this.numAssetsLoaded++; - }) - ); - } - - return ( - Promise.all(promises) - - // // Remove some pressure by waiting a bit - // .then(() => { - // return new Promise(resolve => { - // setTimeout(resolve, 200); - // }); - // }) - .then(() => { - this.numAssetsToLoadTotal = 0; - this.numAssetsLoaded = 0; - }) - ); - } -} +/* typehints:start */ +import { Application } from "../application"; +/* typehints:end */ + +import { Loader } from "./loader"; +import { createLogger } from "./logging"; +import { Signal } from "./signal"; +import { SOUNDS, MUSIC } from "../platform/sound"; +import { AtlasDefinition, atlasFiles } from "./atlas_definitions"; +import { initBuildingCodesAfterResourcesLoaded } from "../game/meta_building_registry"; +import { cachebust } from "./cachebust"; + +const logger = createLogger("background_loader"); + +const essentialMainMenuSprites = [ + "logo.png", + ...G_ALL_UI_IMAGES.filter(src => src.startsWith("ui/") && src.indexOf(".gif") < 0), +]; +const essentialMainMenuSounds = [ + SOUNDS.uiClick, + SOUNDS.uiError, + SOUNDS.dialogError, + SOUNDS.dialogOk, + SOUNDS.swishShow, + SOUNDS.swishHide, +]; + +const essentialBareGameAtlases = atlasFiles; +const essentialBareGameSprites = G_ALL_UI_IMAGES.filter(src => src.indexOf(".gif") < 0); +const essentialBareGameSounds = [MUSIC.theme]; + +const additionalGameSprites = []; +// @ts-ignore +const additionalGameSounds = [...Object.values(SOUNDS), ...Object.values(MUSIC)]; + +export class BackgroundResourcesLoader { + /** + * + * @param {Application} app + */ + constructor(app) { + this.app = app; + + this.registerReady = false; + this.mainMenuReady = false; + this.bareGameReady = false; + this.additionalReady = false; + + this.signalMainMenuLoaded = new Signal(); + this.signalBareGameLoaded = new Signal(); + this.signalAdditionalLoaded = new Signal(); + + this.numAssetsLoaded = 0; + this.numAssetsToLoadTotal = 0; + + // Avoid loading stuff twice + this.spritesLoaded = []; + this.soundsLoaded = []; + } + + getNumAssetsLoaded() { + return this.numAssetsLoaded; + } + + getNumAssetsTotal() { + return this.numAssetsToLoadTotal; + } + + getPromiseForMainMenu() { + if (this.mainMenuReady) { + return Promise.resolve(); + } + + return new Promise(resolve => { + this.signalMainMenuLoaded.add(resolve); + }); + } + + getPromiseForBareGame() { + if (this.bareGameReady) { + return Promise.resolve(); + } + + return new Promise(resolve => { + this.signalBareGameLoaded.add(resolve); + }); + } + + startLoading() { + this.internalStartLoadingEssentialsForMainMenu(); + } + + internalStartLoadingEssentialsForMainMenu() { + logger.log("⏰ Start load: main menu"); + this.internalLoadSpritesAndSounds(essentialMainMenuSprites, essentialMainMenuSounds) + .catch(err => { + logger.warn("⏰ Failed to load essentials for main menu:", err); + }) + .then(() => { + logger.log("⏰ Finish load: main menu"); + this.mainMenuReady = true; + this.signalMainMenuLoaded.dispatch(); + this.internalStartLoadingEssentialsForBareGame(); + }); + } + + internalStartLoadingEssentialsForBareGame() { + logger.log("⏰ Start load: bare game"); + this.internalLoadSpritesAndSounds( + essentialBareGameSprites, + essentialBareGameSounds, + essentialBareGameAtlases + ) + .then(() => this.internalPreloadCss("async-resources.scss")) + .catch(err => { + logger.warn("⏰ Failed to load essentials for bare game:", err); + }) + .then(() => { + logger.log("⏰ Finish load: bare game"); + this.bareGameReady = true; + initBuildingCodesAfterResourcesLoaded(); + this.signalBareGameLoaded.dispatch(); + this.internalStartLoadingAdditionalGameAssets(); + }); + } + + internalStartLoadingAdditionalGameAssets() { + const additionalAtlases = []; + logger.log("⏰ Start load: additional assets (", additionalAtlases.length, "images)"); + this.internalLoadSpritesAndSounds(additionalGameSprites, additionalGameSounds, additionalAtlases) + .catch(err => { + logger.warn("⏰ Failed to load additional assets:", err); + }) + .then(() => { + logger.log("⏰ Finish load: additional assets"); + this.additionalReady = true; + this.signalAdditionalLoaded.dispatch(); + }); + } + + internalPreloadCss(name) { + return new Promise((resolve, reject) => { + const link = document.createElement("link"); + + link.onload = resolve; + link.onerror = reject; + + link.setAttribute("rel", "stylesheet"); + link.setAttribute("media", "all"); + link.setAttribute("type", "text/css"); + link.setAttribute("href", cachebust("async-resources.css")); + document.head.appendChild(link); + }); + } + + /** + * @param {Array} sprites + * @param {Array} sounds + * @param {Array} atlases + * @returns {Promise} + */ + internalLoadSpritesAndSounds(sprites, sounds, atlases = []) { + this.numAssetsToLoadTotal = sprites.length + sounds.length + atlases.length; + this.numAssetsLoaded = 0; + + let promises = []; + + for (let i = 0; i < sounds.length; ++i) { + if (this.soundsLoaded.indexOf(sounds[i]) >= 0) { + // Already loaded + continue; + } + + this.soundsLoaded.push(sounds[i]); + promises.push( + this.app.sound + .loadSound(sounds[i]) + .catch(err => { + logger.warn("Failed to load sound:", sounds[i]); + }) + .then(() => { + this.numAssetsLoaded++; + }) + ); + } + + for (let i = 0; i < sprites.length; ++i) { + if (this.spritesLoaded.indexOf(sprites[i]) >= 0) { + // Already loaded + continue; + } + this.spritesLoaded.push(sprites[i]); + promises.push( + Loader.preloadCSSSprite(sprites[i]) + .catch(err => { + logger.warn("Failed to load css sprite:", sprites[i]); + }) + .then(() => { + this.numAssetsLoaded++; + }) + ); + } + + for (let i = 0; i < atlases.length; ++i) { + const atlas = atlases[i]; + promises.push( + Loader.preloadAtlas(atlas) + .catch(err => { + logger.warn("Failed to load atlas:", atlas.sourceFileName); + }) + .then(() => { + this.numAssetsLoaded++; + }) + ); + } + + return ( + Promise.all(promises) + + // // Remove some pressure by waiting a bit + // .then(() => { + // return new Promise(resolve => { + // setTimeout(resolve, 200); + // }); + // }) + .then(() => { + this.numAssetsToLoadTotal = 0; + this.numAssetsLoaded = 0; + }) + ); + } +} diff --git a/src/js/core/click_detector.js b/src/js/core/click_detector.js index ea6abf48..fb62f0f1 100644 --- a/src/js/core/click_detector.js +++ b/src/js/core/click_detector.js @@ -1,467 +1,465 @@ -import { createLogger } from "../core/logging"; -import { Signal } from "../core/signal"; -import { fastArrayDelete, fastArrayDeleteValueIfContained } from "./utils"; -import { Vector } from "./vector"; -import { IS_MOBILE, SUPPORT_TOUCH } from "./config"; -import { SOUNDS } from "../platform/sound"; -import { GLOBAL_APP } from "./globals"; - -const logger = createLogger("click_detector"); - -export const MAX_MOVE_DISTANCE_PX = IS_MOBILE ? 20 : 80; - -// For debugging -const registerClickDetectors = G_IS_DEV && true; -if (registerClickDetectors) { - /** @type {Array} */ - window.activeClickDetectors = []; -} - -// Store active click detectors so we can cancel them -/** @type {Array} */ -const ongoingClickDetectors = []; - -// Store when the last touch event was registered, to avoid accepting a touch *and* a click event - -export let clickDetectorGlobals = { - lastTouchTime: -1000, -}; - -/** - * Click detector creation payload typehints - * @typedef {{ - * consumeEvents?: boolean, - * preventDefault?: boolean, - * applyCssClass?: string, - * captureTouchmove?: boolean, - * targetOnly?: boolean, - * maxDistance?: number, - * clickSound?: string, - * preventClick?: boolean, - * }} ClickDetectorConstructorArgs - */ - -// Detects clicks -export class ClickDetector { - /** - * - * @param {Element} element - * @param {object} param1 - * @param {boolean=} param1.consumeEvents Whether to call stopPropagation - * (Useful for nested elements where the parent has a click handler as wel) - * @param {boolean=} param1.preventDefault Whether to call preventDefault (Usually makes the handler faster) - * @param {string=} param1.applyCssClass The css class to add while the element is pressed - * @param {boolean=} param1.captureTouchmove Whether to capture touchmove events as well - * @param {boolean=} param1.targetOnly Whether to also accept clicks on child elements (e.target !== element) - * @param {number=} param1.maxDistance The maximum distance in pixels to accept clicks - * @param {string=} param1.clickSound Sound key to play on touchdown - * @param {boolean=} param1.preventClick Whether to prevent click events - */ - constructor( - element, - { - consumeEvents = false, - preventDefault = true, - applyCssClass = "pressed", - captureTouchmove = false, - targetOnly = false, - maxDistance = MAX_MOVE_DISTANCE_PX, - clickSound = SOUNDS.uiClick, - preventClick = false, - } - ) { - assert(element, "No element given!"); - this.clickDownPosition = null; - - this.consumeEvents = consumeEvents; - this.preventDefault = preventDefault; - this.applyCssClass = applyCssClass; - this.captureTouchmove = captureTouchmove; - this.targetOnly = targetOnly; - this.clickSound = clickSound; - this.maxDistance = maxDistance; - this.preventClick = preventClick; - - // Signals - this.click = new Signal(); - this.rightClick = new Signal(); - this.touchstart = new Signal(); - this.touchmove = new Signal(); - this.touchend = new Signal(); - this.touchcancel = new Signal(); - - // Simple signals which just receive the touch position - this.touchstartSimple = new Signal(); - this.touchmoveSimple = new Signal(); - this.touchendSimple = new Signal(); - - // Store time of touch start - this.clickStartTime = null; - - // A click can be cancelled if another detector registers a click - this.cancelled = false; - - this.internalBindTo(/** @type {HTMLElement} */ (element)); - } - - /** - * Cleans up all event listeners of this detector - */ - cleanup() { - if (this.element) { - if (registerClickDetectors) { - const index = window.activeClickDetectors.indexOf(this); - if (index < 0) { - logger.error("Click detector cleanup but is not active"); - } else { - window.activeClickDetectors.splice(index, 1); - } - } - const options = this.internalGetEventListenerOptions(); - - if (SUPPORT_TOUCH) { - this.element.removeEventListener("touchstart", this.handlerTouchStart, options); - this.element.removeEventListener("touchend", this.handlerTouchEnd, options); - this.element.removeEventListener("touchcancel", this.handlerTouchCancel, options); - } - - this.element.removeEventListener("mouseup", this.handlerTouchStart, options); - this.element.removeEventListener("mousedown", this.handlerTouchEnd, options); - this.element.removeEventListener("mouseout", this.handlerTouchCancel, options); - - if (this.captureTouchmove) { - if (SUPPORT_TOUCH) { - this.element.removeEventListener("touchmove", this.handlerTouchMove, options); - } - this.element.removeEventListener("mousemove", this.handlerTouchMove, options); - } - - if (this.preventClick) { - this.element.removeEventListener("click", this.handlerPreventClick, options); - } - - this.click.removeAll(); - this.touchstart.removeAll(); - this.touchmove.removeAll(); - this.touchend.removeAll(); - this.touchcancel.removeAll(); - - // TODO: Remove pointer captures - - this.element = null; - } - } - - // INTERNAL METHODS - - /** - * - * @param {Event} event - */ - internalPreventClick(event) { - window.focus(); - event.preventDefault(); - } - - /** - * Internal method to get the options to pass to an event listener - */ - internalGetEventListenerOptions() { - return { - capture: this.consumeEvents, - passive: !this.preventDefault, - }; - } - - /** - * Binds the click detector to an element - * @param {HTMLElement} element - */ - internalBindTo(element) { - const options = this.internalGetEventListenerOptions(); - - this.handlerTouchStart = this.internalOnPointerDown.bind(this); - this.handlerTouchEnd = this.internalOnPointerEnd.bind(this); - this.handlerTouchMove = this.internalOnPointerMove.bind(this); - this.handlerTouchCancel = this.internalOnTouchCancel.bind(this); - - if (this.preventClick) { - this.handlerPreventClick = this.internalPreventClick.bind(this); - element.addEventListener("click", this.handlerPreventClick, options); - } - - if (SUPPORT_TOUCH) { - element.addEventListener("touchstart", this.handlerTouchStart, options); - element.addEventListener("touchend", this.handlerTouchEnd, options); - element.addEventListener("touchcancel", this.handlerTouchCancel, options); - } - - element.addEventListener("mousedown", this.handlerTouchStart, options); - element.addEventListener("mouseup", this.handlerTouchEnd, options); - element.addEventListener("mouseout", this.handlerTouchCancel, options); - - if (this.captureTouchmove) { - if (SUPPORT_TOUCH) { - element.addEventListener("touchmove", this.handlerTouchMove, options); - } - element.addEventListener("mousemove", this.handlerTouchMove, options); - } - - if (registerClickDetectors) { - window.activeClickDetectors.push(this); - } - this.element = element; - } - - /** - * Returns if the bound element is currently in the DOM. - */ - internalIsDomElementAttached() { - return this.element && document.documentElement.contains(this.element); - } - - /** - * Checks if the given event is relevant for this detector - * @param {TouchEvent|MouseEvent} event - */ - internalEventPreHandler(event, expectedRemainingTouches = 1) { - if (!this.element) { - // Already cleaned up - return false; - } - - if (this.targetOnly && event.target !== this.element) { - // Clicked a child element - return false; - } - - // Stop any propagation and defaults if configured - if (this.consumeEvents && event.cancelable) { - event.stopPropagation(); - } - - if (this.preventDefault && event.cancelable) { - event.preventDefault(); - } - - if (window.TouchEvent && event instanceof TouchEvent) { - clickDetectorGlobals.lastTouchTime = performance.now(); - - // console.log("Got touches", event.targetTouches.length, "vs", expectedRemainingTouches); - if (event.targetTouches.length !== expectedRemainingTouches) { - return false; - } - } - - if (event instanceof MouseEvent) { - if (performance.now() - clickDetectorGlobals.lastTouchTime < 1000.0) { - return false; - } - } - - return true; - } - - /** - * Extracts the mous position from an event - * @param {TouchEvent|MouseEvent} event - * @returns {Vector} The client space position - */ - static extractPointerPosition(event) { - if (window.TouchEvent && event instanceof TouchEvent) { - if (event.changedTouches.length !== 1) { - logger.warn( - "Got unexpected target touches:", - event.targetTouches.length, - "->", - event.targetTouches - ); - return new Vector(0, 0); - } - - const touch = event.changedTouches[0]; - return new Vector(touch.clientX, touch.clientY); - } - - if (event instanceof MouseEvent) { - return new Vector(event.clientX, event.clientY); - } - - assertAlways(false, "Got unknown event: " + event); - - return new Vector(0, 0); - } - - /** - * Cacnels all ongoing events on this detector - */ - cancelOngoingEvents() { - if (this.applyCssClass && this.element) { - this.element.classList.remove(this.applyCssClass); - } - this.clickDownPosition = null; - this.clickStartTime = null; - this.cancelled = true; - fastArrayDeleteValueIfContained(ongoingClickDetectors, this); - } - - /** - * Internal pointer down handler - * @param {TouchEvent|MouseEvent} event - */ - internalOnPointerDown(event) { - window.focus(); - - if (!this.internalEventPreHandler(event, 1)) { - return false; - } - - const position = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); - - if (event instanceof MouseEvent) { - const isRightClick = event.button === 2; - if (isRightClick) { - // Ignore right clicks - this.rightClick.dispatch(position, event); - this.cancelled = true; - this.clickDownPosition = null; - return; - } - } - - if (this.clickDownPosition) { - logger.warn("Ignoring double click"); - return false; - } - - this.cancelled = false; - this.touchstart.dispatch(event); - - // Store where the touch started - this.clickDownPosition = position; - this.clickStartTime = performance.now(); - this.touchstartSimple.dispatch(this.clickDownPosition.x, this.clickDownPosition.y); - - // If we are not currently within a click, register it - if (ongoingClickDetectors.indexOf(this) < 0) { - ongoingClickDetectors.push(this); - } else { - logger.warn("Click detector got pointer down of active pointer twice"); - } - - // If we should apply any classes, do this now - if (this.applyCssClass) { - this.element.classList.add(this.applyCssClass); - } - - // If we should play any sound, do this - if (this.clickSound) { - GLOBAL_APP.sound.playUiSound(this.clickSound); - } - - return false; - } - - /** - * Internal pointer move handler - * @param {TouchEvent|MouseEvent} event - */ - internalOnPointerMove(event) { - if (!this.internalEventPreHandler(event, 1)) { - return false; - } - this.touchmove.dispatch(event); - const pos = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); - this.touchmoveSimple.dispatch(pos.x, pos.y); - return false; - } - - /** - * Internal pointer end handler - * @param {TouchEvent|MouseEvent} event - */ - internalOnPointerEnd(event) { - window.focus(); - - if (!this.internalEventPreHandler(event, 0)) { - return false; - } - - if (this.cancelled) { - // warn(this, "Not dispatching touchend on cancelled listener"); - return false; - } - - if (event instanceof MouseEvent) { - const isRightClick = event.button === 2; - if (isRightClick) { - return; - } - } - - const index = ongoingClickDetectors.indexOf(this); - if (index < 0) { - logger.warn("Got pointer end but click detector is not in pressed state"); - } else { - fastArrayDelete(ongoingClickDetectors, index); - } - - let dispatchClick = false; - let dispatchClickPos = null; - - // Check for correct down position, otherwise must have pinched or so - if (this.clickDownPosition) { - const pos = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); - const distance = pos.distance(this.clickDownPosition); - if (!IS_MOBILE || distance <= this.maxDistance) { - dispatchClick = true; - dispatchClickPos = pos; - } else { - console.warn("[ClickDetector] Touch does not count as click:", "(was", distance, ")"); - } - } - - this.clickDownPosition = null; - this.clickStartTime = null; - - if (this.applyCssClass) { - this.element.classList.remove(this.applyCssClass); - } - - // Dispatch in the end to avoid the element getting invalidated - // Also make sure that the element is still in the dom - if (this.internalIsDomElementAttached()) { - this.touchend.dispatch(event); - this.touchendSimple.dispatch(); - - if (dispatchClick) { - const detectors = ongoingClickDetectors.slice(); - for (let i = 0; i < detectors.length; ++i) { - detectors[i].cancelOngoingEvents(); - } - this.click.dispatch(dispatchClickPos, event); - } - } - return false; - } - - /** - * Internal touch cancel handler - * @param {TouchEvent|MouseEvent} event - */ - internalOnTouchCancel(event) { - if (!this.internalEventPreHandler(event, 0)) { - return false; - } - - if (this.cancelled) { - // warn(this, "Not dispatching touchcancel on cancelled listener"); - return false; - } - - this.cancelOngoingEvents(); - this.touchcancel.dispatch(event); - this.touchendSimple.dispatch(event); - return false; - } -} +import { createLogger } from "../core/logging"; +import { Signal } from "../core/signal"; +import { fastArrayDelete, fastArrayDeleteValueIfContained } from "./utils"; +import { Vector } from "./vector"; +import { IS_MOBILE, SUPPORT_TOUCH } from "./config"; +import { SOUNDS } from "../platform/sound"; +import { GLOBAL_APP } from "./globals"; + +const logger = createLogger("click_detector"); + +export const MAX_MOVE_DISTANCE_PX = IS_MOBILE ? 20 : 80; + +// For debugging +const registerClickDetectors = G_IS_DEV && true; +if (registerClickDetectors) { + /** @type {Array} */ + window.activeClickDetectors = []; +} + +// Store active click detectors so we can cancel them +/** @type {Array} */ +const ongoingClickDetectors = []; + +// Store when the last touch event was registered, to avoid accepting a touch *and* a click event + +export let clickDetectorGlobals = { + lastTouchTime: -1000, +}; + +/** + * Click detector creation payload typehints + * @typedef {{ + * consumeEvents?: boolean, + * preventDefault?: boolean, + * applyCssClass?: string, + * captureTouchmove?: boolean, + * targetOnly?: boolean, + * maxDistance?: number, + * clickSound?: string, + * preventClick?: boolean, + * }} ClickDetectorConstructorArgs + */ + +// Detects clicks +export class ClickDetector { + /** + * + * @param {Element} element + * @param {object} param1 + * @param {boolean=} param1.consumeEvents Whether to call stopPropagation + * (Useful for nested elements where the parent has a click handler as wel) + * @param {boolean=} param1.preventDefault Whether to call preventDefault (Usually makes the handler faster) + * @param {string=} param1.applyCssClass The css class to add while the element is pressed + * @param {boolean=} param1.captureTouchmove Whether to capture touchmove events as well + * @param {boolean=} param1.targetOnly Whether to also accept clicks on child elements (e.target !== element) + * @param {number=} param1.maxDistance The maximum distance in pixels to accept clicks + * @param {string=} param1.clickSound Sound key to play on touchdown + * @param {boolean=} param1.preventClick Whether to prevent click events + */ + constructor( + element, + { + consumeEvents = false, + preventDefault = true, + applyCssClass = "pressed", + captureTouchmove = false, + targetOnly = false, + maxDistance = MAX_MOVE_DISTANCE_PX, + clickSound = SOUNDS.uiClick, + preventClick = false, + } + ) { + assert(element, "No element given!"); + this.clickDownPosition = null; + + this.consumeEvents = consumeEvents; + this.preventDefault = preventDefault; + this.applyCssClass = applyCssClass; + this.captureTouchmove = captureTouchmove; + this.targetOnly = targetOnly; + this.clickSound = clickSound; + this.maxDistance = maxDistance; + this.preventClick = preventClick; + + // Signals + this.click = new Signal(); + this.rightClick = new Signal(); + this.touchstart = new Signal(); + this.touchmove = new Signal(); + this.touchend = new Signal(); + this.touchcancel = new Signal(); + + // Simple signals which just receive the touch position + this.touchstartSimple = new Signal(); + this.touchmoveSimple = new Signal(); + this.touchendSimple = new Signal(); + + // Store time of touch start + this.clickStartTime = null; + + // A click can be cancelled if another detector registers a click + this.cancelled = false; + + this.internalBindTo(/** @type {HTMLElement} */ (element)); + } + + /** + * Cleans up all event listeners of this detector + */ + cleanup() { + if (this.element) { + if (registerClickDetectors) { + const index = window.activeClickDetectors.indexOf(this); + if (index < 0) { + logger.error("Click detector cleanup but is not active"); + } else { + window.activeClickDetectors.splice(index, 1); + } + } + const options = this.internalGetEventListenerOptions(); + + if (SUPPORT_TOUCH) { + this.element.removeEventListener("touchstart", this.handlerTouchStart, options); + this.element.removeEventListener("touchend", this.handlerTouchEnd, options); + this.element.removeEventListener("touchcancel", this.handlerTouchCancel, options); + } + + this.element.removeEventListener("mouseup", this.handlerTouchStart, options); + this.element.removeEventListener("mousedown", this.handlerTouchEnd, options); + this.element.removeEventListener("mouseout", this.handlerTouchCancel, options); + + if (this.captureTouchmove) { + if (SUPPORT_TOUCH) { + this.element.removeEventListener("touchmove", this.handlerTouchMove, options); + } + this.element.removeEventListener("mousemove", this.handlerTouchMove, options); + } + + if (this.preventClick) { + this.element.removeEventListener("click", this.handlerPreventClick, options); + } + + this.click.removeAll(); + this.touchstart.removeAll(); + this.touchmove.removeAll(); + this.touchend.removeAll(); + this.touchcancel.removeAll(); + + this.element = null; + } + } + + // INTERNAL METHODS + + /** + * + * @param {Event} event + */ + internalPreventClick(event) { + window.focus(); + event.preventDefault(); + } + + /** + * Internal method to get the options to pass to an event listener + */ + internalGetEventListenerOptions() { + return { + capture: this.consumeEvents, + passive: !this.preventDefault, + }; + } + + /** + * Binds the click detector to an element + * @param {HTMLElement} element + */ + internalBindTo(element) { + const options = this.internalGetEventListenerOptions(); + + this.handlerTouchStart = this.internalOnPointerDown.bind(this); + this.handlerTouchEnd = this.internalOnPointerEnd.bind(this); + this.handlerTouchMove = this.internalOnPointerMove.bind(this); + this.handlerTouchCancel = this.internalOnTouchCancel.bind(this); + + if (this.preventClick) { + this.handlerPreventClick = this.internalPreventClick.bind(this); + element.addEventListener("click", this.handlerPreventClick, options); + } + + if (SUPPORT_TOUCH) { + element.addEventListener("touchstart", this.handlerTouchStart, options); + element.addEventListener("touchend", this.handlerTouchEnd, options); + element.addEventListener("touchcancel", this.handlerTouchCancel, options); + } + + element.addEventListener("mousedown", this.handlerTouchStart, options); + element.addEventListener("mouseup", this.handlerTouchEnd, options); + element.addEventListener("mouseout", this.handlerTouchCancel, options); + + if (this.captureTouchmove) { + if (SUPPORT_TOUCH) { + element.addEventListener("touchmove", this.handlerTouchMove, options); + } + element.addEventListener("mousemove", this.handlerTouchMove, options); + } + + if (registerClickDetectors) { + window.activeClickDetectors.push(this); + } + this.element = element; + } + + /** + * Returns if the bound element is currently in the DOM. + */ + internalIsDomElementAttached() { + return this.element && document.documentElement.contains(this.element); + } + + /** + * Checks if the given event is relevant for this detector + * @param {TouchEvent|MouseEvent} event + */ + internalEventPreHandler(event, expectedRemainingTouches = 1) { + if (!this.element) { + // Already cleaned up + return false; + } + + if (this.targetOnly && event.target !== this.element) { + // Clicked a child element + return false; + } + + // Stop any propagation and defaults if configured + if (this.consumeEvents && event.cancelable) { + event.stopPropagation(); + } + + if (this.preventDefault && event.cancelable) { + event.preventDefault(); + } + + if (window.TouchEvent && event instanceof TouchEvent) { + clickDetectorGlobals.lastTouchTime = performance.now(); + + // console.log("Got touches", event.targetTouches.length, "vs", expectedRemainingTouches); + if (event.targetTouches.length !== expectedRemainingTouches) { + return false; + } + } + + if (event instanceof MouseEvent) { + if (performance.now() - clickDetectorGlobals.lastTouchTime < 1000.0) { + return false; + } + } + + return true; + } + + /** + * Extracts the mous position from an event + * @param {TouchEvent|MouseEvent} event + * @returns {Vector} The client space position + */ + static extractPointerPosition(event) { + if (window.TouchEvent && event instanceof TouchEvent) { + if (event.changedTouches.length !== 1) { + logger.warn( + "Got unexpected target touches:", + event.targetTouches.length, + "->", + event.targetTouches + ); + return new Vector(0, 0); + } + + const touch = event.changedTouches[0]; + return new Vector(touch.clientX, touch.clientY); + } + + if (event instanceof MouseEvent) { + return new Vector(event.clientX, event.clientY); + } + + assertAlways(false, "Got unknown event: " + event); + + return new Vector(0, 0); + } + + /** + * Cacnels all ongoing events on this detector + */ + cancelOngoingEvents() { + if (this.applyCssClass && this.element) { + this.element.classList.remove(this.applyCssClass); + } + this.clickDownPosition = null; + this.clickStartTime = null; + this.cancelled = true; + fastArrayDeleteValueIfContained(ongoingClickDetectors, this); + } + + /** + * Internal pointer down handler + * @param {TouchEvent|MouseEvent} event + */ + internalOnPointerDown(event) { + window.focus(); + + if (!this.internalEventPreHandler(event, 1)) { + return false; + } + + const position = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); + + if (event instanceof MouseEvent) { + const isRightClick = event.button === 2; + if (isRightClick) { + // Ignore right clicks + this.rightClick.dispatch(position, event); + this.cancelled = true; + this.clickDownPosition = null; + return; + } + } + + if (this.clickDownPosition) { + logger.warn("Ignoring double click"); + return false; + } + + this.cancelled = false; + this.touchstart.dispatch(event); + + // Store where the touch started + this.clickDownPosition = position; + this.clickStartTime = performance.now(); + this.touchstartSimple.dispatch(this.clickDownPosition.x, this.clickDownPosition.y); + + // If we are not currently within a click, register it + if (ongoingClickDetectors.indexOf(this) < 0) { + ongoingClickDetectors.push(this); + } else { + logger.warn("Click detector got pointer down of active pointer twice"); + } + + // If we should apply any classes, do this now + if (this.applyCssClass) { + this.element.classList.add(this.applyCssClass); + } + + // If we should play any sound, do this + if (this.clickSound) { + GLOBAL_APP.sound.playUiSound(this.clickSound); + } + + return false; + } + + /** + * Internal pointer move handler + * @param {TouchEvent|MouseEvent} event + */ + internalOnPointerMove(event) { + if (!this.internalEventPreHandler(event, 1)) { + return false; + } + this.touchmove.dispatch(event); + const pos = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); + this.touchmoveSimple.dispatch(pos.x, pos.y); + return false; + } + + /** + * Internal pointer end handler + * @param {TouchEvent|MouseEvent} event + */ + internalOnPointerEnd(event) { + window.focus(); + + if (!this.internalEventPreHandler(event, 0)) { + return false; + } + + if (this.cancelled) { + // warn(this, "Not dispatching touchend on cancelled listener"); + return false; + } + + if (event instanceof MouseEvent) { + const isRightClick = event.button === 2; + if (isRightClick) { + return; + } + } + + const index = ongoingClickDetectors.indexOf(this); + if (index < 0) { + logger.warn("Got pointer end but click detector is not in pressed state"); + } else { + fastArrayDelete(ongoingClickDetectors, index); + } + + let dispatchClick = false; + let dispatchClickPos = null; + + // Check for correct down position, otherwise must have pinched or so + if (this.clickDownPosition) { + const pos = /** @type {typeof ClickDetector} */ (this.constructor).extractPointerPosition(event); + const distance = pos.distance(this.clickDownPosition); + if (!IS_MOBILE || distance <= this.maxDistance) { + dispatchClick = true; + dispatchClickPos = pos; + } else { + console.warn("[ClickDetector] Touch does not count as click:", "(was", distance, ")"); + } + } + + this.clickDownPosition = null; + this.clickStartTime = null; + + if (this.applyCssClass) { + this.element.classList.remove(this.applyCssClass); + } + + // Dispatch in the end to avoid the element getting invalidated + // Also make sure that the element is still in the dom + if (this.internalIsDomElementAttached()) { + this.touchend.dispatch(event); + this.touchendSimple.dispatch(); + + if (dispatchClick) { + const detectors = ongoingClickDetectors.slice(); + for (let i = 0; i < detectors.length; ++i) { + detectors[i].cancelOngoingEvents(); + } + this.click.dispatch(dispatchClickPos, event); + } + } + return false; + } + + /** + * Internal touch cancel handler + * @param {TouchEvent|MouseEvent} event + */ + internalOnTouchCancel(event) { + if (!this.internalEventPreHandler(event, 0)) { + return false; + } + + if (this.cancelled) { + // warn(this, "Not dispatching touchcancel on cancelled listener"); + return false; + } + + this.cancelOngoingEvents(); + this.touchcancel.dispatch(event); + this.touchendSimple.dispatch(event); + return false; + } +} diff --git a/src/js/core/config.js b/src/js/core/config.js index 7c1fe81f..8b4c64c2 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,23 +5,23 @@ 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 = { discord: "https://discord.gg/HN7EVzV", github: "https://github.com/tobspr/shapez.io", reddit: "https://www.reddit.com/r/shapezio", + shapeViewer: "https://viewer.shapez.io", 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! @@ -61,7 +59,7 @@ export const globalConfig = { undergroundBeltMaxTilesByTier: [5, 9], - readerAnalyzeIntervalSeconds: G_IS_DEV ? 3 : 10, + readerAnalyzeIntervalSeconds: 10, buildingSpeeds: { cutter: 1 / 4, @@ -134,3 +132,8 @@ if (G_IS_DEV && globalConfig.debug.renderForTrailer) { if (globalConfig.debug.fastGameEnter) { globalConfig.debug.noArtificialDelays = true; } + +if (G_IS_DEV && globalConfig.debug.noArtificialDelays) { + globalConfig.warmupTimeSecondsFast = 0; + globalConfig.warmupTimeSecondsRegular = 0; +} diff --git a/src/js/core/draw_parameters.js b/src/js/core/draw_parameters.js index 71971ed1..95e71bf2 100644 --- a/src/js/core/draw_parameters.js +++ b/src/js/core/draw_parameters.js @@ -1,26 +1,25 @@ -import { globalConfig } from "./config"; - -/** - * @typedef {import("../game/root").GameRoot} GameRoot - * @typedef {import("./rectangle").Rectangle} Rectangle - */ - -export class DrawParameters { - constructor({ context, visibleRect, desiredAtlasScale, zoomLevel, root }) { - /** @type {CanvasRenderingContext2D} */ - this.context = context; - - /** @type {Rectangle} */ - this.visibleRect = visibleRect; - - /** @type {string} */ - this.desiredAtlasScale = desiredAtlasScale; - - /** @type {number} */ - this.zoomLevel = zoomLevel; - - // FIXME: Not really nice - /** @type {GameRoot} */ - this.root = root; - } -} +import { globalConfig } from "./config"; + +/** + * @typedef {import("../game/root").GameRoot} GameRoot + * @typedef {import("./rectangle").Rectangle} Rectangle + */ + +export class DrawParameters { + constructor({ context, visibleRect, desiredAtlasScale, zoomLevel, root }) { + /** @type {CanvasRenderingContext2D} */ + this.context = context; + + /** @type {Rectangle} */ + this.visibleRect = visibleRect; + + /** @type {string} */ + this.desiredAtlasScale = desiredAtlasScale; + + /** @type {number} */ + this.zoomLevel = zoomLevel; + + /** @type {GameRoot} */ + this.root = root; + } +} diff --git a/src/js/core/modal_dialog_elements.js b/src/js/core/modal_dialog_elements.js index 124f51d4..5f0ed59f 100644 --- a/src/js/core/modal_dialog_elements.js +++ b/src/js/core/modal_dialog_elements.js @@ -13,6 +13,17 @@ import { getStringForKeyCode } from "../game/key_action_mapper"; import { createLogger } from "./logging"; import { T } from "../translations"; +/* + * *************************************************** + * + * LEGACY CODE WARNING + * + * This is old code from yorg3.io and needs to be refactored + * @TODO + * + * *************************************************** + */ + const kbEnter = 13; const kbCancel = 27; @@ -60,6 +71,8 @@ export class Dialog { this.buttonSignals[buttonId] = new Signal(); } + this.valueChosen = new Signal(); + this.timeouts = []; this.clickDetectors = []; @@ -164,7 +177,7 @@ export class Dialog { const timeout = setTimeout(() => { button.classList.remove("timedButton"); arrayDeleteValue(this.timeouts, timeout); - }, 5000); + }, 3000); this.timeouts.push(timeout); } if (isEnter || isEscape) { @@ -431,10 +444,12 @@ export class DialogWithForm extends Dialog { for (let i = 0; i < this.formElements.length; ++i) { const elem = this.formElements[i]; elem.bindEvents(div, this.clickDetectors); + elem.valueChosen.add(this.closeRequested.dispatch, this.closeRequested); + elem.valueChosen.add(this.valueChosen.dispatch, this.valueChosen); } waitNextFrame().then(() => { - this.formElements[0].focus(); + this.formElements[this.formElements.length - 1].focus(); }); return div; diff --git a/src/js/core/modal_dialog_forms.js b/src/js/core/modal_dialog_forms.js index 1ded9a8b..1c5b1986 100644 --- a/src/js/core/modal_dialog_forms.js +++ b/src/js/core/modal_dialog_forms.js @@ -1,150 +1,232 @@ -import { ClickDetector } from "./click_detector"; - -export class FormElement { - constructor(id, label) { - this.id = id; - this.label = label; - } - - getHtml() { - abstract; - return ""; - } - - getFormElement(parent) { - return parent.querySelector("[data-formId='" + this.id + "']"); - } - - bindEvents(parent, clickTrackers) { - abstract; - } - - focus() {} - - isValid() { - return true; - } - - /** @returns {any} */ - getValue() { - abstract; - } -} - -export class FormElementInput extends FormElement { - constructor({ id, label = null, placeholder, defaultValue = "", inputType = "text", validator = null }) { - super(id, label); - this.placeholder = placeholder; - this.defaultValue = defaultValue; - this.inputType = inputType; - this.validator = validator; - - this.element = null; - } - - getHtml() { - let classes = []; - let inputType = "text"; - let maxlength = 256; - switch (this.inputType) { - case "text": { - classes.push("input-text"); - break; - } - - case "email": { - classes.push("input-email"); - inputType = "email"; - break; - } - - case "token": { - classes.push("input-token"); - inputType = "text"; - maxlength = 4; - break; - } - } - - return ` -
- ${this.label ? `` : ""} - -
- `; - } - - bindEvents(parent, clickTrackers) { - this.element = this.getFormElement(parent); - this.element.addEventListener("input", event => this.updateErrorState()); - this.updateErrorState(); - } - - updateErrorState() { - this.element.classList.toggle("errored", !this.isValid()); - } - - isValid() { - return !this.validator || this.validator(this.element.value); - } - - getValue() { - return this.element.value; - } - - focus() { - this.element.focus(); - } -} - -export class FormElementCheckbox extends FormElement { - constructor({ id, label, defaultValue = true }) { - super(id, label); - this.defaultValue = defaultValue; - this.value = this.defaultValue; - - this.element = null; - } - - getHtml() { - return ` -
- ${this.label ? `` : ""} -
- -
-
- `; - } - - bindEvents(parent, clickTrackers) { - this.element = this.getFormElement(parent); - const detector = new ClickDetector(this.element, { - consumeEvents: false, - preventDefault: false, - }); - clickTrackers.push(detector); - detector.click.add(this.toggle, this); - } - - getValue() { - return this.value; - } - - toggle() { - this.value = !this.value; - this.element.classList.toggle("checked", this.value); - } - - focus(parent) {} -} +import { BaseItem } from "../game/base_item"; +import { ClickDetector } from "./click_detector"; +import { Signal } from "./signal"; + +/* + * *************************************************** + * + * LEGACY CODE WARNING + * + * This is old code from yorg3.io and needs to be refactored + * @TODO + * + * *************************************************** + */ + +export class FormElement { + constructor(id, label) { + this.id = id; + this.label = label; + + this.valueChosen = new Signal(); + } + + getHtml() { + abstract; + return ""; + } + + getFormElement(parent) { + return parent.querySelector("[data-formId='" + this.id + "']"); + } + + bindEvents(parent, clickTrackers) { + abstract; + } + + focus() {} + + isValid() { + return true; + } + + /** @returns {any} */ + getValue() { + abstract; + } +} + +export class FormElementInput extends FormElement { + constructor({ id, label = null, placeholder, defaultValue = "", inputType = "text", validator = null }) { + super(id, label); + this.placeholder = placeholder; + this.defaultValue = defaultValue; + this.inputType = inputType; + this.validator = validator; + + this.element = null; + } + + getHtml() { + let classes = []; + let inputType = "text"; + let maxlength = 256; + switch (this.inputType) { + case "text": { + classes.push("input-text"); + break; + } + + case "email": { + classes.push("input-email"); + inputType = "email"; + break; + } + + case "token": { + classes.push("input-token"); + inputType = "text"; + maxlength = 4; + break; + } + } + + return ` +
+ ${this.label ? `` : ""} + +
+ `; + } + + bindEvents(parent, clickTrackers) { + this.element = this.getFormElement(parent); + this.element.addEventListener("input", event => this.updateErrorState()); + this.updateErrorState(); + } + + updateErrorState() { + this.element.classList.toggle("errored", !this.isValid()); + } + + isValid() { + return !this.validator || this.validator(this.element.value); + } + + getValue() { + return this.element.value; + } + + focus() { + this.element.focus(); + } +} + +export class FormElementCheckbox extends FormElement { + constructor({ id, label, defaultValue = true }) { + super(id, label); + this.defaultValue = defaultValue; + this.value = this.defaultValue; + + this.element = null; + } + + getHtml() { + return ` +
+ ${this.label ? `` : ""} +
+ +
+
+ `; + } + + bindEvents(parent, clickTrackers) { + this.element = this.getFormElement(parent); + const detector = new ClickDetector(this.element, { + consumeEvents: false, + preventDefault: false, + }); + clickTrackers.push(detector); + detector.click.add(this.toggle, this); + } + + getValue() { + return this.value; + } + + toggle() { + this.value = !this.value; + this.element.classList.toggle("checked", this.value); + } + + focus(parent) {} +} + +export class FormElementItemChooser extends FormElement { + /** + * + * @param {object} param0 + * @param {string} param0.id + * @param {string=} param0.label + * @param {Array} param0.items + */ + constructor({ id, label, items = [] }) { + super(id, label); + this.items = items; + this.element = null; + + /** + * @type {BaseItem} + */ + this.chosenItem = null; + } + + getHtml() { + let classes = []; + + return ` +
+ ${this.label ? `` : ""} +
+
+ `; + } + + /** + * @param {HTMLElement} parent + * @param {Array} clickTrackers + */ + bindEvents(parent, clickTrackers) { + this.element = this.getFormElement(parent); + + for (let i = 0; i < this.items.length; ++i) { + const item = this.items[i]; + + const canvas = document.createElement("canvas"); + canvas.width = 128; + canvas.height = 128; + const context = canvas.getContext("2d"); + item.drawFullSizeOnCanvas(context, 128); + this.element.appendChild(canvas); + + const detector = new ClickDetector(canvas, {}); + clickTrackers.push(detector); + detector.click.add(() => { + this.chosenItem = item; + this.valueChosen.dispatch(item); + }); + } + } + + isValid() { + return true; + } + + getValue() { + return null; + } + + focus() {} +} diff --git a/src/js/core/read_write_proxy.js b/src/js/core/read_write_proxy.js index 6d26fa2b..b2ff9051 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 @@ -173,7 +169,7 @@ export class ReadWriteProxy { // Check for errors during read .catch(err => { if (err === FILE_NOT_FOUND) { - logger.log("File not found, using default data"); + logger.error("File not found, using default data"); // File not found or unreadable, assume default file return Promise.resolve(null); diff --git a/src/js/core/restriction_manager.js b/src/js/core/restriction_manager.js new file mode 100644 index 00000000..2912d30f --- /dev/null +++ b/src/js/core/restriction_manager.js @@ -0,0 +1,154 @@ +/* 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) { + 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/rng.js b/src/js/core/rng.js index 9c5c1c43..7a6766cd 100644 --- a/src/js/core/rng.js +++ b/src/js/core/rng.js @@ -108,17 +108,6 @@ export class RandomNumberGenerator { assert(max > min, "rng: max <= min"); return Math.floor(this.next() * (max - min) + min); } - /** - * @param {number} min - * @param {number} max - * @returns {number} Integer in range [min, max] - */ - nextIntRangeInclusive(min, max) { - assert(Number.isFinite(min), "Minimum is no integer"); - assert(Number.isFinite(max), "Maximum is no integer"); - assert(max > min, "rng: max <= min"); - return Math.round(this.next() * (max - min) + min); - } /** * @param {number} min diff --git a/src/js/core/utils.js b/src/js/core/utils.js index ec2f0593..a08d577e 100644 --- a/src/js/core/utils.js +++ b/src/js/core/utils.js @@ -708,3 +708,83 @@ export function dirInterval(key, frames, object, premessage, ...args) { } logIntervals[key] = interval; } + +/** + * Fills in a tag + * @param {string} translation + * @param {string} link + */ +export function fillInLinkIntoTranslation(translation, link) { + return translation + .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/base_item.js b/src/js/game/base_item.js index cbd89e7f..0075e6c1 100644 --- a/src/js/game/base_item.js +++ b/src/js/game/base_item.js @@ -1,82 +1,100 @@ -import { globalConfig } from "../core/config"; -import { DrawParameters } from "../core/draw_parameters"; -import { BasicSerializableObject } from "../savegame/serialization"; - -/** @type {ItemType[]} **/ -export const itemTypes = ["shape", "color", "boolean"]; - -/** - * Class for items on belts etc. Not an entity for performance reasons - */ -export class BaseItem extends BasicSerializableObject { - constructor() { - super(); - } - - static getId() { - return "base_item"; - } - - /** @returns {object} */ - static getSchema() { - return {}; - } - - /** @returns {ItemType} **/ - getItemType() { - abstract; - return "shape"; - } - - /** - * Returns if the item equals the other itme - * @param {BaseItem} other - * @returns {boolean} - */ - equals(other) { - if (this.getItemType() !== other.getItemType()) { - return false; - } - return this.equalsImpl(other); - } - - /** - * Override for custom comparison - * @abstract - * @param {BaseItem} other - * @returns {boolean} - */ - equalsImpl(other) { - abstract; - return false; - } - - /** - * Draws the item at the given position - * @param {number} x - * @param {number} y - * @param {DrawParameters} parameters - * @param {number=} diameter - */ - drawItemCenteredClipped(x, y, parameters, diameter = globalConfig.defaultItemDiameter) { - if (parameters.visibleRect.containsCircle(x, y, diameter / 2)) { - this.drawItemCenteredImpl(x, y, parameters, diameter); - } - } - - /** - * INTERNAL - * @param {number} x - * @param {number} y - * @param {DrawParameters} parameters - * @param {number=} diameter - */ - drawItemCenteredImpl(x, y, parameters, diameter = globalConfig.defaultItemDiameter) { - abstract; - } - - getBackgroundColorAsResource() { - abstract; - return ""; - } -} +import { globalConfig } from "../core/config"; +import { DrawParameters } from "../core/draw_parameters"; +import { BasicSerializableObject } from "../savegame/serialization"; + +/** @type {ItemType[]} **/ +export const itemTypes = ["shape", "color", "boolean"]; + +/** + * Class for items on belts etc. Not an entity for performance reasons + */ +export class BaseItem extends BasicSerializableObject { + constructor() { + super(); + } + + static getId() { + return "base_item"; + } + + /** @returns {object} */ + static getSchema() { + return {}; + } + + /** @returns {ItemType} **/ + getItemType() { + abstract; + return "shape"; + } + + /** + * Returns a string id of the item + * @returns {string} + */ + getAsCopyableKey() { + abstract; + return ""; + } + + /** + * Returns if the item equals the other itme + * @param {BaseItem} other + * @returns {boolean} + */ + equals(other) { + if (this.getItemType() !== other.getItemType()) { + return false; + } + return this.equalsImpl(other); + } + + /** + * Override for custom comparison + * @abstract + * @param {BaseItem} other + * @returns {boolean} + */ + equalsImpl(other) { + abstract; + return false; + } + + /** + * Draws the item to a canvas + * @param {CanvasRenderingContext2D} context + * @param {number} size + */ + drawFullSizeOnCanvas(context, size) { + abstract; + } + + /** + * Draws the item at the given position + * @param {number} x + * @param {number} y + * @param {DrawParameters} parameters + * @param {number=} diameter + */ + drawItemCenteredClipped(x, y, parameters, diameter = globalConfig.defaultItemDiameter) { + if (parameters.visibleRect.containsCircle(x, y, diameter / 2)) { + this.drawItemCenteredImpl(x, y, parameters, diameter); + } + } + + /** + * INTERNAL + * @param {number} x + * @param {number} y + * @param {DrawParameters} parameters + * @param {number=} diameter + */ + drawItemCenteredImpl(x, y, parameters, diameter = globalConfig.defaultItemDiameter) { + abstract; + } + + getBackgroundColorAsResource() { + abstract; + return ""; + } +} diff --git a/src/js/game/belt_path.js b/src/js/game/belt_path.js index a2b5af63..50c2f5e9 100644 --- a/src/js/game/belt_path.js +++ b/src/js/game/belt_path.js @@ -1112,7 +1112,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 9585f973..0fa40921 100644 --- a/src/js/game/blueprint.js +++ b/src/js/game/blueprint.js @@ -1,14 +1,9 @@ +import { globalConfig } from "../core/config"; import { DrawParameters } from "../core/draw_parameters"; -import { Loader } from "../core/loader"; -import { createLogger } from "../core/logging"; +import { findNiceIntegerValue } from "../core/utils"; import { Vector } from "../core/vector"; import { Entity } from "./entity"; import { GameRoot } from "./root"; -import { findNiceIntegerValue } from "../core/utils"; -import { blueprintShape } from "./upgrades"; -import { globalConfig } from "../core/config"; - -const logger = createLogger("blueprint"); export class Blueprint { /** @@ -174,7 +169,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/building_codes.js b/src/js/game/building_codes.js index 0a3cbc36..78240c31 100644 --- a/src/js/game/building_codes.js +++ b/src/js/game/building_codes.js @@ -41,7 +41,7 @@ const variantsCache = new Map(); export function registerBuildingVariant( code, meta, - variant = "default" /* FIXME: Circular dependency, actually its defaultBuildingVariant */, + variant = "default" /* @TODO: Circular dependency, actually its defaultBuildingVariant */, rotationVariant = 0 ) { assert(!gBuildingVariants[code], "Duplicate id: " + code); diff --git a/src/js/game/buildings/analyzer.js b/src/js/game/buildings/analyzer.js index a18a3b56..8335f730 100644 --- a/src/js/game/buildings/analyzer.js +++ b/src/js/game/buildings/analyzer.js @@ -5,6 +5,7 @@ import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins"; import { Entity } from "../entity"; import { MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; +import { enumHubGoalRewards } from "../tutorial_goals"; const overlayMatrix = generateMatrixRotations([1, 1, 0, 1, 1, 1, 0, 1, 0]); @@ -21,8 +22,7 @@ export class MetaAnalyzerBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - // @todo - return true; + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_virtual_processing); } /** @returns {"wires"} **/ diff --git a/src/js/game/buildings/belt.js b/src/js/game/buildings/belt.js index 562b47d5..84646b19 100644 --- a/src/js/game/buildings/belt.js +++ b/src/js/game/buildings/belt.js @@ -7,6 +7,7 @@ import { BeltComponent } from "../components/belt"; import { Entity } from "../entity"; import { MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; +import { THEME } from "../theme"; export const arrayBeltVariantToRotation = [enumDirection.top, enumDirection.left, enumDirection.right]; @@ -22,7 +23,7 @@ export class MetaBeltBuilding extends MetaBuilding { } getSilhouetteColor() { - return "#777"; + return THEME.map.chunkOverview.beltColor; } getPlacementSound() { diff --git a/src/js/game/buildings/comparator.js b/src/js/game/buildings/comparator.js index 0a284930..6738d514 100644 --- a/src/js/game/buildings/comparator.js +++ b/src/js/game/buildings/comparator.js @@ -4,6 +4,7 @@ import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins"; import { Entity } from "../entity"; import { MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; +import { enumHubGoalRewards } from "../tutorial_goals"; export class MetaComparatorBuilding extends MetaBuilding { constructor() { @@ -18,8 +19,7 @@ export class MetaComparatorBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - // @todo - return true; + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_virtual_processing); } /** @returns {"wires"} **/ diff --git a/src/js/game/buildings/filter.js b/src/js/game/buildings/filter.js index b537fcb5..2d81ce83 100644 --- a/src/js/game/buildings/filter.js +++ b/src/js/game/buildings/filter.js @@ -23,7 +23,7 @@ export class MetaFilterBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers); + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_filter); } getDimensions() { diff --git a/src/js/game/buildings/item_producer.js b/src/js/game/buildings/item_producer.js new file mode 100644 index 00000000..477ed603 --- /dev/null +++ b/src/js/game/buildings/item_producer.js @@ -0,0 +1,44 @@ +import { enumDirection, Vector } from "../../core/vector"; +import { ItemEjectorComponent } from "../components/item_ejector"; +import { ItemProducerComponent } from "../components/item_producer"; +import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins"; +import { Entity } from "../entity"; +import { MetaBuilding } from "../meta_building"; + +export class MetaItemProducerBuilding extends MetaBuilding { + constructor() { + super("item_producer"); + } + + getSilhouetteColor() { + return "#b37dcd"; + } + + getShowWiresLayerPreview() { + return true; + } + + /** + * Creates the entity at the given location + * @param {Entity} entity + */ + setupEntityComponents(entity) { + entity.addComponent( + new ItemEjectorComponent({ + slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }], + }) + ); + entity.addComponent( + new WiredPinsComponent({ + slots: [ + { + pos: new Vector(0, 0), + type: enumPinSlotType.logicalAcceptor, + direction: enumDirection.bottom, + }, + ], + }) + ); + entity.addComponent(new ItemProducerComponent()); + } +} diff --git a/src/js/game/buildings/lever.js b/src/js/game/buildings/lever.js index d5f4b801..7ddaf65f 100644 --- a/src/js/game/buildings/lever.js +++ b/src/js/game/buildings/lever.js @@ -20,7 +20,7 @@ export class MetaLeverBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers); + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers); } getDimensions() { diff --git a/src/js/game/buildings/logic_gate.js b/src/js/game/buildings/logic_gate.js index 1511f5ab..b61d4373 100644 --- a/src/js/game/buildings/logic_gate.js +++ b/src/js/game/buildings/logic_gate.js @@ -5,6 +5,7 @@ import { MetaBuilding, defaultBuildingVariant } from "../meta_building"; import { GameRoot } from "../root"; import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate"; import { generateMatrixRotations } from "../../core/utils"; +import { enumHubGoalRewards } from "../tutorial_goals"; /** @enum {string} */ export const enumLogicGateVariants = { @@ -48,8 +49,7 @@ export class MetaLogicGateBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - // @todo - return true; + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_logic_gates); } /** @returns {"wires"} **/ diff --git a/src/js/game/buildings/painter.js b/src/js/game/buildings/painter.js index b74d24b9..6e941403 100644 --- a/src/js/game/buildings/painter.js +++ b/src/js/game/buildings/painter.js @@ -71,7 +71,7 @@ export class MetaPainterBuilding extends MetaBuilding { if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_painter_double)) { variants.push(enumPainterVariants.double); } - if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_painter_quad)) { + if (root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers)) { variants.push(enumPainterVariants.quad); } return variants; diff --git a/src/js/game/buildings/transistor.js b/src/js/game/buildings/transistor.js index 5a4be935..ebcfeac3 100644 --- a/src/js/game/buildings/transistor.js +++ b/src/js/game/buildings/transistor.js @@ -5,6 +5,7 @@ import { enumPinSlotType, WiredPinsComponent } from "../components/wired_pins"; import { Entity } from "../entity"; import { defaultBuildingVariant, MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; +import { enumHubGoalRewards } from "../tutorial_goals"; /** @enum {string} */ export const enumTransistorVariants = { @@ -29,8 +30,7 @@ export class MetaTransistorBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - // @todo - return true; + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_logic_gates); } /** @returns {"wires"} **/ diff --git a/src/js/game/buildings/underground_belt.js b/src/js/game/buildings/underground_belt.js index fde018fe..2761443d 100644 --- a/src/js/game/buildings/underground_belt.js +++ b/src/js/game/buildings/underground_belt.js @@ -191,7 +191,6 @@ export class MetaUndergroundBeltBuilding extends MetaBuilding { ) { tile = tile.addScalars(searchVector.x, searchVector.y); - /* WIRES: FIXME */ const contents = root.map.getTileContent(tile, "regular"); if (contents) { const undergroundComp = contents.components.UndergroundBelt; diff --git a/src/js/game/buildings/virtual_processor.js b/src/js/game/buildings/virtual_processor.js index fb0ef0e3..b4f91762 100644 --- a/src/js/game/buildings/virtual_processor.js +++ b/src/js/game/buildings/virtual_processor.js @@ -4,6 +4,7 @@ import { WiredPinsComponent, enumPinSlotType } from "../components/wired_pins"; import { Entity } from "../entity"; import { defaultBuildingVariant, MetaBuilding } from "../meta_building"; import { GameRoot } from "../root"; +import { enumHubGoalRewards } from "../tutorial_goals"; import { MetaCutterBuilding } from "./cutter"; import { MetaPainterBuilding } from "./painter"; import { MetaRotaterBuilding } from "./rotater"; @@ -47,8 +48,7 @@ export class MetaVirtualProcessorBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - // @todo - return true; + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_virtual_processing); } /** @returns {"wires"} **/ diff --git a/src/js/game/buildings/wire.js b/src/js/game/buildings/wire.js index ae5bab42..61b75073 100644 --- a/src/js/game/buildings/wire.js +++ b/src/js/game/buildings/wire.js @@ -82,7 +82,7 @@ export class MetaWireBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers); + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers); } /** diff --git a/src/js/game/buildings/wire_tunnel.js b/src/js/game/buildings/wire_tunnel.js index 05d595df..2626dd12 100644 --- a/src/js/game/buildings/wire_tunnel.js +++ b/src/js/game/buildings/wire_tunnel.js @@ -21,7 +21,7 @@ export class MetaWireTunnelBuilding extends MetaBuilding { * @param {GameRoot} root */ getIsUnlocked(root) { - return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers); + return root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers); } /** @@ -53,6 +53,6 @@ export class MetaWireTunnelBuilding extends MetaBuilding { * @param {Entity} entity */ setupEntityComponents(entity) { - entity.addComponent(new WireTunnelComponent({})); + entity.addComponent(new WireTunnelComponent()); } } diff --git a/src/js/game/camera.js b/src/js/game/camera.js index 66d7efa8..107d1fb4 100644 --- a/src/js/game/camera.js +++ b/src/js/game/camera.js @@ -353,7 +353,7 @@ export class Camera extends BasicSerializableObject { .add(() => (this.desiredZoom = this.zoomLevel * 1.2)); mapper .getBinding(KEYMAPPINGS.navigation.mapZoomOut) - .add(() => (this.desiredZoom = this.zoomLevel * 0.8)); + .add(() => (this.desiredZoom = this.zoomLevel / 1.2)); mapper.getBinding(KEYMAPPINGS.navigation.centerMap).add(() => this.centerOnMap()); } @@ -502,16 +502,20 @@ export class Camera extends BasicSerializableObject { } const prevZoom = this.zoomLevel; - const delta = Math.sign(event.deltaY) * -0.15 * this.root.app.settings.getScrollWheelSensitivity(); - assert(Number.isFinite(delta), "Got invalid delta in mouse wheel event: " + event.deltaY); + const scale = 1 + 0.15 * this.root.app.settings.getScrollWheelSensitivity(); + assert(Number.isFinite(scale), "Got invalid scale in mouse wheel event: " + event.deltaY); assert(Number.isFinite(this.zoomLevel), "Got invalid zoom level *before* wheel: " + this.zoomLevel); - this.zoomLevel *= 1 + delta; + this.zoomLevel *= event.deltaY < 0 ? scale : 1 / scale; assert(Number.isFinite(this.zoomLevel), "Got invalid zoom level *after* wheel: " + this.zoomLevel); 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); @@ -939,6 +943,7 @@ export class Camera extends BasicSerializableObject { this.zoomLevel = this.zoomLevel * fade + this.desiredZoom * (1 - fade); assert(Number.isFinite(this.zoomLevel), "Zoom level is NaN after fade: " + this.zoomLevel); } else { + this.zoomLevel = this.desiredZoom; this.desiredZoom = null; } } diff --git a/src/js/game/component_registry.js b/src/js/game/component_registry.js index c4ea6921..f094e60d 100644 --- a/src/js/game/component_registry.js +++ b/src/js/game/component_registry.js @@ -18,6 +18,7 @@ import { WireTunnelComponent } from "./components/wire_tunnel"; import { DisplayComponent } from "./components/display"; import { BeltReaderComponent } from "./components/belt_reader"; import { FilterComponent } from "./components/filter"; +import { ItemProducerComponent } from "./components/item_producer"; export function initComponentRegistry() { gComponentRegistry.register(StaticMapEntityComponent); @@ -39,6 +40,7 @@ export function initComponentRegistry() { gComponentRegistry.register(DisplayComponent); gComponentRegistry.register(BeltReaderComponent); gComponentRegistry.register(FilterComponent); + gComponentRegistry.register(ItemProducerComponent); // IMPORTANT ^^^^^ UPDATE ENTITY COMPONENT STORAGE AFTERWARDS diff --git a/src/js/game/components/item_ejector.js b/src/js/game/components/item_ejector.js index 4eda52f9..47253b4b 100644 --- a/src/js/game/components/item_ejector.js +++ b/src/js/game/components/item_ejector.js @@ -26,7 +26,7 @@ export class ItemEjectorComponent extends Component { static getSchema() { // The cachedDestSlot, cachedTargetEntity fields are not serialized. return { - slots: types.array( + slots: types.fixedSizeArray( types.structured({ item: types.nullable(typeItemSingleton), progress: types.float, diff --git a/src/js/game/components/item_producer.js b/src/js/game/components/item_producer.js new file mode 100644 index 00000000..ef3571e2 --- /dev/null +++ b/src/js/game/components/item_producer.js @@ -0,0 +1,7 @@ +import { Component } from "../component"; + +export class ItemProducerComponent extends Component { + static getId() { + return "ItemProducer"; + } +} diff --git a/src/js/game/components/wired_pins.js b/src/js/game/components/wired_pins.js index ff339b86..81a6ec62 100644 --- a/src/js/game/components/wired_pins.js +++ b/src/js/game/components/wired_pins.js @@ -31,7 +31,7 @@ export class WiredPinsComponent extends Component { static getSchema() { return { - slots: types.array( + slots: types.fixedSizeArray( types.structured({ value: types.nullable(typeItemSingleton), }) diff --git a/src/js/game/core.js b/src/js/game/core.js index 73580a0e..8b5cddd6 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/entity_components.js b/src/js/game/entity_components.js index 32870d37..7dee590a 100644 --- a/src/js/game/entity_components.js +++ b/src/js/game/entity_components.js @@ -18,6 +18,7 @@ import { WireTunnelComponent } from "./components/wire_tunnel"; import { DisplayComponent } from "./components/display"; import { BeltReaderComponent } from "./components/belt_reader"; import { FilterComponent } from "./components/filter"; +import { ItemProducerComponent } from "./components/item_producer"; /* typehints:end */ /** @@ -85,6 +86,9 @@ export class EntityComponentStorage { /** @type {FilterComponent} */ this.Filter; + /** @type {ItemProducerComponent} */ + this.ItemProducer; + /* typehints:end */ } } diff --git a/src/js/game/entity_manager.js b/src/js/game/entity_manager.js index bb86c151..4009c2d5 100644 --- a/src/js/game/entity_manager.js +++ b/src/js/game/entity_manager.js @@ -188,26 +188,6 @@ export class EntityManager extends BasicSerializableObject { else return [...set.values()]; } - // Deprecated lol - // /** - // * Return all of a given class. This is SLOW! - // * @param {object} entityClass - // * @returns {Array} entities - // */ - // getAllOfClass(entityClass) { - // // FIXME: Slow - // // Fine! I will! - // const result = []; - // const entities = [...this.entities.values()]; - // for (let i = entities.length; i >= 0; --i) { - // const entity = this.entities[i]; - // if (entity instanceof entityClass) { - // result.push(entity); - // } - // } - // return result; - // } - /** * Unregisters all components of an entity from the component to entity mapping * @param {Entity} entity 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/game_system_manager.js b/src/js/game/game_system_manager.js index 2c81f899..74ba798f 100644 --- a/src/js/game/game_system_manager.js +++ b/src/js/game/game_system_manager.js @@ -23,6 +23,7 @@ import { DisplaySystem } from "./systems/display"; import { ItemProcessorOverlaysSystem } from "./systems/item_processor_overlays"; import { BeltReaderSystem } from "./systems/belt_reader"; import { FilterSystem } from "./systems/filter"; +import { ItemProducerSystem } from "./systems/item_producer"; const logger = createLogger("game_system_manager"); @@ -96,6 +97,9 @@ export class GameSystemManager { /** @type {FilterSystem} */ filter: null, + /** @type {ItemProducerSystem} */ + itemProducer: null, + /* typehints:end */ }; this.systemUpdateOrder = []; @@ -130,6 +134,8 @@ export class GameSystemManager { add("filter", FilterSystem); + add("itemProducer", ItemProducerSystem); + add("itemEjector", ItemEjectorSystem); add("mapResources", MapResourcesSystem); diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index 2debeb5d..c9d9494f 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -1,12 +1,13 @@ import { globalConfig } from "../core/config"; -import { clamp, findNiceIntegerValue, randomChoice, randomInt } from "../core/utils"; +import { RandomNumberGenerator } from "../core/rng"; +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() { @@ -18,32 +19,39 @@ export class HubGoals extends BasicSerializableObject { level: types.uint, storedShapes: types.keyValueMap(types.uint), upgradeLevels: types.keyValueMap(types.uint), - - currentGoal: types.structured({ - definition: types.knownType(ShapeDefinition), - required: types.uint, - reward: types.nullable(types.enum(enumHubGoalRewards)), - }), }; } - deserialize(data) { + /** + * + * @param {*} data + * @param {GameRoot} root + */ + deserialize(data, root) { const errorCode = super.deserialize(data); if (errorCode) { return errorCode; } + 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) { @@ -53,15 +61,7 @@ export class HubGoals extends BasicSerializableObject { } // Compute current goal - const goal = tutorialGoals[this.level - 1]; - if (goal) { - this.currentGoal = { - /** @type {ShapeDefinition} */ - definition: this.root.shapeDefinitionMgr.getShapeFromShortKey(goal.shape), - required: goal.required, - reward: goal.reward, - }; - } + this.computeNextGoal(); } /** @@ -97,11 +97,15 @@ export class HubGoals extends BasicSerializableObject { * @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; } - this.createNextGoal(); + this.computeNextGoal(); // Allow quickly switching goals in dev mode if (G_IS_DEV) { @@ -109,13 +113,26 @@ export class HubGoals extends BasicSerializableObject { if (ev.key === "b") { // root is not guaranteed to exist within ~0.5s after loading in if (this.root && this.root.app && this.root.app.gameAnalytics) { - this.onGoalCompleted(); + if (!this.isEndOfDemoReached()) { + this.onGoalCompleted(); + } } } }); } } + /** + * Returns whether the end of the demo is reached + * @returns {boolean} + */ + isEndOfDemoReached() { + return ( + !this.root.gameMode.getIsFreeplayAvailable() && + this.level >= this.root.gameMode.getLevelDefinitions().length + ); + } + /** * Returns how much of the current shape is stored * @param {ShapeDefinition} definition @@ -150,6 +167,15 @@ export class HubGoals extends BasicSerializableObject { * Returns how much of the current goal was already delivered */ getCurrentGoalDelivered() { + if (this.currentGoal.throughputOnly) { + return ( + this.root.productionAnalytics.getCurrentShapeRate( + enumAnalyticsDataSource.delivered, + this.currentGoal.definition + ) / globalConfig.analyticsSliceDurationSeconds + ); + } + return this.getShapesStored(this.currentGoal.definition); } @@ -184,36 +210,40 @@ export class HubGoals extends BasicSerializableObject { this.root.signals.shapeDelivered.dispatch(definition); // Check if we have enough for the next level - const targetHash = this.currentGoal.definition.getHash(); if ( - this.storedShapes[targetHash] >= this.currentGoal.required || + this.getCurrentGoalDelivered() >= this.currentGoal.required || (G_IS_DEV && globalConfig.debug.rewardsInstant) ) { - this.onGoalCompleted(); + if (!this.isEndOfDemoReached()) { + this.onGoalCompleted(); + } } } /** * Creates the next goal */ - createNextGoal() { + computeNextGoal() { const storyIndex = this.level - 1; - if (storyIndex < tutorialGoals.length) { - const { shape, required, reward } = 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), required, reward, + throughputOnly, }; return; } + const required = Math.min(200, 4 + (this.level - 27) * 0.25); this.currentGoal = { - /** @type {ShapeDefinition} */ - definition: this.createRandomShape(), - required: findNiceIntegerValue(1000 + Math.pow(this.level * 2000, 0.8)), + definition: this.computeFreeplayShape(this.level), + required, reward: enumHubGoalRewards.no_reward_freeplay, + throughputOnly: true, }; } @@ -226,7 +256,7 @@ export class HubGoals extends BasicSerializableObject { this.root.app.gameAnalytics.handleLevelCompleted(this.level); ++this.level; - this.createNextGoal(); + this.computeNextGoal(); this.root.signals.storyGoalCompleted.dispatch(this.level - 1, reward); } @@ -235,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; } /** @@ -243,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) { @@ -272,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; } @@ -290,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]; @@ -320,15 +350,85 @@ export class HubGoals extends BasicSerializableObject { } /** + * Picks random colors which are close to each other + * @param {RandomNumberGenerator} rng + */ + generateRandomColorSet(rng, allowUncolored = false) { + const colorWheel = [ + enumColors.red, + enumColors.yellow, + enumColors.green, + enumColors.cyan, + enumColors.blue, + enumColors.purple, + enumColors.red, + enumColors.yellow, + ]; + + const universalColors = [enumColors.white]; + if (allowUncolored) { + universalColors.push(enumColors.uncolored); + } + const index = rng.nextIntRange(0, colorWheel.length - 2); + const pickedColors = colorWheel.slice(index, index + 3); + pickedColors.push(rng.choice(universalColors)); + return pickedColors; + } + + /** + * Creates a (seeded) random shape + * @param {number} level * @returns {ShapeDefinition} */ - createRandomShape() { + computeFreeplayShape(level) { const layerCount = clamp(this.level / 25, 2, 4); + /** @type {Array} */ let layers = []; - const randomColor = () => randomChoice(Object.values(enumColors)); - const randomShape = () => randomChoice(Object.values(enumSubShape)); + const rng = new RandomNumberGenerator(this.root.map.seed + "/" + level); + + const colors = this.generateRandomColorSet(rng, level > 35); + + let pickedSymmetry = null; // pairs of quadrants that must be the same + let availableShapes = [enumSubShape.rect, enumSubShape.circle, enumSubShape.star]; + if (rng.next() < 0.5) { + pickedSymmetry = [ + // radial symmetry + [0, 2], + [1, 3], + ]; + availableShapes.push(enumSubShape.windmill); // windmill looks good only in radial symmetry + } else { + const symmetries = [ + [ + // horizontal axis + [0, 3], + [1, 2], + ], + [ + // vertical axis + [0, 1], + [2, 3], + ], + [ + // diagonal axis + [0, 2], + [1], + [3], + ], + [ + // other diagonal axis + [1, 3], + [0], + [2], + ], + ]; + pickedSymmetry = rng.choice(symmetries); + } + + const randomColor = () => rng.choice(colors); + const randomShape = () => rng.choice(Object.values(enumSubShape)); let anyIsMissingTwo = false; @@ -336,23 +436,24 @@ export class HubGoals extends BasicSerializableObject { /** @type {import("./shape_definition").ShapeLayer} */ const layer = [null, null, null, null]; - for (let quad = 0; quad < 4; ++quad) { - layer[quad] = { - subShape: randomShape(), - color: randomColor(), - }; - } - - // Sometimes shapes are missing - if (Math.random() > 0.85) { - layer[randomInt(0, 3)] = null; + for (let j = 0; j < pickedSymmetry.length; ++j) { + const group = pickedSymmetry[j]; + const shape = randomShape(); + const color = randomColor(); + for (let k = 0; k < group.length; ++k) { + const quad = group[k]; + layer[quad] = { + subShape: shape, + color, + }; + } } // Sometimes they actually are missing *two* ones! // Make sure at max only one layer is missing it though, otherwise we could // create an uncreateable shape - if (Math.random() > 0.95 && !anyIsMissingTwo) { - layer[randomInt(0, 3)] = null; + if (level > 75 && rng.next() > 0.95 && !anyIsMissingTwo) { + layer[rng.nextIntRange(0, 4)] = null; anyIsMissingTwo = true; } diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 978fc9f9..6e884ef3 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,6 +45,9 @@ import { HUDLeverToggle } from "./parts/lever_toggle"; import { HUDLayerPreview } from "./parts/layer_preview"; import { HUDMinerHighlight } from "./parts/miner_highlight"; import { Entity } from "../entity"; +import { HUDBetaOverlay } from "./parts/beta_overlay"; +import { HUDStandaloneAdvantages } from "./parts/standalone_advantages"; +import { HUDCatMemes } from "./parts/cat_memes"; export class GameHUD { /** @@ -76,7 +79,6 @@ export class GameHUD { pinnedShapes: new HUDPinnedShapes(this.root), notifications: new HUDNotifications(this.root), settingsMenu: new HUDSettingsMenu(this.root), - // betaOverlay: new HUDBetaOverlay(this.root), debugInfo: new HUDDebugInfo(this.root), dialogs: new HUDModalDialogs(this.root), screenshotExporter: new HUDScreenshotExporter(this.root), @@ -113,8 +115,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) { @@ -138,6 +142,10 @@ export class GameHUD { this.parts.sandboxController = new HUDSandboxController(this.root); } + if (!G_IS_RELEASE && !G_IS_DEV) { + this.parts.betaOverlay = new HUDBetaOverlay(this.root); + } + const frag = document.createDocumentFragment(); for (const key in this.parts) { this.parts[key].createElements(frag); diff --git a/src/js/game/hud/parts/beta_overlay.js b/src/js/game/hud/parts/beta_overlay.js index 517a15b7..3a515d29 100644 --- a/src/js/game/hud/parts/beta_overlay.js +++ b/src/js/game/hud/parts/beta_overlay.js @@ -3,7 +3,12 @@ import { makeDiv } from "../../../core/utils"; export class HUDBetaOverlay extends BaseHUDPart { createElements(parent) { - this.element = makeDiv(parent, "ingame_HUD_BetaOverlay", [], "CLOSED BETA"); + this.element = makeDiv( + parent, + "ingame_HUD_BetaOverlay", + [], + "

UNSTABLE BETA VERSION

Unfinalized & potential buggy content!" + ); } initialize() {} diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index d88fbf94..92f5a0cb 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -6,7 +6,6 @@ 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"; @@ -15,7 +14,9 @@ import { Entity } from "../../entity"; export class HUDBlueprintPlacer extends BaseHUDPart { createElements(parent) { - const blueprintCostShape = this.root.shapeDefinitionMgr.getShapeFromShortKey(blueprintShape); + const blueprintCostShape = this.root.shapeDefinitionMgr.getShapeFromShortKey( + this.root.gameMode.getBlueprintShapeKey() + ); const blueprintCostShapeCanvas = blueprintCostShape.generateAsCanvas(80); this.costDisplayParent = makeDiv(parent, "ingame_HUD_BlueprintPlacer", [], ``); @@ -124,7 +125,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { const tile = worldPos.toTileSpace(); if (blueprint.tryPlace(this.root, tile)) { const cost = blueprint.getCost(); - this.root.hubGoals.takeShapeByKey(blueprintShape, cost); + this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost); this.root.soundProxy.playUi(SOUNDS.placeBuilding); } } diff --git a/src/js/game/hud/parts/building_placer_logic.js b/src/js/game/hud/parts/building_placer_logic.js index d5f69277..4f3a0570 100644 --- a/src/js/game/hud/parts/building_placer_logic.js +++ b/src/js/game/hud/parts/building_placer_logic.js @@ -334,7 +334,11 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart { const tileBelow = this.root.map.getLowerLayerContentXY(tile.x, tile.y); // Check if there's a shape or color item below, if so select the miner - if (tileBelow && this.root.app.settings.getAllSettings().pickMinerOnPatch) { + if ( + tileBelow && + this.root.app.settings.getAllSettings().pickMinerOnPatch && + this.root.currentLayer === "regular" + ) { this.currentMetaBuilding.set(gMetaBuildingRegistry.findByClass(MetaMinerBuilding)); // Select chained miner if available, since that's always desired once unlocked diff --git a/src/js/game/hud/parts/buildings_toolbar.js b/src/js/game/hud/parts/buildings_toolbar.js index b40429dc..05ffc795 100644 --- a/src/js/game/hud/parts/buildings_toolbar.js +++ b/src/js/game/hud/parts/buildings_toolbar.js @@ -14,6 +14,8 @@ import { MetaTrashBuilding } from "../../buildings/trash"; import { MetaUndergroundBeltBuilding } from "../../buildings/underground_belt"; import { HUDBaseToolbar } from "./base_toolbar"; import { MetaStorageBuilding } from "../../buildings/storage"; +import { MetaItemProducerBuilding } from "../../buildings/item_producer"; +import { queryParamOptions } from "../../../core/query_parameters"; export class HUDBuildingsToolbar extends HUDBaseToolbar { constructor(root) { @@ -29,6 +31,7 @@ export class HUDBuildingsToolbar extends HUDBaseToolbar { MetaMixerBuilding, MetaPainterBuilding, MetaTrashBuilding, + ...(queryParamOptions.sandboxMode || G_IS_DEV ? [MetaItemProducerBuilding] : []), ], secondaryBuildings: [ MetaStorageBuilding, @@ -39,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/interactive_tutorial.js b/src/js/game/hud/parts/interactive_tutorial.js index ffebc639..e48a77fb 100644 --- a/src/js/game/hud/parts/interactive_tutorial.js +++ b/src/js/game/hud/parts/interactive_tutorial.js @@ -6,23 +6,25 @@ import { DynamicDomAttach } from "../dynamic_dom_attach"; import { TrackedState } from "../../../core/tracked_state"; import { cachebust } from "../../../core/cachebust"; import { T } from "../../../translations"; +import { enumItemProcessorTypes, ItemProcessorComponent } from "../../components/item_processor"; +import { ShapeItem } from "../../items/shape_item"; +import { WireComponent } from "../../components/wire"; +import { LeverComponent } from "../../components/lever"; +// @todo: Make dictionary const tutorialsByLevel = [ // Level 1 [ // 1.1. place an extractor { id: "1_1_extractor", - condition: /** @param {GameRoot} root */ root => { - return root.entityMgr.getAllWithComponent(MinerComponent).length === 0; - }, + condition: /** @param {GameRoot} root */ root => + root.entityMgr.getAllWithComponent(MinerComponent).length === 0, }, // 1.2. connect to hub { id: "1_2_conveyor", - condition: /** @param {GameRoot} root */ root => { - return root.hubGoals.getCurrentGoalDelivered() === 0; - }, + condition: /** @param {GameRoot} root */ root => root.hubGoals.getCurrentGoalDelivered() === 0, }, // 1.3 wait for completion { @@ -30,6 +32,108 @@ const tutorialsByLevel = [ condition: () => true, }, ], + // Level 2 + [ + // 2.1 place a cutter + { + id: "2_1_place_cutter", + condition: /** @param {GameRoot} root */ root => + root.entityMgr + .getAllWithComponent(ItemProcessorComponent) + .filter(e => e.components.ItemProcessor.type === enumItemProcessorTypes.cutter).length === + 0, + }, + // 2.2 place trash + { + id: "2_2_place_trash", + condition: /** @param {GameRoot} root */ root => + root.entityMgr + .getAllWithComponent(ItemProcessorComponent) + .filter(e => e.components.ItemProcessor.type === enumItemProcessorTypes.trash).length === + 0, + }, + // 2.3 place more cutters + { + id: "2_3_more_cutters", + condition: /** @param {GameRoot} root */ root => + root.entityMgr + .getAllWithComponent(ItemProcessorComponent) + .filter(e => e.components.ItemProcessor.type === enumItemProcessorTypes.cutter).length < + 3, + }, + ], + + // Level 3 + [ + // 3.1. rectangles + { + id: "3_1_rectangles", + condition: /** @param {GameRoot} root */ root => + // 4 miners placed above rectangles and 10 delivered + root.hubGoals.getCurrentGoalDelivered() < 10 || + root.entityMgr.getAllWithComponent(MinerComponent).filter(entity => { + const tile = entity.components.StaticMapEntity.origin; + const below = root.map.getLowerLayerContentXY(tile.x, tile.y); + if (below && below.getItemType() === "shape") { + const shape = /** @type {ShapeItem} */ (below).definition.getHash(); + return shape === "RuRuRuRu"; + } + return false; + }).length < 4, + }, + ], + + [], // Level 4 + [], // Level 5 + [], // Level 6 + [], // Level 7 + [], // Level 8 + [], // Level 9 + [], // Level 10 + [], // Level 11 + [], // Level 12 + [], // Level 13 + [], // Level 14 + [], // Level 15 + [], // Level 16 + [], // Level 17 + [], // Level 18 + [], // Level 19 + [], // Level 20 + + // Level 21 + [ + // 21.1 place quad painter + { + id: "21_1_place_quad_painter", + condition: /** @param {GameRoot} root */ root => + root.entityMgr + .getAllWithComponent(ItemProcessorComponent) + .filter(e => e.components.ItemProcessor.type === enumItemProcessorTypes.painterQuad) + .length === 0, + }, + + // 21.2 switch to wires layer + { + id: "21_2_switch_to_wires", + condition: /** @param {GameRoot} root */ root => + root.entityMgr.getAllWithComponent(WireComponent).length < 5, + }, + + // 21.3 place button + { + id: "21_3_place_button", + condition: /** @param {GameRoot} root */ root => + root.entityMgr.getAllWithComponent(LeverComponent).length === 0, + }, + + // 21.4 activate button + { + id: "21_4_press_button", + condition: /** @param {GameRoot} root */ root => + root.entityMgr.getAllWithComponent(LeverComponent).some(e => !e.components.Lever.toggled), + }, + ], ]; export class HUDInteractiveTutorial extends BaseHUDPart { diff --git a/src/js/game/hud/parts/keybinding_overlay.js b/src/js/game/hud/parts/keybinding_overlay.js index 2a50e3fe..65919d3c 100644 --- a/src/js/game/hud/parts/keybinding_overlay.js +++ b/src/js/game/hud/parts/keybinding_overlay.js @@ -259,7 +259,7 @@ export class HUDKeybindingOverlay extends BaseHUDPart { label: T.ingame.keybindingsOverlay.switchLayers, keys: [k.ingame.switchLayers], condition: () => - this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers), + this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers), }, ]; diff --git a/src/js/game/hud/parts/modal_dialogs.js b/src/js/game/hud/parts/modal_dialogs.js index 06993616..263b23dd 100644 --- a/src/js/game/hud/parts/modal_dialogs.js +++ b/src/js/game/hud/parts/modal_dialogs.js @@ -122,7 +122,7 @@ export class HUDModalDialogs extends BaseHUDPart { dialog.buttonSignals.getStandalone.add(() => { this.app.analytics.trackUiClick("demo_dialog_click"); - window.open(THIRDPARTY_URLS.standaloneStorePage); + window.open(THIRDPARTY_URLS.standaloneStorePage + "?ref=ddc"); }); return dialog.buttonSignals; diff --git a/src/js/game/hud/parts/pinned_shapes.js b/src/js/game/hud/parts/pinned_shapes.js index c54554bf..542a38b2 100644 --- a/src/js/game/hud/parts/pinned_shapes.js +++ b/src/js/game/hud/parts/pinned_shapes.js @@ -1,9 +1,11 @@ import { ClickDetector } from "../../../core/click_detector"; -import { formatBigNumber, makeDiv, arrayDeleteValue } from "../../../core/utils"; +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 { BaseHUDPart } from "../base_hud_part"; -import { blueprintShape, UPGRADES } from "../../upgrades"; import { enumHubGoalRewards } from "../../tutorial_goals"; +import { BaseHUDPart } from "../base_hud_part"; /** * Manages the pinned shapes on the left side of the screen @@ -22,11 +24,13 @@ export class HUDPinnedShapes extends BaseHUDPart { * convenient. Also allows for cleaning up handles. * @type {Array<{ * key: string, + * definition: ShapeDefinition, * amountLabel: HTMLElement, * lastRenderedValue: string, * element: HTMLElement, * detector?: ClickDetector, - * infoDetector?: ClickDetector + * infoDetector?: ClickDetector, + * throughputOnly?: boolean * }>} */ this.handles = []; @@ -77,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; } @@ -102,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]; @@ -133,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; } @@ -163,29 +171,40 @@ export class HUDPinnedShapes extends BaseHUDPart { this.handles = []; // Pin story goal - this.internalPinShape(currentKey, false, "goal"); + this.internalPinShape({ + key: currentKey, + canUnpin: false, + className: "goal", + throughputOnly: currentGoal.throughputOnly, + }); // Pin blueprint shape as well if (this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_blueprints)) { - this.internalPinShape(blueprintShape, false, "blueprint"); + this.internalPinShape({ + key: this.root.gameMode.getBlueprintShapeKey(), + canUnpin: false, + className: "blueprint", + }); } // Pin manually pinned shapes for (let i = 0; i < this.pinnedShapes.length; ++i) { const key = this.pinnedShapes[i]; if (key !== currentKey) { - this.internalPinShape(key); + this.internalPinShape({ key }); } } } /** * Pins a new shape - * @param {string} key - * @param {boolean} canUnpin - * @param {string=} className + * @param {object} param0 + * @param {string} param0.key + * @param {boolean=} param0.canUnpin + * @param {string=} param0.className + * @param {boolean=} param0.throughputOnly */ - internalPinShape(key, canUnpin = true, className = null) { + internalPinShape({ key, canUnpin = true, className = null, throughputOnly = false }) { const definition = this.root.shapeDefinitionMgr.getShapeFromShortKey(key); const element = makeDiv(this.element, null, ["shape"]); @@ -198,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 { @@ -229,11 +248,13 @@ export class HUDPinnedShapes extends BaseHUDPart { this.handles.push({ key, + definition, element, amountLabel, lastRenderedValue: "", detector, infoDetector, + throughputOnly, }); } @@ -244,8 +265,21 @@ export class HUDPinnedShapes extends BaseHUDPart { for (let i = 0; i < this.handles.length; ++i) { const handle = this.handles[i]; - const currentValue = this.root.hubGoals.getShapesStoredByKey(handle.key); - const currentValueFormatted = formatBigNumber(currentValue); + let currentValue = this.root.hubGoals.getShapesStoredByKey(handle.key); + let currentValueFormatted = formatBigNumber(currentValue); + + if (handle.throughputOnly) { + currentValue = + this.root.productionAnalytics.getCurrentShapeRate( + enumAnalyticsDataSource.delivered, + handle.definition + ) / globalConfig.analyticsSliceDurationSeconds; + currentValueFormatted = T.ingame.statistics.shapesDisplayUnits.second.replace( + "", + String(currentValue) + ); + } + if (currentValueFormatted !== handle.lastRenderedValue) { handle.lastRenderedValue = currentValueFormatted; handle.amountLabel.innerText = currentValueFormatted; @@ -260,6 +294,7 @@ export class HUDPinnedShapes extends BaseHUDPart { * @param {string} key */ unpinShape(key) { + console.log("unpin", key); arrayDeleteValue(this.pinnedShapes, key); this.rerenderFull(); } @@ -275,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 c382cf84..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( @@ -113,7 +112,7 @@ export class HUDSandboxController extends BaseHUDPart { modifyLevel(amount) { const hubGoals = this.root.hubGoals; hubGoals.level = Math.max(1, hubGoals.level + amount); - hubGoals.createNextGoal(); + hubGoals.computeNextGoal(); // Clear all shapes of this level hubGoals.storedShapes[hubGoals.currentGoal.definition.getHash()] = 0; @@ -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 31afe348..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"); @@ -88,13 +88,8 @@ export class HUDSettingsMenu extends BaseHUDPart { this.close(); } - cleanup() { - document.body.classList.remove("ingameDialogOpen"); - } - show() { this.visible = true; - document.body.classList.add("ingameDialogOpen"); this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); const totalMinutesPlayed = Math.ceil(this.root.time.now() / 60); @@ -120,7 +115,6 @@ export class HUDSettingsMenu extends BaseHUDPart { close() { this.visible = false; - document.body.classList.remove("ingameDialogOpen"); this.root.app.inputMgr.makeSureDetached(this.inputReciever); this.update(); } diff --git a/src/js/game/hud/parts/shape_viewer.js b/src/js/game/hud/parts/shape_viewer.js index 18f55c74..a7f5d206 100644 --- a/src/js/game/hud/parts/shape_viewer.js +++ b/src/js/game/hud/parts/shape_viewer.js @@ -67,7 +67,6 @@ export class HUDShapeViewer extends BaseHUDPart { */ close() { this.visible = false; - document.body.classList.remove("ingameDialogOpen"); this.root.app.inputMgr.makeSureDetached(this.inputReciever); this.update(); } @@ -78,7 +77,6 @@ export class HUDShapeViewer extends BaseHUDPart { */ renderForShape(definition) { this.visible = true; - document.body.classList.add("ingameDialogOpen"); this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); removeAllChildren(this.renderArea); @@ -124,13 +122,6 @@ export class HUDShapeViewer extends BaseHUDPart { } } - /** - * Cleans up everything - */ - cleanup() { - document.body.classList.remove("ingameDialogOpen"); - } - update() { this.domAttach.update(this.visible); } diff --git a/src/js/game/hud/parts/shop.js b/src/js/game/hud/parts/shop.js index cfa78c29..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); @@ -90,17 +89,15 @@ export class HUDShop extends BaseHUDPart { // Max level handle.elemDescription.innerText = T.ingame.shop.maximumLevel.replace( "", - currentTierMultiplier.toString() + formatBigNumber(currentTierMultiplier) ); continue; } // Set description handle.elemDescription.innerText = T.shopUpgrades[upgradeId].description - .replace("", currentTierMultiplier.toString()) - .replace("", (currentTierMultiplier + tierHandle.improvement).toString()) - // Backwards compatibility - .replace("", (tierHandle.improvement * 100.0).toString()); + .replace("", formatBigNumber(currentTierMultiplier)) + .replace("", formatBigNumber(currentTierMultiplier + tierHandle.improvement)); tierHandle.required.forEach(({ shape, amount }) => { const container = makeDiv(handle.elemRequirements, null, ["requirement"]); @@ -207,8 +204,6 @@ export class HUDShop extends BaseHUDPart { } cleanup() { - document.body.classList.remove("ingameDialogOpen"); - // Cleanup detectors for (const upgradeId in this.upgradeToElements) { const handle = this.upgradeToElements[upgradeId]; @@ -224,15 +219,12 @@ export class HUDShop extends BaseHUDPart { show() { this.visible = true; - document.body.classList.add("ingameDialogOpen"); - // this.background.classList.add("visible"); this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); this.rerenderFull(); } close() { this.visible = false; - document.body.classList.remove("ingameDialogOpen"); this.root.app.inputMgr.makeSureDetached(this.inputReciever); this.update(); } diff --git a/src/js/game/hud/parts/standalone_advantages.js b/src/js/game/hud/parts/standalone_advantages.js new file mode 100644 index 00000000..4e39e005 --- /dev/null +++ b/src/js/game/hud/parts/standalone_advantages.js @@ -0,0 +1,85 @@ +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"; +import { BaseHUDPart } from "../base_hud_part"; +import { DynamicDomAttach } from "../dynamic_dom_attach"; + +const showIntervalSeconds = 30 * 60; + +export class HUDStandaloneAdvantages extends BaseHUDPart { + createElements(parent) { + this.background = makeDiv(parent, "ingame_HUD_StandaloneAdvantages", ["ingameDialog"]); + + // DIALOG Inner / Wrapper + this.dialogInner = makeDiv(this.background, null, ["dialogInner"]); + this.title = makeDiv(this.dialogInner, null, ["title"], T.ingame.standaloneAdvantages.title); + this.contentDiv = makeDiv( + this.dialogInner, + null, + ["content"], + ` +
+ ${Object.entries(T.ingame.standaloneAdvantages.points) + .map( + ([key, trans]) => ` +
+ ${trans.title} +

${trans.desc}

+
` + ) + .join("")} + +
+ +
+ + +
+ ` + ); + + 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&prc=" + A_B_TESTING_LINK_TYPE + ); + this.close(); + }); + this.trackClicks(this.contentDiv.querySelector("button.otherCloseButton"), () => { + this.root.app.analytics.trackUiClick("standalone_advantage_no_thanks"); + this.close(); + }); + } + + initialize() { + this.domAttach = new DynamicDomAttach(this.root, this.background, { + attachClass: "visible", + }); + + this.inputReciever = new InputReceiver("standalone-advantages"); + this.close(); + + this.lastShown = this.root.gameIsFresh ? this.root.time.now() : 0; + } + + show() { + this.lastShown = this.root.time.now(); + this.visible = true; + this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); + } + + close() { + this.visible = false; + this.root.app.inputMgr.makeSureDetached(this.inputReciever); + this.update(); + } + + update() { + if (!this.visible && this.root.time.now() - this.lastShown > showIntervalSeconds) { + this.show(); + } + + this.domAttach.update(this.visible); + } +} diff --git a/src/js/game/hud/parts/statistics.js b/src/js/game/hud/parts/statistics.js index 910c49d0..a28ed288 100644 --- a/src/js/game/hud/parts/statistics.js +++ b/src/js/game/hud/parts/statistics.js @@ -151,17 +151,12 @@ export class HUDStatistics extends BaseHUDPart { } } - cleanup() { - document.body.classList.remove("ingameDialogOpen"); - } - isBlockingOverlay() { return this.visible; } show() { this.visible = true; - document.body.classList.add("ingameDialogOpen"); this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); this.rerenderFull(); this.update(); @@ -169,7 +164,6 @@ export class HUDStatistics extends BaseHUDPart { close() { this.visible = false; - document.body.classList.remove("ingameDialogOpen"); this.root.app.inputMgr.makeSureDetached(this.inputReciever); this.update(); } diff --git a/src/js/game/hud/parts/tutorial_hints.js b/src/js/game/hud/parts/tutorial_hints.js index 428923d0..c9499f85 100644 --- a/src/js/game/hud/parts/tutorial_hints.js +++ b/src/js/game/hud/parts/tutorial_hints.js @@ -1,109 +1,106 @@ -import { InputReceiver } from "../../../core/input_receiver"; -import { TrackedState } from "../../../core/tracked_state"; -import { makeDiv } from "../../../core/utils"; -import { KeyActionMapper, KEYMAPPINGS } from "../../key_action_mapper"; -import { BaseHUDPart } from "../base_hud_part"; -import { DynamicDomAttach } from "../dynamic_dom_attach"; -import { T } from "../../../translations"; - -const tutorialVideos = [2, 3, 4, 5, 6, 7, 9, 10, 11]; - -export class HUDPartTutorialHints extends BaseHUDPart { - createElements(parent) { - this.element = makeDiv( - parent, - "ingame_HUD_TutorialHints", - [], - ` -
- ${T.ingame.tutorialHints.title} - -
- - - ` - ); - - this.videoElement = this.element.querySelector("video"); - } - - shouldPauseGame() { - return this.enlarged; - } - - initialize() { - this.trackClicks(this.element.querySelector(".toggleHint"), this.toggleHintEnlarged); - - this.videoAttach = new DynamicDomAttach(this.root, this.videoElement, { - timeToKeepSeconds: 0.3, - }); - - this.videoAttach.update(false); - this.enlarged = false; - - this.inputReciever = new InputReceiver("tutorial_hints"); - this.keyActionMapper = new KeyActionMapper(this.root, this.inputReciever); - this.keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.close, this); - - this.domAttach = new DynamicDomAttach(this.root, this.element); - - this.currentShownLevel = new TrackedState(this.updateVideoUrl, this); - } - - updateVideoUrl(level) { - if (tutorialVideos.indexOf(level) < 0) { - this.videoElement.querySelector("source").setAttribute("src", ""); - this.videoElement.pause(); - } else { - this.videoElement - .querySelector("source") - .setAttribute("src", "https://static.shapez.io/tutorial_videos/level_" + level + ".webm"); - this.videoElement.currentTime = 0; - this.videoElement.load(); - } - } - - close() { - this.enlarged = false; - document.body.classList.remove("ingameDialogOpen"); - this.element.classList.remove("enlarged", "noBlur"); - this.root.app.inputMgr.makeSureDetached(this.inputReciever); - this.update(); - } - - show() { - this.root.app.analytics.trackUiClick("tutorial_hint_show"); - this.root.app.analytics.trackUiClick("tutorial_hint_show_lvl_" + this.root.hubGoals.level); - - document.body.classList.add("ingameDialogOpen"); - this.element.classList.add("enlarged", "noBlur"); - this.enlarged = true; - this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); - this.update(); - - this.videoElement.currentTime = 0; - this.videoElement.play(); - } - - update() { - this.videoAttach.update(this.enlarged); - - this.currentShownLevel.set(this.root.hubGoals.level); - - const tutorialVisible = tutorialVideos.indexOf(this.root.hubGoals.level) >= 0; - this.domAttach.update(tutorialVisible); - } - - toggleHintEnlarged() { - if (this.enlarged) { - this.close(); - } else { - this.show(); - } - } -} +import { InputReceiver } from "../../../core/input_receiver"; +import { TrackedState } from "../../../core/tracked_state"; +import { makeDiv } from "../../../core/utils"; +import { KeyActionMapper, KEYMAPPINGS } from "../../key_action_mapper"; +import { BaseHUDPart } from "../base_hud_part"; +import { DynamicDomAttach } from "../dynamic_dom_attach"; +import { T } from "../../../translations"; + +const tutorialVideos = [2, 3, 4, 5, 6, 7, 9, 10, 11]; + +export class HUDPartTutorialHints extends BaseHUDPart { + createElements(parent) { + this.element = makeDiv( + parent, + "ingame_HUD_TutorialHints", + [], + ` +
+ ${T.ingame.tutorialHints.title} + +
+ + + ` + ); + + this.videoElement = this.element.querySelector("video"); + } + + shouldPauseGame() { + return this.enlarged; + } + + initialize() { + this.trackClicks(this.element.querySelector(".toggleHint"), this.toggleHintEnlarged); + + this.videoAttach = new DynamicDomAttach(this.root, this.videoElement, { + timeToKeepSeconds: 0.3, + }); + + this.videoAttach.update(false); + this.enlarged = false; + + this.inputReciever = new InputReceiver("tutorial_hints"); + this.keyActionMapper = new KeyActionMapper(this.root, this.inputReciever); + this.keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.close, this); + + this.domAttach = new DynamicDomAttach(this.root, this.element); + + this.currentShownLevel = new TrackedState(this.updateVideoUrl, this); + } + + updateVideoUrl(level) { + if (tutorialVideos.indexOf(level) < 0) { + this.videoElement.querySelector("source").setAttribute("src", ""); + this.videoElement.pause(); + } else { + this.videoElement + .querySelector("source") + .setAttribute("src", "https://static.shapez.io/tutorial_videos/level_" + level + ".webm"); + this.videoElement.currentTime = 0; + this.videoElement.load(); + } + } + + close() { + this.enlarged = false; + this.element.classList.remove("enlarged", "noBlur"); + this.root.app.inputMgr.makeSureDetached(this.inputReciever); + this.update(); + } + + show() { + this.root.app.analytics.trackUiClick("tutorial_hint_show"); + this.root.app.analytics.trackUiClick("tutorial_hint_show_lvl_" + this.root.hubGoals.level); + this.element.classList.add("enlarged", "noBlur"); + this.enlarged = true; + this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); + this.update(); + + this.videoElement.currentTime = 0; + this.videoElement.play(); + } + + update() { + this.videoAttach.update(this.enlarged); + + this.currentShownLevel.set(this.root.hubGoals.level); + + const tutorialVisible = tutorialVideos.indexOf(this.root.hubGoals.level) >= 0; + this.domAttach.update(tutorialVisible); + } + + toggleHintEnlarged() { + if (this.enlarged) { + this.close(); + } else { + this.show(); + } + } +} diff --git a/src/js/game/hud/parts/unlock_notification.js b/src/js/game/hud/parts/unlock_notification.js index d88e2dbb..5fa0e3e2 100644 --- a/src/js/game/hud/parts/unlock_notification.js +++ b/src/js/game/hud/parts/unlock_notification.js @@ -1,14 +1,15 @@ 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 } 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 { initialize() { @@ -50,6 +51,18 @@ export class HUDUnlockNotification extends BaseHUDPart { * @param {enumHubGoalRewards} reward */ showForLevel(level, reward) { + this.root.soundProxy.playUi(SOUNDS.levelComplete); + + 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 + ); + return; + } + this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); this.elemTitle.innerText = T.ingame.levelCompleteNotification.levelTitle.replace( "", @@ -83,7 +96,6 @@ export class HUDUnlockNotification extends BaseHUDPart { this.elemContents.innerHTML = html; this.visible = true; - this.root.soundProxy.playUi(SOUNDS.levelComplete); if (this.buttonShowTimeout) { clearTimeout(this.buttonShowTimeout); diff --git a/src/js/game/hud/parts/watermark.js b/src/js/game/hud/parts/watermark.js index d10bc07c..4a75ea76 100644 --- a/src/js/game/hud/parts/watermark.js +++ b/src/js/game/hud/parts/watermark.js @@ -1,44 +1,72 @@ -import { BaseHUDPart } from "../base_hud_part"; -import { DrawParameters } from "../../../core/draw_parameters"; -import { makeDiv } from "../../../core/utils"; -import { THIRDPARTY_URLS } from "../../../core/config"; -import { T } from "../../../translations"; - -export class HUDWatermark extends BaseHUDPart { - createElements(parent) { - this.element = makeDiv(parent, "ingame_HUD_Watermark"); - } - - initialize() { - this.trackClicks(this.element, this.onWatermarkClick); - } - - onWatermarkClick() { - this.root.app.analytics.trackUiClick("watermark_click_2"); - this.root.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage); - } - - /** - * - * @param {DrawParameters} parameters - */ - drawOverlays(parameters) { - const w = this.root.gameWidth; - const x = 280 * this.root.app.getEffectiveUiScale(); - - parameters.context.fillStyle = "#f77"; - parameters.context.font = "bold " + this.root.app.getEffectiveUiScale() * 17 + "px GameFont"; - // parameters.context.textAlign = "center"; - parameters.context.fillText( - T.demoBanners.title.toUpperCase(), - x, - this.root.app.getEffectiveUiScale() * 27 - ); - - parameters.context.font = "bold " + this.root.app.getEffectiveUiScale() * 12 + "px GameFont"; - // parameters.context.textAlign = "center"; - parameters.context.fillText(T.demoBanners.intro, x, this.root.app.getEffectiveUiScale() * 45); - - // parameters.context.textAlign = "left"; - } -} +import { THIRDPARTY_URLS } from "../../../core/config"; +import { makeDiv } from "../../../core/utils"; +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( + parent, + "ingame_HUD_Watermark", + [], + ` + ${T.ingame.watermark.title} +

${T.ingame.watermark.desc}

+ ` + ); + + this.linkElement = makeDiv( + parent, + "ingame_HUD_WatermarkClicker", + [], + T.ingame.watermark.get_on_steam + ); + this.trackClicks(this.linkElement, () => { + this.root.app.analytics.trackUiClick("watermark_click_2_direct"); + this.root.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage + "?ref=wtmd"); + }); + } + + initialize() { + this.trackClicks(this.element, this.onWatermarkClick); + + this.domAttach = new DynamicDomAttach(this.root, this.element, { + attachClass: "visible", + timeToKeepSeconds: 0.5, + }); + } + + update() { + this.domAttach.update( + this.root.time.realtimeNow() % watermarkShowIntervalSeconds < watermarkShowDuration + ); + } + + onWatermarkClick() { + this.root.app.analytics.trackUiClick("watermark_click_2_new"); + this.root.hud.parts.standaloneAdvantages.show(); + } + + /** + * + * @param {import("../../../core/draw_utils").DrawParameters} parameters + */ + drawOverlays(parameters) { + const w = this.root.gameWidth; + + parameters.context.fillStyle = "rgba(230, 230, 230, 0.9)"; + parameters.context.font = "bold " + this.root.app.getEffectiveUiScale() * 40 + "px GameFont"; + parameters.context.textAlign = "center"; + parameters.context.fillText( + T.demoBanners.title.toUpperCase(), + w / 2, + this.root.app.getEffectiveUiScale() * 50 + ); + + parameters.context.textAlign = "left"; + } +} diff --git a/src/js/game/hud/parts/waypoints.js b/src/js/game/hud/parts/waypoints.js index a585a4d1..a6f37b93 100644 --- a/src/js/game/hud/parts/waypoints.js +++ b/src/js/game/hud/parts/waypoints.js @@ -1,12 +1,18 @@ import { makeOffscreenBuffer } from "../../../core/buffer_utils"; -import { globalConfig, IS_DEMO } 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"; import { FormElementInput } from "../../../core/modal_dialog_forms"; import { Rectangle } from "../../../core/rectangle"; import { STOP_PROPAGATION } from "../../../core/signal"; -import { arrayDeleteValue, lerp, makeDiv, removeAllChildren } from "../../../core/utils"; +import { + arrayDeleteValue, + fillInLinkIntoTranslation, + lerp, + makeDiv, + removeAllChildren, +} from "../../../core/utils"; import { Vector } from "../../../core/vector"; import { T } from "../../../translations"; import { BaseItem } from "../../base_item"; @@ -272,7 +278,7 @@ export class HUDWaypoints extends BaseHUDPart { const dialog = new DialogWithForm({ app: this.root.app, title: waypoint ? T.dialogs.createMarker.titleEdit : T.dialogs.createMarker.title, - desc: T.dialogs.createMarker.desc, + desc: fillInLinkIntoTranslation(T.dialogs.createMarker.desc, THIRDPARTY_URLS.shapeViewer), formElements: [markerNameInput], buttons: waypoint ? ["delete:bad", "cancel", "ok:good"] : ["cancel", "ok:good"], }); @@ -296,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/hud/parts/wires_overlay.js b/src/js/game/hud/parts/wires_overlay.js index 7d856d5f..752d9cb3 100644 --- a/src/js/game/hud/parts/wires_overlay.js +++ b/src/js/game/hud/parts/wires_overlay.js @@ -1,13 +1,14 @@ import { makeOffscreenBuffer } from "../../../core/buffer_utils"; import { globalConfig } from "../../../core/config"; import { DrawParameters } from "../../../core/draw_parameters"; -import { KEYMAPPINGS } from "../../key_action_mapper"; -import { THEME } from "../../theme"; -import { BaseHUDPart } from "../base_hud_part"; import { Loader } from "../../../core/loader"; import { lerp } from "../../../core/utils"; +import { SOUNDS } from "../../../platform/sound"; +import { KEYMAPPINGS } from "../../key_action_mapper"; import { enumHubGoalRewards } from "../../tutorial_goals"; +import { BaseHUDPart } from "../base_hud_part"; +const copy = require("clipboard-copy"); const wiresBackgroundDpi = 4; export class HUDWiresOverlay extends BaseHUDPart { @@ -16,6 +17,7 @@ export class HUDWiresOverlay extends BaseHUDPart { initialize() { // Probably not the best location, but the one which makes most sense this.root.keyMapper.getBinding(KEYMAPPINGS.ingame.switchLayers).add(this.switchLayers, this); + this.root.keyMapper.getBinding(KEYMAPPINGS.placement.copyWireValue).add(this.copyWireValue, this); this.generateTilePattern(); @@ -27,7 +29,10 @@ export class HUDWiresOverlay extends BaseHUDPart { */ switchLayers() { if (this.root.currentLayer === "regular") { - if (this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_filters_and_levers)) { + if ( + this.root.hubGoals.isRewardUnlocked(enumHubGoalRewards.reward_wires_painter_and_levers) || + (G_IS_DEV && globalConfig.debug.allBuildingsUnlocked) + ) { this.root.currentLayer = "wires"; } } else { @@ -54,7 +59,53 @@ export class HUDWiresOverlay extends BaseHUDPart { update() { const desiredAlpha = this.root.currentLayer === "wires" ? 1.0 : 0.0; - this.currentAlpha = lerp(this.currentAlpha, desiredAlpha, 0.12); + + // On low performance, skip the fade + if (this.root.entityMgr.entities.length > 5000 || this.root.dynamicTickrate.averageFps < 50) { + this.currentAlpha = desiredAlpha; + } else { + this.currentAlpha = lerp(this.currentAlpha, desiredAlpha, 0.12); + } + } + + /** + * Copies the wires value below the cursor + */ + copyWireValue() { + if (this.root.currentLayer !== "wires") { + return; + } + + const mousePos = this.root.app.mousePosition; + if (!mousePos) { + return; + } + + const tile = this.root.camera.screenToWorld(mousePos).toTileSpace(); + const contents = this.root.map.getLayerContentXY(tile.x, tile.y, "wires"); + if (!contents) { + return; + } + + let value = null; + if (contents.components.Wire) { + const network = contents.components.Wire.linkedNetwork; + if (network && network.hasValue()) { + value = network.currentValue; + } + } + + if (contents.components.ConstantSignal) { + value = contents.components.ConstantSignal.signal; + } + + if (value) { + copy(value.getAsCopyableKey()); + this.root.soundProxy.playUi(SOUNDS.copy); + } else { + copy(""); + this.root.soundProxy.playUiError(); + } } /** diff --git a/src/js/game/hud/parts/wires_toolbar.js b/src/js/game/hud/parts/wires_toolbar.js index 2e43386d..5141bbeb 100644 --- a/src/js/game/hud/parts/wires_toolbar.js +++ b/src/js/game/hud/parts/wires_toolbar.js @@ -8,6 +8,10 @@ import { MetaVirtualProcessorBuilding } from "../../buildings/virtual_processor" import { MetaTransistorBuilding } from "../../buildings/transistor"; import { MetaAnalyzerBuilding } from "../../buildings/analyzer"; import { MetaComparatorBuilding } from "../../buildings/comparator"; +import { MetaReaderBuilding } from "../../buildings/reader"; +import { MetaFilterBuilding } from "../../buildings/filter"; +import { MetaDisplayBuilding } from "../../buildings/display"; +import { MetaStorageBuilding } from "../../buildings/storage"; export class HUDWiresToolbar extends HUDBaseToolbar { constructor(root) { @@ -16,12 +20,18 @@ export class HUDWiresToolbar extends HUDBaseToolbar { MetaWireBuilding, MetaWireTunnelBuilding, MetaConstantSignalBuilding, - MetaLeverBuilding, - MetaTransistorBuilding, MetaLogicGateBuilding, - MetaAnalyzerBuilding, MetaVirtualProcessorBuilding, + MetaAnalyzerBuilding, MetaComparatorBuilding, + MetaTransistorBuilding, + ], + secondaryBuildings: [ + MetaStorageBuilding, + MetaReaderBuilding, + MetaLeverBuilding, + MetaFilterBuilding, + MetaDisplayBuilding, ], visibilityCondition: () => !this.root.camera.getIsMapOverlayActive() && this.root.currentLayer === "wires", diff --git a/src/js/game/items/boolean_item.js b/src/js/game/items/boolean_item.js index 77e8bbb3..9ee3e3e5 100644 --- a/src/js/game/items/boolean_item.js +++ b/src/js/game/items/boolean_item.js @@ -26,6 +26,13 @@ export class BooleanItem extends BaseItem { return "boolean"; } + /** + * @returns {string} + */ + getAsCopyableKey() { + return this.value ? "1" : "0"; + } + /** * @param {number} value */ @@ -56,6 +63,21 @@ export class BooleanItem extends BaseItem { } sprite.drawCachedCentered(parameters, x, y, diameter); } + + /** + * Draws the item to a canvas + * @param {CanvasRenderingContext2D} context + * @param {number} size + */ + drawFullSizeOnCanvas(context, size) { + let sprite; + if (this.value) { + sprite = Loader.getSprite("sprites/wires/boolean_true.png"); + } else { + sprite = Loader.getSprite("sprites/wires/boolean_false.png"); + } + sprite.drawCentered(context, size / 2, size / 2, size); + } } export const BOOL_FALSE_SINGLETON = new BooleanItem(0); diff --git a/src/js/game/items/color_item.js b/src/js/game/items/color_item.js index 02104282..fb7f1701 100644 --- a/src/js/game/items/color_item.js +++ b/src/js/game/items/color_item.js @@ -28,6 +28,13 @@ export class ColorItem extends BaseItem { return "color"; } + /** + * @returns {string} + */ + getAsCopyableKey() { + return this.color; + } + /** * @param {BaseItem} other */ @@ -47,6 +54,18 @@ export class ColorItem extends BaseItem { return THEME.map.resources[this.color]; } + /** + * Draws the item to a canvas + * @param {CanvasRenderingContext2D} context + * @param {number} size + */ + drawFullSizeOnCanvas(context, size) { + if (!this.cachedSprite) { + this.cachedSprite = Loader.getSprite("sprites/colors/" + this.color + ".png"); + } + this.cachedSprite.drawCentered(context, size / 2, size / 2, size); + } + /** * @param {number} x * @param {number} y diff --git a/src/js/game/items/shape_item.js b/src/js/game/items/shape_item.js index d99a7251..d61b8f2e 100644 --- a/src/js/game/items/shape_item.js +++ b/src/js/game/items/shape_item.js @@ -1,62 +1,78 @@ -import { DrawParameters } from "../../core/draw_parameters"; -import { types } from "../../savegame/serialization"; -import { BaseItem } from "../base_item"; -import { ShapeDefinition } from "../shape_definition"; -import { THEME } from "../theme"; -import { globalConfig } from "../../core/config"; - -export class ShapeItem extends BaseItem { - static getId() { - return "shape"; - } - - static getSchema() { - return types.string; - } - - serialize() { - return this.definition.getHash(); - } - - deserialize(data) { - this.definition = ShapeDefinition.fromShortKey(data); - } - - /** @returns {"shape"} **/ - getItemType() { - return "shape"; - } - - /** - * @param {BaseItem} other - */ - equalsImpl(other) { - return this.definition.getHash() === /** @type {ShapeItem} */ (other).definition.getHash(); - } - - /** - * @param {ShapeDefinition} definition - */ - constructor(definition) { - super(); - - /** - * This property must not be modified on runtime, you have to clone the class in order to change the definition - */ - this.definition = definition; - } - - getBackgroundColorAsResource() { - return THEME.map.resources.shape; - } - - /** - * @param {number} x - * @param {number} y - * @param {DrawParameters} parameters - * @param {number=} diameter - */ - drawItemCenteredImpl(x, y, parameters, diameter = globalConfig.defaultItemDiameter) { - this.definition.drawCentered(x, y, parameters, diameter); - } -} +import { DrawParameters } from "../../core/draw_parameters"; +import { types } from "../../savegame/serialization"; +import { BaseItem } from "../base_item"; +import { ShapeDefinition } from "../shape_definition"; +import { THEME } from "../theme"; +import { globalConfig } from "../../core/config"; + +export class ShapeItem extends BaseItem { + static getId() { + return "shape"; + } + + static getSchema() { + return types.string; + } + + serialize() { + return this.definition.getHash(); + } + + deserialize(data) { + this.definition = ShapeDefinition.fromShortKey(data); + } + + /** @returns {"shape"} **/ + getItemType() { + return "shape"; + } + + /** + * @returns {string} + */ + getAsCopyableKey() { + return this.definition.getHash(); + } + + /** + * @param {BaseItem} other + */ + equalsImpl(other) { + return this.definition.getHash() === /** @type {ShapeItem} */ (other).definition.getHash(); + } + + /** + * @param {ShapeDefinition} definition + */ + constructor(definition) { + super(); + + /** + * This property must not be modified on runtime, you have to clone the class in order to change the definition + */ + this.definition = definition; + } + + getBackgroundColorAsResource() { + return THEME.map.resources.shape; + } + + /** + * Draws the item to a canvas + * @param {CanvasRenderingContext2D} context + * @param {number} size + */ + drawFullSizeOnCanvas(context, size) { + this.definition.drawFullSizeOnCanvas(context, size); + } + + /** + * @param {number} x + * @param {number} y + * @param {DrawParameters} parameters + * @param {number=} diameter + */ + drawItemCenteredImpl(x, y, parameters, diameter = globalConfig.defaultItemDiameter) { + this.definition.drawCentered(x, y, parameters, diameter); + } +} diff --git a/src/js/game/key_action_mapper.js b/src/js/game/key_action_mapper.js index 7a519839..9fa4ffe1 100644 --- a/src/js/game/key_action_mapper.js +++ b/src/js/game/key_action_mapper.js @@ -56,6 +56,9 @@ export const KEYMAPPINGS = { painter: { keyCode: key("9") }, trash: { keyCode: key("0") }, + // Sandbox + item_producer: { keyCode: key("L") }, + // Secondary toolbar storage: { keyCode: key("Y") }, reader: { keyCode: key("U") }, @@ -67,12 +70,11 @@ export const KEYMAPPINGS = { wire: { keyCode: key("1") }, wire_tunnel: { keyCode: key("2") }, constant_signal: { keyCode: key("3") }, - lever_wires: { keyCode: key("4") }, - logic_gate: { keyCode: key("5") }, - virtual_processor: { keyCode: key("6") }, - transistor: { keyCode: key("7") }, - analyzer: { keyCode: key("8") }, - comparator: { keyCode: key("9") }, + logic_gate: { keyCode: key("4") }, + virtual_processor: { keyCode: key("5") }, + analyzer: { keyCode: key("6") }, + comparator: { keyCode: key("7") }, + transistor: { keyCode: key("8") }, }, placement: { @@ -82,6 +84,8 @@ export const KEYMAPPINGS = { cycleBuildingVariants: { keyCode: key("T") }, cycleBuildings: { keyCode: 9 }, // TAB switchDirectionLockSide: { keyCode: key("R") }, + + copyWireValue: { keyCode: key("Z") }, }, massSelect: { @@ -118,6 +122,7 @@ export const KEYCODE_RMB = 3; * @returns {string} */ export function getStringForKeyCode(code) { + // @todo: Refactor into dictionary switch (code) { case KEYCODE_LMB: return "LMB"; @@ -244,6 +249,8 @@ export function getStringForKeyCode(code) { return ","; case 189: return "-"; + case 190: + return "."; case 191: return "/"; case 219: @@ -256,7 +263,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_chunk_view.js b/src/js/game/map_chunk_view.js index 5bb5d2c4..848afbab 100644 --- a/src/js/game/map_chunk_view.js +++ b/src/js/game/map_chunk_view.js @@ -104,15 +104,17 @@ export class MapChunkView extends MapChunk { }); parameters.context.imageSmoothingEnabled = true; + const resourcesScale = this.root.app.settings.getAllSettings().mapResourcesScale; // Draw patch items - if (this.root.currentLayer === "regular") { + if (this.root.currentLayer === "regular" && resourcesScale > 0.05) { + const diameter = (70 / Math.pow(parameters.zoomLevel, 0.35)) * (0.2 + 2 * resourcesScale); + for (let i = 0; i < this.patches.length; ++i) { const patch = this.patches[i]; if (patch.item.getItemType() === "shape") { const destX = this.x * dims + patch.pos.x * globalConfig.tileSize; const destY = this.y * dims + patch.pos.y * globalConfig.tileSize; - const diameter = 80 / Math.pow(parameters.zoomLevel, 0.35); patch.item.drawItemCenteredClipped(destX, destY, parameters, diameter); } } 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/meta_building_registry.js b/src/js/game/meta_building_registry.js index b29bb574..0613103e 100644 --- a/src/js/game/meta_building_registry.js +++ b/src/js/game/meta_building_registry.js @@ -10,6 +10,7 @@ import { enumCutterVariants, MetaCutterBuilding } from "./buildings/cutter"; import { MetaDisplayBuilding } from "./buildings/display"; import { MetaFilterBuilding } from "./buildings/filter"; import { MetaHubBuilding } from "./buildings/hub"; +import { MetaItemProducerBuilding } from "./buildings/item_producer"; import { MetaLeverBuilding } from "./buildings/lever"; import { enumLogicGateVariants, MetaLogicGateBuilding } from "./buildings/logic_gate"; import { enumMinerVariants, MetaMinerBuilding } from "./buildings/miner"; @@ -19,7 +20,7 @@ import { MetaReaderBuilding } from "./buildings/reader"; import { enumRotaterVariants, MetaRotaterBuilding } from "./buildings/rotater"; import { MetaStackerBuilding } from "./buildings/stacker"; import { MetaStorageBuilding } from "./buildings/storage"; -import { MetaTransistorBuilding, enumTransistorVariants } from "./buildings/transistor"; +import { enumTransistorVariants, MetaTransistorBuilding } from "./buildings/transistor"; import { MetaTrashBuilding } from "./buildings/trash"; import { enumUndergroundBeltVariants, MetaUndergroundBeltBuilding } from "./buildings/underground_belt"; import { enumVirtualProcessorVariants, MetaVirtualProcessorBuilding } from "./buildings/virtual_processor"; @@ -57,6 +58,7 @@ export function initMetaBuildingRegistry() { gMetaBuildingRegistry.register(MetaTransistorBuilding); gMetaBuildingRegistry.register(MetaAnalyzerBuilding); gMetaBuildingRegistry.register(MetaComparatorBuilding); + gMetaBuildingRegistry.register(MetaItemProducerBuilding); // Belt registerBuildingVariant(1, MetaBeltBuilding, defaultBuildingVariant, 0); @@ -160,6 +162,9 @@ export function initMetaBuildingRegistry() { // Reader registerBuildingVariant(49, MetaReaderBuilding); + // Item producer + registerBuildingVariant(61, MetaItemProducerBuilding); + // Propagate instances for (const key in gBuildingVariants) { gBuildingVariants[key].metaInstance = gMetaBuildingRegistry.findByClass( diff --git a/src/js/game/modes/regular.js b/src/js/game/modes/regular.js new file mode 100644 index 00000000..e99f4a7c --- /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: 30 }], + }, + { + 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: 8, // 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/shape_definition.js b/src/js/game/shape_definition.js index 9060a1b5..b09d73c5 100644 --- a/src/js/game/shape_definition.js +++ b/src/js/game/shape_definition.js @@ -297,6 +297,15 @@ export class ShapeDefinition extends BasicSerializableObject { parameters.context.drawImage(canvas, x - diameter / 2, y - diameter / 2, diameter, diameter); } + /** + * Draws the item to a canvas + * @param {CanvasRenderingContext2D} context + * @param {number} size + */ + drawFullSizeOnCanvas(context, size) { + this.internalGenerateShapeBuffer(null, context, size, size, 1); + } + /** * Generates this shape as a canvas * @param {number} size diff --git a/src/js/game/systems/constant_signal.js b/src/js/game/systems/constant_signal.js index 5a6542f9..33ba6f55 100644 --- a/src/js/game/systems/constant_signal.js +++ b/src/js/game/systems/constant_signal.js @@ -1,6 +1,9 @@ import trim from "trim"; +import { THIRDPARTY_URLS } from "../../core/config"; import { DialogWithForm } from "../../core/modal_dialog_elements"; -import { FormElementInput } from "../../core/modal_dialog_forms"; +import { FormElementInput, FormElementItemChooser } from "../../core/modal_dialog_forms"; +import { fillInLinkIntoTranslation } from "../../core/utils"; +import { T } from "../../translations"; import { BaseItem } from "../base_item"; import { enumColors } from "../colors"; import { ConstantSignalComponent } from "../components/constant_signal"; @@ -41,23 +44,43 @@ export class ConstantSignalSystem extends GameSystemWithFilter { const signalValueInput = new FormElementInput({ id: "signalValue", - label: null, + label: fillInLinkIntoTranslation(T.dialogs.editSignal.descShortKey, THIRDPARTY_URLS.shapeViewer), placeholder: "", defaultValue: "", validator: val => this.parseSignalCode(val), }); + + const itemInput = new FormElementItemChooser({ + id: "signalItem", + label: null, + items: [ + BOOL_FALSE_SINGLETON, + BOOL_TRUE_SINGLETON, + ...Object.values(COLOR_ITEM_SINGLETONS), + this.root.shapeDefinitionMgr.getShapeItemFromDefinition( + this.root.hubGoals.currentGoal.definition + ), + this.root.shapeDefinitionMgr.getShapeItemFromShortKey( + this.root.gameMode.getBlueprintShapeKey() + ), + ...this.root.hud.parts.pinnedShapes.pinnedShapes.map(key => + this.root.shapeDefinitionMgr.getShapeItemFromShortKey(key) + ), + ], + }); + const dialog = new DialogWithForm({ app: this.root.app, - title: "Set Signal", - desc: "Enter a shape code, color or '0' or '1'", - formElements: [signalValueInput], + title: T.dialogs.editSignal.title, + desc: T.dialogs.editSignal.descItems, + formElements: [itemInput, signalValueInput], buttons: ["cancel:bad:escape", "ok:good:enter"], closeButton: false, }); this.root.hud.parts.dialogs.internalShowDialog(dialog); // When confirmed, set the signal - dialog.buttonSignals.ok.add(() => { + const closeHandler = () => { if (!this.root || !this.root.entityMgr) { // Game got stopped return; @@ -75,8 +98,16 @@ export class ConstantSignalSystem extends GameSystemWithFilter { return; } - constantComp.signal = this.parseSignalCode(signalValueInput.getValue()); - }); + if (itemInput.chosenItem) { + console.log(itemInput.chosenItem); + constantComp.signal = itemInput.chosenItem; + } else { + constantComp.signal = this.parseSignalCode(signalValueInput.getValue()); + } + }; + + dialog.buttonSignals.ok.add(closeHandler); + dialog.valueChosen.add(closeHandler); // When cancelled, destroy the entity again dialog.buttonSignals.cancel.add(() => { diff --git a/src/js/game/systems/hub.js b/src/js/game/systems/hub.js index 556a9412..a98eabc9 100644 --- a/src/js/game/systems/hub.js +++ b/src/js/game/systems/hub.js @@ -1,15 +1,15 @@ +import { globalConfig } from "../../core/config"; +import { smoothenDpi } from "../../core/dpi_manager"; import { DrawParameters } from "../../core/draw_parameters"; +import { drawSpriteClipped } from "../../core/draw_utils"; import { Loader } from "../../core/loader"; +import { Rectangle } from "../../core/rectangle"; +import { ORIGINAL_SPRITE_SCALE } from "../../core/sprites"; import { formatBigNumber } from "../../core/utils"; import { T } from "../../translations"; import { HubComponent } from "../components/hub"; import { Entity } from "../entity"; import { GameSystemWithFilter } from "../game_system_with_filter"; -import { globalConfig } from "../../core/config"; -import { smoothenDpi } from "../../core/dpi_manager"; -import { drawSpriteClipped } from "../../core/draw_utils"; -import { Rectangle } from "../../core/rectangle"; -import { ORIGINAL_SPRITE_SCALE } from "../../core/sprites"; const HUB_SIZE_TILES = 4; const HUB_SIZE_PIXELS = HUB_SIZE_TILES * globalConfig.tileSize; @@ -73,64 +73,77 @@ export class HubSystem extends GameSystemWithFilter { const textOffsetX = 70; const textOffsetY = 61; - // Deliver count - const delivered = this.root.hubGoals.getCurrentGoalDelivered(); - const deliveredText = "" + formatBigNumber(delivered); + if (goals.throughputOnly) { + // Throughput + const deliveredText = T.ingame.statistics.shapesDisplayUnits.second.replace( + "", + formatBigNumber(goals.required) + ); - if (delivered > 9999) { - context.font = "bold 16px GameFont"; - } else if (delivered > 999) { - context.font = "bold 20px GameFont"; + context.font = "bold 12px GameFont"; + context.fillStyle = "#64666e"; + context.textAlign = "left"; + context.fillText(deliveredText, textOffsetX, textOffsetY); } else { - context.font = "bold 25px GameFont"; - } - context.fillStyle = "#64666e"; - context.textAlign = "left"; - context.fillText(deliveredText, textOffsetX, textOffsetY); + // Deliver count + const delivered = this.root.hubGoals.getCurrentGoalDelivered(); + const deliveredText = "" + formatBigNumber(delivered); - // Required - context.font = "13px GameFont"; - context.fillStyle = "#a4a6b0"; - context.fillText("/ " + formatBigNumber(goals.required), textOffsetX, textOffsetY + 13); + if (delivered > 9999) { + context.font = "bold 16px GameFont"; + } else if (delivered > 999) { + context.font = "bold 20px GameFont"; + } else { + context.font = "bold 25px GameFont"; + } + context.fillStyle = "#64666e"; + context.textAlign = "left"; + context.fillText(deliveredText, textOffsetX, textOffsetY); - // Reward - const rewardText = T.storyRewards[goals.reward].title.toUpperCase(); - if (rewardText.length > 12) { - context.font = "bold 8px GameFont"; - } else { + // Required + context.font = "13px GameFont"; + context.fillStyle = "#a4a6b0"; + context.fillText("/ " + formatBigNumber(goals.required), textOffsetX, textOffsetY + 13); + + // Reward + const rewardText = T.storyRewards[goals.reward].title.toUpperCase(); + if (rewardText.length > 12) { + context.font = "bold 8px GameFont"; + } else { + context.font = "bold 10px GameFont"; + } + context.fillStyle = "#fd0752"; + context.textAlign = "center"; + + context.fillText(rewardText, HUB_SIZE_PIXELS / 2, 105); + + // Level "8" context.font = "bold 10px GameFont"; - } - context.fillStyle = "#fd0752"; - context.textAlign = "center"; + context.fillStyle = "#fff"; + context.fillText("" + this.root.hubGoals.level, 27, 32); - context.fillText(rewardText, HUB_SIZE_PIXELS / 2, 105); + // "LVL" + context.textAlign = "center"; + context.fillStyle = "#fff"; + context.font = "bold 6px GameFont"; + context.fillText(T.buildings.hub.levelShortcut, 27, 22); - // Level "8" - context.font = "bold 10px GameFont"; - context.fillStyle = "#fff"; - context.fillText("" + this.root.hubGoals.level, 27, 32); - - // "LVL" - context.textAlign = "center"; - context.fillStyle = "#fff"; - context.font = "bold 6px GameFont"; - context.fillText(T.buildings.hub.levelShortcut, 27, 22); - - // "Deliver" - context.fillStyle = "#64666e"; - context.font = "bold 10px GameFont"; - context.fillText(T.buildings.hub.deliver.toUpperCase(), HUB_SIZE_PIXELS / 2, 30); - - // "To unlock" - const unlockText = T.buildings.hub.toUnlock.toUpperCase(); - if (unlockText.length > 15) { - context.font = "bold 8px GameFont"; - } else { + // "Deliver" + context.fillStyle = "#64666e"; context.font = "bold 10px GameFont"; - } - context.fillText(T.buildings.hub.toUnlock.toUpperCase(), HUB_SIZE_PIXELS / 2, 92); + context.fillText(T.buildings.hub.deliver.toUpperCase(), HUB_SIZE_PIXELS / 2, 30); - context.textAlign = "left"; + // "To unlock" + const unlockText = T.buildings.hub.toUnlock.toUpperCase(); + if (unlockText.length > 15) { + context.font = "bold 8px GameFont"; + } else { + context.font = "bold 10px GameFont"; + } + context.fillText(T.buildings.hub.toUnlock.toUpperCase(), HUB_SIZE_PIXELS / 2, 92); + + context.textAlign = "left"; + } } /** diff --git a/src/js/game/systems/item_ejector.js b/src/js/game/systems/item_ejector.js index 1b33e86f..8f4eab52 100644 --- a/src/js/game/systems/item_ejector.js +++ b/src/js/game/systems/item_ejector.js @@ -226,8 +226,7 @@ export class ItemEjectorSystem extends GameSystemWithFilter { */ tryPassOverItem(item, receiver, slotIndex) { // Try figuring out how what to do with the item - // TODO: Kinda hacky. How to solve this properly? Don't want to go through inheritance hell. - // Also its just a few cases (hope it stays like this .. :x). + // @TODO: Kinda hacky. How to solve this properly? Don't want to go through inheritance hell. const beltComp = receiver.components.Belt; if (beltComp) { diff --git a/src/js/game/systems/item_producer.js b/src/js/game/systems/item_producer.js new file mode 100644 index 00000000..eafd0a7a --- /dev/null +++ b/src/js/game/systems/item_producer.js @@ -0,0 +1,24 @@ +import { ItemProducerComponent } from "../components/item_producer"; +import { GameSystemWithFilter } from "../game_system_with_filter"; + +export class ItemProducerSystem extends GameSystemWithFilter { + constructor(root) { + super(root, [ItemProducerComponent]); + } + + update() { + for (let i = this.allEntitiesArray.length - 1; i >= 0; --i) { + const entity = this.allEntitiesArray[i]; + const pinsComp = entity.components.WiredPins; + const pin = pinsComp.slots[0]; + const network = pin.linkedNetwork; + + if (!network || !network.hasValue()) { + continue; + } + + const ejectorComp = entity.components.ItemEjector; + ejectorComp.tryEject(0, network.currentValue); + } + } +} diff --git a/src/js/game/systems/logic_gate.js b/src/js/game/systems/logic_gate.js index ef42c649..d426e537 100644 --- a/src/js/game/systems/logic_gate.js +++ b/src/js/game/systems/logic_gate.js @@ -3,7 +3,7 @@ import { enumColors } from "../colors"; import { enumLogicGateType, LogicGateComponent } from "../components/logic_gate"; import { enumPinSlotType } from "../components/wired_pins"; import { GameSystemWithFilter } from "../game_system_with_filter"; -import { BooleanItem, BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON, isTruthyItem } from "../items/boolean_item"; +import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON, BooleanItem, isTruthyItem } from "../items/boolean_item"; import { ColorItem, COLOR_ITEM_SINGLETONS } from "../items/color_item"; import { ShapeItem } from "../items/shape_item"; import { ShapeDefinition } from "../shape_definition"; @@ -164,8 +164,8 @@ export class LogicGateSystem extends GameSystemWithFilter { } const definition = /** @type {ShapeItem} */ (item).definition; - const rotatedDefinition = this.root.shapeDefinitionMgr.shapeActionRotateCW(definition); - return this.root.shapeDefinitionMgr.getShapeItemFromDefinition(rotatedDefinition); + const rotatedDefinitionCW = this.root.shapeDefinitionMgr.shapeActionRotateCW(definition); + return this.root.shapeDefinitionMgr.getShapeItemFromDefinition(rotatedDefinitionCW); } /** diff --git a/src/js/game/themes/dark.json b/src/js/game/themes/dark.json index 227d4532..733b7682 100644 --- a/src/js/game/themes/dark.json +++ b/src/js/game/themes/dark.json @@ -32,7 +32,8 @@ }, "chunkOverview": { "empty": "#444856", - "filled": "#646b7d" + "filled": "#646b7d", + "beltColor": "#9096a3" }, "wires": { diff --git a/src/js/game/themes/light.json b/src/js/game/themes/light.json index 47616d82..0c793c26 100644 --- a/src/js/game/themes/light.json +++ b/src/js/game/themes/light.json @@ -33,7 +33,8 @@ "chunkOverview": { "empty": "#a6afbb", - "filled": "#c5ccd6" + "filled": "#c5ccd6", + "beltColor": "#777" }, "wires": { diff --git a/src/js/game/tutorial_goals.js b/src/js/game/tutorial_goals.js index 3d1a36fd..84634b0a 100644 --- a/src/js/game/tutorial_goals.js +++ b/src/js/game/tutorial_goals.js @@ -1,6 +1,3 @@ -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} @@ -22,14 +19,16 @@ export const enumHubGoalRewards = { reward_splitter: "reward_splitter", reward_cutter_quad: "reward_cutter_quad", reward_painter_double: "reward_painter_double", - reward_painter_quad: "reward_painter_quad", reward_storage: "reward_storage", reward_merger: "reward_merger", - reward_wires_filters_and_levers: "reward_wires_filters_and_levers", + reward_wires_painter_and_levers: "reward_wires_painter_and_levers", reward_display: "reward_display", reward_constant_signal: "reward_constant_signal", reward_logic_gates: "reward_logic_gates", reward_virtual_processing: "reward_virtual_processing", + reward_filter: "reward_filter", + + reward_demo_end: "reward_demo_end", reward_blueprints: "reward_blueprints", reward_freeplay: "reward_freeplay", @@ -37,227 +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: 40, - reward: enumHubGoalRewards.reward_cutter_and_trash, - }, - - // 2 - // Cutter - { - shape: "----CuCu", // - required: 40, - reward: enumHubGoalRewards.no_reward, - }, - - // 3 - // Rectangle - { - shape: "RuRuRuRu", // miners t1 - required: 85, - reward: enumHubGoalRewards.reward_balancer, - }, - - // 4 - { - shape: "RuRu----", // processors t2 - required: 100, - reward: enumHubGoalRewards.reward_rotater, - }, - - // 5 - // Rotater - { - shape: "Cu----Cu", // belts t2 - required: 175, - reward: enumHubGoalRewards.reward_tunnel, - }, - - // 6 - { - shape: "Cu------", // miners t2 - required: 250, - reward: enumHubGoalRewards.reward_painter, - }, - - // 7 - // Painter - { - shape: "CrCrCrCr", // unused - required: 500, - reward: enumHubGoalRewards.reward_rotater_ccw, - }, - - // 8 - { - shape: "RbRb----", // painter t2 - required: 700, - reward: enumHubGoalRewards.reward_mixer, - }, - - // 9 - // Mixing (purple) - { - shape: "CpCpCpCp", // belts t3 - required: 800, - reward: enumHubGoalRewards.reward_merger, - }, - - // 10 - // STACKER: Star shape + cyan - { - shape: "ScScScSc", // miners t3 - required: 900, - reward: enumHubGoalRewards.reward_stacker, - }, - - // 11 - // Chainable miner - { - shape: "CgScScCg", // processors t3 - required: 1000, - reward: enumHubGoalRewards.reward_miner_chainable, - }, - - // 12 - // Blueprints - { - shape: "CbCbCbRb:CwCwCwCw", - required: 1250, - reward: enumHubGoalRewards.reward_blueprints, - }, - - // 13 - // Tunnel Tier 2 - { - shape: "RpRpRpRp:CwCwCwCw", // painting t3 - required: 5000, - reward: enumHubGoalRewards.reward_underground_belt_tier_2, - }, - - // 14 - // Belt reader - { - // @todo - shape: "CuCuCuCu", - required: 7000, - reward: enumHubGoalRewards.reward_belt_reader, - }, - - // 15 - // Storage - { - shape: "SrSrSrSr:CyCyCyCy", // unused - required: 7500, - reward: enumHubGoalRewards.reward_storage, - }, - - // 16 - // Quad Cutter - { - shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", // belts t4 (two variants) - required: 12500, - reward: enumHubGoalRewards.reward_cutter_quad, - }, - - // 17 - // Double painter - { - shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) - required: 15000, - reward: enumHubGoalRewards.reward_painter_double, - }, - - // 18 - // Rotater (180deg) - { - // @TODO - shape: "CuCuCuCu", - required: 20000, - reward: enumHubGoalRewards.reward_rotater_180, - }, - - // 19 - // Compact splitter - { - // @TODO - shape: "CuCuCuCu", - required: 25000, - reward: enumHubGoalRewards.reward_splitter, - }, - - // 20 - // WIRES - { - shape: finalGameShape, - required: 50000, - reward: enumHubGoalRewards.reward_wires_filters_and_levers, - }, - - // 21 - // Display - { - // @TODO - shape: "CuCuCuCu", - required: 25000, - reward: enumHubGoalRewards.reward_display, - }, - - // 22 - // Constant signal - { - // @TODO - shape: "CuCuCuCu", - required: 30000, - reward: enumHubGoalRewards.reward_constant_signal, - }, - - // 23 - // Quad Painter - { - // @TODO - shape: "CuCuCuCu", - // shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", // processors t4 (two variants) - required: 35000, - reward: enumHubGoalRewards.reward_painter_quad, - }, - - // 24 Logic gates - { - // @TODO - shape: "CuCuCuCu", - required: 40000, - reward: enumHubGoalRewards.reward_logic_gates, - }, - - // 25 Virtual Processing - { - // @TODO - shape: "CuCuCuCu", - required: 45000, - reward: enumHubGoalRewards.reward_virtual_processing, - }, - - // 26 Freeplay - { - // @TODO - shape: "CuCuCuCu", - required: 100000, - 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/tutorial_goals_mappings.js b/src/js/game/tutorial_goals_mappings.js index 4542acf3..e0d17cbc 100644 --- a/src/js/game/tutorial_goals_mappings.js +++ b/src/js/game/tutorial_goals_mappings.js @@ -3,7 +3,8 @@ import { enumBalancerVariants, MetaBalancerBuilding } from "./buildings/balancer import { MetaConstantSignalBuilding } from "./buildings/constant_signal"; import { enumCutterVariants, MetaCutterBuilding } from "./buildings/cutter"; import { MetaDisplayBuilding } from "./buildings/display"; -import { MetaLeverBuilding } from "./buildings/lever"; +import { MetaFilterBuilding } from "./buildings/filter"; +import { MetaLogicGateBuilding } from "./buildings/logic_gate"; import { enumMinerVariants, MetaMinerBuilding } from "./buildings/miner"; import { MetaMixerBuilding } from "./buildings/mixer"; import { enumPainterVariants, MetaPainterBuilding } from "./buildings/painter"; @@ -45,7 +46,6 @@ export const enumHubGoalRewardsToContentUnlocked = { [enumHubGoalRewards.reward_merger]: typed([[MetaBalancerBuilding, enumBalancerVariants.merger]]), [enumHubGoalRewards.reward_cutter_quad]: typed([[MetaCutterBuilding, enumCutterVariants.quad]]), [enumHubGoalRewards.reward_painter_double]: typed([[MetaPainterBuilding, enumPainterVariants.double]]), - [enumHubGoalRewards.reward_painter_quad]: typed([[MetaPainterBuilding, enumPainterVariants.quad]]), [enumHubGoalRewards.reward_storage]: typed([[MetaStorageBuilding, defaultBuildingVariant]]), [enumHubGoalRewards.reward_belt_reader]: typed([[MetaReaderBuilding, defaultBuildingVariant]]), @@ -53,16 +53,18 @@ export const enumHubGoalRewardsToContentUnlocked = { [enumHubGoalRewards.reward_constant_signal]: typed([ [MetaConstantSignalBuilding, defaultBuildingVariant], ]), - [enumHubGoalRewards.reward_logic_gates]: null, // @TODO! - [enumHubGoalRewards.reward_virtual_processing]: null, // @TODO! + [enumHubGoalRewards.reward_logic_gates]: typed([[MetaLogicGateBuilding, defaultBuildingVariant]]), + [enumHubGoalRewards.reward_filter]: typed([[MetaFilterBuilding, defaultBuildingVariant]]), + [enumHubGoalRewards.reward_virtual_processing]: null, - [enumHubGoalRewards.reward_wires_filters_and_levers]: typed([ - [MetaLeverBuilding, defaultBuildingVariant], + [enumHubGoalRewards.reward_wires_painter_and_levers]: typed([ + [MetaPainterBuilding, enumPainterVariants.quad], ]), [enumHubGoalRewards.reward_freeplay]: null, [enumHubGoalRewards.reward_blueprints]: null, [enumHubGoalRewards.no_reward]: null, [enumHubGoalRewards.no_reward_freeplay]: null, + [enumHubGoalRewards.reward_demo_end]: null, }; if (G_IS_DEV) { diff --git a/src/js/game/upgrades.js b/src/js/game/upgrades.js deleted file mode 100644 index c764ae88..00000000 --- a/src/js/game/upgrades.js +++ /dev/null @@ -1,160 +0,0 @@ -import { findNiceIntegerValue } from "../core/utils"; -import { ShapeDefinition } from "./shape_definition"; - -export const finalGameShape = "RuCw--Cw:----Ru--"; -export const blueprintShape = "CbCbCbRb:CwCwCwCw"; - -const fixedImprovements = [0.5, 0.5, 1, 1, 2, 2]; - -/** @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: 150 }], - }, - { - required: [{ shape: "--CuCu--", amount: 1000 }], - }, - { - required: [{ shape: "CpCpCpCp", amount: 5000 }], - }, - { - required: [{ shape: "SrSrSrSr:CyCyCyCy", amount: 12000 }], - }, - { - required: [{ shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", amount: 20000 }], - }, - { - required: [{ shape: finalGameShape, amount: 50000 }], - excludePrevious: true, - }, - ], - - miner: [ - { - required: [{ shape: "RuRuRuRu", amount: 400 }], - }, - { - required: [{ shape: "Cu------", amount: 3000 }], - }, - { - required: [{ shape: "ScScScSc", amount: 7000 }], - }, - { - required: [{ shape: "CwCwCwCw:WbWbWbWb", amount: 15000 }], - }, - { - required: [{ shape: "CbRbRbCb:CwCwCwCw:WbWbWbWb", amount: 30000 }], - }, - { - required: [{ shape: finalGameShape, amount: 65000 }], - excludePrevious: true, - }, - ], - - processors: [ - { - required: [{ shape: "SuSuSuSu", amount: 600 }], - }, - { - required: [{ shape: "RuRu----", amount: 2000 }], - }, - { - required: [{ shape: "CgScScCg", amount: 15000 }], - }, - { - required: [{ shape: "CwCrCwCr:SgSgSgSg", amount: 20000 }], - }, - { - required: [{ shape: "WrRgWrRg:CwCrCwCr:SgSgSgSg", amount: 30000 }], - }, - { - required: [{ shape: finalGameShape, amount: 75000 }], - excludePrevious: true, - }, - ], - - painting: [ - { - required: [{ shape: "RbRb----", amount: 1000 }], - }, - { - required: [{ shape: "WrWrWrWr", amount: 3000 }], - }, - { - required: [{ shape: "RpRpRpRp:CwCwCwCw", amount: 15000 }], - }, - { - required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp", amount: 20000 }], - }, - { - required: [{ shape: "WpWpWpWp:CwCwCwCw:WpWpWpWp:CwCwCwCw", amount: 30000 }], - }, - { - required: [{ shape: finalGameShape, amount: 100000 }], - excludePrevious: true, - }, - ], -}; - -// Tiers need % of the previous tier as requirement too -const tierGrowth = 1.8; - -// 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/globals.d.ts b/src/js/globals.d.ts index 51e4a2c3..642745ca 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -19,9 +19,6 @@ declare const G_BUILD_VERSION: string; declare const G_ALL_UI_IMAGES: Array; declare const G_IS_RELEASE: boolean; -// Node require -declare function require(...args): any; - // Polyfills declare interface String { replaceAll(search: string, replacement: string): string; diff --git a/src/js/languages.js b/src/js/languages.js index c46c3e88..46ff8af9 100644 --- a/src/js/languages.js +++ b/src/js/languages.js @@ -1,113 +1,120 @@ -/** - * @type {Object} - */ -export const LANGUAGES = { - "en": { - name: "English", - data: null, - code: "en", - region: "", - }, - "de": { - name: "Deutsch", - data: require("./built-temp/base-de.json"), - code: "de", - region: "", - }, - "fr": { - name: "Français", - data: require("./built-temp/base-fr.json"), - code: "fr", - region: "", - }, - "ja": { - name: "日本語", - data: require("./built-temp/base-ja.json"), - code: "ja", - region: "", - }, - "pt-PT": { - name: "Português (Portugal)", - data: require("./built-temp/base-pt-PT.json"), - code: "pt", - region: "PT", - }, - "pt-BR": { - name: "Português (Brasil)", - data: require("./built-temp/base-pt-BR.json"), - code: "pt", - region: "BR", - }, - "ru": { - name: "Русский", - data: require("./built-temp/base-ru.json"), - code: "ru", - region: "", - }, - "cs": { - name: "Čeština", - data: require("./built-temp/base-cz.json"), - code: "cs", - region: "", - }, - "es-419": { - name: "Español", - data: require("./built-temp/base-es.json"), - code: "es", - region: "", - }, - "pl": { - name: "Polski", - data: require("./built-temp/base-pl.json"), - code: "pl", - region: "", - }, - "kor": { - name: "한국어", - data: require("./built-temp/base-kor.json"), - code: "kor", - region: "", - }, - "nl": { - name: "Nederlands", - data: require("./built-temp/base-nl.json"), - code: "nl", - region: "", - }, - "no": { - name: "Norsk", - data: require("./built-temp/base-no.json"), - code: "no", - region: "", - }, - - "tr": { - name: "Türkçe", - data: require("./built-temp/base-tr.json"), - code: "tr", - region: "", - }, - - "zh-CN": { - // simplified - name: "中文简体", - data: require("./built-temp/base-zh-CN.json"), - code: "zh", - region: "CN", - }, - - "zh-TW": { - // traditional - name: "中文繁體", - data: require("./built-temp/base-zh-TW.json"), - code: "zh", - region: "TW", - }, - - "sv": { - name: "Svenska", - data: require("./built-temp/base-sv.json"), - code: "sv", - region: "", - }, -}; +/** + * @type {Object} + */ +export const LANGUAGES = { + "en": { + name: "English", + data: null, + code: "en", + region: "", + }, + "de": { + name: "Deutsch", + data: require("./built-temp/base-de.json"), + code: "de", + region: "", + }, + "fr": { + name: "Français", + data: require("./built-temp/base-fr.json"), + code: "fr", + region: "", + }, + "ja": { + name: "日本語", + data: require("./built-temp/base-ja.json"), + code: "ja", + region: "", + }, + "pt-PT": { + name: "Português (Portugal)", + data: require("./built-temp/base-pt-PT.json"), + code: "pt", + region: "PT", + }, + "pt-BR": { + name: "Português (Brasil)", + data: require("./built-temp/base-pt-BR.json"), + code: "pt", + region: "BR", + }, + "ru": { + name: "Русский", + data: require("./built-temp/base-ru.json"), + code: "ru", + region: "", + }, + "cs": { + name: "Čeština", + data: require("./built-temp/base-cz.json"), + code: "cs", + region: "", + }, + "es-419": { + name: "Español", + data: require("./built-temp/base-es.json"), + code: "es", + region: "", + }, + "pl": { + name: "Polski", + data: require("./built-temp/base-pl.json"), + code: "pl", + region: "", + }, + "kor": { + name: "한국어", + data: require("./built-temp/base-kor.json"), + code: "kor", + region: "", + }, + "nl": { + name: "Nederlands", + data: require("./built-temp/base-nl.json"), + code: "nl", + region: "", + }, + "no": { + name: "Norsk", + data: require("./built-temp/base-no.json"), + code: "no", + region: "", + }, + + "tr": { + name: "Türkçe", + data: require("./built-temp/base-tr.json"), + code: "tr", + region: "", + }, + + "zh-CN": { + // simplified + name: "中文简体", + data: require("./built-temp/base-zh-CN.json"), + code: "zh", + region: "CN", + }, + + "zh-TW": { + // traditional + name: "中文繁體", + data: require("./built-temp/base-zh-TW.json"), + code: "zh", + region: "TW", + }, + + "sv": { + name: "Svenska", + data: require("./built-temp/base-sv.json"), + code: "sv", + region: "", + }, + + "da": { + name: "Dansk", + data: require("./built-temp/base-da.json"), + code: "da", + region: "", + }, +}; diff --git a/src/js/platform/browser/game_analytics.js b/src/js/platform/browser/game_analytics.js index 52497ef7..a3947be6 100644 --- a/src/js/platform/browser/game_analytics.js +++ b/src/js/platform/browser/game_analytics.js @@ -1,13 +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"; const logger = createLogger("game_analytics"); @@ -24,6 +23,9 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { } if (G_IS_STANDALONE) { + if (queryParamOptions.sandboxMode) { + return "steam-sandbox"; + } return "steam"; } @@ -31,7 +33,17 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface { return "prod"; } - return "beta"; + if (window.location.host.indexOf("alpha") >= 0) { + if (queryParamOptions.sandboxMode) { + return "alpha-sandbox"; + } + return "alpha"; + } else { + if (queryParamOptions.sandboxMode) { + return "beta-sandbox"; + } + return "beta"; + } } /** @@ -176,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; @@ -212,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 0678abcf..9d5a8461 100644 --- a/src/js/platform/sound.js +++ b/src/js/platform/sound.js @@ -25,9 +25,12 @@ export const SOUNDS = { destroyBuilding: "destroy_building", placeBuilding: "place_building", placeBelt: "place_belt", + copy: "copy", }; 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..68abf5bb 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) => {}), @@ -263,6 +267,7 @@ export const allApplicationSettings = [ new BoolSetting("rotationByBuilding", enumCategories.advanced, (app, value) => {}), new BoolSetting("displayChunkBorders", enumCategories.advanced, (app, value) => {}), new BoolSetting("pickMinerOnPatch", enumCategories.advanced, (app, value) => {}), + new RangeSetting("mapResourcesScale", enumCategories.advanced, () => null), new EnumSetting("refreshRate", { options: refreshRateOptions, @@ -271,7 +276,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 +324,8 @@ class SettingsStorage { this.disableTileGrid = false; this.lowQualityTextures = false; this.simplifiedBelts = false; + this.zoomToCursor = true; + this.mapResourcesScale = 0.5; /** * @type {Object.} @@ -355,7 +364,7 @@ export class ApplicationSettings extends ReadWriteProxy { * @returns {SettingsStorage} */ getAllSettings() { - return this.getCurrentData().settings; + return this.currentData.settings; } /** @@ -527,7 +536,7 @@ export class ApplicationSettings extends ReadWriteProxy { } getCurrentVersion() { - return 28; + return 30; } /** @param {{settings: SettingsStorage, version: number}} data */ @@ -660,6 +669,20 @@ export class ApplicationSettings extends ReadWriteProxy { data.version = 28; } + if (data.version < 29) { + data.settings.zoomToCursor = true; + data.version = 29; + } + + if (data.version < 30) { + data.settings.mapResourcesScale = 0.5; + + // Re-enable hints as well + data.settings.offerHints = true; + + data.version = 30; + } + return ExplainedResult.good(); } } diff --git a/src/js/profile/setting_types.js b/src/js/profile/setting_types.js index 7d07ca99..4df02892 100644 --- a/src/js/profile/setting_types.js +++ b/src/js/profile/setting_types.js @@ -7,19 +7,30 @@ import { T } from "../translations"; const logger = createLogger("setting_types"); +/* + * *************************************************** + * + * LEGACY CODE WARNING + * + * This is old code from yorg3.io and needs to be refactored + * @TODO + * + * *************************************************** + */ + 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 +50,7 @@ export class BaseSetting { } /** + * Binds all parameters * @param {Application} app * @param {HTMLElement} element * @param {any} dialogs @@ -49,19 +61,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 +104,7 @@ export class BaseSetting { } /** + * Validates the set value * @param {any} value * @returns {boolean} */ @@ -96,10 +127,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 +141,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 +215,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 +265,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 +279,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.js b/src/js/savegame/savegame.js index 0ad630f6..1316cb91 100644 --- a/src/js/savegame/savegame.js +++ b/src/js/savegame/savegame.js @@ -1,3 +1,4 @@ +// @ts-nocheck import { ReadWriteProxy } from "../core/read_write_proxy"; import { ExplainedResult } from "../core/explained_result"; import { SavegameSerializer } from "./savegame_serializer"; @@ -168,7 +169,10 @@ export class Savegame extends ReadWriteProxy { * Returns if this game has a serialized game dump */ hasGameDump() { - return !!this.currentData.dump && this.currentData.dump.entities.length > 0; + return ( + !!this.currentData.dump && + (this.currentData.dump.entities.length > 0 || this.currentData.dump.entities.size > 0) + ); } /** diff --git a/src/js/savegame/savegame_manager.js b/src/js/savegame/savegame_manager.js index 52f9dc14..eb0d53d0 100644 --- a/src/js/savegame/savegame_manager.js +++ b/src/js/savegame/savegame_manager.js @@ -40,15 +40,8 @@ export class SavegameManager extends ReadWriteProxy { return 1002; } - /** - * @returns {SavegamesData} - */ - getCurrentData() { - return super.getCurrentData(); - } - verify(data) { - // TODO / FIXME!!!! + // @TODO 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..11e1e69c 100644 --- a/src/js/savegame/savegame_serializer.js +++ b/src/js/savegame/savegame_serializer.js @@ -67,9 +67,10 @@ export class SavegameSerializer { const seenUids = new Set(); // Check for duplicate UIDS - for (let i = 0; i < savegame.entities.length; ++i) { + const entities = [...savegame.entities.values()]; + for (let i = 0; i < entities.length; ++i) { /** @type {Entity} */ - const entity = savegame.entities[i]; + const entity = entities[i]; const uid = entity.uid; if (!Number.isInteger(uid)) { @@ -130,10 +131,11 @@ 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); + errorReason = + errorReason || this.internal.deserializeEntityArray(root, [...savegame.entities.values()]); errorReason = errorReason || root.systemMgr.systems.belt.deserializePaths(savegame.beltPaths); // Check for errors diff --git a/src/js/savegame/savegame_typedefs.js b/src/js/savegame/savegame_typedefs.js index 0f94cd6a..f310c664 100644 --- a/src/js/savegame/savegame_typedefs.js +++ b/src/js/savegame/savegame_typedefs.js @@ -11,7 +11,7 @@ * hubGoals: any, * pinnedShapes: any, * waypoints: any, - * entities: Array, + * entities: Array|Set, * beltPaths: Array * }} SerializedGame * diff --git a/src/js/savegame/schemas/1001.js b/src/js/savegame/schemas/1001.js index af86b09d..658a5a58 100644 --- a/src/js/savegame/schemas/1001.js +++ b/src/js/savegame/schemas/1001.js @@ -40,7 +40,7 @@ export class SavegameInterface_V1001 extends SavegameInterface_V1000 { ], }; - const entities = dump.entities; + const entities = Array.isArray(dump.entities) ? dump.entities : [...dump.entities.values()]; for (let i = 0; i < entities.length; ++i) { const entity = entities[i]; diff --git a/src/js/savegame/schemas/1002.js b/src/js/savegame/schemas/1002.js index 866bc1e8..e2351582 100644 --- a/src/js/savegame/schemas/1002.js +++ b/src/js/savegame/schemas/1002.js @@ -24,7 +24,7 @@ export class SavegameInterface_V1002 extends SavegameInterface_V1001 { return true; } - const entities = dump.entities; + const entities = Array.isArray(dump.entities) ? dump.entities : [...dump.entities.values()]; for (let i = 0; i < entities.length; ++i) { const entity = entities[i]; const beltComp = entity.components.Belt; diff --git a/src/js/savegame/schemas/1005.js b/src/js/savegame/schemas/1005.js index 0380f8eb..1949ee0e 100644 --- a/src/js/savegame/schemas/1005.js +++ b/src/js/savegame/schemas/1005.js @@ -26,7 +26,7 @@ export class SavegameInterface_V1005 extends SavegameInterface_V1004 { // just reset belt paths for now dump.beltPaths = []; - const entities = dump.entities; + const entities = Array.isArray(dump.entities) ? dump.entities : [...dump.entities.values()]; // clear ejector slots for (let i = 0; i < entities.length; ++i) { diff --git a/src/js/savegame/schemas/1006.js b/src/js/savegame/schemas/1006.js index f4512bcf..5a9fd4d8 100644 --- a/src/js/savegame/schemas/1006.js +++ b/src/js/savegame/schemas/1006.js @@ -151,13 +151,30 @@ export class SavegameInterface_V1006 extends SavegameInterface_V1005 { stored[shapeKey] = rebalance(stored[shapeKey]); } + // Reset final game shape + stored["RuCw--Cw:----Ru--"] = 0; + // Reduce goals if (dump.hubGoals.currentGoal) { dump.hubGoals.currentGoal.required = rebalance(dump.hubGoals.currentGoal.required); } + let level = Math.min(19, dump.hubGoals.level); + + const levelMapping = { + 14: 15, + 15: 16, + 16: 17, + 17: 18, + 18: 19, + 19: 20, + }; + + dump.hubGoals.level = levelMapping[level] || level; + // Update entities - const entities = dump.entities; + const entities = Array.isArray(dump.entities) ? dump.entities : [...dump.entities.values()]; + for (let i = 0; i < entities.length; ++i) { const entity = entities[i]; const components = entity.components; @@ -232,7 +249,7 @@ export class SavegameInterface_V1006 extends SavegameInterface_V1005 { if (components.Storage) { // @ts-ignore components.Storage = { - storedCount: 0, + storedCount: rebalance(components.Storage.storedCount), storedItem: null, }; } @@ -259,7 +276,9 @@ export class SavegameInterface_V1006 extends SavegameInterface_V1005 { * but we do have this attribute called code */ + // @ts-ignore if (staticComp.blueprintSpriteKey) { + // @ts-ignore newStaticComp.code = spriteMapping[staticComp.blueprintSpriteKey]; } else newStaticComp.code = staticComp.code; diff --git a/src/js/savegame/serialization.js b/src/js/savegame/serialization.js index 9f998a0f..801b26ab 100644 --- a/src/js/savegame/serialization.js +++ b/src/js/savegame/serialization.js @@ -1,344 +1,351 @@ -import { createLogger } from "../core/logging"; -import { - BaseDataType, - TypeArray, - TypeBoolean, - TypeClass, - TypeClassData, - TypeClassFromMetaclass, - TypeClassId, - TypeEntity, - TypeEntityWeakref, - TypeEnum, - TypeFixedClass, - TypeInteger, - TypeKeyValueMap, - TypeMetaClass, - TypeNullable, - TypeNumber, - TypePair, - TypePositiveInteger, - TypePositiveNumber, - TypeString, - TypeStructuredObject, - TypeVector, -} from "./serialization_data_types"; - -const logger = createLogger("serialization"); - -// Schema declarations -export const types = { - int: new TypeInteger(), - uint: new TypePositiveInteger(), - float: new TypeNumber(), - ufloat: new TypePositiveNumber(), - string: new TypeString(), - entity: new TypeEntity(), - weakEntityRef: new TypeEntityWeakref(), - vector: new TypeVector(), - tileVector: new TypeVector(), - bool: new TypeBoolean(), - - /** - * @param {BaseDataType} wrapped - */ - nullable(wrapped) { - return new TypeNullable(wrapped); - }, - - /** - * @param {FactoryTemplate<*>|SingletonFactoryTemplate<*>} registry - */ - classId(registry) { - return new TypeClassId(registry); - }, - /** - * @param {BaseDataType} valueType - * @param {boolean=} includeEmptyValues - */ - keyValueMap(valueType, includeEmptyValues = true) { - return new TypeKeyValueMap(valueType, includeEmptyValues); - }, - - /** - * @param {Object} values - */ - enum(values) { - return new TypeEnum(values); - }, - - /** - * @param {FactoryTemplate<*>} registry - * @param {(GameRoot, any) => object=} resolver - */ - obj(registry, resolver = null) { - return new TypeClass(registry, resolver); - }, - - /** - * @param {FactoryTemplate<*>} registry - */ - objData(registry) { - return new TypeClassData(registry); - }, - - /** - * @param {typeof BasicSerializableObject} cls - */ - knownType(cls) { - return new TypeFixedClass(cls); - }, - - /** - * @param {BaseDataType} innerType - */ - array(innerType) { - return new TypeArray(innerType); - }, - - /** - * @param {SingletonFactoryTemplate<*>} innerType - */ - classRef(registry) { - return new TypeMetaClass(registry); - }, - - /** - * @param {Object.} descriptor - */ - structured(descriptor) { - return new TypeStructuredObject(descriptor); - }, - - /** - * @param {BaseDataType} a - * @param {BaseDataType} b - */ - pair(a, b) { - return new TypePair(a, b); - }, - - /** - * @param {typeof BasicSerializableObject} classHandle - * @param {SingletonFactoryTemplate<*>} registry - */ - classWithMetaclass(classHandle, registry) { - return new TypeClassFromMetaclass(classHandle, registry); - }, -}; - -/** - * A full schema declaration - * @typedef {Object.} Schema - */ - -const globalSchemaCache = {}; - -/* dev:start */ -const classnamesCache = {}; -/* dev:end*/ - -export class BasicSerializableObject { - /* dev:start */ - /** - * Fixes typeof DerivedComponent is not assignable to typeof Component, compiled out - * in non-dev builds - */ - constructor(...args) {} - - /* dev:end */ - - static getId() { - abstract; - } - - /** - * Should return the serialization schema - * @returns {Schema} - */ - static getSchema() { - return {}; - } - - // Implementation - /** @returns {Schema} */ - static getCachedSchema() { - const id = this.getId(); - - /* dev:start */ - assert( - classnamesCache[id] === this || classnamesCache[id] === undefined, - "Class name taken twice: " + id + " (from " + this.name + ")" - ); - classnamesCache[id] = this; - /* dev:end */ - - const entry = globalSchemaCache[id]; - if (entry) { - return entry; - } - - const schema = this.getSchema(); - globalSchemaCache[id] = schema; - return schema; - } - - /** @returns {object} */ - serialize() { - return serializeSchema( - this, - /** @type {typeof BasicSerializableObject} */ (this.constructor).getCachedSchema() - ); - } - - /** - * @param {any} data - * @param {import("./savegame_serializer").GameRoot} root - * @returns {string|void} - */ - deserialize(data, root = null) { - return deserializeSchema( - this, - /** @type {typeof BasicSerializableObject} */ (this.constructor).getCachedSchema(), - data, - null, - root - ); - } - - /** @returns {string|void} */ - static verify(data) { - return verifySchema(this.getCachedSchema(), data); - } -} - -/** - * Serializes an object using the given schema, mergin with the given properties - * @param {object} obj The object to serialize - * @param {Schema} schema The schema to use - * @param {object=} mergeWith Any additional properties to merge with the schema, useful for super calls - * @returns {object} Serialized data object - */ -export function serializeSchema(obj, schema, mergeWith = {}) { - for (const key in schema) { - if (!obj.hasOwnProperty(key)) { - logger.error("Invalid schema, property", key, "does not exist on", obj, "(schema=", schema, ")"); - assert( - obj.hasOwnProperty(key), - "serialization: invalid schema, property does not exist on object: " + key - ); - } - if (!schema[key]) { - assert(false, "Invalid schema (bad key '" + key + "'): " + JSON.stringify(schema)); - } - - if (G_IS_DEV) { - try { - mergeWith[key] = schema[key].serialize(obj[key]); - } catch (ex) { - logger.error( - "Serialization of", - obj, - "failed on key '" + key + "' ->", - ex, - "(schema was", - schema, - ")" - ); - throw ex; - } - } else { - mergeWith[key] = schema[key].serialize(obj[key]); - } - } - return mergeWith; -} - -/** - * Deserializes data into an object - * @param {object} obj The object to store the deserialized data into - * @param {Schema} schema The schema to use - * @param {object} data The serialized data - * @param {string|void|null=} baseclassErrorResult Convenience, if this is a string error code, do nothing and return it - * @param {import("../game/root").GameRoot=} root Optional game root reference - * @returns {string|void} String error code or nothing on success - */ -export function deserializeSchema(obj, schema, data, baseclassErrorResult = null, root) { - if (baseclassErrorResult) { - return baseclassErrorResult; - } - - if (!data) { - logger.error("Got 'NULL' data for", obj, "and schema", schema, "!"); - return "Got null data"; - } - - for (const key in schema) { - if (!data.hasOwnProperty(key)) { - logger.error("Data", data, "does not contain", key, "(schema:", schema, ")"); - return "Missing key in schema: " + key + " of class " + obj.constructor.name; - } - if (!schema[key].allowNull() && (data[key] === null || data[key] === undefined)) { - logger.error("Data", data, "has null value for", key, "(schema:", schema, ")"); - return "Non-nullable entry is null: " + key + " of class " + obj.constructor.name; - } - - const errorStatus = schema[key].deserializeWithVerify(data[key], obj, key, obj.root || root); - if (errorStatus) { - logger.error( - "Deserialization failed with error '" + errorStatus + "' on object", - obj, - "and key", - key, - "(root? =", - obj.root ? "y" : "n", - ")" - ); - return errorStatus; - } - } -} - -/** - * Verifies stored data using the given schema - * @param {Schema} schema The schema to use - * @param {object} data The data to verify - * @returns {string|void} String error code or nothing on success - */ -export function verifySchema(schema, data) { - for (const key in schema) { - if (!data.hasOwnProperty(key)) { - logger.error("Data", data, "does not contain", key, "(schema:", schema, ")"); - return "verify: missing key required by schema in stored data: " + key; - } - if (!schema[key].allowNull() && (data[key] === null || data[key] === undefined)) { - logger.error("Data", data, "has null value for", key, "(schema:", schema, ")"); - return "verify: non-nullable entry is null: " + key; - } - - const errorStatus = schema[key].verifySerializedValue(data[key]); - if (errorStatus) { - logger.error(errorStatus); - return "verify: " + errorStatus; - } - } -} - -/** - * Extends a schema by adding the properties from the new schema to the existing base schema - * @param {Schema} base - * @param {Schema} newOne - * @returns {Schema} - */ -export function extendSchema(base, newOne) { - /** @type {Schema} */ - const result = Object.assign({}, base); - for (const key in newOne) { - if (result.hasOwnProperty(key)) { - logger.error("Extend schema got duplicate key:", key); - continue; - } - result[key] = newOne[key]; - } - return result; -} +import { createLogger } from "../core/logging"; +import { + BaseDataType, + TypeArray, + TypeBoolean, + TypeClass, + TypeClassData, + TypeClassFromMetaclass, + TypeClassId, + TypeEntity, + TypeEntityWeakref, + TypeEnum, + TypeFixedClass, + TypeInteger, + TypeKeyValueMap, + TypeMetaClass, + TypeNullable, + TypeNumber, + TypePair, + TypePositiveInteger, + TypePositiveNumber, + TypeString, + TypeStructuredObject, + TypeVector, +} from "./serialization_data_types"; + +const logger = createLogger("serialization"); + +// Schema declarations +export const types = { + int: new TypeInteger(), + uint: new TypePositiveInteger(), + float: new TypeNumber(), + ufloat: new TypePositiveNumber(), + string: new TypeString(), + entity: new TypeEntity(), + weakEntityRef: new TypeEntityWeakref(), + vector: new TypeVector(), + tileVector: new TypeVector(), + bool: new TypeBoolean(), + + /** + * @param {BaseDataType} wrapped + */ + nullable(wrapped) { + return new TypeNullable(wrapped); + }, + + /** + * @param {FactoryTemplate<*>|SingletonFactoryTemplate<*>} registry + */ + classId(registry) { + return new TypeClassId(registry); + }, + /** + * @param {BaseDataType} valueType + * @param {boolean=} includeEmptyValues + */ + keyValueMap(valueType, includeEmptyValues = true) { + return new TypeKeyValueMap(valueType, includeEmptyValues); + }, + + /** + * @param {Object} values + */ + enum(values) { + return new TypeEnum(values); + }, + + /** + * @param {FactoryTemplate<*>} registry + * @param {(GameRoot, any) => object=} resolver + */ + obj(registry, resolver = null) { + return new TypeClass(registry, resolver); + }, + + /** + * @param {FactoryTemplate<*>} registry + */ + objData(registry) { + return new TypeClassData(registry); + }, + + /** + * @param {typeof BasicSerializableObject} cls + */ + knownType(cls) { + return new TypeFixedClass(cls); + }, + + /** + * @param {BaseDataType} innerType + */ + array(innerType) { + return new TypeArray(innerType); + }, + + /** + * @param {BaseDataType} innerType + */ + fixedSizeArray(innerType) { + return new TypeArray(innerType, true); + }, + + /** + * @param {SingletonFactoryTemplate<*>} innerType + */ + classRef(registry) { + return new TypeMetaClass(registry); + }, + + /** + * @param {Object.} descriptor + */ + structured(descriptor) { + return new TypeStructuredObject(descriptor); + }, + + /** + * @param {BaseDataType} a + * @param {BaseDataType} b + */ + pair(a, b) { + return new TypePair(a, b); + }, + + /** + * @param {typeof BasicSerializableObject} classHandle + * @param {SingletonFactoryTemplate<*>} registry + */ + classWithMetaclass(classHandle, registry) { + return new TypeClassFromMetaclass(classHandle, registry); + }, +}; + +/** + * A full schema declaration + * @typedef {Object.} Schema + */ + +const globalSchemaCache = {}; + +/* dev:start */ +const classnamesCache = {}; +/* dev:end*/ + +export class BasicSerializableObject { + /* dev:start */ + /** + * Fixes typeof DerivedComponent is not assignable to typeof Component, compiled out + * in non-dev builds + */ + constructor(...args) {} + + /* dev:end */ + + static getId() { + abstract; + } + + /** + * Should return the serialization schema + * @returns {Schema} + */ + static getSchema() { + return {}; + } + + // Implementation + /** @returns {Schema} */ + static getCachedSchema() { + const id = this.getId(); + + /* dev:start */ + assert( + classnamesCache[id] === this || classnamesCache[id] === undefined, + "Class name taken twice: " + id + " (from " + this.name + ")" + ); + classnamesCache[id] = this; + /* dev:end */ + + const entry = globalSchemaCache[id]; + if (entry) { + return entry; + } + + const schema = this.getSchema(); + globalSchemaCache[id] = schema; + return schema; + } + + /** @returns {object} */ + serialize() { + return serializeSchema( + this, + /** @type {typeof BasicSerializableObject} */ (this.constructor).getCachedSchema() + ); + } + + /** + * @param {any} data + * @param {import("./savegame_serializer").GameRoot} root + * @returns {string|void} + */ + deserialize(data, root = null) { + return deserializeSchema( + this, + /** @type {typeof BasicSerializableObject} */ (this.constructor).getCachedSchema(), + data, + null, + root + ); + } + + /** @returns {string|void} */ + static verify(data) { + return verifySchema(this.getCachedSchema(), data); + } +} + +/** + * Serializes an object using the given schema, mergin with the given properties + * @param {object} obj The object to serialize + * @param {Schema} schema The schema to use + * @param {object=} mergeWith Any additional properties to merge with the schema, useful for super calls + * @returns {object} Serialized data object + */ +export function serializeSchema(obj, schema, mergeWith = {}) { + for (const key in schema) { + if (!obj.hasOwnProperty(key)) { + logger.error("Invalid schema, property", key, "does not exist on", obj, "(schema=", schema, ")"); + assert( + obj.hasOwnProperty(key), + "serialization: invalid schema, property does not exist on object: " + key + ); + } + if (!schema[key]) { + assert(false, "Invalid schema (bad key '" + key + "'): " + JSON.stringify(schema)); + } + + if (G_IS_DEV) { + try { + mergeWith[key] = schema[key].serialize(obj[key]); + } catch (ex) { + logger.error( + "Serialization of", + obj, + "failed on key '" + key + "' ->", + ex, + "(schema was", + schema, + ")" + ); + throw ex; + } + } else { + mergeWith[key] = schema[key].serialize(obj[key]); + } + } + return mergeWith; +} + +/** + * Deserializes data into an object + * @param {object} obj The object to store the deserialized data into + * @param {Schema} schema The schema to use + * @param {object} data The serialized data + * @param {string|void|null=} baseclassErrorResult Convenience, if this is a string error code, do nothing and return it + * @param {import("../game/root").GameRoot=} root Optional game root reference + * @returns {string|void} String error code or nothing on success + */ +export function deserializeSchema(obj, schema, data, baseclassErrorResult = null, root) { + if (baseclassErrorResult) { + return baseclassErrorResult; + } + + if (!data) { + logger.error("Got 'NULL' data for", obj, "and schema", schema, "!"); + return "Got null data"; + } + + for (const key in schema) { + if (!data.hasOwnProperty(key)) { + logger.error("Data", data, "does not contain", key, "(schema:", schema, ")"); + return "Missing key in schema: " + key + " of class " + obj.constructor.name; + } + if (!schema[key].allowNull() && (data[key] === null || data[key] === undefined)) { + logger.error("Data", data, "has null value for", key, "(schema:", schema, ")"); + return "Non-nullable entry is null: " + key + " of class " + obj.constructor.name; + } + + const errorStatus = schema[key].deserializeWithVerify(data[key], obj, key, obj.root || root); + if (errorStatus) { + logger.error( + "Deserialization failed with error '" + errorStatus + "' on object", + obj, + "and key", + key, + "(root? =", + obj.root ? "y" : "n", + ")" + ); + return errorStatus; + } + } +} + +/** + * Verifies stored data using the given schema + * @param {Schema} schema The schema to use + * @param {object} data The data to verify + * @returns {string|void} String error code or nothing on success + */ +export function verifySchema(schema, data) { + for (const key in schema) { + if (!data.hasOwnProperty(key)) { + logger.error("Data", data, "does not contain", key, "(schema:", schema, ")"); + return "verify: missing key required by schema in stored data: " + key; + } + if (!schema[key].allowNull() && (data[key] === null || data[key] === undefined)) { + logger.error("Data", data, "has null value for", key, "(schema:", schema, ")"); + return "verify: non-nullable entry is null: " + key; + } + + const errorStatus = schema[key].verifySerializedValue(data[key]); + if (errorStatus) { + logger.error(errorStatus); + return "verify: " + errorStatus; + } + } +} + +/** + * Extends a schema by adding the properties from the new schema to the existing base schema + * @param {Schema} base + * @param {Schema} newOne + * @returns {Schema} + */ +export function extendSchema(base, newOne) { + /** @type {Schema} */ + const result = Object.assign({}, base); + for (const key in newOne) { + if (result.hasOwnProperty(key)) { + logger.error("Extend schema got duplicate key:", key); + continue; + } + result[key] = newOne[key]; + } + return result; +} diff --git a/src/js/savegame/serialization_data_types.js b/src/js/savegame/serialization_data_types.js index 9fb53bb8..9d3b689f 100644 --- a/src/js/savegame/serialization_data_types.js +++ b/src/js/savegame/serialization_data_types.js @@ -1,1292 +1,1295 @@ -/* typehints:start */ -import { GameRoot } from "../game/root"; -import { BasicSerializableObject } from "./serialization"; -/* typehints:end */ - -import { Vector } from "../core/vector"; -import { round4Digits } from "../core/utils"; -export const globalJsonSchemaDefs = {}; - -/** - * - * @param {import("./serialization").Schema} schema - */ -export function schemaToJsonSchema(schema) { - const jsonSchema = { - type: "object", - additionalProperties: false, - required: [], - properties: {}, - }; - - for (const key in schema) { - const subSchema = schema[key].getAsJsonSchema(); - jsonSchema.required.push(key); - jsonSchema.properties[key] = subSchema; - } - - return jsonSchema; -} - -/** - * Helper function to create a json schema object - * @param {any} properties - */ -function schemaObject(properties) { - return { - type: "object", - required: Object.keys(properties).slice(), - additionalProperties: false, - properties, - }; -} - -/** - * Base serialization data type - */ -export class BaseDataType { - /** - * Serializes a given raw value - * @param {any} value - */ - serialize(value) { - abstract; - return {}; - } - - /** - * Verifies a given serialized value - * @param {any} value - * @returns {string|void} String error code or null on success - */ - verifySerializedValue(value) {} - - /** - * Deserializes a serialized value into the target object under the given key - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - abstract; - } - - /** - * Returns the json schema - */ - getAsJsonSchema() { - const key = this.getCacheKey(); - const schema = this.getAsJsonSchemaUncached(); - - if (!globalJsonSchemaDefs[key]) { - // schema.$id = key; - globalJsonSchemaDefs[key] = schema; - } - - return { - $ref: "#/definitions/" + key, - }; - } - - /** - * INTERNAL Should return the json schema representation - */ - getAsJsonSchemaUncached() { - abstract; - } - - /** - * Returns whether null values are okay - * @returns {boolean} - */ - allowNull() { - return false; - } - - // Helper methods - - /** - * Deserializes a serialized value, but performs integrity checks before - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserializeWithVerify(value, targetObject, targetKey, root) { - const errorCode = this.verifySerializedValue(value); - if (errorCode) { - return ( - "serialization verify failed: " + - errorCode + - " [value " + - JSON.stringify(value).substr(0, 100) + - "]" - ); - } - return this.deserialize(value, targetObject, targetKey, root); - } - - /** - * Should return a cacheable key - */ - getCacheKey() { - abstract; - return ""; - } -} - -export class TypeInteger extends BaseDataType { - serialize(value) { - assert(Number.isInteger(value), "Type integer got non integer for serialize: " + value); - return value; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - - getAsJsonSchemaUncached() { - return { - type: "integer", - }; - } - - verifySerializedValue(value) { - if (!Number.isInteger(value)) { - return "Not a valid number"; - } - } - - getCacheKey() { - return "int"; - } -} - -export class TypePositiveInteger extends BaseDataType { - serialize(value) { - assert(Number.isInteger(value), "Type integer got non integer for serialize: " + value); - assert(value >= 0, "value < 0: " + value); - return value; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - - getAsJsonSchemaUncached() { - return { - type: "integer", - minimum: 0, - }; - } - - verifySerializedValue(value) { - if (!Number.isInteger(value)) { - return "Not a valid number"; - } - if (value < 0) { - return "Negative value for positive integer"; - } - } - - getCacheKey() { - return "uint"; - } -} - -export class TypeBoolean extends BaseDataType { - serialize(value) { - assert(value === true || value === false, "Type bool got non bool for serialize: " + value); - return value; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - - getAsJsonSchemaUncached() { - return { - type: "boolean", - }; - } - - verifySerializedValue(value) { - if (value !== true && value !== false) { - return "Not a boolean"; - } - } - - getCacheKey() { - return "bool"; - } -} - -export class TypeString extends BaseDataType { - serialize(value) { - assert(typeof value === "string", "Type string got non string for serialize: " + value); - return value; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - getAsJsonSchemaUncached() { - return { - type: "string", - }; - } - - verifySerializedValue(value) { - if (typeof value !== "string") { - return "Not a valid string"; - } - } - - getCacheKey() { - return "string"; - } -} - -export class TypeVector extends BaseDataType { - serialize(value) { - assert(value instanceof Vector, "Type vector got non vector for serialize: " + value); - return { - x: round4Digits(value.x), - y: round4Digits(value.y), - }; - } - - getAsJsonSchemaUncached() { - return schemaObject({ - x: { - type: "number", - }, - y: { - type: "number", - }, - }); - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = new Vector(value.x, value.y); - } - - verifySerializedValue(value) { - if (!Number.isFinite(value.x) || !Number.isFinite(value.y)) { - return "Not a valid vector, missing x/y or bad data type"; - } - } - - getCacheKey() { - return "vector"; - } -} - -export class TypeTileVector extends BaseDataType { - serialize(value) { - assert(value instanceof Vector, "Type vector got non vector for serialize: " + value); - assert(Number.isInteger(value.x) && value.x > 0, "Invalid tile x:" + value.x); - assert(Number.isInteger(value.y) && value.y > 0, "Invalid tile x:" + value.y); - return { x: value.x, y: value.y }; - } - - getAsJsonSchemaUncached() { - return schemaObject({ - x: { - type: "integer", - minimum: 0, - maximum: 256, - }, - y: { - type: "integer", - minimum: 0, - maximum: 256, - }, - }); - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = new Vector(value.x, value.y); - } - - verifySerializedValue(value) { - if (!Number.isInteger(value.x) || !Number.isInteger(value.y)) { - return "Not a valid tile vector, missing x/y or bad data type"; - } - if (value.x < 0 || value.y < 0) { - return "Invalid tile vector, x or y < 0"; - } - } - - getCacheKey() { - return "tilevector"; - } -} - -export class TypeNumber extends BaseDataType { - serialize(value) { - assert(Number.isFinite(value), "Type number got non number for serialize: " + value); - assert(!Number.isNaN(value), "Value is nan: " + value); - return round4Digits(value); - } - - getAsJsonSchemaUncached() { - return { - type: "number", - }; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - - verifySerializedValue(value) { - if (!Number.isFinite(value)) { - return "Not a valid number: " + value; - } - } - - getCacheKey() { - return "float"; - } -} - -export class TypePositiveNumber extends BaseDataType { - serialize(value) { - assert(Number.isFinite(value), "Type number got non number for serialize: " + value); - assert(value >= 0, "Postitive number got negative value: " + value); - return round4Digits(value); - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - - getAsJsonSchemaUncached() { - return { - type: "number", - minimum: 0, - }; - } - - verifySerializedValue(value) { - if (!Number.isFinite(value)) { - return "Not a valid number: " + value; - } - if (value < 0) { - return "Positive number got negative value: " + value; - } - } - - getCacheKey() { - return "ufloat"; - } -} - -export class TypeEnum extends BaseDataType { - /** - * @param {Object.} enumeration - */ - constructor(enumeration = {}) { - super(); - this.availableValues = Object.values(enumeration); - } - - serialize(value) { - assert(this.availableValues.indexOf(value) >= 0, "Unknown value: " + value); - return value; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - - getAsJsonSchemaUncached() { - return { - type: "string", - enum: this.availableValues, - }; - } - - verifySerializedValue(value) { - if (this.availableValues.indexOf(value) < 0) { - return "Unknown enum value: " + value; - } - } - - getCacheKey() { - return "enum." + this.availableValues.join(","); - } -} - -export class TypeEntity extends BaseDataType { - serialize(value) { - // assert(value instanceof Entity, "Not a valid entity ref: " + value); - assert(value.uid, "Entity has no uid yet"); - assert(!value.destroyed, "Entity already destroyed"); - assert(!value.queuedForDestroy, "Entity queued for destroy"); - - return value.uid; - } - - getAsJsonSchemaUncached() { - return { - type: "integer", - minimum: 0, - }; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - const entity = root.entityMgr.findByUid(value); - if (!entity) { - return "Entity not found by uid: " + value; - } - targetObject[targetKey] = entity; - } - - verifySerializedValue(value) { - if (!Number.isFinite(value)) { - return "Not a valid uuid: " + value; - } - } - - getCacheKey() { - return "entity"; - } -} - -export class TypeEntityWeakref extends BaseDataType { - serialize(value) { - if (value === null) { - return null; - } - - // assert(value instanceof Entity, "Not a valid entity ref (weak): " + value); - assert(value.uid, "Entity has no uid yet"); - if (value.destroyed || value.queuedForDestroy) { - return null; - } - return value.uid; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - if (value === null) { - targetObject[targetKey] = null; - return; - } - const entity = root.entityMgr.findByUid(value, false); - targetObject[targetKey] = entity; - } - - getAsJsonSchemaUncached() { - return { - type: ["null", "integer"], - minimum: 0, - }; - } - - allowNull() { - return true; - } - - verifySerializedValue(value) { - if (value !== null && !Number.isFinite(value)) { - return "Not a valid uuid: " + value; - } - } - - getCacheKey() { - return "entity-weakref"; - } -} - -export class TypeClass extends BaseDataType { - /** - * - * @param {FactoryTemplate<*>} registry - * @param {(GameRoot, object) => object} customResolver - */ - constructor(registry, customResolver = null) { - super(); - this.registry = registry; - this.customResolver = customResolver; - } - - serialize(value) { - assert(typeof value === "object", "Not a class instance: " + value); - return { - $: value.constructor.getId(), - data: value.serialize(), - }; - } - - getAsJsonSchemaUncached() { - const options = []; - const entries = this.registry.getEntries(); - for (let i = 0; i < entries.length; ++i) { - const entry = entries[i]; - - options.push( - schemaObject({ - $: { - type: "string", - // @ts-ignore - enum: [entry.getId()], - }, - // @ts-ignore - data: schemaToJsonSchema(entry.getCachedSchema()), - }) - ); - } - - return { oneOf: options }; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - let instance; - - if (this.customResolver) { - instance = this.customResolver(root, value); - if (!instance) { - return "Failed to call custom resolver"; - } - } else { - const instanceClass = this.registry.findById(value.$); - if (!instanceClass || !instanceClass.prototype) { - return "Invalid class id (runtime-err): " + value.$ + "->" + instanceClass; - } - instance = Object.create(instanceClass.prototype); - const errorState = instance.deserialize(value.data); - if (errorState) { - return errorState; - } - } - targetObject[targetKey] = instance; - } - - verifySerializedValue(value) { - if (!value) { - return "Got null data"; - } - - if (!this.registry.hasId(value.$)) { - return "Invalid class id: " + value.$ + " (factory is " + this.registry.getId() + ")"; - } - } - - getCacheKey() { - return "class." + this.registry.getId(); - } -} - -export class TypeClassData extends BaseDataType { - /** - * - * @param {FactoryTemplate<*>} registry - */ - constructor(registry) { - super(); - this.registry = registry; - } - - serialize(value) { - assert(typeof value === "object", "Not a class instance: " + value); - return value.serialize(); - } - - getAsJsonSchemaUncached() { - const options = []; - const entries = this.registry.getEntries(); - for (let i = 0; i < entries.length; ++i) { - const entry = entries[i]; - options.push( - schemaToJsonSchema(/** @type {typeof BasicSerializableObject} */ (entry).getCachedSchema()) - ); - } - return { oneOf: options }; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - assert(false, "can not deserialize class data of type " + this.registry.getId()); - } - - verifySerializedValue(value) { - if (!value) { - return "Got null data"; - } - } - - getCacheKey() { - return "class." + this.registry.getId(); - } -} - -export class TypeClassFromMetaclass extends BaseDataType { - /** - * - * @param {typeof BasicSerializableObject} classHandle - * @param {SingletonFactoryTemplate<*>} registry - */ - constructor(classHandle, registry) { - super(); - this.registry = registry; - this.classHandle = classHandle; - } - - serialize(value) { - assert(typeof value === "object", "Not a class instance: " + value); - return { - $: value.getMetaclass().getId(), - data: value.serialize(), - }; - } - - getAsJsonSchemaUncached() { - // const options = []; - const ids = this.registry.getAllIds(); - - return { - $: { - type: "string", - enum: ids, - }, - data: schemaToJsonSchema(this.classHandle.getCachedSchema()), - }; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - const metaClassInstance = this.registry.findById(value.$); - if (!metaClassInstance || !metaClassInstance.prototype) { - return "Invalid meta class id (runtime-err): " + value.$ + "->" + metaClassInstance; - } - - const instanceClass = metaClassInstance.getInstanceClass(); - const instance = Object.create(instanceClass.prototype); - const errorState = instance.deserialize(value.data); - if (errorState) { - return errorState; - } - targetObject[targetKey] = instance; - } - - verifySerializedValue(value) { - if (!value) { - return "Got null data"; - } - - if (!this.registry.hasId(value.$)) { - return "Invalid class id: " + value.$ + " (factory is " + this.registry.getId() + ")"; - } - } - - getCacheKey() { - return "classofmetaclass." + this.registry.getId(); - } -} - -export class TypeMetaClass extends BaseDataType { - /** - * - * @param {SingletonFactoryTemplate<*>} registry - */ - constructor(registry) { - super(); - this.registry = registry; - } - - serialize(value) { - return value.getId(); - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - const instanceClass = this.registry.findById(value); - if (!instanceClass) { - return "Invalid class id (runtime-err): " + value; - } - targetObject[targetKey] = instanceClass; - } - - getAsJsonSchemaUncached() { - return { - type: "string", - enum: this.registry.getAllIds(), - }; - } - - verifySerializedValue(value) { - if (!value) { - return "Got null data"; - } - - if (typeof value !== "string") { - return "Got non string data"; - } - - if (!this.registry.hasId(value)) { - return "Invalid class id: " + value + " (factory is " + this.registry.getId() + ")"; - } - } - - getCacheKey() { - return "metaclass." + this.registry.getId(); - } -} - -export class TypeArray extends BaseDataType { - /** - * @param {BaseDataType} innerType - */ - constructor(innerType) { - super(); - this.innerType = innerType; - } - - serialize(value) { - assert(Array.isArray(value), "Not an array"); - const result = new Array(value.length); - for (let i = 0; i < value.length; ++i) { - result[i] = this.innerType.serialize(value[i]); - } - return result; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - let destination = targetObject[targetKey]; - if (!destination) { - targetObject[targetKey] = destination = new Array(value.length); - } - - for (let i = 0; i < value.length; ++i) { - const errorStatus = this.innerType.deserializeWithVerify(value[i], destination, i, root); - if (errorStatus) { - return errorStatus; - } - } - } - - getAsJsonSchemaUncached() { - return { - type: "array", - items: this.innerType.getAsJsonSchema(), - }; - } - - verifySerializedValue(value) { - if (!Array.isArray(value)) { - return "Not an array: " + value; - } - } - - getCacheKey() { - return "array." + this.innerType.getCacheKey(); - } -} - -export class TypeFixedClass extends BaseDataType { - /** - * - * @param {typeof BasicSerializableObject} baseclass - */ - constructor(baseclass) { - super(); - this.baseclass = baseclass; - } - - serialize(value) { - assert(value instanceof this.baseclass, "Not a valid class instance"); - return value.serialize(); - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - const instance = Object.create(this.baseclass.prototype); - const errorState = instance.deserialize(value); - if (errorState) { - return "Failed to deserialize class: " + errorState; - } - targetObject[targetKey] = instance; - } - - getAsJsonSchemaUncached() { - this.baseclass.getSchema(); - this.baseclass.getCachedSchema(); - return schemaToJsonSchema(this.baseclass.getCachedSchema()); - } - - verifySerializedValue(value) { - if (!value) { - return "Got null data"; - } - } - - getCacheKey() { - return "fixedclass." + this.baseclass.getId(); - } -} - -export class TypeKeyValueMap extends BaseDataType { - /** - * @param {BaseDataType} valueType - * @param {boolean=} includeEmptyValues - */ - constructor(valueType, includeEmptyValues = true) { - super(); - this.valueType = valueType; - this.includeEmptyValues = includeEmptyValues; - } - - serialize(value) { - assert(typeof value === "object", "not an object"); - let result = {}; - for (const key in value) { - const serialized = this.valueType.serialize(value[key]); - if (!this.includeEmptyValues && typeof serialized === "object") { - if ( - serialized.$ && - typeof serialized.data === "object" && - Object.keys(serialized.data).length === 0 - ) { - continue; - } else if (Object.keys(serialized).length === 0) { - continue; - } - } - - result[key] = serialized; - } - return result; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - let result = {}; - for (const key in value) { - const errorCode = this.valueType.deserializeWithVerify(value[key], result, key, root); - if (errorCode) { - return errorCode; - } - } - targetObject[targetKey] = result; - } - - getAsJsonSchemaUncached() { - return { - type: "object", - additionalProperties: this.valueType.getAsJsonSchema(), - }; - } - - verifySerializedValue(value) { - if (typeof value !== "object") { - return "KV map is not an object"; - } - } - - getCacheKey() { - return "kvmap." + this.valueType.getCacheKey(); - } -} - -export class TypeClassId extends BaseDataType { - /** - * @param {FactoryTemplate<*>|SingletonFactoryTemplate<*>} registry - */ - constructor(registry) { - super(); - this.registry = registry; - } - - serialize(value) { - assert(typeof value === "string", "Not a valid string"); - assert(this.registry.hasId(value), "Id " + value + " not found in registry"); - return value; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - targetObject[targetKey] = value; - } - - getAsJsonSchemaUncached() { - return { - type: "string", - enum: this.registry.getAllIds(), - }; - } - - verifySerializedValue(value) { - if (typeof value !== "string") { - return "Not a valid registry id key: " + value; - } - if (!this.registry.hasId(value)) { - return "Id " + value + " not known to registry"; - } - } - - getCacheKey() { - return "classid." + this.registry.getId(); - } -} - -export class TypePair extends BaseDataType { - /** - * @param {BaseDataType} type1 - * @param {BaseDataType} type2 - */ - constructor(type1, type2) { - super(); - assert(type1 && type1 instanceof BaseDataType, "bad first type given for pair"); - assert(type2 && type2 instanceof BaseDataType, "bad second type given for pair"); - this.type1 = type1; - this.type2 = type2; - } - - serialize(value) { - assert(Array.isArray(value), "pair: not an array"); - assert(value.length === 2, "pair: length != 2"); - return [this.type1.serialize(value[0]), this.type2.serialize(value[1])]; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - const result = [undefined, undefined]; - - let errorCode = this.type1.deserialize(value[0], result, 0, root); - if (errorCode) { - return errorCode; - } - errorCode = this.type2.deserialize(value[1], result, 1, root); - if (errorCode) { - return errorCode; - } - - targetObject[targetKey] = result; - } - - getAsJsonSchemaUncached() { - return { - type: "array", - minLength: 2, - maxLength: 2, - items: [this.type1.getAsJsonSchema(), this.type2.getAsJsonSchema()], - }; - } - - verifySerializedValue(value) { - if (!Array.isArray(value)) { - return "Pair is not an array"; - } - if (value.length !== 2) { - return "Pair length != 2"; - } - let errorCode = this.type1.verifySerializedValue(value[0]); - if (errorCode) { - return errorCode; - } - errorCode = this.type2.verifySerializedValue(value[1]); - if (errorCode) { - return errorCode; - } - } - - getCacheKey() { - return "pair.(" + this.type1.getCacheKey() + "," + this.type2.getCacheKey + ")"; - } -} - -export class TypeNullable extends BaseDataType { - /** - * @param {BaseDataType} wrapped - */ - constructor(wrapped) { - super(); - this.wrapped = wrapped; - } - - serialize(value) { - if (value === null || value === undefined) { - return null; - } - return this.wrapped.serialize(value); - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - if (value === null || value === undefined) { - targetObject[targetKey] = null; - return; - } - return this.wrapped.deserialize(value, targetObject, targetKey, root); - } - - verifySerializedValue(value) { - if (value === null) { - return; - } - return this.wrapped.verifySerializedValue(value); - } - - getAsJsonSchemaUncached() { - return { - oneOf: [ - { - type: "null", - }, - this.wrapped.getAsJsonSchema(), - ], - }; - } - - allowNull() { - return true; - } - - getCacheKey() { - return "nullable." + this.wrapped.getCacheKey(); - } -} - -export class TypeStructuredObject extends BaseDataType { - /** - * @param {Object.} descriptor - */ - constructor(descriptor) { - super(); - this.descriptor = descriptor; - } - - serialize(value) { - assert(typeof value === "object", "not an object"); - let result = {}; - for (const key in this.descriptor) { - // assert(value.hasOwnProperty(key), "Serialization: Object does not have", key, "property!"); - result[key] = this.descriptor[key].serialize(value[key]); - } - return result; - } - - /** - * @see BaseDataType.deserialize - * @param {any} value - * @param {GameRoot} root - * @param {object} targetObject - * @param {string|number} targetKey - * @returns {string|void} String error code or null on success - */ - deserialize(value, targetObject, targetKey, root) { - let target = targetObject[targetKey]; - if (!target) { - targetObject[targetKey] = target = {}; - } - - for (const key in value) { - const valueType = this.descriptor[key]; - const errorCode = valueType.deserializeWithVerify(value[key], target, key, root); - if (errorCode) { - return errorCode; - } - } - } - - getAsJsonSchemaUncached() { - let properties = {}; - for (const key in this.descriptor) { - properties[key] = this.descriptor[key].getAsJsonSchema(); - } - - return { - type: "object", - required: Object.keys(this.descriptor), - properties, - }; - } - - verifySerializedValue(value) { - if (typeof value !== "object") { - return "structured object is not an object"; - } - for (const key in this.descriptor) { - if (!value.hasOwnProperty(key)) { - return "structured object is missing key " + key; - } - const subError = this.descriptor[key].verifySerializedValue(value[key]); - if (subError) { - return "structured object::" + subError; - } - } - } - - getCacheKey() { - let props = []; - for (const key in this.descriptor) { - props.push(key + "=" + this.descriptor[key].getCacheKey()); - } - return "structured[" + props.join(",") + "]"; - } -} +/* typehints:start */ +import { GameRoot } from "../game/root"; +import { BasicSerializableObject } from "./serialization"; +/* typehints:end */ + +import { Vector } from "../core/vector"; +import { round4Digits } from "../core/utils"; +export const globalJsonSchemaDefs = {}; + +/** + * + * @param {import("./serialization").Schema} schema + */ +export function schemaToJsonSchema(schema) { + const jsonSchema = { + type: "object", + additionalProperties: false, + required: [], + properties: {}, + }; + + for (const key in schema) { + const subSchema = schema[key].getAsJsonSchema(); + jsonSchema.required.push(key); + jsonSchema.properties[key] = subSchema; + } + + return jsonSchema; +} + +/** + * Helper function to create a json schema object + * @param {any} properties + */ +function schemaObject(properties) { + return { + type: "object", + required: Object.keys(properties).slice(), + additionalProperties: false, + properties, + }; +} + +/** + * Base serialization data type + */ +export class BaseDataType { + /** + * Serializes a given raw value + * @param {any} value + */ + serialize(value) { + abstract; + return {}; + } + + /** + * Verifies a given serialized value + * @param {any} value + * @returns {string|void} String error code or null on success + */ + verifySerializedValue(value) {} + + /** + * Deserializes a serialized value into the target object under the given key + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + abstract; + } + + /** + * Returns the json schema + */ + getAsJsonSchema() { + const key = this.getCacheKey(); + const schema = this.getAsJsonSchemaUncached(); + + if (!globalJsonSchemaDefs[key]) { + // schema.$id = key; + globalJsonSchemaDefs[key] = schema; + } + + return { + $ref: "#/definitions/" + key, + }; + } + + /** + * INTERNAL Should return the json schema representation + */ + getAsJsonSchemaUncached() { + abstract; + } + + /** + * Returns whether null values are okay + * @returns {boolean} + */ + allowNull() { + return false; + } + + // Helper methods + + /** + * Deserializes a serialized value, but performs integrity checks before + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserializeWithVerify(value, targetObject, targetKey, root) { + const errorCode = this.verifySerializedValue(value); + if (errorCode) { + return ( + "serialization verify failed: " + + errorCode + + " [value " + + (JSON.stringify(value) || "").substr(0, 100) + + "]" + ); + } + return this.deserialize(value, targetObject, targetKey, root); + } + + /** + * Should return a cacheable key + */ + getCacheKey() { + abstract; + return ""; + } +} + +export class TypeInteger extends BaseDataType { + serialize(value) { + assert(Number.isInteger(value), "Type integer got non integer for serialize: " + value); + return value; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + + getAsJsonSchemaUncached() { + return { + type: "integer", + }; + } + + verifySerializedValue(value) { + if (!Number.isInteger(value)) { + return "Not a valid number"; + } + } + + getCacheKey() { + return "int"; + } +} + +export class TypePositiveInteger extends BaseDataType { + serialize(value) { + assert(Number.isInteger(value), "Type integer got non integer for serialize: " + value); + assert(value >= 0, "value < 0: " + value); + return value; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + + getAsJsonSchemaUncached() { + return { + type: "integer", + minimum: 0, + }; + } + + verifySerializedValue(value) { + if (!Number.isInteger(value)) { + return "Not a valid number"; + } + if (value < 0) { + return "Negative value for positive integer"; + } + } + + getCacheKey() { + return "uint"; + } +} + +export class TypeBoolean extends BaseDataType { + serialize(value) { + assert(value === true || value === false, "Type bool got non bool for serialize: " + value); + return value; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + + getAsJsonSchemaUncached() { + return { + type: "boolean", + }; + } + + verifySerializedValue(value) { + if (value !== true && value !== false) { + return "Not a boolean"; + } + } + + getCacheKey() { + return "bool"; + } +} + +export class TypeString extends BaseDataType { + serialize(value) { + assert(typeof value === "string", "Type string got non string for serialize: " + value); + return value; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + getAsJsonSchemaUncached() { + return { + type: "string", + }; + } + + verifySerializedValue(value) { + if (typeof value !== "string") { + return "Not a valid string"; + } + } + + getCacheKey() { + return "string"; + } +} + +export class TypeVector extends BaseDataType { + serialize(value) { + assert(value instanceof Vector, "Type vector got non vector for serialize: " + value); + return { + x: round4Digits(value.x), + y: round4Digits(value.y), + }; + } + + getAsJsonSchemaUncached() { + return schemaObject({ + x: { + type: "number", + }, + y: { + type: "number", + }, + }); + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = new Vector(value.x, value.y); + } + + verifySerializedValue(value) { + if (!Number.isFinite(value.x) || !Number.isFinite(value.y)) { + return "Not a valid vector, missing x/y or bad data type"; + } + } + + getCacheKey() { + return "vector"; + } +} + +export class TypeTileVector extends BaseDataType { + serialize(value) { + assert(value instanceof Vector, "Type vector got non vector for serialize: " + value); + assert(Number.isInteger(value.x) && value.x > 0, "Invalid tile x:" + value.x); + assert(Number.isInteger(value.y) && value.y > 0, "Invalid tile x:" + value.y); + return { x: value.x, y: value.y }; + } + + getAsJsonSchemaUncached() { + return schemaObject({ + x: { + type: "integer", + minimum: 0, + maximum: 256, + }, + y: { + type: "integer", + minimum: 0, + maximum: 256, + }, + }); + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = new Vector(value.x, value.y); + } + + verifySerializedValue(value) { + if (!Number.isInteger(value.x) || !Number.isInteger(value.y)) { + return "Not a valid tile vector, missing x/y or bad data type"; + } + if (value.x < 0 || value.y < 0) { + return "Invalid tile vector, x or y < 0"; + } + } + + getCacheKey() { + return "tilevector"; + } +} + +export class TypeNumber extends BaseDataType { + serialize(value) { + assert(Number.isFinite(value), "Type number got non number for serialize: " + value); + assert(!Number.isNaN(value), "Value is nan: " + value); + return round4Digits(value); + } + + getAsJsonSchemaUncached() { + return { + type: "number", + }; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + + verifySerializedValue(value) { + if (!Number.isFinite(value)) { + return "Not a valid number: " + value; + } + } + + getCacheKey() { + return "float"; + } +} + +export class TypePositiveNumber extends BaseDataType { + serialize(value) { + assert(Number.isFinite(value), "Type number got non number for serialize: " + value); + assert(value >= 0, "Postitive number got negative value: " + value); + return round4Digits(value); + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + + getAsJsonSchemaUncached() { + return { + type: "number", + minimum: 0, + }; + } + + verifySerializedValue(value) { + if (!Number.isFinite(value)) { + return "Not a valid number: " + value; + } + if (value < 0) { + return "Positive number got negative value: " + value; + } + } + + getCacheKey() { + return "ufloat"; + } +} + +export class TypeEnum extends BaseDataType { + /** + * @param {Object.} enumeration + */ + constructor(enumeration = {}) { + super(); + this.availableValues = Object.values(enumeration); + } + + serialize(value) { + assert(this.availableValues.indexOf(value) >= 0, "Unknown value: " + value); + return value; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + + getAsJsonSchemaUncached() { + return { + type: "string", + enum: this.availableValues, + }; + } + + verifySerializedValue(value) { + if (this.availableValues.indexOf(value) < 0) { + return "Unknown enum value: " + value; + } + } + + getCacheKey() { + return "enum." + this.availableValues.join(","); + } +} + +export class TypeEntity extends BaseDataType { + serialize(value) { + // assert(value instanceof Entity, "Not a valid entity ref: " + value); + assert(value.uid, "Entity has no uid yet"); + assert(!value.destroyed, "Entity already destroyed"); + assert(!value.queuedForDestroy, "Entity queued for destroy"); + + return value.uid; + } + + getAsJsonSchemaUncached() { + return { + type: "integer", + minimum: 0, + }; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + const entity = root.entityMgr.findByUid(value); + if (!entity) { + return "Entity not found by uid: " + value; + } + targetObject[targetKey] = entity; + } + + verifySerializedValue(value) { + if (!Number.isFinite(value)) { + return "Not a valid uuid: " + value; + } + } + + getCacheKey() { + return "entity"; + } +} + +export class TypeEntityWeakref extends BaseDataType { + serialize(value) { + if (value === null) { + return null; + } + + // assert(value instanceof Entity, "Not a valid entity ref (weak): " + value); + assert(value.uid, "Entity has no uid yet"); + if (value.destroyed || value.queuedForDestroy) { + return null; + } + return value.uid; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + if (value === null) { + targetObject[targetKey] = null; + return; + } + const entity = root.entityMgr.findByUid(value, false); + targetObject[targetKey] = entity; + } + + getAsJsonSchemaUncached() { + return { + type: ["null", "integer"], + minimum: 0, + }; + } + + allowNull() { + return true; + } + + verifySerializedValue(value) { + if (value !== null && !Number.isFinite(value)) { + return "Not a valid uuid: " + value; + } + } + + getCacheKey() { + return "entity-weakref"; + } +} + +export class TypeClass extends BaseDataType { + /** + * + * @param {FactoryTemplate<*>} registry + * @param {(GameRoot, object) => object} customResolver + */ + constructor(registry, customResolver = null) { + super(); + this.registry = registry; + this.customResolver = customResolver; + } + + serialize(value) { + assert(typeof value === "object", "Not a class instance: " + value); + return { + $: value.constructor.getId(), + data: value.serialize(), + }; + } + + getAsJsonSchemaUncached() { + const options = []; + const entries = this.registry.getEntries(); + for (let i = 0; i < entries.length; ++i) { + const entry = entries[i]; + + options.push( + schemaObject({ + $: { + type: "string", + // @ts-ignore + enum: [entry.getId()], + }, + // @ts-ignore + data: schemaToJsonSchema(entry.getCachedSchema()), + }) + ); + } + + return { oneOf: options }; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + let instance; + + if (this.customResolver) { + instance = this.customResolver(root, value); + if (!instance) { + return "Failed to call custom resolver"; + } + } else { + const instanceClass = this.registry.findById(value.$); + if (!instanceClass || !instanceClass.prototype) { + return "Invalid class id (runtime-err): " + value.$ + "->" + instanceClass; + } + instance = Object.create(instanceClass.prototype); + const errorState = instance.deserialize(value.data); + if (errorState) { + return errorState; + } + } + targetObject[targetKey] = instance; + } + + verifySerializedValue(value) { + if (!value) { + return "Got null data"; + } + + if (!this.registry.hasId(value.$)) { + return "Invalid class id: " + value.$ + " (factory is " + this.registry.getId() + ")"; + } + } + + getCacheKey() { + return "class." + this.registry.getId(); + } +} + +export class TypeClassData extends BaseDataType { + /** + * + * @param {FactoryTemplate<*>} registry + */ + constructor(registry) { + super(); + this.registry = registry; + } + + serialize(value) { + assert(typeof value === "object", "Not a class instance: " + value); + return value.serialize(); + } + + getAsJsonSchemaUncached() { + const options = []; + const entries = this.registry.getEntries(); + for (let i = 0; i < entries.length; ++i) { + const entry = entries[i]; + options.push( + schemaToJsonSchema(/** @type {typeof BasicSerializableObject} */ (entry).getCachedSchema()) + ); + } + return { oneOf: options }; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + assert(false, "can not deserialize class data of type " + this.registry.getId()); + } + + verifySerializedValue(value) { + if (!value) { + return "Got null data"; + } + } + + getCacheKey() { + return "class." + this.registry.getId(); + } +} + +export class TypeClassFromMetaclass extends BaseDataType { + /** + * + * @param {typeof BasicSerializableObject} classHandle + * @param {SingletonFactoryTemplate<*>} registry + */ + constructor(classHandle, registry) { + super(); + this.registry = registry; + this.classHandle = classHandle; + } + + serialize(value) { + assert(typeof value === "object", "Not a class instance: " + value); + return { + $: value.getMetaclass().getId(), + data: value.serialize(), + }; + } + + getAsJsonSchemaUncached() { + // const options = []; + const ids = this.registry.getAllIds(); + + return { + $: { + type: "string", + enum: ids, + }, + data: schemaToJsonSchema(this.classHandle.getCachedSchema()), + }; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + const metaClassInstance = this.registry.findById(value.$); + if (!metaClassInstance || !metaClassInstance.prototype) { + return "Invalid meta class id (runtime-err): " + value.$ + "->" + metaClassInstance; + } + + const instanceClass = metaClassInstance.getInstanceClass(); + const instance = Object.create(instanceClass.prototype); + const errorState = instance.deserialize(value.data); + if (errorState) { + return errorState; + } + targetObject[targetKey] = instance; + } + + verifySerializedValue(value) { + if (!value) { + return "Got null data"; + } + + if (!this.registry.hasId(value.$)) { + return "Invalid class id: " + value.$ + " (factory is " + this.registry.getId() + ")"; + } + } + + getCacheKey() { + return "classofmetaclass." + this.registry.getId(); + } +} + +export class TypeMetaClass extends BaseDataType { + /** + * + * @param {SingletonFactoryTemplate<*>} registry + */ + constructor(registry) { + super(); + this.registry = registry; + } + + serialize(value) { + return value.getId(); + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + const instanceClass = this.registry.findById(value); + if (!instanceClass) { + return "Invalid class id (runtime-err): " + value; + } + targetObject[targetKey] = instanceClass; + } + + getAsJsonSchemaUncached() { + return { + type: "string", + enum: this.registry.getAllIds(), + }; + } + + verifySerializedValue(value) { + if (!value) { + return "Got null data"; + } + + if (typeof value !== "string") { + return "Got non string data"; + } + + if (!this.registry.hasId(value)) { + return "Invalid class id: " + value + " (factory is " + this.registry.getId() + ")"; + } + } + + getCacheKey() { + return "metaclass." + this.registry.getId(); + } +} + +export class TypeArray extends BaseDataType { + /** + * @param {BaseDataType} innerType + */ + constructor(innerType, fixedSize = false) { + super(); + this.fixedSize = fixedSize; + this.innerType = innerType; + } + + serialize(value) { + assert(Array.isArray(value), "Not an array"); + const result = new Array(value.length); + for (let i = 0; i < value.length; ++i) { + result[i] = this.innerType.serialize(value[i]); + } + return result; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + let destination = targetObject[targetKey]; + if (!destination) { + targetObject[targetKey] = destination = new Array(value.length); + } + + const size = this.fixedSize ? Math.min(value.length, destination.length) : value.length; + + for (let i = 0; i < size; ++i) { + const errorStatus = this.innerType.deserializeWithVerify(value[i], destination, i, root); + if (errorStatus) { + return errorStatus; + } + } + } + + getAsJsonSchemaUncached() { + return { + type: "array", + items: this.innerType.getAsJsonSchema(), + }; + } + + verifySerializedValue(value) { + if (!Array.isArray(value)) { + return "Not an array: " + value; + } + } + + getCacheKey() { + return "array." + this.innerType.getCacheKey(); + } +} + +export class TypeFixedClass extends BaseDataType { + /** + * + * @param {typeof BasicSerializableObject} baseclass + */ + constructor(baseclass) { + super(); + this.baseclass = baseclass; + } + + serialize(value) { + assert(value instanceof this.baseclass, "Not a valid class instance"); + return value.serialize(); + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + const instance = Object.create(this.baseclass.prototype); + const errorState = instance.deserialize(value); + if (errorState) { + return "Failed to deserialize class: " + errorState; + } + targetObject[targetKey] = instance; + } + + getAsJsonSchemaUncached() { + this.baseclass.getSchema(); + this.baseclass.getCachedSchema(); + return schemaToJsonSchema(this.baseclass.getCachedSchema()); + } + + verifySerializedValue(value) { + if (!value) { + return "Got null data"; + } + } + + getCacheKey() { + return "fixedclass." + this.baseclass.getId(); + } +} + +export class TypeKeyValueMap extends BaseDataType { + /** + * @param {BaseDataType} valueType + * @param {boolean=} includeEmptyValues + */ + constructor(valueType, includeEmptyValues = true) { + super(); + this.valueType = valueType; + this.includeEmptyValues = includeEmptyValues; + } + + serialize(value) { + assert(typeof value === "object", "not an object"); + let result = {}; + for (const key in value) { + const serialized = this.valueType.serialize(value[key]); + if (!this.includeEmptyValues && typeof serialized === "object") { + if ( + serialized.$ && + typeof serialized.data === "object" && + Object.keys(serialized.data).length === 0 + ) { + continue; + } else if (Object.keys(serialized).length === 0) { + continue; + } + } + + result[key] = serialized; + } + return result; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + let result = {}; + for (const key in value) { + const errorCode = this.valueType.deserializeWithVerify(value[key], result, key, root); + if (errorCode) { + return errorCode; + } + } + targetObject[targetKey] = result; + } + + getAsJsonSchemaUncached() { + return { + type: "object", + additionalProperties: this.valueType.getAsJsonSchema(), + }; + } + + verifySerializedValue(value) { + if (typeof value !== "object") { + return "KV map is not an object"; + } + } + + getCacheKey() { + return "kvmap." + this.valueType.getCacheKey(); + } +} + +export class TypeClassId extends BaseDataType { + /** + * @param {FactoryTemplate<*>|SingletonFactoryTemplate<*>} registry + */ + constructor(registry) { + super(); + this.registry = registry; + } + + serialize(value) { + assert(typeof value === "string", "Not a valid string"); + assert(this.registry.hasId(value), "Id " + value + " not found in registry"); + return value; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + targetObject[targetKey] = value; + } + + getAsJsonSchemaUncached() { + return { + type: "string", + enum: this.registry.getAllIds(), + }; + } + + verifySerializedValue(value) { + if (typeof value !== "string") { + return "Not a valid registry id key: " + value; + } + if (!this.registry.hasId(value)) { + return "Id " + value + " not known to registry"; + } + } + + getCacheKey() { + return "classid." + this.registry.getId(); + } +} + +export class TypePair extends BaseDataType { + /** + * @param {BaseDataType} type1 + * @param {BaseDataType} type2 + */ + constructor(type1, type2) { + super(); + assert(type1 && type1 instanceof BaseDataType, "bad first type given for pair"); + assert(type2 && type2 instanceof BaseDataType, "bad second type given for pair"); + this.type1 = type1; + this.type2 = type2; + } + + serialize(value) { + assert(Array.isArray(value), "pair: not an array"); + assert(value.length === 2, "pair: length != 2"); + return [this.type1.serialize(value[0]), this.type2.serialize(value[1])]; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + const result = [undefined, undefined]; + + let errorCode = this.type1.deserialize(value[0], result, 0, root); + if (errorCode) { + return errorCode; + } + errorCode = this.type2.deserialize(value[1], result, 1, root); + if (errorCode) { + return errorCode; + } + + targetObject[targetKey] = result; + } + + getAsJsonSchemaUncached() { + return { + type: "array", + minLength: 2, + maxLength: 2, + items: [this.type1.getAsJsonSchema(), this.type2.getAsJsonSchema()], + }; + } + + verifySerializedValue(value) { + if (!Array.isArray(value)) { + return "Pair is not an array"; + } + if (value.length !== 2) { + return "Pair length != 2"; + } + let errorCode = this.type1.verifySerializedValue(value[0]); + if (errorCode) { + return errorCode; + } + errorCode = this.type2.verifySerializedValue(value[1]); + if (errorCode) { + return errorCode; + } + } + + getCacheKey() { + return "pair.(" + this.type1.getCacheKey() + "," + this.type2.getCacheKey + ")"; + } +} + +export class TypeNullable extends BaseDataType { + /** + * @param {BaseDataType} wrapped + */ + constructor(wrapped) { + super(); + this.wrapped = wrapped; + } + + serialize(value) { + if (value === null || value === undefined) { + return null; + } + return this.wrapped.serialize(value); + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + if (value === null || value === undefined) { + targetObject[targetKey] = null; + return; + } + return this.wrapped.deserialize(value, targetObject, targetKey, root); + } + + verifySerializedValue(value) { + if (value === null) { + return; + } + return this.wrapped.verifySerializedValue(value); + } + + getAsJsonSchemaUncached() { + return { + oneOf: [ + { + type: "null", + }, + this.wrapped.getAsJsonSchema(), + ], + }; + } + + allowNull() { + return true; + } + + getCacheKey() { + return "nullable." + this.wrapped.getCacheKey(); + } +} + +export class TypeStructuredObject extends BaseDataType { + /** + * @param {Object.} descriptor + */ + constructor(descriptor) { + super(); + this.descriptor = descriptor; + } + + serialize(value) { + assert(typeof value === "object", "not an object"); + let result = {}; + for (const key in this.descriptor) { + // assert(value.hasOwnProperty(key), "Serialization: Object does not have", key, "property!"); + result[key] = this.descriptor[key].serialize(value[key]); + } + return result; + } + + /** + * @see BaseDataType.deserialize + * @param {any} value + * @param {GameRoot} root + * @param {object} targetObject + * @param {string|number} targetKey + * @returns {string|void} String error code or null on success + */ + deserialize(value, targetObject, targetKey, root) { + let target = targetObject[targetKey]; + if (!target) { + targetObject[targetKey] = target = {}; + } + + for (const key in value) { + const valueType = this.descriptor[key]; + const errorCode = valueType.deserializeWithVerify(value[key], target, key, root); + if (errorCode) { + return errorCode; + } + } + } + + getAsJsonSchemaUncached() { + let properties = {}; + for (const key in this.descriptor) { + properties[key] = this.descriptor[key].getAsJsonSchema(); + } + + return { + type: "object", + required: Object.keys(this.descriptor), + properties, + }; + } + + verifySerializedValue(value) { + if (typeof value !== "object") { + return "structured object is not an object"; + } + for (const key in this.descriptor) { + if (!value.hasOwnProperty(key)) { + return "structured object is missing key " + key; + } + const subError = this.descriptor[key].verifySerializedValue(value[key]); + if (subError) { + return "structured object::" + subError; + } + } + } + + getCacheKey() { + let props = []; + for (const key in this.descriptor) { + props.push(key + "=" + this.descriptor[key].getCacheKey()); + } + return "structured[" + props.join(",") + "]"; + } +} diff --git a/src/js/savegame/serializer_internal.js b/src/js/savegame/serializer_internal.js index 940283d0..7ed1ee32 100644 --- a/src/js/savegame/serializer_internal.js +++ b/src/js/savegame/serializer_internal.js @@ -83,7 +83,10 @@ export class SerializerInternal { for (const componentId in data) { if (!entity.components[componentId]) { if (G_IS_DEV && !globalConfig.debug.disableSlowAsserts) { - logger.warn("Entity no longer has component:", componentId); + // @ts-ignore + if (++window.componentWarningsShown < 100) { + logger.warn("Entity no longer has component:", componentId); + } } continue; } diff --git a/src/js/states/ingame.js b/src/js/states/ingame.js index 2dd2db76..316c536c 100644 --- a/src/js/states/ingame.js +++ b/src/js/states/ingame.js @@ -285,14 +285,10 @@ export class InGameState extends GameState { */ stage7Warmup() { if (this.switchStage(stages.s7_warmup)) { - if (G_IS_DEV && globalConfig.debug.noArtificialDelays) { - this.warmupTimeSeconds = 0.05; + if (this.creationPayload.fastEnter) { + this.warmupTimeSeconds = globalConfig.warmupTimeSecondsFast; } else { - if (this.creationPayload.fastEnter) { - this.warmupTimeSeconds = globalConfig.warmupTimeSecondsFast; - } else { - this.warmupTimeSeconds = globalConfig.warmupTimeSecondsRegular; - } + this.warmupTimeSeconds = globalConfig.warmupTimeSecondsRegular; } } } 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 02c1e690..fa177874 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); + 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; } @@ -344,20 +320,23 @@ export class MainMenuState extends GameState { }); optionSelected.add(value => { - this.app.settings.updateLanguage(value); - if (setting.restartRequired) { - if (this.app.platformWrapper.getSupportsRestart()) { - this.app.platformWrapper.performRestart(); - } else { - this.dialogs.showInfo(T.dialogs.restartRequired.title, T.dialogs.restartRequired.text, [ - "ok:good", - ]); + this.app.settings.updateLanguage(value).then(() => { + if (setting.restartRequired) { + if (this.app.platformWrapper.getSupportsRestart()) { + this.app.platformWrapper.performRestart(); + } else { + this.dialogs.showInfo( + T.dialogs.restartRequired.title, + T.dialogs.restartRequired.text, + ["ok:good"] + ); + } } - } - if (setting.changeCb) { - setting.changeCb(this.app, value); - } + if (setting.changeCb) { + setting.changeCb(this.app, value); + } + }); // Update current icon this.htmlElement.querySelector("button.languageChoose").setAttribute("data-languageIcon", value); @@ -537,7 +516,7 @@ export class MainMenuState extends GameState { ); getStandalone.add(() => { this.app.analytics.trackUiClick("visit_steampage_from_slot_limit"); - this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage); + this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage + "?reF=ssll"); }); } @@ -554,9 +533,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/mobile_warning.js b/src/js/states/mobile_warning.js index a48a69ed..98eb1cd8 100644 --- a/src/js/states/mobile_warning.js +++ b/src/js/states/mobile_warning.js @@ -21,7 +21,7 @@ export class MobileWarningState extends GameState { Get the shapez.io standalone! `; } diff --git a/src/js/states/preload.js b/src/js/states/preload.js index b35b369d..811b9419 100644 --- a/src/js/states/preload.js +++ b/src/js/states/preload.js @@ -21,10 +21,6 @@ export class PreloadState extends GameState {
Booting - - - 0% -
@@ -56,10 +52,6 @@ export class PreloadState extends GameState { /** @type {HTMLElement} */ this.statusText = this.htmlElement.querySelector(".loadingStatus > .desc"); - /** @type {HTMLElement} */ - this.statusBar = this.htmlElement.querySelector(".loadingStatus > .bar > .inner"); - /** @type {HTMLElement} */ - this.statusBarText = this.htmlElement.querySelector(".loadingStatus > .bar > .status"); /** @type {HTMLElement} */ this.hintsText = this.htmlElement.querySelector(".prefab_GameHint"); @@ -67,7 +59,6 @@ export class PreloadState extends GameState { this.nextHintDuration = 0; this.currentStatus = "booting"; - this.currentIndex = 0; this.startLoading(); } @@ -145,6 +136,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 => { @@ -254,16 +250,8 @@ export class PreloadState extends GameState { */ setStatus(text) { logger.log("✅ " + text); - this.currentIndex += 1; this.currentStatus = text; this.statusText.innerText = text; - - const numSteps = 10; // FIXME - - const percentage = (this.currentIndex / numSteps) * 100.0; - this.statusBar.style.width = percentage + "%"; - this.statusBarText.innerText = findNiceValue(percentage) + "%"; - return Promise.resolve(); } 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 d6b87278..356a4aba 100644 --- a/sync-translations.js +++ b/sync-translations.js @@ -1,82 +1,81 @@ -// Synchronizes all translations - -const fs = require("fs"); -const matchAll = require("match-all"); -const path = require("path"); -const YAWN = require("yawn-yaml/cjs"); -const YAML = require("yaml"); - -const files = fs - .readdirSync(path.join(__dirname, "translations")) - .filter(x => x.endsWith(".yaml")) - .filter(x => x.indexOf("base-en") < 0); - -const originalContents = fs - .readFileSync(path.join(__dirname, "translations", "base-en.yaml")) - .toString("utf-8"); - -const original = YAML.parse(originalContents); - -const placeholderRegexp = /[[<]([a-zA-Z_0-9]+)[\]<]/gi; - -function match(originalObj, translatedObj, path = "/") { - for (const key in originalObj) { - if (!translatedObj.hasOwnProperty(key)) { - console.warn(" | Missing key", path + key); - translatedObj[key] = originalObj[key]; - continue; - } - const valueOriginal = originalObj[key]; - const valueMatching = translatedObj[key]; - if (typeof valueOriginal !== typeof valueMatching) { - console.warn(" | MISMATCHING type (obj|non-obj) in", path + key); - continue; - } - - if (typeof valueOriginal === "object") { - match(valueOriginal, valueMatching, path + key + "/"); - } else if (typeof valueOriginal === "string") { - // todo - const originalPlaceholders = matchAll(valueOriginal, placeholderRegexp).toArray(); - const translatedPlaceholders = matchAll(valueMatching, placeholderRegexp).toArray(); - - if (originalPlaceholders.length !== translatedPlaceholders.length) { - console.warn( - " | Mismatching placeholders in", - path + key, - "->", - originalPlaceholders, - "vs", - translatedPlaceholders - ); - translatedObj[key] = originalObj[key]; - continue; - } - } else { - console.warn(" | Unknown type: ", typeof valueOriginal); - } - - // const matching = translatedObj[key]; - } - - for (const key in translatedObj) { - if (!originalObj.hasOwnProperty(key)) { - console.warn(" | Obsolete key", path + key); - delete translatedObj[key]; - } - } -} - -for (let i = 0; i < files.length; ++i) { - const filePath = path.join(__dirname, "translations", files[i]); - console.log("Processing", files[i]); - const translatedContents = fs.readFileSync(filePath).toString("utf-8"); - const translated = YAML.parse(translatedContents); - const handle = new YAWN(translatedContents); - - const json = handle.json; - match(original, json, "/"); - handle.json = json; - - fs.writeFileSync(filePath, handle.yaml, "utf-8"); -} +// Synchronizes all translations + +const fs = require("fs"); +const matchAll = require("match-all"); +const path = require("path"); +const YAML = require("yaml"); + +const files = fs + .readdirSync(path.join(__dirname, "translations")) + .filter(x => x.endsWith(".yaml")) + .filter(x => x.indexOf("base-en") < 0); + +const originalContents = fs + .readFileSync(path.join(__dirname, "translations", "base-en.yaml")) + .toString("utf-8"); + +const original = YAML.parse(originalContents); + +const placeholderRegexp = /[[<]([a-zA-Z_0-9/-_]+?)[\]>]/gi; + +function match(originalObj, translatedObj, path = "/") { + for (const key in originalObj) { + if (!translatedObj.hasOwnProperty(key)) { + console.warn(" | Missing key", path + key); + translatedObj[key] = originalObj[key]; + continue; + } + const valueOriginal = originalObj[key]; + const valueMatching = translatedObj[key]; + if (typeof valueOriginal !== typeof valueMatching) { + console.warn(" | MISMATCHING type (obj|non-obj) in", path + key); + translatedObj[key] = originalObj[key]; + continue; + } + + if (typeof valueOriginal === "object") { + match(valueOriginal, valueMatching, path + key + "/"); + } else if (typeof valueOriginal === "string") { + // @todo + const originalPlaceholders = matchAll(valueOriginal, placeholderRegexp).toArray(); + const translatedPlaceholders = matchAll(valueMatching, placeholderRegexp).toArray(); + + if (originalPlaceholders.length !== translatedPlaceholders.length) { + console.warn( + " | Mismatching placeholders in", + path + key, + "->", + originalPlaceholders, + "vs", + translatedPlaceholders + ); + translatedObj[key] = originalObj[key]; + continue; + } + } else { + console.warn(" | Unknown type: ", typeof valueOriginal); + } + } + + for (const key in translatedObj) { + if (!originalObj.hasOwnProperty(key)) { + console.warn(" | Obsolete key", path + key); + delete translatedObj[key]; + } + } +} + +for (let i = 0; i < files.length; ++i) { + const filePath = path.join(__dirname, "translations", files[i]); + console.log("Processing", files[i]); + const translatedContents = fs.readFileSync(filePath).toString("utf-8"); + + const json = YAML.parse(translatedContents); + match(original, json, "/"); + + const stringified = YAML.stringify(json, { + indent: 4, + simpleKeys: true, + }); + fs.writeFileSync(filePath, stringified, "utf-8"); +} 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 17d822d9..0244395c 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -1,114 +1,61 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map. + shortText: لعبة شيبز (أشكال) هي لعبة تدور حول بناء مصانع وتوصيلها حتى تقوم بشكل + .آلي بصناعة أشكال مختلفة تزداد تعقيدا في خريطة لانهائية. + discordLinkShort: Official Discord + intro: >- + لعبة شيبز (أشكال) هي لعبة مريحة تقوم فيها ببناء مصانع ووتشغيلها آليا + لصناعة أشكال هندسية. - # This is the text shown above the Discord link - discordLink: Official Discord - Chat with me! + مع التقدم في المستوى، تزداد الأشكال تعقيداً، فيتوجب عليك التوسع في الخريطة اللانهائية، وذلك ليس كافياً للتقدم في مستوى اللعبة حيث عليك صناعة المزيد بأضعاف مضاعفة لتلبية الطلب، الشيء الوحيد الذي يمكنه مساعدتك هو التوسع. - # This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page. - # NOTICE: - # - Do not translate the first line (This is the gif image at the start of the store) - # - Please keep the markup (Stuff like [b], [list] etc) in the same format - 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. + عند شراءك اللعبة على ستيم (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. - 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] - global: loading: Loading error: Error - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: one second ago xSecondsAgo: seconds ago oneMinuteAgo: one minute ago @@ -117,14 +64,10 @@ global: xHoursAgo: hours ago oneDayAgo: one day ago xDaysAgo: days ago - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minutes - keys: tab: TAB control: CTRL @@ -132,13 +75,9 @@ global: escape: ESC shift: SHIFT space: SPACE - 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! - + intro: Get the standalone to unlock all features! mainMenu: play: Play continue: Continue @@ -150,14 +89,11 @@ mainMenu: discordLink: Official Discord Server helpTranslate: Help translate! madeBy: Made by - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Sorry, but the game is known to run slow on your browser! Get the standalone version or download chrome for the full experience. - + browserWarning: Sorry, but the game is known to run slow on your browser! Get + the standalone version or download chrome for the full experience. savegameLevel: Level savegameLevelUnknown: Unknown Level - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -171,112 +107,96 @@ dialogs: viewUpdate: View Update showUpgrades: Show Upgrades showKeybindings: Show Keybindings - importSavegameError: title: Import Error - text: >- - Failed to import your savegame: - + text: "Failed to import your savegame:" importSavegameSuccess: title: Savegame Imported - text: >- - Your savegame has been successfully imported. - + text: Your savegame has been successfully imported. gameLoadFailure: title: Game is broken - text: >- - Failed to load your savegame: - + 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: - + text: "Failed to delete the savegame:" restartRequired: title: Restart required - text: >- - You need to restart the game to apply the settings. - + text: You need to restart the game to apply the settings. editKeybinding: title: Change Keybinding desc: Press the key or mouse button you want to assign, or escape to cancel. - resetKeybindingsConfirmation: title: Reset keybindings desc: This will reset all keybindings to their default values. Please confirm. - keybindingsResetOk: title: Keybindings reset desc: The keybindings have been reset to their respective defaults! - featureRestriction: title: Demo Version - desc: You tried to access a feature () which is not available in the demo. Consider getting the standalone version for the full experience! - + desc: You tried to access a feature () which is not available in the + demo. Consider getting the standalone version for the full + experience! oneSavegameLimit: title: Limited savegames - desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone version! - + desc: You can only have one savegame at a time in the demo version. Please + remove the existing one or get the standalone version! updateSummary: title: New update! - desc: >- - Here are the changes since you last played: - + desc: "Here are the changes since you last played:" upgradesIntroduction: title: Unlock Upgrades - desc: >- - All shapes you produce can be used to unlock upgrades - Don't destroy your old factories! - The upgrades tab can be found on the top right corner of the screen. - + desc: All shapes you produce can be used to unlock upgrades - Don't + destroy your old factories! The upgrades tab can be found + on the top right corner of the screen. massDeleteConfirm: title: Confirm delete - desc: >- - You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this? - + desc: You are deleting a lot of buildings ( to be exact)! Are you sure + you want to do this? massCutConfirm: title: Confirm cut - desc: >- - You are cutting a lot of buildings ( to be exact)! Are you sure you want to do this? - + desc: You are cutting a lot of buildings ( to be exact)! Are you sure you + want to do this? massCutInsufficientConfirm: title: Confirm cut - desc: >- - You can not afford to paste this area! Are you sure you want to cut it? - + desc: You can not afford to paste this area! Are you sure you want to cut it? blueprintsNotUnlocked: title: Not unlocked yet - desc: >- - Complete level 12 to unlock Blueprints! - + desc: Complete level 12 to unlock Blueprints! keybindingsIntroduction: title: Useful keybindings - desc: >- - This game has a lot of keybindings which make it easier to build big factories. - Here are a few, but be sure to check out the keybindings!

- CTRL + Drag: Select an area.
- SHIFT: Hold to place multiple of one building.
- ALT: Invert orientation of placed belts.
- + desc: "This game has a lot of keybindings which make it easier to build big + factories. Here are a few, but be sure to check out the + keybindings!

CTRL + + Drag: Select an area.
SHIFT: + Hold to place multiple of one building.
ALT: Invert orientation of placed + belts.
" createMarker: 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) - + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) markerDemoLimit: - desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers! - + desc: You can only create two custom markers in the demo. Get the standalone for + unlimited markers! 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 + can be quite slow for a big base and even crash your game! + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Move selectBuildings: Select area @@ -297,8 +217,6 @@ ingame: clearSelection: Clear selection pipette: Pipette switchLayers: Switch layers - - # Names of the colors, used for the color blind mode colors: red: Red green: Green @@ -309,18 +227,9 @@ ingame: white: White black: Black uncolored: Gray - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Press to cycle variants. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Speed range: Range @@ -328,36 +237,21 @@ ingame: oneItemPerSecond: 1 item / second itemsPerSecond: items / s itemsPerSecondDouble: (x2) - tiles: tiles - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Level completed: Completed unlockText: Unlocked ! buttonNextLevel: Next Level - - # Notifications on the lower right notifications: newUpgrade: A new upgrade is available! gameSaved: Your game has been saved. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Upgrades buttonUnlock: Upgrade - - # 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] - maximumLevel: MAXIMUM LEVEL (Speed x) - - # The "Statistics" window statistics: title: Statistics dataSources: @@ -366,62 +260,86 @@ ingame: description: Displaying amount of stored shapes in your central building. produced: title: Produced - description: Displaying all shapes your whole factory produces, including intermediate products. + description: Displaying all shapes your whole factory produces, including + intermediate products. delivered: title: Delivered description: Displaying shapes which are delivered to your central building. noShapesProduced: No shapes have been produced so far. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Playtime - buildingsPlaced: Buildings beltsPlaced: Belts - - buttons: - continue: Continue - settings: Settings - menu: Return to menu - - # Bottom left tutorial hints tutorialHints: title: Need help? showHint: Show hint hideHint: Close - - # When placing a blueprint blueprintPlacer: cost: Cost - - # Map markers waypoints: waypoints: Markers hub: HUB - description: Left-click a marker to jump to it, right-click to delete it.

Press to create a marker from the current view, or right-click to create a marker at the selected location. + description: Left-click a marker to jump to it, right-click to delete + it.

Press to create a marker from the current + view, or right-click to create a marker at the + selected location. creationSuccessNotification: Marker has been created. - - # Shape viewer shapeViewer: title: Layers empty: Empty copyKey: Copy Key - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Place an extractor on top of a circle shape to extract it! - 1_2_conveyor: >- - Connect the extractor with a conveyor belt to your hub!

Tip: Click and drag the belt with your mouse! - - 1_3_expand: >- - This is NOT an idle game! Build more extractors and belts to finish the goal quicker.

Tip: Hold SHIFT to place multiple extractors, and use R to rotate them. - -# All shop upgrades + 1_1_extractor: Place an extractor on top of a circle + shape to extract it! + 1_2_conveyor: "Connect the extractor with a conveyor belt to + your hub!

Tip: Click and drag the belt + with your mouse!" + 1_3_expand: "This is NOT an idle game! Build more extractors + and belts to finish the goal quicker.

Tip: Hold + SHIFT to place multiple extractors, and use + R to rotate them." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Belts, Distributor & Tunnels @@ -435,249 +353,385 @@ shopUpgrades: painting: name: Mixing & Painting description: Speed x → x - -# Buildings and their name / description buildings: hub: deliver: Deliver toUnlock: to unlock levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Conveyor Belt + name: Conveyor Belt description: Transports items, hold and drag to place multiple. - wire: default: - name: &wire Energy Wire + name: Energy Wire description: Allows you to transport energy. - - # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. miner: default: - name: &miner Extractor + name: Extractor description: Place over a shape or color to extract it. - chainable: name: Extractor (Chain) description: Place over a shape or color to extract it. Can be chained. - - # Internal name for the Tunnel underground_belt: default: - name: &underground_belt Tunnel + name: Tunnel description: Allows you to tunnel resources under buildings and belts. - tier2: name: Tunnel Tier II description: Allows you to tunnel resources under buildings and belts. - - # Internal name for the Balancer - splitter: - default: - name: &splitter Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. - - compact: - name: Merger (compact) - description: Merges two conveyor belts into one. - - compact-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. - cutter: default: - name: &cutter Cutter - description: Cuts shapes from top to bottom and outputs both halves. If you use only one part, be sure to destroy the other part or it will stall! + name: 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! quad: name: Cutter (Quad) - description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other parts or it will stall! - - advanced_processor: - default: - name: &advanced_processor Color Inverter - description: Accepts a color or shape and inverts it. - + description: Cuts shapes into four parts. If you use only one part, be + sure to destroy the other parts or it will stall! rotater: default: - name: &rotater Rotate + name: Rotate description: Rotates shapes clockwise by 90 degrees. ccw: name: Rotate (CCW) description: Rotates shapes counter-clockwise by 90 degrees. - fl: + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Stacker - description: Stacks both items. If they can not be merged, the right item is placed above the left item. - + name: Stacker + description: Stacks both items. If they can not be merged, the right item is + placed above the left item. mixer: default: - name: &mixer Color Mixer + name: Color Mixer description: Mixes two colors using additive blending. - painter: default: - name: &painter Painter - description: &painter_desc Colors the whole shape on the left input with the color from the top input. - + name: Painter + description: Colors the whole shape on the left input with the color from the + top input. mirrored: - name: *painter - description: *painter_desc - + name: Painter + description: Colors the whole shape on the left input with the color from the + top input. double: name: Painter (Double) - description: Colors the shapes on the left inputs with the color from the top input. + description: Colors the shapes on the left inputs with the color from the top + input. quad: name: Painter (Quad) - description: Allows you to color each quadrant of the shape with a different color. - + 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 Trash + name: Trash description: Accepts inputs from all sides and destroys them. Forever. - - storage: - name: Storage - description: Stores excess items, up to a given capacity. Can be used as an overflow gate. - - energy_generator: - deliver: Deliver - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: For - + balancer: default: - name: &energy_generator Energy Generator - description: Generates energy by consuming shapes. - - wire_crossings: - default: - name: &wire_crossings Wire Splitter - description: Splits a energy wire into two. - + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store reward_cutter_and_trash: title: Cutting Shapes - desc: You just unlocked the cutter - it cuts shapes half from top to bottom regardless of its orientation!

Be sure to get rid of the waste, or otherwise it will stall - For this purpose I gave you a trash, which destroys everything you put into it! - + 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 clockwise by 90 degrees. - + desc: The rotater has been unlocked! It rotates shapes + clockwise by 90 degrees. reward_painter: title: Painting - desc: >- - The painter has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!

PS: If you are colorblind, there is a colorblind mode in the settings! - + 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 + colorblind mode in the settings!" reward_mixer: title: Color Mixing - desc: The mixer has been unlocked - Combine two colors using additive blending with this building! - + desc: The mixer has been unlocked - Combine two colors using + additive blending with this building! reward_stacker: title: Combiner - desc: You can now combine shapes with the combiner! Both inputs are combined, and if they can be put next to each other, they will be fused. If not, the right input is stacked on top of the left input! - + desc: You can now combine shapes with the combiner! Both inputs + are combined, and if they can be put next to each other, they will + be fused. If not, the right input is + stacked on top of the left input! 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 through belts and buildings with it! - + desc: The tunnel has been unlocked - You can now tunnel items + through belts and buildings with it! reward_rotater_ccw: title: CCW Rotating - 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! - + desc: You have unlocked a variant of the rotater - It allows + you to rotate shapes counter-clockwise! To build it, select the + rotater and press 'T' to cycle through its + variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can forward its resources to other extractors so you can more efficiently extract resources! - + 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: You have unlocked a new variant of the tunnel - It has a bigger range, and you can also mix-n-match those tunnels now! - - reward_splitter_compact: - title: Compact Balancer - desc: >- - You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one belt! - + 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! reward_cutter_quad: title: Quad Cutting - desc: You have unlocked a variant of the cutter - It allows you to cut shapes in four parts instead of just two! - + 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: Double Painting - desc: You have unlocked a variant of the painter - It works as the regular painter but processes two shapes at once consuming just one color instead of two! - - reward_painter_quad: - title: Quad Painting - desc: You have unlocked a variant of the painter - It allows you to paint each part of the shape individually! - + desc: You have unlocked a variant of the painter - It works as + the regular painter but processes two shapes at + once consuming just one color instead of two! 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!) - + 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: Blueprints - desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). - - # Special reward, which is shown when there is no reward actually + 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: Next level - desc: >- - This level gave you no reward, but the next one will!

PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades! - + desc: "This level gave you no reward, but the next one will!

PS: Better + don't destroy your existing factory - You need all + those shapes later again to unlock upgrades!" no_reward_freeplay: title: Next level - desc: >- - Congratulations! By the way, more content is planned for the standalone! - + desc: Congratulations! By the way, more content is planned for the 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Settings categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Development staging: Staging prod: Production buildDate: Built - labels: uiScale: title: Interface scale - description: >- - Changes the size of the user interface. The interface will still scale based on your device's resolution, but this setting controls the amount of scaling. + description: Changes the size of the user interface. The interface will still + scale based on your device's resolution, but this setting + controls the amount of scaling. scales: super_small: Super small small: Small regular: Regular large: Large huge: Huge - autosaveInterval: title: Autosave Interval - description: >- - Controls how often the game saves automatically. You can also disable it entirely here. - + description: Controls how often the game saves automatically. You can also + disable it entirely here. intervals: one_minute: 1 Minute two_minutes: 2 Minutes @@ -685,22 +739,18 @@ settings: ten_minutes: 10 Minutes twenty_minutes: 20 Minutes disabled: Disabled - scrollWheelSensitivity: title: Zoom sensitivity - description: >- - Changes how sensitive the zoom is (Either mouse wheel or trackpad). + description: Changes how sensitive the zoom is (Either mouse wheel or trackpad). sensitivity: super_slow: Super slow slow: Slow regular: Regular fast: Fast super_fast: Super fast - movementSpeed: title: Movement speed - description: >- - Changes how fast the view moves when using the keyboard. + description: Changes how fast the view moves when using the keyboard. speeds: super_slow: Super slow slow: Slow @@ -708,87 +758,122 @@ settings: fast: Fast super_fast: Super Fast extremely_fast: Extremely Fast - language: title: Language - description: >- - Change the language. All translations are user-contributed and might be incomplete! - + description: Change the language. All translations are user-contributed and + might be incomplete! enableColorBlindHelper: title: Color Blind Mode - description: >- - Enables various tools which allow you to play the game if you are color blind. - + description: Enables various tools which allow you to play the game if you are + color blind. fullscreen: title: Fullscreen - description: >- - It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone. - + description: It is recommended to play the game in fullscreen to get the best + experience. Only available in the standalone. soundsMuted: title: Mute Sounds - description: >- - If enabled, mutes all sound effects. - + description: If enabled, mutes all sound effects. musicMuted: title: Mute Music - description: >- - If enabled, mutes all music. - + description: If enabled, mutes all music. theme: title: Game theme - description: >- - Choose the game theme (light / dark). + description: Choose the game theme (light / dark). themes: dark: Dark light: Light - refreshRate: title: Simulation Target - description: >- - If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow. - + description: If you have a 144hz monitor, change the refresh rate here so the + game will properly simulate at higher refresh rates. This might + actually decrease the FPS if your computer is too slow. alwaysMultiplace: title: Multiplace - description: >- - If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. - + description: If enabled, all buildings will stay selected after placement until + you cancel it. This is equivalent to holding SHIFT permanently. offerHints: title: Hints & Tutorials - description: >- - Whether to offer hints and tutorials while playing. Also hides certain UI elements up to a given level to make it easier to get into the game. - + description: Whether to offer hints and tutorials while playing. Also hides + certain UI elements up to a given level to make it easier to get + into the game. enableTunnelSmartplace: title: Smart Tunnels - description: >- - When enabled, placing tunnels will automatically remove unnecessary belts. This also enables you to drag tunnels and excess tunnels will get removed. - + description: When enabled, placing tunnels will automatically remove unnecessary + belts. This also enables you to drag tunnels and excess tunnels + will get removed. vignette: title: Vignette - description: >- - Enables the vignette, which darkens the screen corners and makes text easier to read. - + description: Enables the vignette, which darkens the screen corners and makes + text easier to read. rotationByBuilding: title: Rotation by building type - description: >- - Each building type remembers the rotation you last set it to individually. This may be more comfortable if you frequently switch between placing different building types. - + description: Each building type remembers the rotation you last set it to + individually. This may be more comfortable if you frequently + switch between placing different building types. compactBuildingInfo: title: Compact Building Infos - description: >- - Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown. - + description: Shortens info boxes for buildings by only showing their ratios. + Otherwise a description and image is shown. disableCutDeleteWarnings: title: Disable Cut/Delete Warnings - description: >- - Disables the warning dialogs brought up when cutting/deleting more than 100 entities. - + description: Disables the warning dialogs brought up when cutting/deleting more + than 100 entities. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Keybindings - hint: >- - Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. - + hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different + placement options." resetKeybindings: Reset Keybindings - categoryLabels: general: Application ingame: Game @@ -797,7 +882,6 @@ keybindings: massSelect: Mass Select buildings: Building Shortcuts placementModifiers: Placement Modifiers - mappings: confirm: Confirm back: Back @@ -807,58 +891,63 @@ keybindings: mapMoveLeft: Move Left mapMoveFaster: Move Faster centerMap: Center Map - mapZoomIn: Zoom in mapZoomOut: Zoom out createMarker: Create Marker - menuOpenShop: Upgrades menuOpenStats: Statistics menuClose: Close Menu - toggleHud: Toggle HUD toggleFPSInfo: Toggle FPS and Debug Info switchLayers: Switch layers exportScreenshot: Export whole Base as Image - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Conveyor Belt + underground_belt: Tunnel + miner: Extractor + cutter: Cutter + rotater: Rotate + stacker: Stacker + mixer: Color Mixer + painter: Painter + trash: Trash + wire: Energy Wire pipette: Pipette rotateWhilePlacing: Rotate - rotateInverseModifier: >- - Modifier: Rotate CCW instead + rotateInverseModifier: "Modifier: Rotate CCW instead" cycleBuildingVariants: Cycle Variants confirmMassDelete: Delete area pasteLastBlueprint: Paste last blueprint cycleBuildings: Cycle Buildings lockBeltDirection: Enable belt planner - switchDirectionLockSide: >- - Planner: Switch side - + switchDirectionLockSide: "Planner: Switch side" massSelectStart: Hold and drag to start massSelectSelectMultiple: Select multiple areas massSelectCopy: Copy area massSelectCut: Cut area - placementDisableAutoOrientation: Disable automatic orientation placeMultiple: Stay in placement mode placeInverse: Invert automatic belt orientation - + 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: About this Game body: >- - This game is open source and developed by Tobias Springer (this is me).

+ This game is open source and developed by Tobias Springer + (this is me).

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

@@ -867,10 +956,8 @@ about: The soundtrack was made by Peppsen - He's awesome.

Finally, huge thanks to my best friend Niklas - Without our Factorio sessions, this game would never have existed. - changelog: title: Changelog - demo: features: restoringGames: Restoring savegames @@ -878,5 +965,65 @@ demo: oneGameLimit: Limited to one savegame customizeKeybindings: Customizing Keybindings exportingBase: Exporting whole Base as Image - settingNotAvailable: Not available in the 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. diff --git a/translations/base-cat.yaml b/translations/base-cat.yaml index b1870d77..af78d514 100644 --- a/translations/base-cat.yaml +++ b/translations/base-cat.yaml @@ -1,114 +1,65 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io és un joc que té com a objectiu construir i automatitzar fàbriques per tal de produir figures cada cop més complexes en un mapa infinit. + 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. + 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. - # This is the text shown above the Discord link - discordLink: Discord Oficial (en Anglès) + A mesura que el nivell augmenta, les formes esdevenen més complexes, i has d'explorar el mapa infinit. - # 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] + Per si això no era suficient, la demanda de formes creixerà exponencialment, pel que hauràs d'escalar les teves fàbriques! - 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. + Mentre que al principi només processes formes, més envant les hauràs de colorejar, pel que necessitaràs extreure y mesclar colors! - 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] + 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 - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: fa un segon xSecondsAgo: fa segons oneMinuteAgo: fa un minut @@ -117,14 +68,10 @@ global: xHoursAgo: fa hores oneDayAgo: fa un dia xDaysAgo: fa dies - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minuts - keys: tab: TAB control: CTRL @@ -132,12 +79,9 @@ global: escape: ESC shift: SHIFT space: ESPAI - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demo - Versió de prova - intro: >- - Aconsegueix el joc complet per obtenir totes les característiques! + intro: Aconsegueix el joc complet per obtenir totes les característiques! mainMenu: play: Jugar continue: Continuar @@ -149,14 +93,11 @@ mainMenu: discordLink: Servidor Discord oficial helpTranslate: Ajuda a traduir-lo! madeBy: Creat per - - # This is shown when using firefox and other browsers which are not supported. 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 - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,113 +111,100 @@ dialogs: viewUpdate: Veure actualitzacions showUpgrades: Mostrar millores showKeybindings: Mostrar dreceres de teclat - importSavegameError: title: Error en importar - text: >- - Ha ocurrit un error intentant importar la teva partida: - + text: "Ha ocurrit un error intentant importar la teva partida:" importSavegameSuccess: title: Importar - text: >- - La partida ha sigut importada amb èxit. - + text: La partida ha sigut importada amb èxit. gameLoadFailure: title: No es pot carregar la partida guardada - text: >- - Ha ocurrit un error al intentar carregar la teva partida: - + 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: - + text: "Ha ocurrit un error al intentar eliminar la teva partida:" restartRequired: title: Reiniciar - text: >- - És necessari reiniciar el joc per aplicar els canvis. - + text: És necessari reiniciar el joc per aplicar els canvis. editKeybinding: title: Cambiar dreceres de teclat - desc: Pressiona la tecla o botó del ratolí que vols designar o ESC per cancel·lar. - + desc: Pressiona la tecla o botó del ratolí que vols designar o ESC per + cancel·lar. resetKeybindingsConfirmation: title: Reiniciar dreceres de teclat desc: Això reiniciarà tots els canvis realitzats, n'estàs segur? - keybindingsResetOk: title: Cambiar dreceres de teclat desc: Les dreceres han tornat en el seu estat predeterminat! - featureRestriction: title: Demo - Versió de prova - desc: Has intentat accedir a una característica () que no està disponible en la demo. Considera obtenir el joc complet per a una experiència completa! - + desc: Has intentat accedir a una característica () que no està + disponible en la demo. Considera obtenir el joc complet per a una + experiència completa! oneSavegameLimit: title: Partides guardades limitades - desc: Només pots tenir una sola partida guardada a la versió de demostració. Si vols, elimina la ja existent o fes-te amb la versió completa del joc! - + desc: Només pots tenir una sola partida guardada a la versió de demostració. Si + vols, elimina la ja existent o fes-te amb la versió completa del + joc! updateSummary: title: Nova actualització! - desc: >- - Aquí tens els canvis des de l'últim cop que vas jugar: - + desc: "Aquí tens els canvis des de l'últim cop que vas jugar:" upgradesIntroduction: title: Desbloquejar millora - desc: >- - Totes les figures poden ser usades per desbloquejar millores - No eliminis/es les teves fabriques anteriors! - La pestanya de millores està a la part superior dreta de la pantalla. - + desc: Totes les figures poden ser usades per desbloquejar millores - No + eliminis/es les teves fabriques anteriors! La pestanya de + millores està a la part superior dreta de la pantalla. massDeleteConfirm: title: Eliminar edificis - desc: >- - Estàs esborrant molts edificis de cop ( per ser exactes)! Estàs segur que vols seguir? - + desc: Estàs esborrant molts edificis de cop ( per ser exactes)! Estàs + segur que vols seguir? massCutConfirm: title: Tallar edificis - desc: >- - Estàs tallant molts edificis de cop ( per ser exactes)! Estàs segur que vols seguir? - + desc: Estàs tallant molts edificis de cop ( per ser exactes)! Estàs segur + que vols seguir? massCutInsufficientConfirm: title: Confirmar tallar - desc: >- - No pots aferrar a aquesta zona! Estàs segur de que vols tallarla? - + desc: No pots aferrar a aquesta zona! Estàs segur de que vols tallarla? blueprintsNotUnlocked: title: Encara no s'ha desbloquejat - desc: >- - Completa el nivell 12 per poder desbloquejar aquesta característica. - + desc: Completa el nivell 12 per poder desbloquejar aquesta característica. keybindingsIntroduction: title: Dreceres de teclat útils - desc: >- - El joc té moltes dreceres que faciliten la feina a l'hora de construir grans línies de producció. - Aquí tens algunes, però asegura't de revisar les dreceres de teclat!

- CTRL + Arrossegar: Selecciona una àrea.
- SHIFT: Mentè pressionat per col·locar vàries vegades el mateix edifici.
- ALT: Invertir la orientació de les cintes transportadores ja col·locades.
- + desc: "El joc té moltes dreceres que faciliten la feina a l'hora de construir + grans línies de producció. Aquí tens algunes, però asegura't de + revisar les dreceres de teclat!

CTRL + Arrossegar: Selecciona una + àrea.
SHIFT: Mentè pressionat + per col·locar vàries vegades el mateix edifici.
ALT: Invertir la orientació de les cintes + 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! - + desc: En la Demo només pots crear dos marcadors, aconsegueix la versió completa + per gaudir de l'experiència completa! exportScreenshotWarning: title: Exportar Captura de Pantalla - desc: Has demanat exportar la teva/teua base com una captura de pantalla. Tin en conte que aquest procés pot ser molt lent i inclús crashear el teu joc! - + desc: Has demanat exportar la teva/teua base com una captura de pantalla. Tin en + conte que aquest procés pot ser molt lent i inclús crashear el teu + joc! + editSignal: + title: Configura la Senyal + descItems: "Tria un ítem predefinit:" + descShortKey: ... o introdueix uncódi de forma (El qual pots + generar aqui) + renameSavegame: + title: Canviar el nom. + desc: Canviar el nom de la partida guardada. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Moure selectBuildings: Seleccionar àrea @@ -297,8 +225,6 @@ ingame: clearSelection: Buidar selecció pipette: Pipeta switchLayers: Intercanviar capes - - # Names of the colors, used for the color blind mode colors: red: Roig green: Verd @@ -309,18 +235,9 @@ ingame: white: Blanc black: Negre uncolored: Sense color - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Prem per a ciclar entre variants. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Velocitat range: Distància @@ -328,100 +245,111 @@ ingame: oneItemPerSecond: 1 objecte / s itemsPerSecond: objectes / s itemsPerSecondDouble: (x2) - tiles: caselles - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nivell completed: Complet unlockText: Desbloquejat ! buttonNextLevel: Següent nivell - - # Notifications on the lower right notifications: newUpgrade: Una nova millora està disponible! gameSaved: La teva/ua partida s'ha guardat. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Millores buttonUnlock: Millorar - - # Gets replaced to e.g. "Tier IX" tier: Nivell - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: NIVELL MÀXIM (Velocitat x) - - # The "Statistics" window statistics: title: Estadístiques dataSources: stored: title: Emmagatzemat - description: Mostrant la quantitat de figures emmagatzemades en el teu edifici central. + description: Mostrant la quantitat de figures emmagatzemades en el teu edifici + central. produced: title: Produit - description: Mostrant la producció total de figures de la fàbrica, incluïnt productes intermijos. + description: Mostrant la producció total de figures de la fàbrica, incluïnt + productes intermijos. delivered: title: Enviats description: Mostrant les figures que són enviades a l'edifici central. noShapesProduced: Ninguna figura s'ha produit fins ara. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Temps de joc - buildingsPlaced: Edificis beltsPlaced: Cintes transportadores - - buttons: - continue: Continuar - settings: Configuració - menu: Tornar al menú - - # Bottom left tutorial hints tutorialHints: title: Necessites ajuda? showHint: Mostrar pista hideHint: Tancar - - # When placing a blueprint blueprintPlacer: cost: Cost - - # Map markers waypoints: waypoints: Marcadors hub: NEXE - description: Fes clic esquerre en un marcador per desplaçar-te cap a ell. Fes clic dret per esborrar-lo.

Pressiona per a crear un marcador des de la vista actual, o fes clic dret per a crear un marcador en el punt seleccionat. + description: Fes clic esquerre en un marcador per desplaçar-te cap a ell. Fes + clic dret per esborrar-lo.

Pressiona per a + crear un marcador des de la vista actual, o fes clic + dret per a crear un marcador en el punt seleccionat. creationSuccessNotification: S'ha creat un marcador . - - # Shape viewer shapeViewer: title: Capes empty: Buit copyKey: Copiar clau - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Col·loca un extractor damunt d'una figura circular per extraure-la! - 1_2_conveyor: >- - Connecta l'extractor a la cinta transportadora cap al teu nexe!

Pista: Pots clicar i arrossegar la cinta transportadora amb el teu ratolí! - - 1_3_expand: >- - Aquest NO és un joc d'espera! Contrueix més extractors i cintes per a completar l'objectiu més ràpidament.

Pista: Manté pressionat SHIFT per a col·locar més extractors, i utilitza R per a rotar-los. - -# All shop upgrades + 1_1_extractor: Col·loca un extractor damunt d'una + figura circular per extraure-la! + 1_2_conveyor: "Connecta l'extractor a la cinta transportadora + cap al teu nexe!

Pista: Pots clicar i + arrossegar la cinta transportadora amb el teu ratolí!" + 1_3_expand: "Aquest NO és un joc d'espera! Contrueix més + extractors i cintes per a completar l'objectiu més + ràpidament.

Pista: Manté pressionat + SHIFT per a col·locar més extractors, i + utilitza R per a rotar-los." + connectedMiners: + one_miner: 1 Miner + n_miners: Miners + limited_items: Limitat a + watermark: + title: Versió demo + desc: Premeu aquí per veure les avantatges d'Steam! + get_on_steam: Comprar a Steam + standaloneAdvantages: + title: Aconsegueix la versió completa! + no_thanks: No, gràcies! + points: + levels: + title: 12 Nivells now + desc: Per a un total de 26 nivells! + buildings: + title: 18 Nous edificis + desc: Automatitza la teva fàbrica completament! + savegames: + title: Guarda ∞ partides + desc: Tantes com vulguis! + upgrades: + title: 20 Nivells de millora + desc: La versió demo només en té 5! + markers: + title: ∞ Marcadors + desc: Mai et perdis per el mapa! + wires: + title: Cables + desc: Una nova dimensió! + darkmode: + title: Mode Oscur + desc: Deixa de fer-te mal als ulls! + support: + title: Dona'm suport + desc: EL desenvolupo en el meu temps lliure! shopUpgrades: belt: name: Cintes transportadores, Distribuidors i Túnels @@ -435,249 +363,398 @@ shopUpgrades: painting: name: Mesclar i Pintar description: Velocitat x → x - -# Buildings and their name / description buildings: hub: deliver: Envia toUnlock: per a desbloquejar levelShortcut: NVL - + endOfDemo: Fi de la Demo belt: default: - name: &belt Cinta transportadora - description: Transporta objectes, mantén pressionat i arrossega per a col·locar múltiples. - + name: Cinta transportadora + description: Transporta objectes, mantén pressionat i arrossega per a col·locar + múltiples. wire: default: - name: &wire Cable + name: Cable description: Permet transportar energia. - - # Internal name for the Extractor + second: + name: Cable + description: Transfereix senyals, que poden ser ítems, colors o booleà. Cables + de diferents colors no es connecten entre ells. miner: default: - name: &miner Extractor + name: Extractor description: Posa-ho damunt d'una font de figures o colors per extraure'ls. - chainable: name: Extractor (Cadena) - description: Posa-ho damunt d'una font de figures o colors per extraure'ls. Pot ser encadenat! - - # Internal name for the Tunnel + description: Posa-ho damunt d'una font de figures o colors per extraure'ls. Pot + ser encadenat! underground_belt: default: - name: &underground_belt Túnel + name: Túnel description: Permet transportar recursos per sota d'edificis i cintes. - tier2: name: Túnel de Nivell II description: Permet transportar recursos per sota d'edificis i cintes. - - # Internal name for the Balancer - splitter: - default: - name: &splitter Distribuïdor - description: Multifuncional - Distribueix les entrades i sortides equitativament. - - compact: - name: Fusionador (compacte) - description: Fusiona dos cintes en una. - - compact-inverse: - name: Fusionador (compacte) - description: Fusiona dos cintes en una. - cutter: default: - name: &cutter Cisalla - 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à! + 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) - description: Talla figures en quatre parts. Si no utilitzes totes les parts, assegura't de destruir les altres o es pararà! - - advanced_processor: - default: - name: &advanced_processor Processador avançat - description: Processament de figures avançat. - + 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: default: - name: &rotater Rotador + name: Rotador description: Rota formes en sentit horari 90 graus. ccw: name: Rotador (Antihorari) description: Rota formes en sentit antihorari 90 graus. - fl: - name: Rotate (180) - description: Rotates shapes by 180 degrees. - + rotate180: + name: Rotador (180) + description: Rota formes 180 graus. stacker: default: - name: &stacker Apilador - description: Fusiona o apila ambdues figures. Si no poden ser fusionades, la figura de la dreta es posarà damunt de la de l'esquerra. - + name: Apilador + description: Fusiona o apila ambdues figures. Si no poden ser fusionades, la + figura de la dreta es posarà damunt de la de l'esquerra. mixer: default: - name: &mixer Mesclador de colors + name: Mesclador de colors description: Mescla dos colors amb mescla additiva. - painter: default: - name: &painter Pintor - description: &painter_desc Pinta la figura sencera de l'esquerra amb el color de l'entrada de dalt. - + name: Pintor + description: Pinta la figura sencera de l'esquerra amb el color de l'entrada de + dalt. mirrored: name: Pintor - description: Pinta la figura sencera de l'esquerra amb el color de l'entrada de baix. - + description: Pinta la figura sencera de l'esquerra amb el color de l'entrada de + baix. double: name: Pintor (Doble) 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: &trash Paperera + name: Paperera description: Acepta objectes de tots els costats i els destrueix. Permanentment. - - storage: - name: Magatzem - description: Emmagatzema objectes en excés, fins a una capacitat màxima. Es pot utilitzar com a control d'excedents. - - energy_generator: - deliver: Envia - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: Per a - + balancer: default: - name: &energy_generator Generador d'energia - description: Genera energia consumint figures. Cada generador requereix una figura diferent. - - wire_crossings: - default: - name: &wire_crossings Wire Splitter - description: Splits a energy wire into two. - + name: Equilibrador + description: Multifuncional - Reparteix uniformament totes les entrades a totes + les sortides. merger: - name: Wire Merger - description: Merges two energy wires into one. - + name: Fusionador (compacte) + description: Fusiona dues cintes transportadores en una. + merger-inverse: + name: Fusionador (compacte) + description: Fusiona dues cintes transportadores en una. + splitter: + name: Divisor (compacte) + description: Divideix una cinta transportadora en dues. + splitter-inverse: + name: Divisor (compacte) + description: Divideix una cinta transportadora en dues. + storage: + default: + 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: Encreuament de cablejat + description: Permet creuar dos cables sense conectar-los. + constant_signal: + default: + name: Senyal Constant + description: EEmet una senyal constant, que pot esser una forma, color o + booleana (1 / 0). + lever: + default: + name: Interruptor + description: Pot esser alternat per emetre una senyal booleana (1 / 0) a la capa + de cablejat. + logic_gate: + default: + 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: 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: 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: 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: Deixa passar la senyal inferior si la senyal lateral és vertadera + (una forma, color o "1"). + mirrored: + name: Transistor + description: Deixa passar la senyal inferior si la senyal lateral és vertadera + (una forma, color o "1"). + filter: + default: + 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: Pantalla + description: Conecta una senyal per que es mostri a la pantalla. Pot ser una + forma, color o booleà + reader: + default: + 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: 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: 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: Tallador virtual + description: Talla la forma virtual en dues parts. + rotater: + name: Rotador Virtual + description: Rota la forma virtual, tant en sentit horari com antihorari. + unstacker: + name: Desapilador Virtual + description: Extreu la capa superior a la sortida dreta i la resta a la sortida + esquerra. + stacker: + name: Apilador Virtual + description: Apila la figura de l'entrada dreta damunt l'entrada esquerra. + painter: + name: Pintador Virtual + description: Pinta la capa de l'entrada inferior amb la figura de la entrada + dreta. + item_producer: + default: + name: Productor d'ítems + description: Només avaliable en mode "sandbox", emet la senyal de la capa de + cablejat a la capa normal. storyRewards: - # Those are the rewards gained from completing the store 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 horari 90 graus. - + desc: El Rotador s'ha desbloquejat! Rota formes en sentit + horari 90 graus. reward_painter: title: Pintar - desc: >- - El Pintor s'ha desbloquejat! - Extreu mena de color (de la mateixa forma que les figures) i pinta les figures amb el pintor!

- Si ets daltònic, pots activar l'opció per daltònics en les opcions! - + desc: El Pintor s'ha desbloquejat! - Extreu mena de color (de + la mateixa forma que les figures) i pinta les figures amb el + pintor!

- Si ets daltònic, pots activar l'opció per + daltònics en les opcions! reward_mixer: title: Mesclar colors - desc: El Mesclador de colors s'ha desbloquejat! - Combina dos colors utilitzant la mescla additiva amb aquest edifici! - + desc: El Mesclador de colors s'ha desbloquejat! - Combina dos + colors utilitzant la mescla additiva amb aquest + edifici! reward_stacker: title: Apilador - desc: Ara pots combinar figures amb el apilador! Ambdues entrades són combinades. Si es poden posar una vora l'altra, es fusionaran. Si no, l'entrada de la dreta s'apilarà damunt de la de l'esquerra! - + desc: Ara pots combinar figures amb el apilador! Ambdues + entrades són combinades. Si es poden posar una vora l'altra, es + fusionaran. Si no, l'entrada de la dreta + 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 través d'edificis i cintes transportadores! - + desc: El túnel s'ha desbloquejat - Ara pots passar objectes a + través d'edificis i cintes transportadores! reward_rotater_ccw: title: Rotació antihorària - desc: Has desbloquejat una variant del rotador - Et permet rotar en sentit antihorari! Per tal de construir-lo, selecciona el rotador i pressiona 'T' per a ciclar les diferents variants! - + desc: Has desbloquejat una variant del rotador - Et permet + rotar en sentit antihorari! Per tal de construir-lo, selecciona el + rotador i pressiona 'T' per a ciclar les diferents + 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_splitter_compact: - title: Distribuïdor compacte - desc: >- - Has desbloquejat una variant compacta del distribuïdor - Acepta dues entrades i les fusiona en una sola! - + 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 tallar figures en quatre parts en lloc de sols en dos! - + 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: title: Pintor doble - desc: Has desbloquejat una variant del pintor - Funciona com el pintor regular però processa dos figures alhora, consumint sols un color en lloc de dos! - - reward_painter_quad: - title: Pintor quàdruple - desc: Has desbloquejat una variant del pintor - Et permet pintar cada part de la figura individualment! - + desc: Has desbloquejat una variant del pintor - Funciona com el + pintor regular però processa dos figures alhora, + 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 fàbrica! Selecciona una àrea (Mantén pressionat CTRL, i arrossega el ratolí), i pressiona 'C' per a copiar-la.

Apegar/enxegar-la no és gratis, necessites produir figures de plànols per a poder fer-ho! (Les que n'acabes d'enviar). - - # Special reward, which is shown when there is no reward actually + desc: Ara pots copiar i apegar/enxegar parts de la teva/ua + fàbrica! Selecciona una àrea (Mantén pressionat CTRL, i arrossega el + ratolí), i pressiona 'C' per a copiar-la.

Apegar/enxegar-la + no és gratis, necessites produir figures de + plànols per a poder fer-ho! (Les que n'acabes d'enviar). no_reward: title: Següent nivell - desc: >- - Aquest nivell no t'ha donat res, però el següent ho farà!

PD: És millor que no destrueixes la part de la fàbrica existent - Necessitaràs totes aquestes figures més tard per a desbloquejar millores! - + desc: "Aquest nivell no t'ha donat res, però el següent ho farà!

PD: És + millor que no destrueixes la part de la fàbrica existent - + Necessitaràs totes aquestes figures més tard per a + desbloquejar millores!" no_reward_freeplay: title: Següent nivell + desc: Enhorabona! Per cert, hi ha més contingut planejat per a la versió + completa - fora del web! + reward_balancer: + title: Equilibrador + 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: Fusionador Compacte + desc: Has desbloquejat una variant fusionadora de + l'equilibrador. Accepta dues entrades i les fusiona + en una cinta! + reward_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: Rotador (180 graus) + desc: Acabes de desbloquejar un altre rotador!. Et permet rotar + una forma 180 graus. + reward_display: + 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: Senyal constant desc: >- - Enhorabona! Per cert, hi ha més contingut planejat per a la versió completa - fora del web! - + 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: 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: 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: 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: 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: Final de la Demo + desc: Has arribat al final de la Demo! settings: title: Opcions categories: general: General - userInterface: User Interface - advanced: Advanced - + userInterface: Interfície d'Usuari + advanced: Avançat + performance: Rendiment versionBadges: dev: Desenvolupament - staging: Staging + staging: Posada en escena prod: Producció buildDate: Generat - labels: uiScale: title: Escala de la interfície - description: >- - Canvia la dimensió de la interfície de l'usuari. La interfície se seguirà redimensionant depenent de la resolució del teu dispositiu, però aquesta opció controla la quantitat del redimensionat. + description: Canvia la dimensió de la interfície de l'usuari. La interfície se + seguirà redimensionant depenent de la resolució del teu + dispositiu, però aquesta opció controla la quantitat del + redimensionat. scales: super_small: Micro small: Petit regular: Estàndard large: Gran huge: Macro - autosaveInterval: title: Interval de guardat automàtic - description: >- - Controla el temps entre guardats automàtics que fa el joc, pots deshabilitar-ho des d'aquí - + description: Controla el temps entre guardats automàtics que fa el joc, pots + deshabilitar-ho des d'aquí intervals: one_minute: 1 Minut two_minutes: 2 Minuts @@ -685,22 +762,19 @@ settings: ten_minutes: 10 Minuts twenty_minutes: 20 Minuts disabled: Desactivat - scrollWheelSensitivity: title: Sensitivitat del Zoom - description: >- - Canvia la sensitivitat del zoom (Roda del ratolí o del trackpad). + description: Canvia la sensitivitat del zoom (Roda del ratolí o del trackpad). sensitivity: super_slow: Molt lent slow: Lent regular: Regular fast: Ràpid super_fast: Molt Ràpid - movementSpeed: title: Velocitat de Moviment - description: >- - Canvia la rapidesa amb la que la vista es mou mentres empres el teclat. + description: Canvia la rapidesa amb la que la vista es mou mentres empres el + teclat. speeds: super_slow: Molt lent slow: Lent @@ -708,87 +782,125 @@ settings: fast: Rápid super_fast: Molt Ràpid extremely_fast: Extremadament Ràpid - language: title: Idioma - description: >- - Canvia l'idioma. Totes les traduccions són contribucions d'usuaris i poden estar incompletes! - + description: Canvia l'idioma. Totes les traduccions són contribucions d'usuaris + i poden estar incompletes! enableColorBlindHelper: title: Mode per Daltònics - description: >- - Habilita diverses eines que et permeten jugar si ets Daltònic. - + description: Habilita diverses eines que et permeten jugar si ets Daltònic. fullscreen: title: Pantalla Completa - description: >- - Es recomana jugar en Pantalla Completa per aconseguir la millor experiència. Només disponible a la versió completa del joc. - + description: Es recomana jugar en Pantalla Completa per aconseguir la millor + experiència. Només disponible a la versió completa del joc. soundsMuted: title: Silencia els sons - description: >- - Si està activat, silencia tots els sons. - + description: Si està activat, silencia tots els sons. musicMuted: title: Silencia la música - description: >- - Si està activat, silencia la música. - + description: Si està activat, silencia la música. theme: title: Tema del joc (Visual) - description: >- - Tria el tema visual (clar / oscur). + description: Tria el tema visual (clar / oscur). themes: dark: Oscur light: Clar - refreshRate: title: Objectiu de Simulació - description: >- - Si tens un monitor de 144hz, canvia la tarifa de refresc aquí per que el joc es mostri de forma correcta a tarifes de refresc altes. Pot decrementar els FPS si el teu ordenador és massa lent. - + description: Si tens un monitor de 144hz, canvia la tarifa de refresc aquí per + que el joc es mostri de forma correcta a tarifes de refresc + altes. Pot decrementar els FPS si el teu ordenador és massa + lent. alwaysMultiplace: title: Col·locació Múltiple - description: >- - Si s'activa, tots els edificis es mantindràn seleccionats després de col·locarlos fins que ho cancel·lis. Això és equivalent a mantenir SHIFT permanentment. - + description: Si s'activa, tots els edificis es mantindràn seleccionats després + de col·locarlos fins que ho cancel·lis. Això és equivalent a + mantenir SHIFT permanentment. offerHints: title: Pistes i Tutorials - description: >- - Si s'activa, es mostraràn pistes i tutorials mentres es juga. També amaga certs elements visuals fins a un nivell per que sigui més fàcil aprendre a jugar. - + description: Si s'activa, es mostraràn pistes i tutorials mentres es juga. També + amaga certs elements visuals fins a un nivell per que sigui més + fàcil aprendre a jugar. enableTunnelSmartplace: title: Túnels Intel·ligents - description: >- - Si s'activa, al col·locar túnels s'eliminaràn les cintes transportadores innecessaris. També et permet arrastrar túnels i els túnels sobrants s'eliminaràn. - + description: Si s'activa, al col·locar túnels s'eliminaràn les cintes + transportadores innecessaris. També et permet arrastrar túnels i + els túnels sobrants s'eliminaràn. vignette: title: Vinyeta - description: >- - Activa la vinyeta, que obscureix els cantons de la pantalla i facilita la lectura de texte. - + description: Activa la vinyeta, que obscureix els cantons de la pantalla i + facilita la lectura de texte. rotationByBuilding: title: Rotació segons el tipus d'edifici. - description: >- - Cada tipus d'edifici recorda la rotació que vau definir per última vegada de manera individual. Això pot ser més còmode si canvies freqüentment entre edificis. - + description: Cada tipus d'edifici recorda la rotació que vau definir per última + vegada de manera individual. Això pot ser més còmode si canvies + freqüentment entre edificis. compactBuildingInfo: title: Informació sobre Edificis Compactes - description: >- - Escurça els quadres d’informació dels edificis només mostrant les seves velocitats. En cas contrari, es mostra una descripció i una imatge. - + description: Escurça els quadres d’informació dels edificis només mostrant les + seves velocitats. En cas contrari, es mostra una descripció i + una imatge. disableCutDeleteWarnings: title: Desactiva els diàlegs de Talla/Borra - description: >- - Desactiva els diàlegs d'advertència que es mostren en tallar / suprimir més de 100 entitats. - + description: Desactiva els diàlegs d'advertència que es mostren en tallar / + suprimir més de 100 entitats. + soundVolume: + title: Volum de sò + description: Defineix el volum dels sons + musicVolume: + title: Volum de música + description: Defineix el volum de la música + lowQualityMapResources: + 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: Desactiva la Graella + description: Desactivar la graella pot ajudar al rendiment. També fa que el joc + es vegi més net! + clearCursorOnDeleteWhilePlacing: + 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: 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: 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: 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: 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: 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Combinacions de tecles - hint: >- - Tip: Assegura't d'emprar CTRL, SHIFT i ALT! Et permeten col·locar objectes de formes diferents. - + hint: "Tip: Assegura't d'emprar CTRL, SHIFT i ALT! Et permeten col·locar + objectes de formes diferents." resetKeybindings: Resetejar les Combinacions de tecles - categoryLabels: general: Aplicació ingame: Joc @@ -797,7 +909,6 @@ keybindings: massSelect: Sel·lecció Massiva buildings: Dreceres d'Edificis placementModifiers: Modificadors de col·locació - mappings: confirm: Confirmar back: Enrere @@ -807,58 +918,63 @@ keybindings: mapMoveLeft: Moure Esquerra mapMoveFaster: Moure més Ràpid centerMap: Centrar Mapa - mapZoomIn: Apropar mapZoomOut: Allunyar createMarker: Crea un Marcador - menuOpenShop: Millores menuOpenStats: Estadístiques menuClose: Tancar Menú - toggleHud: Commutar HUD toggleFPSInfo: Commutar FPS i Informació de Depuració switchLayers: Canviar capes exportScreenshot: Exportar la Base com a Imatge - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Cinta transportadora + underground_belt: Túnel + miner: Extractor + cutter: Tallador + rotater: Rotador + stacker: Apilador + mixer: Mesclador de colors + painter: Pintor + trash: Paperera + 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 massSelectCut: Tallar àrea - placementDisableAutoOrientation: Desactivar orientació automàtica placeMultiple: Mantenir-se en mode de col·locació placeInverse: Invertir orientació automàtica de les cintes transportadores - + 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: Analitzador de Figura + comparator: Comparador + item_producer: Productor d'items (Sandbox) + copyWireValue: "Cables: Copiar valor davall el cursor" about: title: Sobre aquest Joc body: >- - Aquest joc és de codi obert i desenvolupat per Tobias Springer (sóc jo).

+ Aquest joc és de codi obert i desenvolupat per Tobias Springer + (sóc jo).

Si vols contribuir, visita shapez.io a GitHub.

@@ -867,10 +983,8 @@ about: Banda sonora creada perPeppsen - És increïble.

Finalment, gràcies al meu millor amic Niklas. Sense les nostres sessions de Factorio, aquest joc mai hauria existit. - changelog: title: Registre de Canvis - demo: features: restoringGames: Restaurar partides guardats @@ -878,5 +992,80 @@ demo: oneGameLimit: Limitat a una partida guardada. customizeKeybindings: Personalitzar teclats exportingBase: Exportar la base com a Imatge - settingNotAvailable: No disponible en la versió de demostració. +tips: + - 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 2ee35618..f94fa0c7 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -1,93 +1,62 @@ -# Czech translation - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io je hra o stavbě továren pro automatizaci výroby a kombinování čím dál složitějších tvarů na nekonečné mapě. + 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ě. + 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ů. - # 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] + 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ě. - shapez.io is a game about building factories to automate the creation and processing of increasingly complex shapes across an infinitely expanding map. - Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory. + A 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í! - 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]! + 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! - 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] - - discordLink: Official Discord - Chat with me! + 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é. + Nezapomeňte se podívat na můj trello board, kde najdete kompletní plán! global: loading: Načítám error: Chyba - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: nekonečno - time: - # Used for formatting past time dates oneSecondAgo: před sekundou xSecondsAgo: před sekundami oneMinuteAgo: před minutou @@ -96,14 +65,10 @@ global: xHoursAgo: před hodinami oneDayAgo: včera xDaysAgo: před dny - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minut - keys: tab: TAB control: CTRL @@ -111,13 +76,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demo verze - intro: >- - Získejte plnou verzi pro odemknutí všech funkcí! - + intro: Získejte plnou verzi pro odemknutí všech funkcí! mainMenu: play: Hrát changelog: Změny @@ -125,19 +86,16 @@ mainMenu: openSourceHint: Tato hra je open source! discordLink: Oficiální Discord Server helpTranslate: Pomozte přeložit hru! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Hrajete v nepodporovaném prohlížeči, je možné že hra poběží pomalu! Pořiďte si samostatnou verzi nebo vyzkoušejte prohlížeč Chrome pro plnohodnotný zážitek. - + browserWarning: Hrajete v nepodporovaném prohlížeči, je možné že hra poběží + pomalu! Pořiďte si samostatnou verzi nebo vyzkoušejte prohlížeč Chrome + pro plnohodnotný zážitek. savegameLevel: Úroveň savegameLevelUnknown: Neznámá úroveň - continue: Pokračovat newGame: Nová hra madeBy: Vytvořil subreddit: Reddit - + savegameUnnamed: Nepojmenovaný dialogs: buttons: ok: OK @@ -146,118 +104,101 @@ dialogs: later: Později restart: Restart reset: Reset - getStandalone: Získejte Plnou verzi - deleteGame: Vím co dělám + getStandalone: Získejte plnou verzi + deleteGame: Vím, co dělám viewUpdate: Zobrazit aktualizaci showUpgrades: Zobrazit vylepšení showKeybindings: Zobrazit klávesové zkratky - importSavegameError: title: Chyba Importu - text: >- - Nepovedlo se importovat vaši uloženou hru: - + text: "Nepovedlo se importovat vaši uloženou hru:" importSavegameSuccess: title: Uložená hra importována - text: >- - Vaše uložená hra byla úspěšně importována. - + text: Vaše uložená hra byla úspěšně importována. gameLoadFailure: title: Uložená hra je poškozená - text: >- - Nepovedlo se načíst vaši uloženou hru: - + 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: - + text: "Nepovedlo se smazat vaši uloženou hru:" restartRequired: title: Vyžadován restart - text: >- - Pro aplikování nastavení musíte restartovat hru. - + text: Pro aplikování nastavení musíte restartovat hru. editKeybinding: title: Změna klávesové zkratky - desc: Zmáčkněte klávesu nebo tlačítko na myši pro přiřazení nebo Escape pro zrušení. - + desc: Zmáčkněte klávesu nebo tlačítko na myši pro přiřazení nebo Escape pro + zrušení. resetKeybindingsConfirmation: title: Reset klávesových zkratek desc: Opravdu chcete vrátit klávesové zkratky zpět do původního nastavení? - keybindingsResetOk: title: Reset klávesových zkratek desc: Vaše klávesové zkratky byly resetovány do původního nastavení! - featureRestriction: title: Demo verze - desc: Zkoušíte použít funkci (), která není v demo verzi. Pořiďte si plnou verzi pro lepší zážitek! - + desc: Zkoušíte použít funkci (), která není v demo verzi. Pořiďte si + plnou verzi pro lepší zážitek! oneSavegameLimit: title: Omezené ukládání - desc: Ve zkušební verzi můžete mít pouze jednu uloženou hru. Odstraňte stávající uloženou hru nebo si pořiďte plnou verzi! - + desc: Ve zkušební verzi můžete mít pouze jednu uloženou hru. Odstraňte stávající + uloženou hru nebo si pořiďte plnou verzi! updateSummary: title: Nová aktualizace! - desc: >- - Tady jsou změny od posledně: - + desc: "Tady jsou změny od posledně:" upgradesIntroduction: title: Odemknout vylepšení - desc: >- - Všechny tvary, které vytvoříte, lze použít k odemčení vylepšení - Neničte své staré továrny! - Karta vylepšení se nachází v pravém horním rohu obrazovky. - + desc: Všechny tvary, které vytvoříte, lze použít k odemčení vylepšení - + Neničte své staré továrny! Karta vylepšení se + nachází v pravém horním rohu obrazovky. massDeleteConfirm: title: Potvrdit smazání - desc: >- - Odstraňujete spoustu budov (přesněji )! Opravdu je chcete smazat? - + desc: Odstraňujete spoustu budov (přesněji )! Opravdu je chcete smazat? blueprintsNotUnlocked: title: Zatím neodemčeno - desc: >- - Plány ještě nebyly odemčeny! Chcete-li je odemknout, dokončete úroveň 12. - + desc: Plány ještě nebyly odemčeny! Chcete-li je odemknout, dokončete úroveň 12. keybindingsIntroduction: title: Užitečné klávesové zkratky - desc: >- - Hra má spoustu klávesových zkratek, které usnadňují stavbu velkých továren. - Zde jsou některé, ale nezapomeňte se podívat i na ostatní klávesové zkratky!

- CTRL + Táhnout: Vybrání oblasti.
- SHIFT: Podržením můžete umístit více budov za sebout.
- ALT: Změnit orientaci umístěných pásů.
- + desc: "Hra má spoustu klávesových zkratek, které usnadňují stavbu velkých + továren. Zde jsou některé, ale nezapomeňte se podívat i na + ostatní klávesové zkratky!

CTRL + Táhnout: Vybrání oblasti.
SHIFT: Podržením můžete umístit více budov + za sebout.
ALT: Změnit orientaci + 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 neomezený počet značek! + desc: V ukázce můžete vytvořit pouze dvě značky. Získejte plnou verzi pro + neomezený počet značek! massCutConfirm: title: Potvrdit vyjmutí - desc: >- - Chceš vyjmout spoustu budov (přesněji řečeno )! Vážně to - chceš udělat? - + desc: Chceš vyjmout spoustu budov (přesněji řečeno )! Vážně to chceš + udělat? exportScreenshotWarning: title: Exportuj snímek obrazovky - desc: >- - Zažádal jsi o exportování své základny jako obrázek. Měj prosím na paměti, že to - může zejména u větších základen dlouho trvat, nebo dokonce shodit hru! - + desc: Zažádal jsi o exportování své základny jako obrázek. Měj prosím na paměti, + že to může zejména u větších základen dlouho trvat, nebo dokonce + shodit hru! massCutInsufficientConfirm: title: Potvrdit vyjmutí desc: Nemůžeš si dovolit vložení této oblasti! Skutečně ji chceš vyjmout? - + editSignal: + title: Nastavte signál + descItems: "Vyberte předdefinovanou položku:" + descShortKey: ... nebo zadejte krátký klíč tvaru (který můžete + vygenerovat zde) + renameSavegame: + title: Přejmenovat uloženou hru + desc: Zde můžeš přejmenovat svoji uloženou hru. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Posun mapy selectBuildings: Vybrat oblast @@ -274,22 +215,13 @@ ingame: lockBeltDirection: Zamknout směr pásu plannerSwitchSide: Otočit strany plánovače cutSelection: Vyjmout - copySelection: Kopířovat + copySelection: Kopírovat clearSelection: Zrušit výběr pipette: Kapátko - switchLayers: Switch layers - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) + switchLayers: Změnit vrstvy buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Zmáčkněte pro přepínání mezi variantami. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Klávesová zkratka: - + hotkeyLabel: "Klávesová zkratka: " infoTexts: speed: Rychlost range: Dosah @@ -297,36 +229,21 @@ ingame: oneItemPerSecond: 1 tvar / sekundu itemsPerSecond: tvarů / s itemsPerSecondDouble: (x2) - tiles: dílků - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Úroveň completed: Dokončeno unlockText: "Odemčeno: !" buttonNextLevel: Další úroveň - - # Notifications on the lower right notifications: newUpgrade: Nová aktualizace je k dispozici! gameSaved: Hra byla uložena. - - # The "Upgrades" window + freeplayLevelComplete: Level byl dokončen! shop: title: Vylepšení buttonUnlock: Vylepšit - - # Gets replaced to e.g. "Tier IX" tier: Úroveň - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAXIMÁLNÍ ÚROVEŇ (Rychlost x) - - # The "Statistics" window statistics: title: Statistiky dataSources: @@ -340,50 +257,41 @@ ingame: title: Dodáno description: Tvary které jsou dodávány do vaší centrální budovy. noShapesProduced: Žádné tvary zatím nebyly vyprodukovány. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Herní čas - buildingsPlaced: Budovy beltsPlaced: Pásy - - buttons: - continue: Pokračovat - settings: Nastavení - menu: Návrat do menu - - # Bottom left tutorial hints tutorialHints: title: Potřebujete pomoct? showHint: Zobrazit nápovědu hideHint: Zavřít - - # When placing a blueprint blueprintPlacer: cost: Cena - - # Map markers waypoints: waypoints: Značky hub: HUB - description: Klepnutím levým tlačítkem myši na značku se přesunete na její umístění, klepnutím pravým tlačítkem ji odstraníte.

Stisknutím klávesy vytvoříte značku na aktuálním místě, nebo klepnutím pravým tlačítkem vytvoříte značku na vybraném místě na mapě. + description: Klepnutím levým tlačítkem myši na značku se přesunete na její + umístění, klepnutím pravým tlačítkem ji + odstraníte.

Stisknutím klávesy vytvoříte značku + na aktuálním místě, nebo klepnutím pravým tlačítkem + vytvoříte značku na vybraném místě na mapě. creationSuccessNotification: Značka byla vytvořena. - - # Interactive tutorial interactiveTutorial: title: Tutoriál hints: - 1_1_extractor: Umístěte extraktor na nalezištěkruhového tvaru a vytěžte jej! - 1_2_conveyor: >- - Připojte extraktor pomocí dopravníkového pásu k vašemu HUBu!

Tip: Klikněte a táhněte myší pro položení více pásů! - - 1_3_expand: >- - Toto NENÍ hra o čekání! Sestavte další extraktory a pásy, abyste dosáhli cíle rychleji.

Tip: Chcete-li umístit více extraktorů, podržte SHIFT. Pomocí R je můžete otočit. - + 1_1_extractor: Umístěte extraktor na nalezištěkruhového + tvaru a vytěžte jej! + 1_2_conveyor: "Připojte extraktor pomocí dopravníkového pásu k + vašemu HUBu!

Tip: Klikněte a táhněte + myší pro položení více pásů!" + 1_3_expand: "Toto NENÍ hra o čekání! Sestavte další extraktory + a pásy, abyste dosáhli cíle rychleji.

Tip: Chcete-li + umístit více extraktorů, podržte SHIFT. Pomocí + R je můžete otočit." colors: red: Červená green: Zelená @@ -393,13 +301,47 @@ ingame: cyan: Tyrkysová white: Bílá uncolored: Bez barvy - black: Black + black: Černá shapeViewer: title: Vrstvy empty: Prázdné copyKey: Copy Key - -# All shop upgrades + connectedMiners: + one_miner: 1 Extraktor + n_miners: Extraktorů + limited_items: Limit je + watermark: + title: Demo verze + desc: Kliknutím sem zobrazíte výhody Steam verze! + get_on_steam: Získejte na steamu + standaloneAdvantages: + title: Získejte plnou verzi! + no_thanks: Ne, děkuji! + points: + levels: + title: 12 Nových úrovní + desc: Celkem 26 úrovní! + buildings: + title: 18 Nových budov + desc: Plně automatizujte svou továrnu! + savegames: + title: ∞ Uložených her + desc: Tolik, kolik vaše srdce touží! + upgrades: + title: 20 vylepšení + desc: Tato demo verze má pouze 5! + markers: + title: ∞ Značek + desc: Nikdy se neztraťte ve své továrně! + wires: + title: Kabely + desc: Zcela nový rozměr! + darkmode: + title: Dark Mode + desc: Přestanou vás bolet oči! + support: + title: Podpořte mě + desc: Vyvíjím to ve svém volném čase! shopUpgrades: belt: name: Pásy, distribuce & tunely @@ -413,286 +355,414 @@ shopUpgrades: painting: name: Míchání a barvení description: Rychlost x → x - -# Buildings and their name / description buildings: hub: deliver: Dodejte toUnlock: pro odemčení levelShortcut: LVL - + endOfDemo: konec Demo verze belt: default: - name: &belt 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. - - miner: # Internal name for the Extractor + name: Dopravníkový pás + description: Přepravuje tvary a barvy, přidržením můžete tahem umístit více pásů + za sebou. + miner: default: - name: &miner Extraktor - description: Umístěte na náleziště tvaru nebo barvy pro zahájení těžby. - + name: Extraktor + description: Umístěte na naleziště tvaru nebo barvy pro zahájení těžby. chainable: name: Extraktor (Navazující) - description: Umístěte na náleziště tvaru nebo barvy pro zahájení těžby. Lze zapojit po skupinách. - - underground_belt: # Internal name for the Tunnel + description: Umístěte na naleziště tvaru nebo barvy pro zahájení těžby. Lze + zapojit po skupinách. + underground_belt: default: - name: &underground_belt Tunel + name: Tunel description: Umožňuje vézt suroviny pod budovami a pásy. - tier2: name: Tunel II. úrovně description: Umožňuje vézt suroviny pod budovami a pásy. - - splitter: # Internal name for the Balancer - default: - name: &splitter Balancer - description: Multifunkční - Rozděluje vstupy do výstupů. - - compact: - name: Spojka (levá) - description: Spojí dva pásy do jednoho. - - compact-inverse: - name: Spojka (pravá) - description: Spojí dva pásy do jednoho. - cutter: default: - name: &cutter Pila - description: Rozřízne tvar svisle na dvě části. Pokud použijete jen jednu půlku, nezapomeňte druhou smazat, jinak se vám produkce zasekne! + name: Pila + description: Rozřízne tvar svisle na dvě části. Pokud použijete jen + jednu půlku, nezapomeňte druhou smazat, jinak se vám produkce + zasekne! quad: name: Rozebírač - description: Rozebere tvar na čtyři části. Pokud použijete jen některé části, nezapomeňte ostatní smazat, jinak se vám produkce zasekne! - + description: Rozebere tvar na čtyři části. Pokud použijete jen některé + části, nezapomeňte ostatní smazat, jinak se vám produkce + zasekne! rotater: default: - name: &rotater Rotor + name: Rotor 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 - fl: - name: Rotate (180) - description: Rotates shapes by 180 degrees. - + description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček. + rotate180: + name: Rotor (180°) + description: Otáčí tvary o 180 stupňů. stacker: default: - name: &stacker Kombinátor - description: Spojí tvary dohromady. Pokud nemohou být spojeny, pravý tvar je položen na levý. - + name: Kombinátor + description: Spojí tvary dohromady. Pokud nemohou být spojeny, pravý tvar je + položen na levý. mixer: default: - name: &mixer Mixér na barvy + name: Mixér na barvy description: Smíchá dvě barvy. - painter: default: - name: &painter Barvič - description: &painter_desc Obarví celý tvar v levém vstupu barvou z pravého vstupu. + name: Barvič + description: Obarví celý tvar v levém vstupu barvou z pravého vstupu. double: name: Barvič (dvojnásobný) 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: *painter - description: *painter_desc - + name: Barvič + description: Obarví celý tvar v levém vstupu barvou z pravého vstupu. trash: default: - name: &trash Koš - description: Příjmá tvary a barvy ze všech stran a smaže je. Navždy. - - storage: - 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. + name: Koš + description: Přijímá tvary a barvy ze všech stran a smaže je. Navždy. wire: default: name: Kabel description: Dovoluje přenos energie. - advanced_processor: + second: + name: Kabel + description: Dovoluje přenos energie. + balancer: default: - name: Invertor barev - description: Přijme barvu či tvar a převrátí jej. - energy_generator: - deliver: Dodej - toGenerateEnergy: Pro - default: - name: Generátor energie - description: Vyrábí energii zpracováním tvarů. - wire_crossings: - default: - name: Dělič kabelů - description: Rozdělí kabel na dva. + name: Vyvažovač + description: Multifunkční - Rovnoměrně rozděluje vstupy na výstupech. merger: - name: Slučovač kabelů - description: Spojí dva kabely do jednoho. - + name: Spojovač (kompaktní) + description: Spojí dva pásy do jednoho. + merger-inverse: + name: Spojovač (kompaktní) + description: Spojí dva pásy do jednoho. + splitter: + name: Rozdělovač (kompaktní) + description: Rozdělí jeden pás na dva. + splitter-inverse: + name: Rozdělovač (kompaktní) + description: Rozdělí jeden pás na dva. + storage: + default: + name: Sklad + 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 kabelů bez jejich spojení. + constant_signal: + default: + name: Konstantní signál + description: Vydává konstantní signál, který může mít tvar, barvu nebo logickou + hodnotu (1 / 0). + lever: + default: + name: Přepínač + description: Lze přepínat, aby vydával signál (1/0) na vrstvě vodičů, pomocí + kterého lze například ovládat filtr tvarů a barev. + logic_gate: + default: + name: AND Gate + description: Vysílá signál "1" pokud oba vstupy vysílají signál. + not: + name: NOT Gate + description: Vysílá signál "1" pokud oba vstupy nevysílají signál. + xor: + name: XOR Gate + description: Vysílá signál "1" pokud jeden vstup vysílá signál, ale druhý vstup + nevysílá signál. + or: + name: OR Gate + description: Vysílá signál "1" pokud jeden vstup vysílá signál. + transistor: + default: + name: Tranzistor + description: Přeposílá spodní vstup, pokud boční vstup vysílá signál. + mirrored: + name: Tranzistor + description: Přeposílá spodní vstup, pokud boční vstup vysílá signál. + filter: + default: + name: Filtr + description: Připojte signál k třídění tvarů a barev. + display: + default: + name: Display + description: Připojte signál a zobrazte jej na displeji - může to být tvar nebo + barva. + reader: + default: + name: Čtečka pásů + description: Umožňuje změřit průměrnou propustnost pásu. Výstup čte poslední + položku ve vrstvě kabelů. + analyzer: + default: + name: Analyzátor tvarů + description: Analyzuje pravou horní část nejnižší vrstvy tvaru a vrací tvar a + barvu. + comparator: + default: + name: Porovnávač + description: Vrátí signál „1“, pokud jsou oba signály přesně stejné. Může + srovnávat tvary, předměty a signály. + virtual_processor: + default: + name: Virtuální pila + 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. + unstacker: + name: Virtuální extrahátor + description: Virtuálně extrahuje nejvyšší vrstvu do pravého výstupu a zbývající + do levé. + stacker: + name: Virtuální kombinátor + description: Virtuálně Spojí tvary dohromady. Pokud nemohou být spojeny, pravý + tvar je položen na levý. + painter: + name: Virtual barvič + description: Virtuálně obarví celý tvar v levém vstupu barvou z pravého vstupu. + item_producer: + default: + 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: - # Those are the rewards gained from completing the store 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 ručiček o 90 stupňů. - + desc: Rotor byl právě odemčen! Otáčí tvary po směru hodinových + ručiček o 90 stupňů. reward_painter: title: Barvení - desc: >- - Barvič byl právě odemčen - Vytěžte nějaká ložiska barev (podobně jako těžíte tvary) a spojte je s tvarem v barviči pro jeho obarvení!

PS: Pokud jste barvoslepý, v nastavení naleznete režim pro barvoslepé! - + desc: "Barvič byl právě odemčen - Vytěžte nějaká ložiska barev + (podobně jako těžíte tvary) a spojte je s tvarem v barviči pro jeho + obarvení!

PS: Pokud jste barvoslepý, v nastavení naleznete + režim pro barvoslepé!" reward_mixer: title: Míchání barev - desc: Mixér byl právě odemčen - zkombinuje dvě barvy pomocí aditivního míchání! - + desc: Mixér byl právě odemčen - zkombinuje dvě barvy pomocí + aditivního míchání! reward_stacker: title: Kombinátor - desc: Nyní můžete spojovat tvary pomocí kombinátor! Pokud to jde, oba tvary se slepí k sobě. Pokud ne, tvar vpravo se nalepí na tvar vlevo! - + desc: Nyní můžete spojovat tvary pomocí kombinátor! Pokud to + jde, oba tvary se slepí k sobě. Pokud ne, tvar + 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 budovami a pásy. - + desc: Tunel byl právě odemčen - Umožňuje vézt suroviny pod + budovami a pásy. reward_rotater_ccw: title: Otáčení II - desc: Odemknuli jste variantu rotoru - Umožňuje vám otáčet proti směru hodinových ručiček. Vyberte rotor a zmáčkněte 'T' pro přepnutí mezi variantami! - + desc: Odemknuli jste variantu rotoru - Umožňuje vám otáčet + proti směru hodinových ručiček. Vyberte rotor a zmáčkněte + '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ší dosah a také můžete nyní míchat tunely dohromady! - - reward_splitter_compact: - title: Kompaktní spojka - desc: >- - Odemknuli jste variantu balanceru - Spojuje dva pásy do jednoho! - + desc: Odemknuli jste tunel II. úrovně - Má delší + dosah a také můžete nyní míchat tunely dohromady! reward_cutter_quad: title: Řezání na čtvrtiny - desc: Odemknuli jste variantu pily - Rozebírač vám umožňuje rozdělit tvary na čtvrtiny místo na poloviny! - + desc: Odemknuli jste variantu pily - Rozebírač vám umožňuje + rozdělit tvary na čtvrtiny místo na poloviny! reward_painter_double: title: Dvojité barvení - desc: Odemknuli jste variantu barviče - Funguje stejně jako normální, ale nabarví dva tvary naráz pomocí jedné barvy! - - reward_painter_quad: - title: Čtyřstranné barvení - desc: Odemknuli jste variantu painter - Umožní vám nabarvit každou čtvrtinu tvaru jinou barvou! - + desc: Odemknuli jste variantu barviče - Funguje stejně jako + normální, ale nabarví dva tvary naráz pomocí jedné + 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 oblast (Držte CTRL a táhněte myší) a zmáčkněte 'C' pro zkopírování.

Vkládání není zadarmo, potřebujete produkovat tvary pro plány na výstavbu! (Jsou to ty které jste právě dodali). - - # Special reward, which is shown when there is no reward actually + desc: Nyní můžete kopírovat a vkládat části továrny! Vyberte + oblast (Držte CTRL a táhněte myší) a zmáčkněte 'C' pro + zkopírování.

Vkládání není zadarmo, + potřebujete produkovat tvary pro plány na výstavbu! + (Jsou to ty které jste právě dodali). no_reward: title: Další úroveň - desc: >- - Tato úroveň vám nic neodemknula, ale s další to přijde!

PS: Radši neničte vaše stávající továrny - budete potřebovat všechny produkované tvary později na odemčení vylepšení! - + desc: "Tato úroveň vám nic neodemknula, ale s další to přijde!

PS: + Radši neničte vaše stávající továrny - budete potřebovat + všechny produkované tvary později na + odemčení vylepšení!" no_reward_freeplay: title: Další úroveň - desc: >- - Gratuluji! Mimochodem, více obsahu najdete v plné verzi! - + desc: Gratuluji! Mimochodem, více obsahu najdete v plné verzi! + reward_balancer: + title: Vyvažovač + 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: 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: Č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: 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: "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: 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: 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: 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: 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: 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: Konec demo verze + desc: Právě jste dosáhli konce demo verze! settings: title: Nastavení categories: general: Obecné userInterface: Uživatelské rozhraní advanced: Rozšířené - + performance: Výkon versionBadges: dev: Vývojová verze staging: Testovací verze prod: Produkční verze buildDate: Sestaveno - labels: uiScale: title: Škálování UI - description: >- - Změní velikost uživatelského rozhraní. Rozhraní se bude stále přizpůsobovoat rozlišení vaší obrazovky, toto nastavení pouze mění jeho škálu. + description: Změní velikost uživatelského rozhraní. Rozhraní se bude stále + přizpůsobovat rozlišení vaší obrazovky, toto nastavení pouze + mění jeho škálu. scales: super_small: Velmi malé small: Malé regular: Normální large: Velké huge: Obrovské - scrollWheelSensitivity: - title: Citlivost přibížení - description: >- - Změní citlivost přiblížení (kolečkem myši nebo trackpadem). + title: Citlivost přiblížení + description: Změní citlivost přiblížení (kolečkem myši nebo trackpadem). sensitivity: super_slow: Hodně pomalé slow: Pomalé regular: Normální fast: Rychlé super_fast: Hodně rychlé - language: title: Jazyk - description: >- - Změní jazyk. Všechny překlady jsou vytvářeny komunitou a nemusí být kompletní. - + description: Změní jazyk. Všechny překlady jsou vytvářeny komunitou a nemusí být + kompletní. fullscreen: title: Celá obrazovka - description: >- - Doporučujeme hrát v režimu celé obrazovky pro nejlepší zážitek. Dostupné pouze v plné verzi. - + description: Doporučujeme hrát v režimu celé obrazovky pro nejlepší zážitek. + Dostupné pouze v plné verzi. soundsMuted: title: Ztlumit zvuky - description: >- - Ztlumí všechny zvuky. - + description: Ztlumí všechny zvuky. musicMuted: title: Ztlumit hudbu - description: >- - Ztlumí veškerou hudbu. - + description: Ztlumí veškerou hudbu. theme: title: Motiv - description: >- - Vybere motiv (světlý / tmavý). - + description: Vybere motiv (světlý / tmavý). themes: dark: Tmavý light: Světlý - refreshRate: title: Obnovovací frekvence - description: >- - Pokud máte 144 Hz monitor, změňte si rychlost obnovování obrazu. Toto nastavení může snížit FPS, pokud máte pomalý počítač. - + description: Pokud máte 144 Hz monitor, změňte si rychlost obnovování obrazu. + Toto nastavení může snížit FPS, pokud máte pomalý počítač. alwaysMultiplace: title: Několikanásobné pokládání - description: >- - Pokud bude zapnuté, zůstanou budovy vybrané i po postavení do té doby než je zrušíte. Má to stejný efekt jako držení klávesy SHIFT. - + description: Pokud bude zapnuté, zůstanou budovy vybrané i po postavení do té + doby než je zrušíte. Má to stejný efekt jako držení klávesy + SHIFT. offerHints: title: Tipy & Nápovědy - description: >- - Pokud zapnuté, budou se ve hře zobrazovat tipy a nápovědy. Také schová určité elementy na obrazovce pro jednodušší dostání se do hry. - + description: Pokud zapnuté, budou se ve hře zobrazovat tipy a nápovědy. Také + schová určité elementy na obrazovce pro jednodušší dostání se do + hry. movementSpeed: title: Rychlost kamery description: Mění, jak rychle se kamera posouvá při použití klávesnice. @@ -701,22 +771,21 @@ settings: slow: Pomalá regular: Normální fast: Rychlá - super_fast: Hodně Rychlá - extremely_fast: Extrémně Rychlá + super_fast: Hodně rychlá + extremely_fast: Extrémně rychlá enableTunnelSmartplace: title: Chytré tunely - description: >- - Pokládání tunelů po zapnutí bude samo odstraňovat nepotřebné pásy. - Umožňuje také potahování tunelů a nadbytečné tunely budou odstraněny. + description: Pokládání tunelů po zapnutí bude samo odstraňovat nepotřebné pásy. + Umožňuje také potahování tunelů a nadbytečné tunely budou + odstraněny. vignette: title: Viněta - description: >- - Zapne vinětu, která ztmaví rohy obrazovky, což umožňuje lepší čtení textu. - + description: Zapne vinětu, která ztmaví rohy obrazovky, což umožňuje lepší čtení + textu. autosaveInterval: title: Interval automatického ukládání - description: >- - Určuje jak často se hra automaticky ukládá. Lze ji zde také úplně zakázat. + description: Určuje jak často se hra automaticky ukládá. Lze ji zde také úplně + zakázat. intervals: one_minute: 1 minuta two_minutes: 2 minuty @@ -724,36 +793,79 @@ settings: ten_minutes: 10 minut twenty_minutes: 20 minut disabled: Zrušeno - compactBuildingInfo: title: Kompaktní informace o stavbách - description: >- - Zkrátí informační políčka pro budovy tím, že pouze ukáže jejich koeficient. - V opačném případě zobrazí popis a obrázek. - + description: Zkrátí informační políčka pro budovy tím, že pouze ukáže jejich + koeficient. V opačném případě zobrazí popis a obrázek. disableCutDeleteWarnings: title: Zakázat upozornění o vyjmutí nebo odstranění - description: >- - Deaktivujte varovná dialogová okna vyvolaná při vymutí/mazání více než 100 - entit. - + description: Deaktivujte varovná dialogová okna vyvolaná při vyjmutí/mazání více + než 100 entit. enableColorBlindHelper: title: Režim pro barvoslepé - description: Zapné různé nástroje, které vám umožní hrát hru i pokud jste barvoslepí. + 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: Hlasitost zvuků + description: Nastavte hlasitost zvukových efektů + musicVolume: + title: Hlasitost hudby + description: Nastavte hlasitost hudby + lowQualityMapResources: + 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: Vypnout mřížku + description: Vypnutí mřížky částic může pomoct s výkonem. Toto nastavení + zlepšuje vzhled hry! + clearCursorOnDeleteWhilePlacing: + 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: Nižší kvalita textur (Horší vzhled) + description: Používá nižší kvalitu textur pro zlepšení výkonu. Toto nastavení + zhorší vzhled hry! + displayChunkBorders: + 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: 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: 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: Posouvání myší + description: Umožnuje posouvání po mapě, pokud myší přejedete na okraj + obrazovky. Rychlost žáleží na nastavení rychlosti pohybu. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Klávesové zkratky - hint: >- - Tip: Nezapomeňte používat CTRL, SHIFT a ALT! Díky nim můžete měnit způsob stavění. - + hint: "Tip: Nezapomeňte používat CTRL, SHIFT a ALT! Díky nim můžete měnit způsob + stavění." resetKeybindings: Resetovat nastavení klávesových zkratek - categoryLabels: general: Aplikace ingame: Hra @@ -762,7 +874,6 @@ keybindings: massSelect: Hromadný výběr buildings: Zkratky pro stavbu placementModifiers: Modifikátory umístění - mappings: confirm: Potvrdit back: Zpět @@ -772,38 +883,30 @@ keybindings: mapMoveLeft: Posun doleva mapMoveFaster: Rychlejší posun centerMap: Vycentrovat mapu - mapZoomIn: Přiblížit mapZoomOut: Oddálit createMarker: Vytvořit značku - menuOpenShop: Vylepšení menuOpenStats: Statistiky - toggleHud: Přepnout HUD toggleFPSInfo: Přepnout zobrazení FPS a ladících informací - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Dopravníkový pás + underground_belt: Tunel + miner: Extraktor + cutter: Pila + rotater: Rotor + stacker: Kombinátor + mixer: Mixér na barvy + painter: Barvič + trash: Koš rotateWhilePlacing: Otočit - rotateInverseModifier: >- - Modifikátor: Otočit proti směru hodinových ručiček + rotateInverseModifier: "Modifikátor: Otočit proti směru hodinových ručiček" cycleBuildingVariants: Změnit variantu confirmMassDelete: Potvrdit hromadné smazání cycleBuildings: Změnit budovu - massSelectStart: Držte a táhněte pro vybrání oblasti massSelectSelectMultiple: Vybrat více oblastí massSelectCopy: Zkopírovat oblast - placementDisableAutoOrientation: Zrušit automatickou orientaci placeMultiple: Zůstat ve stavebním módu placeInverse: Přepnout automatickou orientaci pásů @@ -813,35 +916,40 @@ keybindings: lockBeltDirection: Zamknout směr pásu switchDirectionLockSide: Otočit strany zámku plánovače pipette: Kapátko - menuClose: Close Menu - switchLayers: Switch layers - advanced_processor: Color Inverter - energy_generator: Energy Generator - wire: Energy Wire - + menuClose: Zavřít menu + switchLayers: Změnit vrstvy + wire: Kabel + 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: Č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: >- - Tato hra je open source a je vyvíjená Tobiasem Springerem (česky neumí, ale je to fakt frajer :) ).

+ Tato hra je open source a je vyvíjená Tobiasem Springerem + (česky neumí, ale je to fakt frajer :) ).

- Pokud se chceš na hře podílet, podívej se na shapez.io na githubu.

+ Pokud se chceš na hře podílet, podívej se na shapez.io na githubu.

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

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

- Soundtrack udělal Peppsen - Je úžasnej.

- - V neposlední řadě by Tobias (já jen tlumočím) rád poděkoval skvělému kamarádovi Niklasi - Bez hodin strávených - u factoria by tato hra nikdy neexistovala. + Soundtrack udělal Peppsen - Je úžasnej.

+ V neposlední řadě by Tobias (já jen tlumočím) rád poděkoval skvělému kamarádovi Niklasi - Bez hodin strávených u factoria by tato hra nikdy neexistovala. changelog: title: Seznam změn - demo: features: restoringGames: Nahrávání uložených her @@ -849,5 +957,74 @@ demo: oneGameLimit: Omezeno pouze na jednu uloženou hru customizeKeybindings: Změna klávesových zkratek exportingBase: Exportovat celou základnu jako obrázek - settingNotAvailable: Nedostupné v demo verzi. +tips: + - 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 abfe89a6..6b592d27 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -1,114 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io 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. + 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. + discordLinkShort: Official Discord + intro: >- + Shapez.io er et afslapet spil hvor du skal bygge fabrikker for at + automatisere productionen af geometriske figurer. - # This is the text shown above the Discord link - discordLink: Officiel Discord - Snak lidt med mig! + 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. - # 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] + 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! - 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. + 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! - 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] + 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 - - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "." - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider: . decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: k millions: mio billions: mia trillions: bio - - # Shown for infinitely big numbers infinite: uendelig - time: - # Used for formatting past time dates oneSecondAgo: et sekund siden xSecondsAgo: sekunder siden oneMinuteAgo: et minut siden @@ -117,28 +67,20 @@ global: xHoursAgo: timer siden oneDayAgo: en dag siden xDaysAgo: dage siden - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: t m - xMinutes: minutter - keys: tab: TAB control: CTRL alt: ALT escape: ESC - shift: SKIFT + shift: SKIFT/SHIFT space: MELLEMRUM - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demo Version - intro: >- - Køb spillet for at få den fulde oplevelse! - + intro: Køb spillet for at få den fulde oplevelse! mainMenu: play: Spil continue: Fortsæt @@ -150,14 +92,11 @@ mainMenu: discordLink: Officiel Discord Server helpTranslate: Hjælp med at oversætte! madeBy: Lavet af - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Undskyld, men spillet er kendt for at køre langsomt på denne browser! Køb spillet eller download chrome for den fulde oplevelse. - + browserWarning: Undskyld, men spillet er kendt for at køre langsomt på denne + browser! Køb spillet eller download chrome for den fulde oplevelse. savegameLevel: Niveau savegameLevelUnknown: Ukendt Niveau - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -171,110 +110,98 @@ dialogs: viewUpdate: Se Opdatering showUpgrades: Vis Opgraderinger showKeybindings: Vis Keybindings - importSavegameError: title: Import Fejl - text: >- - Importering af gemt spil fejlede: - + text: "Importering af gemt spil fejlede:" importSavegameSuccess: title: Gemt spil Importeret - text: >- - Dit gemte spil blev importet. - + text: Dit gemte spil blev importet. gameLoadFailure: title: Spillet er i stykker - text: >- - Det lykkedes ikke at åbne dit gemte spil: - + 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: - + text: "Det lykkedes ikke at slette dit gemte spil:" restartRequired: title: Genstart er nødvendig - text: >- - Du er nødt til at genstarte spillet for at anvende indstillingerne. - + text: Du er nødt til at genstarte spillet for at anvende indstillingerne. editKeybinding: title: Ændr Keybinding desc: Tryk på knappen du vil bruge, eller escape for at fortryde. - resetKeybindingsConfirmation: title: Nulstil keybindings - desc: Dette vil nulstille alle keybindings til deres standarder. Bekræft venligst. - + desc: Dette vil nulstille alle keybindings til deres standarder. Bekræft + venligst. keybindingsResetOk: title: Keybindings nulstillet desc: Keybindings er nulstillet til deres standarder! - featureRestriction: title: Demoversion - desc: Du prøvede at bruge en funktion () der ikke er tilgængelig i demoen. Overvej at købe spillet for den fulde oplevelse! - + desc: Du prøvede at bruge en funktion () der ikke er tilgængelig i + demoen. Overvej at købe spillet for den fulde oplevelse! oneSavegameLimit: title: Begrænset mængde gemte spil - desc: Du kan kun have et gemt spil ad gangen in demoversionen. Vær sød at slette det nuværende gemte spil eller at købe spillet! - + desc: Du kan kun have et gemt spil ad gangen in demoversionen. Vær sød at slette + det nuværende gemte spil eller at købe spillet! updateSummary: title: Ny opdatering! - desc: >- - Dette har ændret sig siden sidst du spillede: - + desc: "Dette har ændret sig siden sidst du spillede:" upgradesIntroduction: title: Få Opgraderinger - desc: >- - Alle figurer du producerer kan blive brugt til at få opgraderinger - Ødelæg ikke dine gamle fabrikker! - Opgraderingeringsvinduet kan findes i det øverste højre hjørne af skærmen. - + desc: Alle figurer du producerer kan blive brugt til at få opgraderinger - + Ødelæg ikke dine gamle fabrikker! + Opgraderingeringsvinduet kan findes i det øverste højre hjørne af + skærmen. massDeleteConfirm: title: Bekræft sletning - desc: >- - Du er ved at slette mange bygninger ( helt præcist)! Er du sikker på at det er det du vil gøre? - + desc: Du er ved at slette mange bygninger ( helt præcist)! Er du sikker + på at det er det du vil gøre? massCutConfirm: title: Bekræft klip - desc: >- - Du er ved at klippe mange bygninger ( helt præcist)! Er du sikker på at det er det du vil gøre? - + desc: Du er ved at klippe mange bygninger ( helt præcist)! Er du sikker + på at det er det du vil gøre? blueprintsNotUnlocked: title: Ikke tilgængeligt endnu - desc: >- - Gennemfør Niveau 12 for at bruge arbejdstegninger! - + desc: Gennemfør Niveau 12 for at bruge arbejdstegninger! keybindingsIntroduction: title: Brugbare keybindings - desc: >- - Dette spil har mange keybindings, som gør det lettere at bygge store fabrikker. - Her er et par, men husk at tjekke keybindings!

- CTRL + Træk: Vælg et område.
- SHIFT: Hold for at placere flere af en bygning.
- ALT: Vend retningen af placerede transportbånd.
- + desc: "Dette spil har mange keybindings, som gør det lettere at bygge store + fabrikker. Her er et par, men husk at tjekke + keybindings!

CTRL + + Træk: Vælg et område.
SHIFT: + Hold for at placere flere af en bygning.
ALT: Vend retningen af placerede + 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! - exportScreenshotWarning: title: Eksporter skærmbillede - desc: Du bad om at eksportere din fabrik som et skærmbillede. Bemærk at dette kan være rimelig langsomt for en stor base og kan endda lukke dit spil! + desc: Du bad om at eksportere din fabrik som et skærmbillede. Bemærk at dette + kan være rimelig langsomt for en stor base og kan endda lukke dit + spil! massCutInsufficientConfirm: title: Bekræft klip - desc: Du har ikke råd til at sætte dette område ind igen! Er du sikker på at du vil klippe det? - + desc: Du har ikke råd til at sætte dette område ind igen! Er du sikker på at du + vil klippe det? + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Bevæg dig selectBuildings: Marker område @@ -295,8 +222,6 @@ ingame: clearSelection: Ryd Selektion pipette: Pipette switchLayers: Skift Lag - - # Names of the colors, used for the color blind mode colors: red: Rød green: Grøn @@ -307,18 +232,9 @@ ingame: white: Hvid uncolored: Ingen farve black: Sort - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Tryk for at vælge type. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Fart range: Rækkevidde @@ -326,36 +242,21 @@ ingame: oneItemPerSecond: 1 genstand / sekund itemsPerSecond: genstande / s itemsPerSecondDouble: (x2) - tiles: flader - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Niveau completed: Klaret unlockText: er nu tilgængelig! buttonNextLevel: Næste Niveau - - # Notifications on the lower right notifications: newUpgrade: En ny opgradering er tilgængelig! gameSaved: Dit spil er gemt. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Opgraderinger buttonUnlock: Opgrader - - # Gets replaced to e.g. "Tier IX" tier: Trin - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: HØJESTE NIVEAU (Speed x) - - # The "Statistics" window statistics: title: Statistikker dataSources: @@ -364,62 +265,86 @@ ingame: description: Viser mængden af opbevarede figurer i din centrale bygning. produced: title: Produceret - description: Viser alle de figurer hele din fabrik producerer, inklusiv produkter brugt til videre produktion. + description: Viser alle de figurer hele din fabrik producerer, inklusiv + produkter brugt til videre produktion. delivered: title: Afleveret description: Viser figurer som er afleveret til din centrale bygning. noShapesProduced: Ingen figurer er blevet produceret indtil videre. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Spilletid - buildingsPlaced: Bygninger beltsPlaced: Bælter - - buttons: - continue: Fortsæt - settings: Indstillinger - menu: Hovedmenu - - # Bottom left tutorial hints tutorialHints: title: Har du brug for hjælp? showHint: Vis hint hideHint: Luk - - # When placing a blueprint blueprintPlacer: cost: Pris - - # Map markers waypoints: waypoints: Markører hub: HUB - description: Venstreklik en markør for at hoppe til den, højreklik for at slette den.

Tryk for at lave en markør på det nuværende sted, eller højreklik for at lave en markør på det valgte sted. + description: Venstreklik en markør for at hoppe til den, højreklik for at slette + den.

Tryk for at lave en markør på det nuværende + sted, eller højreklik for at lave en markør på det + valgte sted. creationSuccessNotification: Markør er sat. - - # Shape viewer shapeViewer: title: Lag empty: Tom copyKey: Kopier Kode - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Sæt en udvinder på toppen af encirkelfigur for at begynde produktion af den! - 1_2_conveyor: >- - Forbind udvinderen til din hub med et transportbælte!

Tip: Tryk og træk bæltet med din mus! - - 1_3_expand: >- - Dette er IKKE et idle game! Byg flere udvindere og bælter for at færdiggøre målet hurtigere.

Tip: Hold SKIFT for at sætte flere udvindere, og tryk R for at rotere dem. - -# All shop upgrades + 1_1_extractor: Sæt en udvinder på toppen af + encirkelfigur for at begynde produktion af den! + 1_2_conveyor: "Forbind udvinderen til din hub med et + transportbælte!

Tip: Tryk og + træk bæltet med din mus!" + 1_3_expand: "Dette er IKKE et idle game! Byg flere udvindere og + bælter for at færdiggøre målet hurtigere.

Tip: Hold + SKIFT for at sætte flere udvindere, og tryk + R for at rotere dem." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Bælter, Fordelere & Tuneller @@ -433,243 +358,385 @@ shopUpgrades: painting: name: Blanding & Maling description: Fart x → x - -# Buildings and their name / description buildings: hub: deliver: Aflever toUnlock: for at få adgang til levelShortcut: NIV - + endOfDemo: End of Demo belt: default: - name: &belt Transportbælte + name: Transportbælte description: Transporterer figurer, hold og træk for at sætte flere. - - # Internal name for the Extractor miner: default: - name: &miner Udvinder + name: Udvinder description: Placer over en figur eller farve for at udvinde den. - chainable: name: Udvinder (Kæde) description: Placer over en figur eller farve for at udvinde den. Kan kædes. - - # Internal name for the Tunnel underground_belt: default: - name: &underground_belt Tunnel + name: Tunnel description: Laver tunneller under bygninger og bælter. - tier2: name: Tunnel Trin II description: Laver tunneller under bygninger og bælter. - - # Internal name for the Balancer - splitter: - default: - name: &splitter Fordeler - description: Flere funktioner - Fordeler alle modtagne varer jævnt. - - compact: - name: Sammenlægger (kompakt) - description: Lægger to bælter sammen til et. - - compact-inverse: - name: Sammenlægger (kompakt) - description: Lægger to bælter sammen til et. - cutter: default: - name: &cutter Klipper - description: Klipper figurer fra top til bund og udsender begge halvdele. Hvis du kun bruger den ene halvdel så husk at ødelægge den anden del, ellers går maskinen i stå! + name: Klipper + description: Klipper figurer fra top til bund og udsender begge halvdele. + Hvis du kun bruger den ene halvdel så husk at ødelægge + den anden del, ellers går maskinen i stå! quad: name: Klipper (firdeler) - description: Klipper figurer om til fire dele. Hvis du kun bruger nogle af dem så husk at ødelægge de andre dele, ellers går maskinen i stå! - + description: Klipper figurer om til fire dele. Hvis du kun bruger nogle + af dem så husk at ødelægge de andre dele, ellers går maskinen i + stå! rotater: default: - name: &rotater Drejer + name: Drejer description: Drejer figurer 90 grader med uret. ccw: name: Drejer (mod uret) description: Drejer figurer 90 grader mod uret. - fl: - name: Drejer (180) - description: Drejer figurer 180 grader. - + rotate180: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: - name: &stacker Stabler - description: Stabler begge figurer. Hvis de ikke kan sammensmeltes, så sættes den højre figur oven på den venstre. - + name: Stabler + description: Stabler begge figurer. Hvis de ikke kan sammensmeltes, så sættes + den højre figur oven på den venstre. mixer: default: - name: &mixer Farveblander + name: Farveblander description: Blander to farver med additiv blanding. - painter: default: - name: &painter Maler - description: &painter_desc Farver hele figuren fra venstre side med farven fra toppen. - + name: Maler + description: Farver hele figuren fra venstre side med farven fra toppen. mirrored: - name: *painter - description: *painter_desc - + name: Maler + description: Farver hele figuren fra venstre side med farven fra toppen. double: name: Maler (Dobbelt) 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: &trash Skraldespand + name: Skraldespand description: Tillader input fra alle sider og ødelægger dem. For evigt. - - storage: - name: Opbevaring - description: Opbevarer ekstra figurer, til en given kapicitet. Kan bruges til at håndtere overproduktion. - - energy_generator: - deliver: Aflever - toGenerateEnergy: For energi - - default: - name: &energy_generator Energigenerator - description: Genererer energi ved at optage figurer. Hver energigenerator kræver forskellige figurer. wire: default: name: Energiledning description: Lader dig transportere energi. - advanced_processor: + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + balancer: default: - name: Farveomvender - description: Tager imod en farve, og giver den modsatte. - wire_crossings: - default: - name: Ledningsspalter - description: Spalter en energiledning i to. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Ledningssammenlægger - description: Lægger to energiledninger sammen til en. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 med uret. - + desc: Drejeren er nu tilgængelig! Den drejer figurer 90 grader + med uret. reward_painter: title: Maling - desc: >- - Maleren er nu tilgængelig - Få noget farve med udvinderen (som du også gør med figurer) og kombiner det med en farve i maleren for at farve dem!

PS: Hvis du er farveblind, så er der en farveblindstilstand i indstillingerne! - + desc: "Maleren er nu tilgængelig - Få noget farve med + udvinderen (som du også gør med figurer) og kombiner det med en + farve i maleren for at farve dem!

PS: Hvis du er farveblind, + så er der en farveblindstilstand i + indstillingerne!" reward_mixer: title: 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 stables. Hvis de kan sættes ved siden af hinanden, sammensmeltes de. Hvis ikke, bliver det højre input stablet ovenpå det venstre! - + desc: Du kan du stable figurer med stableren! Begge inputs + stables. Hvis de kan sættes ved siden af hinanden, + sammensmeltes de. Hvis ikke, bliver det højre input + 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 under bælter og bygninger! - + desc: Tunnellen er nu tilgængelig - Du kan nu lave tuneller + under bælter og bygninger! reward_rotater_ccw: title: Rotation mod uret - desc: Du har fået adgang til en variant af drejeren - Den lader dig dreje ting mod uret! For at bygge den skal du vælge drejeren og trykke 'T'! - + desc: Du har fået adgang til en variant af drejeren - Den lader + dig dreje ting mod uret! For at bygge den skal du vælge drejeren og + trykke 'T'! reward_miner_chainable: title: 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 en større rækkevidde, og du kan også bruge begge typer tunneller på den samme strækning! - - reward_splitter_compact: - title: Kompakt Fordeler - desc: >- - Du har fået adgang til en kompakt variant af fordeleren - Den tager to inputs og lægger dem sammen til en! - + desc: Du har fået adgang til en variant af tunnellen - Den har + en større rækkevidde, og du kan også bruge begge + typer tunneller på den samme strækning! reward_cutter_quad: title: Quad Klipining - desc: Du har fået adgang til en variant af klipperen - Den lader dig klippe figurer i fire dele i stedet for kun to! - + desc: Du har fået adgang til en variant af klipperen - Den + lader dig klippe figurer i fire dele i stedet for + kun to! reward_painter_double: title: Dobbelt Maling - desc: Du har fået adgang til en variant af maleren - Den virker som en normal maler, men maler to figurer samtidig og bruger kun en farve i stedet for to. - - reward_painter_quad: - title: Quad Maling - desc: Du har fået adgang til en variant af maleren - Den lader dig male alle dele af en figur hver for sig! - + desc: Du har fået adgang til en variant af maleren - Den virker + som en normal maler, men maler to figurer samtidig + og bruger kun en farve i stedet for to. reward_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 område (Hold CTRL, og træk med musen), og tryk 'C' for at kopiere det.

At sætte det ind er ikke gratis. Du skal producere arbejdstegning figurer for at have råd til det! (Dem du lige har leveret). - - # Special reward, which is shown when there is no reward actually + desc: Du kan nu kopiere og indsætte dele af din fabrik! Vælg et + område (Hold CTRL, og træk med musen), og tryk 'C' for at kopiere + det.

At sætte det ind er ikke gratis. Du + skal producere arbejdstegning figurer for at have + råd til det! (Dem du lige har leveret). no_reward: title: Næste niveau - desc: >- - Dette niveau gav dig ingen belønninger, men det vil det næste!

PS: Du må hellere lade være med at ødelægge din fabrik - Du får brug for alle de figurer senere igen for at få opgraderinger! - + desc: "Dette niveau gav dig ingen belønninger, men det vil det næste!

+ PS: Du må hellere lade være med at ødelægge din fabrik - Du får brug + for alle de figurer senere igen for at få + opgraderinger!" no_reward_freeplay: title: Næste niveau - desc: >- - Tillykke! Forresten er mere indhold planlagt for den betalte version! - + desc: Tillykke! Forresten er mere indhold planlagt for den betalte version! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Indstillinger categories: general: Generelt userInterface: Brugerflade advanced: Avanceret - + performance: Performance versionBadges: dev: Udvikling staging: Iscenesættelse prod: Produktion buildDate: Bygget - labels: uiScale: title: Grænseflade størrelse - description: >- - Ændrer størrelsen på brugerfladen. Den vil stadig skalere baseret på opløsningen af din skærm, men denne indstilling bestemmer hvor meget den skalerer. + description: Ændrer størrelsen på brugerfladen. Den vil stadig skalere baseret + på opløsningen af din skærm, men denne indstilling bestemmer + hvor meget den skalerer. scales: super_small: Meget lille small: Lille regular: Normal large: Store huge: Kæmpe - autosaveInterval: title: Autogem Interval - description: >- - Ændrer hvor ofte spillet gemmer automatisk. Du kan også slå det helt fra her. - + description: Ændrer hvor ofte spillet gemmer automatisk. Du kan også slå det + helt fra her. intervals: one_minute: 1 Minut two_minutes: 2 Minutter @@ -677,22 +744,19 @@ settings: ten_minutes: 10 Minutter twenty_minutes: 20 Minutter disabled: Slået fra - scrollWheelSensitivity: title: Zoom følsomhed - description: >- - Ændrer hvor følsomt zoomet er (Enten musehjulet eller trackpad). + description: Ændrer hvor følsomt zoomet er (Enten musehjulet eller trackpad). sensitivity: super_slow: Meget langsom slow: Langsom regular: Normal fast: Hurtig super_fast: Meget hurtig - movementSpeed: title: Bevægelseshastighed - description: >- - Ændrer hvor hurtigt du kan bevæge dit overblik når du bruger tastaturet. + description: Ændrer hvor hurtigt du kan bevæge dit overblik når du bruger + tastaturet. speeds: super_slow: Meget langsom slow: Langsom @@ -700,87 +764,124 @@ settings: fast: Hurtig super_fast: Meget hurtig extremely_fast: Ekstremt hurtig - language: title: Sprog - description: >- - Ændrer sproget. All oversættelser er lavet af fælleskabet og kan være ufuldstændige! - + description: Ændrer sproget. All oversættelser er lavet af fælleskabet og kan + være ufuldstændige! enableColorBlindHelper: title: Farveblindstilstand - description: >- - Aktiverer forskellige redskaber der lader dig spille, selv hvis du er farveblind. - + description: Aktiverer forskellige redskaber der lader dig spille, selv hvis du + er farveblind. fullscreen: title: Fuld skærm - description: >- - Det er foreslået at spille i fuld skærm for den bedste oplevelse. Kun tilgængelig i den betalte version. - + description: Det er foreslået at spille i fuld skærm for den bedste oplevelse. + Kun tilgængelig i den betalte version. soundsMuted: title: Slå lydeffekterne fra - description: >- - Aktiver for at slå alle lydeffekter fra. - + description: Aktiver for at slå alle lydeffekter fra. musicMuted: title: Slå musik fra - description: >- - Aktiver for at slå al musik fra. - + description: Aktiver for at slå al musik fra. theme: title: Tema - description: >- - Vælg tema (lys / mørk). + description: Vælg tema (lys / mørk). themes: dark: Mørk light: Lys - refreshRate: title: Simulationsmål - description: >- - Hvis du har en 144hz skærm, så ændr opdateringshastigheden her så spillet vil simulere den højere opdateringshastighed korrekt. Dette kan faktisk sænke din FPS hvis din computer er for langsom. - + description: Hvis du har en 144hz skærm, så ændr opdateringshastigheden her så + spillet vil simulere den højere opdateringshastighed korrekt. + Dette kan faktisk sænke din FPS hvis din computer er for + langsom. alwaysMultiplace: title: Multiplacér - description: >- - Aktiver for at alle bygninger fortsætter med at være valgt efter placering, indtil du vælger dem fra. Dette svarer til altid at holde SKIFT nede. - + description: Aktiver for at alle bygninger fortsætter med at være valgt efter + placering, indtil du vælger dem fra. Dette svarer til altid at + holde SKIFT nede. offerHints: title: Hints & Vejledning - description: >- - Om spillet skal tilbyde hints og vejledning imens du spiller. Skjuler også visse dele af brugerfladen indtil et givent niveau for at gøre det nemmere at lære spillet at kende. - + description: Om spillet skal tilbyde hints og vejledning imens du spiller. + Skjuler også visse dele af brugerfladen indtil et givent niveau + for at gøre det nemmere at lære spillet at kende. enableTunnelSmartplace: title: Smarte Tunneller - description: >- - Aktiver for at placering af tunneller automatisk fjerner unødige bælter. Dette gør igså at du kan trække tunneller så overskydende tunneller fjernes. - + description: Aktiver for at placering af tunneller automatisk fjerner unødige + bælter. Dette gør igså at du kan trække tunneller så + overskydende tunneller fjernes. vignette: title: Vignette - description: >- - Aktiverer vignette hvilket mørkner kanterne af skærmen og gør teksten nemmere at læse. - + description: Aktiverer vignette hvilket mørkner kanterne af skærmen og gør + teksten nemmere at læse. rotationByBuilding: title: Rotation baseret på bygningstype - description: >- - Hver bygningstype husker den rotation du sidst satte den til. Dette kan være komfortabelt hvis du ofte skifter mellem at placere forskellige bygninger. - + description: Hver bygningstype husker den rotation du sidst satte den til. Dette + kan være komfortabelt hvis du ofte skifter mellem at placere + forskellige bygninger. compactBuildingInfo: title: Kompakt Bygningsinfo - description: >- - Forkorter infobokse til bygninger ved kun at vise deres forhold. Ellers er en beskrivelse og et billede også vist. - + description: Forkorter infobokse til bygninger ved kun at vise deres forhold. + Ellers er en beskrivelse og et billede også vist. disableCutDeleteWarnings: title: Slå klip/slet advarsler fra - description: >- - Slå advarselsboksene, der dukker op når mere end 100 ting slettes, fra. - + description: Slå advarselsboksene, der dukker op når mere end 100 ting slettes, + fra. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Keybindings - hint: >- - Tip: Husk at bruge CTRL, SKIFT og ALT! De byder på forskellige placeringsmuligheder. - + hint: "Tip: Husk at bruge CTRL, SKIFT og ALT! De byder på forskellige + placeringsmuligheder." resetKeybindings: Nulstil Keybindings - categoryLabels: general: Applikation ingame: Spil @@ -789,7 +890,6 @@ keybindings: massSelect: Massemarkering buildings: Bygningsgenveje placementModifiers: Placeringsmodifikationer - mappings: confirm: Bekræft back: Tilbage @@ -799,58 +899,63 @@ keybindings: mapMoveLeft: Bevæg dig til venstre mapMoveFaster: Bevæg dig hurtigere centerMap: Centrer kortet - mapZoomIn: Zoom ind mapZoomOut: Zoom ud createMarker: Lav Markør - menuOpenShop: Opgraderinger menuOpenStats: Statistikker - toggleHud: Slå HUD til/fra toggleFPSInfo: Slå FPS og Debug Info til/fra switchLayers: Skift lag exportScreenshot: Eksporter hele basen som et billede - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - + belt: Transportbælte + underground_belt: Tunnel + miner: Udvinder + cutter: Klipper + rotater: Drejer + stacker: Stabler + mixer: Farveblander + painter: Maler + trash: Skraldespand pipette: Pipette rotateWhilePlacing: Roter - rotateInverseModifier: >- - Modifier: Roter mod uret i stedet + rotateInverseModifier: "Modifier: Roter mod uret i stedet" cycleBuildingVariants: Gennemgå Varianter confirmMassDelete: Slet område pasteLastBlueprint: Sæt sidste arbejdstegning ind cycleBuildings: Gennemgå bygninger lockBeltDirection: Slå bælteplanlægger til - switchDirectionLockSide: >- - Planner: Skift side - + switchDirectionLockSide: "Planner: Skift side" massSelectStart: Hold og træk for at starte massSelectSelectMultiple: Vælg flere områder massSelectCopy: Kopier område massSelectCut: Klip område - placementDisableAutoOrientation: Slå automatisk rotation fra placeMultiple: Bliv i placeringstilstand placeInverse: Spejlvend automatisk bælteorientering menuClose: Luk Menu - advanced_processor: Farveomvender wire: Energiledning - + 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: Om dette spil body: >- - Dette spil er open source og er udviklet af Tobias Springer (det er mig).

+ Dette spil er open source og er udviklet af Tobias Springer + (det er mig).

Hvis du vil kontribuere, tjek shapez.io på github.

@@ -859,10 +964,8 @@ about: Lydsporet er lavet af Peppsen - Han er fantastisk.

Endelig, tusind tak til min bedste ven Niklas - Uden vi havde spillet factorio sammen ville dette spil aldrig have eksisteret. - changelog: title: Changelog - demo: features: restoringGames: Genopretter gem @@ -870,5 +973,65 @@ demo: oneGameLimit: Afgrænset til et gem customizeKeybindings: Tilpasser Keybindings exportingBase: Eksportere hele basen som et billede - settingNotAvailable: Ikke tilgængelig i demoen. +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. diff --git a/translations/base-de.yaml b/translations/base-de.yaml index fee9615a..346f5353 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -1,114 +1,58 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: In shapez.io nutzt du die vorhandenen Ressourcen, um mit deinen Maschinen durch Kombination immer komplexere Formen zu erschaffen. + shortText: In shapez.io nutzt du die vorhandenen Ressourcen, um mit deinen + Maschinen durch Kombination immer komplexere Formen zu erschaffen. + discordLinkShort: Offizieller Discord + intro: >- + Du magst Automatisierungsspiele? Dann bist du hier genau richtig! - # This is the text shown above the Discord link - discordLink: Offizieller Discord - Hier kannst du mit mir schreiben! + shapez.io ist ein entspanntes Spiel, in dem du Fabriken zur + automatisierten Produktion von geometrischen Formen bauen musst. - # 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] - - 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] + 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 - - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "." - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider: . decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: k millions: M billions: G trillions: T - - # Shown for infinitely big numbers infinite: ∞ - time: - # Used for formatting past time dates oneSecondAgo: vor einer Sekunde xSecondsAgo: vor Sekunden oneMinuteAgo: vor einer Minute @@ -117,14 +61,10 @@ global: xHoursAgo: vor Stunden oneDayAgo: vor einem Tag xDaysAgo: vor Tagen - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: Minuten - keys: tab: TAB control: STRG @@ -132,32 +72,26 @@ global: escape: ESC shift: UMSCH space: LEER - demoBanners: - # This is the "advertisement" shown in the main menu and other various places - 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 - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Sorry, aber das Spiel wird in deinem Browser langsam laufen! Kaufe die Standalone-Version oder verwende Chrome für die beste Erfahrung! - + browserWarning: Sorry, aber das Spiel wird in deinem Browser langsamer laufen! + Kaufe die Vollversion oder verwende Google Chrome für die beste + Erfahrung! savegameLevel: Level savegameLevelUnknown: Unbekanntes Level - + savegameUnnamed: Unbenannt dialogs: buttons: ok: OK @@ -166,116 +100,104 @@ 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 - text: >- - Du musst das Spiel neu starten, um die Einstellungen anzuwenden. - + 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 du dir sicher? - + desc: Dies wird alle deine Tastenbelegungen auf den Standard zurücksetzen. Bist + du dir sicher? keybindingsResetOk: title: Tastenbelegung zurückgesetzt 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: - + 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 - Zerstöre deine alten Fabriken nicht! - Den Upgrade-Tab findest du oben rechts im Bildschirm. - + 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 sicher? - + 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 dir sicher? - + 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 Ausschneiden möchtest? - + 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 - desc: >- - Blaupausen werden erst in Level 12 freigeschaltet! - + desc: Blaupausen werden erst in Level 12 freigeschaltet! keybindingsIntroduction: title: Nützliche Hotkeys desc: >- - Dieses Spiel hat viele Hotkeys, die den Bau von Fabriken vereinfachen und beschleunigen. - Hier sind ein paar Beispiele, aber prüfe am besten die Tastenbelegung-Einstellungen!

- STRG + Ziehen: Wähle Areal aus.
+ Dieses Spiel hat viele Hotkeys, die den Bau von Fabriken + vereinfachen und beschleunigen. Hier sind ein paar Beispiele, aber + prüfe am besten die + Tastenbelegung-Einstellungen!

+ STRG + Ziehen: Wähle Bereich aus.
UMSCH: Halten, um mehrere Gebäude zu platzieren.
- ALT: Invertiere die Platzierungsrichtung der Förderbänder.
- + ALT: Invertiere die Platzierungsrichtung der Fließbä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 unendlich viele Marker zu erstellen! - + 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! - + 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! + renameSavegame: + title: Speicherstand umbenennen + desc: Hier kannst du deinen Speicherstand umbenennen. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Bewegen selectBuildings: Areal markieren @@ -296,8 +218,6 @@ ingame: clearSelection: Auswahl aufheben pipette: Pipette switchLayers: Ebenen wechseln - - # Names of the colors, used for the color blind mode colors: red: Rot green: Grün @@ -307,19 +227,10 @@ ingame: cyan: Cyan white: Weiß black: Schwarz - uncolored: Farblos - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) + uncolored: Grau buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. - cycleBuildingVariants: Wechsle Variante - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Taste: - + cycleBuildingVariants: Drücke zum Wechseln + hotkeyLabel: "Taste: " infoTexts: speed: Geschw. range: Reichweite @@ -327,103 +238,111 @@ ingame: oneItemPerSecond: 1 Item / s itemsPerSecond: Items / s itemsPerSecondDouble: (x2) - tiles: Felder - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Level completed: Abgeschlossen unlockText: freigeschaltet! buttonNextLevel: Nächstes Level - - # Notifications on the lower right notifications: newUpgrade: Ein neues Upgrade ist verfügbar! gameSaved: Dein Spiel wurde gespeichert. - - # The "Upgrades" window + freeplayLevelComplete: Level abgeschlossen! shop: title: Upgrades buttonUnlock: Upgrade - - # Gets replaced to e.g. "Tier IX" tier: Stufe - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAXIMALE STUFE (Geschw. x) - - # The "Statistics" window statistics: title: Statistiken 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. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + title: Geliefert + description: An den Hub gelieferte Formen. + noShapesProduced: Es werden noch keine Formen produziert oder geliefert. + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Spielzeit - buildingsPlaced: Gebäude - beltsPlaced: Förderbänder - - buttons: - continue: Weiter - settings: Einstellungen - menu: Zurück zum Menü - - # Bottom left tutorial hints + beltsPlaced: Fließbänder tutorialHints: title: Brauchst du Hilfe? showHint: Hinweis hideHint: Schließen - - # When placing a blueprint blueprintPlacer: cost: Kosten - - # Map markers 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 deinem Blickwinkel, oder rechtsklicke, um einen Marker auf der ausgewählten Position zu erschaffen. + description: Linksklick auf einen Marker, um dort hinzugelangen. Rechtsklick, um + ihn zu löschen.

Drücke , um einen Marker aus + deinem Blickwinkel, oder rechtsklicke, um einen + Marker auf der ausgewählten Position zu erschaffen. creationSuccessNotification: Marker wurde erstellt. - - # Shape viewer shapeViewer: title: Ebenen empty: Leer copyKey: Schlüssel kopieren - - # Interactive tutorial 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 und schließe ihn am Hub an!

Tipp: Drücke und ziehe das Förderband 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. - -# All shop upgrades + 1_1_extractor: Platziere einen Extrahierer auf der + Kreisform, um sie zu extrahieren! + 1_2_conveyor: "Verbinde den Extrahierer mit einem Fließband und + schließe ihn am Hub an!

Tipp: Drücke und + ziehe das Fließband mit der Maus!" + 1_3_expand: "Dies ist KEIN Idle-Game! Baue mehr Extrahierer und + Fließbä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: Ein Extrahierer + n_miners: Extrahierer + limited_items: Begrenzt auf + watermark: + title: Demo-Version + desc: Klicke hier, um die Vorteile der Vollversion zu sehen! + get_on_steam: Zur Vollversion + standaloneAdvantages: + title: Vorteile der Vollversion + no_thanks: Nein, danke! + points: + levels: + title: 12 Neue Level + desc: Für insgesamt 26 Level! + buildings: + title: 18 Neue Gebäude + desc: Automatisiere deine Fabrik! + savegames: + title: ∞ Speicherstände + desc: So viele dein Herz begehrt! + upgrades: + title: 20 Upgrade-Stufen + desc: Diese Demo hat nur 5! + markers: + title: ∞ Marker + desc: Verliere nie den Überblick! + wires: + title: Wires-Ebene + desc: Eine ganz neue Dimension! + darkmode: + title: Dark-Mode + desc: Werde nicht mehr geblendet! + support: + title: Unterstütze Mich + desc: Ich entwickle in meiner Freizeit! shopUpgrades: belt: - name: Förderbänder, Verteiler & Tunnel + name: Fließbänder, Verteiler & Tunnel description: Geschw. x → x miner: name: Extrahierer @@ -434,244 +353,410 @@ shopUpgrades: painting: name: Mischer & Färber description: Geschw. x → x - -# Buildings and their name / description buildings: hub: deliver: Liefere - toUnlock: >- - Für folgende Belohnung: + toUnlock: "und schalte frei:" levelShortcut: LVL - + endOfDemo: Ende der Demo belt: default: - name: &belt Förderband + name: Fließband description: Transportiert Items. Halte und ziehe, um mehrere zu platzieren. - - # Internal name for the Extractor miner: default: - name: &miner Extrahierer + name: Extrahierer description: Platziere ihn auf einer Form oder Farbe, um sie zu extrahieren. - chainable: name: Extrahierer (Kette) - description: Platziere ihn auf einer Form oder Farbe, um sie zu extrahieren. Kann verkettet werden. - - # Internal name for the Tunnel + description: Platziere ihn auf einer Form oder Farbe, um sie zu extrahieren. + Kann verkettet werden. underground_belt: default: - name: &underground_belt Tunnel - description: Erlaubt dir, Formen und Farbe unter Gebäuden und Förderbändern durchzuleiten. - + name: Tunnel + description: Erlaubt dir, Formen und Farbe unter Gebäuden und Fließbändern + durchzuleiten. tier2: name: Tunnel Stufe II - description: Erlaubt dir, Formen und Farbe unter Gebäuden und Förderbändern durchzuleiten. Höhere Reichweite. - - # Internal name for the Balancer - splitter: + description: Erlaubt dir, Formen und Farbe unter Gebäuden und Fließbändern + durchzuleiten. Höhere Reichweite. + balancer: default: - name: &splitter Verteiler - description: Multifunktional - Verteilt gleichmäßig von den Eingängen auf die Ausgänge. - - compact: - name: Kombinierer (Kompakt) - description: Vereint zwei Eingänge zu einem Ausgang. - - compact-inverse: - name: Kombinierer (Kompakt) - description: Vereint zwei Eingänge zu einem Ausgang. - + name: Verteiler + description: Multifunktional - Verteilt alle Eingänge gleichmäßig auf die + Ausgänge. + merger: + name: Kombinierer (kompakt) + description: Kombiniert zwei Eingänge gleichmäßig zu einem Ausgang. + merger-inverse: + name: Kombinierer (kompakt) + description: Kombiniert zwei Eingänge gleichmäßig zu einem Ausgang. + splitter: + name: Aufteiler (kompakt) + description: Teilt einen Eingang gleichmäßig in zwei Ausgänge auf. + splitter-inverse: + name: Aufteiler (kompakt) + description: Teilt einen Eingang gleichmäßig in zwei Ausgänge auf. cutter: default: - name: &cutter Schneider - description: Zerschneidet Formen von oben nach unten. Benutze oder zerstöre beide Hälften, sonst verstopft die Maschine! + 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) - description: Zerschneidet Formen in vier Teile. Benutze oder zerstöre alle Viertel, sonst verstopft die Maschine! - + name: Schneider (vierfach) + description: Zerschneidet Formen in vier Teile. Benutze oder zerstöre + alle Viertel, sonst verstopft die Maschine! rotater: default: - name: &rotater 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. - fl: + rotate180: name: Rotierer (180°) - description: Rotiert die Formen um 180 Grad. - + description: Rotiert formen um 180 Grad. stacker: default: - name: &stacker Stapler - description: Stapelt beide Formen. Wenn beide nicht vereint werden können, wird die rechte Form auf die linke Form gestapelt. - + name: Stapler + description: Stapelt beide Formen. Wenn beide nicht vereint werden können, wird + die rechte Form auf die linke Form gestapelt. mixer: default: - name: &mixer Farbmischer + name: Farbmischer description: Mischt zwei Farben auf Basis der additiven Farbmischung. - painter: default: - name: &painter Färber - description: &painter_desc Färbt die ganze Form aus dem linken Eingang mit der Farbe aus dem oberen Eingang. - + name: Färber + description: Färbt die ganze Form aus dem linken Eingang mit der Farbe aus dem + oberen Eingang. mirrored: - name: *painter - description: *painter_desc - + name: Färber + description: Färbt die ganze Form aus dem linken Eingang mit der Farbe aus dem + oberen Eingang. double: - name: Färber (2-fach) - description: Färbt beide Formen aus dem linken Eingang mit der Farbe aus dem oberen Eingang. - + 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 (Form, Farbe + oder "1") auf der Wires-Ebene werden angemalt! trash: default: - name: &trash Mülleimer - description: Akzeptiert Formen und Farben aus jeder Richtung und zerstört sie. Für immer ... - - storage: - name: Lager - description: Lagert Items bis zu einer gegebenen Kapazität und verwaltet den Überlauf. - + name: Mülleimer + description: Akzeptiert Formen und Farben aus jeder Richtung und zerstört sie. + Für immer ... + storage: + default: + 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: Stromkabel - description: Erlaubt dir Strom zu transportieren. - advanced_processor: + 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: Farbinvertierer - description: Invertiert die Farbe. Geht auch bei Formen. - energy_generator: - deliver: Liefere - toGenerateEnergy: für + name: Kabelkreuzung + description: Erschafft eine isolierte Kreuzung zweier Kabel. + constant_signal: default: - name: Stromgenerator - description: Erzeugt Strom, indem er Formen verbraucht. - wire_crossings: + name: Signalgeber + description: Sendet ein konstantes Signal. Du wählst zwischen Formen, Farben und + Wahrheitswerten (1 oder 0). + lever: default: - name: Kabelverteiler - description: Teilt ein Stromkabel in zwei auf. - merger: - name: Kabelverbinder - description: Verbindet zwei Stromkabel zu einem. - + 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: UND-Gatter + description: Gibt eine "1" aus, wenn beide Eingänge wahr (Form, Farbe oder "1") + sind. + not: + name: NICHT-Gatter + description: Gibt eine "1" aus, wenn beide Eingänge nicht wahr (kein Signal oder + "0") sind. + xor: + name: XODER-Gatter + description: Gibt eine "1" aus, wenn genau einer der Eingänge wahr (Form, Farbe + oder "1") ist. + or: + name: ODER-Gatter + description: Gibt eine "1" aus, wenn mindestens einer der Eingänge wahr (Form, + Farbe oder "1") ist. + transistor: + default: + name: Transistor + description: Lässt den unteren Eingang passieren, wenn der seitliche Eingang + wahr (Form, Farbe oder "1") ist. + mirrored: + name: Transistor + description: Lässt den unteren Eingang passieren, wenn der seitliche Eingang + wahr (Form, Farbe oder "1") ist. + filter: + default: + name: Itemfilter + description: Lässt nur die Items durch, die dem eingespeisten Signal entsprechen + und sortiert die restlichen aus. Mit Wahrheitswerten + konfiguriert fungiert er als Schranke. + display: + default: + name: Anzeige + description: Verbinde ein Signal, um es auf der Anzeige darzustellen. Es kann + eine Form, Farbe oder ein Wahrheitswert sein. + reader: + default: + name: Fließbandkontrolle + description: Misst den gemittelten Durchsatz des Fließbandes. Gibt zuätzlich den + zuletzt passierten Gegenstand auf der Wires-Ebene aus (sobald + freigeschaltet). + analyzer: + default: + name: Formanalyse + description: Analysiert den oberen rechten Quadranten der untersten Schicht + einer Form und gibt sowohl Form als auch Farbe aus. + comparator: + default: + name: Vergleich + description: Gibt eine "1" zurück, wenn beide Signale genau gleich sind. Kann + Formen, Farben und Wahrheitswerte vergleichen. + virtual_processor: + default: + name: Virtueller Schneider + description: Schneidet die Form virtuell in zwei Hälften. + rotater: + name: Virtueller Rotierer + description: Dreht die Form virtuell im Uhrzeigersinn. + unstacker: + name: Virtueller Entstapler + description: Extrahiert virtuell die oberste Ebene nach rechts und die + restlichen Ebenen nach links. + stacker: + name: Virtueller Stapler + description: Stapelt virtuell die rechte Form auf die linke. + painter: + 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-Produzent + description: Nur im Sandkastenmodus verfügbar. Gibt das Signal aus der + Wires-Ebene als Item aus. storyRewards: - # Those are the rewards gained from completing the store 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 Uhrzeigersinn um 90 Grad. - + desc: Der Rotierer wurde freigeschaltet! Er rotiert Formen im + Uhrzeigersinn um 90 Grad. reward_painter: title: Färben - desc: >- - Der Färber wurde freigeschaltet. Extrahiere ein paar Farben (genauso wie bei Formen) und färbe damit eine Form im Färber.

PS: Falls du Farbenblind bist, gibt es einen Modus für Farbenblinde in den Einstellungen! - + desc: "Der Färber wurde freigeschaltet! Extrahiere ein paar + Farben (genauso wie bei Formen) und lasse damit eine Form im Färber + bemalen.

PS: Falls du farbenblind bist, gibt es einen + Modus für Farbenblinde in den Einstellungen!" reward_mixer: title: Farben mischen - desc: Der Farbmischer wurde freigeschaltet! Kombiniere mit diesem Gebäude zwei Farben getreu der additiven Farbmischung. - + desc: Der Farbmischer wurde freigeschaltet! Kombiniere mit + diesem Gebäude zwei Farben getreu der additiven + Farbmischung. reward_stacker: title: Stapler - desc: Mit dem Stapler kannst du nun Formen kombinieren! Passen 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!

- + desc: Mit dem Stapler kannst du nun Formen kombinieren! Passen + sie nebeneinander, werden sie verschmolzen. + Anderenfalls wird die rechte auf die linke Form + gestapelt. + reward_balancer: + title: Verteiler + desc: Der multifunktionale Verteiler wurde freigeschaltet! Er kann + benutzt werden, um größere Fabriken zu bauen, indem Fließbänder aufgeteilt oder zusammengelegt werden! reward_tunnel: title: Tunnel - desc: Der Tunnel wurde freigeschaltet! Du kannst Items nun unter Gebäuden oder Förderbändern hindurchleiten. - + desc: Der Tunnel wurde freigeschaltet! Du kannst Items nun + unter Gebäuden oder Fließbändern hindurchleiten. reward_rotater_ccw: title: Gegen UZS Rotieren - desc: Du hast eine zweite Variante des Rotierers freigeschaltet! Damit können Items gegen den Uhrzeigensinn gedreht werden. Wähle den Rotierer aus und drücke 'T', um auf verschiedene Varianten zuzugreifen. - + desc: Du hast eine zweite Variante des Rotierers + freigeschaltet! Damit können Items gegen den Uhrzeigensinn gedreht + werden. Wähle den Rotierer aus und drücke 'T', um auf + 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 Ressourcen an andere Extrahierer + weiterleiten.

PS: Der alte 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_splitter_compact: + 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 Kombinierers freigeschaltet! Er hat zwei Eingänge und vereint diese zu einem Ausgang. - + desc: Du hast eine kompakte Variante des + Verteilers freigeschaltet! Der Kombinierer vereint + zwei Eingänge 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. - + title: Schneider (vierfach) + desc: Du hast eine neue Variante des Schneiders freigeschaltet! + 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_painter_quad: - title: Färber (4-fach) - desc: Du hast eine neue Variante des Färbers freigeschaltet! Er kann jedes Viertel einer Form einzeln färben, verbraucht aber auch jeweils eine Farbe. - + title: Färber (zweifach) + 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 - 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 Blaupausenformen produzieren, um die Kopierkosten zu decken (Welche du gerade produziert hast)! - - # Special reward, which is shown when there is no reward actually + title: Blaupausen + desc: Jetzt kannst du Teile deiner Fabrik kopieren und + einfügen! Wähle einen Bereich aus (Halte STRG und ziehe mit + deiner Maus) und drücke 'C', um zu kopieren.

Einfügen ist + nicht kostenlos! Du musst + Blaupausenformen produzieren, um die Kopierkosten + zu decken (Welche du gerade produziert hast). + reward_rotater_180: + 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-Ebene & vierfacher Färber + desc: Du hast soeben die Wires-Ebene freigeschaltet! Diese + separate Ebene befindet sich unter deinen Gebäuden und gibt dir + viele neue Möglichkeiten.

Für den Anfang bekommst du einen + vierfachen Färber. Schließe die Eingänge, mit denen + du die Quadranten färben möchtest, an ein Signalkabel auf der + Wires-Ebene an!

Mit E wechselst du zwischen + den Ebenen. + reward_filter: + title: Itemfilter + desc: Du hast den Itemfilter freigeschaltet! Items, die dem + eingespeisten Signal entsprechen, lässt er passieren. Den Rest + zweigt er nach rechts ab.

Du kannst z.B. nach Farbe und Form + sortieren oder mit Wahrheitswerten (1 oder 0) Items nur auf + Knopfdruck passieren lassen. + reward_display: + title: Anzeige + desc: Du hast die Anzeige freigeschaltet! Jedes eingespeiste + Signal kann damit dargestellt werden.

Apropos, ist dir schon + aufgefallen, dass Fließbandkontrolle und Lager das zuletzt passierte + Item ausgeben können? Lasse es dir doch gleich mal anzeigen! + reward_constant_signal: + title: Signalgeber + desc: Du hast den Signalgeber freigeschaltet! Du kannst das + Gebäude auf der Wires-Ebene platzieren und z.B. mit einem + Itemfilter verbinden.

Der Signalgeber kann + dir Formen, Farben oder + Wahrheitswerte (1 oder 0) zur Verfügung stellen. + reward_logic_gates: + title: Logikgatter + desc: >- + Du hast nun eine Reihe an Logikgattern freigeschaltet! Das muss dich jetzt nicht + nervös machen, die Funktionsweise ist simpel und ziemlich cool.

+ Mit Logikgattern kannst du UND-, ODER-, XODER- und NICHT-Operationen ausführen.

+ Als Sahnehäubchen obendrauf stelle ich dir noch einen Transistor zur Verfügung. + Houston, wir sind Turing-vollständig! + reward_virtual_processing: + title: Virtuelle Verarbeitung + desc: "Du hast gerade eine Menge neue Gebäude freigeschaltet! Mit ihnen kannst + du die Verarbeitung von Formen komplett + simulieren.

Das beinhaltet einen Schneider, + Rotierer, Stapler und mehr für die Wires-Ebene! Damit bleiben dir ab + jetzt drei Optionen offen:

- Ich empfehle dir, eine + automatisierte Maschine zu bauen, die jede + beliebige Form am Hub abgreift und herstellt. (Probiere es + wenigstens!)

- Werde kreativ und lasse dir etwas Cooles + einfallen, das du auf der Wires-Ebene umsetzen kannst. (Und teile es + auf dem Discord!)

- Spiele dich weiter durch die Level. Auf + deine Art!

Das Wichstigste an deiner Entscheidung ist: + Vergiss nicht, dabei Spaß zu haben!" 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! - + 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! - + desc: Du hast das nächste Level freigeschaltet! + reward_freeplay: + title: Freies Spiel + desc: Du hast es geschafft! Du bist im Freispiel-Modus + angekommen! 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: Ende der Demo + desc: Du bist am Ende der Demo angekommen! settings: title: Einstellungen categories: general: Allgemein userInterface: Benutzeroberfläche advanced: Erweitert - + performance: Leistung versionBadges: dev: Entwicklung staging: Beta prod: Produktion buildDate: Gebaut am - + rangeSliderPercentage: % labels: uiScale: title: HUD Größe - description: >- - Ändert die Größe der Benutzeroberfläche, basierend auf der Bildschirmauflösung. + description: Ändert die Größe der Benutzeroberfläche, basierend auf der + Bildschirmauflösung. scales: super_small: Sehr klein small: Klein regular: Normal large: Groß huge: Riesig - autosaveInterval: title: Intervall für automatisches Speichern - description: >- - Ändert das Intervall, in dem der Spielstand automatisch gespeichert wird. Die Funktion kann hier auch deaktiviert werden. - + description: Ändert das Intervall, in dem der Spielstand automatisch gespeichert + wird. Die Funktion kann hier auch deaktiviert werden. intervals: one_minute: 1 Minute two_minutes: 2 Minuten @@ -679,22 +764,20 @@ settings: ten_minutes: 10 Minuten twenty_minutes: 20 Minuten disabled: Deaktiviert - scrollWheelSensitivity: title: Zoomempfindlichkeit - description: >- - Ändert die Empfindlichkeit des Zooms (Sowohl Mausrad, als auch Trackpad). + description: Ändert die Empfindlichkeit des Zooms (Sowohl Mausrad, als auch + Trackpad). sensitivity: super_slow: Sehr langsam slow: Langsam regular: Normal fast: Schnell super_fast: Sehr schnell - movementSpeed: title: Bewegungsgeschwindigkeit - description: >- - Ändert die Geschwindigkeit, mit welcher der Bildschirm durch die Pfeiltasten bewegt wird. + description: Ändert die Geschwindigkeit, mit welcher der Bildschirm durch die + Pfeiltasten bewegt wird. speeds: super_slow: Sehr langsam slow: Langsam @@ -702,99 +785,128 @@ settings: fast: Schnell super_fast: Sehr schnell extremely_fast: Extrem schnell - language: title: Sprache - description: >- - Ändere die Sprache. Alle Übersetzungen werden von Nutzern erstellt und sind möglicherweise unvollständig! - + description: Ändere die Sprache. Alle Übersetzungen werden von Nutzern erstellt + und sind möglicherweise unvollständig! enableColorBlindHelper: title: Modus für Farbenblinde - description: >- - Aktiviert verschiedene Werkzeuge, welche dir das Spielen trotz Farbenblindheit ermöglichen. - + description: Aktiviert verschiedene Werkzeuge, welche dir das Spielen trotz + Farbenblindheit ermöglichen. fullscreen: title: Vollbild - description: >- - Für das beste Erlebnis im Spiel wird der Vollbildmodus empfohlen (Nur in der Standalone-Version verfügbar). - + description: Für das beste Erlebnis im Spiel wird der Vollbildmodus empfohlen + (Nur in der Standalone-Version verfügbar). soundsMuted: title: Geräusche stummschalten - description: >- - Bei Aktivierung werden alle Geräusche stummgeschaltet. - + description: Bei Aktivierung werden alle Geräusche stummgeschaltet. musicMuted: title: Musik stummschalten - description: >- - Bei Aktivierung wird die Musik stummgeschaltet. - + description: Bei Aktivierung wird die Musik stummgeschaltet. soundVolume: title: Geräuschlautstärke - description: >- - Regler für die Lautstärke von Geräuschen. - + description: Regler für die Lautstärke von Geräuschen. musicVolume: title: Musiklautstärke - description: >- - Regler für die Lautstärke der Musik. - + description: Regler für die Lautstärke der Musik. theme: title: Farbmodus - description: >- - Wähle zwischen dem dunklen und dem hellen Farbmodus. + description: Wähle zwischen dem dunklen und dem hellen Farbmodus. themes: dark: Dunkel light: Hell - refreshRate: title: Tickrate - description: >- - Das Spiel passt die Tickrate automatisch so an, dass sie immer zwischen diesem Wert und der Hälfte bleibt. Zum Beispiel bei einer Tickrate von 60 Hz versucht das Spiel, diese zu halten. Bei Bedarf regelt der Computer diese bis zu einer Untergrenze von 30 Hz herunter. - + description: Das Spiel passt die Tickrate automatisch so an, dass sie immer + zwischen diesem Wert und der Hälfte bleibt. Zum Beispiel bei + einer Tickrate von 60 Hz versucht das Spiel, diese zu halten. + Bei Bedarf regelt der Computer diese bis zu einer Untergrenze + von 30 Hz herunter. alwaysMultiplace: title: Mehrfachplatzierung - description: >- - Bei Aktivierung wird das platzierte Gebäude nicht abgewählt. Das hat den gleichen Effekt, wie beim Platzieren UMSCH gedrückt zu halten. - + description: Bei Aktivierung wird das platzierte Gebäude nicht abgewählt. Das + hat den gleichen Effekt, wie beim Platzieren UMSCH gedrückt zu + halten. offerHints: title: Hinweise & Tutorials - description: >- - Schaltet Hinweise und das Tutorial beim Spielen an und aus. Außerdem werden zu den Levels bestimmte Textfelder versteckt, die den Einstieg erleichtern sollen. - + description: Schaltet Hinweise und das Tutorial beim Spielen an und aus. + Außerdem werden zu den Levels bestimmte Textfelder versteckt, + die den Einstieg erleichtern sollen. enableTunnelSmartplace: title: Intelligente Tunnel - description: >- - Aktiviert das automatische Entfernen von überflüssigen Förderbändern bei der Platzierung von Tunneln. - Außerdem funktioniert das Ziehen von Tunneln und überschüssige werden ebenfalls entfernt. - + description: Aktiviert das automatische Entfernen von überflüssigen Fließbändern + bei der Platzierung von Tunneln. Außerdem funktioniert das + Ziehen von Tunneln und überschüssige werden ebenfalls entfernt. vignette: title: Vignette - description: >- - Aktiviert den Vignetteneffekt, der den Rand des Bildschirms zunehmend verdunkelt und das Lesen der Textfelder vereinfacht. - + description: Aktiviert den Vignetteneffekt, der den Rand des Bildschirms + zunehmend verdunkelt und das Lesen der Textfelder vereinfacht. rotationByBuilding: title: Rotation pro Gebäudetyp - description: >- - Jeder Gebäudetyp merkt sich eigenständig, in welche Richtung er zeigt. - Das fühlt sich möglicherweise besser an, wenn du häufig zwischen verschiedenen Gebäudetypen wechselst. - + description: Jeder Gebäudetyp merkt sich eigenständig, in welche Richtung er + zeigt. Das fühlt sich möglicherweise besser an, wenn du häufig + zwischen verschiedenen Gebäudetypen wechselst. compactBuildingInfo: title: Kompakte Gebäudeinformationen - description: >- - Reduziert die Infoboxen der Gebäude auf ihre Arbeitsgeschwindigkeit. Anderenfalls wird ein Bild mit Beschreibung angezeigt. - + description: Reduziert die Infoboxen der Gebäude auf ihre + Arbeitsgeschwindigkeit. Anderenfalls wird ein Bild mit + Beschreibung angezeigt. disableCutDeleteWarnings: title: Deaktiviere Warnungsdialog beim Löschen - description: >- - Deaktiviert die Warnung, welche beim Löschen und Ausschneiden von mehr als 100 Feldern angezeigt wird. - + description: Deaktiviert die Warnung, welche beim Löschen und Ausschneiden von + mehr als 100 Feldern angezeigt wird. + lowQualityMapResources: + 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: Gitter deaktivieren + description: Das Deaktivieren des Gitters kann deine Leistung verbessern. + Außerdem vereinfacht es die Darstellung! + clearCursorOnDeleteWhilePlacing: + 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: 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: 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: 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: Minimalistische Fließbänder (Unschön) + description: Zur Verbesserung der Leistung werden die Items auf Fließbä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: 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). 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 ingame: Spiel @@ -803,7 +915,6 @@ keybindings: massSelect: Bereichsauswahl buildings: Gebäude placementModifiers: Platzierungsmodifikatoren - mappings: confirm: Bestätigen back: Zurück @@ -813,79 +924,74 @@ keybindings: mapMoveLeft: Nach links bewegen mapMoveFaster: Schneller bewegen centerMap: Karte zentrieren - mapZoomIn: Reinzoomen mapZoomOut: Rauszoomen - createMarker: Markierung erstellen - + createMarker: Marker erstellen menuOpenShop: Upgrades menuOpenStats: Statistiken menuClose: Menü schließen - toggleHud: HUD an/aus toggleFPSInfo: FPS und Debug-Info an/aus switchLayers: Ebenen wechseln exportScreenshot: Ganze Fabrik als Foto exportieren - - # --- Do not translate the values in this section - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - # --- - + belt: Fließband + balancer: Verteiler + underground_belt: Tunnel + miner: Extrahierer + cutter: Schneider + 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 + 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 - + 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 - advanced_processor: Farbinvertierer - energy_generator: Stromgenerator - wire: Stromkabel - + 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!

- - 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. - + body: Dieses Spiel ist quelloffen (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!

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. changelog: title: Änderungen - demo: features: restoringGames: Spiele wiederherstellen @@ -893,5 +999,82 @@ demo: oneGameLimit: Beschränkt auf einen Spielstand customizeKeybindings: Tastenbelegung anpassen exportingBase: Ganze Fabrik als Foto exportieren - settingNotAvailable: Nicht verfügbar in der Demo. +tips: + - 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 Fließbä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 + Fließbä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 Fließbä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 + Fließbä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 Fließbä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 30f825e5..57910757 100644 --- a/translations/base-el.yaml +++ b/translations/base-el.yaml @@ -1,113 +1,65 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: Στο shapez.io χτήζεις εργοστάσια για να αυτοματοποιήσεις την δημιουργία και τον συνδιασμό σχημάτων αυξανόμενης πολυπλοκότητας σε έναν ατέλειωτο χάρτη. + shortText: Στο shapez.io χτήζεις εργοστάσια για να αυτοματοποιήσεις την + δημιουργία και τον συνδιασμό σχημάτων αυξανόμενης πολυπλοκότητας σε έναν + ατέλειωτο χάρτη. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # 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] + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - Στο shapez.io χτήζεις εργοστάσια για να αυτοματοποιήσεις την δημιουργία και τον συνδιασμό σχημάτων αυξανόμενης πολυπλοκότητας σε έναν ατέλειωτο χάρτη. - Όταν παραδώσεις τα απαιτούμενα σχήματα, θα προχωρήσεις στο παιχνίδι και θα ξεκλειδώσεις αναβαθμήσεις για να επιταχύνεις το εργοστάσιό σου. + 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! - Επειδή η ζήτηση για σχήματα αυξάνεται συνεχώς, θα πρέπει να επεκτείνεις το εργοστάσιό σου για να την ικανοποιήσεις - Μήν ξεχάσεις, για να βρείς όλους τους πόρους που χρειάζεσαι θα πρέπει να εξαπλωθείς στον [b]άτελείωτο χάρτη[/b]! + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - Σύντομα θα πρέπει να αναμείξεις χρώματα και να βάψεις σχήματα - Ανάμειξε κόκκινο, πράσινο και μπλέ για να φτιάξεις διαφορετικά χρώματα και να βάψεις σχήματα ώστε να ικανοποιήσεις την ζήτηση. - - Το παιχνίδι έχει 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] - - discordLink: Επίσημο Discord - Συνομίλησε μαζί μου! + 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: Σφάλμα - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: χλ. millions: εκ. billions: δισ. trillions: τρισ. - - # Shown for infinitely big numbers infinite: άπειρο - time: - # Used for formatting past time dates - oneSecondAgo: πριν ένα δευτερόλεπτο + oneSecondAgo: πριν ένα δευτερόλεπτο xSecondsAgo: πριν δευτερόλεπτα oneMinuteAgo: πριν ένα λεπτό xMinutesAgo: πριν λεπτά @@ -115,14 +67,10 @@ global: xHoursAgo: πριν ώρες oneDayAgo: πριν μία ημέρα xDaysAgo: πριν ημέρες - - # Short formats for times, e.g. '5h 23m' secondsShort: δ minutesAndSecondsShort: λ δ hoursAndMinutesShort: ω λ - xMinutes: λεπτά - keys: tab: TAB control: CTRL @@ -130,13 +78,9 @@ global: escape: ESC shift: SHIFT space: SPACE - 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! - + intro: Get the standalone to unlock all features! mainMenu: play: Παίξε changelog: Changelog @@ -144,19 +88,16 @@ mainMenu: openSourceHint: Αυτό το παιχνίδι είναι ανοιχτού κώδικα! discordLink: Επίσημο Discord Server helpTranslate: Βοήθησε με μεταφράσεις! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Δυστυχώς, το παιχνίδι τρέχει αργά στο πρόγραμμα περιήγησής σας! Αποκτήστε την αυτόνομη έκδοση ή κατεβάστε το chrome για την πλήρη εμπειρία. - + browserWarning: Δυστυχώς, το παιχνίδι τρέχει αργά στο πρόγραμμα περιήγησής σας! + Αποκτήστε την αυτόνομη έκδοση ή κατεβάστε το chrome για την πλήρη + εμπειρία. savegameLevel: Επίπεδο savegameLevelUnknown: Άγνωστο Επίπεδο - continue: Συνέχεια newGame: Καινούριο παιχνίδι madeBy: Made by subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,111 +111,105 @@ dialogs: viewUpdate: Προβολή ενημέρωσης showUpgrades: Εμφάνιση αναβαθμίσεων showKeybindings: Συνδυασμοί πλήκτρων - importSavegameError: title: Σφάλμα εισαγωγής - text: >- - Αποτυχία εισαγωγής του αποθηκευμένου παιχνιδιού: - + text: "Αποτυχία εισαγωγής του αποθηκευμένου παιχνιδιού:" importSavegameSuccess: title: Εισαγωγή αποθηκευμένου παιχνιδιού - text: >- - Η Εισαγωγή του αποθηκευμένου παιχνιδιού ήταν επιτυχής. - + text: Η Εισαγωγή του αποθηκευμένου παιχνιδιού ήταν επιτυχής. gameLoadFailure: title: Το παιχνίδι είναι κατεστραμμένο - text: >- - Η φώρτοση του αποθηκευμένου παιχνιδιού ήταν αποτυχής: - + 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: >- - Η διαγραφή του αποθηκευμένου παιχνιδιού ήταν αποτυχής: - + text: "Η διαγραφή του αποθηκευμένου παιχνιδιού ήταν αποτυχής:" restartRequired: title: Χρειάζεται επανεκκίνηση - text: >- - Πρέπει να επανεκκινήσεις το παιχνίδι για να εφαρμόσεις τις ρυθμίσεις. - + text: Πρέπει να επανεκκινήσεις το παιχνίδι για να εφαρμόσεις τις ρυθμίσεις. editKeybinding: title: Αλλαγή συνδιασμών πλήκτρων - desc: Πάτησε το πλήκτρο ή το κουμπί του ποντικιού που θέλεις να αντιστοιχίσεις, ή escape για ακύρωση. - + desc: Πάτησε το πλήκτρο ή το κουμπί του ποντικιού που θέλεις να αντιστοιχίσεις, + ή escape για ακύρωση. resetKeybindingsConfirmation: title: Επαναφορά συνδιασμών πλήκτρων - desc: Όλες οι συνδιασμών πλήκτρων θα επαναφερθούν στις προεπιλεγμένες τιμές τους. Επιβεβαίωση; - + desc: Όλες οι συνδιασμών πλήκτρων θα επαναφερθούν στις προεπιλεγμένες τιμές + τους. Επιβεβαίωση; keybindingsResetOk: title: Συνδιασμοί πλήκτρων επαναφέρθηκαν 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 έκδοση μπορείς να έχεις μόνο ένα αποθηκευμένο παιχνίδι. Παρακαλώ διάγραψε το υπάρχον αποθηκευμένο παιχνίδι ή απόκτησε την αθτόνομη έκδοση! - + desc: Στην demo έκδοση μπορείς να έχεις μόνο ένα αποθηκευμένο παιχνίδι. Παρακαλώ + διάγραψε το υπάρχον αποθηκευμένο παιχνίδι ή απόκτησε την αθτόνομη + έκδοση! updateSummary: title: Νέα αναβάθμιση! - desc: >- - Αυτές είναι οι αλλαγές από την τελευταία φορά που έπαιξες: - + desc: "Αυτές είναι οι αλλαγές από την τελευταία φορά που έπαιξες:" upgradesIntroduction: title: Ξεκλείδωμα αναβαθμίσεων - desc: >- - Όλα τα σχήματα που παράγεις μπορούν να χρησιμοποιηθούν για να ξεκλειδώσεις αναβαθμίσεις - Μην καταστρέψεις τα παλιά σου εργοστάσια! - Η καρτέλα αναβαθμίσεων βρίσκεται στην επάνω δεξιά γωνία της οθόνης. - + desc: Όλα τα σχήματα που παράγεις μπορούν να χρησιμοποιηθούν για να ξεκλειδώσεις + αναβαθμίσεις - Μην καταστρέψεις τα παλιά σου εργοστάσια! + Η καρτέλα αναβαθμίσεων βρίσκεται στην επάνω δεξιά γωνία + της οθόνης. massDeleteConfirm: title: Επιβεβαίωση διαγραφής - desc: >- - Ετοιμάζεσαι να διαγράψεις πολλά κτήρια ( για την ακρίβεια)! Είσαι βέβαιος/η ότι θέλεις να το κάνεις αυτό; - + desc: Ετοιμάζεσαι να διαγράψεις πολλά κτήρια ( για την ακρίβεια)! Είσαι + βέβαιος/η ότι θέλεις να το κάνεις αυτό; blueprintsNotUnlocked: title: Αυτή η δυνατότητα δεν έχει ξεκλειδωθεί ακόμα - desc: >- - Τα σχεδιαγράμματα δεν έχουν ξεκλειδωθεί ακόμα! Ολοκλήρωσε περισσότερα επίπεδα για να τα ξεκλειδώσεις. - + desc: Τα σχεδιαγράμματα δεν έχουν ξεκλειδωθεί ακόμα! Ολοκλήρωσε περισσότερα + επίπεδα για να τα ξεκλειδώσεις. keybindingsIntroduction: title: Χρήσιμοι Συνδιασμοί πλήκτρων - desc: >- - Αυτό το παιχνίδι έχει πολλούς συνδιασμούς πλήκτρων που διευκολύνουν στο χτήσιμο μεγάλων εργοστασίων. - Εδώ είναι μερικοί από αυτούς. Για τους υπόλοιπους αναφέρσου στην ενότητα Συνδιασμοί πλήκτρων

- CTRL + Σύρε: Επιλογή περιοχής για αντιγραφή / διαγραφή.
- SHIFT: Κράτα πατημένο για να χτίσεις πάνω από ένα κτήριο.
- ALT: Αντιστρέφει τον προσανατολισμό των τοποθετούμενων ιμάντων.
- + 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: Επεξεργασία Σημαδιού - markerDemoLimit: - desc: Στην έκδωση demo μπορείς να βάλεις μέχρι δύο σημάδια στον χάρτη. Αποκτήστε την αυτόνομη έκδοση για να μπορείς να βάλεις απεριόριστα σημάδια στον χάρτη! + desc: Στην έκδωση demo μπορείς να βάλεις μέχρι δύο σημάδια στον χάρτη. + Αποκτήστε την αυτόνομη έκδοση για να μπορείς να βάλεις απεριόριστα + σημάδια στον χάρτη! massCutConfirm: title: Επιβεβαίωση αποκοπής - desc: >- - Ετοιμάζεσαι να αποκόψεις πολλά κτήρια ( φια την ακρίβεια)! Είσαι βέβαιος/η ότι θέλεις να το κάνεις αυτό; - + desc: Ετοιμάζεσαι να αποκόψεις πολλά κτήρια ( φια την ακρίβεια)! Είσαι + βέβαιος/η ότι θέλεις να το κάνεις αυτό; exportScreenshotWarning: title: Εξαγωγή στιγμιότυπου οθόνης - desc: >- - Ζήτησες να εξαγάγεις τη βάση σου ως στιγμιότυπο οθόνης. Λάβε υπόψη ότι αυτό μπορεί να είναι αρκετά αργό για μια μεγάλη βάση και μπορεί ακόμη και να διακόψει (crash) το παιχνίδι σου! - + desc: Ζήτησες να εξαγάγεις τη βάση σου ως στιγμιότυπο οθόνης. Λάβε υπόψη ότι + αυτό μπορεί να είναι αρκετά αργό για μια μεγάλη βάση και μπορεί + ακόμη και να διακόψει (crash) το παιχνίδι σου! 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) + renameSavegame: + title: Rename Savegame + desc: You can rename your savegame here. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Κίνηση selectBuildings: Επιλογή περιοχής @@ -295,18 +230,9 @@ ingame: clearSelection: Εκκαθαρισμός επιλογής pipette: Σταγονόμετρο switchLayers: Εναλλαγή στρώματος - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Πάτησε για εναλλαγή μεταξύ παραλλαγών. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Ταχύτητα range: Απόσταση @@ -314,36 +240,21 @@ ingame: oneItemPerSecond: 1 είδος / δευτερόλεπτο itemsPerSecond: είδη / δ itemsPerSecondDouble: (x2) - tiles: πλακάκια - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Επίπεδο completed: Ολοκληρώθηκε unlockText: Ξεκλειδώθηκε ! buttonNextLevel: Επόμενο επίπεδο - - # Notifications on the lower right notifications: newUpgrade: Μια νέα αναβάθμιση είναι διαθέσιμη! gameSaved: Το παιχνίδι έχει αποθηκευτεί. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Αναβαθμίσεις buttonUnlock: Αναβάθμιση - - # Gets replaced to e.g. "Tier IX" tier: Βαθμίδα - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: ΜΕΓΙΣΤΟ ΕΠΙΠΕΔΟ (Ταχύτητα x) - - # The "Statistics" window statistics: title: Στατιστικά dataSources: @@ -352,55 +263,49 @@ ingame: description: Εμφάνιση ποσού αποθηκευμένων σχημάτων στο κεντρικό σου κτήριο. produced: title: Παραγμένα - description: Εμφάνιση όλων των σχημάτων που παράγει ολόκληρο το εργοστάσιό σου, συμπεριλαμβανομένων των ενδιάμεσων προϊόντων. + description: Εμφάνιση όλων των σχημάτων που παράγει ολόκληρο το εργοστάσιό σου, + συμπεριλαμβανομένων των ενδιάμεσων προϊόντων. delivered: title: Παραδωμένα description: Εμφάνιση σχημάτων που παραδίδονται στο κεντρικό σου κτήριο. noShapesProduced: Δεν έχεις παράξει σχήματα ακόμα. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / λ - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Χρόνος που έπαιξες - buildingsPlaced: Κτήρια beltsPlaced: Ιμάντες - - buttons: - continue: Συνέχεια - settings: Ρυθμίσεις - menu: Επιστροφή στο μενού - - # Bottom left tutorial hints tutorialHints: title: Χρειάζεσε βοήθεια; showHint: Εμφάνιση υπόδειξης hideHint: Kλείσιμο - - # When placing a blueprint blueprintPlacer: cost: Κόστος - - # Map markers waypoints: waypoints: Σημάδι hub: HUB - description: Κάνε αριστερό κλικ σε ένα σημάδι για να μεταβείς σε αυτό, κάνε δεξί κλικ για να το διαγράψεις.

Πάτησε για να δημιουργήσεις ένα σημάδι από την τρέχουσα προβολή ή δεξί κλικ για να δημιουργήσεις ένα σημάδι στην επιλεγμένη τοποθεσία. + description: Κάνε αριστερό κλικ σε ένα σημάδι για να μεταβείς σε αυτό, κάνε δεξί + κλικ για να το διαγράψεις.

Πάτησε για να + δημιουργήσεις ένα σημάδι από την τρέχουσα προβολή ή δεξί + κλικ για να δημιουργήσεις ένα σημάδι στην επιλεγμένη + τοποθεσία. creationSuccessNotification: Το σημάδι δημιουργήθηκε. - - # Interactive tutorial interactiveTutorial: title: Tutorial 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: Πράσινο @@ -415,8 +320,42 @@ ingame: title: Στρώματα empty: Κενό copyKey: Αντιγραφή κώδικα - -# All shop upgrades + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Ιμάντες, Διανομείς & Σήραγγες @@ -430,286 +369,438 @@ shopUpgrades: painting: name: Ανάμειξη & Βαφή description: Ταχύτητα x → x - -# Buildings and their name / description buildings: belt: default: - name: &belt Μεταφορικός Ιμάντας - description: Μεταφέρει είδη. Κράτα πατημένο και σύρε για να τοποθετήσεις πολλαπλούς ιμάντες. - - miner: # Internal name for the Extractor + name: Μεταφορικός Ιμάντας + description: Μεταφέρει είδη. Κράτα πατημένο και σύρε για να τοποθετήσεις + πολλαπλούς ιμάντες. + miner: default: - name: &miner Αποσπαστής + name: Αποσπαστής description: Τοποθέτησε πάνω από ένα σχήμα ή χρώμα για να το αποσπάσεις. - chainable: name: Αποσπαστής (Αλυσιδωτός) - description: Τοποθέτησε πάνω από ένα σχήμα ή χρώμα για να το αποσπάσεις. Μπορούν να συνδεθούν σε σειρά. - - underground_belt: # Internal name for the Tunnel + description: Τοποθέτησε πάνω από ένα σχήμα ή χρώμα για να το αποσπάσεις. Μπορούν + να συνδεθούν σε σειρά. + underground_belt: default: - name: &underground_belt Σήραγγα + name: Σήραγγα description: Μεταφέρει είδη κάτω από κτήρια και μεταφορικούς ιμάντες. - tier2: name: Σήραγγα Βαθμίδα II description: Μεταφέρει είδη κάτω από κτήρια και μεταφορικούς ιμάντες. - - splitter: # Internal name for the Balancer - default: - name: &splitter Ισορροπηστής - description: Πολυλειτουργικό - κατανέμει ομοιόμορφα είδη από όλες τις εισόδους σε όλες τις εξόδους. - - compact: - name: Συγχωνευτής (συμπαγής) - description: Συγχωνεύει δύο μεταφορικούς ιμάντες σε έναν. - - compact-inverse: - name: Συγχωνευτής (συμπαγής) - description: Συγχωνεύει δύο μεταφορικούς ιμάντες σε έναν. - cutter: default: - name: &cutter Κόπτης - description: Κόβει σχήματα από πάνω προς τα κάτω και παράγει και τα δύο μισά. Εάν χρησιμοποιείς μόνο το ένα κομμάτι, φρόντισε να καταστρέψεις το άλλο κομμάτι, διαφορετικά η λειτουργία θα σταματήσει! + name: Κόπτης + description: Κόβει σχήματα από πάνω προς τα κάτω και παράγει και τα δύο μισά. + Εάν χρησιμοποιείς μόνο το ένα κομμάτι, φρόντισε να + καταστρέψεις το άλλο κομμάτι, διαφορετικά η λειτουργία θα + σταματήσει! quad: name: Κόπτης (Τετάρτων) - description: Κόβει σχήματα σε τέσσερα κομμάτια. Εάν χρησιμοποιείς μόνο το ένα κομμάτι, φρόντισε να καταστρέψεις τα άλλα κομμάτια, διαφορετικά η λειτουργία θα σταματήσει! - + description: Κόβει σχήματα σε τέσσερα κομμάτια. Εάν χρησιμοποιείς μόνο + το ένα κομμάτι, φρόντισε να καταστρέψεις τα άλλα κομμάτια, + διαφορετικά η λειτουργία θα σταματήσει! rotater: default: - name: &rotater Περιστροφέας + name: Περιστροφέας description: Περιστρέφει τα σχήματα δεξιόστροφα κατά 90 μοίρες. ccw: name: Περιστροφέας (Αρστ.) description: Περιστρέφει τα σχήματα αριστερόστροφα κατά 90 μοίρες. - fl: - name: Περιστροφέας (180) - description: Περιστρέφει τα σχήματα κατά 180 μοίρες. - + rotate180: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: - name: &stacker Στοίβαχτής - description: Στοιβάζει και τα δύο είδη. Εάν δεν μπορούν να συγχωνευτούν, το δεξί είδος τοποθετείται πάνω από το αριστερό είδος. - + name: Στοίβαχτής + description: Στοιβάζει και τα δύο είδη. Εάν δεν μπορούν να συγχωνευτούν, το δεξί + είδος τοποθετείται πάνω από το αριστερό είδος. mixer: default: - name: &mixer Αναμείκτης Χρωμάτων + name: Αναμείκτης Χρωμάτων description: Αναμειγνύει δύο χρώματα χρησιμοποιώντας ανάμιξη πρόσθετων. - painter: default: - name: &painter Βαφέας - description: &painter_desc Χρωματίζει ολόκληρο το σχήμα στην αριστερή είσοδο με το χρώμα από τη δεξιά είσοδο. + name: Βαφέας + description: Χρωματίζει ολόκληρο το σχήμα στην αριστερή είσοδο με το χρώμα από + τη δεξιά είσοδο. double: name: Βαφέας (Διπλός) - description: Χρωματίζει τα σχήματα από τις αριστερές εισόδους με το χρώμα από την επάνω είσοδο. + 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: *painter - description: *painter_desc - + name: Βαφέας + description: Χρωματίζει ολόκληρο το σχήμα στην αριστερή είσοδο με το χρώμα από + τη δεξιά είσοδο. trash: default: - name: &trash Κάδος απορριμμάτων + name: Κάδος απορριμμάτων description: Δέχεται είδη από όλες τις πλευρές και τα καταστρέφει. Για πάντα. - - storage: - name: Αποθήκη - description: Αποθηκεύει επιπλέον είδη, έως μια δεδομένη χωρητικότητα. Μπορεί να χρησιμοποιηθεί ως πύλη υπερχείλισης. - hub: deliver: Παράδωσε toUnlock: για να ξεκλειδώσεις levelShortcut: LVL + endOfDemo: End of Demo wire: default: name: Καλώδιο ενέργειας description: Σου επιτρέπει να μεταφέρεις ενέργεια. - advanced_processor: + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + balancer: default: - name: Μετατροπέας χρώματος - description: Δέχεται ένα χρώμα ή σχήμα και το αντιστρέφει. - energy_generator: - deliver: Παράδωσε - toGenerateEnergy: Για - default: - name: Γεννήτρια ενέργειας - description: Παράγει ενέργεια καταναλώνοντας σχήματα. - wire_crossings: - default: - name: Διαχωριστής καλωδίων - description: Χωρίζει ένα καλώδιο ενέργειας σε δύο. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Συγχωνευτής καλωδίων - description: Συγχωνεύει δύο καλώδια ενέργειας σε ένα. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 μοίρες. - + desc: Ο Περιστροφέας ξεκλειδώθηκε! Το κτήριο αυτό περιστρέφει + τα σχήματα δεξιόστροφα κατά 90 μοίρες. reward_painter: title: Βαφή - desc: >- - Μόλις ξεκλειδώθηκε ο Βαφέας - Απόσπασε μερικά χρώματα (όπως κάνεις με τα σχήματα) και συνδύασέ τα με ένα σχήμα στον βαφέα για να τα χρωματίσεις!

PS: Εάν πάσχεις από αχρωματοψία, τυφλοί, υπάρχει η λειτουργία αχρωματοψίας στις ρυθμίσεις! - + desc: "Μόλις ξεκλειδώθηκε ο Βαφέας - Απόσπασε μερικά χρώματα + (όπως κάνεις με τα σχήματα) και συνδύασέ τα με ένα σχήμα στον βαφέα + για να τα χρωματίσεις!

PS: Εάν πάσχεις από αχρωματοψία, + τυφλοί, υπάρχει η λειτουργία αχρωματοψίας στις + ρυθμίσεις!" reward_mixer: title: Ανάμιξη Χρωμάτων - desc: Ο Αναμείκτης χρωμάτων είναι διαθέσιμος - Συνδύαστε δύο χρώματα ακολουθόντας ανάμιξη πρόσθετων με αυτό το κτήριο! - + desc: Ο Αναμείκτης χρωμάτων είναι διαθέσιμος - Συνδύαστε δύο + χρώματα ακολουθόντας ανάμιξη πρόσθετων με αυτό το + κτήριο! reward_stacker: title: Στοίβαχτής - desc: Τώρα μπορείς να συνδυάσεις σχήματα με τον Στοίβαχτής! Εαν τα σχήματα από τις δύο εισόδους μπορούν να τοποθετηθούν το ένα δίπλα στο άλλο θα συμπτυχθούν. Εάν όχι, το σχήμα της δεηιάς εισώδου στοιβάζεται πάνω από το σχήμα της αριστερής! - + 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: Το Σήραγγα είναι πλέον διαθέσιμο - Τώρα μπορείς να διοχετεύσεις είδη κάτω από ιμάντες και κτήρια! - + desc: Το Σήραγγα είναι πλέον διαθέσιμο - Τώρα μπορείς να + διοχετεύσεις είδη κάτω από ιμάντες και κτήρια! reward_rotater_ccw: title: Περιστροφή (Αρστ.) - desc: Ξεκλείδωσες μια παραλλαγή του Περιστροφέα - Επιτρέπει αριστερόστροφη περιστροφή! Για να τον τοποθετήσεις, επίλεξε τον περιστροφέα και πάτησε 'T' για να κυλίσεις ανάμεσα στις παραλλαγές του! - + 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: Σήραγγα Βαθμίδα II - desc: Ξεκλείδωσες μια νέα παραλλαγή της Σήραγγας - Καλύπτει μεγαλύτερη απόσταση και επιτρέπει το "πλέξιμο" διαφορετικών βαθμίδων σήραγγας! - - reward_splitter_compact: - title: Συμπαγής Ισορροπηστής - desc: >- - Ξεκλείδωσες μια συμπαγή παραλλαγή του Ισορροπηστή. Δέχεται είδη από δύο ιμάντες και τους συγχωνεύει σε έναν! - + desc: Ξεκλείδωσες μια νέα παραλλαγή της Σήραγγας - Καλύπτει + μεγαλύτερη απόσταση και επιτρέπει το "πλέξιμο" + διαφορετικών βαθμίδων σήραγγας! reward_cutter_quad: title: Κόπτης Τετάρτων - desc: Ξεκλείδωσες μια παραλλαγή του Κόπτη - Σου επιτρέπει να κόψεις σχήματα σε τέσσερα κομμάτια αντί για δύο! - + desc: Ξεκλείδωσες μια παραλλαγή του Κόπτη - Σου επιτρέπει να + κόψεις σχήματα σε τέσσερα κομμάτια αντί για δύο! reward_painter_double: title: Διπλός Βαφέας - desc: Ξεκλείδωσες μια παραλλαγή του Βαφέα - Λειτουργεί όπως ο κανονικός βαφέας, αλλά επεξεργάζεται δύο σχήματα ταυτόχρονα, καταναλώνοντας μόνο ένα χρώμα αντί για δύο! - - reward_painter_quad: - title: Βαφέας Τετάρτων - desc: Ξεκλείδωσες μια παραλλαγή του Βαφέα - Σου επιτρέπει να βάψεις κάθε τεταρτημόριο του σχήματος ξεχωριστά! - + 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, και τράβα το ποντίκι σου), και πάτησε 'C' για να αντιγράψεις τα κτήρια στην επιλεγμένη περιοχή.

Η επικόλληση δεν είναι δωρεάν, θα πρέπει να παράγεις σχήματα σχεδιαγράμματος για να χρησημοποιήσεις αυτή την δυνατότητα! (Τα σχήματα που μόλις παρέδωσες). - - # Special reward, which is shown when there is no reward actually + 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Ρυθμίσεις categories: general: Γενικές userInterface: Περιβάλλον χρήστη advanced: Προχωρημένα - + performance: Performance versionBadges: dev: Development staging: Staging prod: Production buildDate: Built - labels: uiScale: title: Κλίμακα περιβάλλοντος χρήστη - description: >- - Αλλάζει το μέγεθος του περιβάλλοντος χρήστη. Το περιβάλλον χρήστη θα κλιμακωθεί με βάση την ανάλυση της συσκευής σας, αλλά αυτή η ρύθμιση ελέγχει το μέγεθος εντώς αυτής της κλίμακας. + description: Αλλάζει το μέγεθος του περιβάλλοντος χρήστη. Το περιβάλλον χρήστη + θα κλιμακωθεί με βάση την ανάλυση της συσκευής σας, αλλά αυτή η + ρύθμιση ελέγχει το μέγεθος εντώς αυτής της κλίμακας. scales: super_small: Πολύ μικρό small: Μικρό regular: Κανονικό large: Μεγάλο huge: Πολύ μεγάλο - scrollWheelSensitivity: title: Ευαισθησία ζουμ - description: >- - Αλλάζει πόσο ευαίσθητο είναι το ζουμ (Είτε με τον τροχό ποντικιού ή με trackpad). + description: Αλλάζει πόσο ευαίσθητο είναι το ζουμ (Είτε με τον τροχό ποντικιού ή + με trackpad). sensitivity: super_slow: Πολύ αργό slow: Αργό regular: Κανονικό fast: Γρήγορο super_fast: Πολύ γρήγορο - language: title: Γλώσσα - description: >- - Αλλάξτε τη γλώσσα. Γιά όλες τις μεταφράσεις έχουν συνεισφέρει χρήστες. Μερικές μεταφράσεις ενδέχεται να είναι ελλιπείς! - + description: Αλλάξτε τη γλώσσα. Γιά όλες τις μεταφράσεις έχουν συνεισφέρει + χρήστες. Μερικές μεταφράσεις ενδέχεται να είναι ελλιπείς! fullscreen: title: Λειτουργία πλήρους οθόνης - description: >- - Για την καλύτερη δυνατή εμπειρία συνιστάται η λειτουργία πλήρους οθόνης. Διατίθεται μόνο στην αυτόνομη έκδοση. - + description: Για την καλύτερη δυνατή εμπειρία συνιστάται η λειτουργία πλήρους + οθόνης. Διατίθεται μόνο στην αυτόνομη έκδοση. soundsMuted: title: Σίγαση ήχων - description: >- - Εάν είναι ενεργοποιημένο, σβήνει όλα τα ηχητικά εφέ. - + description: Εάν είναι ενεργοποιημένο, σβήνει όλα τα ηχητικά εφέ. musicMuted: title: Σίγαση μουσικής - description: >- - Εάν είναι ενεργοποιημένο, σβήνει την μουσική. - + description: Εάν είναι ενεργοποιημένο, σβήνει την μουσική. theme: title: Λειτουργία παιχνιδιού - description: >- - Επίλεξε το την λειτουργία του παιχνιδιού (Φωτεινή / Σκοτεινή). - + description: Επίλεξε το την λειτουργία του παιχνιδιού (Φωτεινή / Σκοτεινή). themes: dark: Σκοτεινή light: Φωτεινή - refreshRate: title: Στόχος Προσομοίωσης - description: >- - Εάν έχεις οθόνη 144hz, άλλαξε τον ρυθμό ανανέωσης εδώ, ώστε το παιχνίδι να προσομοιωθεί σωστά σε υψηλότερους ρυθμούς ανανέωσης. Μπορεί να μειώσει τα FPS εάν ο υπολογιστής σου είναι πολύ αργός. - + description: Εάν έχεις οθόνη 144hz, άλλαξε τον ρυθμό ανανέωσης εδώ, ώστε το + παιχνίδι να προσομοιωθεί σωστά σε υψηλότερους ρυθμούς ανανέωσης. + Μπορεί να μειώσει τα FPS εάν ο υπολογιστής σου είναι πολύ αργός. alwaysMultiplace: title: Πολλαπλή τοποθέτηση - description: >- - Εάν είναι ενεργοποιημένο, όλα τα κτίρια θα παραμείνουν επιλεγμένα μετά την τοποθέτηση έως ότου ακυρώσεις την επιλογή. Αυτό ισοδυναμεί με μόνιμο κράτημα του SHIFT. - + description: Εάν είναι ενεργοποιημένο, όλα τα κτίρια θα παραμείνουν επιλεγμένα + μετά την τοποθέτηση έως ότου ακυρώσεις την επιλογή. Αυτό + ισοδυναμεί με μόνιμο κράτημα του SHIFT. offerHints: title: Συμβουλές & Οδηγίες - description: >- - Αν θέλεις να προσφέρονται συμβουλές και οδηγίες ενώ παίζεις. Επίσης κρύβει ορισμένα στοιχεία του περιβάλλοντος χρήστη έως ένα δεδομένο επίπεδο, για να διευκολύνει το παιχνίδι για νέους χρήστες. - + description: Αν θέλεις να προσφέρονται συμβουλές και οδηγίες ενώ παίζεις. Επίσης + κρύβει ορισμένα στοιχεία του περιβάλλοντος χρήστη έως ένα + δεδομένο επίπεδο, για να διευκολύνει το παιχνίδι για νέους + χρήστες. movementSpeed: title: Ταχύτητα κίνησης description: Αλλάζει την ταχύτητα κίνησης όταν χρησιμοποιείς το πληκτρολόγιο. @@ -722,21 +813,18 @@ settings: extremely_fast: Πάρα πολύ γρήγορη enableTunnelSmartplace: title: Έξυπνες σήραγγες - description: >- - Όταν ενεργοποιηθεί, η τοποθέτηση σηράγγων θα αφαιρέσει αυτόματα τις περιττές ζώνες. - Αυτό σου επιτρέπει επίσης να σύρεις το ποντίκι με την σήραγγα επιλεγμένη, και οι περιττές σήραγγες θα αφαιρεθούν. - + description: Όταν ενεργοποιηθεί, η τοποθέτηση σηράγγων θα αφαιρέσει αυτόματα τις + περιττές ζώνες. Αυτό σου επιτρέπει επίσης να σύρεις το ποντίκι + με την σήραγγα επιλεγμένη, και οι περιττές σήραγγες θα + αφαιρεθούν. vignette: title: Βινιέτα - description: >- - Ενεργοποιεί την Βιωιέτα, που σκουραίνει τις γωνίες της οθόνης και διευκολύνει την ανάγνωση του κειμένου. - + description: Ενεργοποιεί την Βιωιέτα, που σκουραίνει τις γωνίες της οθόνης και + διευκολύνει την ανάγνωση του κειμένου. autosaveInterval: title: Διάστημα μεταξύ αυτόματων αποθηκεύσεων - description: >- - Ελέγχει πόσο συχνά το παιχνίδι αποθηκεύεται αυτόματα. - Εδώ μπορείς επίσης να απενεργοποιήσεις την λειτουργία εντελώς. - + description: Ελέγχει πόσο συχνά το παιχνίδι αποθηκεύεται αυτόματα. Εδώ μπορείς + επίσης να απενεργοποιήσεις την λειτουργία εντελώς. intervals: one_minute: 1 Λεπτό two_minutes: 2 Λεπτά @@ -744,34 +832,80 @@ settings: ten_minutes: 10 Λεπτά twenty_minutes: 20 Λεπτά disabled: Απενεργοποιημένο - compactBuildingInfo: title: Σύντομες πληροφορίες κτηρίων - description: >- - Συντομεύει τα πλαίσια πληροφοριών για κτίρια δείχνοντας μόνο την ταχύτητα λειτουργίας τους. - Διαφορετικά εμφανίζεται μια περιγραφή και εικόνα. - + description: Συντομεύει τα πλαίσια πληροφοριών για κτίρια δείχνοντας μόνο την + ταχύτητα λειτουργίας τους. Διαφορετικά εμφανίζεται μια περιγραφή + και εικόνα. disableCutDeleteWarnings: title: Απενεργοποίηση προειδοποιήσεων αποκοπής / διαγραφής - description: >- - Απενεργοποιεί τους διαλόγους προειδοποίησης που εμφανίζονται όταν κόβεις / διαγράφεις περισσότερα από 100 κτήρια. - + description: Απενεργοποιεί τους διαλόγους προειδοποίησης που εμφανίζονται όταν + κόβεις / διαγράφεις περισσότερα από 100 κτήρια. enableColorBlindHelper: title: Λειτουργία αχρωματοψίας - description: Ενεργοποιεί διάφορα εργαλεία που επιτρέπουν να παίξεiw το παιχνίδι αν πάσχεις από αχρωματοψία. + description: Ενεργοποιεί διάφορα εργαλεία που επιτρέπουν να παίξεiw το παιχνίδι + αν πάσχεις από αχρωματοψία. rotationByBuilding: title: Περιστροφή ανά τύπο κτιρίου - description: >- - Κάθε τύπος κτιρίου θυμάται την περιστροφή που όρισες στην τελευταία χρήση. - Μπορεί να είναι πιο άνετο εάν κάνεις εναλλαγή κτηρίων μεταξύ τοποθέτησης διαφορετικών τύπων κτηρίων. - + description: Κάθε τύπος κτιρίου θυμάται την περιστροφή που όρισες στην τελευταία + χρήση. Μπορεί να είναι πιο άνετο εάν κάνεις εναλλαγή κτηρίων + μεταξύ τοποθέτησης διαφορετικών τύπων κτηρίων. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Συνδιασμοί πλήκτρων - hint: >- - Συμβουλή: Φρόντισε να χρησιμοποιήσεις τα πλήκτρα CTRL, SHIFT και ALT! Ενεργοποιούν διαφορετικές επιλογές τοποθέτησης. - + hint: "Συμβουλή: Φρόντισε να χρησιμοποιήσεις τα πλήκτρα CTRL, SHIFT και ALT! + Ενεργοποιούν διαφορετικές επιλογές τοποθέτησης." resetKeybindings: Επαναφορά συνδιασμών πλήκτρων - categoryLabels: general: Εφαρμογή ingame: Παιχνίδι @@ -780,7 +914,6 @@ keybindings: massSelect: Μαζική Επιλογή buildings: Συντομεύσεις Κτηρίων placementModifiers: Τροποποιητές τοποθέτησης - mappings: confirm: Επιβεβαίωση back: Πίσω @@ -789,41 +922,30 @@ keybindings: mapMoveDown: Κίνηση προς τα Κάτω mapMoveLeft: Κίνηση προς τα Αριστερά centerMap: Kεντράρισμα του χάρτη - mapZoomIn: Μεγέθυνση mapZoomOut: Σμίκρυνση createMarker: Δημηουργία Σημαδιού - menuOpenShop: Αναβαθμίσεις menuOpenStats: Στατιστικές - toggleHud: Εναλλαγή HUD toggleFPSInfo: Εναλλαγή FPS και Πληροφοριών εντοπισμού σφαλμάτων - - # --- Do not translate the values in this section - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - # --- - + belt: Μεταφορικός Ιμάντας + underground_belt: Σήραγγα + miner: Αποσπαστής + cutter: Κόπτης + rotater: Περιστροφέας + stacker: Στοίβαχτής + mixer: Αναμείκτης Χρωμάτων + painter: Βαφέας + trash: Κάδος απορριμμάτων rotateWhilePlacing: Περιστροφή - rotateInverseModifier: >- - Modifier: Αριστερόστροφη περιστροφή + rotateInverseModifier: "Modifier: Αριστερόστροφη περιστροφή" cycleBuildingVariants: Επιλογή Παραλλαγής confirmMassDelete: Επιβεβαίωση μαζικής διαγραφής cycleBuildings: Επιλογή Κτηρίου - massSelectStart: Κράτησε πατημένο και σείρε για να ξεκινήσεις massSelectSelectMultiple: Επίλεξε πολλές περιοχές massSelectCopy: Αντιγραφή περιοχής - placementDisableAutoOrientation: Απενεργοποίηση αυτόματου προσανατολισμού placeMultiple: Παραμονή σε λειτουργία τοποθέτησης placeInverse: Αντιστροφή αυτόματου προσανατολισμό του ιμάντα @@ -832,40 +954,49 @@ keybindings: exportScreenshot: Εξαγωγή ολόκληρης της βάσης ως εικόνα mapMoveFaster: Ταχλυτερη κίνηση lockBeltDirection: Ενεργοποίηση σχεδιαστή ιμάντα - switchDirectionLockSide: >- - Σχεδιαστής: Αλλαγή πλευράς - + switchDirectionLockSide: "Σχεδιαστής: Αλλαγή πλευράς" pipette: Σταγονόμετρο menuClose: Κλείσιμο μενού switchLayers: Εναλλαγή επιπέδων - advanced_processor: Μετατροπέας χρώματος - energy_generator: Γεννήτρια ενέργειας 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 στο github.

+ Αν θέλεις να συνεισφέρεις, δες το shapez.io στο github.

- Αυτό το παιχνίδι δεν θα ήταν δυνατό χωρίς τη μεγάλη κοινότητα Discord - γύρω από τα παιχνίδια μου - Σας συνιστώ πραγματικά να εγγραφείτε στον - discord server!

+ Αυτό το παιχνίδι δεν θα ήταν δυνατό χωρίς τη μεγάλη κοινότητα Discord + γύρω από τα παιχνίδια μου - Σας συνιστώ πραγματικά να εγγραφείτε στον + discord server!

- Το soundtrack δημιουργήθηκε από τους Peppsen - Είναι φοβεροί.

- - Τέλος, ευχαριστώ πολύ τον καλύτερο μου φίλο Niklas - Χωρίς - τις συνεδρίες μασ στο Factorio αυτό το παιχνίδι δεν θα υπήρχε. + Το soundtrack δημιουργήθηκε από τους Peppsen - Είναι φοβεροί.

+ Τέλος, ευχαριστώ πολύ τον καλύτερο μου φίλο Niklas - Χωρίς + τις συνεδρίες μασ στο Factorio αυτό το παιχνίδι δεν θα υπήρχε. changelog: title: Changelog - demo: features: restoringGames: Επαναφορά αποθηκευμένων παιχνιδιών @@ -873,5 +1004,65 @@ demo: oneGameLimit: Περιορίζεται σε ένα αποθηκευμένο παιχνίδι customizeKeybindings: Προσαρμογή συνδιασμών πλήκτρων exportingBase: Εξαγωγή ολόκληρης της βάσης ως εικόνα - settingNotAvailable: Δεν είναι διαθέσιμο στο 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. diff --git a/translations/base-en.yaml b/translations/base-en.yaml index a87e85f2..45cace79 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -25,67 +25,52 @@ 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. # This is the text shown above the Discord link - discordLink: Official Discord - Chat with me! + 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: @@ -268,14 +253,20 @@ dialogs: createMarker: 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) + desc: Give it a meaningful name, you can also include a short key of a shape (Which you can generate here) + + editSignal: + title: Set Signal + descItems: >- + Choose a pre-defined item: + descShortKey: ... or enter the short key of a shape (Which you can generate here) markerDemoLimit: desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers! 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 @@ -350,6 +341,7 @@ ingame: notifications: newUpgrade: A new upgrade is available! gameSaved: Your game has been saved. + freeplayLevelComplete: Level has been completed! # The "Upgrades" window shop: @@ -359,9 +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] - maximumLevel: MAXIMUM LEVEL (Speed x) # The "Statistics" window @@ -370,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' @@ -388,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? @@ -431,12 +414,85 @@ ingame: 1_3_expand: >- This is NOT an idle game! Build more extractors and belts to finish the goal quicker.

Tip: Hold SHIFT to place multiple extractors, and use R to rotate them. + 2_1_place_cutter: >- + Now place a Cutter to cut the circles in two halves!

+ PS: The cutter always cuts from top to bottom regardless of its orientation. + + 2_2_place_trash: >- + The cutter can clog and stall!

+ Use a trash to get rid of the currently (!) not needed waste. + + 2_3_more_cutters: >- + Good job! Now place 2 more cutters to speed up this slow process!

+ PS: Use the 0-9 hotkeys to access buildings faster! + + 3_1_rectangles: >- + Now let's extract some rectangles! Build 4 extractors and connect them to the hub.

+ PS: Hold SHIFT while dragging a belt to activate the belt planner! + + 21_1_place_quad_painter: >- + Place the quad painter and get some circles, white and red color! + + 21_2_switch_to_wires: >- + Switch to the wires layer by pressing E!

+ Then connect all four inputs of the painter with cables! + + 21_3_place_button: >- + Awesome! Now place a Switch and connect it with wires! + + 21_4_press_button: >- + Press the switch to make it emit a truthy signal and thus activate the painter.

+ PS: You don't have to connect all inputs! Try wiring only two. + # 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 advantages of the standalone version! + get_on_steam: Get on Steam + + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + + markers: + title: ∞ Markers + desc: Never get lost in your factory! + + wires: + title: Wires + desc: An entirely new dimension! + + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + + support: + title: Support me + desc: I develop it in my spare time! + # All shop upgrades shopUpgrades: belt: @@ -458,6 +514,7 @@ buildings: deliver: Deliver toUnlock: to unlock levelShortcut: LVL + endOfDemo: End of Demo belt: default: @@ -509,10 +566,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: @@ -522,13 +579,13 @@ buildings: name: Rotate (CCW) description: Rotates shapes counter-clockwise by 90 degrees. rotate180: - name: Rotate (180) + name: Rotate (180°) description: Rotates shapes by 180 degrees. 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: @@ -565,7 +622,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 @@ -573,32 +630,32 @@ buildings: wire_tunnel: default: - name: &wire_tunnel Wire Tunnel - description: Allows to cross two wires without connecting them. + name: &wire_tunnel Wire Crossing + 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: name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. + 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. + description: Emits a boolean "1" if the input is not truthy. (Truthy means shape, color or boolean "1") xor: name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. + description: Emits a boolean "1" if one of the inputs is truthy, but not both. (Truthy means shape, color or boolean "1") or: name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means shape, color or boolean "1") transistor: default: @@ -622,7 +679,7 @@ buildings: reader: default: name: &reader Belt Reader - description: Allows to measure belt throughput. Outputs the last read item on the wires layer (once unlocked). + description: Allows to measure the average belt throughput. Outputs the last read item on the wires layer (once unlocked). analyzer: default: @@ -632,20 +689,20 @@ buildings: comparator: default: name: &comparator Compare - description: Returns boolean "1" if both items 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: name: &virtual_processor Virtual Cutter - description: Computes + description: Virtually cuts the shape into two halves. rotater: name: Virtual Rotater - description: Virtually rotates the shape by 90 degrees clockwise. + description: Virtually rotates the shape clockwise. unstacker: name: Virtual Unstacker - description: Returns the topmost layer to the right, and the remaining ones on the left. + description: Virtually extracts the topmost layer to the right output and the remaining ones to the left. stacker: name: Virtual Stacker @@ -653,13 +710,18 @@ 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: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the wires layer on the regular layer. 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 @@ -680,7 +742,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 @@ -723,14 +785,8 @@ storyRewards: title: Double Painting 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_painter_quad: - title: Quad Painting - desc: >- - You have unlocked a variant of the painter - It allows you to paint each part of the shape individually!

- Connect each slot you'd like to paint with a truthy signal (shape, item or boolean "1") on the wires layer! - reward_storage: - title: Storage Buffer + title: Storage 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! @@ -740,42 +796,54 @@ storyRewards: desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). reward_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: Rotater (180°) + desc: You just unlocked the 180 degrees rotater! - It allows you to rotate a shape by 180 degress (Surprise! :D) - reward_wires_filters_and_levers: + reward_wires_painter_and_levers: title: >- - Wires: Filters & Levers + 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!

- Since it can be overwhelming a bit, I added a small tutorial - Be sure to have tutorials enabled in the settings! + 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.

+ PS: Enable hints in the settings to activate the wires tutorial! + + 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 or 0) to entirely activate or disable it. reward_display: title: Display desc: >- - You have unlocked the Display! Connect a wires signal to it to present a color, shape or boolean! + 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). + 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 perform AND, OR, XOR and NOT boolean 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: 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!

+ 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 (This is cool, I swear!).

+ - 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. + - Continue to play regulary.

+ Whatever you choose, remember to have fun! # Special reward, which is shown when there is no reward actually no_reward: @@ -786,13 +854,19 @@ storyRewards: no_reward_freeplay: title: Next level desc: >- - Congratulations! By the way, more content is planned for the standalone! + Congratulations! reward_freeplay: title: Freeplay desc: >- You did it! You unlocked the free-play mode! This means that shapes are now randomly generated!

- Since the hub will only require low quantities, I highly recommend to build a machine which automatically delivers the requested shape! + 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_demo_end: + title: End of Demo + desc: >- + You have reached the end of the demo version! settings: title: Settings @@ -909,7 +983,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 @@ -939,7 +1013,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 @@ -968,9 +1042,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) @@ -978,9 +1052,19 @@ 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. + + mapResourcesScale: + title: Map Resources Size + description: >- + Controls the size of the shapes on the map overview (when zooming out). keybindings: title: Keybindings @@ -1036,8 +1120,7 @@ keybindings: wire: *wire constant_signal: *constant_signal logic_gate: Logic Gate - lever: Switch (regular) - lever_wires: Switch (wires) + lever: *lever filter: *filter wire_tunnel: *wire_tunnel display: *display @@ -1046,6 +1129,7 @@ keybindings: transistor: *transistor analyzer: *analyzer comparator: *comparator + item_producer: Item Producer (Sandbox) # --- pipette: Pipette @@ -1059,7 +1143,8 @@ keybindings: lockBeltDirection: Enable belt planner switchDirectionLockSide: >- Planner: Switch side - + copyWireValue: >- + Wires: Copy value below cursor massSelectStart: Hold and drag to start massSelectSelectMultiple: Select multiple areas massSelectCopy: Copy area @@ -1117,7 +1202,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. @@ -1128,19 +1213,19 @@ tips: - 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 18 on your own before seeking for help! + - 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. + - 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! @@ -1149,3 +1234,6 @@ tips: - 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. diff --git a/translations/base-es.yaml b/translations/base-es.yaml index dbac38d2..0d26afcd 100644 --- a/translations/base-es.yaml +++ b/translations/base-es.yaml @@ -1,113 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io es un juego sobre construir fábricas para automatizar la creación y combinación de figuras cada vez más complejas en un mapa infinito. + 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. + 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. - # This is the text shown above the Discord link - discordLink: Discord oficial - ¡Chatea conmigo! + A medida que el nivel aumenta, las formas se vuelven más y más complejas, y tienes que extenderte en un mapa infinito. - # 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] + Y por si fuera poco, también tienes que producir exponencialmente más para satisfacer las demandas - ¡lo único que ayuda es escalar! - 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. + Mientras que sólo procesas formas al principio, tienes que colorearlas después - ¡para ello tienes que extraer y mezclar los colores! - 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]! - - 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. - - 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 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] + 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. + Be sure to check out my trello board for the full roadmap! global: loading: Cargando error: Error - - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "." - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider: . decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: hace un segundo xSecondsAgo: hace segundos oneMinuteAgo: hace un minuto @@ -116,14 +67,10 @@ global: xHoursAgo: hace horas oneDayAgo: hace un día xDaysAgo: hace días - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: min s hoursAndMinutesShort: h min - xMinutes: minutos - keys: tab: TAB control: CTRL @@ -131,13 +78,9 @@ global: escape: ESC shift: SHIFT space: ESPACIO - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Versión de prueba - intro: >- - ¡Obtén el juego completo para desbloquear todas las características! - + intro: ¡Obtén el juego completo para desbloquear todas las características! mainMenu: play: Jugar continue: Continuar @@ -149,14 +92,11 @@ mainMenu: discordLink: Servidor de Discord oficial helpTranslate: ¡Ayuda a traducirlo! madeBy: Desarrollado por - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - ¡Lo siento, pero el juego funcionará despacio en tu navegador! Obtén el juego completo o descarga Chrome para la experiencia completa. - + browserWarning: ¡Lo siento, pero el juego funcionará despacio en tu navegador! + Obtén el juego completo o descarga Chrome para la experiencia completa. savegameLevel: Nivel savegameLevelUnknown: Nivel desconocido - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,112 +110,101 @@ dialogs: viewUpdate: Ver actualización showUpgrades: Ver mejoras showKeybindings: Ver atajos de teclado - importSavegameError: title: Error de importación - text: >- - Fallo al importar tu partida guardada: - + text: "Fallo al importar tu partida guardada:" importSavegameSuccess: title: Partida guardada importada - text: >- - Tu partida guardada ha sido importada con éxito. - + text: Tu partida guardada ha sido importada con éxito. gameLoadFailure: title: Error de carga - text: >- - No se ha podido cargar la partida guardada: - + 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: - + text: "Fallo al borrar la partida guardada:" restartRequired: title: Reinicio requerido - text: >- - Tienes que reinciar la partida para aplicar los cambios. - + text: Tienes que reinciar la partida para aplicar los cambios. editKeybinding: title: Cambiar atajos de teclado - desc: Pulsa la tecla o botón del ratón que quieras asignar, o escape para cancelar. - + desc: Pulsa la tecla o botón del ratón que quieras asignar, o escape para + cancelar. resetKeybindingsConfirmation: title: Reiniciar atajos de teclado - desc: Esto devolverá todos los atajos de teclado a los valores por defecto. Por favor, confirma. - + desc: Esto devolverá todos los atajos de teclado a los valores por defecto. Por + favor, confirma. keybindingsResetOk: title: Atajos de teclado reiniciados desc: ¡Los atajos de teclado han sito reiniciados a los valores por defecto! - featureRestriction: title: Versión de prueba - desc: Has intentado acceder a una característica () que no está disponible en la versión de prueba. ¡Considera obtener el juego completo para la experiencia completa! - + desc: Has intentado acceder a una característica () que no está + disponible en la versión de prueba. ¡Considera obtener el juego + completo para la experiencia completa! oneSavegameLimit: title: Partidas guardadas limitadas - desc: Solo puedes tener una partida guardada a la vez en la versión de prueba. ¡Por favor, elimina la ya existente u obtén el juego completo! - + desc: Solo puedes tener una partida guardada a la vez en la versión de prueba. + ¡Por favor, elimina la ya existente u obtén el juego completo! updateSummary: title: ¡Nueva actualización! - desc: >- - Estos son los cambios desde la última vez que jugaste: - + desc: "Estos son los cambios desde la última vez que jugaste:" upgradesIntroduction: title: Desbloquear mejoras - desc: >- - Todas las figuras se pueden usar para desbloquear mejoras - ¡No destruyas tus fábricas anteriores! - La pestaña de mejoras está en la esquina superior derecha de la pantalla. - + desc: Todas las figuras se pueden usar para desbloquear mejoras - ¡No + destruyas tus fábricas anteriores! La pestaña de mejoras + está en la esquina superior derecha de la pantalla. massDeleteConfirm: title: Confirmar borrado - desc: >- - ¡Estás borrando muchos edificios ( para ser exactos)! ¿Estás seguro de querer hacer esto? - + desc: ¡Estás borrando muchos edificios ( para ser exactos)! ¿Estás seguro + de querer hacer esto? massCutConfirm: title: Confirmar corte - desc: >- - ¡Estás cortando muchos edificios ( para ser exactos)! ¿Estas seguro de que quieres hacer esto? - + desc: ¡Estás cortando muchos edificios ( para ser exactos)! ¿Estas seguro + de que quieres hacer esto? massCutInsufficientConfirm: title: Confirm cut - desc: >- - ¡No puedes permitirte pegar este área! ¿Estás seguro de que quieres cortarlo? - + desc: ¡No puedes permitirte pegar este área! ¿Estás seguro de que quieres + cortarlo? blueprintsNotUnlocked: title: No desbloqueado todavía - desc: >- - ¡Completa el nivel 12 para desbloquear los Planos! - + desc: ¡Completa el nivel 12 para desbloquear los Planos! keybindingsIntroduction: title: Atajos de teclado útiles - desc: >- - El juego tiene muchos atajos de teclado que facilitan la tarea de construir grandes fábricas. - ¡Aquí hay algunos, pero asegúrate de comprobar los atajos de teclado!

- CTRL + Arrastrar: Selecciona un área.
- SHIFT: Mánten pulsado para colocar varias veces un edificio.
- ALT: Invierte la orientación de las cintas transportadoras colocadas.
- + desc: "El juego tiene muchos atajos de teclado que facilitan la tarea de + construir grandes fábricas. ¡Aquí hay algunos, pero asegúrate de + comprobar los atajos de teclado!

CTRL + Arrastrar: Selecciona un área.
+ SHIFT: Mánten pulsado para colocar + varias veces un edificio.
ALT: + Invierte la orientación de las cintas transportadoras + colocadas.
" 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! - + desc: Solo puedes crear dos marcadores en la versión de prueba. ¡Obtén el juego + completo para marcadores ilimitados! exportScreenshotWarning: title: Exportar captura de pantalla - desc: Has solicitado una captura de pantalla de tu base. Por favor, ten en cuenta que puede tardar bastante en las bases grandes. ¡E incluso crashear tu juego! - + desc: Has solicitado una captura de pantalla de tu base. Por favor, ten en + cuenta que puede tardar bastante en las bases grandes. ¡E incluso + crashear tu juego! + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Mover selectBuildings: Seleccionar área @@ -296,8 +225,6 @@ ingame: clearSelection: Limpiar selección pipette: Cuentagotas switchLayers: Cambiar capas - - # Names of the colors, used for the color blind mode colors: red: Rojo green: Verde @@ -308,18 +235,9 @@ ingame: white: Blanco black: Negro uncolored: Gris - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Pulsa para rotar por las distintas variantes. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Tecla: - + hotkeyLabel: "Tecla: " infoTexts: speed: Velocidad range: Rango @@ -327,36 +245,21 @@ ingame: oneItemPerSecond: 1 elemento / segundo itemsPerSecond: elementos / s itemsPerSecondDouble: (x2) - tiles: casillas - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nivel completed: Completado unlockText: ¡Has desbloqueado ! buttonNextLevel: Siguiente nivel - - # Notifications on the lower right notifications: newUpgrade: ¡Una nueva mejora está disponible! gameSaved: Se ha guardado la partida. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Mejoras buttonUnlock: Mejorar - - # Gets replaced to e.g. "Tier IX" tier: Nivel - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: NIVEL MÁXIMO (Velocidad x) - - # The "Statistics" window statistics: title: Estadísticas dataSources: @@ -365,62 +268,88 @@ ingame: description: Muestra la cantidad de figuras guardadas en tu edificio central. produced: title: Producido - description: Muestra todas las figuras que tu fábrica al completo produce, incluyendo productos intermedios. + description: Muestra todas las figuras que tu fábrica al completo produce, + incluyendo productos intermedios. delivered: title: Entregados description: Muestra las figuras que son entregadas a tu edificio central. noShapesProduced: Todavía no se han producido figuras. - - # Displays the shapes per minute, e.g. '523 / min' - shapesPerMinute: / min - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Tiempo de juego - buildingsPlaced: Edificios beltsPlaced: Cintas transportadoras - - buttons: - continue: Continuar - settings: Opciones - menu: Volver al menú principal - - # Bottom left tutorial hints tutorialHints: title: ¿Necesitas ayuda? showHint: Mostrar pista hideHint: Cerrar - - # When placing a blueprint blueprintPlacer: cost: Coste - - # Map markers waypoints: waypoints: Marcadores hub: Edificio Central - description: Click izquierdo sobre un marcador para ir ahí, click derecho para borrarlo.

Pulsa para crear un marcador de la vista actual o click derecho para crear un marcador en la posición seleccionada. + description: Click izquierdo sobre un marcador para ir ahí, click derecho para + borrarlo.

Pulsa para crear un marcador de la + vista actual o click derecho para crear un marcador + en la posición seleccionada. creationSuccessNotification: El marcador ha sido creado. - - # Shape viewer shapeViewer: title: Capas empty: Vacío copyKey: Copiar - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: ¡Coloca un extractor encima de un círculo para extraerlo! - 1_2_conveyor: >- - ¡Conecta el extractor con una cinta transportadora a tu edificio central!

Pista: ¡Pulsa y arrastra la cinta transportadora con el ratón! - - 1_3_expand: >- - ¡Esto NO es un "juego de esperar"! Construye más extractores y cintas transportadoras para completar el objetivo más rápido.

Pista: Mantén pulsado SHIFT para colocar varios extractores y usa R para rotarlos. - -# All shop upgrades + 1_1_extractor: ¡Coloca un extractor encima de un + círculo para extraerlo! + 1_2_conveyor: "¡Conecta el extractor con una cinta + transportadora a tu edificio central!

Pista: + ¡Pulsa y arrastra la cinta transportadora con + el ratón!" + 1_3_expand: '¡Esto NO es un "juego de esperar"! Construye más + extractores y cintas transportadoras para completar el objetivo + más rápido.

Pista: Mantén pulsado SHIFT + para colocar varios extractores y usa R para + rotarlos.' + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Cintas transportadoras, Distribuidores y Túneles @@ -434,245 +363,392 @@ shopUpgrades: painting: name: Mezclado y Pintado description: Velocidad x → x - -# Buildings and their name / description buildings: hub: deliver: Entregar toUnlock: para desbloquear levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Cinta Transportadora - description: Transporta elementos, mantén pulsado y arrastra para colocar varios. - + name: Cinta Transportadora + description: Transporta elementos, mantén pulsado y arrastra para colocar + varios. wire: default: - name: &wire Cable + name: Cable description: Te permite transportar energía - - miner: # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + miner: default: - name: &miner Extractor + name: Extractor description: Colócalo sobre una figura o un color para extraerlo. - chainable: name: Extractor (Encadenado) - description: Colócalo sobre una figura o un color para extraerlo. Puede ser encadenado. - - underground_belt: # Internal name for the Tunnel + description: Colócalo sobre una figura o un color para extraerlo. Puede ser + encadenado. + underground_belt: default: - name: &underground_belt Túnel - description: Permite contruir un túnel para transportar los elementos por debajo de edificios y otras cintas transportadoras. - + name: Túnel + description: Permite contruir un túnel para transportar los elementos por debajo + de edificios y otras cintas transportadoras. tier2: name: Túnel nivel II - description: Permite contruir un túnel para transportar los elementos por debajo de edificios y otras cintas transportadoras. - - splitter: # Internal name for the Balancer - default: - name: &splitter Balanceador - description: Multifuncional - Distribuye equitativamente todas las entradas a todas las salidas. - - compact: - name: Fusionador (compacto) - description: Junta dos cintas transportadoras en una. - - compact-inverse: - name: Fusionador (compacto) - description: Junta dos cintas transportadoras en una. - + description: Permite contruir un túnel para transportar los elementos por debajo + de edificios y otras cintas transportadoras. cutter: default: - name: &cutter Cortador - description: Corta las figuras de arriba abajo y saca ambas mitades. ¡Si solo usas una parte, asegúrate de destruir la otra parte o se parará! + name: Cortador + description: Corta las figuras de arriba abajo y saca ambas mitades. + ¡Si solo usas una parte, asegúrate de destruir la otra parte o + se parará! quad: name: Cortador (Cuádruple) - description: Corta figuras en cuatro partes. ¡Si solo usas una parte, asegúrate de destruir las otras partes o se parará! - - advanced_processor: - default: - name: &advanced_processor Inversor de color - description: Invierte un color o una figura - + description: Corta figuras en cuatro partes. ¡Si solo usas una parte, + asegúrate de destruir las otras partes o se parará! rotater: default: - name: &rotater Rotador + name: Rotador description: Rota las figuras en sentido horario 90 grados. ccw: name: Rotador (Inverso) description: Rota las figuras en sentido antihorario 90 grados. - fl: + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Apilador - description: Apila ambos elementos. Si no se pueden unir, el elemento de la derecha se coloca encima del elemento de la izquierda. - + name: Apilador + description: Apila ambos elementos. Si no se pueden unir, el elemento de la + derecha se coloca encima del elemento de la izquierda. mixer: default: - name: &mixer Mezclador de colores + name: Mezclador de colores description: Mezcla dos colores usando mezcla aditiva. - painter: default: - name: &painter Pintor - description: &painter_desc Colorea la figura completa de la entrada izquierda con el color de la entrada de arriba. - + name: Pintor + description: Colorea la figura completa de la entrada izquierda con el color de + la entrada de arriba. mirrored: - name: *painter - description: *painter_desc - + name: Pintor + description: Colorea la figura completa de la entrada izquierda con el color de + la entrada de arriba. double: name: Pintor (Doble) - description: Colorea las figuras de las entradas de la izquierda con el color de la entrada de arriba. + description: Colorea las figuras de las entradas de la izquierda con el color de + 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: &trash Basurero + name: Basurero description: Acepta formas desde todos los lados y las destruye. Para siempre. - - storage: - name: Almacenamiento. - description: Guarda el exceso de elementos, hasta cierta cantidad. Puede ser usado para controlar el desborde de elementos. - - energy_generator: - deliver: Entregar - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: Para - + balancer: default: - name: &energy_generator Generador de energía - description: Genera energía consumiendo figuras. - - wire_crossings: - default: - name: &wire_crossings Divisor de cables - description: Divide un cable en dos - + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Fusionador de cables - description: Fusiona dos cables en uno - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 horario 90 grados. - + desc: ¡El rotador se ha desbloqueado! Rota figuras en sentido + horario 90 grados. reward_painter: title: Pintor - desc: >- - El pintor se ha desbloqueado - ¡Extrae vetas de color (igual que lo haces con las figuras) y combínalas con una figura en el pintor para colorearlas!

PD: Si tienes alguna forma de daltonismo, ¡hay un modo para daltónicos en los ajustes! - + desc: "El pintor se ha desbloqueado - ¡Extrae vetas de color + (igual que lo haces con las figuras) y combínalas con una figura en + el pintor para colorearlas!

PD: Si tienes alguna forma de + daltonismo, ¡hay un modo para daltónicos en los + ajustes!" reward_mixer: title: Mezclador de color - desc: El mezclador se ha desbloqueado - ¡Combina dos colores usando mezcla aditiva con este edificio! - + desc: El mezclador se ha desbloqueado - ¡Combina dos colores + usando mezcla aditiva con este edificio! reward_stacker: title: Apilador - desc: ¡Ahora puedes combinar figuras con el apilador! Ambas entradas son combinadas, y si pueden ser colocadas una junto a la otra serán fusionadas. ¡Si no, la entrada derecha será apilada encima de la entrada izquierda! - + desc: ¡Ahora puedes combinar figuras con el apilador! Ambas + entradas son combinadas, y si pueden ser colocadas una junto a la + otra serán fusionadas. ¡Si no, la entrada derecha + 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 elementos por debajo de edificios u otras cintas! - + desc: El túnel se ha desbloqueado - ¡Ahora puedes transportar + elementos por debajo de edificios u otras cintas! reward_rotater_ccw: title: Rotador inverso - desc: Has desbloqueado una variante del rotador - ¡Te permite rotar en sentido antihorario! Para construirlo selecciona el rotador y pulsa 'T' para ciclar por sus variantes - + desc: Has desbloqueado una variante del rotador - ¡Te permite + rotar en sentido antihorario! Para construirlo selecciona el rotador + 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 mayor rango, y ahora puedes mezclar los distintos tipos de túneles! - - reward_splitter_compact: - title: Balanceador compacto - desc: Has desbloqueado una variante compacta del balanceador - ¡Acepta dos entradas y las junta en una salida! - + desc: Has desbloqueado una nueva variante del túnel - ¡Tiene un + mayor rango, y ahora puedes mezclar los distintos + tipos de túneles! reward_cutter_quad: title: Cortador cuádruple - desc: Has desbloqueado una variante del cortador - ¡Permite cortar figuras en cuatro partes en vez de solo dos! - + desc: Has desbloqueado una variante del cortador - ¡Permite + cortar figuras en cuatro partes en vez de solo dos! reward_painter_double: title: Pintor doble - desc: Has desbloqueado una variante del pintor - ¡Funciona como un pintor normal pero procesa dos figuras a la vez, consumiendo solo un color en vez de dos! - - reward_painter_quad: - title: Pintor cuádruple - desc: Has desbloqueado una variante del pintor - ¡Permite pintar cada parte de una figura individualmente! - + desc: Has desbloqueado una variante del pintor - ¡Funciona como + un pintor normal pero procesa dos figuras a la vez, + 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! Selecciona un área (mantén pulsado CTRL, después arrastra con el ratón), y pulsa 'C' para copiarlo.

Pegarlo no es gratis, necesitas producir figuras de planos para poder permitírtelo (Esas que acabas de entregar). - - # Special reward, which is shown when there is no reward actually + desc: ¡Ahora puedes copiar y pegar partes de tu fábrica! + Selecciona un área (mantén pulsado CTRL, después arrastra con el + ratón), y pulsa 'C' para copiarlo.

Pegarlo no es + gratis, necesitas producir figuras de + planos para poder permitírtelo (Esas que acabas de + entregar). no_reward: title: Siguiente nivel - desc: >- - Este nivel no da recompensa, ¡pero el siguiente sí!

PD: Es mejor que no destruyas la fábrica que tienes - ¡Necesitarás todas esas figuras más adelante para desbloquear mejoras! - + desc: "Este nivel no da recompensa, ¡pero el siguiente sí!

PD: Es mejor + que no destruyas la fábrica que tienes - ¡Necesitarás + todas esas figuras más adelante para + desbloquear mejoras!" no_reward_freeplay: title: Siguiente nivel - desc: >- - ¡Felicidades! ¡Por cierto, hay más contenido planeado para el juego completo! - + desc: ¡Felicidades! ¡Por cierto, hay más contenido planeado para el juego + 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Opciones categories: general: General userInterface: User Interface advanced: Avanzado - + performance: Performance versionBadges: dev: Desarrollo staging: Escenificación prod: Producción buildDate: Generado - labels: uiScale: title: Escala de la interfaz - description: >- - Cambia el tamaño de la interfaz de usuario. La interfaz se seguirá escalando dependiendo de la resolución de tu dispositivo, pero esta opción controla la cantidad de escalado. + description: Cambia el tamaño de la interfaz de usuario. La interfaz se seguirá + escalando dependiendo de la resolución de tu dispositivo, pero + esta opción controla la cantidad de escalado. scales: super_small: Muy pequeño small: Pequeño regular: Mediano large: Grande huge: Enorme - autosaveInterval: title: Intervalo de autoguardado - description: >- - Controla con qué frecuencia se guarda el juego automáticamente. También se puede desactivar por completo. - + description: Controla con qué frecuencia se guarda el juego automáticamente. + También se puede desactivar por completo. intervals: one_minute: 1 minuto two_minutes: 2 minutos @@ -680,22 +756,19 @@ settings: ten_minutes: 10 minutos twenty_minutes: 20 minutos disabled: Desactivado - scrollWheelSensitivity: title: Sensibilidad del zoom - description: >- - Cambia cómo de sensible es el zoom (Tanto la rueda del ratón como el panel táctil) + description: Cambia cómo de sensible es el zoom (Tanto la rueda del ratón como + el panel táctil) sensitivity: super_slow: Muy lento slow: Lento regular: Normal fast: Rápido super_fast: Muy rápido - movementSpeed: title: Velocidad de movimiento - description: >- - Cambia cómo de rápido se mueve la vista usando el teclado. + description: Cambia cómo de rápido se mueve la vista usando el teclado. speeds: super_slow: Super lento slow: Lento @@ -703,87 +776,124 @@ settings: fast: Rápido super_fast: Súper rápido extremely_fast: Extremadamente rápido - language: title: Idioma - description: >- - Cambia el idioma. ¡Todas las traducciones son contribuciones de los usuarios y pueden estar incompletas! - + description: Cambia el idioma. ¡Todas las traducciones son contribuciones de los + usuarios y pueden estar incompletas! enableColorBlindHelper: title: Modo para daltónicos - description: >- - Activa varias herramientas que facilitan jugar si tienes alguna forma de daltonismo. - + description: Activa varias herramientas que facilitan jugar si tienes alguna + forma de daltonismo. fullscreen: title: Pantalla Completa - description: >- - Se recomienda jugar en pantalla completa para conseguir la mejor experiencia. Solo disponible en el juego completo. - + description: Se recomienda jugar en pantalla completa para conseguir la mejor + experiencia. Solo disponible en el juego completo. soundsMuted: title: Silenciar sonidos - description: >- - Si está habilitado, silencia todos los efectos de sonido. - + description: Si está habilitado, silencia todos los efectos de sonido. musicMuted: title: Silenciar música - description: >- - Si está habilitado, silencia toda la música. - + description: Si está habilitado, silencia toda la música. theme: title: Tema del juego - description: >- - Elige el tema del juego (claro/oscuro). + description: Elige el tema del juego (claro/oscuro). themes: dark: Oscuro light: Claro - refreshRate: title: Objetivo de simulación - description: >- - Si tienes un monitor de 144hz, cambia la tasa de refresco. Así el juego se ejecutará correctamente a una mayor tasa de refresco. Esto puede disminuir los FPS si tu ordenador no es lo suficientemente rápido. - + description: Si tienes un monitor de 144hz, cambia la tasa de refresco. Así el + juego se ejecutará correctamente a una mayor tasa de refresco. + Esto puede disminuir los FPS si tu ordenador no es lo + suficientemente rápido. alwaysMultiplace: title: Colocación múltiple - description: >- - Si está activado, todos los edificios se quedarán seleccionados después de colocarlos hasta que lo canceles. Equivale a pulsar SHIFT permanentemente. - + description: Si está activado, todos los edificios se quedarán seleccionados + después de colocarlos hasta que lo canceles. Equivale a pulsar + SHIFT permanentemente. offerHints: title: Pistas y tutoriales - description: >- - Actívalo para recibir pistas y tutoriales mientras juegas. También oculta algunos elementos de la interfaz hasta cierto nivel para hacer más fácil la introducción al juego. - + description: Actívalo para recibir pistas y tutoriales mientras juegas. También + oculta algunos elementos de la interfaz hasta cierto nivel para + hacer más fácil la introducción al juego. enableTunnelSmartplace: title: Túneles inteligentes - description: >- - Si está activado, al colocar túneles se eliminará automáticamente las cintas transportadoras innecesarias. También te permite arrastrar con el ratón y los túneles restantes serán eliminados. - + description: Si está activado, al colocar túneles se eliminará automáticamente + las cintas transportadoras innecesarias. También te permite + arrastrar con el ratón y los túneles restantes serán eliminados. vignette: title: Viñeta - description: >- - Activa el efecto viñeta que oscurece las esquinas de la pantalla y hace el texto más fácil de leer. - + description: Activa el efecto viñeta que oscurece las esquinas de la pantalla y + hace el texto más fácil de leer. rotationByBuilding: title: Rotación por tipo de edificio - description: >- - Cada tipo de edificio recuerda la última rotación que le diste individualmente. Esto puede ser más cómodo si cambias a menudo entre colocar diferentes tipos de edificio. - + description: Cada tipo de edificio recuerda la última rotación que le diste + individualmente. Esto puede ser más cómodo si cambias a menudo + entre colocar diferentes tipos de edificio. compactBuildingInfo: title: Información compacta de edificios - description: >- - Acorta la caja de información mostrando solo sus ratios. Si no, se mostrará una descripción y una imagen. - + description: Acorta la caja de información mostrando solo sus ratios. Si no, se + mostrará una descripción y una imagen. disableCutDeleteWarnings: title: Deshabilitar las advertencias de cortar/eliminar - description: >- - Deshabilita los diálogos de advertencia que se muestran cuando se cortan/eliminan más de 100 elementos. - + description: Deshabilita los diálogos de advertencia que se muestran cuando se + cortan/eliminan más de 100 elementos. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Atajos de teclado - hint: >- - Pista: ¡Asegúrate de usar CTRL, SHIFT y ALT! Habilitan distintas opciones de colocación. - + hint: "Pista: ¡Asegúrate de usar CTRL, SHIFT y ALT! Habilitan distintas opciones + de colocación." resetKeybindings: Reestablecer atajos de teclado - categoryLabels: general: Aplicación ingame: Juego @@ -792,7 +902,6 @@ keybindings: massSelect: Selección masiva buildings: Atajos de edificios placementModifiers: Modificadores de colocación - mappings: confirm: Confirmar back: Atrás @@ -802,58 +911,63 @@ keybindings: mapMoveLeft: Mover a la izquierda mapMoveFaster: Mover más rápido centerMap: Centrar mapa - mapZoomIn: Acercarse mapZoomOut: Alejarse createMarker: Crear marcador - menuOpenShop: Mejoras menuOpenStats: Estadísticas menuClose: Cerrar menú - toggleHud: Activar HUD toggleFPSInfo: Activar FPS e información de depurado switchLayers: Cambiar capas exportScreenshot: Exportar la base completa como imagen - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Cinta Transportadora + underground_belt: Túnel + miner: Extractor + cutter: Cortador + rotater: Rotador + stacker: Apilador + mixer: Mezclador de colores + painter: Pintor + trash: Basurero + wire: Cable pipette: Cuentagotas rotateWhilePlacing: Rotar - rotateInverseModifier: >- - Modificador: Rotar inversamente + rotateInverseModifier: "Modificador: Rotar inversamente" cycleBuildingVariants: Ciclar variantes confirmMassDelete: Borrar área pasteLastBlueprint: Pegar último plano cycleBuildings: Ciclar edificios lockBeltDirection: Activar planificador de cintas transportadoras - switchDirectionLockSide: >- - Planner: Cambiar sentido - + switchDirectionLockSide: "Planner: Cambiar sentido" massSelectStart: Mantén pulsado y arrastra para empezar massSelectSelectMultiple: Seleccionar múltiples áreas massSelectCopy: Copiar área massSelectCut: Cortar área - placementDisableAutoOrientation: Desactivar orientación automática placeMultiple: Permanecer en modo de construcción placeInverse: Invierte automáticamente la orientación de las cintas transportadoras - + 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: Sobre el juego body: >- - Este juego es de código abierto y ha sido desarrollado por Tobias Springer (Ese soy yo).

+ Este juego es de código abierto y ha sido desarrollado por Tobias Springer + (Ese soy yo).

Si quieres contribuir, revisa shapez.io en github.

@@ -862,10 +976,8 @@ about: La banda sonora ha sido creada por Peppsen - Es genial.

Por último, muchísimas gracias a mi amigo Niklas - Sin nuestras sesiones de Factorio, este juego nunca existiría. - changelog: title: Historial de cambios - demo: features: restoringGames: Recuperando partidas guardadas @@ -873,5 +985,65 @@ demo: oneGameLimit: Limitado a una partida guardada customizeKeybindings: Personalizando atajos de teclado exportingBase: Exportando la base completa como imagen - settingNotAvailable: No disponible en la versión de prueba. +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. diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index 17ad35d6..337f36ef 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -1,112 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io on peli tehtaiden rakentamisesta, joiden avulla automatisoidaan yhä monimutkaisempien muotojen luonti and yhdisteleminen loputtomassa maailmassa. + shortText: shapez.io on peli tehtaiden rakentamisesta, joiden avulla + automatisoidaan yhä monimutkaisempien muotojen luonti and yhdisteleminen + loputtomassa maailmassa. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # 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] + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - 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. + 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! - 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]! + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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. + 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. - 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] - - discordLink: Official Discord - Chat with me! - global: loading: Ladataan error: Virhe - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: ∞ - time: - # Used for formatting past time dates oneSecondAgo: yksi sekunti sitten xSecondsAgo: sekunttia sitten oneMinuteAgo: yksi minuutti sitten @@ -115,14 +67,10 @@ global: xHoursAgo: tuntia sitten oneDayAgo: yksi päivä sitten xDaysAgo: päivää sitten - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minuuttia - keys: tab: SARKAIN control: CTRL @@ -130,13 +78,9 @@ global: escape: ESC shift: VAIHTO space: VÄLILYÖNTI - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demoversio - intro: >- - Hanki itsenäinen peli avataksesi kaikki omunaisuudet! - + intro: Hanki itsenäinen peli avataksesi kaikki omunaisuudet! mainMenu: play: Pelaa continue: Jatka @@ -148,14 +92,11 @@ mainMenu: discordLink: Virallinen Discord Palvelin helpTranslate: Auta kääntämään! madeBy: Pelin on tehnyt - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Anteeksi, mutta pelin tiedetään toimivan huonosti selaimellasi! Hanki itsenäinen versio tai lataa Chrome täyttä tukea varten. - + browserWarning: Anteeksi, mutta pelin tiedetään toimivan huonosti selaimellasi! + Hanki itsenäinen versio tai lataa Chrome täyttä tukea varten. savegameLevel: Taso savegameLevelUnknown: Tuntematon Taso - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -169,110 +110,98 @@ dialogs: viewUpdate: Näytä päivitys showUpgrades: Näytä Päivitykset showKeybindings: Näytä pikanäppäimet - importSavegameError: title: Tuonti Virhe - text: >- - Tallennuksen tuonti epäonnistui: - + text: "Tallennuksen tuonti epäonnistui:" importSavegameSuccess: title: Tallennus tuotiin - text: >- - Tallennuksesi tuotiin onnistuneesti. - + text: Tallennuksesi tuotiin onnistuneesti. gameLoadFailure: title: Peli on rikki - text: >- - Tallennuksen lataus epäonnistui: - + 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: - + text: "Tallennuksen poisto epäonnistui:" restartRequired: title: Uudelleenkäynnistys vaaditaan - text: >- - Käynnistä peli uudelleen ottaaksesi asetukset käyttöön. - + text: Käynnistä peli uudelleen ottaaksesi asetukset käyttöön. editKeybinding: title: Vaihda pikanäppäin - desc: Paina näppäintä tai hiiren nappia jonka haluat asettaa tai paina escape peruuttaaksesi. - + desc: Paina näppäintä tai hiiren nappia jonka haluat asettaa tai paina escape + peruuttaaksesi. resetKeybindingsConfirmation: title: Nollaa pikanäppäimet desc: Tämä nollaa kaikki pikanäppäimet oletusarvoihin. Vahvista. - keybindingsResetOk: title: Pikanäppäimet nollattiin desc: Pikanäppäimet nollattiin oletusarvoihin! - featureRestriction: title: Demoversio - desc: Yritit käyttää ominaisuutta () joka ei ole saatavilla demoversiossa. Harkitse itsenäisen version hankkimista avataksesi kaikki ominaisuudet! - + desc: Yritit käyttää ominaisuutta () joka ei ole saatavilla + demoversiossa. Harkitse itsenäisen version hankkimista avataksesi + kaikki ominaisuudet! oneSavegameLimit: title: Rajoitetut tallennukset - desc: Sinulla voi olla vain yksi tallennus kerrallaan demoversiossa. Poista vanha tallennus tai hanki itsenäinen versio! - + desc: Sinulla voi olla vain yksi tallennus kerrallaan demoversiossa. Poista + vanha tallennus tai hanki itsenäinen versio! updateSummary: title: Uusi päivitys! - desc: >- - Tässä on tulleet muutokset sen jälkeen kun viimeksi pelasit: - + desc: "Tässä on tulleet muutokset sen jälkeen kun viimeksi pelasit:" upgradesIntroduction: title: Avaa Päivitykset - desc: >- - Kaikkia muodoja joita tuotat voi käyttää päivitysten avaamiseen - Älä tuhoa vanhoja tehtaitasi! - Löydät päivitysikkunan näytön oikeasta yläkulmasta. - + desc: Kaikkia muodoja joita tuotat voi käyttää päivitysten avaamiseen - + Älä tuhoa vanhoja tehtaitasi! Löydät + päivitysikkunan näytön oikeasta yläkulmasta. massDeleteConfirm: title: Vahvista poisto - desc: >- - Olet poistamassa paljon rakennuksia (tasan )! Oletko varma että haluat jatkaa? - + desc: Olet poistamassa paljon rakennuksia (tasan )! Oletko varma että + haluat jatkaa? massCutConfirm: title: Vahtista leikkaus - desc: >- - Olet leikkaamassa paljon rakennuksia (tasan )! Oletko varma että haluat jatkaa? - + desc: Olet leikkaamassa paljon rakennuksia (tasan )! Oletko varma että + haluat jatkaa? blueprintsNotUnlocked: title: Ei vielä avattu - desc: >- - Suorita taso 12 avataksesi Piirustukset! - + desc: Suorita taso 12 avataksesi Piirustukset! keybindingsIntroduction: title: Hyödyllisiä pikanäppäimiä - desc: >- - Tässä pelissä on paljon pikanäppäimiä, jotka tekevät isojen tehtaiden rakentamisesta helpompaa. - Tässä on muutama, mutta katso kaikki pikanäppäimet!

- CTRL + Raahaus: Valitse alue.
- VAIHTO: Pidä pohjassa sijoittaaksesi useita samoja rakennuksia.
- ALT: Käännä sijoitettavien hihnojen suunta.
- + desc: "Tässä pelissä on paljon pikanäppäimiä, jotka tekevät isojen tehtaiden + rakentamisesta helpompaa. Tässä on muutama, mutta katso + kaikki pikanäppäimet!

CTRL + Raahaus: Valitse alue.
VAIHTO: Pidä pohjassa sijoittaaksesi + useita samoja rakennuksia.
ALT: + 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 versio saadaksesi loputtoman määrän merkkejä! - + desc: Voit tehdä vain kaksi mukautettua merkkiä demoversiossa. Hanki itsenäinen + versio saadaksesi loputtoman määrän merkkejä! exportScreenshotWarning: title: Vie kuvakaappaus - desc: Pyysit tukikohtasi viemistä kuvakaappauksena. Huomaa, että tämä voi olla melko hidasta isolla tukikohdalla ja voi jopa kaataa pelisi! + desc: Pyysit tukikohtasi viemistä kuvakaappauksena. Huomaa, että tämä voi olla + melko hidasta isolla tukikohdalla ja voi jopa kaataa pelisi! massCutInsufficientConfirm: title: Vahvista leikkaus - desc: Sinulla ei ole varaa leikata tätä aluetta! Oletko varma että haluat leikata sen? - + desc: Sinulla ei ole varaa leikata tätä aluetta! Oletko varma että haluat + leikata sen? + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Liiku selectBuildings: Valitse alue @@ -293,8 +222,6 @@ ingame: clearSelection: Tyhjennä Valinta pipette: Pipetti switchLayers: Vaihda Tasoa - - # Names of the colors, used for the color blind mode colors: red: Punainen green: Vihreä @@ -305,18 +232,9 @@ ingame: white: Valkoinen uncolored: Väritön black: Musta - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Paina kiertääksesi muunnoksia. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Pikanäppäin: - + hotkeyLabel: "Pikanäppäin: " infoTexts: speed: Nopeus range: Matka @@ -324,36 +242,21 @@ ingame: oneItemPerSecond: 1 kappale / sekunti itemsPerSecond: kappaleita / s itemsPerSecondDouble: (x2) - tiles: laattaa - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Taso completed: Suoritettu unlockText: Avattu ! buttonNextLevel: Seuraava taso - - # Notifications on the lower right notifications: newUpgrade: Uusi päivitys on saatavilla! gameSaved: Peli on tallennettu. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Päivitykset buttonUnlock: Päivitä - - # Gets replaced to e.g. "Tier IX" tier: Taso - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: SUURIN TASO (Nopeus x) - - # The "Statistics" window statistics: title: Tilastot dataSources: @@ -362,62 +265,87 @@ ingame: description: Näyttää keskusrakennuksessa varastoitujen muotojen määrän. produced: title: Tuotettu - description: Näyttää kaikki muodot mitä tehtaasi tuottaa ja lisäksi myös välituotteet. + description: Näyttää kaikki muodot mitä tehtaasi tuottaa ja lisäksi myös + välituotteet. delivered: title: Toimitettu description: Näyttää muodot jotka on toimitettu keskusrakennukseen. noShapesProduced: Toistaiseksi ei muotoja tuotettu. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Peliaika - buildingsPlaced: Rakennukset beltsPlaced: Liukuhihnat - - buttons: - continue: Jatka - settings: Asetukset - menu: Palaa valikkoon - - # Bottom left tutorial hints tutorialHints: title: Tarvitsetko apua? showHint: Näytä vihje hideHint: Sulje - - # When placing a blueprint blueprintPlacer: cost: Hinta - - # Map markers waypoints: waypoints: Merkit hub: Keskusrakennus - description: Paina merkkia hiiren vasemmalla mennäksesi siihen, paina oikeaa nappia poistaaksesi sen.

Paina luodaksesi merkin nykyisestä näkymästä tai varen nappi luodaksesi merkin valittuun paikkaan. + description: Paina merkkia hiiren vasemmalla mennäksesi siihen, paina oikeaa + nappia poistaaksesi sen.

Paina luodaksesi merkin + nykyisestä näkymästä tai varen nappi luodaksesi + merkin valittuun paikkaan. creationSuccessNotification: Merkki luotiin onnistuneesti. - - # Shape viewer shapeViewer: title: Tasot empty: Tyhjä copyKey: Kopioi avain - - # Interactive tutorial interactiveTutorial: title: Tutoriaali hints: - 1_1_extractor: Laita Kaivaja ympyrämuodon päälle kaivaaksesi sen! - 1_2_conveyor: >- - Yhdistä kaivaja liukuhihnalla keskusrakennukseen!

Vihje: Paina ja raahaa liukuhihnaa hiirellä! - - 1_3_expand: >- - Tämä EI OLE tyhjäkäyntipeli! Rakenna lisää kaivajia ja hihnoja saadaksesi tavoitteen nopeammin valmiiksi.

Vihje: Pidä pohjassa VAIHTO laittaaksesi useampia kaivajia ja käytä R kääntääksesi niitä. - -# All shop upgrades + 1_1_extractor: Laita Kaivaja ympyrämuodon + päälle kaivaaksesi sen! + 1_2_conveyor: "Yhdistä kaivaja liukuhihnalla + keskusrakennukseen!

Vihje: Paina ja + raahaa liukuhihnaa hiirellä!" + 1_3_expand: "Tämä EI OLE tyhjäkäyntipeli! Rakenna lisää + kaivajia ja hihnoja saadaksesi tavoitteen nopeammin + valmiiksi.

Vihje: Pidä pohjassa VAIHTO + laittaaksesi useampia kaivajia ja käytä R + kääntääksesi niitä." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Hihnat, Jakelija & Tunneli @@ -431,244 +359,388 @@ shopUpgrades: painting: name: Sekoitus & Värjäys description: Nopeus x → x - -# Buildings and their name / description buildings: hub: deliver: Toimita toUnlock: avataksesi levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Liukuhihna + name: Liukuhihna description: Kuljettaa esineitä, pidä pohjassa ja raahaa laittaaksesi useampia. - wire: default: - name: &wire Johto + name: Johto description: Sallii sähkön kuljetuksen - - miner: # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + miner: default: - name: &miner Kaivaja + name: Kaivaja description: Laita muodon tai värin päälle kaivaaksesi sen. - chainable: name: Kaivaja (Sarja) - description: Laita muodon tai värin päälle kaivaaksesi sen. Voidaan kytkeä sarjaan. - - underground_belt: # Internal name for the Tunnel + description: Laita muodon tai värin päälle kaivaaksesi sen. Voidaan kytkeä + sarjaan. + underground_belt: default: - name: &underground_belt Tunneli + name: Tunneli description: Sallii resurssien kuljetuksen rakennuksien ja hihnojen alta. - tier2: name: Tunneli Taso II - description: Sallii resurssien kuljetuksen rakennuksien ja hihnojen alta pidemmältä kantamalta. - - splitter: # Internal name for the Balancer - default: - name: &splitter Tasaaja - description: Monikäyttöinen - Jakaa kaikki sisääntulot tasaisesti kaikkiin ulostuloihin. - - compact: - name: Yhdistäjä (Pienikokoinen) - description: Yhdistää kaksi liukuhihnaa yhdeksi. - - compact-inverse: - name: Yhdistäjä (Pienikokoinen) - description: Yhdistää kaksi liukuhihnaa yhdeksi. - + description: Sallii resurssien kuljetuksen rakennuksien ja hihnojen alta + pidemmältä kantamalta. cutter: default: - name: &cutter Leikkuri - description: Leikkaa muotoja ylhäältä alaspäin ja tuottaa muodon molemmat puoliskot. Jos käytät vain yhden puoliskon, tuhoa toinen puolisko tai se jumittaa leikkurin! + name: Leikkuri + description: Leikkaa muotoja ylhäältä alaspäin ja tuottaa muodon molemmat + puoliskot. Jos käytät vain yhden puoliskon, tuhoa toinen + puolisko tai se jumittaa leikkurin! quad: name: Leikkuri (Neliö) - description: Leikkaa muotoja ylhäältä alaspäin ja tuottaa muodon molemmat puoliskot. Jos käytät vain yhden puoliskon, tuhoa toinen puolisko tai se jumittaa leikkurin! - - advanced_processor: - default: - name: &advanced_processor Edistynyt Käsittelijä - description: Edistynyt muotojen käsittely - + description: Leikkaa muotoja ylhäältä alaspäin ja tuottaa muodon molemmat + puoliskot. Jos käytät vain yhden puoliskon, tuhoa toinen + puolisko tai se jumittaa leikkurin! rotater: default: - name: &rotater Kääntäjä + name: Kääntäjä description: Kääntää muotoja 90 astetta myötäpäivään. ccw: name: Kääntäjä (Vastapäivään) description: Kääntää muotoja 90 astetta vastapäivään. - fl: - name: Kääntäkä (180) - description: Kääntää muotoja 180 astetta. - + rotate180: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: - name: &stacker Pinoaja - description: Pinoaa molemmat tavarat. Jos niitä ei pysty yhdistämään, oikeanpuoleinen tavara laitetaan vasemmanpuoleisen päälle. - + name: Pinoaja + description: Pinoaa molemmat tavarat. Jos niitä ei pysty yhdistämään, + oikeanpuoleinen tavara laitetaan vasemmanpuoleisen päälle. mixer: default: - name: &mixer Värinsekoittaja + name: Värinsekoittaja description: Sekoittaa kaksi väriä lisäaineiden avulla. - painter: default: - name: &painter Värjääjä - description: &painter_desc Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä sisääntulosta tulevalla värillä. - + name: Värjääjä + description: Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä + sisääntulosta tulevalla värillä. mirrored: - name: *painter - description: *painter_desc - + name: Värjääjä + description: Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä + sisääntulosta tulevalla värillä. double: name: Värjääjä (Kaksinkertainen) - description: Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä sisääntulosta tulevalla värillä. + description: Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä + 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: &trash Roskakori + name: Roskakori description: Sallii sisääntulot kaikilta sivuilta ja tuhoaa ne. Lopullisesti. - - storage: - name: Varasto - description: Varastoi ylimääräisia resursseja tiettyyn kapasiteettiin asti. Voidaan käyttää ylivuotoporttina. - - energy_generator: - deliver: Toimita - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: Kohden - + balancer: default: - name: &energy_generator Sähkögeneraattori - description: Tuottaa sähköä kuluttamalla muotoja. Jokainen sähkögeneraattori vaatii eri muotoja. - wire_crossings: - default: - name: Johdon jakaja - description: Jakaa energiajohdon kahteen. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Johtojen yhdistäjä - description: Yhdistää kaksi energiajohtoa yhteen. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 astetta. - + desc: Avasit Kääntäjän! Se kääntää muotoja myötäpäivään 90 + astetta. reward_painter: title: Värjäys - desc: >- - Avasit Värjääjän - Kaiva joitain värialueita (Samanlailla kuin muotoja) ja yhdistä se muotoon värjääjän avulla!

PS: Jos olet värisokea, asetuksissa on tila värisokeille! - + desc: "Avasit Värjääjän - Kaiva joitain värialueita + (Samanlailla kuin muotoja) ja yhdistä se muotoon värjääjän + avulla!

PS: Jos olet värisokea, asetuksissa on tila + värisokeille!" reward_mixer: title: Värin Sekoitus - desc: Avasit Värinsekoittajan - Yhdistä kaksi väriä lisäaineiden avulla tällä rakennuksella! - + desc: Avasit Värinsekoittajan - Yhdistä kaksi väriä + lisäaineiden avulla tällä rakennuksella! reward_stacker: title: Yhdistäjä - desc: Nyt voit yhdistää muotoja Yhdistäjällä! Molemman sisääntulot yhdistetään, jos ne laitetaan vierekkäin, niistä tulee sulatettu. Jos ne eivät ole vierekkäin, oikeanpuoleinen sisääntulo kasataan vasemman päälle! - + desc: Nyt voit yhdistää muotoja Yhdistäjällä! Molemman + sisääntulot yhdistetään, jos ne laitetaan vierekkäin, niistä tulee + sulatettu. Jos ne eivät ole vierekkäin, + oikeanpuoleinen sisääntulo kasataan vasemman + 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 liukuhihnoilla rakennusten ja liukuhihnojen alta! - + desc: Avasit Tunnelin - Nyt voit kuljettaa tavaroita + liukuhihnoilla rakennusten ja liukuhihnojen alta! reward_rotater_ccw: title: Vastapäivään Kääntö - desc: Avasit uuden muodon Kääntäjästä - Se sallii kääntämisen vastapäivään! Sen voi rakentaa valitsemalla kääntäjän ja painamalla 'T' vaihtaaksesi sen muotoja! - + desc: Avasit uuden muodon Kääntäjästä - Se sallii kääntämisen + vastapäivään! Sen voi rakentaa valitsemalla kääntäjän ja + 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 matka, ja voit myös yhdistellä ja sovitella tunneleita! - - reward_splitter_compact: - title: Pienikokoinen Yhdistäjä - desc: >- - Avasit pienikokoisen muodon Yhdistäjästä - Se ottaa kaksi sisääntuloa ja yhdistää ne yhdeksi! - + desc: Avasit uuden muodon Tunnelista - Siinä on pidempi + matka, ja voit myös yhdistellä ja sovitella tunneleita! reward_cutter_quad: title: Neljäsosa Leikkaus - desc: Avasit muodon Leikkurista - Se sallii muotojen leikkaamisen neljään osaan kahden sijaan! - + desc: Avasit muodon Leikkurista - Se sallii muotojen + leikkaamisen neljään osaan kahden sijaan! reward_painter_double: title: Kaksinkertainen Värjäys - desc: Avasit muodon Värjääjästä - Se toimii samanlailla kuin normaali värjääjä, mutta käsittelee kaksi muotoa kerrallaan käyttäen vain yhden värin kahden sijaan! - - reward_painter_quad: - title: Neljäsosa Värjäys - desc: Avasit muodon Värjääjästä - Se sallii muodon eri osien värjäämisen erikseen! - + desc: Avasit muodon Värjääjästä - Se toimii samanlailla kuin + normaali värjääjä, mutta käsittelee kaksi muotoa + 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 alue (pidä pohjassa CTRL ja raahaa hiirellä), ja paina 'C' kopioidaksesi.

Sen liittäminen ei ole ilmaista, sinun täytyy tuottaa piirustus muotoja jotta sinulla on varaa siihen! (Ne mitkä juuri toimitit). - - # Special reward, which is shown when there is no reward actually + desc: Nyt voit Kopioida ja Liittää paloja tehtaastasi! Valitse + alue (pidä pohjassa CTRL ja raahaa hiirellä), ja paina 'C' + kopioidaksesi.

Sen liittäminen ei ole + ilmaista, sinun täytyy tuottaa piirustus + muotoja jotta sinulla on varaa siihen! (Ne mitkä juuri + toimitit). no_reward: title: Seuraava taso - desc: >- - This level gave you no reward, but the next one will!

PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades! - + desc: "This level gave you no reward, but the next one will!

PS: Better + don't destroy your existing factory - You need all + those shapes later again to unlock upgrades!" no_reward_freeplay: title: Seuraava taso - desc: >- - Onnittelut! Muuten, lisää sisältöä on suunniteltu itsenäiseen versioon! - + desc: Onnittelut! Muuten, lisää sisältöä on suunniteltu itsenäiseen versioon! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Asetukset categories: general: Yleinen userInterface: Käyttöliittyma advanced: Kehittynyt - + performance: Performance versionBadges: dev: Kehitys staging: Näyttämö prod: Tuotanto buildDate: Rakennettu - labels: uiScale: title: Käyttöliittymän Koko - description: >- - Muuttaa käyttöliittymän kokoa. Käyttöliittymä skaalataan silti laitteen resoluution perusteella based on your device resolution, mutta tämä asetus määrittää skaalauksen määrän. + description: Muuttaa käyttöliittymän kokoa. Käyttöliittymä skaalataan silti + laitteen resoluution perusteella based on your device + resolution, mutta tämä asetus määrittää skaalauksen määrän. scales: super_small: Erittäin pieni small: Pieni regular: Normaali large: Iso huge: Valtava - autosaveInterval: title: Automaattitallennuksen Aikaväli - description: >- - Määrittää kuinka usein peli tallentaa automaattisesti. Voit myös poistaa automaattisen tallennuksen kokonaan käytöstä täällä. - + description: Määrittää kuinka usein peli tallentaa automaattisesti. Voit myös + poistaa automaattisen tallennuksen kokonaan käytöstä täällä. intervals: one_minute: 1 Minuutin välein two_minutes: 2 Minuutin välein @@ -676,22 +748,18 @@ settings: ten_minutes: 10 Minuutin välein twenty_minutes: 20 Minuutin välein disabled: Pois käytöstä - scrollWheelSensitivity: title: Zoomausherkkyys - description: >- - Vaihtaa kuinka herkkä zoomi on (Joko hiiren rulla tai ohjauslevy). + description: Vaihtaa kuinka herkkä zoomi on (Joko hiiren rulla tai ohjauslevy). sensitivity: super_slow: Erittäin hidas slow: Hidas regular: Normaali fast: Nopea super_fast: Erittäin nopea - movementSpeed: title: Liikkumis nopeus - description: >- - Muuttaa kuinka nopeasti näkymä liikkuu kun käytetään näppäimistöä. + description: Muuttaa kuinka nopeasti näkymä liikkuu kun käytetään näppäimistöä. speeds: super_slow: Erittäin hidas slow: Hidas @@ -699,87 +767,123 @@ settings: fast: Nopea super_fast: Erittäin nopea extremely_fast: Hyper nopea - language: title: Kieli - description: >- - Vaihda kieltä. Kaikki käännökset ovat käyttäjien tekemiä ja saattavat olla puutteellisia! - + description: Vaihda kieltä. Kaikki käännökset ovat käyttäjien tekemiä ja + saattavat olla puutteellisia! enableColorBlindHelper: title: Värisokeatila - description: >- - Ottaa käyttöön useita työkaluja, jotka sallivat pelin pelaamisen jos olet värisokea. - + description: Ottaa käyttöön useita työkaluja, jotka sallivat pelin pelaamisen + jos olet värisokea. fullscreen: title: Kokonäyttö - description: >- - On suositeltava pelata tätä peliä kokonäytön tilassa saadaksesi parhaan kokemuksen. Saatavilla vain itsenäisessä versiossa. - + description: On suositeltava pelata tätä peliä kokonäytön tilassa saadaksesi + parhaan kokemuksen. Saatavilla vain itsenäisessä versiossa. soundsMuted: title: Mykistä Äänet - description: >- - Jos käytössä, mykistää kaikki ääniefektit. - + description: Jos käytössä, mykistää kaikki ääniefektit. musicMuted: title: Mykistä Musiikki - description: >- - Jos käytössä, mykistää musiikin. - + description: Jos käytössä, mykistää musiikin. theme: title: Pelin Teema - description: >- - Valitse pelin teema (vaalea / tumma). + description: Valitse pelin teema (vaalea / tumma). themes: dark: Tumma light: Kirkas - refreshRate: title: Simulaatiotavoite - description: >- - Jos sinulla on 144hz näyttö, muuta virkistystaajuus täällä jotta pelin simulaatio toimii oikein isommilla virkistystaajuuksilla. Tämä voi laskea FPS nopeutta, jos tietokoneesi on liian hidas. - + description: Jos sinulla on 144hz näyttö, muuta virkistystaajuus täällä jotta + pelin simulaatio toimii oikein isommilla virkistystaajuuksilla. + Tämä voi laskea FPS nopeutta, jos tietokoneesi on liian hidas. alwaysMultiplace: title: Monisijoitus - description: >- - Jos käytössä, kaikki rakennukset pysyvät valittuina sijoittamisen jälkeen kunnes peruutat sen. Tämä vastaa SHIFT:in pitämistä pohjassa ikuisesti. - + description: Jos käytössä, kaikki rakennukset pysyvät valittuina sijoittamisen + jälkeen kunnes peruutat sen. Tämä vastaa SHIFT:in pitämistä + pohjassa ikuisesti. offerHints: title: Vihjeet & Oppaat - description: >- - Tarjoaa pelaamisen aikana vihjeitä ja oppaita. Myös piilottaa tietyt käyttöliittymäelementit tietyn tason mukaan, jotta alkuunpääseminen olisi helpompaa. - + description: Tarjoaa pelaamisen aikana vihjeitä ja oppaita. Myös piilottaa + tietyt käyttöliittymäelementit tietyn tason mukaan, jotta + alkuunpääseminen olisi helpompaa. enableTunnelSmartplace: title: Älykkäät Tunnelit - description: >- - Kun käytössä, tunnelin sijoittaminen automaattisesti poistaa tarpeettomat liukuhihnat. Tämä myös ottaa käyttöön tunnelien raahaamisen ja ylimääräiset tunnelit poistetaan. - + description: Kun käytössä, tunnelin sijoittaminen automaattisesti poistaa + tarpeettomat liukuhihnat. Tämä myös ottaa käyttöön tunnelien + raahaamisen ja ylimääräiset tunnelit poistetaan. vignette: title: Vignetti - description: >- - Ottaa käyttöön vignetin, joka tummentaa näytön kulmia ja tekee tekstin lukemisesta helpompaa. - + description: Ottaa käyttöön vignetin, joka tummentaa näytön kulmia ja tekee + tekstin lukemisesta helpompaa. rotationByBuilding: title: Kiertäminen rakennustyypin mukaan - description: >- - Jokainen rakennustyyppi muistaa kierron, jonka viimeksi asetit yksilöllisesti. Tämä voi olla mukavampi vaihtoehto jos usein sijoitat eri rakennustyyppejä. - + description: Jokainen rakennustyyppi muistaa kierron, jonka viimeksi asetit + yksilöllisesti. Tämä voi olla mukavampi vaihtoehto jos usein + sijoitat eri rakennustyyppejä. compactBuildingInfo: title: Kompaktit Rakennusten Tiedot - description: >- - Lyhentää rakennusten tietolaatikoita näyttämällä vain niiden suhteet. Muuten rakennuksen kuvaus ja kuva näytetään. - + description: Lyhentää rakennusten tietolaatikoita näyttämällä vain niiden + suhteet. Muuten rakennuksen kuvaus ja kuva näytetään. disableCutDeleteWarnings: title: Poista Leikkaus/Poisto Varoitukset - description: >- - Poista varoitusikkunat jotka ilmestyy kun leikkaat/poistat enemmän kuin 100 entiteettiä - + description: Poista varoitusikkunat jotka ilmestyy kun leikkaat/poistat enemmän + kuin 100 entiteettiä + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Pikanäppäimet - hint: >- - Tip: Muista käyttää CTRL, VAIHTO ja ALT! Ne ottavat käyttöön erilaisia sijoitteluvaihtoehtoja. - + hint: "Tip: Muista käyttää CTRL, VAIHTO ja ALT! Ne ottavat käyttöön erilaisia + sijoitteluvaihtoehtoja." resetKeybindings: Nollaa Pikanäppäimet - categoryLabels: general: Sovellus ingame: Peli @@ -788,7 +892,6 @@ keybindings: massSelect: Massa Valinta buildings: Rakennus Pikanäppäimet placementModifiers: Sijoittelu Muokkaajat - mappings: confirm: Vahvista back: Takaisin @@ -798,58 +901,63 @@ keybindings: mapMoveLeft: Liiku Vasemmalle mapMoveFaster: Liiku Nopeammin centerMap: Keskitä Kartta - mapZoomIn: Lähennä mapZoomOut: Loitonna createMarker: Luo merkki - menuOpenShop: Päivitykset menuOpenStats: Tilastot - toggleHud: Vaihda valikon näkyvyys toggleFPSInfo: Vaihda FPS and Virheenkorjaus tiedot switchLayers: Vaihda tasoa exportScreenshot: Vie koko tukikohta kuvana - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Liukuhihna + underground_belt: Tunneli + miner: Kaivaja + cutter: Leikkuri + rotater: Kääntäjä + stacker: Pinoaja + mixer: Värinsekoittaja + painter: Värjääjä + trash: Roskakori + wire: Johto pipette: Pipetti rotateWhilePlacing: Käännä - rotateInverseModifier: >- - Modifier: Käännä sen sijaan vastapäivään + rotateInverseModifier: "Modifier: Käännä sen sijaan vastapäivään" cycleBuildingVariants: Valitse muotoja confirmMassDelete: Poista alue pasteLastBlueprint: Liitä viimeisin piirustus cycleBuildings: Valitse Rakennuksia lockBeltDirection: Ota liukuhihnasuunnittelija käyttöön - switchDirectionLockSide: >- - Planner: Muuta sivua - + switchDirectionLockSide: "Planner: Muuta sivua" massSelectStart: Pidä pohjassa ja raahaa aloittaaksesi massSelectSelectMultiple: Valitse useita alueita massSelectCopy: Kopioi alue massSelectCut: Leikkaa alue - placementDisableAutoOrientation: Poista automaattinen suunta käytöstä placeMultiple: Pysy sijoittamistilassa placeInverse: Käännä automaattinen hihnan suunta päinvastoin menuClose: Sulje valikko - + 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: Tietoja tästä pelistä body: >- - Tämä peli on avointa lähdekoodia ja kehittäjä on Tobias Springer (tämä on minä).

+ Tämä peli on avointa lähdekoodia ja kehittäjä on Tobias Springer + (tämä on minä).

Jos haluat osallistua, tarkista shapez.io githubissa.

@@ -858,10 +966,8 @@ about: Ääniraidan on tehnyt Peppsen - Hän on mahtava.

Lopuksi, isot kiitokset minun parhaalle kaverilleni Niklas - Ilman meidän factorio istuntoja tätä peliä ei olisi koskaan ollut olemassa. - changelog: title: Muutosloki - demo: features: restoringGames: Tallennusten palautus @@ -869,5 +975,65 @@ demo: oneGameLimit: Rajoitettu yhteen tallennukseen customizeKeybindings: Pikanäppäinten mukautus exportingBase: Viedään koko tukikohta kuvana - settingNotAvailable: Ei saatavilla demoversiossa. +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. diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index 704f8896..bcc2f61b 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -1,113 +1,61 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io est un jeu qui consiste à construire des usines pour automatiser la création et la combinaison de formes de plus en plus complexes sur une carte infinie. + 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. + discordLinkShort: Discord officiel + intro: >- + Vous aimez les jeux d’automatisation ? Ce jeu est pour vous ! - # 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] + 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. - 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. - 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] ! - - 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] - - discordLink: Discord officiel — Parlez avec moi ! + 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. + 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 - - # How big numbers are rendered, e.g. "10,000" - # En français, le séparateur des milliers est l’espace (fine) insécable - thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider:   decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. cf wikipedia système international d’unité - # For french: https://fr.wikipedia.org/wiki/Pr%C3%A9fixes_du_Syst%C3%A8me_international_d%27unit%C3%A9s suffix: thousands: k millions: M billions: G trillions: T - - # Shown for infinitely big numbers - infinite: inf - + infinite: ∞ time: - # Used for formatting past time dates oneSecondAgo: il y a une seconde xSecondsAgo: il y a  secondes oneMinuteAgo: il y a une minute @@ -115,15 +63,11 @@ global: oneHourAgo: il y a une heure xHoursAgo: il y a  heures oneDayAgo: il y a un jour - xDaysAgo: il y a  jours - - # Short formats for times, e.g. '5h 23m' - 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 control: CTRL @@ -131,37 +75,30 @@ global: escape: ESC shift: MAJ space: ESPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places - title: Version démo - intro: >- - Achetez la version complète pour débloquer toutes les fonctionnalités ! - + title: Version de démo + intro: Achetez la version complète pour débloquer toutes les fonctionnalités ! mainMenu: play: Jouer + continue: Continuer + newGame: Nouvelle partie changelog: Historique + subreddit: Reddit importSavegame: Importer openSourceHint: Ce jeu est open source ! discordLink: Serveur Discord officiel helpTranslate: Contribuez à la traduction ! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Désolé, ce jeu sera lent sur votre navigateur web ! Procurez-vous la version complète ou téléchargez Chrome pour une meilleure expérience. - + madeBy: Créé par + browserWarning: Désolé, ce jeu sera lent sur votre navigateur web ! + Procurez-vous la version complète ou téléchargez Chrome pour une + meilleure expérience. savegameLevel: Niveau  savegameLevelUnknown: Niveau inconnu - - continue: Continuer - newGame: Nouvelle partie - madeBy: Créé par - subreddit: Reddit - + savegameUnnamed: Sans titre dialogs: buttons: ok: OK - delete: Effacer + delete: Supprimer cancel: Annuler later: Plus tard restart: Relancer @@ -171,112 +108,100 @@ dialogs: viewUpdate: Voir les mises à jour showUpgrades: Montrer les améliorations showKeybindings: Montrer les raccourcis - importSavegameError: title: Erreur d’importation - text: >- - Impossible d’importer votre sauvegarde : - + text: "Impossible d’importer votre sauvegarde :" importSavegameSuccess: title: Sauvegarde importée - text: >- - Votre sauvegarde a été importée avec succès. - + text: Votre sauvegarde a été importée avec succès. gameLoadFailure: title: La sauvegarde est corrompue - text: >- - Impossible de charger votre sauvegarde : - + text: "Impossible de charger votre sauvegarde :" confirmSavegameDelete: title: Confirmez la suppression - text: >- - Êtes-vous sûr de vouloir supprimer votre partie ? - + text: Êtes-vous sûr de vouloir supprimer cette partie ?

” + au niveau

Ce sera définitif ! savegameDeletionError: title: Impossible de supprimer - text: >- - Impossible de supprimer votre sauvegarde : - + text: "Impossible de supprimer votre sauvegarde :" restartRequired: title: Redémarrage requis - text: >- - Vous devez relancer le jeu pour appliquer les modifications. - + text: Vous devez relancer le jeu pour appliquer les modifications. editKeybinding: title: Changer les contrôles desc: Appuyez sur la touche que vous voulez assigner, ou Échap pour annuler. - resetKeybindingsConfirmation: title: Réinitialiser les contrôles desc: Ceci réinitialisera les touches par défaut. Veuillez confirmer. - keybindingsResetOk: 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 disponible dans la démo. Pensez à acheter la version complète pour une expérience optimale ! - + 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: title: Sauvegardes limitées - desc: Vous ne pouvez avoir qu’une seule sauvegarde en même temps dans la version démo. Merci d’effacer celle en cours ou bien de vous procurer la version complète ! - + desc: Vous ne pouvez avoir qu’une seule sauvegarde en même temps dans la version + démo. Merci d’effacer celle en cours ou bien de vous procurer la + 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 usines ! - L’onglet des améliorations se trouve dans le coin supérieur droit de l’écran. - + desc: Toutes les formes que vous produisez peuvent être utilisées pour débloquer + 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 - desc: >- - Vous allez supprimer beaucoup de bâtiments ( pour être précis) ! Êtes-vous sûr de vouloir faire ça ? - + 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: title: Confirmer la coupure - desc: >- - Vous allez couper beaucoup de bâtiments ( pour être précis) ! Êtes-vous sûr de vouloir faire ça ? - + desc: Vous allez couper beaucoup de bâtiments ( pour être précis) ! + Êtes-vous sûr de vouloir faire ça ? + massCutInsufficientConfirm: + title: Confirmer la coupure + desc: Vous n’avez pas les moyens de copier cette zone ! Êtes-vous sûr de vouloir + 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 usines. - En voici quelques-uns, n’hésitez pas à aller découvrir les raccourcis !

- CTRL + glisser : Sélectionne une zone à copier / effacer.
- MAJ : Laissez appuyé pour placer plusieurs fois le même bâtiment.
- ALT : Inverse l’orientation des convoyeurs placés.
- + 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 / supprimer.
MAJ : + Laissez appuyé pour placer plusieurs fois le même bâtiment.
+ ALT : Inverse l’orientation des + convoyeurs placés.
' createMarker: title: Nouvelle balise - desc: Donnez-lui un nom, vous pouvez aussi inclure le raccourci d’une forme (que vous pouvez générer ici). titleEdit: Modifier cette balise - + desc: Give it a meaningful name, you can also include a short + key of a shape (Which you can generate here) + 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 ! - + 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 ! exportScreenshotWarning: title: Exporter une capture d’écran - desc: >- - Vous avez demandé à exporter une capture d’écran de votre base. Soyez conscient que cela peut s’avérer passablement lent pour une grande base, voire faire planter votre jeu ! - - massCutInsufficientConfirm: - title: Confirmer la coupe - desc: Vous n’avez pas les moyens de copier cette zone ! Êtes-vous sûr de vouloir la couper ? - + desc: Vous avez demandé à exporter une capture d’écran de votre base. Soyez + conscient que cela peut s’avérer passablement lent pour une grande + base, voire faire planter votre jeu ! + renameSavegame: + title: Renommer la sauvegarde + desc: Vous pouvez renommer la sauvegarde ici. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Déplacer selectBuildings: Sélection d’une zone @@ -297,54 +222,41 @@ ingame: clearSelection: Effacer la sélection pipette: Pipette switchLayers: Changer de calque - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) + colors: + red: Rouge + green: Vert + blue: Bleu + yellow: Jaune + purple: Magenta + cyan: Cyan + white: Blanc + black: Noir + uncolored: Sans couleur buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Appuyez sur pour alterner entre les variantes. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Raccourci : - + hotkeyLabel: "Raccourci : " infoTexts: 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 - - # The notification when completing a level + tiles: cases levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Niveau  completed: Terminé unlockText: débloqué ! buttonNextLevel: Niveau suivant - - # Notifications on the lower right notifications: newUpgrade: Une nouvelle amélioration est disponible ! gameSaved: Votre partie a été sauvegardée. - - # The "Upgrades" window + freeplayLevelComplete: Niveau  complet ! shop: title: Améliorations buttonUnlock: Améliorer - - # Gets replaced to e.g. "Tier IX" tier: Niveau  - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: NIVEAU MAXIMAL (Vitesse ×) - - # The "Statistics" window + maximumLevel: NIVEAU MAX (Vitesse ×) statistics: title: Statistiques dataSources: @@ -353,286 +265,475 @@ ingame: description: Affiche le nombre de formes stockées dans votre bâtiment central. produced: title: Produit - description: Affiche toutes les formes que votre usine produit, y compris les formes intermédiaires. + description: Affiche toutes les formes que votre usine produit, y compris les + formes intermédiaires. delivered: title: Livré description: Affiche les formes qui ont été livrées dans votre bâtiment central. noShapesProduced: Aucune forme produite pour le moment. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute:  ⁄ m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second:  ⁄ s + minute:  ⁄ m + hour:  ⁄ h settingsMenu: playtime: Temps de jeu - buildingsPlaced: Bâtiments beltsPlaced: Convoyeurs - - buttons: - continue: Continuer - settings: Options - menu: Retourner au menu - - # Bottom left tutorial hints tutorialHints: title: Besoin d’aide ? showHint: Indice hideHint: Fermer - - # When placing a blueprint blueprintPlacer: cost: Coût - - # Map markers waypoints: 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é. + description: Cliquez sur une balise pour vous y rendre, clic-droit pour 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. - - # Interactive tutorial + shapeViewer: + title: Couches + empty: Vide + 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 ! - - 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. - - colors: - red: Rouge - green: Vert - blue: Bleu - yellow: Jaune - purple: Violet - cyan: Cyan - white: Blanc - uncolored: Sans couleur - black: Noir - shapeViewer: - title: Calques - empty: Vide - copyKey: Copier le raccourci de la forme - -# All shop upgrades + 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 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." + connectedMiners: + one_miner: 1 extracteur + n_miners:  extracteurs + limited_items: Limité à  + watermark: + title: Version de démo + desc: Cliquez ici pour voir les avantages de la version Steam ! + get_on_steam: Acheter sur Steam + standaloneAdvantages: + title: Obtenir la version complète + no_thanks: Non merci ! + points: + levels: + title: 12 nouveaux niveaux + desc: Pour un total de 26 niveaux ! + buildings: + title: 18 nouveaux bâtiments + desc: Automatisez entièrement votre usine ! + savegames: + title: Sauvegardes ∞ + desc: Autant que votre cœur le désire ! + upgrades: + title: 20 niveaux d’amélioration + desc: Cette version de démonstration n’en a que 5 ! + markers: + title: Balises ∞ + desc: Ne vous perdez plus jamais dans votre usine ! + wires: + title: Câbles + desc: Une toute nouvelle dimension ! + darkmode: + title: Mode sombre + desc: Plus jamais mal aux yeux ! + support: + 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 × → × - -# Buildings and their name / description + description: Vitesse × → × buildings: - belt: - default: - name: &belt Convoyeur - description: Transporte les objets, maintenez et faites glisser pour en placer plusieurs. - - miner: # Internal name for the Extractor - default: - name: &miner Extracteur - description: Placez-le au-dessus d’une forme ou couleur pour l’extraire. - - chainable: - name: Extracteur en série - description: Placez-le au-dessus d’une forme ou couleur pour l’extraire. Peut être mis en série. - - underground_belt: # Internal name for the Tunnel - default: - name: &underground_belt Tunnel - description: Permet de faire passer des ressources sous les bâtiments et les convoyeurs. - - tier2: - name: Tunnel niveau II - description: Permet de faire passer des ressources sous les bâtiments et les convoyeurs. - - splitter: # Internal name for the Balancer - default: - name: &splitter Répartiteur - description: Multifonctions — Distribue équitablement toutes les entrées vers toutes les sorties. - - compact: - name: Fusionneur (compact) - description: Fusionne deux convoyeurs en un seul. - - compact-inverse: - name: Fusionneur (compact) - description: Fusionne deux convoyeurs en un seul. - - cutter: - default: - name: &cutter Découpeur - description: Coupe une forme de haut en bas et sort les deux parties. Si vous n’utilisez qu’une seule partie, assurez-vous de détruire l’autre ou sinon, gare au blocage ! - quad: - name: Découpeur (quadruple) - description: Coupe une forme en quatre parties. Si vous n’utilisez pas toutes les parties, assurez-vous de détruire les autres ou sinon, gare au blocage ! - - rotater: - default: - name: &rotater Pivoteur - description: Fait pivoter une forme de 90 degrés vers la droite. - ccw: - name: Pivoteur inversé - description: Fait pivoter une forme de 90 degrés vers la gauche. - fl: - name: Retourneur - description: Tourne une forme de 180 degrés. - - stacker: - default: - name: &stacker Combineur - description: Combine deux formes. Si elles ne peuvent pas être combinées, la forme de droite est placée sur la forme de gauche. - - mixer: - default: - name: &mixer Mélangeur de couleur - description: Mélange deux couleurs en utilisant la synthèse additive des couleurs. - - painter: - default: - name: &painter Peintre - description: &painter_desc Colorie entièrement la forme de gauche avec la couleur de droite. - double: - name: Peintre (double) - description: Colorie les deux formes de gauche avec la couleur de droite. - quad: - name: Peintre (quadruple) - description: Colorie chaque quadrant d’une forme avec une couleur différente. - mirrored: - name: *painter - description: *painter_desc - - trash: - default: - name: &trash Poubelle - description: Accepte des formes de n’importe quel côté et les détruit… pour toujours. - - storage: - name: Stockage - description: Stocke les formes en trop jusqu’à une certaine capacité. Peut être utilisé pour absorber un surplus. hub: deliver: Livrez toUnlock: pour débloquer levelShortcut: NV + endOfDemo: Fin de la démo + belt: + default: + name: Convoyeur + description: Transporte les objets. Maintenez et faites glisser pour en placer + plusieurs. + miner: + default: + name: Extracteur + description: Placez-le au-dessus d’une forme ou couleur pour l’extraire. + chainable: + name: Extracteur en série + description: Placez-le au-dessus d’une forme ou couleur pour l’extraire. Peut + être mis en série. + underground_belt: + default: + name: Tunnel + description: Permet de faire passer des ressources sous les bâtiments et les + convoyeurs. + tier2: + name: Tunnel niveau II + description: Permet de faire passer des ressources sous les bâtiments et les + convoyeurs. + balancer: + default: + name: Répartiteur + description: Multifonctions — Distribue équitablement toutes les entrées vers + toutes les sorties. + merger: + name: Fusionneur (compact) + description: Fusionne deux convoyeurs en un seul. + merger-inverse: + name: Fusionneur (compact) + description: Fusionne deux convoyeurs en un seul. + splitter: + name: Séparateur (compact) + description: Sépare un convoyeur en deux. + splitter-inverse: + name: Séparateur (compact) + description: Sépare un convoyeur en deux. + cutter: + default: + name: Découpeur + description: Coupe une forme de haut en bas et sort les deux parties. Si + vous n’utilisez qu’une seule partie, assurez-vous de détruire + l’autre ou sinon, gare au blocage ! + quad: + name: Découpeur (quadruple) + description: Coupe une forme en quatre parties. Si vous n’utilisez pas + toutes les parties, assurez-vous de détruire les autres ou + sinon, gare au blocage ! + rotater: + default: + name: Pivoteur + description: Fait pivoter une forme de 90 degrés vers la droite. + ccw: + name: Pivoteur inversé + description: Fait pivoter une forme de 90 degrés vers la gauche. + rotate180: + name: Retourneur + description: Tourne une forme de 180 degrés. + stacker: + default: + name: Combineur + description: Combine deux formes. Si elles ne peuvent pas être combinées, la + forme de droite est placée sur la forme de gauche. + mixer: + default: + name: Mélangeur de couleur + description: Mélange deux couleurs en utilisant la synthèse additive des + couleurs. + painter: + default: + name: Peintre + description: Colorie entièrement la forme venant de gauche avec la couleur + entrant en haut. + mirrored: + name: Peintre + description: Colorie entièrement la forme venant de gauche avec la couleur + entrant en bas. + double: + name: Peintre (double) + description: Colorie les deux formes venant de gauche avec la couleur entrant en + haut. + quad: + name: Peintre (quadruple) + description: Colorie chaque quadrant d’une forme avec une couleur différente. + Seules les entrées recevant un signal vrai sur + le calque de câblage seront peintes ! + trash: + default: + name: Poubelle + description: Accepte des formes de n’importe quel côté et les détruit… pour + toujours. + storage: + default: + name: Stockage + description: Stocke les formes en trop jusqu’à une certaine capacité. Peut être + utilisé pour absorber un surplus. wire: default: name: Câble - description: Permet de transporter de l’énergie. - advanced_processor: + description: Transfère des signaux, qui peuvent être des formes, des couleurs ou + des booléens (1 / 0). Les câbles de couleurs différentes ne se + connectent pas. + second: + name: Câble + description: Transfère des signaux, qui peuvent être des formes, des couleurs ou + des booléens (1 / 0). Les câbles de couleurs différentes ne se + connectent pas. + wire_tunnel: default: - name: Inverseur de couleur - description: Accepte une couleur ou une forme, et l’inverse. - energy_generator: - deliver: Livrer - toGenerateEnergy: Pour + name: Tunnel à câble + description: Permet de croiser deux câbles sans les connecter entre eux. + constant_signal: default: - name: Générateur d’énergie - description: Génère de l’énergie en consommant des formes. - wire_crossings: + name: Constante + description: Émet un signal constant, qui peut être une forme, une couleur ou un + booléen (1 / 0). + lever: default: - name: Duplicateur de câble - description: Sépare un câble en deux. - merger: - name: Fusionneur de câble - description: Fusionne deux câbles en un seul. - + name: Interrupteur + 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 (une forme, + couleur ou “1”). + not: + name: Porte INVERSEUR + 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 (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 (une forme, + couleur ou “1”). + transistor: + default: + name: Transistor + description: Transmet l’entrée du bas si l’entrée du côté est vraie (une forme, + couleur ou “1”). + mirrored: + name: Transistor + description: Transmet l’entrée du bas si l’entrée du côté est vraie (une forme, + couleur ou “1”). + filter: + default: + name: Filtre + description: Connectez un signal pour envoyer toutes les formes et couleurs + correspondantes en haut, et tout le reste à droite. Fonctionne + aussi avec un signal booléen. + display: + default: + name: Afficheur + description: Connectez un signal pour l’afficher. Ça peut être une forme, une + couleur, ou un booléen. + reader: + default: + 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: + default: + name: Analyseur de formes + description: Analyse le quadrant supérieur droit de la couche la plus basse + d’une forme, et renvoie sa forme et sa couleur. + comparator: + default: + name: Comparateur + description: Émet un “1” booléen si les deux entrées sont exactement les mêmes. + Peut comparer des formes, des couleurs, et des booléens. + virtual_processor: + default: + name: Découpeur virtuel + description: Découpe virtuellement une forme. + rotater: + name: Pivoteur virtuel + description: Fait pivoter virtuellement la forme de 90 degrés vers la droite. + unstacker: + name: Décombineur virtuel + description: Renvoie la couche supérieure à droite, et les couches restantes à + gauche. + stacker: + name: Combineur virtuel + description: Combine virtuellement la forme de droite sur celle de gauche. + painter: + name: Peintre virtuel + description: Peint virtuellement la forme du bas avec la couleur de droite. + item_producer: + default: + 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: - # Those are the rewards gained from completing the store 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: 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: 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 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 ! - + 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 utilisant la synthèse additive des couleurs avec ce bâtiment ! - + 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: title: Combineur - desc: Vous pouvez maintenant combiner deux formes avec le combineur ! Les deux entrées sont combinées et si elles peuvent être mises l’une à côté de l’autre, elles sont fusionnées. Sinon, la forme de droite est placée au-dessus de la forme de gauche. - - reward_splitter: - title: Distributeur / rassembleur - 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 !

- + desc: Vous pouvez maintenant combiner deux formes avec le + combineur ! Les deux entrées sont combinées et si + elles peuvent être mises l’une à côté de l’autre, elles sont + fusionnées. Sinon, la forme de droite est + placée au-dessus de la forme de gauche. + reward_balancer: + title: Répartiteur + 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 - desc: Le tunnel a été débloqué — Vous pouvez maintenant faire passer des formes sous les convoyeurs et les bâtiments ! - + 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 de faire pivoter vers la gauche ! Pour le construire, sélectionnez le pivoteur et appuyez sur 'T' pour alterner entre les variantes ! - + 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 + variantes ! reward_miner_chainable: title: Extracteur en série - desc: Vous avez débloqué l’extracteur en série ! Il permet de transférer ses ressources à d’autres extracteurs pour augmenter le débit sortant ! - + desc: "Vous avez débloqué l’extracteur en série ! Il permet de + transférer ses ressources à d’autres extracteurs + pour augmenter le débit sortant !

Note : Il remplace + l’ancien extracteur dans votre barre d’outils." reward_underground_belt_tier_2: title: Tunnel niveau II - desc: Vous avez débloqué une nouvelle variante du tunnel — Elle a une portée plus grande, et vous pouvez superposer les deux variantes de tunnels ! - - reward_splitter_compact: + desc: Vous avez débloqué une nouvelle variante du tunnel — Elle + a une portée plus grande, et vous pouvez superposer + les deux variantes de tunnels ! + reward_merger: + title: Fusionneur compact + desc: You have unlocked a merger variant of the + balancer - It accepts two inputs and merges them + into one belt! + 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 ! - + desc: You have unlocked a splitter variant of the + balancer - It accepts one input and splits them + into two! + reward_belt_reader: + 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 ! - + desc: Vous avez débloqué une variante du découpeur — Elle + 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 fonctionne comme le peintre de base, mais elle permet de traiter deux formes à la fois en ne consommant qu’une couleur au lieu de deux ! - - reward_painter_quad: - title: Quadruple peintre - desc: Vous avez débloqué une variante du peintre — Elle permet de colorier chaque partie d’une forme individuellement ! - + desc: Vous avez débloqué une variante du peintre — Elle + fonctionne comme le peintre de base, mais elle permet de traiter + deux formes à la fois en ne consommant qu’une + couleur au lieu de deux ! reward_storage: title: Tampon de stockage - desc: Vous avez débloqué une variante de la poubelle — Elle permet de stocker des formes jusqu’à une certaine limite ! - - 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 ! (Ne vous en faites pas, encore plus de contenu est prévu pour la version complète !) - + 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 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). - - # Special reward, which is shown when there is no reward actually + 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). + reward_rotater_180: + title: Retourneur + 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é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é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). + reward_logic_gates: + title: Portes logiques + 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: 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! 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 toutes ces formes plus tard pour débloquer des améliorations. - + 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 !

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: Fin de la démo + desc: Vous avez atteint la fin de la version de démo ! settings: title: Options categories: @@ -640,106 +741,29 @@ settings: userInterface: Interface utilisateur advanced: Avancé performance: Performance - versionBadges: dev: Développement staging: Test prod: Production buildDate: Créé - + rangeSliderPercentage:  % labels: uiScale: title: Taille de l’interface - description: >- - Change la taille de l’interface utilisateur. Cette interface se redimensionnera suivant la résolution de votre écran, mais cette option contrôle le facteur de résolution. + description: Change la taille de l’interface utilisateur. Cette interface se + redimensionnera suivant la résolution de votre écran, mais cette + option contrôle le facteur de résolution. scales: super_small: Très petite small: Petite regular: Normale large: Grande huge: Très grande - - scrollWheelSensitivity: - title: Sensibilité du zoom - description: >- - Change la sensibilité du zoom (roulette de la souris et pavé tactile). - sensitivity: - super_slow: Très lent - slow: Lent - regular: Normal - fast: Rapide - super_fast: Très rapide - - fullscreen: - title: Plein écran - description: >- - Il est recommandé de jouer au jeu en plein écran pour obtenir la meilleure expérience possible. Seulement disponible dans la version complète. - - soundsMuted: - title: Sons désactivés - description: >- - Si coché, tous les sons seront désactivés. - - musicMuted: - title: Musique désactivée - description: >- - Si coché, toute la musique sera désactivée. - - theme: - title: Thème - description: >- - Choisissez votre thème (clair / sombre). - - themes: - 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. - - alwaysMultiplace: - title: Placement multiple - description: >- - Si activé, tous les bâtiments resteront sélectionnés tant que vous n’aurez pas annulé. Ceci revient à garder la touche MAJ appuyée en permanence. - - offerHints: - title: Indices - description: >- - Affiche ou non le bouton 'Afficher un indice' dans le coin inférieur gauche. - - language: - title: Langue - description: >- - Change la langue. Les traductions sont une contribution des utilisateurs et peuvent être incomplètes ! - - movementSpeed: - title: Vitesse de déplacement - description: Change la vitesse de déplacement de l’écran avec les touches clavier. - speeds: - super_slow: Très lent - slow: Lent - regular: Normal - fast: Rapide - super_fast: Très rapide - extremely_fast: Extrêmement rapide - - enableTunnelSmartplace: - title: Tunnels intelligents - description: >- - Si cette option est sélectionnée, placer des tunnels effacera automatiquement les convoyeurs inutiles. - Cela permet aussi d’étirer les tunnels, et les tunnels en surnombre seront 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. - autosaveInterval: title: Fréquence des sauvegardes automatiques - description: >- - Contrôle avec quelle fréquence le jeu sera sauvegardé automatiquement. Vous pouvez aussi entièrement désactiver cette fonctionnalité ici. + description: Contrôle avec quelle fréquence le jeu sera sauvegardé + automatiquement. Vous pouvez aussi entièrement désactiver cette + fonctionnalité ici. intervals: one_minute: 1 minute two_minutes: 2 minutes @@ -747,69 +771,158 @@ settings: ten_minutes: 10 minutes twenty_minutes: 20 minutes disabled: Désactivé - - compactBuildingInfo: - title: Informations réduites sur les bâtiments - description: >- - Raccourcit les panneaux d’information sur les bâtiments en n’affichant que les ratios. Si désactivé, montre une description et une image. - - disableCutDeleteWarnings: - title: Désactive les avertissements pour Couper / Effacer - description: >- - Désactive la boîte de dialogue qui s’affiche lorsque vous vous apprêtez à couper / effacer plus de 100 entités. - + scrollWheelSensitivity: + title: Sensibilité du zoom + description: Change la sensibilité du zoom (roulette de la souris et pavé + tactile). + sensitivity: + super_slow: Très lent + slow: Lent + regular: Normal + fast: Rapide + super_fast: Très rapide + movementSpeed: + title: Vitesse de déplacement + description: Change la vitesse de déplacement de l’écran avec les touches du + clavier. + speeds: + super_slow: Très lent + slow: Lent + regular: Normal + fast: Rapide + super_fast: Très rapide + extremely_fast: Extrêmement rapide + language: + title: Langue + description: Change la langue. Les traductions sont une contribution des + utilisateurs et peuvent être incomplètes ! enableColorBlindHelper: title: Mode daltonien - description: Active divers outils qui permettent de jouer à ce jeu si vous êtes daltonien. - + description: Active divers outils qui permettent de jouer à ce jeu si vous êtes + daltonien. + fullscreen: + title: Plein écran + description: Il est recommandé de jouer au jeu en plein écran pour obtenir la + meilleure expérience possible. Seulement disponible dans la + version complète. + soundsMuted: + title: Sons désactivés + description: Si coché, tous les sons seront désactivés. + musicMuted: + title: Musique désactivée + description: Si coché, toute la musique sera désactivée. + soundVolume: + title: Volume du son + description: Régler le volume des effets sonores + musicVolume: + title: Volume de la musique + description: Régler le volume de la musique + theme: + title: Thème + description: Choisissez votre thème (clair / sombre). + themes: + dark: Sombre + light: Clair + refreshRate: + 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 + n’aurez pas annulé. Ceci revient à garder la touche MAJ appuyée + en permanence. + offerHints: + title: Indices + description: Affiche ou non le bouton “Afficher un indice” dans le coin + inférieur gauche. + enableTunnelSmartplace: + title: Tunnels intelligents + description: Si cette option est sélectionnée, placer des tunnels effacera + automatiquement les convoyeurs inutiles. Cela permet aussi + d’étirer les tunnels, et les tunnels en surnombre seront + effacés. + vignette: + title: Effet de vignette + 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 vous lui avez assigné la dernière fois, de manière individuelle. - Cela sera sans doute plus agréable si vous alternez fréquemment entre le placement de différents types de bâtiments. - + description: Chaque catégorie de bâtiment enregistre le sens de rotation que + vous lui avez assigné la dernière fois, de manière individuelle. + Cela sera sans doute plus agréable si vous alternez fréquemment + entre le placement de différents types de bâtiments. + compactBuildingInfo: + title: Informations réduites sur les bâtiments + description: Raccourcit les panneaux d’information sur les bâtiments en + n’affichant que les ratios. Si désactivé, montre une description + et une image. + disableCutDeleteWarnings: + 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 / 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 zoomée pour améliorer les performances. - Ça donne un rendu encore plus propre, alors essayez-le ! - + description: Simplifie le rendu des ressources sur la carte lorsqu’elle est + zoomée pour améliorer les performances. Ça donne un rendu encore + plus propre, alors essayez-le ! disableTileGrid: title: Désactiver la grille de placement - description: >- - Désactiver la grille de placement peut améliorer les performances. Ça rend aussi l’apparence plus unie ! - + description: Désactiver la grille de placement peut améliorer les performances. + Ça rend aussi l’apparence plus unie ! clearCursorOnDeleteWhilePlacing: title: Déselectionner avec le clic droit - description: >- - Activé par défaut. Désélectionne le bâtiment choisi pour la construction lorsque vous faites un clic droit sur un bâtiment existant. Si désactivé, vous pouvez détruire des bâtiments avec un clic droit puis continuer de placer le bâtiment sélectionné. - + description: Activé par défaut. Désélectionne le bâtiment choisi pour la + construction lorsque vous faites un clic droit sur un bâtiment + existant. Si désactivé, vous pouvez détruire des bâtiments avec + un clic droit puis continuer de placer le bâtiment sélectionné. lowQualityTextures: title: Textures de basse résolution (moche) - description: >- - Utilise des textures de basse qualité pour améliorer les performances. Rend le jeu très moche ! - + description: Utilise des textures de basse qualité pour améliorer les + performances. Rend le jeu très moche ! displayChunkBorders: - title: Monter les secteurs - 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. - + title: Montrer les secteurs + 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 un gisement de ressources + description: Activé par défaut, sélectionne l’extracteur si vous utilisez la + 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 + lors du survol du convoyeur pour améliorer les performances. Je + ne recommande pas de jouer avec ce réglage si vous n’avez pas + absolument besoin de performance. + enableMousePan: + title: Activer le déplacement à la souris + description: Permet de déplacer la carte en déplaçant le curseur sur les bords + de l’écran. La vitesse dépend du réglage de la vitesse de + déplacement. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). keybindings: title: Contrôles - hint: >- - Astuce : N’oubliez pas d’utiliser CTRL, MAJ et ALT ! Ces touches activent différentes options de placement. - + hint: "Astuce : N’oubliez pas d’utiliser CTRL, MAJ et ALT ! Ces touches activent + différentes options de placement." resetKeybindings: Réinitialiser les contrôles - categoryLabels: general: Application ingame: Jeu navigation: Navigation placement: Placement - massSelect: Sélection d’une zone + massSelect: Sélection de zone buildings: Raccourcis bâtiment placementModifiers: Modificateurs de placement - mappings: confirm: Confirmer back: Retour @@ -817,77 +930,76 @@ keybindings: mapMoveRight: Aller à droite mapMoveDown: Aller en bas mapMoveLeft: Aller à gauche + mapMoveFaster: Se déplacer plus vite centerMap: Centrer la carte - mapZoomIn: Zoom avant mapZoomOut: Zoom arrière createMarker: Créer une balise - menuOpenShop: Améliorations menuOpenStats: Statistiques - + menuClose: Fermer le menu toggleHud: Basculer l’affichage tête haute (ATH) - toggleFPSInfo: Basculer l’affichage des IPS (itérations par seconde) et des informations de débogage - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + toggleFPSInfo: Basculer l’affichage des IPS (itérations par seconde) et des + informations de débogage + switchLayers: Basculer le calque + exportScreenshot: Exporter une image de toute la base + belt: Convoyeur + balancer: Répartiteur + underground_belt: Tunnel + miner: Extracteur + cutter: Découpeur + rotater: Pivoteur + stacker: Combineur + mixer: Mélangeur de couleur + painter: Peintre + trash: Poubelle + storage: Stockage + wire: Câble + constant_signal: Constante + logic_gate: Porte logique + lever: Interrupteur + filter: Filtre + wire_tunnel: Tunnel à câble + display: Afficheur + 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 + rotateInverseModifier: "Variante : Pivote à gauche" cycleBuildingVariants: Alterner entre les variantes confirmMassDelete: Confirmer la suppression de la sélection + pasteLastBlueprint: Copier le dernier patron 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 - pasteLastBlueprint: Copier le dernier patron - massSelectCut: Couper la sélection - exportScreenshot: Exporter une image de toute la base - mapMoveFaster: Se déplacer plus vite - lockBeltDirection: Utiliser le planificateur de convoyeurs - switchDirectionLockSide: "Planificateur : changer de côté" - pipette: Pipette - menuClose: Fermer le menu - switchLayers: Basculer le calque - advanced_processor: Inverseur de couleur - energy_generator: Générateur d’énergie - wire: Câble - + placeInverse: Inverser l’orientation des convoyeurs about: title: À propos de ce jeu body: >- - Ce jeu est open source et développé par Tobias Springer (c’est moi).

+ Ce jeu est open source et développé par Tobias Springer + (c’est moi).

- Si vous souhaitez contribuer, allez voir shapez.io sur github.

+ Si vous souhaitez contribuer, allez voir shapez.io sur GitHub.

- Ce jeu n’aurait pas pu être réalisé sans la précieuse communauté Discord autour de - mes jeux — Vous devriez vraiment rejoindre le serveur Discord !

+ Ce jeu n’aurait pas pu être réalisé sans la précieuse communauté Discord autour de mes jeux — Vous devriez vraiment rejoindre le serveur Discord !

- La bande son a été créée par Peppsen — Il est génial !

- - Pour terminer, un immense merci à mon meilleur ami Niklas — Sans nos sessions sur Factorio, ce jeu n’aurait jamais existé. + La bande son a été créée par Peppsen — Il est génial !

+ Pour terminer, un immense merci à mon meilleur ami Niklas — Sans nos sessions sur Factorio, ce jeu n’aurait jamais existé. changelog: title: Historique - demo: features: restoringGames: Charger des sauvegardes @@ -895,10 +1007,82 @@ demo: oneGameLimit: Limité à une sauvegarde customizeKeybindings: Personnalisation des contrôles exportingBase: Exporter une image de toute la base - settingNotAvailable: Indisponible dans la démo. -# -# French translation version v0.5 based on english v1.1.8 by Didier WEERTS 'The Corsaire' -# - -# French translation completed (and corrected) by Pascal Grossé, martypiton and Withers001. +tips: + - 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 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 ! + - Vous pouvez utiliser T pour basculer entre différentes variantes. + - La symétrie est la clé ! + - Vous pouvez entrelacer différents niveaux de tunnels. + - 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é. + - 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 + efficacité totale. + - Maintenir MAJ activera le planificateur de convoyeur, vous + permettant de placer facilement de longues lignes de convoyeur. + - Les découpeurs coupent toujours verticalement, quelle que soit leur + orientation. + - Pour obtenir du blanc, mélangez les trois couleurs. + - Le stockage priorise la première sortie. + - 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 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 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 + débloquer des améliorations. + - 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. + - Parfois, vous pouvez trouver une forme nécessaire sur la carte sans la + créer avec des combineurs. + - 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 à 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. + - 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 + é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 ! + - Pour nettoyer les convoyeurs, coupez la zone puis collez-la au même + endroit. + - 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 5a221561..62fde359 100644 --- a/translations/base-hr.yaml +++ b/translations/base-hr.yaml @@ -1,144 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - -# -# This is a message in Croatian to all potential contributers. -# -# Za buduće prevoditelje, htio sam na jednom mjestu imati prijevode glavnih -# komponenti igre, a ovaj prostor se činio dovoljno dobro mjesto za to. -# -# Siguran sam da znate kako je naš jezik malo manje fleksibilan što se tiče -# tehničkih pojmova. Teško je naći elegantan prijevod koji se ujedno čini i -# dovoljno dobar/precizan. Zato je svaka nova ideja dobro došla. Možete mi se -# slobodno javiti na Discordu da prokomentiramo eventualne prijevode ili -# novotvorenice za ovu igru. -# -# Prijevodi glavnih elemenata igre: -# GENERALNI POJMOVI -# + Shape = Oblik -# + Upgrade = Nadogradnja -# + Waypoint = Putokaz -# + Blueprint = Nacrt -# GRAĐEVINSKI ELEMENTI -# + Extractor = Rudar (od alternativnog izraza Miner) -# + Extractor (chain) = Rudar (lančani) -# + Conveyor Belt = Pokretna Traka -# + Belt = Traka (shodno prošlom prijevodu) -# + Tunnel = Tunel -# + Merger = Sjedinitelj -# + Rotator = Obrtač (jer mi Okretač zvuči nekako krivo) -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io je igra o izradi tvornica za automatizaciju stvaranja i spajanja sve složenijih oblika unutar beskonačno velike mape. + shortText: shapez.io je igra o izradi tvornica za automatizaciju stvaranja i + spajanja sve složenijih oblika unutar beskonačno velike mape. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # 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 - # TODO - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - 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. + 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! - 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]! + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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. + 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. - 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] - - discordLink: Official Discord - Chat with me! - global: loading: Učitavanje error: Greška - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers - infinite: inf # TODO šta s ovim? - + infinite: inf time: - # Used for formatting past time dates - # - # Short formats used for Croatian due to different word cases causing - # diffrerent suffixes due to declension oneSecondAgo: prije jedne sekunde xSecondsAgo: prije s oneMinuteAgo: prije jedne minute @@ -147,14 +66,10 @@ global: xHoursAgo: prije h oneDayAgo: prije jedan dan xDaysAgo: prije dana - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: min s hoursAndMinutesShort: h min - xMinutes: min - keys: tab: TAB control: CTRL @@ -162,13 +77,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demo Verzija - intro: >- - Nabavi samostalnu igru kako bi otključao sve značajke! - + intro: Nabavi samostalnu igru kako bi otključao sve značajke! mainMenu: play: Igraj continue: Nastavi @@ -180,16 +91,11 @@ mainMenu: discordLink: Službeni Discord Server helpTranslate: Pomogni s prevođenjem! madeBy: Izradio - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Sorry, but the game is known to run slow on your browser! Get the standalone version or download chrome for the full experience. - + browserWarning: Sorry, but the game is known to run slow on your browser! Get + the standalone version or download chrome for the full experience. savegameLevel: Nivo savegameLevelUnknown: Nepoznati Nivo - - # TODO - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -203,132 +109,116 @@ dialogs: viewUpdate: Pogledaj ažuriranje showUpgrades: Pokaži Nadogradnje showKeybindings: Pokaži tipke - importSavegameError: title: Greška prilikom uvoza - text: >- - Neuspješan uvoz spremljene igre: - + text: "Neuspješan uvoz spremljene igre:" importSavegameSuccess: title: Uvoz spremljene igre - text: >- - Tvoja spremljena igra je uspješno uvezena. - + text: Tvoja spremljena igra je uspješno uvezena. gameLoadFailure: title: Igra je pukla - text: >- - Neuspješno učitavanje spremljene igre: - + 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: - + text: "Neuspješno brisanje spremljene igre:" restartRequired: title: Potrebno ponovno pokretanje - text: >- - Kako bi primijenio postavke, moraš ponovno pokrenuti igru. - + text: Kako bi primijenio postavke, moraš ponovno pokrenuti igru. editKeybinding: title: Promijeni tipku - desc: Pritisni tipku ili gumb na mišu kojeg želiš dodijeliti, ili Escape za otkazivanje. - + desc: Pritisni tipku ili gumb na mišu kojeg želiš dodijeliti, ili Escape za + otkazivanje. resetKeybindingsConfirmation: title: Resetiraj tipke - desc: Ovo će resetirati sve tipke na njihove zadane vrijednosti. Potrebna potvrda. - + desc: Ovo će resetirati sve tipke na njihove zadane vrijednosti. Potrebna + potvrda. keybindingsResetOk: title: Tipke resetirane desc: Tipke su resetirane na svoje zadane vrijednosti! - featureRestriction: title: Demo Verzija - desc: Pokušao si pristupiti značajki () koja nije dostupna u demu. Za puno iskustvo, nabavi samostalnu igru! - + desc: Pokušao si pristupiti značajki () koja nije dostupna u demu. Za + puno iskustvo, nabavi samostalnu igru! oneSavegameLimit: title: Ograničen broj spremljenih igara - desc: Možeš imati samo jednu spremljenu igru u demo verziji. Ukloni postojeću ili nabavi samostalnu igru. - + desc: Možeš imati samo jednu spremljenu igru u demo verziji. Ukloni postojeću + ili nabavi samostalnu igru. updateSummary: title: Novi update! - desc: >- - Evo sve promjene od zadnjeg igranja: - - # TODO + desc: "Evo sve promjene od zadnjeg igranja:" upgradesIntroduction: title: Otključaj Nadogradnje - desc: >- - Svi oblici koji se prozivedu mogu se iskoristiti za otključavanje nadogradnji - Ne preporuča se uništavanje starih tvornica! - Kartica za nadogradnje se može pronaći u gornjem desnom kutu ekrana. - + desc: Svi oblici koji se prozivedu mogu se iskoristiti za otključavanje + nadogradnji - Ne preporuča se uništavanje starih + tvornica! Kartica za nadogradnje se može pronaći u gornjem + desnom kutu ekrana. massDeleteConfirm: title: Potvrdi brisanje - desc: >- - građevina će biti obrisano. Jesi li siguran/na da to želiš? - + desc: građevina će biti obrisano. Jesi li siguran/na da to želiš? massCutConfirm: title: Potvrdi rezanje - desc: >- - građevina će biti izrezano! Jesi li siguran/na da to želiš? - + desc: građevina će biti izrezano! Jesi li siguran/na da to želiš? blueprintsNotUnlocked: title: Nije otključano - desc: >- - Dovrši 12 nivo kako bi otključao Nacrte. - + desc: Dovrši 12 nivo kako bi otključao Nacrte. keybindingsIntroduction: title: Korisne tipke - desc: >- - Igra ima mnogo korisnih tipki, koje olakšavaju izgradnju velikih tvornica. - Evo ih nekoliko, ali svakako se preporuča pogledati sve tipke!

- CTRL + Miš: Odaberi područje.
- SHIFT: Držati za postavljanje više istih zgrada odjednom.
- ALT: Obrni smjer postavljenih pokretnih traka.
- + desc: "Igra ima mnogo korisnih tipki, koje olakšavaju izgradnju velikih + tvornica. Evo ih nekoliko, ali svakako se preporuča + pogledati sve tipke!

CTRL + Miš: Odaberi područje.
SHIFT: Držati za postavljanje više istih + zgrada odjednom.
ALT: Obrni + 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 samostalnu igru za beskonačno mnogo putokaza! - + desc: U demo verziji se mogu stvoriti samo dva putokaza istovremeno. Nabavi + samostalnu igru za beskonačno mnogo putokaza! exportScreenshotWarning: title: Izvezi sliku zaslona - desc: Zatražen je izvoz cijele baze u obliku slike zaslone. Ovo može biti jako sporo za velike tvornice, a može i srušiti igru! + desc: Zatražen je izvoz cijele baze u obliku slike zaslone. Ovo može biti jako + sporo za velike tvornice, a može i srušiti igru! massCutInsufficientConfirm: title: Confirm cut desc: You can not afford to paste this area! Are you sure you want to cut it? - + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: - moveMap: Kretanje #Move - selectBuildings: Odaberi područje #Select area - stopPlacement: Prekini postavljenje #Stop placement - rotateBuilding: Okreći građevinu #Rotate building - placeMultiple: Postavi više odjednom #Place multiple - reverseOrientation: Obrni orijentaciju #Reverse orientation - disableAutoOrientation: Onemogući automatsku orijentaciju #Disable auto orientation - toggleHud: Uključi/Isključi HUD #Toggle HUD - placeBuilding: Smjesti građevinu #Place building + moveMap: Kretanje + selectBuildings: Odaberi područje + stopPlacement: Prekini postavljenje + rotateBuilding: Okreći građevinu + placeMultiple: Postavi više odjednom + reverseOrientation: Obrni orijentaciju + disableAutoOrientation: Onemogući automatsku orijentaciju + toggleHud: Uključi/Isključi HUD + placeBuilding: Smjesti građevinu createMarker: Stvori Putokaz delete: Uništi - pasteLastBlueprint: Zalijepi zadnji nacrt # Paste last blueprint - lockBeltDirection: Onemogući planiranje traka # Enable belt planner - plannerSwitchSide: Okreni stranu planera # Flip planner side + pasteLastBlueprint: Zalijepi zadnji nacrt + lockBeltDirection: Onemogući planiranje traka + plannerSwitchSide: Okreni stranu planera cutSelection: Izreži copySelection: Kopiraj clearSelection: Očisti odabir pipette: Pipeta switchLayers: Promijeni sloj - # Names of the colors, used for the color blind mode colors: red: Crvena green: Zelena @@ -339,18 +229,9 @@ ingame: white: Bijela black: Crna uncolored: Bez boje - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Pritisni za različite varijante. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Tipka: - + hotkeyLabel: "Tipka: " infoTexts: speed: Brzina range: Domet @@ -358,36 +239,21 @@ ingame: oneItemPerSecond: 1 predmet / sekundi itemsPerSecond: predmeta / s itemsPerSecondDouble: (x2) - tiles: polja - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nivo completed: Dovršeno unlockText: Otključano je ! buttonNextLevel: Idući nivo - - # Notifications on the lower right notifications: newUpgrade: Nova nadogradnja je dostupna! gameSaved: Igra je spremljena. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Nadogradnje buttonUnlock: Nadogradi - - # Gets replaced to e.g. "Tier IX" tier: Razina - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAKSIMALNI LEVEL (Brzina x) - - # The "Statistics" window statistics: title: Statistika dataSources: @@ -396,62 +262,86 @@ ingame: description: Količine pohranjenih oblika u središnjoj građevini. produced: title: Proizvedeno - description: Svi oblici koje proizvodi cijela tvornica, uključujući i međuproizvode. + description: Svi oblici koje proizvodi cijela tvornica, uključujući i + međuproizvode. delivered: title: Dostavljeno description: Oblici koji se dostavljaju u središnju građevinu. noShapesProduced: Za sada nema proizvedenih oblika. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / min - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Vrijeme igranja - buildingsPlaced: Građevine beltsPlaced: Trake - - buttons: - continue: Nastavi - settings: Postavke - menu: Vrati se u glavni izbornik - - # Bottom left tutorial hints tutorialHints: title: Trebaš pomoć? showHint: Savjet za gradnju hideHint: Zatvori - - # When placing a blueprint blueprintPlacer: cost: Cijena - - # Map markers waypoints: waypoints: Putokazi hub: Središte - description: Klikni lijevim klikom na marker kako bi skočio na njegovu lokaciju, a izbriši ga desnim klikom.

Za stvaranje markera pritisni , ili desnim klikom stvori marker na odabranoj lokaciji. + description: Klikni lijevim klikom na marker kako bi skočio na njegovu lokaciju, + a izbriši ga desnim klikom.

Za stvaranje markera pritisni + , ili desnim klikom stvori marker na + odabranoj lokaciji. creationSuccessNotification: Putokaz stvoren. - - # Shape viewer shapeViewer: title: Slojevi empty: Prazno - copyKey: Kopiraj # TODO ispraviti ovo/correct this - - # Interactive tutorial + copyKey: Kopiraj interactiveTutorial: title: Tutorijal hints: - 1_1_extractor: Stavi Rudara na oblik kruga kako bi se izvukao iz tla! - 1_2_conveyor: >- - Spoji rudara na središnju građevinu (HUB) koristeći pokretnu traku.

Savjet: Pritisni i povlači traku mišem! - - 1_3_expand: >- - Ovo NIJE igra čekanja! Više rudara i pokretnih traka će ubrzati napredak do cilja.

Savjet: Drži SHIFT za postavljanje više rudara istovremeno, a pritisni R za rotaciju. - -# All shop upgrades + 1_1_extractor: Stavi Rudara na oblik kruga + kako bi se izvukao iz tla! + 1_2_conveyor: "Spoji rudara na središnju građevinu (HUB) koristeći + pokretnu traku.

Savjet: Pritisni + i povlači traku mišem!" + 1_3_expand: "Ovo NIJE igra čekanja! Više rudara i pokretnih + traka će ubrzati napredak do cilja.

Savjet: Drži + SHIFT za postavljanje više rudara istovremeno, + a pritisni R za rotaciju." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Trake, Distributer i Tuneli @@ -465,244 +355,380 @@ shopUpgrades: painting: name: Miješanje i Bojanje description: Brzina x → x - -# Buildings and their name / description buildings: hub: deliver: Dostavi toUnlock: kako bi otključao levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Pokretna Traka + name: Pokretna Traka description: Transports items, hold and drag to place multiple. - wire: default: - name: &wire Žica + name: Žica description: Dopušta prijenos energije - - miner: # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + miner: default: - name: &miner Rudar + name: Rudar description: Place over a shape or color to extract it. - chainable: name: Rudar (Lančani) description: Place over a shape or color to extract it. Can be chained. - - underground_belt: # Internal name for the Tunnel + underground_belt: default: - name: &underground_belt Tunel + name: Tunel description: Allows to tunnel resources under buildings and belts. - tier2: name: Tunel razine II description: Allows to tunnel resources under buildings and belts. - - splitter: # Internal name for the Balancer - default: - name: &splitter Balanser - description: Multifunkcionalan - Jednoliko raspodijeljuje sve ulaze na sve izlaze. - - compact: - name: Sjedinitelj (kompaktni) - description: Sjedinjuje dvije pokretne trake u jednu. - - compact-inverse: - name: Sjedinitelj (kompaktni) - description: Sjedinjuje dvije pokretne trake u jednu. - cutter: default: - name: &cutter Rezač - description: Reže oblike od vrha prema dnu i na izlaze daje obe polovice. Ako se koristi samo jedan dio, drugi se mora uništiti da bi se spriječio zastoj! + name: Rezač + description: Reže oblike od vrha prema dnu i na izlaze daje obe polovice. + Ako se koristi samo jedan dio, drugi se mora uništiti da + bi se spriječio zastoj! quad: name: Rezač (Četverostruki) - description: Reže oblike u četiri dijela. Ako se koristi samo jedan dio, ostali se moraju uništiti da bi se spriječio zastoj! - - advanced_processor: - default: - name: &advanced_processor Napredni Procesor - description: Napredna obrada Oblika - + description: Reže oblike u četiri dijela. Ako se koristi samo jedan dio, + ostali se moraju uništiti da bi se spriječio zastoj! rotater: default: - name: &rotater Obrtač (↻) + name: Obrtač (↻) description: Okreće oblike za 90 stupnjeva u smjeru kazaljke na satu. ccw: name: Obrtač (↺) - description: Okreće oblike za 90 stupnjeva u smjeru suprotnom od kazaljke na satu. - fl: + description: Okreće oblike za 90 stupnjeva u smjeru suprotnom od kazaljke na + satu. + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Slagač - description: Slaže jedan oblik na drugi. Ako se ne mogu spojiti, desni oblik se postavlja na vrh lijevog. - + name: Slagač + description: Slaže jedan oblik na drugi. Ako se ne mogu spojiti, desni oblik se + postavlja na vrh lijevog. mixer: default: - name: &mixer Miješalica boja + name: Miješalica boja description: Spaja dvije boje koristeći aditivno miješanje. - painter: default: - name: &painter Bojač - description: &painter_desc Boja cijeli oblik na lijevom ulazu bojom s gornjeg ulaza. - + name: Bojač + description: Boja cijeli oblik na lijevom ulazu bojom s gornjeg ulaza. mirrored: - name: *painter - description: *painter_desc - + name: Bojač + description: Boja cijeli oblik na lijevom ulazu bojom s gornjeg ulaza. double: name: Bojač (Dupli) 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: &trash Smeće + name: Smeće description: Prima stvari sa svih strana i uništava ih. Zauvijek. - - storage: - name: Skladište - description: Skladišti višak stvari do određenog kapaciteta. Može se koristiti kao zaštita od preljeva. - - energy_generator: - deliver: Dostavi - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: Za - + balancer: default: - name: &energy_generator Generator - description: Proizvodi energiju iz oblika. Svaki generator zahtijeva različiti oblik. - wire_crossings: - default: - name: Wire Splitter - description: Splits a energy wire into two. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 stupnjeva u smjeru kazaljke na satu. - + desc: Obrtač je otključan! Ovaj stroj okreće oblike za 90 + stupnjeva u smjeru kazaljke na satu. reward_painter: title: Painting - desc: >- - Bojač je otključan - Boja se (kao i oblici) može rudariti i spojiti s oblikom u bojaču!

PS: Postoji opcija za daltonizam u postavkama! - + desc: "Bojač je otključan - Boja se (kao i oblici) može + rudariti i spojiti s oblikom u bojaču!

PS: Postoji + opcija za daltonizam u postavkama!" reward_mixer: title: Miješalica boja - desc: Miješalica boja je otključana - U ovoj se građevini dvije boje mogu spojiti koristeći aditivno miješanje! - + desc: Miješalica boja je otključana - U ovoj se građevini dvije + boje mogu spojiti koristeći aditivno miješanje! reward_stacker: title: Slagač - desc: Sada se dva oblika mogu spojiti slagačem! Oblici s oba ulaza se spajaju - ako se mogu staviti jedan kraj drugoga, biti će spojeni. Ako ne, desni ulaz se slaže na vrh lijevog! - + desc: Sada se dva oblika mogu spojiti slagačem! Oblici s oba + ulaza se spajaju - ako se mogu staviti jedan kraj drugoga, biti će + spojeni. Ako ne, desni ulaz se slaže na + 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 i ostalih građevina! - + desc: Tunel je otključan - Omogućava slanje stvari ispod traka + i ostalih građevina! reward_rotater_ccw: title: Rotacija u smjeru suprotnom od kazaljke na satu - desc: Varijanta obrtača je otključana - Omogućuje okretanje u smjeru suprotnom od kazaljke! Odaberi obrtač i pritisni 'T' za mijenjanje njegove varijante! - + desc: Varijanta obrtača je otključana - Omogućuje okretanje u + smjeru suprotnom od kazaljke! Odaberi obrtač i pritisni 'T' + 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 domet, a uz se sada mogu kombinirati vrste tunela. - - reward_splitter_compact: - title: Kompaktni Balanser - desc: >- - You have unlocked a compact variant of the balanser - It accepts two inputs and merges them into one! - + desc: Otključana je nova varijanta tunela - Ima veći + domet, a uz se sada mogu kombinirati vrste tunela. reward_cutter_quad: title: Quad Cutting - desc: You have unlocked a variant of the cutter - It allows you to cut shapes in four parts instead of just two! - + 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: Double Painting - desc: You have unlocked a variant of the painter - It works as the regular painter but processes two shapes at once consuming just one color instead of two! - - reward_painter_quad: - title: Quad Painting - desc: You have unlocked a variant of the painter - It allows to paint each part of the shape individually! - + desc: You have unlocked a variant of the painter - It works as + the regular painter but processes two shapes at + 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!) - + 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: Blueprints - desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). - - # Special reward, which is shown when there is no reward actually + 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: Next level - desc: >- - This level gave you no reward, but the next one will!

PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades! - + desc: "This level gave you no reward, but the next one will!

PS: Better + don't destroy your existing factory - You need all + those shapes later again to unlock upgrades!" no_reward_freeplay: title: Next level - desc: >- - Congratulations! By the way, more content is planned for the standalone! - + desc: Congratulations! By the way, more content is planned for the 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Postavke categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Development staging: Staging prod: Production buildDate: Built - labels: uiScale: title: Veličina sučelja - description: >- - Changes the size of the user interface. The interface will still scale based on your device resolution, but this setting controls the amount of scale. + description: Changes the size of the user interface. The interface will still + scale based on your device resolution, but this setting controls + the amount of scale. scales: super_small: Jako maleno small: Maleno regular: Normalno large: Veliko huge: Ogromno - autosaveInterval: title: Interval Automatskog Spremanja - description: >- - Upravlja koliko se često pokreće automatsko spremanje igre. Također se ta funkcionalnost može u potpunosti isključiti. - + description: Upravlja koliko se često pokreće automatsko spremanje igre. Također + se ta funkcionalnost može u potpunosti isključiti. intervals: one_minute: 1 minuta two_minutes: 2 minute @@ -710,22 +736,18 @@ settings: ten_minutes: 10 minuta twenty_minutes: 20 minuta disabled: Onemogući - scrollWheelSensitivity: title: Osjetljivost zumiranja - description: >- - Changes how sensitive the zoom is (Either mouse wheel or trackpad). + description: Changes how sensitive the zoom is (Either mouse wheel or trackpad). sensitivity: super_slow: Jako sporo slow: Sporo regular: Normalno fast: Brzo super_fast: Jako brzo - movementSpeed: title: Brzina kretanja - description: >- - Mijenja brzinu kretanja kamere pri korištenju tipkovnice. + description: Mijenja brzinu kretanja kamere pri korištenju tipkovnice. speeds: super_slow: Jako Sporo slow: Sporo @@ -733,87 +755,120 @@ settings: fast: Brzo super_fast: Jako Brzo extremely_fast: Iznimno Brzo - language: title: Jezik - description: >- - Promijeni jezik igre. Sve prijevode su napravili korisnici volonteri i mogu biti nedovršeni. - + description: Promijeni jezik igre. Sve prijevode su napravili korisnici + volonteri i mogu biti nedovršeni. enableColorBlindHelper: title: Opcija za daltonizam - description: >- - Omogućuje razne alate koji pomožu pri igranju igre s nekim oblikom sljepoće na boju. - + description: Omogućuje razne alate koji pomožu pri igranju igre s nekim oblikom + sljepoće na boju. fullscreen: title: Puni zaslon - description: >- - Preporuča se, radi najboljeg iskustva, igrati igru na punom zaslonu. Dostupno samo u samostalnoj igri. - + description: Preporuča se, radi najboljeg iskustva, igrati igru na punom + zaslonu. Dostupno samo u samostalnoj igri. soundsMuted: title: Utišaj Zvukove - description: >- - Ako je odabrano, svi zvukovi su utišani. - + description: Ako je odabrano, svi zvukovi su utišani. musicMuted: title: Utišaj Glazbu - description: >- - Ako je odabrano, glazba je utišana. - + description: Ako je odabrano, glazba je utišana. theme: title: Tema Igre - description: >- - Odaberi temu igre (svijetlo/tamno). + description: Odaberi temu igre (svijetlo/tamno). themes: dark: Tamno light: Svijetlo - refreshRate: title: Simulacija za 144 Hz - description: >- - Opcija za monitore visoke frekvencije osvježavanje. Ovo može smanjiti FPS ako je računalo presporo. - + description: Opcija za monitore visoke frekvencije osvježavanje. Ovo može + smanjiti FPS ako je računalo presporo. alwaysMultiplace: title: Višestruko postavljanje - description: >- - Ako je omogućeno, sve građevine će ostati odabrane nakon što su postavljene, dok se poništenje ne odradi ručno. - + description: Ako je omogućeno, sve građevine će ostati odabrane nakon što su + postavljene, dok se poništenje ne odradi ručno. offerHints: title: Savjeti i Upute - description: >- - Opcija za pokazivanje savjeta i uputa za vrijeme igre. Dodatno sakriva određene elemente sučelja dok nisu otključani za lakše učenje igre. - + description: Opcija za pokazivanje savjeta i uputa za vrijeme igre. Dodatno + sakriva određene elemente sučelja dok nisu otključani za lakše + učenje igre. enableTunnelSmartplace: title: Pametni Tuneli - description: >- - Ako je omogućeno, postavljanje tunela automatski briše nepotrebne pokretne trake. Također omogućuje povlačenje tunela i brisanje višak tunela. - + description: Ako je omogućeno, postavljanje tunela automatski briše nepotrebne + pokretne trake. Također omogućuje povlačenje tunela i brisanje + višak tunela. vignette: title: Vinjeta - description: >- - Omogućeva efekt vinjete - zatamnjenje rubova ekrana. - + description: Omogućeva efekt vinjete - zatamnjenje rubova ekrana. 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. - + description: Each building type remembers the rotation you last set it to + individually. This may be more comfortable if you frequently + switch between placing different building types. compactBuildingInfo: title: Compact Building Infos - description: >- - Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown. - + description: Shortens info boxes for buildings by only showing their ratios. + Otherwise a description and image is shown. disableCutDeleteWarnings: title: Disable Cut/Delete Warnings - description: >- - Disables the warning dialogs brought up when cutting/deleting more than 100 entities. - + description: Disables the warning dialogs brought up when cutting/deleting more + than 100 entities. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Tipka - hint: >- #TODO - Savjet: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. - + hint: "Savjet: Be sure to make use of CTRL, SHIFT and ALT! They enable different + placement options." resetKeybindings: Ponovno postavi sve tipke - categoryLabels: general: Aplikacija ingame: Igra @@ -822,8 +877,6 @@ keybindings: massSelect: Masovno Odabiranje buildings: Kratice Građevina placementModifiers: Modifikatori Smještanja - - #TODO mappings: confirm: Potvrdi back: Nazad @@ -833,58 +886,63 @@ keybindings: mapMoveLeft: Idi lijevo mapMoveFaster: Brže kretanje centerMap: Center Map - mapZoomIn: Zumiraj mapZoomOut: Umanji createMarker: Stvori novi Putokaz - menuOpenShop: Nadogradnje menuOpenStats: Statistika - toggleHud: Upali/Ugasi HUD toggleFPSInfo: Upali/Ugasi informacije o traženju grešaka u kodu switchLayers: Promijeni sloj exportScreenshot: Izvezi cijelu Bazu kao Sliku - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Pokretna Traka + underground_belt: Tunel + miner: Rudar + cutter: Rezač + rotater: Obrtač (↻) + stacker: Slagač + mixer: Miješalica boja + painter: Bojač + trash: Smeće + wire: Žica pipette: Pipeta rotateWhilePlacing: Rotiraj - rotateInverseModifier: >- - Modifikator: Rotiraj u smjeru suprotnom od kazaljke na satu + rotateInverseModifier: "Modifikator: Rotiraj u smjeru suprotnom od kazaljke na satu" cycleBuildingVariants: Mijenjaj Varijante confirmMassDelete: Potvrdi Masovno Brisanje pasteLastBlueprint: Zalijepi posljednji Nacrt cycleBuildings: Mijenjaj građevine lockBeltDirection: Omogući planer pokretnih traka - switchDirectionLockSide: >- - Planer: Obrni stranu - + switchDirectionLockSide: "Planer: Obrni stranu" massSelectStart: Pritisni i zadrži za započinjanje massSelectSelectMultiple: Odaberi više područja massSelectCopy: Kopiraj područje massSelectCut: Izreži područje - placementDisableAutoOrientation: Onemogući automatsku orijentaciju placeMultiple: Ostani u modusu za smještanje placeInverse: Obrni automatsku orijentaciju pokretnih traka menuClose: Close Menu -#TODO + 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: O Igri body: >- - This game is open source and developed by Tobias Springer (this is me).

+ This game is open source and developed by Tobias Springer + (this is me).

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

@@ -893,10 +951,8 @@ about: The soundtrack was made by Peppsen - He's awesome.

Finally, huge thanks to my best friend Niklas - Without our factorio sessions this game would never have existed. - changelog: title: Ispravci - demo: features: restoringGames: Obnavljanje spremljenih igara @@ -904,5 +960,65 @@ demo: oneGameLimit: Ograničeno na jednu spremljenu igru customizeKeybindings: Prilagodba Tipki exportingBase: Izvoz cijele Baze u obliku Slike - settingNotAvailable: Nije dostupno u demo verziji. +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. diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml index bc5b727e..68b242dd 100644 --- a/translations/base-hu.yaml +++ b/translations/base-hu.yaml @@ -1,114 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: 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. + 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. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # This is the text shown above the Discord link - discordLink: Hivatalos Discord - Beszélgessünk! + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - # 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] + 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! - 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. + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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] + 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 - - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "." - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider: . decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: e millions: M billions: Mrd trillions: Tr - - # Shown for infinitely big numbers infinite: végtelen - time: - # Used for formatting past time dates oneSecondAgo: egy másodperccel ezelőtt xSecondsAgo: másodperccel ezelőtt oneMinuteAgo: egy perccel ezelőtt @@ -117,14 +67,10 @@ global: xHoursAgo: órával ezelőtt oneDayAgo: egy nappal ezelőtt xDaysAgo: nappal ezelőtt - - # Short formats for times, e.g. '5h 23m' secondsShort: mp minutesAndSecondsShort: p mp hoursAndMinutesShort: ó p - xMinutes: perc - keys: tab: TAB control: CTRL @@ -132,13 +78,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demó verzió - intro: >- - Vásárold meg az önálló verziót a teljes játékélményért! - + intro: Vásárold meg az önálló verziót a teljes játékélményért! mainMenu: play: Játék continue: Folytatás @@ -150,14 +92,12 @@ mainMenu: discordLink: Hivatalos Discord Szerver helpTranslate: Segíts fordítani! madeBy: Készítette - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Elnézést, de a játék ezen a böngészőn problémásan fut. Vásárold meg az Önálló Verziót, vagy töltsd le a Chrome-ot a teljes játékélményért. - + browserWarning: Elnézést, de a játék ezen a böngészőn problémásan fut. Vásárold + meg az Önálló Verziót, vagy töltsd le a Chrome-ot a teljes + játékélményért. savegameLevel: . szint savegameLevelUnknown: Ismeretlen szint - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -171,112 +111,100 @@ dialogs: viewUpdate: Frissítés Megtekintése showUpgrades: Fejlesztések showKeybindings: Irányítás - importSavegameError: title: Importálás Hiba - text: >- - Nem sikerült importálni a mentésed: - + text: "Nem sikerült importálni a mentésed:" importSavegameSuccess: title: Mentés Importálva - text: >- - A mentésed sikeresen importálva lett. - + text: A mentésed sikeresen importálva lett. gameLoadFailure: title: A játék elromlott - text: >- - Nem sikerült betölteni a mentésed: - + 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: - + text: "Nem sikerült törölni a mentésed:" restartRequired: title: Újraindítás szükséges - text: >- - Újra kell indítanod a játékot, hogy életbe lépjenek a módosítások. - + text: Újra kell indítanod a játékot, hogy életbe lépjenek a módosítások. editKeybinding: title: Gyorsbillentyű módosítása - desc: Nyomd meg a billentyűt vagy egérgombot, amit használni szeretnél, vagy nyomj ESC-et, ha mégse. - + desc: Nyomd meg a billentyűt vagy egérgombot, amit használni szeretnél, vagy + nyomj ESC-et, ha mégse. resetKeybindingsConfirmation: title: Gyorsbillentyűk visszaállítása - desc: Ez minden gyorsbillentyűt visszaállít az eredeti állapotára. Biztos vagy benne? - + desc: Ez minden gyorsbillentyűt visszaállít az eredeti állapotára. Biztos vagy + benne? keybindingsResetOk: title: Gyorsbillentyűk visszaállítva desc: A gyorsbillentyűk az eredeti értékekre visszaállítva! - featureRestriction: title: Demó Verzió - desc: Egy olyan funkciót próbáltál elérni (), amely nem elérhető a Demóban. Vásárold meg an Önálló verziót a teljes játékélményért! - + desc: Egy olyan funkciót próbáltál elérni (), amely nem elérhető a + Demóban. Vásárold meg an Önálló verziót a teljes játékélményért! oneSavegameLimit: title: Egy Játékmentés - desc: A Demó verzióban egyszerre csak egy játékmentésed lehet. Töröld a meglévő mentésedet, vagy vásárold meg az Önálló verziót! - + desc: A Demó verzióban egyszerre csak egy játékmentésed lehet. Töröld a meglévő + mentésedet, vagy vásárold meg az Önálló verziót! updateSummary: title: Új frissítés! - desc: >- - Íme a változások a legutóbbi játékod óta: - + desc: "Íme a változások a legutóbbi játékod óta:" upgradesIntroduction: title: Szerezz Fejlesztéseket - desc: >- - Minden legyártott alakzatot felhasználhatsz a fejlesztésekhez - Ne töröld ki a régi gyáraidat! - A Fejlesztések lap a képernyő jobb felső sarkában található. - + desc: Minden legyártott alakzatot felhasználhatsz a fejlesztésekhez - Ne + töröld ki a régi gyáraidat! A Fejlesztések lap a képernyő + jobb felső sarkában található. massDeleteConfirm: title: Törlés megerősítése - desc: >- - Egy csomó épületet akarsz egyszerre törölni (egészen pontosan -t)! Biztos, hogy ezt szeretnéd? - + desc: Egy csomó épületet akarsz egyszerre törölni (egészen pontosan -t)! + Biztos, hogy ezt szeretnéd? massCutConfirm: title: Biztosan kivágod? - desc: >- - Egy csomó épületet akarsz egyszerre kivágni (egészen pontosan -t)! Biztos, hogy ezt szeretnéd? - + desc: Egy csomó épületet akarsz egyszerre kivágni (egészen pontosan -t)! + Biztos, hogy ezt szeretnéd? massCutInsufficientConfirm: title: Kivágás megerősítése - desc: Nincs elég Tervrajzod ennek a beillsztéséhez! Egészen biztos, hogy kivágod? - + desc: Nincs elég Tervrajzod ennek a beillsztéséhez! Egészen biztos, hogy + kivágod? blueprintsNotUnlocked: title: Még nincs feloldva - desc: >- - A Tervrajzokat a 12-es szinten fogod feloldani. - + desc: A Tervrajzokat a 12-es szinten fogod feloldani. keybindingsIntroduction: title: Hasznos billentyűk - desc: >- - A játék sok hasznos gyorsbillentyűt tartalmaz, amelyek megkönnyítik a gyárépítést. - Íme, néhány, de feltétlenül nézd meg a gyorsbillentyűket!

- CTRL + Húzás: Terület kijelölése másolás/törléshez.
- SHIFT: Egyszerre több épületet rak le.
- ALT: Megfordítja a futószalagok irányát lehelyezéskor.
- + desc: "A játék sok hasznos gyorsbillentyűt tartalmaz, amelyek megkönnyítik a + gyárépítést. Íme, néhány, de feltétlenül nézd meg a + gyorsbillentyűket!

CTRL + Húzás: Terület kijelölése + másolás/törléshez.
SHIFT: + Egyszerre több épületet rak le.
ALT: Megfordítja a futószalagok irányát + lehelyezéskor.
" createMarker: title: Ú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, hogy feloldd ezt a korlátozást! - + desc: A Demó verzióban csak két Jelölőd lehet. Vásárold meg az Önálló verziót, + hogy feloldd ezt a korlátozást! exportScreenshotWarning: title: Képernyőkép exportálása - desc: >- - A teljes bázisod képének lementését választottad. Vedd figyelembe, hogy ez nagy méretű bázisoknál igen lassú lehet, de akár a játék összeomlását is okozhatja! - + desc: A teljes bázisod képének lementését választottad. Vedd figyelembe, hogy ez + nagy méretű bázisoknál igen lassú lehet, de akár a játék + összeomlását is okozhatja! + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Mozgatás selectBuildings: Terület kijelölése @@ -297,8 +225,6 @@ ingame: clearSelection: Kijelölés megszüntetése pipette: Pipetta switchLayers: Réteg váltás - - # Names of the colors, used for the color blind mode colors: red: Piros green: Zöld @@ -309,18 +235,9 @@ ingame: white: Fehér black: Fekete uncolored: Színezetlen - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Nyomd meg a -t, a variációk váltogatásához. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Gyorsbillentyű: - + hotkeyLabel: "Gyorsbillentyű: " infoTexts: speed: Sebesség range: Távolság @@ -328,36 +245,21 @@ ingame: oneItemPerSecond: 1 tárgy / mp itemsPerSecond: tárgy / mp itemsPerSecondDouble: (x2) - tiles: csempe - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: . Szint completed: Teljesítve unlockText: Feloldva! buttonNextLevel: Következő Szint - - # Notifications on the lower right notifications: newUpgrade: Egy új fejlesztés elérhető! gameSaved: A játékállás mentve. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Fejlesztések buttonUnlock: Fejlesztés - - # Gets replaced to e.g. "Tier IX" tier: . Szint - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: LEGMAGASABB SZINT (x Sebesség) - - # The "Statistics" window statistics: title: Statisztikák dataSources: @@ -366,62 +268,86 @@ ingame: description: Az összes tárolt alakzatod a központi épületben. produced: title: Gyártva - description: Az összes eddig legyártott alakzatod, beleértve a köztes alakzatokat is. + description: Az összes eddig legyártott alakzatod, beleértve a köztes + alakzatokat is. delivered: title: Beszállítva description: Az összes alakzat, amely jelenleg kézbesítés alatt van a központba. noShapesProduced: Még nem gyártottál egy alazkatot sem. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / p - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Játékidő - buildingsPlaced: Épületek száma beltsPlaced: Futószalagok hossza - - buttons: - continue: Folytatás - settings: Beállítások - menu: Vissza a menübe - - # Bottom left tutorial hints tutorialHints: title: Segítségre van szükséged? showHint: Segítség mutatása hideHint: Bezárás - - # When placing a blueprint blueprintPlacer: cost: Ár - - # Map markers waypoints: waypoints: Jelölők hub: KÖZPONT - description: Bal klikk egy jelölőre az odaugráshoz, jobb klikk a törléshez.

Nyomj -t egy jelölő készítéséhez a jelenlegi nézetből, vagy jobb klikk egy jelölő készítéséhez a kiválasztott helyre. + description: Bal klikk egy jelölőre az odaugráshoz, jobb klikk a + törléshez.

Nyomj -t egy jelölő készítéséhez a + jelenlegi nézetből, vagy jobb klikk egy jelölő + készítéséhez a kiválasztott helyre. creationSuccessNotification: Jelölő létrehozva. - - # Shape viewer shapeViewer: title: Rétegek empty: Üres copyKey: Gyorskód másolása - - # Interactive tutorial interactiveTutorial: title: Oktatás hints: - 1_1_extractor: Helyezz egy bányát egy kör alakzat tetejére a kibányászásához! - 1_2_conveyor: >- - Kösd össze a bányát egy futószalag segítségével a Központi épülettel!

Tipp: Kattints és húzd a futószalagot az egérrel! - - 1_3_expand: >- - Ez NEM egy tétlen játék! Építs több bányát és futószalagot, hogy hamarabb elérd a célt.

Tipp: Tartsd lenyomva a SHIFT-et, hogy egyszerre több bányát helyezz le, és nyomj R-t a forgatáshoz. - -# All shop upgrades + 1_1_extractor: Helyezz egy bányát egy kör + alakzat tetejére a kibányászásához! + 1_2_conveyor: "Kösd össze a bányát egy futószalag segítségével + a Központi épülettel!

Tipp: Kattints és + húzd a futószalagot az egérrel!" + 1_3_expand: "Ez NEM egy tétlen játék! Építs több bányát és + futószalagot, hogy hamarabb elérd a célt.

Tipp: Tartsd + lenyomva a SHIFT-et, hogy egyszerre több bányát + helyezz le, és nyomj R-t a forgatáshoz." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Futószalagok, Elosztók & Alagutak @@ -435,300 +361,427 @@ shopUpgrades: painting: name: Keverés & Festés description: x → x Sebesség - -# Buildings and their name / description buildings: hub: deliver: Deliver toUnlock: to unlock levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Futószalag - description: Elemeket szállít, tartsd nyomva az egérgombot egyszerre több lerakásához. - + name: Futószalag + description: Elemeket szállít, tartsd nyomva az egérgombot egyszerre több + lerakásához. wire: default: - name: &wire Energy Wire + name: Energy Wire description: Allows you to transport energy. - - # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. miner: default: - name: &miner Bányász + name: Bányász description: Tedd egy alakzatra vagy színre a kibányászásához. - chainable: name: Bányász (összekapcsolható) - description: Tedd egy alakzatra vagy színre a kibányászásához. Több egymáshoz kapcsolható. - - # Internal name for the Tunnel + description: Tedd egy alakzatra vagy színre a kibányászásához. Több egymáshoz + kapcsolható. underground_belt: default: - name: &underground_belt Alagút + name: Alagút description: Segítségével futószalagok és épületek alatt átvezethetők az elemek. - tier2: name: Alagút II description: Segítségével futószalagok és épületek alatt átvezethetők az elemek. - - # Internal name for the Balancer - splitter: - default: - name: &splitter Elosztó - description: Többfunkciós - Egyenletesen szétosztja a bementeket a kimenetekre. - - compact: - name: Egyesítő (kompakt) - description: Két futószalagot egyesít. - - compact-inverse: - name: Egyesítő (kompakt) - description: Két futószalagot egyesít. - cutter: default: - name: &cutter Vágó - description: Függőlegesen félbevágja az alakzatokat. Ha csak az egyik felet akarod használni, ne felejtsd el a másikat kukába küldeni, különben eldugítja! + name: Vágó + description: Függőlegesen félbevágja az alakzatokat. Ha csak az egyik + felet akarod használni, ne felejtsd el a másikat kukába küldeni, + különben eldugítja! quad: name: Vágó (negyedelő) - description: Négyfelé vágja az alakzatokat. Cuts shapes into four parts. Ha csak az egyik felet akarod használni, ne felejtsd el a többit a kukába küldeni, különben eldugítja! - - advanced_processor: - default: - name: &advanced_processor Color Inverter - description: Accepts a color or shape and inverts it. - + description: Négyfelé vágja az alakzatokat. Cuts shapes into four parts. + Ha csak az egyik felet akarod használni, ne felejtsd el + a többit a kukába küldeni, különben eldugítja! rotater: default: - name: &rotater Forgató + name: Forgató description: Elforgatja az alakzatot óramutató irányában 90 fokkal. ccw: name: Forgató (fordított) description: Elforgatja az alakzatot óramutatóval ellentétesen 90 fokkal. - fl: - name: Forgató (180) - description: Elforgatja az alakzatot 180 fokkal. - + rotate180: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: - name: &stacker Egyesítő - description: Egyesít két elemet. Ha nem lehet összeilleszteni őket, a jobboldali elem a baloldali tetejére kerül. - + name: Egyesítő + description: Egyesít két elemet. Ha nem lehet összeilleszteni őket, a jobboldali + elem a baloldali tetejére kerül. mixer: default: - name: &mixer Színkeverő + name: Színkeverő description: Összekever két színt összeadó színkeveréssel. - painter: default: - name: &painter Festő - description: &painter_desc Beszínezi az alakzatot a baloldali bemeneten a jobboldali bemeneten érkező színnel. - + name: Festő + description: Beszínezi az alakzatot a baloldali bemeneten a jobboldali bemeneten + érkező színnel. mirrored: - name: *painter - description: *painter_desc - + name: Festő + description: Beszínezi az alakzatot a baloldali bemeneten a jobboldali bemeneten + érkező színnel. double: name: Festő (Dupla) - description: Beszínezi az alakzatokat a baloldali bemeneteken a fenti bemeneten érkező színnel. - + description: Beszínezi az alakzatokat a baloldali bemeneteken a fenti bemeneten + érkező színnel. quad: name: Festő (Négyszeres) - description: Az alakzat négy negyedét különböző színekkel lehet vele színezni. - + 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 Kuka - description: Bármelyik irányból lehet hozzá csatlakozni, és megsemmisíti a beleküldött elemeket. Örökre. - - storage: - name: Tároló - description: Tárolja a fölös elemeket egy bizonyos kapacitásig. - - energy_generator: - deliver: Deliver - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: For - + name: Kuka + description: Bármelyik irányból lehet hozzá csatlakozni, és megsemmisíti a + beleküldött elemeket. Örökre. + balancer: default: - name: &energy_generator Energy Generator - description: Generates energy by consuming shapes. - - wire_crossings: - default: - name: &wire_crossings Wire Splitter - description: Splits a energy wire into two. - + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store reward_cutter_and_trash: title: Cutting Shapes - desc: You just unlocked the cutter - it cuts shapes half from top to bottom regardless of its orientation!

Be sure to get rid of the waste, or otherwise it will stall - For this purpose I gave you a trash, which destroys everything you put into it! - + 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 clockwise by 90 degrees. - + desc: The rotater has been unlocked! It rotates shapes + clockwise by 90 degrees. reward_painter: title: Painting - desc: >- - The painter has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!

PS: If you are colorblind, there is a color blind mode in the settings! - + 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!" reward_mixer: title: Color Mixing - desc: The mixer has been unlocked - Combine two colors using additive blending with this building! - + desc: The mixer has been unlocked - Combine two colors using + additive blending with this building! reward_stacker: title: Combiner - desc: You can now combine shapes with the combiner! Both inputs are combined, and if they can be put next to each other, they will be fused. If not, the right input is stacked on top of the left input! - + desc: You can now combine shapes with the combiner! Both inputs + are combined, and if they can be put next to each other, they will + be fused. If not, the right input is + stacked on top of the left input! 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 through belts and buildings with it! - + desc: The tunnel has been unlocked - You can now pipe items + through belts and buildings with it! reward_rotater_ccw: title: CCW Rotating - desc: You have unlocked a variant of the rotater - It allows to rotate counter clockwise! To build it, select the rotater and press 'T' to cycle its variants! - + desc: You have unlocked a variant of the rotater - It allows to + rotate counter clockwise! To build it, select the rotater and + press 'T' to cycle its variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can forward its resources to other extractors so you can more efficiently extract resources! - + 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: You have unlocked a new variant of the tunnel - It has a bigger range, and you can also mix-n-match those tunnels now! - - reward_splitter_compact: - title: Compact Balancer - desc: >- - You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one! - + 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! reward_cutter_quad: title: Quad Cutting - desc: You have unlocked a variant of the cutter - It allows you to cut shapes in four parts instead of just two! - + 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: Double Painting - desc: You have unlocked a variant of the painter - It works as the regular painter but processes two shapes at once consuming just one color instead of two! - - reward_painter_quad: - title: Quad Painting - desc: You have unlocked a variant of the painter - It allows to paint each part of the shape individually! - + desc: You have unlocked a variant of the painter - It works as + the regular painter but processes two shapes at + 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!) - + 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: Blueprints - desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). - - # Special reward, which is shown when there is no reward actually + 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: Next level - desc: >- - This level gave you no reward, but the next one will!

PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades! - + desc: "This level gave you no reward, but the next one will!

PS: Better + don't destroy your existing factory - You need all + those shapes later again to unlock upgrades!" no_reward_freeplay: title: Next level - desc: >- - Congratulations! By the way, more content is planned for the standalone! - + desc: Congratulations! By the way, more content is planned for the 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Beállítások categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Development staging: Staging prod: Production buildDate: Built - labels: uiScale: title: Interfész nagyság - description: >- - Changes the size of the user interface. The interface will still scale based on your device resolution, but this setting controls the amount of scale. + description: Changes the size of the user interface. The interface will still + scale based on your device resolution, but this setting controls + the amount of scale. scales: super_small: Szuper kicsi small: Kicsi regular: Közepes large: Nagy huge: Hatalmas - scrollWheelSensitivity: title: Zoom sensitivity - description: >- - Changes how sensitive the zoom is (Either mouse wheel or trackpad). + description: Changes how sensitive the zoom is (Either mouse wheel or trackpad). sensitivity: super_slow: Szuper lassú slow: Lassú regular: Közepes fast: Gyors super_fast: Szuper gyors - language: title: Nyelv - description: >- - Change the language. All translations are user contributed and might be incomplete! - + description: Change the language. All translations are user contributed and + might be incomplete! fullscreen: title: Fullscreen - description: >- - It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone. - + description: It is recommended to play the game in fullscreen to get the best + experience. Only available in the standalone. soundsMuted: title: Hangok Némítása - description: >- - If enabled, mutes all sound effects. - + description: If enabled, mutes all sound effects. musicMuted: title: Zene Némítása - description: >- - If enabled, mutes all music. - + description: If enabled, mutes all music. theme: title: Game theme - description: >- - Choose the game theme (light / dark). - + description: Choose the game theme (light / dark). themes: dark: Sötét light: Világos - refreshRate: title: Simulation Target - description: >- - If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow. - + description: If you have a 144hz monitor, change the refresh rate here so the + game will properly simulate at higher refresh rates. This might + actually decrease the FPS if your computer is too slow. alwaysMultiplace: title: Multiplace - description: >- - If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. - + description: If enabled, all buildings will stay selected after placement until + you cancel it. This is equivalent to holding SHIFT permanently. offerHints: title: Hints & Tutorials - description: >- - Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game. - + description: Whether to offer hints and tutorials while playing. Also hides + certain UI elements onto a given level to make it easier to get + into the game. movementSpeed: title: Movement speed description: Changes how fast the view moves when using the keyboard. @@ -741,20 +794,17 @@ settings: extremely_fast: Extremely Fast enableTunnelSmartplace: title: Smart Tunnels - description: >- - When enabled, placing tunnels will automatically remove unnecessary belts. - This also enables to drag tunnels and excess tunnels will get removed. + description: When enabled, placing tunnels will automatically remove unnecessary + belts. This also enables to drag tunnels and excess tunnels will + get removed. vignette: title: Vignette - description: >- - Enables the vignette which darkens the screen corners and makes text easier - to read. - + description: Enables the vignette which darkens the screen corners and makes + text easier to read. autosaveInterval: title: Autosave Interval - description: >- - Controls how often the game saves automatically. You can also disable it - entirely here. + description: Controls how often the game saves automatically. You can also + disable it entirely here. intervals: one_minute: 1 Minute two_minutes: 2 Minutes @@ -764,32 +814,77 @@ settings: disabled: Disabled compactBuildingInfo: title: Compact Building Infos - description: >- - Shortens info boxes for buildings by only showing their ratios. Otherwise a - description and image is shown. + description: Shortens info boxes for buildings by only showing their ratios. + Otherwise a description and image is shown. disableCutDeleteWarnings: title: Disable Cut/Delete Warnings - description: >- - Disable the warning dialogs brought up when cutting/deleting more than 100 - entities. - + description: Disable the warning dialogs brought up when cutting/deleting more + than 100 entities. enableColorBlindHelper: title: Color Blind Mode - description: Enables various tools which allow to play the game if you are color blind. + description: Enables various tools which allow to play the game if you are color + blind. rotationByBuilding: title: Rotation by building type - description: >- - Each building type remembers the rotation you last set it to individually. - This may be more comfortable if you frequently switch between placing - different building types. - + 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 + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Keybindings - hint: >- - Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. - + hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different + placement options." resetKeybindings: Reset Keyinbindings - categoryLabels: general: Application ingame: Game @@ -798,7 +893,6 @@ keybindings: massSelect: Mass Select buildings: Building Shortcuts placementModifiers: Placement Modifiers - mappings: confirm: Confirm back: Vissza @@ -807,38 +901,30 @@ keybindings: mapMoveDown: Move Down mapMoveLeft: Move Left centerMap: Center Map - mapZoomIn: Zoom in mapZoomOut: Zoom out createMarker: Create Marker - menuOpenShop: Fejlesztések menuOpenStats: Statisztikák - toggleHud: Toggle HUD toggleFPSInfo: Toggle FPS and Debug Info - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Futószalag + underground_belt: Alagút + miner: Bányász + cutter: Vágó + rotater: Forgató + stacker: Egyesítő + mixer: Színkeverő + painter: Festő + trash: Kuka rotateWhilePlacing: Rotate - rotateInverseModifier: >- - Modifier: Rotate CCW instead + rotateInverseModifier: "Modifier: Rotate CCW instead" cycleBuildingVariants: Cycle Variants confirmMassDelete: Confirm Mass Delete cycleBuildings: Cycle Buildings - massSelectStart: Hold and drag to start massSelectSelectMultiple: Select multiple areas massSelectCopy: Copy area - placementDisableAutoOrientation: Disable automatic orientation placeMultiple: Stay in placement mode placeInverse: Invert automatic belt orientation @@ -851,33 +937,38 @@ keybindings: pipette: Pipette menuClose: Close Menu switchLayers: Switch layers - advanced_processor: Color Inverter - energy_generator: Energy Generator 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: A játékról body: >- - This game is open source and developed by Tobias Springer (this is me).

+ This game is open source and developed by Tobias Springer + (this is me).

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

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

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

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

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

- - Finally, huge thanks to my best friend Niklas - Without our - factorio sessions this game would never have existed. + The soundtrack was made by Peppsen - He's awesome.

+ Finally, huge thanks to my best friend Niklas - Without our factorio sessions this game would never have existed. changelog: title: Changelog - demo: features: restoringGames: Mentések visszaállítása @@ -885,5 +976,65 @@ demo: oneGameLimit: Egy mentésre van limitálva customizeKeybindings: Customizing Keybindings exportingBase: Exporting whole Base as Image - settingNotAvailable: Nem elérhető a demóban. +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. diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 22dc0a08..659c8e29 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -1,113 +1,61 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: Shapez.io adalah game tentang membangun pabrik untuk mengotomatiskan pembuatan dan pemrosesan bentuk-bentuk yang semakin kompleks di peta yang meluas tanpa batas. + shortText: Shapez.io adalah game tentang membangun pabrik untuk mengotomatiskan + pembuatan dan pemrosesan bentuk-bentuk yang semakin kompleks di peta + yang meluas tanpa batas. + discordLinkShort: Discord Resmi + intro: >- + Anda suka game otomasi? Maka anda berada di tempat yang tepat! - # This is the text shown above the discord link - discordLink: Tautan Resmi Discord – Mari mengobrol dengan saya! - # This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page. - # NOTICE: - # - Do not translate the first line (This is the gif image at the start of the store) - # - Please keep the markup (Stuff like [b], [list] etc) in the same format - longText: >- - [img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] + 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. - 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. + 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, nantinya anda harus memberinya warna - dengan mengekstrak dan mencampur warna! - 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] + Membeli game ini di Steam memberikan anda akses ke versi lengkap, namun anda juga dapat mencoba demo dan memutuskan nanti! + title_advantages: Keuntungan versi lengkap + advantages: + - 12 Level Baru dengan total 26 level + - 18 Bangunan Baru untuk membuat pabrik yang otomatis sepenuhnya! + - 20 Tingkat Upgrade untuk keseruan berjam-jam! + - Update Kabel untuk dimensi yang benar-benar berbeda! + - Mode Gelap! + - Data Simpanan Tidak Terbatas + - Penanda Tidak Terbatas + - Dukung saya! ❤️ + title_future: Konten Terencana + planned: + - Perpustakaan Cetak Biru (Eksklusif Versi Lengkap) + - Steam Achievements + - Mode Puzzle + - Peta Kecil + - Mods + - Mode Sandbox + - ... dan masih banyak lagi! + title_open_source: Game ini open source! + title_links: Links + links: + discord: Discord Resmi + roadmap: Peta Jalan + subreddit: Subreddit + source_code: Source code (GitHub) + translate: Bantu menterjemahkan + text_open_source: >- + Semua orang bisa berpartisipasi, saya aktif terlibat dalam komunitas dan + mencoba untuk meninjau semua saran dan mempertimbangkan segala umpan balik + jika memungkinkan. + Pastikan untuk memeriksa papan trello saya untuk peta jalan lengkapnya! global: loading: Sedang memuat error: Terjadi kesalahan - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: - thousands: K - millions: J + thousands: rb + millions: Jt billions: M trillions: T - - # Shown for infinitely big numbers infinite: tak terhingga - time: - # Used for formatting past time dates oneSecondAgo: sedetik yang lalu xSecondsAgo: detik yang lalu oneMinuteAgo: semenit yang lalu @@ -116,14 +64,10 @@ global: xHoursAgo: jam yang lalu oneDayAgo: sehari yang lalu xDaysAgo: hari yang lalu - - # Short formats for times, e.g. '5h 23m' - secondsShort: det - minutesAndSecondsShort: m det + secondsShort: dtk + minutesAndSecondsShort: m dtk hoursAndMinutesShort: j m - xMinutes: menit - keys: tab: TAB control: CTRL @@ -131,16 +75,12 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Versi Demo - intro: >- - Dapatkan versi penuh untuk membuka semua fitur! - + intro: Dapatkan versi lengkap untuk membuka semua fitur! mainMenu: play: Mulai Permainan - continue: Lanjutkan Permainan + continue: Lanjutkan newGame: Permainan Baru changelog: Catatan Perubahan subreddit: Reddit @@ -149,14 +89,12 @@ mainMenu: discordLink: Server Discord Resmi helpTranslate: Bantu Terjemahkan! madeBy: Dibuat oleh - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Maaf, tetapi permainan ini biasanya lambat pada perambah (browser) Anda! Dapatkan versi penuh atau unduh Chrome untuk pengalaman sepenuhnya. - + browserWarning: Maaf, tetapi permainan ini biasanya lambat pada perambah + (browser) Anda! Dapatkan versi lengkap atau unduh Chrome untuk pengalaman + sepenuhnya. savegameLevel: Level savegameLevelUnknown: Level tidak diketahui - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -165,117 +103,110 @@ dialogs: later: Nanti restart: Mulai Ulang reset: Setel Ulang - getStandalone: Dapatkan Versi Penuh + getStandalone: Dapatkan Versi Lengkap deleteGame: Saya tahu apa yang saya lakukan viewUpdate: Tampilkan Pembaruan showUpgrades: Tunjukkan Tingkatan showKeybindings: Tunjukan Tombol Pintas - importSavegameError: title: Kesalahan pada Impor - text: >- - Gagal memasukkan data simpanan Anda: - + text: "Gagal memasukkan data simpanan Anda:" importSavegameSuccess: title: Impor Berhasil - text: >- - Data simpanan Anda berhasil dimasukkan. - + text: Data simpanan Anda berhasil dimasukkan. gameLoadFailure: title: Permainan Rusak - text: >- - Gagal memuat data simpanan Anda: - + text: "Gagal memuat data simpanan Anda:" confirmSavegameDelete: title: Konfirmasi Penghapusan - text: >- - Apakah Anda yakin untuk menghapus data permainan? - + text: Apakah anda yakin ingin menghapus game berikut?

+ '' pada level

+ Hal ini tak dapat diulang! savegameDeletionError: title: Gagal Menghapus - text: >- - Gagal untuk menghapus data simpanan: - + text: "Gagal untuk menghapus data simpanan:" restartRequired: title: Diperlukan untuk Memulai Kembali - text: >- - Anda harus memulai kembali permainan untuk menerapkan pengaturan. - + text: Anda harus memulai kembali permainan untuk menerapkan pengaturan. editKeybinding: title: Ganti Tombol Pintas - desc: Tekan tombol pada papan ketik atau tetikus yang ingin anda tetapkan, atau tekan escape untuk membatalkan. - + desc: Tekan tombol pada papan ketik atau tetikus yang ingin anda tetapkan, atau + tekan escape untuk membatalkan. resetKeybindingsConfirmation: title: Setel Ulang Tombol-tombol Pintas - desc: Ini akan menyetel ulang semua tombol pintas kepada pengaturan awalnya. Harap konfirmasi. - + desc: Ini akan menyetel ulang semua tombol pintas kepada pengaturan awalnya. + Harap konfirmasi. keybindingsResetOk: title: Setel Ulang desc: Tombol-tombol pintas sudah disetel ulang ke pengaturan awalnya! - featureRestriction: title: Versi Demo - desc: Anda mencoba untuk mengakses fitur () yang tidak tersedia pada versi demo. Pertimbangkan untuk mendapatkan versi penuh untuk pengalaman sepenuhnya! - + desc: Anda mencoba untuk mengakses fitur () yang tidak tersedia pada + versi demo. Pertimbangkan untuk mendapatkan versi lengkap untuk + pengalaman sepenuhnya! oneSavegameLimit: title: Penyimpanan Permainan Terbatas - desc: Anda hanya dapat memiliki satu simpanan permainan dalam versi demo. Harap hapus yang telah ada atau dapatkan versi penuh! - + desc: Anda hanya dapat memiliki satu simpanan permainan dalam versi demo. Harap + hapus yang telah ada atau dapatkan versi lengkap! updateSummary: title: Pembaruan Baru! - desc: >- - Berikut perubahan-perubahan yang telah dibuat sejak Anda main terakhir kali: - + desc: "Berikut perubahan-perubahan yang telah dibuat sejak Anda main terakhir + kali:" upgradesIntroduction: title: Buka Tingkatan-tingkatan - desc: >- - Semua bentuk yang anda produksi dapat digunakan untuk membuka tingkatan baru - Jangan hancurkan pabrik-pabrik lama Anda! + desc: Semua bentuk yang anda produksi dapat digunakan untuk membuka tingkatan + baru - Jangan hancurkan pabrik-pabrik lama Anda! Tab tingkatan dapat ditemukan di sudut atas kanan layar Anda. - massDeleteConfirm: title: Konfirmasi Penghapusan - desc: >- - Anda akan menghapus banyak bangunan (tepatnya )! Apakah Anda yakin untuk melakukannya? - + desc: Anda akan menghapus banyak bangunan (tepatnya )! Apakah Anda yakin + untuk melakukannya? massCutConfirm: title: Pastikan Pemindahan - desc: >- - Anda akan memindahkan banyak bangunan (tepatnya )! Apakah Anda yakin untuk melakukannya? - + desc: Anda akan memindahkan banyak bangunan (tepatnya )! Apakah Anda + yakin untuk melakukannya? massCutInsufficientConfirm: title: Tidak Mampu Memindahkan - desc: >- - Anda tidak mampu menanggung biaya pemindahan area ini! Apakah Anda yakin untuk memindahkannya? - + desc: Anda tidak mampu menanggung biaya pemindahan area ini! Apakah Anda yakin + untuk memindahkannya? blueprintsNotUnlocked: title: Belum Terbuka - desc: >- - Selesaikan level 12 untuk membuka cetak biru! - + desc: Selesaikan level 12 untuk membuka cetak biru! keybindingsIntroduction: title: Tombol Pintas Berguna - desc: >- - Permainan ini memiliki banyak tombol pintas yang membuatnya lebih mudah untuk membangun pabrik-pabrik besar. - Berikut adalah beberapa, namun pastikan Anda perhatikan tombol-tombol pintasnya!

- CTRL + Tarik: Pilih sebuah area.
- SHIFT: Tahan untuk meletakkan beberapa kali bangunan yang.
- ALT: Ganti orientasi sabuk konveyor yang telah diletakkan.
- + desc: "Permainan ini memiliki banyak tombol pintas yang membuatnya lebih mudah + untuk membangun pabrik-pabrik besar. Berikut adalah beberapa, namun + pastikan Anda perhatikan tombol-tombol + pintasnya!

CTRL + + Tarik: Pilih sebuah area.
SHIFT: + Tahan untuk meletakkan beberapa kali bangunan yang.
ALT: Ganti orientasi sabuk konveyor yang + telah diletakkan.
" 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: Berikan nama yang berguna, anda juga bisa memasukkan kunci + pintas dari sebuah bentuk (Yang bisa anda buat sendiri disini) markerDemoLimit: - desc: Anda hanya dapat memuat dua penanda pada versi demo. Dapatkan versi penuh untuk penanda-penanda tak terhingga! - + desc: Anda hanya dapat memuat dua penanda pada versi demo. Dapatkan versi lengkap + untuk penanda-penanda tak terhingga! exportScreenshotWarning: title: Ekspor Tangkapan Layar - desc: Anda meminta untuk mengekspor pangkalan pusat Anda sebagai tangkapan layar. Harap ketahui bahwa ini bisa menjadi lambat untuk pangkalan pusat yang besar dan bahkan dapat membuat permainan Anda mogok! - + desc: Anda meminta untuk mengekspor pangkalan pusat Anda sebagai tangkapan + layar. Harap ketahui bahwa ini bisa menjadi lambat untuk pangkalan + pusat yang besar dan bahkan dapat membuat permainan Anda mogok! + editSignal: + title: Atur Tanda + descItems: "Pilih item yang telah ditentukan sebelumnya:" + descShortKey: ... atau masukkan kunci pintas dari bentuk (Yang bisa anda buat sendiri disini) + renameSavegame: + title: Ganti Nama Data Simpanan + desc: Anda bisa mengganti nama data simpanan di sini. + entityWarning: + title: Peringatan Kapasitas + desc: Anda telah membangun banyak bangunan, ini hanya sebuah peringatan kecil bahwa + game ini tidak dapat menangani jumlah bangunan yang tak terbatas - Jadi cobalah untuk membangun pabrik yang rapat. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Pindahkan selectBuildings: Pilih area @@ -296,8 +227,6 @@ ingame: clearSelection: Hapus seleksi pipette: Pipet switchLayers: Ganti lapisan - - # Names of the colors, used for the color blind mode colors: red: Merah green: Hijau @@ -308,119 +237,149 @@ ingame: white: Putih black: Hitam uncolored: Abu-abu - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Tekan untuk ganti varian. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Kecepatan range: Rentang storage: Penyimpanan - oneItemPerSecond: satu artikel / detik - itemsPerSecond: artikel / detik + oneItemPerSecond: satu item / detik + itemsPerSecond: item / detik itemsPerSecondDouble: (x2) - tiles: ubin - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Level completed: Selesai unlockText: Membuka ! buttonNextLevel: Level Selanjutnya - - # Notifications on the lower right notifications: newUpgrade: Tingkatan baru tersedia! gameSaved: Permainan Anda telah disimpan. - - # The "Upgrades" window + freeplayLevelComplete: Level telah selesai! shop: title: Tingkatan-tingkatan buttonUnlock: Tingkatkan - - # Gets replaced to e.g. "Tier IX" tier: Tingkat - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - + tierLabels: + - I + - II + - III + - IV + - V + - VI + - VII + - VIII + - IX + - X + - XI + - XII + - XIII + - XIV + - XV + - XVI + - XVII + - XVIII + - XIX + - XX maximumLevel: LEVEL MAKSIMUM (Kecepatan x) - - # The "Statistics" window statistics: title: Statistika dataSources: stored: title: Tersimpan - description: Menunjukan jumlah bentuk-bentuk yang tersimpan pada bangunan pusat Anda. + description: Menunjukan jumlah bentuk-bentuk yang tersimpan pada bangunan pusat + Anda. produced: title: Terproduksi - description: Menunjukkan semua bentuk yang diproduksi seluruh pabrik Anda, termasuk produk-produk antara. + description: Menunjukkan semua bentuk yang diproduksi seluruh pabrik Anda, + termasuk produk-produk antara. delivered: title: Terkirim - description: Menunjukkan bentuk-bentuk yang telah terkirim ke bangunan pusat Anda. + description: Menunjukkan bentuk-bentuk yang telah terkirim ke bangunan pusat + Anda. noShapesProduced: Sejauh ini belum diproduksi. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / dtk + minute: / m + hour: / j settingsMenu: playtime: Waktu bermain - buildingsPlaced: Bangunan beltsPlaced: Sabuk konveyor - buttons: continue: Lanjutkan settings: Pengaturan menu: Kembali ke menu - - # Bottom left tutorial hints tutorialHints: title: Butuh bantuan? showHint: Tampilkan petunjuk hideHint: Tutup - - # When placing a blueprint blueprintPlacer: cost: Biaya - - # Map markers waypoints: waypoints: Penanda hub: PUSAT - description: Klik tombol kiri tetikus pada penanda untuk melompat kepadanya, klik tombol kanan untuk menghapusnya.

Tekan untuk membuat penanda dari sudut pandang saat ini, atau klik tombol kanan untuk membuat penanda pada lokasi yang dipilih. + description: Klik tombol kiri mouse pada penanda untuk melompat kepadanya, + klik tombol kanan untuk menghapusnya.

Tekan + untuk membuat penanda dari sudut pandang saat ini, atau klik + tombol kanan untuk membuat penanda pada lokasi yang + dipilih. creationSuccessNotification: Penanda telah dibuat. - - # Shape viewer shapeViewer: title: Lapisan-lapisan empty: Kosong copyKey: Gandakan tombol - - # Interactive tutorial interactiveTutorial: title: Penuntun hints: - 1_1_extractor: Letakkan ekstraktor diatas bentuk lingkaran untuk mengekstrak bentuk tersebut! - 1_2_conveyor: >- - Hubungkan ekstraktor dengan sabuk konveyor ke pusat pangkalan Anda!

Kiat: Klik dan seret sabuk konveyor dengan tetikus! - - 1_3_expand: >- - Ini BUKAN permainan menganggur! Bangun lebih banyak ekstraktor dan sabuk konveyor untuk menyelesaikan obyektif dengan lebih cepat.

Kiat: Tahan tombolSHIFT untuk meletakkan beberapa ekstraktor, dan gunakan tombol R untuk memutar. - -# All shop upgrades + 1_1_extractor: Letakkan ekstraktor diatas bentuk + lingkaran untuk mengekstrak bentuk tersebut! + 1_2_conveyor: "Hubungkan ekstraktor dengan sabuk konveyor ke + pusat pangkalan Anda!

Kiat: Klik dan + seret sabuk konveyor dengan mouse!" + 1_3_expand: "Ini BUKAN permainan menganggur! Bangun lebih + banyak ekstraktor dan sabuk konveyor untuk menyelesaikan + obyektif dengan lebih cepat.

Kiat: Tahan + tombol SHIFT untuk meletakkan beberapa + ekstraktor, dan gunakan tombol R untuk + memutar." + connectedMiners: + one_miner: 1 Ekstraktor + n_miners: Ekstraktor + limited_items: Terbatas hingga + watermark: + title: Versi Demo + desc: Klik disini untuk melihat keunggulan pada versi Steam! + get_on_steam: Dapatkan di Steam + standaloneAdvantages: + title: Dapatkan versi lengkap! + no_thanks: Tidak, terima kasih! + points: + levels: + title: 12 Level Baru + desc: Dengan total 26 level! + buildings: + title: 18 Bangunan Baru + desc: Untuk membuat pabrik yang otomatis sepenuhnya! + savegames: + title: ∞ Data Simpanan + desc: Sebanyak yang anda mau! + upgrades: + title: 20 Tingkatan Upgrade + desc: Versi demo ini hanya punya 5! + markers: + title: ∞ Penanda + desc: Anda tidak akan tersesat di pabrik anda! + wires: + title: Kabel + desc: Sebuah dimensi yang benar-benar berbeda! + darkmode: + title: Mode Gelap + desc: Berhenti merusak matamu! + support: + title: Dukung saya + desc: Saya membuat ini di waktu luang! shopUpgrades: belt: name: Sabuk konveyor, Pembagi Arus & Terowongan @@ -430,248 +389,388 @@ shopUpgrades: description: Kecepatan x → x processors: name: Memotong, Memutar & Menyusun - description: Speed x → x - painting: - name: Mencampur & Mencat description: Kecepatan x → x - -# Buildings and their name / description + painting: + name: Mencampur & Mengecat + description: Kecepatan x → x buildings: hub: deliver: Kirim toUnlock: untuk membuka levelShortcut: LVL - + endOfDemo: Akhir dari Demo belt: default: - name: &belt Sabuk Konveyor - description: Mengangkut artikel-artikel, tahan dan seret untuk meletakkan beberapa. - + name: Sabuk Konveyor + description: Mengangkut sumber daya, tahan dan seret untuk meletakkan + beberapa. wire: default: - name: &wire Kawat Energi - description: Memungkinkan anda untuk mengangkut energi. - - miner: # Internal name for the Extractor + name: Kabel + description: Memungkinkan anda untuk mengangkut Energi. + second: + name: Kabel + description: Mentransfer sinyal, dapat berupa bentuk, warna, atau boolean (1 atau 0). + Kabel dengan warna berbeda tidak akan menyambung. + miner: default: - name: &miner Ekstraktor - description: Letakkan diatas sumber bentuk atau warna untuk mengekstraksi mereka. - + name: Ekstraktor + description: Letakkan diatas sumber bentuk atau warna untuk mengekstraksi + mereka. chainable: name: Ekstraktor (Berantai) - description: Letakkan di atas sumber bentuk atau warna untuk mengekstraksi mereka. Dapat dirantai. - - underground_belt: # Internal name for the Tunnel + description: Letakkan di atas sumber bentuk atau warna untuk mengekstraksi + mereka. Dapat dirantai. + underground_belt: default: - name: &underground_belt Terowongan - description: Memungkinkan Anda untuk mengangkut sumber-sumber daya dibawah bangunan-bangunan atau sabuk konveyor. - + name: Terowongan + description: Memungkinkan Anda untuk mengangkut sumber-sumber daya dibawah + bangunan-bangunan atau sabuk konveyor. tier2: name: Terowongan Tingkat II - description: Memungkinkan Anda untuk mengangkut sumber-sumber daya dibawah bangunan-bangunan atau sabuk konveyor. - - splitter: # Internal name for the Balancer - default: - name: &splitter Pengimbang - description: Multifungsi – Mendistribusi secara merata semua masukan ke semua keluaran. - - compact: - name: Penggabung (Padat) - description: Menggabungkan dua sabuk konveyor menjadi satu. - - compact-inverse: - name: Penggabung (Padat) - description: Menggabungkan dua sabuk konveyor menjadi satu. - + description: Memungkinkan Anda untuk mengangkut sumber-sumber daya dibawah + bangunan-bangunan atau sabuk konveyor. cutter: default: - name: &cutter Pemotong - description: Memotong bentuk-bentuk secara vertikal dan mengeluarkan kedua bagian. Apabila Anda hanya menggunakan satu bagian, pastikan Anda lenyapkan bagian lain atau mesin akan macet! + name: Pemotong + description: Memotong bentuk-bentuk secara vertikal dan mengeluarkan kedua + bagian. Apabila Anda hanya menggunakan satu bagian, + pastikan Anda lenyapkan bagian lain atau mesin akan + macet! quad: name: Pemotong (Empat Bagian) - description: Memotong bentuk-bentuk menjadi empat bagian. Apabila Anda hanya menggunakan satu bagian, pastikan Anda lenyapkan bagian-bagian lain atau mesin akan macet! - - advanced_processor: - default: - name: &advanced_processor Pembalik Warna - description: Menerima warna atau bentuk dan kemudian membaliknya. - + description: Memotong bentuk-bentuk menjadi empat bagian. Apabila Anda + hanya menggunakan satu bagian, pastikan Anda lenyapkan + bagian-bagian lain atau mesin akan macet! rotater: default: - name: &rotater Pemutar + name: Pemutar description: Memutar bentuk searah jarum jam sebesar 90 derajat. ccw: name: Pemutar (Berlawanan Arah Jarum Jam) description: Memutar bentuk berlawanan arah jarum jam sebesar 90 derajat. - fl: - name: Pemutar (180) - description: Memutar bentuk sebesar 180 derajat. - + rotate180: + name: Pemutar (180 derajat) + description: Memutar bentuk searah jarum jam sebesar 180 derajat. stacker: default: - name: &stacker 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: &mixer Pencampur Warna + name: Pencampur Warna description: Mencampurkan dua warna menggunakan campuran aditif. - painter: default: - name: &painter Pencat - description: &painter_desc Mencat keseluruhan bentuk dari input kiri dengan warna dari input atas. + name: Pengecat + description: Mengecat keseluruhan bentuk dari input kiri dengan warna dari input + atas. mirrored: - name: *painter - description: *painter_desc - + name: Pengecat + description: Mengecat keseluruhan bentuk dari input kiri dengan warna dari input + atas. double: - name: Pencat (Ganda) - description: Mencat bentuk-bentuk dari input kiri dengan warna dari input atas. + name: Pengecat (Ganda) + description: Mengecat 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. - + name: Pengecat (Empat Bagian) + description: Memungkinkan anda untuk mengecat tiap kuadrannya masing - masing pada bentuk. Hanya menyambung dengan + sinyal yang benar pada lapisan kabel yang akan dicat! trash: default: - name: &trash Tong Sampah + name: Tong Sampah description: Menerima input dari semua sisi dan menghancurkannya. Selamanya. - - storage: - name: Penyimpanan - description: Menyimpan artikel-artikel berlebih, sampai kapasitas tertentu. Dapat dipergunakan sebagai gerbang luapan. - energy_generator: - deliver: Pengiriman - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: Untuk - + balancer: default: - name: &energy_generator Pembangkit Energi - description: Menciptakan energy dengan mengonsumsi bentuk-bentuk. - - wire_crossings: - default: - name: &wire_crossings Pembelah Kawat - description: Membelah satu kawat energy menjadi dua. - + name: Penyeimbang + description: Multifungsional - Mendistribusikan seluruh input secara merata ke seluruh output. merger: - name: Penggabung Kawat - description: Menggabungkan dua kawat energy menjadi satu. - + name: Penggabung Sederhana + description: Menggabungkan dua sabuk konveyor menjadi satu. + merger-inverse: + name: Penggabung Sederhana + description: Menggabungkan dua sabuk konveyor menjadi satu. + splitter: + name: Pemisah Sederhana + description: Memisahkan satu sabuk konveyor menjadi dua. + splitter-inverse: + name: Pemisah Sederhana + description: Memisahkan satu sabuk konveyor menjadi dua. + storage: + default: + name: Tempat Penyimpanan + description: Menyumpan bentuk yang berlebihan, hingga kapasitas yang tertentu. Memprioritaskan output dari kiri + wire_tunnel: + default: + name: Penyebrangan Kabel + description: Memungkinkan untuk menyebrangkan 2 kabel tanpa menyambungkannya. + constant_signal: + default: + name: Sinyal Konstan + description: Mengeluarkan sinyal yang konstan, dapat berupa bentuk, warna atau boolean (1 atau 0). + lever: + default: + name: Saklar + description: Dapat diubah untuk mengeluarkan sinyal boolean (1 atau 0) pada lapisan kabel, + yang bisa digunakan untuk mengontrol seperti penyaring. + logic_gate: + default: + name: Gerbang AND + description: Mengeluarkan boolean "1" jika kedua input adalah benar. (Benar berarti sebuah bentuk, + warna atau boolean "1") + not: + name: Gerbang NOT + description: Mengeluarkan boolean "1" jika input adalah tidak benar. (Benar berarti sebuah bentuk, + warna atau boolean "1") + xor: + 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: Gerbang OR + description: Mengeluarkan boolean "1" jika satu input adalah benar. (Benar berarti sebuah bentuk, + warna atau boolean "1") + transistor: + default: + name: Transistor + description: Melanjutkan sinyal dari input bawah jika input samping adalah benar (sebuah bentuk, + warna atau boolean "1") + mirrored: + name: Transistor + description: Melanjutkan sinyal dari input bawah jika input samping adalah benar (sebuah bentuk, + warna atau boolean "1") + filter: + default: + name: Filter + 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: Layar + description: Hubungkan dengan sebuah sinyal untuk ditunjukkan pada layar - Dapat berupa bentuk, + warna atau boolean. + reader: + default: + 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: Penganalisa bentuk + description: Menganalisa perempat bentuk pada kanan atas dan lapisan terbawah + lalu mengeluarkan bentuk dan warnanya. + comparator: + default: + name: Pembanding + description: Mengeluarkan boolean "1" jika kedua sinya adalah sama. Dapat membandingkan + Bentuk, warna dan boolean. + virtual_processor: + default: + name: Pemotong Virtual + description: Memotong bentuk secara virtual menjadi dua bagian. + rotater: + name: Pemutar Virtual + description: Memutar bentuk secara virtual, searah jarum jam dan tidak searah jarum jam. + unstacker: + name: Pemisah Tumpukan Virtual + description: Memisahkan lapisan teratas secara virtual ke output kanan dan + sisanya ke output kiri. + stacker: + name: Penumpuk Virtual + description: Menumpuk bentuk kanan ke bentuk kiri secara virtual. + painter: + name: Pengecat Virtual + description: Mengecat bentuk dari input bawah dengan warna + dari input kanan. + item_producer: + default: + name: Pembuat Bentuk + description: Hanya tersedia di dalam mode sandbox , Mengeluarkan sinyal yang diberikan dari + lapisan kabel ke lapisan biasa. storyRewards: - # Those are the rewards gained from completing the store 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 jarum jam sebesar 90 derajat. - + desc: Pemutar telah dibuka! Ia memutar bentuk-bentuk searah + jarum jam sebesar 90 derajat. reward_painter: - title: Pengecatan - desc: >- - Pencat telah dibuka – Ekstraksi beberapa warna (seperti yang Anda lakukan dengan bentuk) dan kemudian kombinasikan dengan bentuk di dalam pencat untuk mewarnai mereka!

Catatan: Apabila Anda buta warna, terdapat mode buta warna di dalam pengaturan! - + title: Mengecat + desc: "Pengecat telah dibuka – Ekstraksi beberapa warna (seperti yang Anda lakukan dengan bentuk) dan kemudian kombinasikan dengan bentuk di dalam pengecat untuk mewarnai mereka!

Catatan: + Apabila Anda buta warna, terdapat mode buta warna + di dalam pengaturan!" reward_mixer: - title: Pencampuran Warna - desc: Pencampur telah dibuka – Kombinasikan dua warna menggunakan pencampuran aditif dengan bangunan ini! - + title: Mencampur Warna + desc: Pencampur telah dibuka – Kombinasikan dua warna + menggunakan pencampuran aditif dengan bangunan ini! reward_stacker: - title: Penyusun - desc: Anda sekarang dapat mengombinasikan bentuk-bentuk dengan penyusun! Kedua input akan dikombinasikan, dan apabila mereka dapat diletakan disebelah satu sama lain, mereka akan terpadukan. Apabila tidak dapat, input kanan akan diletakkan diatas input kiri! - + title: Menyusun + desc: Anda sekarang dapat mengombinasikan bentuk-bentuk dengan + penyusun! Kedua input akan dikombinasikan, dan + apabila mereka dapat diletakan disebelah satu sama lain, mereka + akan terpadukan. Apabila tidak dapat, input kanan + 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!

- + title: Membagi + desc: Anda telah membuka varian pembagi dari + penyeimbang - Menerima satu input dan membaginya menjadi 2! reward_tunnel: title: Terowongan - desc: Terowongan telah dibuka – Sekarang Anda dapat memindahkan artikel-artikel melalui terowongan di bawah sabuk-sabuk konveyor dan bangungan-bangunan dengannya! - + desc: Terowongan telah dibuka – Sekarang Anda dapat memindahkan + bentuk-bentuk melalui terowongan di bawah sabuk-sabuk konveyor dan + bangungan-bangunan dengannya! reward_rotater_ccw: title: Memutar Berlawanan Arah Jarum Jam - desc: Anda telah membuka varian dari Pemutar - Ia memungkinkan Anda untuk memutar bentuk-bentuk berlawanan arah jarum jam! Untuk membangunnya, pilih pemutar dan tekan 'T' to memilih varian! - + desc: Anda telah membuka varian dari Pemutar - Ia memungkinkan + Anda untuk memutar bentuk-bentuk berlawanan arah jarum jam! Untuk + membangunnya, pilih pemutar dan tekan 'T' to memilih + 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! - + title: Ekstraktor Merantai + desc: "Anda telah membuka Ekstraktor (Berantai)! Ia dapat mengoper sumber daya ke ekstraktor depannya sehingga anda dapat mengekstrak sumber daya denga lebih efisien!

NB: Ekstraktor yang lama sudah diganti pada toolbar anda sekarang!" reward_underground_belt_tier_2: title: Terowongan Tingkat II - desc: Anda telah membuka varian baru terowongan - Ia memiliki jangkauan yang lebih panjang, dan sekarang Anda juga dapat memadukan terowongan-terowongan tersebut! - - reward_splitter_compact: - title: Pengimbang Padat - desc: >- - Anda telah membuka varian padat dari pengimbang - Ia menerima dua input dan menggabungkannya ke dalam satu konveyor! - + desc: Anda telah membuka varian baru terowongan - Ia memiliki + jangkauan yang lebih panjang, dan sekarang Anda + juga dapat memadukan terowongan-terowongan tersebut! reward_cutter_quad: title: Pemotongan Empat Bagian - desc: Anda telah membuka varian dari pemotong - Ia memungkinkan Anda memotong bentuk-bentuk ke dalam empat bagian daripada hanya dua bagian! - + desc: Anda telah membuka varian dari pemotong - Ia memungkinkan + Anda memotong bentuk-bentuk ke dalam empat bagian + daripada hanya dua bagian! reward_painter_double: title: Pengecatan Ganda - desc: Anda telah membuka varian dari pencat - Ia bekerja seperti pencat biasa namun dapat memproses dua bentuk sekaligus mengonsumsi hanya satu warna daripada dua! - - reward_painter_quad: - title: Pengecatan Empat Bagian - desc: Anda telah membuka varian dari pencat - Ia memungkinkan Anda untuk mencat setiap bagian dari masing-masing bentuk sendiri-sendiri! - + desc: Anda telah membuka varian dari pengecat - Ia bekerja + seperti pengecat biasa namun dapat memproses dua bentuk + 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! - + title: Tempat Penyimpanan + desc: Anda telah membuka Tempat Penyimpanan - Ia memungkinkan anda untuk + menyimpan item hingga kapasitas tertentu!

Ia mengutamakan output kiri, sehingga anda dapat menggunakannya sebagai gerbang luapan! 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: Anda berhasil! Anda telah membuka mode permainan bebas! Ini artinya + bentuk-bentuk akan dibuat secara acak!

+ Karena pusat pangkalan akan membutuhkan penghasilan dari sekarang, + Saya sangat menyarankan untuk membangun mesin yang secara otomatis + mengirim bentuk yang diminta!

Pusat pangkalan mengeluarkan bentuk + yang diminta pada lapisan kabel, jadi yang harus anda lakukan adalah menganalisa dan + membangun pabrik secara otomatis berdasarkan itu. reward_blueprints: title: Cetak Biru - desc: Anda sekarang dapat menyalin dan meletakkan bagian dari pabrik Anda! Pilih sebuah area (tahan CTRL, lalu seret dengan tetikus), dan tekan 'C' untuk menggandakannya.

Untuk meletakannya tidak gratis, Anda harus memproduksi bentuk cetak biru untuk dapat melakukannya! (Bentuk yang baru saja anda kirim). - - # Special reward, which is shown when there is no reward actually + desc: Anda sekarang dapat menyalin dan meletakkan bagian dari + pabrik Anda! Pilih sebuah area (tahan CTRL, lalu seret dengan + tetikus), dan tekan 'C' untuk menggandakannya.

Untuk + meletakannya tidak gratis, Anda harus memproduksi + bentuk cetak biru untuk dapat melakukannya! (Bentuk + yang baru saja anda kirim). no_reward: title: Level Selanjutnya - desc: >- - Level ini tidak memiliki hadiah, namun yang selanjutnya akan!

Catatan: Sebaiknya Anda jangan hancurkan pabrik yang telah ada – Anda membutuhkan semua bentuk-bentuk tersebut lagi nanti untuk membuka tingkatan-tingkatan selanjutnya! - + desc: "Level ini tidak memiliki hadiah, namun yang selanjutnya akan!

+ Catatan: Sebaiknya Anda jangan hancurkan pabrik yang telah ada – + Anda membutuhkan semua bentuk-bentuk tersebut lagi + nanti untuk membuka tingkatan-tingkatan + selanjutnya!" no_reward_freeplay: title: Level Selanjutnya - desc: >- - Selamat! Omong-omong, lebih banyak konten telah direncanakan untuk versi penuh! - + desc: Selamat! Omong-omong, lebih banyak konten telah direncanakan untuk versi + penuh! + reward_balancer: + title: Penyeimbang + desc: Penyeimbang yang multifungsional telah terbuka - Ia dapat + digunakan untuk membuat pabrik yang lebih besar dengan cara + memisahkan atau menggabungkan item ke beberapa sabuk konveyor!

+ reward_merger: + title: Penggabung Sederhana + desc: Anda telah membuka varianpenggabung dari + penyeimbang - Ia menerima dua input dan menggabungkannya dalam satu sabuk konveyor! + reward_belt_reader: + title: Pembaca Sabuk Konveyor + desc: Anda telah membuka pembaca sabuk konveyor! Ini memungkinkan anda untuk + mengukur penghasilan dalam sebuah sabuk konveyor.

Dan tunggu sampai anda membuka + kabel - maka ini akan sangat berguna! + reward_rotater_180: + title: Pemutar (180 derajat) + desc: Anda telah membuka pemutar 180 derajat! - Ini memungkinkan + anda untuk memutar bentuk dalam 180 derajat (Kejutan! :D) + reward_display: + title: Layar + desc: "Anda baru saja membuka Layar - Hubungkan sebuah sinyal dalam lapisan kabel untuk memvisualisasikannya!

NB: Apakah anda memperhatikan pembaca sabuk dan penyimpanan mengeluarkan item bacaan terakhir? Coba tampilkan pada layar!" + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Pengaturan categories: general: Umum userInterface: Antarmuka Pengguna advanced: Tingkat Tinggi - + performance: Performance versionBadges: dev: Pengembangan staging: Pementasan prod: Produksi buildDate: Dibangun - labels: uiScale: title: Skala Antarmuka - description: >- - Ganti ukuran antarmuka pengguna. Antarmuka tetap akan berskalakan berdasar resolusi peralatan Anda, tetapi pengaturan ini mengontrol besar skala. + description: Ganti ukuran antarmuka pengguna. Antarmuka tetap akan berskalakan + berdasar resolusi peralatan Anda, tetapi pengaturan ini + mengontrol besar skala. scales: super_small: Sangat kecil small: Kecil regular: Reguler large: Besar huge: Sangat besar - autosaveInterval: title: Jeda Penyimpanan Otomatis - description: >- - Mengatur seberapa sering permainan menyimpan secara otomatis. Anda juga dapat menonaktifkannya sama sekali disini. - + description: Mengatur seberapa sering permainan menyimpan secara otomatis. Anda + juga dapat menonaktifkannya sama sekali disini. intervals: one_minute: 1 Menit two_minutes: 2 Menit @@ -679,22 +778,20 @@ settings: ten_minutes: 10 Menit twenty_minutes: 20 Menit disabled: Dinonaktifkan - scrollWheelSensitivity: title: Kepekaan perbesaran - description: >- - Mengubah seberapa peka perbesaran yang dilakukan (baik dengan roda tetikus atau trackpad). + description: Mengubah seberapa peka perbesaran yang dilakukan (baik dengan roda + tetikus atau trackpad). sensitivity: super_slow: Sangat lambat slow: Lambat regular: Reguler fast: Cepat super_fast: Sangat cepat - movementSpeed: title: Kecepatan gerakan - description: >- - Mengubah seberapa cepat pandangan bergerak ketika menggunakan papan ketik. + description: Mengubah seberapa cepat pandangan bergerak ketika menggunakan papan + ketik. speeds: super_slow: Sangat lambat slow: Lambat @@ -702,87 +799,119 @@ settings: fast: Cepat super_fast: Sangat cepat extremely_fast: Luar biasa cepat - language: title: Bahasa - description: >- - Ganti bahasa. Semua terjemahan adalah contribusi pengguna dan mungkin saja tidak lengkap! - + description: Ganti bahasa. Semua terjemahan adalah contribusi pengguna dan + mungkin saja tidak lengkap! enableColorBlindHelper: title: Mode buta warna - description: >- - Mengaktifkan berbagai peralatan yang memungkinkan Anda bermain apabila Anda buta warna. - + description: Mengaktifkan berbagai peralatan yang memungkinkan Anda bermain + apabila Anda buta warna. fullscreen: title: Layar penuh - description: >- - Direkomendasikan untuk bermain dengan layar penuh untuk mendapatkan pengalaman terbaik. Hanya tersedia dalam versi penuh. - + description: Direkomendasikan untuk bermain dengan layar penuh untuk mendapatkan + pengalaman terbaik. Hanya tersedia dalam versi lengkap. soundsMuted: title: Bisukan suara - description: >- - Apabila diaktifkan, membisukan semua efek suara. - + description: Apabila diaktifkan, membisukan semua efek suara. musicMuted: title: Bisukan musik - description: >- - Apabila diaktifkan, membisukan semua musik. - + description: Apabila diaktifkan, membisukan semua musik. theme: title: Tema permainan - description: >- - Pilih tema permainan (terang/gelap). + description: Pilih tema permainan (terang/gelap). themes: dark: Gelap light: Terang - refreshRate: title: Target Simulasi - description: >- - Apabila Anda memiliki monitor 144hz, ganti laju penyegaran sehingga permainan dapat disimulasikan dengan benar pada laju yang lebih tinggi. Ini mungkin saja mengurangi laju bingkai per detik (frames per second) apabila computer anda terlalu lambat. - + description: Apabila Anda memiliki monitor 144hz, ganti laju penyegaran sehingga + permainan dapat disimulasikan dengan benar pada laju yang lebih + tinggi. Ini mungkin saja mengurangi laju bingkai per detik + (frames per second) apabila computer anda terlalu lambat. alwaysMultiplace: title: Peletakkan berganda - description: >- - Apabila diaktifkan, semua bangunan akan tetap terpilih setelah penempatan sampai Anda membatalkannya. Ini sama saja dengan menahan tombol SHIFT secara permanen. - + description: Apabila diaktifkan, semua bangunan akan tetap terpilih setelah + penempatan sampai Anda membatalkannya. Ini sama saja dengan + menahan tombol SHIFT secara permanen. offerHints: title: Petunjuk & penuntun - description: >- - Apakah akan menawarkan petunjuk dan penuntun ketika bermain. Juga menyembunyikan elemen-elemen antarmuka pengguna (user interface) tertentu sampai level tertentu untuk membuat lebih mudah untuk bermain. - + description: Apakah akan menawarkan petunjuk dan penuntun ketika bermain. Juga + menyembunyikan elemen-elemen antarmuka pengguna (user interface) + tertentu sampai level tertentu untuk membuat lebih mudah untuk + bermain. enableTunnelSmartplace: title: Terowongan cerdas - description: >- - Ketika diaktifkan, proses penempatan terowongan akan menghapus konveyor yang tidak berguna secara otomatis. Ini juga memungkinkan Anda untuk menyeret terowongan dan kelebihan terowongan akan dihilangkan. - + description: Ketika diaktifkan, proses penempatan terowongan akan menghapus + konveyor yang tidak berguna secara otomatis. Ini juga + memungkinkan Anda untuk menyeret terowongan dan kelebihan + terowongan akan dihilangkan. vignette: title: Vinyet - description: >- - Mengaktifkan vinyet, yang menggelapkan sudut-sudut layar dan membuat teks lebih mudah dibaca. - + description: Mengaktifkan vinyet, yang menggelapkan sudut-sudut layar dan + membuat teks lebih mudah dibaca. rotationByBuilding: title: Pemutaran masing-masing tipe bangunan - description: >- - Setiap tipe bangunan mengingat putaran yang Anda tetapkan kepadanya. Ini mungkin lebih nyaman apabila Anda sering berganti untuk menempatkan berbagai tipe bangunan. - + description: Setiap tipe bangunan mengingat putaran yang Anda tetapkan + kepadanya. Ini mungkin lebih nyaman apabila Anda sering berganti + untuk menempatkan berbagai tipe bangunan. compactBuildingInfo: title: Pemadatan informasi banguna - description: >- - Memendekkan kotak-kotak informasi bangunan-bangunan dengan hanya menampilkan rasionya. Jika tidak, deskripsi dan gambar ditampilkan. - + description: Memendekkan kotak-kotak informasi bangunan-bangunan dengan hanya + menampilkan rasionya. Jika tidak, deskripsi dan gambar + ditampilkan. disableCutDeleteWarnings: title: Nonaktifkan peringatan pemindahan/penghapusan - description: >- - Menonaktifkan peringatan yang muncul ketikan pemindahkan/menghapus lebih dari 100 entitas. - + description: Menonaktifkan peringatan yang muncul ketikan pemindahkan/menghapus + lebih dari 100 entitas. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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: % keybindings: title: Tombol pintas - hint: >- - Petunjuk: Pastikan Anda menggunakan CTRL, SHIFT and ALT! Mereka memungkinkan berbagai opsi penempatan. - + hint: "Petunjuk: Pastikan Anda menggunakan CTRL, SHIFT and ALT! Mereka + memungkinkan berbagai opsi penempatan." resetKeybindings: Setel Ulang Tombol Pintas - categoryLabels: general: Aplikasi ingame: Permainan @@ -791,7 +920,6 @@ keybindings: massSelect: Pemilihan massal buildings: Tombol pintas bangunan placementModifiers: Pengubah penempatan - mappings: confirm: Konfirmasi back: Kembali @@ -801,58 +929,63 @@ keybindings: mapMoveLeft: Geser ke kiri mapMoveFaster: Geser lebih cepat centerMap: Pusat peta - mapZoomIn: Perbesar mapZoomOut: Perkecil createMarker: Buat penanda - menuOpenShop: Tingkatan-tingkatan menuOpenStats: Statistik menuClose: Tutup menu - toggleHud: Alihkan HUD toggleFPSInfo: Alihkan laju bingkan per detik (frame per second) dan informasi debug switchLayers: Ganti lapisan exportScreenshot: Ekspor keseluruhan pangkalan pusat sebagai gambar - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Sabuk Konveyor + underground_belt: Terowongan + miner: Ekstraktor + cutter: Pemotong + rotater: Pemutar + stacker: Penyusun + mixer: Pencampur Warna + painter: Pengecat + trash: Tong Sampah + wire: Kawat Energi pipette: Pipet rotateWhilePlacing: Putar - rotateInverseModifier: >- - Modifier: Putar berlawanan arah jarum jam sebagai gantinya + rotateInverseModifier: "Modifier: Putar berlawanan arah jarum jam sebagai gantinya" cycleBuildingVariants: Ganti varian confirmMassDelete: Hapus area pasteLastBlueprint: Gandakan cetak biru terakhir cycleBuildings: Ganti bangunan lockBeltDirection: Aktifkan perencana konveyor - switchDirectionLockSide: >- - Planner: Alih sisi - + switchDirectionLockSide: "Planner: Alih sisi" massSelectStart: Tahan dan seret untuk memulai massSelectSelectMultiple: Pilih berbagai area massSelectCopy: Gandakan area massSelectCut: Pindahkan area - placementDisableAutoOrientation: Nonaktifkan orientasi otomatis placeMultiple: Tinggal di mode penempatan placeInverse: Balikkan orientasi otomatis konveyor - + 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: Tentang permainan ini body: >- - Permainan ini bekerja secara open source dan dikembangkan oleh Tobias Springer (ini adalah saya).

+ Permainan ini bekerja secara open source dan dikembangkan oleh Tobias Springer + (ini adalah saya).

Apabila Anda ingin berkontribusi, periksa shapez.io di github.

@@ -861,10 +994,8 @@ about: Lagunya dibuat oleh Peppsen - Dia mengagumkan.

Akhirnya, banyak terima kasih kepada teman baik saya Niklas - Tanpa sesi-sesi factorio kami, permainan ini tidak mungkin tercipta. - changelog: title: Catatan Perubahan - demo: features: restoringGames: Mengembalikan simpanan permainan @@ -872,5 +1003,65 @@ demo: oneGameLimit: Terbatas pada satu simpanan permainan customizeKeybindings: Sesuaikan tombol-tombol pintas exportingBase: Mengekspor keseluruhan pangkalan pusat sebagai gambar - settingNotAvailable: Tidak tersedia dalam versi 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. diff --git a/translations/base-it.yaml b/translations/base-it.yaml index 5b48402a..829a848e 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -1,113 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: In shapez.io potrai costruire delle fabbriche per automatizzare la creazione e la combinazione di forme sempre più complesse, in una mappa infinita. + shortText: In shapez.io potrai costruire delle fabbriche per automatizzare la + creazione e la combinazione di forme sempre più complesse, in una mappa + infinita. + discordLinkShort: Discord ufficiale + intro: >- + Shapez.io è un gioco tranquillo nel quale dovrai costruire delle + fabbriche per la produzione automatizzata di forme geometriche. - # 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] + All'aumentare del livello, le forme diventeranno sempre più complesse e dovrai espanderti sempre di più nella mappa infinita. - In shapez.io potrai costruire delle fabbriche per automatizzare la creazione e la combinazione di forme sempre più complesse, in una mappa infinita. + E come se non bastasse, dovrai produrre esponenzialmente di più per soddisfare le richieste, l'unica possibilità è andare su grande scala! - Una volta che avrai consegnato le forme richieste, progredirai nel gioco e sbloccherai dei miglioramenti per rendere la tua fabbrica più veloce. + All'inizio lavorerai solo con le forme, ma in seguito dovrai colorarle; a questo scopo dovrai estrarre e mescolare i colori! - 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]! - - 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. - - 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] - - discordLink: Server ufficiale Discord - Chatta con me! + 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. + Controlla la mia pagina di trello per la tabella di marcia completa! global: loading: Caricamento error: Errore - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "'" - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: k millions: M billions: G trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: un secondo fa xSecondsAgo: secondi fa oneMinuteAgo: un minuto fa @@ -116,14 +67,10 @@ global: xHoursAgo: ore fa oneDayAgo: un giorno fa xDaysAgo: giorni fa - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minuti - keys: tab: TAB control: CTRL @@ -131,13 +78,9 @@ global: escape: ESC shift: MAIUSC space: SPAZIO - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Versione Demo - intro: >- - Ottieni la versione completa per sbloccare tutte le funzioni! - + intro: Ottieni la versione completa per sbloccare tutte le funzioni! mainMenu: play: Play changelog: Changelog @@ -145,19 +88,15 @@ mainMenu: openSourceHint: Questo gioco è open source! discordLink: Server ufficiale Discord helpTranslate: Aiutaci a tradurre! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Ci spiace, ma il gioco è molto lento su questo browser! Ottieni la versione completa oppure scarica Chrome per l'intera esperienza. - + browserWarning: Ci spiace, ma il gioco è molto lento su questo browser! Ottieni + la versione completa oppure scarica Chrome per l'intera esperienza. savegameLevel: Livello savegameLevelUnknown: Livello sconosciuto - continue: Continua newGame: Nuova partita madeBy: Creato da subreddit: Reddit - + savegameUnnamed: Senza nome dialogs: buttons: ok: OK @@ -171,114 +110,102 @@ dialogs: viewUpdate: Mostra aggiornamento showUpgrades: Mostra miglioramenti showKeybindings: Mostra scorciatoie - importSavegameError: title: Errore di importazione - text: >- - Impossibile caricare il salvataggio: - + text: "Impossibile caricare il salvataggio:" importSavegameSuccess: title: Salvataggio importato - text: >- - Il tuo salvataggio è stato importato correttamente. - + text: Il tuo salvataggio è stato importato correttamente. gameLoadFailure: title: Partita malfunzionante - text: >- - Impossibile caricare il salvataggio: - + 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: - + text: "Impossibile eliminare il salvataggio:" restartRequired: - title: Restart richiesto - text: >- - Per applicare le nuove impostazioni è necessario riavviare del gioco. - + title: Riavvio richiesto + text: Per applicare le nuove impostazioni è necessario riavviare del gioco. editKeybinding: title: Cambia comandi - desc: Premi un nuovo tasto o un tasto del mouse a cui vuoi assegnare questo comando, Esc per annullare. - + desc: Premi un nuovo tasto o un tasto del mouse a cui vuoi assegnare questo + comando, Esc per annullare. resetKeybindingsConfirmation: title: Reset comandi assegnati - desc: Così riporterai tutti comandi al loro stato predefinto. Per favore conferma. - + desc: Così riporterai tutti comandi al loro stato predefinto. Per favore + conferma. keybindingsResetOk: title: Successo nel reset dei comandi desc: I comandi predefiniti sono stati ripristinati! - featureRestriction: title: Versione Demo - desc: Hai provato ad accedere ad una caratteristica () che non è disponibile nella Demo. Considera di prendere la versione completa per l'intera esperienza! - + desc: Hai provato ad accedere ad una caratteristica () che non è + disponibile nella Demo. Considera di prendere la versione completa + per l'intera esperienza! oneSavegameLimit: title: Salvataggi limitati - desc: Puoi avere solo un salvataggio nella versione Demo. Perfavore rimuovi il salvataggio già esistente o prendi la versione completa! - + desc: Puoi avere solo un salvataggio nella versione Demo. Perfavore rimuovi il + salvataggio già esistente o prendi la versione completa! updateSummary: title: Nuovo aggiornamento! - desc: >- - Qui puoi trovare i cambiamenti dall'ultima volta che hai giocato: - + 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 - Non distruggere le tue vecchie fabbriche! - Puoi trovare i miglioramenti nell'angolo in alto a destra dello schermo. - + 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: title: Conferma la rimozione - desc: >- - Stai rimuovendo molte strutture ( per essere precisi)! - Sei sicuro di volerlo fare? - + desc: Stai rimuovendo molte strutture ( per essere precisi)! Sei sicuro + di volerlo fare? blueprintsNotUnlocked: title: Non ancora sbloccato - desc: >- - I progetti non sono stati ancora sbloccati! Completa più livelli per sbloccarli. - + desc: I progetti non sono stati ancora sbloccati! Completa più livelli per + sbloccarli. keybindingsIntroduction: title: Comandi utili - desc: >- - Questo gioco ha molti comandi utili che possono rendere più semplice la costruzione delle fabbriche. - Qui ce ne sono un paio, ma dovresti controllare i comandi!

- CTRL + Drag: Seleziona l'area da copiare / cancella.
- SHIFT: Tieni premuto per costruire copie dell'edificio.
- ALT: Inverti l'orientamento dei nastri trasportatori.
- + desc: "Questo gioco ha molti comandi utili che possono rendere più semplice la + costruzione delle fabbriche. Qui ce ne sono un paio, ma dovresti + controllare i comandi!

CTRL + Drag: Seleziona l'area da copiare / + cancella.
SHIFT: Tieni premuto + per costruire copie dell'edificio.
ALT: Inverti l'orientamento dei nastri + 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 versione completa per avere segnapunti personalizzati illimitati! + desc: Puoi creare solo due segnapunti personalizzati nella Demo. Ottieni la + versione completa per avere segnapunti personalizzati illimitati! massCutConfirm: title: Conferma taglio - desc: >- - Stai tagliando molte strutture ( per essere precisi)! - Sei sicuro di volerlo fare? - + desc: Stai tagliando molte strutture ( per essere precisi)! Sei sicuro di + volerlo fare? exportScreenshotWarning: title: Esportare screenshot - desc: >- - Hai richiesto di esportare la tua base come screenshot. Perfavore tieni conto che potrebbe - essere lento per una grossa base e che potrebbe causare il crash del gioco! - + desc: Hai richiesto di esportare la tua base come screenshot. Perfavore tieni + conto che potrebbe essere lento per una grossa base e che potrebbe + causare il crash del gioco! massCutInsufficientConfirm: title: Conferma taglia - desc: Non puoi permetterti di incollare quest'area! Sei sicuro di volerla tagliare? - + desc: Non puoi permetterti di incollare quest'area! Sei sicuro di volerla + tagliare? + editSignal: + title: Imposta il segnale + descItems: "Scegli un oggetto predefinito:" + descShortKey: ... o inserisci il codice di una forma (Che puoi + generare qui) + renameSavegame: + title: Rinomina salvataggio. + desc: Qui puoi cambiare il nome del salvataggio. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Sposta selectBuildings: Seleziona area @@ -299,17 +226,9 @@ ingame: clearSelection: Annulla selezione pipette: Contagocce switchLayers: Cambia livello - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Premi per cambiare variante. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Velocità range: Raggio @@ -317,37 +236,21 @@ ingame: oneItemPerSecond: 1 oggetto / secondo itemsPerSecond: oggetti / s itemsPerSecondDouble: (x2) - tiles: caselle - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Livello completed: Completato - unlockText: >- - Sbloccato: ! + unlockText: "Sbloccato: !" buttonNextLevel: Prossimo livello - - # Notifications on the lower right notifications: newUpgrade: È disponibile un nuovo aggiornamento! gameSaved: Partita salvata. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Miglioramenti buttonUnlock: Sblocca - - # Gets replaced to e.g. "Tier IX" tier: Grado - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: GRADO MASSIMO (Velocità x) - - # The "Statistics" window statistics: title: Statistiche dataSources: @@ -356,55 +259,47 @@ ingame: description: Mostra il numero di forme immagizzinate nell'edificio centrale. produced: title: Prodotte - description: Mostra tutte le forme prodotte dalla tua fabbrica, inclusi i prodotti intermedi. + description: Mostra tutte le forme prodotte dalla tua fabbrica, inclusi i + prodotti intermedi. delivered: title: Consegnate description: Mostra le forme che vengono consegnate all'edificio centrale. - noShapesProduced: No shapes have been produced so far. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + noShapesProduced: Nessuna forma prodotta finora. + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Tempo di gioco - buildingsPlaced: Edifici beltsPlaced: Nastri - - buttons: - continue: Continua - settings: Impostazioni - menu: Torna al menù - - # Bottom left tutorial hints tutorialHints: title: Serve aiuto? showHint: Mostra indizio hideHint: Chiudi - - # When placing a blueprint blueprintPlacer: cost: Costo - - # Map markers waypoints: waypoints: Segnapunti hub: HUB - description: Click sinistro su un segnapunto per raggiungerlo, click destro per cancellarlo.

Premi per creare un segnapunto dalla visuale corrente, oppure click destro per creare un segnapunto nella posizione selezionata. + 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. creationSuccessNotification: Il segnapunto è stato creato. - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Posiziona un estrattore sopra una forma circolare per estrarla! - 1_2_conveyor: >- - Connetti l'estrattore all'Hub centrale utilizzando un nastro trasportatore!

Suggerimento: Clicca e trascina il nastro con il mouse! - - 1_3_expand: >- - Questo NON è un idle game! Costruisci più estrattori e nastri per raggiungere l'obiettivo più velocemente.

Suggerimento: Tieni premuto MAIUSC per piazzare estrattori multipli, e usa R per ruotarli. - + 1_1_extractor: Posiziona un estrattore sopra una forma + circolare per estrarla! + 1_2_conveyor: "Connetti l'estrattore all'Hub centrale utilizzando un + nastro trasportatore!

Suggerimento: + Clicca e trascina il nastro con il mouse!" + 1_3_expand: "Questo NON è un idle game! Costruisci più + estrattori e nastri per raggiungere l'obiettivo più + velocemente.

Suggerimento: Tieni premuto + MAIUSC per piazzare estrattori multipli, e usa + R per ruotarli." colors: red: Rosso green: Verde @@ -419,8 +314,42 @@ ingame: title: Strati empty: Vuoto copyKey: Copia codice - -# All shop upgrades + connectedMiners: + one_miner: 1 trivella + n_miners: trivelle + limited_items: Limitato a + watermark: + title: Versione demo + desc: Clicca qui per vedere i vantaggi della versione Steam! + get_on_steam: Ottieni su Steam + standaloneAdvantages: + title: Ottieni la versione completa! + no_thanks: No, grazie! + points: + levels: + title: 12 nuovi livelli! + desc: Per un totale di 26 livelli! + buildings: + title: 18 nuovi edifici + desc: Automatizza completamente la tua fabbrica! + savegames: + title: ∞ salvataggi + desc: Quanti ne desideri! + upgrades: + title: 20 gradi di miglioramenti + desc: Questa demo ne ha solo 5! + markers: + title: ∞ segnapunti + desc: Non perderti nella tua fabbrica! + wires: + title: Cavi + desc: Un'intera nuova dimensione! + darkmode: + title: Modalità scura + desc: Smettila di maltrattare i tuoi occhi! + support: + title: Sostienimi + desc: Lo sviluppo nel tempo libero! shopUpgrades: belt: name: Nastri, distribuzione e tunnel @@ -434,291 +363,444 @@ shopUpgrades: painting: name: Mix e verniciatura description: Velocità x → x - -# Buildings and their name / description buildings: belt: default: - name: &belt Nastro Trasportatore + name: Nastro Trasportatore description: Trasporta oggetti, clicca e trascina per posizionare in sequenza. - - miner: # Internal name for the Extractor + miner: default: - name: &miner Estrattore + name: Estrattore description: Posiziona sopra una forma o un colore per estrarlo. - chainable: name: Estrattore (Catena) - description: Posiziona sopra una forma o un colore per estrarlo. Puoi combinarlo con altri estrattori. - - underground_belt: # Internal name for the Tunnel + description: Posiziona sopra una forma o un colore per estrarlo. Puoi combinarlo + con altri estrattori. + underground_belt: default: - name: &underground_belt Tunnel - description: Permette di far passare delle risorse sotto a costruzioni e nastri trasportatori. - + name: Tunnel + description: Permette di far passare delle risorse sotto a costruzioni e nastri + trasportatori. tier2: name: Tunnel Grado II - description: Permette di far passare delle risorse sotto a costruzioni e nastri trasportatori. - - splitter: # Internal name for the Balancer - default: - name: &splitter Bilanciatore - description: Multifunzionale - Distribuisce equamente tutti gli ingressi su tutte le uscite. - - compact: - name: Aggregatore (compatto) - description: Unisce due nastri trasportatori in uno solo. - - compact-inverse: - name: Aggregatore (compatto) - description: Unisce due nastri trasportatori in uno solo. - + description: Permette di far passare delle risorse sotto a costruzioni e nastri + trasportatori. cutter: default: - name: &cutter Tagliatrice - description: Taglia le forme verticalmente e restituisce le metà destra e sinistra. Se usi solo una parte, distruggi l'altra o la macchina si fermerà! + name: Tagliatrice + description: Taglia le forme verticalmente e restituisce le metà destra e + sinistra. Se usi solo una parte, distruggi l'altra o la + macchina si fermerà! quad: name: Tagliatrice (4x) - description: Taglia le forme in quattro parti. Se usi solo una parte, distruggi le altre o la macchina si fermerà! - + description: Taglia le forme in quattro parti. Se usi solo una parte, + distruggi le altre o la macchina si fermerà! rotater: default: - name: &rotater Ruotatrice + name: Ruotatrice description: Ruota le forme di 90 gradi in senso orario. ccw: name: Ruotatrice (Ant.) description: Ruota le forme di 90 gradi in senso antiorario. - fl: + rotate180: name: Ruotatrice (180) description: Ruota le forme di 180 gradi. - stacker: default: - name: &stacker Impilatrice - description: Unisce o impila i due oggetti, se gli oggetti non possono essere uniti, l'oggetto destro è posizionato sopra il sinstro. - + name: Impilatrice + description: Unisce o impila i due oggetti, se gli oggetti non possono essere + uniti, l'oggetto destro è posizionato sopra il sinstro. mixer: default: - name: &mixer Mixer Colori + name: Mixer Colori description: Mescola due colori mediante sintesi additiva. - painter: default: - name: &painter Verniciatrice - description: &painter_desc Colora l'intera forma dall'ingresso sinistro con il colore dall'ingresso destro. + name: Verniciatrice + description: Colora l'intera forma dall'ingresso sinistro con il colore + dall'ingresso destro. double: name: Verniciatrice (2x) - description: Colora le forme dagli ingressi sinistri con il colore dall'ingresso destro. + description: Colora le forme dagli ingressi sinistri con il colore dall'ingresso + 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: *painter - description: *painter_desc - + name: Verniciatrice + description: Colora l'intera forma dall'ingresso sinistro con il colore + dall'ingresso destro. trash: default: - name: &trash Cestino + name: Cestino description: Accetta oggetti da tutti i lati e li distrugge. Per sempre. - - storage: - name: Stoccaggio - - #Literal translation, quite ugly, might need rephrasing - description: Immagazzina gli oggetti in eccesso, fino ad una certa capacità. Può essere usato come varco per le eccedenze hub: deliver: Consegna toUnlock: per sbloccare levelShortcut: LVL + endOfDemo: Fine della demo wire: default: name: Cavo energetico description: Ti consente di trasportare energia. - advanced_processor: + second: + name: Cavo + description: Trasmette segnali, che possono essere oggetti, colori o booleani (1 + / 0). Cavi di colore diverso non si connettono. + balancer: default: - name: Invertitore di colori - description: Accetta un colore o una forma e li inverte. - energy_generator: - deliver: Consegna - toGenerateEnergy: per generare - default: - name: Generatore di energia - description: Genera energia consumando forme. - wire_crossings: - default: - name: Separatore cavi - description: Divide un cavo energetico in due. + name: Bilanciatore + description: Multifunzionale, distribuisce equamente gli ogetti in ingresso tra + tutte le uscite. merger: - name: Giunzione cavi - description: Unisce due cavi energetici in uno. - + name: Aggregatore (compatto) + description: Unisce due nastri in uno. + merger-inverse: + name: Aggregatore (compatto) + description: Unisce due nastri in uno. + splitter: + name: Separatore (compatto) + description: Divide un nastro in due. + splitter-inverse: + name: Separatore (compatto) + description: Divide un nastro in due. + storage: + default: + 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: Incrocio cavi + description: Consente a due cavi di attraversarsi senza connettersi. + constant_signal: + default: + name: Segnale costante + description: Emette un segnale costante, che può essere una forma, un colore o + un booleano (1 / 0). + lever: + default: + 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: Porta AND + description: Emette un "1" booleano se entrambi gli ingressi sono veri. (Vero + significa forma, colore o "1" boolean) + not: + name: Porta NOT + description: Emette un "1" booleano se l'ingresso è falso. (Vero significa + forma, colore o "1" booleano) + xor: + 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: Porta OR + description: Emette un "1" booleano se uno degli ingressi è vero. (Vero + significa forma, colore o "1" booleano) + transistor: + default: + name: Transistor + description: Inoltra il segnale dall'ingresso inferiore se l'ingresso laterale è + vero (una forma, un colore o "1"). + mirrored: + name: Transistor + description: Inoltra il segnale dall'ingresso inferiore se l'ingresso laterale è + vero (una forma, un colore o "1"). + filter: + default: + 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: Collega un segnale per mostrarlo sul display. Può essere una forma, + un colore o un booleano. + reader: + default: + 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: 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: Comparatore + description: Emette un "1" booleano se i due segnali sono identici. Può + comparare forme, colori e booleani. + virtual_processor: + default: + name: Tagliatrice virtuale + description: Taglia virtualmente la forma in due metà. + rotater: + name: Ruotatrice virtuale + description: Ruota virtualmente la forma, sia in senso orario che antiorario. + unstacker: + name: Disimpilatrice virtuale + description: Estrae virtualmente lo strato più alto e lo emette a destra, i + restanti sono emessi a sinistra. + stacker: + name: Impilatrice virtuale + description: Impila visrtualmente la forma destra sulla sinistra. + painter: + name: Verniciatrice virtuale + description: Vernicia virtualmente la forma dall'ingresso inferiore con il + colore dall'ingresso destro. + item_producer: + default: + name: Generatore di oggetti + description: Disponibile solo nella modalità sandbox, emette il segnale dal + livello dei cavi come oggetti sul livello normale. storyRewards: - # Those are the rewards gained from completing the store 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 gradi in senso orario. - + desc: La ruotatrice è stata sbloccata! Ruota le forme di 90 + gradi in senso orario. reward_painter: title: Verniciatura - desc: >- - La verniciatrice è stata sbloccata - Estrai dalle vene colorate (esattamente come fai con le forme) e combina il colore con una forma nella veniciatrice per colorarla!

PS: Se sei daltonico, c'è la modalità daltonici nelle opzioni! - + desc: "La verniciatrice è stata sbloccata - Estrai dalle vene + colorate (esattamente come fai con le forme) e combina il colore con + una forma nella veniciatrice per colorarla!

PS: Se sei + daltonico, c'è la modalità daltonici nelle + opzioni!" reward_mixer: title: Mix colori - desc: Il mixer è stato sbloccato - Con questo edificio, puoi combinare due colori mediante sintesi additiva! - - rreward_stacker: - title: Impilatrice - desc: >- - Ora puoi unire forme con l'impilatrice! Le forme in ingresso vengono combinate: se possono essere poste l'una accanto all'altra verranno fuse, altrimenti le forme dall'ingresso destro vengono impilate sopra quelle dal sinistro! - + desc: Il mixer è stato sbloccato - Con questo edificio, puoi + 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 trasportare oggetti al di sotto di nastri ed edifici! - + 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 ruotare in senso antiorario! Per costruirla, seleziona la ruotatrice e premi 'T' per cambiare variante! - + 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 raggio più ampio e puoi anche mischiare le due varianti ora! - - reward_splitter_compact: - title: Bilanciatore compatto - desc: >- - Hai sbloccato una variante compatta del bilanciatore - Accetta due ingressi e li unisce! - + 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 di tagliare le forme in quattro parti invece che in due! - + 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 come una normale verniciatrice, ma processa due forme alla volta consumando solo un'unità di colore invece che due! - - reward_painter_quad: - title: Verniciatrice - desc: Hai sbloccato una variante della verniciatrice - Consente di verniciare ogni parte della forma indipendentemente! - + 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! Seleziona un'area (Tieni premuto CTRL e trascina con il mouse) e premi 'C' per copiarla.

Incollarla non è gratis, devi produrre forme progetto per potertelo permettere! (Quelle che hai appena consegnato). - - # Special reward, which is shown when there is no reward actually + desc: Ora puoi copiare ed incollare parti della tua fabbrica! + Seleziona un'area (Tieni premuto CTRL e trascina con il mouse) e + premi 'C' per copiarla.

Incollarla non è + gratis, devi produrre forme progetto per + potertelo permettere! (Quelle che hai appena consegnato). 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 - Successivamente avrai bisogno di tutte quelle forme per sbloccare i miglioramenti! - + desc: "Questo livello non ti ha dato alcuna ricompensa, ma il prossimo lo farà! +

PS: Meglio non distruggere la fabbrica che hai costruito. + Successivamente avrai bisogno di tutte quelle forme + per sbloccare i miglioramenti!" no_reward_freeplay: title: Prossimo livello - desc: >- - Congratulazioni! Ci sono altri contenuti in prgramma per la versione completa! - + desc: Congratulazioni! Ci sono altri contenuti in prgramma per la versione + completa! + reward_stacker: + 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: 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: Aggregatore compatto + desc: Hai sbloccato un aggregatore, variante del + bilanciatore. Acetta due ingressi e li aggrega su + un unico nastro! + reward_belt_reader: + 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: 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 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: 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: 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: 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: 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: 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: Fine della demo + desc: Hai raggiunto la fine della demo! settings: title: Impostazioni categories: general: Generali userInterface: Interfaccia utente advanced: Avanzate - + performance: Performance versionBadges: dev: Sviluppo staging: Staging prod: Produzione buildDate: Build del - labels: uiScale: title: Dimensione interfaccia - description: >- - Cambia la dimensione dell'interfaccia utente. L'interfaccia continuerà a cambiare in base alla risoluzione del tuo dispositivo, ma questa impostazione controlla la proporzione. + description: Cambia la dimensione dell'interfaccia utente. L'interfaccia + continuerà a cambiare in base alla risoluzione del tuo + dispositivo, ma questa impostazione controlla la proporzione. scales: super_small: Minuscola small: Piccola regular: Normale large: Grande huge: Enorme - scrollWheelSensitivity: title: Sensibilità zoom - description: >- - Determina quanto è sensibile lo zoom (Sia rotella del mouse che trackpad). + description: Determina quanto è sensibile lo zoom (Sia rotella del mouse che + trackpad). sensitivity: super_slow: Molto lento slow: Lento regular: Regolare fast: Veloce super_fast: Molto veloce - language: title: Lingua - description: >- - Cambia la lingua. Tutte le traduzioni sono realizzate dagli utenti e potrebbero essere incomplete! - + description: Cambia la lingua. Tutte le traduzioni sono realizzate dagli utenti + e potrebbero essere incomplete! fullscreen: title: Schermo intero - description: >- - È consigliabile giocare a schermo intero per la migliore esperienza. Disponibile solo nella versione completa. - + description: È consigliabile giocare a schermo intero per la migliore + esperienza. Disponibile solo nella versione completa. soundsMuted: title: Silenzia Suoni - description: >- - Se abilitato, spegne tutti gli effetti sonori. - + description: Se abilitato, spegne tutti gli effetti sonori. musicMuted: title: Silenzia Musica - description: >- - Se abilitato, spegne la musica. - + description: Se abilitato, spegne la musica. theme: title: Tema del gioco - description: >- - Scegli il tema (chiaro / scuro). - + description: Scegli il tema (chiaro / scuro). themes: dark: Scuro light: Chiaro - refreshRate: title: Obiettivo della simulazione - description: >- - Se hai un monitor a 144Hz, cambia la frequenza di aggiornamento, in modo tale che il gioco possa correttamente simulare alla frequenza di aggiornamento più alta. Questo potrebbe abbasare i frame al secondo se il tuo computer è troppo lento. - + description: Se hai un monitor a 144Hz, cambia la frequenza di aggiornamento, in + modo tale che il gioco possa correttamente simulare alla + frequenza di aggiornamento più alta. Questo potrebbe abbasare i + frame al secondo se il tuo computer è troppo lento. alwaysMultiplace: title: Posizionamento multiplo - description: >- - Se abilitato, tutti gli edifici rimarranno selezionati dopo il posizionamento finchè non lo annullerai. È equivalente a tenere costantemente premuto MAIUSC. - + description: Se abilitato, tutti gli edifici rimarranno selezionati dopo il + posizionamento finchè non lo annullerai. È equivalente a tenere + costantemente premuto MAIUSC. offerHints: title: Indizi e tutorial - description: >- - Determina se saranno presenti indizi e tutorial durante il gioco. Inoltre, nasconde alcuni elementi dell'interfaccia in certi livelli per semplificare le prime fasi di gioco. - + description: Determina se saranno presenti indizi e tutorial durante il gioco. + Inoltre, nasconde alcuni elementi dell'interfaccia in certi + livelli per semplificare le prime fasi di gioco. movementSpeed: title: Velocità di movimento - description: Determina la velocità di spostamento sulla mappa quando si usa la tastiera. + description: Determina la velocità di spostamento sulla mappa quando si usa la + tastiera. speeds: super_slow: Molto lento slow: Lento @@ -728,19 +810,17 @@ settings: extremely_fast: Velocissimo enableTunnelSmartplace: title: Tunnel intelligenti - description: >- - Se abilitato, piazzare un tunnel rimuoverà anche qualsiasi nastro superfluo. - Consente anche di trascinare i tunnel: i tunnel in eccesso verrano rimossi. + description: "Se abilitato, piazzare un tunnel rimuoverà anche qualsiasi nastro + superfluo. Consente anche di trascinare i tunnel: i tunnel in + eccesso verrano rimossi." vignette: title: Vignettatura - description: >- - Abilita la vignettatura che scurisce gli angoli dello schermo e rende i testi più leggibili. - + description: Abilita la vignettatura che scurisce gli angoli dello schermo e + rende i testi più leggibili. autosaveInterval: title: Intervallo salvataggio automatico - description: >- - Determina ogni quanto il gioco salva automaticamente. - Qui puoi anche disabilitarlo completamente. + description: Determina ogni quanto il gioco salva automaticamente. Qui puoi + anche disabilitarlo completamente. intervals: one_minute: 1 Minuto two_minutes: 2 Minuti @@ -750,29 +830,80 @@ settings: disabled: Disabilitato compactBuildingInfo: title: Info edifici compatte - description: >- - Accorcia le informazioni sugli edifici mostrandone solo la velocità. In caso contrario saranno mostrate immagine e descrizione. + description: Accorcia le informazioni sugli edifici mostrandone solo la + velocità. In caso contrario saranno mostrate immagine e + descrizione. disableCutDeleteWarnings: title: Disabilita avvertimenti taglia/cancella - description: >- - Disabilita i messaggi d'avvertimento quando tagli o cancelli più di 100 entità. - + description: Disabilita i messaggi d'avvertimento quando tagli o cancelli più di + 100 entità. enableColorBlindHelper: title: Modalità daltonici - description: Abilita vari strumenti che ti consentono di giocare se sei daltonico. + description: Abilita vari strumenti che ti consentono di giocare se sei + daltonico. rotationByBuilding: title: Rotazione per tipo di edificio - description: >- - Ogni tipo di edificio ricorderà l'ultimo orientamento che hai selezionato indipendentemente dagli altri tipi. - È utile se cambi spesso tipo di edificio. - + description: Ogni tipo di edificio ricorderà l'ultimo orientamento che hai + selezionato indipendentemente dagli altri tipi. È utile se cambi + spesso tipo di edificio. + soundVolume: + title: Volume suoni + description: Imposta il volume per gli effetti sonori + musicVolume: + title: Volume musica + description: Imposta il volume per la musica + lowQualityMapResources: + 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: Disattiva griglia + description: Disattivare la griglia può migliorare le prestazioni. Rende anche + il gioco visualmente più pulito! + clearCursorOnDeleteWhilePlacing: + 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: Texture in bassa qualità (Brutto) + description: Usa texture a bassa qualità per migliorare le prestazioni. Quesro + renderà il gioco molto brutto! + displayChunkBorders: + 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: 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: 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: 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Comandi - hint: >- - Suggerimento: Usa spesso CTRL, MAIUSC e ALT! Abilitano opzioni di posizionamento alternative. - + hint: "Suggerimento: Usa spesso CTRL, MAIUSC e ALT! Abilitano opzioni di + posizionamento alternative." resetKeybindings: Reimposta comandi - categoryLabels: general: Generale ingame: Gioco @@ -781,7 +912,6 @@ keybindings: massSelect: Selezione di massa buildings: Scorciatoie edifici placementModifiers: Modificatori piazzamento - mappings: confirm: Conferma back: Indietro @@ -790,38 +920,30 @@ keybindings: mapMoveDown: Spostati giù mapMoveLeft: Spostati a sinistra centerMap: Centra mappa - mapZoomIn: Aumenta zoom mapZoomOut: Riduci zoom createMarker: Crea segnapunto - menuOpenShop: Miglioramenti menuOpenStats: Statistiche - toggleHud: Mostra/Nascondi HUD toggleFPSInfo: Mostra/Nascondi FPS e info debug - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Nastro Trasportatore + underground_belt: Tunnel + miner: Estrattore + cutter: Tagliatrice + rotater: Ruotatrice + stacker: Impilatrice + mixer: Mixer Colori + painter: Verniciatrice + trash: Cestino rotateWhilePlacing: Ruota - rotateInverseModifier: >- - Modificatore: Ruota in senso antiorario + rotateInverseModifier: "Modificatore: Ruota in senso antiorario" cycleBuildingVariants: Cicla varianti confirmMassDelete: Conferma eliminazione di massa cycleBuildings: Cicla edifici - massSelectStart: Clicca e trascina per cominciare massSelectSelectMultiple: Seleziona aree multiple massSelectCopy: Copia area - placementDisableAutoOrientation: Disabilita orientamento automatico placeMultiple: Rimani in modalità posizionamento placeInverse: Inverti direzione automatica nastri @@ -834,31 +956,38 @@ keybindings: pipette: Contagocce menuClose: Chiudi menù switchLayers: Cambia livello - advanced_processor: Inversore di colore - energy_generator: Generatore di energia - wire: Cavo energetico - + 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: Lettore nastri + virtual_processor: Tagliatrice virtuale + transistor: Transistor + analyzer: Analizzatore forme + comparator: Comparatore + item_producer: Generatore di oggetti (Sandbox) + copyWireValue: "Cavi: Copia valore sotto il cursore" about: title: Riguardo questo gioco body: >- - Questo gioco è open source e sviluppato da Tobias Springer (me).

+ Questo gioco è open source e sviluppato da Tobias Springer + (me).

- Se vuoi contribuire visita la pagina github di shapez.io.

+ Se vuoi contribuire visita la pagina github di shapez.io.

- Realizzare questo gioco non sarebbe stato possibile senza la grande community di Discord per i miei giochi - Unisciti al server di Discord!

+ Realizzare questo gioco non sarebbe stato possibile senza la grande community di Discord per i miei giochi - Unisciti al server di Discord!

- La colonna sonora è stata composta daPeppsen - È un grande.

- - Per finire, grazie di cuore al mio migliore amico Niklas - Senza le nostre sessioni su factorio questo gioco non sarebbe mai esistito. + La colonna sonora è stata composta daPeppsen - È un grande.

+ Per finire, grazie di cuore al mio migliore amico Niklas - Senza le nostre sessioni su factorio questo gioco non sarebbe mai esistito. changelog: title: Changelog - demo: features: restoringGames: Recupero salvataggi @@ -866,5 +995,78 @@ demo: oneGameLimit: Limite di un salvataggio customizeKeybindings: Scorciatoie personalizabili exportingBase: Esportazione dell'intera base come immagine - settingNotAvailable: Non disponibile nella demo. +tips: + - 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 951a2684..f4b52b30 100644 --- a/translations/base-ja.yaml +++ b/translations/base-ja.yaml @@ -1,128 +1,68 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page shortText: shapez.ioは無限のマップ内で様々な"形"を資源とし、段々と複雑になっていく形の作成や合成の自動化を目指して工場を構築するゲームです。 + discordLinkShort: 公式Discord + intro: >- + 工場の自動化ゲームはお好きですか?それなら間違いないでしょう! - # 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] + Shapez.ioは、様々な幾何学的形状を生成するために工場を建設する、落ち着いたゲームです。レベルが上がる毎に生成すべき形はどんどん複雑になり、工場を無限に広がるマップに拡張する必要があります。 - shapez.ioは無限のマップ内で様々な"形"を資源とし、段々と複雑になっていく形の作成や合成の自動化を目指して工場を構築するゲームです。 - 求められた"形"を届けることで様々なアップグレードを手に入れることができ、さらに工場の効率を上げることができます。 - - "形"の需要が増えるにつれ、工場を拡大する必要があります - より多くの資源を手に入れるために[b]無限のマップ[!b]を開拓していく必要があります。 - - "形"に色を塗る必要もあります - 赤、緑、青を混ぜ、さまざまな色を作り需要に応じて色が塗られた"形"を製造できます。 - - 現在このゲームには18個のレベルがあり、今後これを拡大していく予定です - 他にも様々なアップデートを準備しています! - - このゲームを買うことによってスタンドアローン版の様々な機能が使えるようになり、新しいアップデートもすぐに手に入ります。 - - [b]スタンドアローン版で使える機能[/b] - - [list] - [*] ダークモード - [*] ウェイポイントの制限がありません - [*] セーブの数の制限がありません - [*] 様々な設定 - [*] 追加予定: ワイヤーとエネルギー! (7月末を目指しています) - [*] 追加予定: より多くのレベル - [*] shapez.io開発が助けられます❤️ - [/list] - - [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] - - discordLink: 公式Discord - 私と話せます! + しかし、それだけでは不十分です。需要は指数関数的に上昇し、より多くの形状を生産する必要があり――"スケーリング"が、唯一の対抗策と成り得ます。最初は形状を加工するだけですが、後々着色も必要になってきます――それには色を抽出して、混ぜ合わせることが必要です! + Steamでゲームを購入するとフルバージョンで遊ぶことができますが、まずshapez.ioでデモをプレイし、その後で決めることもできます! + title_advantages: スタンドアロン版の特典 + advantages: + - 新しい12個のレベルが追加され、全部で26個のレベルになります。 + - 新しい18個のパーツが自動化工場建設のために使用できます! + - 20個のアップデートティアによって多くの時間楽しむことができます! + - ワイヤアップデートによって全く新次元の体験を得られます! + - ダークモード! + - セーブ数の上限がなくなります。 + - マップマーカー数の上限がなくなります。 + - 私をサポートできる!❤️ + title_future: 計画中の要素 + planned: + - ブループリント (スタンドアロン版専用) + - Steamの実績 + - パズルモード + - ミニマップ + - MOD対応 + - サンドボックスモード + - ……あともっとたくさんの要素! + title_open_source: このゲームはオープンソースです! + text_open_source: |- + 誰でも参加することができます。私はコミュニティに積極的に参加し、すべての提案を確認し、可能な場合はフィードバックしようとしています。 + 完全なロードマップについては、Trello boardを確認してください! + title_links: リンク + links: + discord: 公式Discord + roadmap: ロードマップ + subreddit: Subreddit + source_code: ソースコード(GitHub) + translate: 翻訳を助けてください! global: loading: ロード中 error: エラー - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: 無限 - time: - # Used for formatting past time dates - oneSecondAgo: 1 秒前 - xSecondsAgo: 秒前 - oneMinuteAgo: 1 分前 - xMinutesAgo: 分前 - oneHourAgo: 1 時間前 - xHoursAgo: 時間前 - oneDayAgo: 1 日前 - xDaysAgo: 日前 - - # Short formats for times, e.g. '5h 23m' + oneSecondAgo: 1秒前 + xSecondsAgo: 秒前 + oneMinuteAgo: 1分前 + xMinutesAgo: 分前 + oneHourAgo: 1時間前 + xHoursAgo: 時間前 + oneDayAgo: 1日前 + xDaysAgo: 日前 secondsShort: 秒 - minutesAndSecondsShort: 秒 - hoursAndMinutesShort: 時間 分 - - xMinutes: 分 - + minutesAndSecondsShort: 秒 + hoursAndMinutesShort: 時間分 + xMinutes: 分 keys: tab: TAB control: CTRL @@ -130,33 +70,24 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: デモ版 - intro: >- - スタンドアローン版を手に入れ、すべての機能をアンロックしましょう! - + intro: スタンドアローン版を手に入れ、すべての機能をアンロックしましょう! mainMenu: play: プレイ - changelog: 更新履歴 - importSavegame: インポート - openSourceHint: このゲームはオープンソースです - discordLink: 公式Discord - helpTranslate: 翻訳に参加 - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - このゲームはお使いのブラウザでは速度が落ちることがあります。スタンドアローン版を入手するか、Chromeでプレイすることでこの問題は避けられます。 - - savegameLevel: レベル - savegameLevelUnknown: 不明なレベル - continue: 続きから newGame: 新規ゲーム - madeBy: 制作者 + changelog: 更新履歴 subreddit: Reddit - + importSavegame: インポート + openSourceHint: このゲームはオープンソースです + discordLink: 公式Discordサーバー + helpTranslate: 翻訳を助けてください! + madeBy: によって作られました + browserWarning: このゲームはお使いのブラウザでは速度が落ちることがあります。スタンドアローン版を入手するか、Chromeでプレイすることでこの問題は避けられます。 + savegameLevel: レベル + savegameLevelUnknown: 不明なレベル + savegameUnnamed: 無名のデータ dialogs: buttons: ok: OK @@ -170,113 +101,82 @@ 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: >- - 設定を反映するには再起動が必要です - + 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: >- - すべての納品された形はアップグレードの解除のためにカウントされています。作った生産ラインを削除しないようにしてください! アップグレードタブは画面の右上から確認できます。 - + desc: すべての納品された形はアップグレードの解除のためにカウントされています。作った生産ラインを削除しないようにしてください! アップグレードタブは画面の右上から確認できます。 massDeleteConfirm: title: 削除確認 - desc: >- - 多数の建造物を削除しようとしています! ( 個の選択) 続行しますか? - + desc: 多数の建造物を削除しようとしています! ( 個の選択) 続行しますか? + massCutConfirm: + title: カット確認 + desc: 多数の建造物をカットしようとしています! ( 個の選択) 続行しますか? + massCutInsufficientConfirm: + title: カット確認 + desc: 設置コストが不足しています! 続行しますか? blueprintsNotUnlocked: title: 未解除 - desc: >- - レベル12をクリアしてブループリント機能を解除してください! - + desc: レベル12をクリアしてブループリント機能を解除してください! keybindingsIntroduction: title: 便利なキー設定 - desc: >- - このゲームには大規模な工場の構築をスムーズにするため、沢山のキー設定があります。 - 以下に数例を示します。詳細はキー設定を確認してください

- CTRL + ドラッグ: 削除範囲を指定
- SHIFT: 押し続けると1種の建造物を連続配置
- ALT: 設置されたベルトの方向を逆転させる
- + desc: "このゲームには大規模な工場の構築をスムーズにするため、沢山のキー設定があります。 + 以下に数例を示します。詳細はキー設定を確認してください

CTRL + ドラッグ: 削除範囲を指定
SHIFT: 押し続けると1種の建造物を連続配置
ALT: 設置されたベルトの方向を逆転させる
" createMarker: title: マーカーを設置 titleEdit: マーカーを編集 - desc: わかりやすい名前をつけてください。形を表す短いキーを含めることもできます。(ここから生成できます) - + desc: わかりやすい名前をつけてください。形を表す短いキーを含めることもできます。(ここから生成できます) + editSignal: + title: 信号を設定 + descItems: "プリセットを選択:" + descShortKey: もしくは形を表す短いキーを入力してください。 (ここから生成できます) markerDemoLimit: desc: デモ版ではマーカー設置は2つまでに制限されています。スタンドアローン版は無制限です! - - massCutConfirm: - title: カット確認 - desc: >- - 多数の建造物をカットしようとしています! ( 個の選択) 続行しますか? - - massCutInsufficientConfirm: - title: カット確認 - desc: >- - 設置コストが不足しています! 続行しますか? - exportScreenshotWarning: title: スクリーンショット出力 - desc: >- - スクリーンショット出力を実行します。この処理は工場の全体像があまりに大きいと、 - ゲームが遅くなったりクラッシュしてしまう可能性があります! - + desc: スクリーンショット出力を実行します。この処理は工場の全体像があまりに大きいと、 ゲームが遅くなったりクラッシュしてしまう可能性があります! + renameSavegame: + title: セーブデータの名前を変更 + desc: セーブデータの名前を変更することができます ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: マップ移動 selectBuildings: 範囲選択 @@ -296,19 +196,20 @@ ingame: copySelection: コピー clearSelection: 選択範囲をクリア pipette: ピペット - switchLayers: Switch layers - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) + switchLayers: レイヤーを変更 + colors: + red: 赤 + green: 緑 + blue: 青 + yellow: 黄 + purple: マゼンタ + cyan: シアン + white: 白 + black: 黒 + uncolored: 無色 buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: キーを押して変更 - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - ホットキー: - + hotkeyLabel: "ホットキー: " infoTexts: speed: スピード range: レンジ @@ -316,36 +217,21 @@ ingame: oneItemPerSecond: 1 アイテム / 秒 itemsPerSecond: アイテム / 秒 itemsPerSecondDouble: (x2) - tiles: タイル - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: レベル completed: 完了 unlockText: を解除! buttonNextLevel: 次のレベル - - # Notifications on the lower right notifications: newUpgrade: 新しいアップグレードが利用可能です! gameSaved: ゲームをセーブしました。 - - # The "Upgrades" window + freeplayLevelComplete: レベル をクリアしました! shop: title: アップグレード buttonUnlock: アップグレード - - # Gets replaced to e.g. "Tier IX" tier: 第 段階 - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: 最大レベル (スピード x) - - # The "Statistics" window statistics: title: 統計情報 dataSources: @@ -359,416 +245,522 @@ ingame: title: 納品済 description: 中央の建造物に納品された形の総数です。 noShapesProduced: まだ形が生産されていません。 - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / 分 - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / 秒 + minute: / 分 + hour: / 時間 settingsMenu: playtime: プレイ時間 - buildingsPlaced: 建造物 beltsPlaced: ベルト - - buttons: - continue: コンティニュー - settings: 設定 - menu: メニューに戻る - - # Bottom left tutorial hints tutorialHints: title: ヒントが必要ですか? showHint: ヒントを見る hideHint: 閉じる - - # When placing a blueprint blueprintPlacer: cost: コスト - - # Map markers waypoints: waypoints: マーカー hub: HUB - description: マーカーを左クリックでその場所にジャンプ、右クリックで削除します。

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

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

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

Tip: + SHIFT + キーを押し続けると抽出機を連続配置できます。Rキーで設置方向を回転できます。" + connectedMiners: + one_miner: 1個の抽出機 + n_miners: 個の抽出機 + limited_items: に制限されます + watermark: + title: デモバージョン + desc: Steamバージョンの特典を確認するには、ここをクリックしてください! + get_on_steam: steamで購入 + standaloneAdvantages: + title: フルバージョンを購入 + no_thanks: いいえ、結構です + points: + levels: + title: 新しい12個のレベル + desc: 全部で26個のレベルになります! + buildings: + title: 新しい18個の設置物 + desc: あなたの工場を完全自動化しましょう! + savegames: + title: 無限個のセーブデータ + desc: あなたが望むだけデータを作成できます! + upgrades: + title: 20個のアップデートティア + desc: このデモバージョンでは5ティアのみです! + markers: + title: 無限個のマップマーカー + desc: これでもうあなたの工場を見失いません! + wires: + title: ワイヤ + desc: 新次元の体験を得られます! + darkmode: + title: ダークモード + desc: 目に優しい! + support: + 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 and their name / description buildings: hub: deliver: 納品 toUnlock: 解除 levelShortcut: レベル - + endOfDemo: お試し終了 belt: default: - name: &belt コンベアベルト + name: コンベアベルト description: アイテムを輸送します。マウスドラッグで連続配置できます。 - - miner: # Internal name for the Extractor + miner: default: - name: &miner 抽出機 + name: 抽出機 description: 形や色の上に設置することで抽出できます。 - chainable: name: 連鎖抽出機 description: 形や色の上に設置することで抽出できます。連鎖設置可能です。 - - underground_belt: # Internal name for the Tunnel + underground_belt: default: - name: &underground_belt トンネル + name: トンネル description: 建造物や他のベルトの地下を通してベルトを配置できます。 - tier2: name: トンネル レベルII description: 建造物や他のベルトの地下を通してベルトを配置できます。 - - splitter: # Internal name for the Balancer + balancer: default: - name: &splitter 分配機 + name: 分配機/合流機 description: 多機能 - すべての入力をすべての出力に均等に分配します。 - - compact: - name: 合流機 (コンパクト) - description: 2本のベルトの内容を1本のベルトに合流します。 - - compact-inverse: - name: 合流機 (コンパクト) - description: 2本のベルトの内容を1本のベルトに合流します。 - + 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: &cutter 切断機 + name: 切断機 description: 形を上下の直線で切断し、双方を出力します。もしひとつの出力しか使わない場合、他の出力を破棄しないと出力が詰まって停止することに注意してください! quad: name: 切断機 (四分割) description: 形を四分割します。もしひとつの出力しか使わない場合、他の出力を破棄しないと出力が詰まって停止することに注意してください! - rotater: default: - name: &rotater 回転機 + name: 回転機 description: 形を時計回り方向に90度回転します。 ccw: name: 回転機 (逆) description: 形を反時計回り方向に90度回転します。 - fl: - name: 回転機 (180) + rotate180: + name: 回転機 (180度) description: 形を180度回転します。 - stacker: default: - name: &stacker 積層機 + name: 積層機 description: 入力アイテムを積み重ねます。もしうまく統合できなかった場合は、右の入力アイテムを左の入力アイテムの上に重ねます。 - mixer: default: - name: &mixer 混合機 + name: 混合機 description: 2つの色を加算混合で混ぜ合わせます。 - painter: default: - name: &painter 着色機 - description: &painter_desc 左から入力された形の全体を、右から入力された色で着色します。 + name: 着色機 + description: 左から入力された形の全体を、上から入力された色で着色します。 + mirrored: + name: 着色機 + description: 左から入力された形の全体を、下から入力された色で着色します。 double: name: 着色機 (ダブル) description: 左から入力された形を、上から入力された色で着色します。 quad: name: 着色機 (四分割) description: 入力された形を四分割づつ別の色で塗り分けられます。 - mirrored: - name: *painter - description: *painter_desc - + 真らしい信号が流れているスロットのみがペイントされます! trash: default: - name: &trash ゴミ箱 + name: ゴミ箱 description: すべての辺からの入力を破棄します。永遠に。 - - storage: - name: 格納庫 - description: 余ったアイテムを指定の上限まで格納します。余剰の受け口としても使用可能です。 + storage: + default: + name: ストレージ + description: 所定の容量まで、アイテムを蓄えることができます。左側の出力が優先され、オーバーフローゲートとして利用できます。 wire: default: - name: Energy Wire - description: Allows you to transport energy. - advanced_processor: + name: ワイヤ + description: 形状、色、真偽値(1/0)の信号を運ぶことができます。異なる色のワイヤは互いに接続しません。 + second: + name: ワイヤ + description: 形状、色、真偽値(1/0)の信号を運ぶことができます。異なる色のワイヤは互いに接続しません。 + wire_tunnel: default: - name: Color Inverter - description: 入力された色や形の色を反転します。 - energy_generator: - deliver: Deliver - toGenerateEnergy: For + name: 交差ワイヤ + description: 2本のワイヤを接続させることなく交差させることができます。 + constant_signal: default: - name: エネルギー発電機 - description: 入力された形を使って、エネルギーを発電します。 - wire_crossings: + name: 定値信号 + description: 常に同じ値を出力します。形状、色、真偽値(1/0)が使用できます。 + lever: default: - name: ワイヤー分配機 - description: 1つのワイヤーを2つのワイヤーに分配します。 - merger: - name: ワイヤー合流機 - description: 2つのワイヤーを1つのワイヤーに合流します。 - + name: スイッチ + description: ワイヤ上に真偽値(1/0)を出力できます。スイッチを押すことで1と0を切り替えることができ、 + それを利用してアイテムフィルタ等を制御できます。 + logic_gate: + default: + name: ANDゲート + description: 両方の入力が真らしいなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) + not: + name: NOTゲート + description: 入力が真らしくないなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) + xor: + name: XORゲート + description: 両方の入力のうち片方のみが真らしいなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) + or: + name: ORゲート + description: 両方の入力のうち少なくとも片方が真らしいなら、真偽値"1"を出力します。(真らしいとは、形状、色、または真偽値"1"のことです) + transistor: + default: + name: トランジスタ + description: 横からの入力が真らしいなら、下からの入力を通過させます。(真らしいとは、形状、色、または真偽値"1"のことです) + mirrored: + name: トランジスタ + description: 横からの入力が真らしいなら、下からの入力を通過させます。(真らしいとは、形状、色、または真偽値"1"のことです) + filter: + default: + name: アイテムフィルタ + description: 入力された信号と一致するアイテムを上部に通過させ、残りを右側に通過させます。 真偽値(1/0)でも制御できます。 + display: + default: + name: ディスプレイ + description: 入力された信号をディスプレイに表示します。 形状、色、真偽値のいずれでも可能です。 + reader: + default: + name: ベルトリーダ + description: 平均スループットを計測できます。 アンロック後は、 最後に通過したアイテムの情報を出力します。 + analyzer: + default: + name: 形状解析機 + description: 形状の最下層の右上の形状を分析し、形状と色に分解します。 + comparator: + default: + name: 比較機 + description: 両方の信号が完全に一致している場合、真偽値"1"を出力します。 形状、色、真偽値を比較できます。 + virtual_processor: + default: + name: 仮想切断機 + description: 形状の信号を2つに切断できます。 + rotater: + name: 仮想回転機 + description: 形状の信号を時計回り、反時計回りに回転させます。 + unstacker: + name: 仮想分離機 + description: 形状の信号の最上層を右側に出力し、残りの層を左側に出力します。 + stacker: + name: 仮想積層機 + description: 左側の形状の信号の上に右側の形状の信号を合成します。 + painter: + name: 仮想着色機 + description: 下の形状の信号を右の色の信号で着色します。 + item_producer: + default: + name: なんでも抽出機 + description: サンドボックスモードでのみ使用可能で、ワイヤレイヤーで与えられた信号の形状を通常レイヤーに出力します。 storyRewards: - # Those are the rewards gained from completing the store 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: 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: トンネル desc: トンネルが利用可能になりました。 - 他のベルトや建造物の地下を通してベルトが配置可能です! - reward_rotater_ccw: title: 反時計回りの回転 - desc: 回転機のバリエーションが利用可能になりました。 - 反時計回りの回転ができるようになります! 回転機を選択し、'T'キーを押すことで方向の切り替えができます - + 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: トンネル レベルII - desc: トンネルのバリエーションが利用可能になりました。 - 距離拡張版が追加され、以前のものと組み合わせて目的に応じて利用することができます! - - reward_splitter_compact: - title: 合流機 (コンパクト) - desc: >- - 合流機のコンパクト版が利用可能になりました。 - 2つの入力をひとつに合流できます! - + 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: 着色機のバリエーションが利用可能になりました。 - 通常の着色機と同様に機能しますが、ひとつの色の消費で一度に2つの形を着色処理できます! - - reward_painter_quad: - title: 四分割着色 - desc: 着色機のバリエーションが利用可能になりました。 - 形のすべてのパーツを別の色で塗り分けることができます! - + desc: 着色機のバリエーションが利用可能になりました。 - + 通常の着色機と同様に機能しますが、ひとつの色の消費で一度に2つの形を着色処理できます! reward_storage: title: 余剰の貯蓄 - desc: ゴミ箱のバリエーションが利用可能になりました。 - 容量上限までアイテムを格納することができます! - - reward_freeplay: - title: フリープレイ - desc: やりましたね! フリープレイモードが利用可能になりました。 - これからは形はランダムに生成されます! (ご心配なく。スタンドアローン版はさらなる追加コンテンツが計画されています) - + desc: ゴミ箱のバリエーションが利用可能になりました。 - 容量上限までアイテムを格納することができます!

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

ペーストはタダではありません。ブループリントの形を生産することで可能になります!(たった今納品したものです) - - # Special reward, which is shown when there is no reward actually + 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: "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: 定数信号 + 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 or 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: >- - おめでとうございます! スタンドアローン版ではさらなる追加要素が計画されています! - + desc: おめでとうございます! + reward_freeplay: + title: フリープレイ + desc: やりましたね! フリープレイモードが利用可能になりました。 - + これからは納品すべき形はランダムに生成されます!

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

+ ハブは要求する形状をワイヤー層に出力するので、それを分析し自動的に調整する工場を作成するだけです。 + reward_demo_end: + title: お試し終了 + desc: デモ版の最後に到達しました! settings: title: 設定 categories: - general: General - userInterface: User Interface - advanced: Advanced - + 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: >- - マウスやトラックパッドでのズーム感度を変更します。 + description: マウスやトラックパッドでのズーム感度を変更します。 sensitivity: super_slow: 極遅 slow: 遅 regular: 普通 fast: 速 super_fast: 超速 - - language: - title: 言語 - description: >- - 言語を変更します。すべての翻訳はユーザーからの協力で成り立っており、まだ完全には完了していない可能性があります! - - fullscreen: - title: フルスクリーン - description: >- - フルスクリーンでのプレイが推奨です。スタンドアローン版のみ変更可能です。 - - soundsMuted: - title: 効果音ミュート - description: >- - 有効に設定するとすべての効果音をミュートします。 - - musicMuted: - title: BGMミュート - description: >- - 有効に設定するとすべてのBGMをミュートします。 - - theme: - title: ゲームテーマ - description: >- - ゲームテーマを選択します。 (ライト / ダーク). - - themes: - dark: ダーク - light: ライト - - refreshRate: - title: シミュレーション対象 - description: >- - もし144hzのモニターを利用しているなら、この設定でリフレッシュレートを変更することで、ゲームが高リフレッシュレートを正しくシミュレーションします。利用しているPCが非力な場合、この設定により実効FPSが遅くなる可能性があります。 - - alwaysMultiplace: - title: 連続配置 - description: >- - この設定を有効にすると、建造物を選択後に意図的にキャンセルするまで選択された状態を維持します。これはSHIFTキーを押し続けている状態と同等です。 - - offerHints: - title: ヒントとチュートリアル - description: >- - ゲーム中、ヒントとチュートリアルを表示します。レベルごとに不要なUI要素も非表示になり、ゲームに集中しやすくなります。 - movementSpeed: title: 移動速度 description: キーボードを使用した際の画面の移動速度を変更します。 speeds: - super_slow: 極遅 - slow: 遅 + super_slow: 激遅 + slow: 遅い regular: 普通 - fast: 速 + fast: 速い super_fast: 超速 - extremely_fast: 超々速 + extremely_fast: ちょっぱや + language: + title: 言語 + description: 言語を変更します。すべての翻訳はユーザーからの協力で成り立っており、まだ完全には完了していない可能性があります! + enableColorBlindHelper: + title: 色覚モード + description: 色覚特性を持っていてもゲームがプレイできるようにするための各種ツールを有効化します。 + fullscreen: + title: フルスクリーン + description: フルスクリーンでのプレイが推奨です。スタンドアローン版のみ変更可能です。 + soundsMuted: + title: 効果音ミュート + description: 有効に設定するとすべての効果音をミュートします。 + musicMuted: + title: BGMミュート + description: 有効に設定するとすべてのBGMをミュートします。 + soundVolume: + title: 音量(SE) + description: 効果音の音量を設定してください。 + musicVolume: + title: 音量(BGM) + description: 音楽の音量を設定してください。 + theme: + title: ゲームテーマ + description: ゲームテーマを選択します。 (ライト / ダーク). + themes: + dark: ダーク + light: ライト + refreshRate: + title: シミュレーション対象 + description: もし144hzのモニターを利用しているなら、この設定でリフレッシュレートを変更することで、ゲームが高リフレッシュレートを正しくシミュレーションします。利用しているPCが非力な場合、この設定により実効FPSが遅くなる可能性があります。 + alwaysMultiplace: + title: 連続配置 + description: この設定を有効にすると、建造物を選択後に意図的にキャンセルするまで選択された状態を維持します。これはSHIFTキーを押し続けている状態と同等です。 + offerHints: + title: ヒントとチュートリアル + description: ゲーム中、ヒントとチュートリアルを表示します。レベルごとに不要なUI要素も非表示になり、ゲームに集中しやすくなります。 enableTunnelSmartplace: title: スマートトンネル - description: >- - 有効にすると、トンネルを設置した際に不要なベルトを自動的に除去します。 + description: 有効にすると、トンネルを設置した際に不要なベルトを自動的に除去します。 また、トンネルをドラッグできるようになり、不要なトンネルは除去されます。 vignette: title: ビネット - description: >- - 画面の隅を暗くして文字を読みやすくするビネットを有効化します。 - - autosaveInterval: - title: オートセーブ間隔 - description: >- - ゲームが自動的にセーブされる頻度を設定します。無効化することも可能です。 - intervals: - one_minute: 1 分 - two_minutes: 2 分 - five_minutes: 5 分 - ten_minutes: 10 分 - twenty_minutes: 20 分 - disabled: 無効 + description: 画面の隅を暗くして文字を読みやすくするビネットを有効化します。 + rotationByBuilding: + title: 回転の記憶(部品別) + description: それぞれの部品ごとの回転を記憶させます。頻繁に設置物を変更する場合、より快適に建設が行なえます。 compactBuildingInfo: title: コンパクトな建造物情報 - description: >- - レートのみを表示することで、建造物の情報ボックスを短くします。選択しない場合は、説明文と画像も表示されます。 + 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. - + description: 100個以上のエンティティをカット/削除する際に表示される警告ダイアログを無効にします。 + lowQualityMapResources: + title: リソース表示の簡易化 + description: ズームインしたときのリソース表示を簡素化して、パフォーマンスを向上させます。 外見もすっきりしますので、ぜひお試しください! + disableTileGrid: + title: グリッドの無効化 + description: 配置用のグリッドを無効にして、パフォーマンスを向上させます。 これにより、ゲームの見た目もすっきりします。 + clearCursorOnDeleteWhilePlacing: + title: 右クリックで配置をキャンセル + description: デフォルトで有効です。建物を設置しているときに右クリックすると、選択中の建物がキャンセルされます。 + 無効にすると、建物の設置中に右クリックで建物を削除できます。 + lowQualityTextures: + title: 低品質のテクスチャ(視認性低下) + description: 低品質のテクスチャを使用してパフォーマンスを向上させます。 ゲームの視認性が非常に低下します! + displayChunkBorders: + title: チャンクの境界線を表示する + description: このゲームでは16x16タイルのチャンクで構成されています。 有効にすると、チャンクの境界線が表示されます。 + pickMinerOnPatch: + title: 資源で抽出機を選択 + description: デフォルトで有効です。資源の上でスポイトを使用すると、抽出機を選択します。 + simplifiedBelts: + title: ベルトを単純化(視認性低下) + description: ベルトにカーソルを合わせているとき以外、ベルトで運ばれているアイテムを描画しません。 + パフォーマンスを向上させますが、パフォーマンスが極端に必要な場合以外でこの設定で遊ぶことは推奨しません。 + enableMousePan: + title: マウスで画面を移動 + description: 画面の端にカーソルを合わせることで移動できます。移動速度を設定することで、速度を変更できます。 + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). keybindings: title: キー設定 - hint: >- - Tip: CTRL, SHIFT, ALTを利用するようにしてください。これらはそれぞれ建造物配置の際の機能があります。 - + hint: "Tip: CTRL, SHIFT, ALTを利用するようにしてください。これらはそれぞれ建造物配置の際の機能があります。" resetKeybindings: キー設定をリセット - categoryLabels: general: アプリケーション ingame: ゲーム @@ -777,7 +769,6 @@ keybindings: massSelect: 複数選択 buildings: 建造物ショートカット placementModifiers: 配置時バリエーション - mappings: confirm: 確認 back: 戻る @@ -785,59 +776,64 @@ keybindings: mapMoveRight: 右移動 mapMoveDown: 下移動 mapMoveLeft: 左移動 + mapMoveFaster: より速く移動 centerMap: マップ中央移動 - mapZoomIn: ズームイン mapZoomOut: ズームアウト createMarker: マーカー設置 - menuOpenShop: アップグレード menuOpenStats: 統計情報 menuClose: メニューを閉じる - toggleHud: HUD切り替え toggleFPSInfo: FPS、デバッグ情報表示切り替え - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + switchLayers: レイヤを変更 + exportScreenshot: 工場の全体像を画像出力 + belt: コンベアベルト + balancer: 分配機/合流機 + underground_belt: トンネル + miner: 抽出機 + cutter: 切断機 + rotater: 回転機 + stacker: 積層機 + mixer: 混合機 + painter: 着色機 + trash: ゴミ箱 + storage: ストレージ + wire: ワイヤ + constant_signal: 定値信号 + logic_gate: Logic Gate + lever: スイッチ + filter: アイテムフィルタ + wire_tunnel: 交差ワイヤ + display: ディスプレイ + reader: ベルトリーダ + virtual_processor: 仮想切断機 + transistor: トランジスタ + analyzer: 形状解析機 + 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 - advanced_processor: Color Inverter - energy_generator: Energy Generator - wire: Energy Wire - about: title: このゲームについて body: >- - このゲームはオープンソースであり、Tobias Springer (私)によって開発されています。

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

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

@@ -846,10 +842,8 @@ about: サウンドトラックはPeppsenにより製作されました。 - 彼は素晴らしいです

最後に、私の最高の友人Niklasに大きな感謝を。 - 彼とのFactorioのゲーム体験がなければ、このゲームは存在しませんでした。 - changelog: title: 更新履歴 - demo: features: restoringGames: セーブデータのリストア @@ -857,5 +851,61 @@ demo: oneGameLimit: セーブデータの1個制限 customizeKeybindings: キー設定のカスタマイズ exportingBase: 工場の全体像の画像出力 - settingNotAvailable: デモ版では利用できません。 +tips: + - ハブは現在指定されている形状だけではなく、あらゆる種類の入力を受け付けることができます。 + - あなたの工場が拡張可能か確認してください - あとで報われるでしょう! + - ハブのすぐ近くに建設しないでください。ぐちゃぐちゃになりますよ。 + - 積層が上手く行かない場合は、入力を入れ替えてみてください。 + - 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 4c9048fb..544d7615 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -1,112 +1,57 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page shortText: shapez.io는 무한한 공간에서 점점 더 복잡한 도형의 생산과 조합을 자동화하는 공장을 짓는 게임입니다. + discordLinkShort: 공식 Discord + intro: >- + Shapez.io는 다양한 기하학적 도형을 만드는 공장을 건설하는 편안한 게임입니다. 레벨이 올라갈수록 더욱 복잡한 도형을 + 만들어야 하고 그만큼 무한히 커지는 지도 안에 당신의 공장을 세워야 합니다. - # 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] + 심지어 그것만으로는 충분하지 않을 겁니다. 수요는 기하급수적으로 늘어나게 될 것이고, 더욱 복잡한 도형을 더욱 많이 생산하여야 하므로, 유일하게 도움이 되는 것은 끊임없이 확장을 하는 것입니다! 처음에는 단순한 도형만을 만들지만, 나중에는 색소를 추출하고 혼합하여 도형에 색칠을 해야 합니다! - shapez.io는 무한한 공간에서 점점 더 복잡한 도형의 생산과 조합을 자동화하는 공장을 짓는 게임입니다. - 요청된 도형을 전달해 게임을 진행하고 업그레이드를 통해 공장을 가속시킬 수 있습니다. - - 도형에 대한 수요가 증가함에 따라, 여러분은 수요에 맞게 공장을 확장해야 합니다. - [b]무한한 공간[/b]으로 확장하여 도형 재료를 구하는 것도 잊지 마세요. - - 곧이어 여러분은 색을 섞고 도형을 색칠 할 것입니다. - 빨강, 초록, 파랑 색을 섞어서 만든 다양한 색으로 수요를 만족시키세요. - - 이 게임에는 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] - - discordLink: 공식 디스코드 - 채팅해요! + 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: >- + 누구나 번역에 기여하실 수 있으며, 저는 커뮤니티에서 적극적으로 참여하여 모든 제안을 검토하고 가능한 모든 피드백도 고려하고자 + 합니다. + 모든 로드맵을 보시려면 저의 trello 보드를 참고해주세요. global: - loading: 로딩중 - error: 에러 - - # How big numbers are rendered, e.g. "10,000" + loading: 불러오는 중 + error: 오류 thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: 무한 - time: - # Used for formatting past time dates oneSecondAgo: 1초 전 xSecondsAgo: 초 전 oneMinuteAgo: 1분 전 @@ -115,14 +60,10 @@ global: xHoursAgo: 시간 전 oneDayAgo: 1일 전 xDaysAgo: 일 전 - - # Short formats for times, e.g. '5h 23m' secondsShort: 초 minutesAndSecondsShort: 초 hoursAndMinutesShort: 시간 분 - xMinutes: 분 - keys: tab: TAB control: CTRL @@ -130,32 +71,25 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places - title: 무료 버전 - intro: >- - 유료 버전을 구매해서 모든 콘텐츠를 사용해 보세요! - + title: 체험판 버전 + intro: 정식 버전을 구매해서 모든 콘텐츠를 사용해 보세요! mainMenu: play: 시작 changelog: 버전 기록 - importSavegame: 불러오기 + importSavegame: 가져오기 openSourceHint: 이 게임은 오픈 소스입니다! discordLink: 공식 디스코드 서버 helpTranslate: 번역을 도와주세요! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - 이 게임은 당신의 브라우저에서 느리게 작동하는 것으로 알려져 있습니다. 더 좋은 성능을 위해 유료 버전을 구매하거나 크롬을 다운받으세요. + browserWarning: 이 게임은 현재 브라우저에서 느리게 작동하는 것으로 알려져 있습니다! 더 좋은 성능을 위해 정식 버전을 구매하거나 + Google Chrome 브라우저를 다운로드하세요. savegameLevel: 레벨 - savegameLevelUnknown: 레벨 모름 - + savegameLevelUnknown: 미확인 레벨 continue: 계속하기 - newGame: 새 게임 + newGame: 새로하기 madeBy: 제작 - subreddit: 레딧 - + subreddit: Reddit + savegameUnnamed: 이름 없음 dialogs: buttons: ok: 확인 @@ -169,258 +103,228 @@ dialogs: viewUpdate: 업데이트 보기 showUpgrades: 업그레이드 보기 showKeybindings: 조작법 보기 - importSavegameError: - title: 불러오기 오류 - text: >- - 저장 파일을 불러오지 못했습니다: - + title: 가져오기 오류 + 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: 신호 설정 + descItems: "미리 정의된 아이템을 선택합니다:" + descShortKey: ... 또는 도형 단축키를 사용합니다 (여기에서 만드실 수 있습니다). + renameSavegame: + title: 세이브 파일 이름 설정 + desc: 여기에서 세이브 파일의 이름을 바꿀 수 있습니다. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation 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: 레이어 전환 - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. - cycleBuildingVariants: 를 눌러 변형된 버전 선택 - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + cycleBuildingVariants: 키를 눌러 변형 전환 + hotkeyLabel: "단축키: " infoTexts: speed: 속도 range: 최대 거리 - storage: 저장공간 + storage: 용량 oneItemPerSecond: 초당 1개 itemsPerSecond: 초당 개 itemsPerSecondDouble: (x2) - tiles: 타일 - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. - levelTitle: 레벨 + levelTitle: 레벨 completed: 완료 unlockText: 잠금 해제! buttonNextLevel: 다음 레벨 - - # Notifications on the lower right notifications: - newUpgrade: 새로운 업그레이드를 할 수 있습니다! + newUpgrade: 새로운 업그레이드가 있습니다! gameSaved: 게임이 저장되었습니다. - - # The "Upgrades" window + freeplayLevelComplete: 레벨 성공! shop: title: 업그레이드 - buttonUnlock: 업그레이드하기 - - # Gets replaced to e.g. "Tier IX" - tier: 티어 - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - - maximumLevel: 최대 레벨 (속도 x) - - # The "Statistics" window + buttonUnlock: 업그레이드 + tier: 티어 + maximumLevel: 최종 레벨 (속도 x) statistics: title: 통계 dataSources: stored: title: 저장된 도형 - description: 당신의 중앙 건물에 저장되어 있는 도형들의 수 + description: 허브에 저장되어 있는 도형의 개수 produced: title: 제작된 도형 - description: 당신의 공장에서 만들어지고 있는 모든 도형의 개수 + description: 공장에서 만들어지고 있는 모든 도형의 개수 delivered: - title: 도착한 도형 - description: 당신의 중앙 건물에 도착하고 있는 도형의 개수 + title: 운송된 도형 + description: 허브에 도착하고 있는 도형의 개수 noShapesProduced: 지금까지 제작된 도형이 없습니다. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: 분당 개 - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: 초당 + minute: 분당 + hour: 시간당 settingsMenu: playtime: 플레이 시간 - - buildingsPlaced: 배치한 건물 - beltsPlaced: 배치한 컨베이어 벨트 - - buttons: - continue: 계속하기 - settings: 설정 - menu: 메뉴로 돌아가기 - - # Bottom left tutorial hints + buildingsPlaced: 건물 수 + beltsPlaced: 벨트 수 tutorialHints: title: 도움이 필요하세요? showHint: 힌트 보기 hideHint: 닫기 - - # When placing a blueprint blueprintPlacer: cost: 가격 - - # Map markers waypoints: waypoints: 마커 - hub: 중앙 건물 - description: 마커를 좌클릭해서 그곳으로 가고, 우클릭해서 삭제합니다.

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

마커를 배치하기 위해 + 키로 지금 있는 위치에 혹은 우클릭하여 원하는 위치에 배치할 수 + 있습니다. creationSuccessNotification: 마커가 성공적으로 생성되었습니다. - - # Interactive tutorial 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: 키 복사하기 - -# All shop upgrades + connectedMiners: + one_miner: 추출기 1 개 + n_miners: 추출기 개 + limited_items: 개로 제한됨 + watermark: + title: 체험판 버전 + desc: 정식 버전의 장점을 보려면 여기를 클릭하세요! + get_on_steam: Steam으로 가기 + standaloneAdvantages: + title: 정식 버전을 구매하세요! + no_thanks: 괜찮아요! + points: + levels: + title: 새로운 12 레벨 + desc: 최대 26 레벨로 확장됩니다! + buildings: + title: 새로운 18개의 건축물 + desc: 완벽한 자동화된 공장을 위한 건물들입니다! + savegames: + title: 무한한 세이브 파일 + desc: 당신이 내키는대로 마음껏 할 수 있습니다! + upgrades: + title: 20 티어까지 확장된 업그레이드 + desc: 체험판에서는 5 티어까지만 사용할 수 있습니다! + markers: + title: 무한한 마커 배치 + desc: 넓은 공장에서 길을 잃지 마세요! + wires: + title: 전선 + desc: 완전히 새로운 차원의 도입! + darkmode: + title: 다크 모드 + desc: 당신의 눈을 피곤하게 만들지 마세요! + support: + title: 저를 지원해주세요 + desc: 저는 여가 시간에 게임을 개발합니다! shopUpgrades: belt: - name: 컨베이어 벨트, 배분기, 터널 + name: 벨트, 밸런서, 터널 description: 속도 x → x miner: name: 추출기 @@ -429,440 +333,602 @@ shopUpgrades: name: 절단기, 회전기, 결합기 description: 속도 x → x painting: - name: 색 혼합기, 도형 색칠기 + name: 혼합기, 색칠기 description: 속도 x → x - -# Buildings and their name / description buildings: hub: deliver: 목표 toUnlock: 보상 levelShortcut: 레벨 - + endOfDemo: 체험판 끝 belt: default: - name: &belt 컨베이어 벨트 - description: 도형을 운반. 클릭 및 드래그해서 여러 개 배치. - - miner: # Internal name for the Extractor + name: 컨베이어 벨트 + description: 아이템을 운송합니다. 클릭 드래그하여 긴 줄을 한번에 배치할 수 있습니다. + miner: default: - name: &miner 추출기 - description: 도형 또는 색소 위에 놓아서 추출하기 - + name: 추출기 + description: 도형이나 색소 위에 배치하여 추출합니다. chainable: - name: 체인 추출기 - description: 도형 또는 색소 위에 놓아서 추출하기. 여러 개를 연결할 수 있음. - - underground_belt: # Internal name for the Tunnel + name: 연쇄 추출기 + description: 도형이나 색소 위에 배치하여 추출합니다. 서로 연결될 수 있습니다. + underground_belt: default: - name: &underground_belt 터널 - description: 도형을 건물과 벨트 밑으로 통과시킴. - + name: 터널 + description: 건물과 벨트 아래로 공간을 만들어 아이템을 통과시킵니다. tier2: name: 터널 티어 II - description: 도형을 건물과 벨트 밑으로 터널 보다 빨리 통과시킴. - - splitter: # Internal name for the Balancer - default: - name: &splitter 배분기 - description: 입력되는 도형을 출력에 평등하게 배분. - - compact: - name: 컴팩트 연결기 - description: 컨베이어 벨트 2개를 1개로 연결한다. - - compact-inverse: - name: 컴팩트 연결기 - description: 컨베이어 벨트 2개를 1개로 연결한다. - + description: 건물과 벨트 아래로 공간을 만들어 아이템을 통과시킵니다. cutter: default: - name: &cutter 절단기 - description: 도형을 위에서 아래로 2개로 나눈다. 만약, 출력한 2개중 1개만 사용하면 기계가 멈추니 사용하지 않는 나머지 한 개는 버릴 것 + name: 절단기 + description: 도형을 수직으로 잘라 두 가지 도형으로 나눕니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 + 절단기가 막혀 멈추게 됩니다! quad: - name: 절단기 (4단) - description: 도형을 4개로 나눈다. 만약, 한 개만 사용하면 기계가 멈추니 나머지는 버릴 것 - + name: 4단 절단기 + description: 도형을 즉시 네 개로 자릅니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 절단기가 막혀 + 멈추게 됩니다! rotater: default: - name: &rotater 회전기 - description: 도형을 시계방향으로 90도 회전시킨다. + name: 회전기 + description: 도형을 시계 방향으로 90도 회전시킵니다. ccw: - name: 회전기 (반시계방향) - description: 도형을 반시계방향으로 90도 회전시킨다. - fl: - name: Rotate (180) - description: Rotates shapes by 180 degrees. - + name: 반시계 방향 회전기 + description: 도형을 반시계 방향으로 90도 회전시킵니다. + rotate180: + name: 180도 회전기 + description: 도형을 180도 회전시킵니다. stacker: default: - name: &stacker 결합기 - description: 도형 2개를 쌓는다. 합칠 수가 없다면 오른쪽 도형이 왼쪽 도형 위에 놓아진다. - + name: 결합기 + description: 도형을 서로 결합하고 쌓습니다. 서로 결합할 수 있다면 두 도형을 붙여 하나로 만들고, 그렇지 않으면 오른쪽 도형이 왼쪽 + 도형 위에 쌓이게 됩니다. mixer: default: - name: &mixer 색 혼합기 - description: 두가지 색을 섞어서 다른 색을 만든다. - + name: 색소 혼합기 + description: 두 가지의 색소를 혼합해 다른 혼합 색소를 만듭니다. painter: default: - name: &painter 도형 색칠기 - description: &painter_desc 도형을 색소로 색칠한다. + name: 색칠기 + description: 색소를 이용해 도형을 색칠합니다. 위쪽에서 받는 색소로 왼쪽에서 받는 도형 전체를 색칠합니다. double: - name: 2단 도형 색칠기 - description: 왼쪽에 입력되는 도형을 위에서 입력되는 색소로 색칠한다. + name: 2단 색칠기 + description: 색소를 이용해 도형을 색칠합니다. 위쪽에서 받는 색소로 왼쪽에서 받는 도형 전체를 색칠합니다. quad: - name: 4단 도형 색칠기 - description: 도형의 4가지 분단을 각각 다른 색으로 색칠할 수 있다. + name: 4단 색칠기 + description: 도형의 각 사분면에 개별적으로 색상을 칠할 수 있습니다. 전선 레이어를 통해 참 신호가 + 있는 슬롯만 칠해집니다! mirrored: - name: *painter - description: *painter_desc - + name: 색칠기 + description: 색소를 이용해 도형을 색칠합니다. 아래쪽에서 받는 색소로 왼쪽에서 받는 도형 전체를 색칠합니다. trash: default: - name: &trash 휴지통 - description: 양쪽에서 오는 모든 입력물을 버린다. - - storage: - name: 저장소 - description: 할당된 용량만큼 초과되는 도형을 저장한다. + name: 휴지통 + description: 어느 곳에서든 들어오는 아이템을 영원히 파괴합니다. wire: default: name: 전선 - description: 에너지를 전송한다. - advanced_processor: + description: 아이템, 색상, 또는 불 값 (0 혹은 1)이 될 수 있는 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. + second: + name: 전선 + description: 아이템, 색상, 또는 불 값 (0 혹은 1)이 될 수 있는 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. + balancer: default: - name: 색 반전기 - description: 색소나 도형을 받아 색을 반전시킨다. - energy_generator: - deliver: 연료 - toGenerateEnergy: 마다 - default: - name: 발전기 - description: 도형을 소비해 에너지를 만듭니다. - wire_crossings: - default: - name: 전선 분배기 - description: 에너지 와이어를 두 개로 분할합니다. + name: 밸런서 + description: 들어오는 아이템을 균등하게 분배합니다. merger: - name: 전선 병합기 - description: 두 개의 에너지 와이어를 하나로 병합합니다. - + name: 압축형 병합기 + description: 컨베이어 벨트 두 줄을 한 줄로 합칩니다. + merger-inverse: + name: 압축형 병합기 + description: 컨베이어 벨트 두 줄을 한 줄로 합칩니다. + splitter: + name: 압축형 분배기 + description: 컨베이어 벨트 한 줄을 두 줄로 나눕니다. + splitter-inverse: + name: 압축형 분배기 + description: 컨베이어 벨트 한 줄을 두 줄로 나눕니다. + storage: + default: + name: 저장고 + description: 아이템을 지정된 용량까지 저장합니다. 왼쪽 출력이 가장 우선되므로 오버플로 회로로 사용할 수 있습니다. + wire_tunnel: + default: + name: 전선 교차 장치 + description: 두 전선이 서로 연결되지 않고 교차할 수 있도록 합니다. + constant_signal: + default: + name: 일정 신호 + description: 모양, 색상, 또는 불 값 (1 혹은 0)이 될 수 있는 상수 신호를 방출합니다. + lever: + default: + name: 스위치 + description: 전선 레이어에서 불 값 (1 또는 0)를 방출하도록 전환할 수 있으며, 그 후 아이템 선별같은 구성 요소를 제어하는 데 + 사용될 수 있습니다. + logic_gate: + default: + name: AND 회로 + description: 두 입력이 모두 참일 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). + not: + name: NOT 회로 + description: 입력이 거짓일 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). + xor: + name: XOR 회로 + description: 입력 중 하나만 참이고 둘 다 같지 않을 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 + 의미합니다). + or: + name: OR 회로 + description: 입력 중 하나 이상이 참일 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). + transistor: + default: + name: 트랜지스터 + description: 양 옆의 입력이 참일 경우 아래쪽 입력을 전달합니다 (모양, 색상, 또는 값 "1"일 경우). + mirrored: + name: 트랜지스터 + description: 양 옆의 입력이 참일 경우 아래쪽 입력을 전달합니다 (모양, 색상, 또는 값 "1"일 경우) + filter: + default: + name: 선별기 + description: 신호를 연결하여 일치하는 모든 아이템은 위로, 나머지 아이템은 오른쪽으로 내보냅니다. 불 값으로도 제어할 수 있습니다. + display: + default: + name: 디스플레이 + description: 신호를 연결하여 디스플레이에 도형이나 색상 또는 불 값을 표시합니다. + reader: + default: + name: 벨트 판독기 + description: 벨트의 평균 처리량을 측정합니다. (잠금 해제된) 전선 레이어에서 마지막으로 읽은 아이템을 출력합니다. + analyzer: + default: + name: 도형 분석기 + description: 도형의 가장 낮은 레이어의 오른쪽 상단 사분면을 분석하고 모양과 색상을 반환합니다. + comparator: + default: + name: 비교기 + description: 두 신호가 정확히 동일할 경우 불 값 "1"을 반환합니다. 도형, 색상, 불 값을 비교할 수 있습니다. + virtual_processor: + default: + name: 가상 절단기 + description: 가상으로 도형을 잘라 반으로 나눕니다. + rotater: + name: 가상 회전기 + description: 가상으로 도형을 시계 방향이나 반시계 방향으로 회전합니다. + unstacker: + name: 가상 결합해제기 + description: 가상으로 최상단에 있는 레이어를 오른쪽으로 출력하고, 나머지는 왼쪽으로 출력합니다. + stacker: + name: 가상 결합기 + description: 가상으로 오른쪽 도형을 왼쪽 도형에 쌓습니다. + painter: + name: 가상 색칠기 + description: 가상으로 하단 입력의 모양을 오른쪽 입력의 색상으로 칠합니다. + item_producer: + default: + name: 아이템 생성기 + description: 샌드박스 모드에서만 사용할 수 있는 아이템으로, 일반 레이어 위에 있는 전선 레이어에서 주어진 신호를 출력합니다. storyRewards: - # Those are the rewards gained from completing the store 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: 새로운 종류의 터널이 잠금 해제되었습니다! 새 터널은 보다 넓은 범위를 가졌으며, 터널들은 같은 종류끼리만 연결됩니다. - - reward_splitter_compact: - title: 컴팩트 연결기 - desc: >- - 컴팩트 연결기가 잠금 해제되었습니다! 벨트 2개를 1개로 만듭니다. - + desc: 터널의 새로운 형태가 잠금 해제되었습니다! 터널 티어 II는 더욱 긴 + 거리를 운송할 수 있고 기존 터널과 겹쳐지지 않고도 자원을 보낼 수 있습니다! reward_cutter_quad: - title: 절단기 (4단) - desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 새 절단기는 도형을 2조각이 아니라 4조각으로 자릅니다. - + title: 4단 절단기 + desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 4단 절단기는 도형을 두 조각이 아닌 네 + 조각으로 자를 수 있습니다! reward_painter_double: - title: 색칠기 (2단) - desc: 새로운 종류의 색칠기가 잠금 해제되었습니다! 새 색칠기는 색소 하나로 2개의 도형을 색칠할 수 있습니다. - - reward_painter_quad: - title: 색칠기 (4단) - desc: 4단 도형 색칠기가 잠금 해제되었습니다! 도형의 4분단을 각각 다른 색으로 색칠할 수 있습니다! - + title: 2단 색칠기 + desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 일반적인 색칠기와 거의 동일하지만, 하나의 색소를 사용하여 + 동시에 두 개의 도형을 색칠할 수 있습니다! reward_storage: - title: 저장소 - desc: 저장소가 잠금 해제되었습니다! 주어진 용량만큼 자원을 저장할 수 있습니다! - + title: 저장고 + desc: 저장고가 잠금 해제되었습니다! 저장고는 최대 용량까지 도형을 저장할 수 있습니다!

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

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

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

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

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

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

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

추신: + 기존 공장을 파괴하지는 마세요. 후에 업그레이드 잠금 해제되면 + 기존의 모든 도형이 필요합니다!" no_reward_freeplay: title: 다음 레벨 - desc: >- - 축하드립니다! 유료 버전을 위한 더 많은 컨텐츠를 만들고 있습니다. - + desc: 축하드립니다! + reward_balancer: + title: 밸런서 + desc: 밸런서가 잠금 해제되었습니다! 다목적 밸런서를 통해 여러 벨트의 아이템을 서로 다른 + 벨트로 분할하거나 합침으로써 더욱 거대한 공장을 만들 수 있습니다! + reward_merger: + title: 압축형 병합기 + desc: 밸런서의 새로운 형태인 병합기가 잠금 해제되었습니다! 이제 벨트 두 줄을 + 즉시 한 줄로 병합합니다! + reward_belt_reader: + title: 벨트 판독기 + desc: 벨트 판독기가 잠금 해제되었습니다! 이제 벨트의 처리량을 확인할 수 있습니다.

그리고, + 전선이 잠금 해제될 때 까지 기다리신다면 정말 유용하게 사용할 수 있을 겁니다! + reward_rotater_180: + title: 180도 회전기 + desc: 180도 회전기가 잠금 해제되었습니다! 이제 도형을 바로 180도로 회전시킬 수 있습니다. (짜잔! + :D) + reward_display: + title: 디스플레이 + desc: "디스플레이가 잠금 해제되었습니다! 이제 신호를 전선 레이어에 연결해 시각화할 수 + 있습니다.

추신: 벨트 판독기와 저장고가 마지막으로 읽은 아이템을 출력했나요? 디스플레이로 한번 봐보세요!" + reward_constant_signal: + title: 일정 신호 + desc: 전선 레이어에서 구축할 수 있는 일정 신호가 잠금 해제되었습니다! 간단한 예시로, 아이템 + 선별에 연결하여 사용하는 데 유용합니다.

일정 신호는 도형, + 색상, 혹은 불 값 (1 혹은 0)을 출력할 수 있습니다. + reward_logic_gates: + title: 논리 회로 + desc: 논리 회로가 잠금 해제되었습니다! 굳이 흥분할 필요는 없지만, 진짜 멋진 기술입니다!

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

보너스로, + 트랜지스터도 지급되었습니다! + reward_virtual_processing: + title: 가상 처리 + desc: 도형의 처리를 시뮬레이션할 수 있는 다양한 새로운 건물이 잠금 해제되었습니다!

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

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

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

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

어떤 방식으로든, 재미있게 게임을 플레이해주시길 바랍니다! + reward_wires_painter_and_levers: + title: 전선과 4단 색칠기 + desc: "전선 레이어가 잠금 해제되었습니다! 전선 레이어는 + 일반 레이어 위에 존재하는 별도의 레이어로, 이를 통한 다양하고 새로운 + 메커니즘을 소개하겠습니다!

우선 4단 색칠기가 + 잠금 해제되었습니다. 전선 레이어에서 색칠하고 싶은 슬롯에 전선을 연결하세요! + 전선 레이어로 전환하려면 E 키를 누르세요." + reward_filter: + title: 아이템 선별기 + desc: 아이템 선별기가 잠금 해제되었습니다! 전선 레이어의 신호와 일치하는지에 대한 여부로 아이템을 위쪽 + 출력이나 오른쪽 출력으로 보냅니다.

불 값 (1 또는 0)을 전달하여 완전히 활성화과 비활성화를 전환할 수 + 있습니다. + reward_demo_end: + title: 체험판 끝 + desc: 체험판 콘텐츠가 모두 끝이 났습니다! settings: title: 설정 categories: general: 일반 - userInterface: 유저 인터페이스 + userInterface: 사용자 인터페이스 advanced: 고급 - + performance: 성능 versionBadges: dev: 개발 staging: 검증 prod: 배포 - buildDate: 날짜 - + buildDate: 제작 labels: uiScale: title: UI 크기 - description: >- - UI의 크기를 변경시키기: + description: 사용자 인터페이스의 크기를 변경합니다. 인터페이스는 당신의 해상도에 따라 확장되는데 이 설정은 그 확장의 정도를 + 제어합니다. scales: super_small: 매우 작게 small: 작게 regular: 보통 large: 크게 huge: 매우 크게 - scrollWheelSensitivity: - title: 확대 민감도 - description: >- - 마우스 휠이나 트랙패드로 확대하는 데의 민감도 + title: 화면 줌 감도 + description: (마우스 휠이나 트랙 패드를 통한) 화면 줌 인/아웃 감도를 설정합니다. sensitivity: super_slow: 매우 느리게 slow: 느리게 regular: 보통 fast: 빠르게 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: >- - 모든 효과음을 끕니다. - + description: 모든 효과음을 끕니다. musicMuted: title: 음악 끄기 - description: >- - 모든 배경 음악을 끕니다. - + 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: >- - 화면의 모서리를 어둡게 만들어 텍스트를 읽기 쉽게 해주는 비네트 효과를 활성화 시킵니다. - + description: 화면의 모서리를 어둡게 만들어 텍스트를 읽기 쉽게 해주는 비네트 효과를 활성화 시킵니다. autosaveInterval: - title: 자동저장 주기 - description: >- - 자동저장을 얼마나 자주 할 것인지 정합니다. 자동저장 기능을 끌 수도 있습니다. + title: 자동 저장 주기 + description: 자동저장을 얼마나 자주 할 것인지 정합니다. 자동저장 기능을 끌 수도 있습니다. intervals: one_minute: 1분 two_minutes: 2분 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: 효과음 볼륨 + description: 효과음의 볼륨을 조절합니다. + musicVolume: + title: 음악 볼륨 + description: 음악 볼륨을 조절합니다. + lowQualityMapResources: + title: 저품질 지도 자원 + description: 성능 향상을 위해 지도 확대 시 자원의 렌더링을 단순화합니다. 더욱 깨끗해 보이는 편이니 꼭 해보세요! + disableTileGrid: + title: 그리드 비활성화 + description: 성능 향상을 위해 타일 그리드를 비활성화할 수 있습니다. 이 역시 게임을 더욱 깨끗하게 보여줍니다! + clearCursorOnDeleteWhilePlacing: + title: 우클릭 시 커서 지우기 + description: 기본적으로 활성화되어 있으며, 배치할 건물을 선택한 상태에서 마우스 우클릭 시 커서를 지웁니다. 비활성화할 경우, 건물을 + 커서에 선택한 채로 우클릭하면 바로 건물을 삭제할 수 있습니다. + lowQualityTextures: + title: 저품질 텍스처 (못생김) + description: 성능 향상을 위해 낮은 품질의 텍스처를 사용합니다. 이것은 게임을 아주 못생기게 만들 겁니다! + displayChunkBorders: + title: 청크 경계 표시 + description: 게임의 청크는 16x16의 타일로 나누어지며, 이 설정을 활성화하면 각 청크의 테두리가 표시됩니다. + pickMinerOnPatch: + title: 자원 패치에서 추출기 즉시 선택 + description: 기본적으로 활성화되어 있으며, 자원 패치에서 피펫 기능을 사용 시 즉시 추출기를 선택합니다. + simplifiedBelts: + title: 벨트 단순화 (못생김) + description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 할 + 정도로 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다. + enableMousePan: + title: 화면 가장자리 패닝 + description: 커서를 화면 가장자리로 옮기면 스크롤되어 지도를 이동할 수 있습니다. 스크롤 속도는 이동 속도 설정에 따릅니다. + zoomToCursor: + title: 커서를 기준으로 줌 + description: 활성화할 경우 화면 줌 인 아웃이 마우스 커서가 있는 지점을 기준이 되며, + 아닐 경우 화면 중앙이 기준이 됩니다. + mapResourcesScale: + 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 와 디버그 보기/숨기기 - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + toggleHud: HUD 토글 + toggleFPSInfo: FPS와 디버그 정보 토글 + belt: 컨베이어 벨트 + underground_belt: 터널 + miner: 추출기 + cutter: 절단기 + rotater: 회전기 + stacker: 결합기 + mixer: 혼합기 + painter: 색칠기 + trash: 휴지통 rotateWhilePlacing: 회전 - rotateInverseModifier: >- - Modifier: 대신 반시계방향으로 회전 - cycleBuildingVariants: 변형종 사용 - confirmMassDelete: 대량 삭제 확인 - pasteLastBlueprint: 최근 청사진 붙여넣기 - cycleBuildings: 건물 사이클 - + rotateInverseModifier: "변경: 대신 반시계 방향" + cycleBuildingVariants: 형태 전환 + confirmMassDelete: 대량 삭제 + pasteLastBlueprint: 마지막 청사진 붙여넣기 + cycleBuildings: 건물 전환 massSelectStart: 누르고 드래그해서 시작 massSelectSelectMultiple: 여러 곳 선택 massSelectCopy: 영역 복사 massSelectCut: 영역 자르기 - placementDisableAutoOrientation: 자동 회전 끄기 placeMultiple: 배치 모드 유지 placeInverse: 반대 방향으로 벨트 배치 exportScreenshot: 공장 전체를 이미지로 내보내기 mapMoveFaster: 더 빠르게 움직이기 - lockBeltDirection: 벨트 플래너 활성화 - switchDirectionLockSide: "플래너: 방향 바꾸기" - pipette: 스포이드 + lockBeltDirection: 벨트 계획기 활성화 + switchDirectionLockSide: "계획기: 방향 바꾸기" + pipette: 피펫 menuClose: 메뉴 닫기 switchLayers: 레이어 전환 - advanced_processor: 색 반전기 - energy_generator: 발전기 wire: 전선 - + balancer: 밸런서 + storage: 저장고 + constant_signal: 일정 신호 + logic_gate: 논리 회로 + lever: 레버 + filter: 선별기 + wire_tunnel: 전선 교차 장치 + display: 디스플레이 + reader: 벨트 판독기 + virtual_processor: 가상 절단기 + transistor: 트랜지스터 + analyzer: 도형 분석기 + comparator: 비교기 + item_producer: 아이템 생성기 (샌드박스) + copyWireValue: "전선: 커서 아래 값 복사" about: - title: 이 게임의 정보 + title: 게임 정보 body: >- - 이 게임은 오픈소스이고, Tobias Springer가 개발했습니다.

+ 이 게임은 오픈소스이고, Tobias + Springer가 개발했습니다.

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

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

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

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

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

- - 마지막으로, 나의 절친 Niklas에게 - 크나큰 감사를 표합니다 - 우리가 함께 해낸 Factorio가 아니었다면, 이 게임은 존재하지 않았을 겁니다! + 사운드 트랙 제작자는 Peppsen입니다. - 킹갓제너럴 Peppsen!

+ 마지막으로, 나의 절친 Niklas에게 크나큰 감사를 표합니다 - 우리가 함께 해낸 Factorio가 아니었다면, 이 게임은 존재하지 않았을 겁니다! changelog: - title: 업데이트 기록 - + title: 업데이트 목록 demo: features: - restoringGames: 게임 자장 파일 리스토어 하기 - importingGames: 게임 저장 파일 불러오기 - oneGameLimit: 게임 저장 파일 최대 1개 - customizeKeybindings: 키 설정하기 + restoringGames: 게임 세이브 파일 복원 하기 + importingGames: 게임 세이브 파일 가져오기 + oneGameLimit: 게임 세이브 파일 최대 1개 + customizeKeybindings: 조작법 설정하기 exportingBase: 공장 전체를 이미지로 내보내기 - settingNotAvailable: 체험판 버전에서 사용 불가 +tips: + - 허브는 단지 필요로 하는 도형은 물론, 모든 형태의 도형 입력을 허용합니다! + - 공장을 짓기 전에 확장 가능성을 고려하세요. 분명 좋은 대가를 받게 될겁니다! + - 공장을 허브에 너무 가까이 짓지 마세요. 그렇지 않으면 크나큰 혼란을 겪을 수 있습니다! + - 결합기가 작동되지 않는다면, 두 도형의 입력을 서로 바꿔보세요. + - 벨트 계획 중 R 키를 눌러 방향을 전환할 수 있습니다. + - CTRL 키를 누른 채 벨트를 배치하면 자동으로 벨트가 연결되지 않게 됩니다. + - 모든 업그레이드의 티어가 동일하다면 모든 공장의 처리 비율도 동일합니다. + - 높은 효율에는 병렬보다 직렬입니다. + - 나중에 더 많은 변형 건물을 잠금 해제할 수 있습니다! + - T 키를 눌러 건물의 다른 형태로 전환할 수 있습니다. + - 대칭이 핵심입니다! + - 서로 다른 티어의 터널은 같은 줄에서 서로 겹쳐지지 않습니다. + - 공장은 가능한 작게, 오밀조밀하게 지으세요. 분명 좋은 대가를 받게 될겁니다! + - 색칠기에는 T키로 선택할 수 있는 반전 형태가 있습니다. + - 각 건물 간의 처리 비율이 동일하다면 그 효율은 극대화됩니다. + - 최대 레벨에서, 한 줄의 벨트를 채우기 위해 다섯 개의 추출기가 필요합니다. + - 터널을 잊지 마세요! + - 완벽한 효율성을 위해 굳이 아이템을 균등하게 배분할 필요는 없습니다. + - SHIFT키를 누르면 벨트 계획기가 활성화되어 + 긴 길이의 벨트 한 줄을 쉽게 배치할 수 있습니다. + - 절단기는 들어오는 도형과 배치된 절단기의 방향에 관계 없이, 언제나 수직으로 자릅니다. + - 흰색은 세 가지의 색소를 혼합해야 합니다. + - 저장고의 양쪽 출력 중 왼쪽 출력이 가장 우선됩니다. + - 가능한 반복적으로 배치할 수 있는 일종의 연쇄 구조를 만들도록 하세요! 그만한 가치가 충분합니다! + - CTRL키를 누른 상태로 건물을 배치하여 여러 건물을 빠르게 배치할 수 있습니다. + - ALT키를 누른 상태로 벨트를 배치하면 벨트의 방향이 반전됩니다. + - 효율성이 핵심입니다! + - 허브에서 멀리 떨어질수록, 도형 패치의 형태가 더욱 복잡해집니다. + - 기계는 속도가 한정되어 있습니다. 최대 효율을 위해 자원을 분할하세요. + - 밸런서를 통해 효율성을 극대화시키세요. + - 구성이 중요합니다. 컨베이어 벨트가 서로 너무 교차되지 않도록 하세요. + - 미래를 계획하세요. 그렇지 않으면 크나큰 혼란을 겪을 수 있습니다! + - 굳이 오래된 공장을 철거하지는 마세요! 업그레이드를 하려면 이전의 도형도 필요합니다! + - 도움을 받기 전에, 혼자서 직접 레벨 20까지 클리어를 시도해보세요! + - 복잡하게 대신 단순하게, 그러면 멀리 나아갈 수 있을 겁니다. + - 나중에 지었던 공장을 재사용해야 할 때가 있을 겁니다. 언제나 공장을 재사용할 수 있도록 계획하세요. + - 간혹 굳이 절단하고 결합하지 않고도, 지도 곳곳에서 필요한 형태의 도형을 찾을 수도 있습니다. + - 온전한 모양의 풍차 모양 도형은 절대 자연적으로 생성되지 않습니다. + - 색소를 최대한 덜 사용하기 위해, 절단하기 전에 먼저 색칠기로 색칠하세요. + - 극한의 확장성을 가진 모듈 공장을 사용한다면 이 넓은 땅은 인간의 관심사에 있는 공간에 불과합니다. + - 별도의 청사진 공장을 만드세요. 언제나 확장성이 중요합니다. + - 혼합기를 잘 살펴보면, 그 질문에 대한 답을 얻을 수 있습니다. + - CTRL + 클릭을 사용하여 영역을 선택합니다. + - 공장을 허브에 가까이 지으면 나중에 거대한 프로젝트에 방해가 될 수 있습니다. + - 업그레이드 목록에 나타나는 도형 옆의 핀 아이콘을 누르면 화면에 고정됩니다. + - 세 가지의 기본 색상을 모두 섞어서 흰색을 만드세요! + - 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 맘껏 확장하세요! + - Factorio도 플레이 해보세요! 제가 가장 좋아하는 게임입니다. + - 4단 절단기는 오른쪽 상단부터 시계 방향으로 차례로 절단합니다. + - 메인 메뉴에서 세이브 파일을 다운로드 할 수 있습니다. + - 이 게임에는 유용한 조작법이 많습니다! 설정 페이지에서 확인해보세요. + - 이 게임에는 다양한 설정이 있습니다. 꼭 확인해 보세요! + - 허브의 마커에는 방향을 나타내는 작은 나침반이 있습니다! + - 벨트를 제거하고 싶다면 해당 영역을 잘라낸 다음, 같은 위치에 붙여 넣으세요. + - F4 키를 누르면 FPS와 틱 비율을 표시합니다. + - F4 키를 두번 누르면 마우스와 카메라의 타일을 표시합니다. + - 왼쪽에 고정된 도형을 클릭하여 고정을 해제할 수 있습니다. diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml index 79a450bf..d72e40a3 100644 --- a/translations/base-lt.yaml +++ b/translations/base-lt.yaml @@ -1,112 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map. + shortText: shapez.io is a game about building factories to automate the creation + and combination of increasingly complex shapes within an infinite map. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # 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] + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - 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. + 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! - 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]! + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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. + 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. - 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] - - discordLink: Official Discord - Chat with me! - global: loading: Loading error: Error - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: one second ago xSecondsAgo: seconds ago oneMinuteAgo: one minute ago @@ -115,14 +66,10 @@ global: xHoursAgo: hours ago oneDayAgo: one day ago xDaysAgo: days ago - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minutes - keys: tab: TAB control: CTRL @@ -130,13 +77,9 @@ global: escape: ESC shift: SHIFT space: SPACE - 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! - + intro: Get the standalone to unlock all features! mainMenu: play: Play changelog: Changelog @@ -144,19 +87,15 @@ mainMenu: openSourceHint: This game is open source! discordLink: Official Discord Server helpTranslate: Help translate! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Sorry, but the game is known to run slow on your browser! Get the standalone version or download chrome for the full experience. - + browserWarning: Sorry, but the game is known to run slow on your browser! Get + the standalone version or download chrome for the full experience. savegameLevel: Level savegameLevelUnknown: Unknown Level - continue: Continue newGame: New Game madeBy: Made by subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,113 +109,95 @@ dialogs: viewUpdate: View Update showUpgrades: Show Upgrades showKeybindings: Show Keybindings - importSavegameError: title: Import Error - text: >- - Failed to import your savegame: - + text: "Failed to import your savegame:" importSavegameSuccess: title: Savegame Imported - text: >- - Your savegame has been successfully imported. - + text: Your savegame has been successfully imported. gameLoadFailure: title: Game is broken - text: >- - Failed to load your savegame: - + 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: - + text: "Failed to delete the savegame:" restartRequired: title: Restart required - text: >- - You need to restart the game to apply the settings. - + text: You need to restart the game to apply the settings. editKeybinding: title: Change Keybinding desc: Press the key or mouse button you want to assign, or escape to cancel. - resetKeybindingsConfirmation: title: Reset keybindings desc: This will reset all keybindings to their default values. Please confirm. - keybindingsResetOk: title: Keybindings reset desc: The keybindings have been reset to their respective defaults! - featureRestriction: title: Demo Version - desc: You tried to access a feature () which is not available in the demo. Consider to get the standalone for the full experience! - + desc: You tried to access a feature () which is not available in the + demo. Consider to get the standalone for the full experience! oneSavegameLimit: title: Limited savegames - desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone! - + desc: You can only have one savegame at a time in the demo version. Please + remove the existing one or get the standalone! updateSummary: title: New update! - desc: >- - Here are the changes since you last played: - + desc: "Here are the changes since you last played:" upgradesIntroduction: title: Unlock Upgrades - desc: >- - All shapes you produce can be used to unlock upgrades - Don't destroy your old factories! - The upgrades tab can be found on the top right corner of the screen. - + desc: All shapes you produce can be used to unlock upgrades - Don't + destroy your old factories! The upgrades tab can be found + on the top right corner of the screen. massDeleteConfirm: title: Confirm delete - desc: >- - You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this? - + desc: You are deleting a lot of buildings ( to be exact)! Are you sure + you want to do this? blueprintsNotUnlocked: title: Not unlocked yet - desc: >- - Complete level 12 to unlock Blueprints! - + desc: Complete level 12 to unlock Blueprints! keybindingsIntroduction: title: Useful keybindings - desc: >- - This game has a lot of keybindings which make it easier to build big factories. - Here are a few, but be sure to check out the keybindings!

- CTRL + Drag: Select an area.
- SHIFT: Hold to place multiple of one building.
- ALT: Invert orientation of placed belts.
- + desc: "This game has a lot of keybindings which make it easier to build big + factories. Here are a few, but be sure to check out the + keybindings!

CTRL + + Drag: Select an area.
SHIFT: + Hold to place multiple of one building.
ALT: Invert orientation of placed + belts.
" 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) + 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: You can only create two custom markers in the demo. Get the standalone for unlimited markers! + desc: You can only create two custom markers in the demo. Get the standalone for + unlimited markers! massCutConfirm: title: Confirm cut - desc: >- - You are cutting a lot of buildings ( to be exact)! Are you sure you + desc: You are cutting a lot of buildings ( to be exact)! Are you sure you want to do this? - exportScreenshotWarning: title: Export screenshot - desc: >- - You requested to export your base as a screenshot. Please note that this can - be quite slow for a big base and even crash your game! - + desc: You requested to export your base as a screenshot. Please note that this + can be quite slow for a big base and even crash your game! massCutInsufficientConfirm: title: Confirm cut desc: You can not afford to paste this area! Are you sure you want to cut it? - + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Move selectBuildings: Select area @@ -297,18 +218,9 @@ ingame: clearSelection: Clear Selection pipette: Pipette switchLayers: Switch layers - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Press to cycle variants. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Speed range: Range @@ -316,36 +228,21 @@ ingame: oneItemPerSecond: 1 item / second itemsPerSecond: items / s itemsPerSecondDouble: (x2) - tiles: tiles - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Level completed: Completed unlockText: Unlocked ! buttonNextLevel: Next Level - - # Notifications on the lower right notifications: newUpgrade: A new upgrade is available! gameSaved: Your game has been saved. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Upgrades buttonUnlock: Upgrade - - # 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] - maximumLevel: MAXIMUM LEVEL (Speed x) - - # The "Statistics" window statistics: title: Statistics dataSources: @@ -354,55 +251,46 @@ ingame: description: Displaying amount of stored shapes in your central building. produced: title: Produced - description: Displaying all shapes your whole factory produces, including intermediate products. + description: Displaying all shapes your whole factory produces, including + intermediate products. delivered: title: Delivered description: Displaying shapes which are delivered to your central building. noShapesProduced: No shapes have been produced so far. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Playtime - buildingsPlaced: Buildings beltsPlaced: Belts - - buttons: - continue: Continue - settings: Settings - menu: Return to menu - - # Bottom left tutorial hints tutorialHints: title: Need help? showHint: Show hint hideHint: Close - - # When placing a blueprint blueprintPlacer: cost: Cost - - # Map markers waypoints: waypoints: Markers hub: HUB - description: Left-click a marker to jump to it, right-click to delete it.

Press to create a marker from the current view, or right-click to create a marker at the selected location. + description: Left-click a marker to jump to it, right-click to delete + it.

Press to create a marker from the current + view, or right-click to create a marker at the + selected location. creationSuccessNotification: Marker has been created. - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Place an extractor on top of a circle shape to extract it! - 1_2_conveyor: >- - Connect the extractor with a conveyor belt to your hub!

Tip: Click and drag the belt with your mouse! - - 1_3_expand: >- - This is NOT an idle game! Build more extractors and belts to finish the goal quicker.

Tip: Hold SHIFT to place multiple extractors, and use R to rotate them. - + 1_1_extractor: Place an extractor on top of a circle + shape to extract it! + 1_2_conveyor: "Connect the extractor with a conveyor belt to + your hub!

Tip: Click and drag the belt + with your mouse!" + 1_3_expand: "This is NOT an idle game! Build more extractors + and belts to finish the goal quicker.

Tip: Hold + SHIFT to place multiple extractors, and use + R to rotate them." colors: red: Red green: Green @@ -417,8 +305,42 @@ ingame: title: Layers empty: Empty copyKey: Copy Key - -# All shop upgrades + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Belts, Distributor & Tunnels @@ -432,285 +354,423 @@ shopUpgrades: painting: name: Mixing & Painting description: Speed x → x - -# Buildings and their name / description buildings: hub: deliver: Deliver toUnlock: to unlock levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Conveyor Belt + name: Conveyor Belt description: Transports items, hold and drag to place multiple. - - miner: # Internal name for the Extractor + miner: default: - name: &miner Extractor + name: Extractor description: Place over a shape or color to extract it. - chainable: name: Extractor (Chain) description: Place over a shape or color to extract it. Can be chained. - - underground_belt: # Internal name for the Tunnel + underground_belt: default: - name: &underground_belt Tunnel + name: Tunnel description: Allows to tunnel resources under buildings and belts. - tier2: name: Tunnel Tier II description: Allows to tunnel resources under buildings and belts. - - splitter: # Internal name for the Balancer - default: - name: &splitter Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. - - compact: - name: Merger (compact) - description: Merges two conveyor belts into one. - - compact-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. - cutter: default: - name: &cutter Cutter - description: Cuts shapes from top to bottom and outputs both halfs. If you use only one part, be sure to destroy the other part or it will stall! + name: Cutter + description: Cuts shapes from top to bottom and outputs both halfs. If + you use only one part, be sure to destroy the other part or it + will stall! quad: name: Cutter (Quad) - description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other 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 stall! rotater: default: - name: &rotater Rotate + name: Rotate description: Rotates shapes clockwise by 90 degrees. ccw: name: Rotate (CCW) description: Rotates shapes counter clockwise by 90 degrees. - fl: + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Stacker - description: Stacks both items. If they can not be merged, the right item is placed above the left item. - + name: Stacker + description: Stacks both items. If they can not be merged, the right item is + placed above the left item. mixer: default: - name: &mixer Color Mixer + name: Color Mixer description: Mixes two colors using additive blending. - painter: default: - name: &painter Painter - description: &painter_desc Colors the whole shape on the left input with the color from the top input. + name: Painter + description: Colors the whole shape on the left input with the color from the + top input. double: name: Painter (Double) - description: Colors the shapes on the left inputs with the color from the top input. + description: Colors the shapes on the left inputs with the color from the top + input. quad: name: Painter (Quad) - description: Allows to color each quadrant of the shape with a different color. + 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: *painter_desc - + name: Painter + description: Colors the whole shape on the left input with the color from the + top input. trash: default: - name: &trash Trash + name: Trash description: Accepts inputs from all sides and destroys them. Forever. - - storage: - name: Storage - description: Stores excess items, up to a given capacity. Can be used as an overflow gate. wire: default: name: Energy Wire description: Allows you to transport energy. - advanced_processor: + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + balancer: default: - name: Color Inverter - description: Accepts a color or shape and inverts it. - energy_generator: - deliver: Deliver - toGenerateEnergy: For - default: - name: Energy Generator - description: Generates energy by consuming shapes. - wire_crossings: - default: - name: Wire Splitter - description: Splits a energy wire into two. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store reward_cutter_and_trash: title: Cutting Shapes - desc: You just unlocked the cutter - it cuts shapes half from top to bottom regardless of its orientation!

Be sure to get rid of the waste, or otherwise it will stall - For this purpose I gave you a trash, which destroys everything you put into it! - + 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 clockwise by 90 degrees. - + desc: The rotater has been unlocked! It rotates shapes + clockwise by 90 degrees. reward_painter: title: Painting - desc: >- - The painter has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!

PS: If you are colorblind, there is a color blind mode in the settings! - + 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!" reward_mixer: title: Color Mixing - desc: The mixer has been unlocked - Combine two colors using additive blending with this building! - + desc: The mixer has been unlocked - Combine two colors using + additive blending with this building! reward_stacker: title: Combiner - desc: You can now combine shapes with the combiner! Both inputs are combined, and if they can be put next to each other, they will be fused. If not, the right input is stacked on top of the left input! - + desc: You can now combine shapes with the combiner! Both inputs + are combined, and if they can be put next to each other, they will + be fused. If not, the right input is + stacked on top of the left input! 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 through belts and buildings with it! - + desc: The tunnel has been unlocked - You can now tunnel items + through belts and buildings with it! reward_rotater_ccw: title: CCW Rotating - desc: You have unlocked a variant of the rotater - It allows to rotate counter clockwise! To build it, select the rotater and press 'T' to cycle its variants! - + desc: You have unlocked a variant of the rotater - It allows to + rotate counter clockwise! To build it, select the rotater and + press 'T' to cycle its variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can forward its resources to other extractors so you can more efficiently extract resources! - + 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: You have unlocked a new variant of the tunnel - It has a bigger range, and you can also mix-n-match those tunnels now! - - reward_splitter_compact: - title: Compact Balancer - desc: >- - You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one! - + 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! reward_cutter_quad: title: Quad Cutting - desc: You have unlocked a variant of the cutter - It allows you to cut shapes in four parts instead of just two! - + 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: Double Painting - desc: You have unlocked a variant of the painter - It works as the regular painter but processes two shapes at once consuming just one color instead of two! - - reward_painter_quad: - title: Quad Painting - desc: You have unlocked a variant of the painter - It allows to paint each part of the shape individually! - + desc: You have unlocked a variant of the painter - It works as + the regular painter but processes two shapes at + 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!) - + 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: Blueprints - desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). - - # Special reward, which is shown when there is no reward actually + 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: Next level - desc: >- - This level gave you no reward, but the next one will!

PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades! - + desc: "This level gave you no reward, but the next one will!

PS: Better + don't destroy your existing factory - You need all + those shapes later again to unlock upgrades!" no_reward_freeplay: title: Next level - desc: >- - Congratulations! By the way, more content is planned for the standalone! - + desc: Congratulations! By the way, more content is planned for the 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Settings categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Development staging: Staging prod: Production buildDate: Built - labels: uiScale: title: Interface scale - description: >- - Changes the size of the user interface. The interface will still scale based on your device resolution, but this setting controls the amount of scale. + description: Changes the size of the user interface. The interface will still + scale based on your device resolution, but this setting controls + the amount of scale. scales: super_small: Super small small: Small regular: Regular large: Large huge: Huge - scrollWheelSensitivity: title: Zoom sensitivity - description: >- - Changes how sensitive the zoom is (Either mouse wheel or trackpad). + description: Changes how sensitive the zoom is (Either mouse wheel or trackpad). sensitivity: super_slow: Super slow slow: Slow regular: Regular fast: Fast super_fast: Super fast - language: title: Language - description: >- - Change the language. All translations are user contributed and might be incomplete! - + description: Change the language. All translations are user contributed and + might be incomplete! fullscreen: title: Fullscreen - description: >- - It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone. - + description: It is recommended to play the game in fullscreen to get the best + experience. Only available in the standalone. soundsMuted: title: Mute Sounds - description: >- - If enabled, mutes all sound effects. - + description: If enabled, mutes all sound effects. musicMuted: title: Mute Music - description: >- - If enabled, mutes all music. - + description: If enabled, mutes all music. theme: title: Game theme - description: >- - Choose the game theme (light / dark). + description: Choose the game theme (light / dark). themes: dark: Dark light: Light - refreshRate: title: Simulation Target - description: >- - If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow. - + description: If you have a 144hz monitor, change the refresh rate here so the + game will properly simulate at higher refresh rates. This might + actually decrease the FPS if your computer is too slow. alwaysMultiplace: title: Multiplace - description: >- - If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. - + description: If enabled, all buildings will stay selected after placement until + you cancel it. This is equivalent to holding SHIFT permanently. offerHints: title: Hints & Tutorials - description: >- - Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game. - + description: Whether to offer hints and tutorials while playing. Also hides + certain UI elements onto a given level to make it easier to get + into the game. movementSpeed: title: Movement speed description: Changes how fast the view moves when using the keyboard. @@ -723,20 +783,17 @@ settings: extremely_fast: Extremely Fast enableTunnelSmartplace: title: Smart Tunnels - description: >- - When enabled, placing tunnels will automatically remove unnecessary belts. - This also enables to drag tunnels and excess tunnels will get removed. + description: When enabled, placing tunnels will automatically remove unnecessary + belts. This also enables to drag tunnels and excess tunnels will + get removed. vignette: title: Vignette - description: >- - Enables the vignette which darkens the screen corners and makes text easier - to read. - + description: Enables the vignette which darkens the screen corners and makes + text easier to read. autosaveInterval: title: Autosave Interval - description: >- - Controls how often the game saves automatically. You can also disable it - entirely here. + description: Controls how often the game saves automatically. You can also + disable it entirely here. intervals: one_minute: 1 Minute two_minutes: 2 Minutes @@ -746,32 +803,77 @@ settings: disabled: Disabled compactBuildingInfo: title: Compact Building Infos - description: >- - Shortens info boxes for buildings by only showing their ratios. Otherwise a - description and image is shown. + description: Shortens info boxes for buildings by only showing their ratios. + Otherwise a description and image is shown. disableCutDeleteWarnings: title: Disable Cut/Delete Warnings - description: >- - Disable the warning dialogs brought up when cutting/deleting more than 100 - entities. - + description: Disable the warning dialogs brought up when cutting/deleting more + than 100 entities. enableColorBlindHelper: title: Color Blind Mode - description: Enables various tools which allow to play the game if you are color blind. + description: Enables various tools which allow to play the game if you are color + blind. rotationByBuilding: title: Rotation by building type - description: >- - Each building type remembers the rotation you last set it to individually. - This may be more comfortable if you frequently switch between placing - different building types. - + 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 + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Keybindings - hint: >- - Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. - + hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different + placement options." resetKeybindings: Reset Keybindings - categoryLabels: general: Application ingame: Game @@ -780,7 +882,6 @@ keybindings: massSelect: Mass Select buildings: Building Shortcuts placementModifiers: Placement Modifiers - mappings: confirm: Confirm back: Back @@ -789,38 +890,30 @@ keybindings: mapMoveDown: Move Down mapMoveLeft: Move Left centerMap: Center Map - mapZoomIn: Zoom in mapZoomOut: Zoom out createMarker: Create Marker - menuOpenShop: Upgrades menuOpenStats: Statistics - toggleHud: Toggle HUD toggleFPSInfo: Toggle FPS and Debug Info - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Conveyor Belt + underground_belt: Tunnel + miner: Extractor + cutter: Cutter + rotater: Rotate + stacker: Stacker + mixer: Color Mixer + painter: Painter + trash: Trash rotateWhilePlacing: Rotate - rotateInverseModifier: >- - Modifier: Rotate CCW instead + rotateInverseModifier: "Modifier: Rotate CCW instead" cycleBuildingVariants: Cycle Variants confirmMassDelete: Confirm Mass Delete cycleBuildings: Cycle Buildings - massSelectStart: Hold and drag to start massSelectSelectMultiple: Select multiple areas massSelectCopy: Copy area - placementDisableAutoOrientation: Disable automatic orientation placeMultiple: Stay in placement mode placeInverse: Invert automatic belt orientation @@ -833,33 +926,38 @@ keybindings: pipette: Pipette menuClose: Close Menu switchLayers: Switch layers - advanced_processor: Color Inverter - energy_generator: Energy Generator 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: About this Game body: >- - This game is open source and developed by Tobias Springer (this is me).

+ This game is open source and developed by Tobias Springer + (this is me).

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

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

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

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

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

- - Finally, huge thanks to my best friend Niklas - Without our - factorio sessions this game would never have existed. + The soundtrack was made by Peppsen - He's awesome.

+ Finally, huge thanks to my best friend Niklas - Without our factorio sessions this game would never have existed. changelog: title: Changelog - demo: features: restoringGames: Restoring savegames @@ -867,5 +965,65 @@ demo: oneGameLimit: Limited to one savegame customizeKeybindings: Customizing Keybindings exportingBase: Exporting whole Base as Image - settingNotAvailable: Not available in the 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. diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index 01dd79ee..7de02254 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -1,112 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io is een spel dat draait om het bouwen van fabrieken voor het produceren en automatiseren van steeds complexere vormen in een oneindig groot speelveld. + 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. + discordLinkShort: Officiële Discord + intro: >- + Shapez.io is een spel waarin je fabrieken moet bouwen voor de + automatische productie van geometrische vormen. - # 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] + Naarmate het spel vordert, worden de vormen complexer, en moet je uitbreiden in het oneindige speelveld. - 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. + 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! - 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! + 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! - 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. - - 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! - - 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] - - discordLink: Officiële Discord - Chat met mij! + 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. + Zorg dat je ook mijn trello board bekijkt voor de volledige roadmap! global: loading: Laden error: Fout - - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "." - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider: . decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: één seconde geleden xSecondsAgo: seconden geleden oneMinuteAgo: een minuut geleden @@ -115,14 +66,10 @@ global: xHoursAgo: uren geleden oneDayAgo: een dag geleden xDaysAgo: dagen geleden - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: u m - xMinutes: minuten - keys: tab: TAB control: CTRL @@ -130,13 +77,9 @@ global: escape: ESC shift: SHIFT space: SPATIE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demoversie - intro: >- - Koop de standalone om alle functies te ontgrendelen! - + intro: Koop de standalone om alle functies te ontgrendelen! mainMenu: play: Spelen changelog: Changelog @@ -144,19 +87,15 @@ mainMenu: openSourceHint: Dit spel is open source! discordLink: Officiële Discord-server (Engelstalig) helpTranslate: Help met vertalen! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Sorry, maar dit spel draait langzaam in je huidige browser! Koop de standalone versie of download chrome voor de volledige ervaring. - + browserWarning: Sorry, maar dit spel draait langzaam in je huidige browser! Koop + de standalone versie of download chrome voor de volledige ervaring. savegameLevel: Level savegameLevelUnknown: Onbekend Level - continue: Verder newGame: Nieuw Spel madeBy: Gemaakt door subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,111 +109,102 @@ dialogs: viewUpdate: Zie Update showUpgrades: Zie Upgrades showKeybindings: Zie Sneltoetsen - importSavegameError: title: Importeerfout - text: >- - Het importeren van je savegame is mislukt: - + text: "Het importeren van je savegame is mislukt:" importSavegameSuccess: title: Savegame geïmporteerd - text: >- - Je savegame is succesvol geïmporteerd. - + text: Je savegame is succesvol geïmporteerd. gameLoadFailure: title: Het spel is kapot - text: >- - Het laden van je savegame is mislukt: - + 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: - + text: "Het verwijderen van de savegame is mislukt:" restartRequired: title: Opnieuw opstarten vereist - text: >- - Je moet het spel opnieuw opstarten om de instellingen toe te passen. - + text: Je moet het spel opnieuw opstarten om de instellingen toe te passen. editKeybinding: title: Verander sneltoetsen - desc: Druk op de toets of muisknop die je aan deze functie toe wil wijzen, of druk op ESC om te annuleren. - + desc: Druk op de toets of muisknop die je aan deze functie toe wil wijzen, of + druk op ESC om te annuleren. resetKeybindingsConfirmation: title: Reset sneltoetsen - desc: Dit reset al je sneltoetsen naar de standaardinstellingen. Wil je dit bevestigen? - + desc: Dit reset al je sneltoetsen naar de standaardinstellingen. Wil je dit + bevestigen? keybindingsResetOk: title: Sneltoetsen gereset desc: De sneltoetsen zijn gereset naar hun originele instellingen! - featureRestriction: title: Demoversie - desc: Je probeerde een functie te gebruiken () die niet beschikbaar is in de demo. Overweeg om de standalone te kopen voor de volledige ervaring! - + desc: Je probeerde een functie te gebruiken () die niet beschikbaar is + in de demo. Overweeg om de standalone te kopen voor de volledige + ervaring! oneSavegameLimit: title: Gelimiteerd aantal savegames - desc: Je kunt maar één savegame tegelijk hebben in de demoversie. Verwijder de bestaande savegame of koop de standalone! - + desc: Je kunt maar één savegame tegelijk hebben in de demoversie. Verwijder de + bestaande savegame of koop de standalone! updateSummary: title: Nieuwe update! - desc: >- - Dit zijn de veranderingen sinds je voor het laatst gespeeld hebt: - + desc: "Dit zijn de veranderingen sinds je voor het laatst gespeeld hebt:" upgradesIntroduction: title: Ontgrendel upgrades - desc: >- - Alle vormen die je produceert kunnen gebruikt worden om upgrades te ontgrendelen - vernietig je oude fabrieken niet! + desc: Alle vormen die je produceert kunnen gebruikt worden om upgrades te + ontgrendelen - vernietig je oude fabrieken niet! Het upgrades-tabblad staat in de rechterbovenhoek van het scherm. - massDeleteConfirm: title: Bevestig verwijderen - desc: >- - Je bent veel gebouwen aan het verwijderen ( om precies te zijn)! Weet je zeker dat je dit wil doen? - + desc: Je bent veel gebouwen aan het verwijderen ( om precies te zijn)! + Weet je zeker dat je dit wil doen? blueprintsNotUnlocked: title: Nog niet ontgrendeld - desc: >- - Blauwdrukken zijn nog niet ontgrendeld! Voltooi meer levels om ze te ontgrendelen. - + desc: Blauwdrukken zijn nog niet ontgrendeld! Voltooi meer levels om ze te + ontgrendelen. keybindingsIntroduction: title: Nuttige sneltoetsen - desc: >- - Dit spel heeft veel sneltoetsen die het makkelijker maken om grote fabrieken te bouwen. - Hier zijn er een aantal, maar zorg dat je kijkt naar de sneltoetsen!

- CTRL + slepen: selecteer een gebied om te kopiëren / verwijderen.
- SHIFT: Houd ingedrukt om meerdere van het zelfde gebouw te plaatsen.
- ALT: Houd ingedrukt om de richting van lopende banden om te draaien wanneer je ze plaatst.
- + desc: "Dit spel heeft veel sneltoetsen die het makkelijker maken om grote + fabrieken te bouwen. Hier zijn er een aantal, maar zorg dat je + kijkt naar de sneltoetsen!

CTRL + slepen: selecteer een gebied om te + kopiëren / verwijderen.
SHIFT: + Houd ingedrukt om meerdere van het zelfde gebouw te plaatsen.
+ ALT: Houd ingedrukt om de richting + 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 een ongelimiteerde hoeveelheid markeringen! + desc: Je kunt maar twee markeringen plaatsen in de demo. Koop de standalone voor + een ongelimiteerde hoeveelheid markeringen! massCutConfirm: title: Bevestig knippen - desc: >- - Je bent veel gebouwen aan het knippen ( om precies te zijn)! Weet je zeker dat je dit wil doen? - + desc: Je bent veel gebouwen aan het knippen ( om precies te zijn)! Weet + je zeker dat je dit wil doen? exportScreenshotWarning: title: Exporteer screenshot - desc: >- - Je hebt aangegeven dat je jouw basis wil exporteren als screenshot. Als je een grote basis hebt kan dit proces langzaam zijn en er zelfs voor zorgen dat je spel crasht! - + desc: Je hebt aangegeven dat je jouw basis wil exporteren als screenshot. Als je + een grote basis hebt kan dit proces langzaam zijn en er zelfs voor + zorgen dat je spel crasht! massCutInsufficientConfirm: title: Bevestig knippen - desc: Je kunt het je niet veroorloven om de selectie te plakken! Weet je zeker dat je het wil knippen? - + desc: Je kunt het je niet veroorloven om de selectie te plakken! Weet je zeker + dat je het wil knippen? + editSignal: + title: Set Signal + descItems: "Kies een ingesteld item:" + descShortKey: ... of voer de short key van een vorm (Die je + hier kunt vinden) in. + renameSavegame: + title: Hernoem opgeslagen spel + desc: Geef je opgeslagen spel een nieuwe naam. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Beweeg speelveld selectBuildings: Selecteer gebied @@ -287,7 +217,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 @@ -295,18 +225,9 @@ ingame: clearSelection: Annuleer selectie pipette: Pipet switchLayers: Wissel lagen - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Druk op om tussen varianten te wisselen. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Snelheid range: Bereik @@ -314,36 +235,21 @@ ingame: oneItemPerSecond: 1 voorwerp / s itemsPerSecond: voorwerpen / s itemsPerSecondDouble: (x2) - tiles: tegels - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Level completed: Voltooid unlockText: ontgrendeld! buttonNextLevel: Volgende Level - - # Notifications on the lower right notifications: newUpgrade: Er is een nieuwe upgrade beschikbaar! gameSaved: Je spel is opgeslagen. - - # The "Upgrades" window + freeplayLevelComplete: Level is voltooid! shop: title: Upgrades buttonUnlock: Upgrade - - # Gets replaced to e.g. "Tier IX" tier: Niveau - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAXIMAAL NIVEAU (Snelheid x) - - # The "Statistics" window statistics: title: Statistieken dataSources: @@ -352,55 +258,47 @@ ingame: description: Geeft alle vormen weer die opgeslagen zijn in de HUB. produced: title: Geproduceerd - description: Geeft alle vormen weer die op dit moment geproduceerd worden, inclusief tussenproducten. + description: Geeft alle vormen weer die op dit moment geproduceerd worden, + inclusief tussenproducten. delivered: title: Geleverd description: Geeft alle vormen weer die in de HUB worden bezorgd. noShapesProduced: Er zijn nog geen vormen geproduceerd. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Speeltijd - buildingsPlaced: Gebouwen beltsPlaced: Lopende banden - - buttons: - continue: Verder spelen - settings: Opties - menu: Terug naar het Menu - - # Bottom left tutorial hints tutorialHints: title: Hulp nodig? showHint: Zie hint hideHint: Sluit - - # When placing a blueprint blueprintPlacer: cost: Prijs - - # Map markers waypoints: waypoints: Markeringen hub: HUB - description: Klik met de linkermuisknop op een markering om hier naartoe te gaan, klik met de rechtermuisknop om de markering te verwijderen.

Druk op om een markering te maken in het huidige zicht, of rechtermuisknop om een markering te maken bij het geselecteerde gebied. + description: Klik met de linkermuisknop op een markering om hier naartoe te + gaan, klik met de rechtermuisknop om de markering te + verwijderen.

Druk op om een markering te maken + in het huidige zicht, of rechtermuisknop om een + markering te maken bij het geselecteerde gebied. creationSuccessNotification: Markering is gemaakt. - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Plaats een ontginner op een cirkelvorm om deze te onttrekken! - 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 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. - + 1_1_extractor: Plaats een ontginner op een + cirkelvorm om deze te onttrekken! + 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 + 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." colors: red: Rood green: Groen @@ -414,9 +312,43 @@ ingame: shapeViewer: title: Lagen empty: Leeg - copyKey: Kopiëer sleutel - -# All shop upgrades + copyKey: Kopieer sleutel + connectedMiners: + one_miner: 1 Miner + n_miners: Miners + limited_items: "Gelimiteerd tot: " + watermark: + title: Demo versie + desc: Klik hier om het spel op Steam te bekijken! + get_on_steam: Get on steam + standaloneAdvantages: + title: Koop de volledige versie! + no_thanks: Nee, bedankt! + points: + levels: + title: 12 Nieuwe Levels + desc: Voor een totaal van 26 levels! + buildings: + title: 18 Nieuwe Gebouwen + desc: Automatiseer je fabrieken! + savegames: + title: ∞ Savegames + desc: Zo veel je maar wilt! + upgrades: + title: 20 Upgrade Levels + desc: Deze demo heeft er enkel 5! + markers: + title: ∞ Markeringen + desc: Verdwaal nooit meer in je fabriek! + wires: + title: Kabels + desc: Een volledig nieuwe dimensie! + darkmode: + title: Dark Mode + desc: Minder vervelend voor je ogen! + support: + title: Help mij + desc: Ik maak dit spel in mijn vrije tijd! shopUpgrades: belt: name: Banden, Verdeler & Tunnels @@ -430,289 +362,434 @@ shopUpgrades: painting: name: Mengen en verven description: Snelheid x → x - -# Buildings and their name / description buildings: belt: default: - name: &belt Lopende Band + name: Lopende Band description: Transporteert voorwerpen, klik en sleep om meerdere te plaatsen. - - miner: # Internal name for the Extractor + miner: default: - name: &miner Ontginner + name: Ontginner description: Plaats op een vorm of kleur om deze te onttrekken. - chainable: name: Ontginner (Ketting) - description: Plaats op een vorm of kleur om deze te onttrekken. Kan achter elkaar worden geplaatst. - - underground_belt: # Internal name for the Tunnel + description: Plaats op een vorm of kleur om deze te onttrekken. Kan achter + elkaar worden geplaatst. + underground_belt: default: - name: &underground_belt Tunnel + name: Tunnel description: Laat voorwerpen onder gebouwen en lopende banden door lopen. - tier2: name: Tunnel Niveau II description: Laat voorwerpen onder gebouwen en lopende banden door lopen. - - splitter: # Internal name for the Balancer - default: - name: &splitter Verdeler - description: Multifunctioneel - Verdeelt alle input gelijk over alle output. - - compact: - name: Invoeger (compact) - description: Voegt twee lopende banden samen tot één. - - compact-inverse: - name: Invoeger (compact) - description: Voegt twee lopende banden samen tot één. - cutter: default: - name: &cutter Knipper - description: Knipt vormen van boven naar onder en geeft beiden helften als output. Als je maar één helft gebruikt, zorg dat je de andere helft vernietigt, anders loopt de machine vast! + name: Knipper + description: Knipt vormen van boven naar onder en geeft beiden helften als + output. Als je maar één helft gebruikt, zorg dat je de + andere helft vernietigt, anders loopt de machine vast! quad: name: Knipper (Quad) - description: Knipt vormen in vier delen. Als je maar één deel gebruikt, zorg dat je de andere delen vernietigt, anders loopt de machine vast! - + description: Knipt vormen in vier delen. Als je maar één deel gebruikt, + zorg dat je de andere delen vernietigt, anders loopt de machine + vast! rotater: default: - name: &rotater Roteerder + name: Roteerder description: Draait vormen 90 graden met de klok mee. ccw: name: Roteerder (andersom) description: Draait vormen 90 graden tegen de klok in. - fl: - name: Rotate (180) - description: Rotates shapes by 180 degrees. - + rotate180: + name: Roteerder (180) + description: Draait vormen 180 graden. stacker: default: - name: &stacker Stapelaar - description: Stapelt twee vormen. Als ze niet samengevoegd kunnen worden, wordt het rechtervoorwerp boven op het linker geplaatst. - + name: Stapelaar + description: Stapelt twee vormen. Als ze niet samengevoegd kunnen worden, wordt + het rechtervoorwerp boven op het linker geplaatst. mixer: default: - name: &mixer Kleurenmenger + name: Kleurenmenger description: Mengt twee kleuren met behulp van additieve kleurmenging. - painter: default: - name: &painter Verver - description: &painter_desc Verft de volledige vorm in de linker input met de kleur van de rechter input. + name: Verver + description: Verft de volledige vorm in de linker input met de kleur van de + rechter input. double: name: Verver (Dubbel) - description: Verft de vormen in de linker input met de kleur van de rechter input. + description: Verft de vormen in de linker input met de kleur van de rechter + 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: *painter - description: *painter_desc - + name: Verver + description: Verft de volledige vorm in de linker input met de kleur van de + rechter input. trash: default: - name: &trash Vuilnisbak + name: Vuilnisbak description: Accepteert input van alle kanten en vernietigt het. Voor altijd. - - storage: - name: Opslag - description: Slaat het overschot aan voorwerpen op, tot een zekere hoeveelheid. Kan worden gebruikt als buffer. - hub: deliver: Lever toUnlock: om te ontgrendelen levelShortcut: LVL + endOfDemo: End of Demo wire: default: name: Energiekabel description: Voor transport van energie. - advanced_processor: + second: + name: Kabel + description: Vervoerd signalen, zoals items, kleuren of booleans (1 of 0). + Verschillende kleuren kabels kunnen niet verbonden worden. + balancer: default: - name: Kleur-omkeerder - description: Keert de kleur om van een voorwerp. - energy_generator: - deliver: Lever - toGenerateEnergy: Voor - default: - name: Energiegenerator - description: Wekt energie op door vormen te consumeren. - wire_crossings: - default: - name: Kabelsplijter - description: Splijt één kabel in twee. + name: Balanceerder + description: Multifunctioneel - Verdeel alle invoeren over alle uitvoeren. merger: - name: Kabelvoeger - description: Voegt twee kabels samen tot één. - + name: Samenvoeger (compact) + description: Voeg 2 lopende banden samen. + merger-inverse: + name: Samenvoeger + description: Voeg 2 lopende banden samen. + splitter: + name: Splitter (compact) + description: Split een lopende band in tweeën. + splitter-inverse: + name: Splitter + description: Split een lopende band in tweeën. + storage: + default: + name: Opslag + description: Slaat teveel aan items of kleuren op. De linker uitvoer heeft de + voorkeur. + wire_tunnel: + default: + name: Kabel kruising + description: Kruis 2 kabels zonder ze te koppelen + constant_signal: + default: + name: Constant Signaal + description: Zend een constant signaal, dit kan een vorm, kleur of boolean (1 / + 0) zijn. + lever: + default: + name: Schakelaar + description: Zend een 1 of een 0 uit afhankelijk van de stand. + logic_gate: + default: + 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 poort + description: Zend een 1 uit als de invoer een 0 is. + xor: + 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: 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: Geeft het signaal van onder door als de zijkant 1 is. + mirrored: + name: Transistor + description: Geeft het signaal van onder door als de zijkant 1 is. + filter: + default: + name: Filter + description: Stuurt alle items van de ingestelde soort naar boven en de rest + naar rechts. + display: + default: + 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: Lopende band lezer + description: Meet de gemiddelde doorvoer op de band. Geeft het laatste gelezen + item door aan de kabel. + analyzer: + default: + name: Vorm Analyse + description: Analiseerd de onderste laag rechts boven en geeft de kleur en vorm + door aan de kabel. + comparator: + default: + name: Vergelijker + description: Zend 1 uit als beiden invoeren gelijk zijn, kunnen vormen, kleuren + of booleans (1 / 0) zijn + virtual_processor: + default: + name: Virtuele Snijder + description: Snijdt de vorm virtueel in twee helften. + rotater: + name: Virtuele Draaier + description: Draait de vorm virtueel met de klok mee en tegen de klok in. + unstacker: + name: Virtuele Ontstapelaar + description: Geeft de bovenste laag door aan de rechter uitvoer en de rest aan + de linker uitvoer. + stacker: + name: Virtuele Stapelaar + description: Stapelt de rechter vorm virtueel op de linkervorm. + painter: + name: Virtuele Schilder + description: Schildert de vorm virtueel vanaf de onderste invoer met de vorm aan + de rechter ingang. + item_producer: + default: + name: Item Producent + description: Alleen beschikbaar in sandbox-modus, geeft het gegeven signaal van + de kabel laag op de reguliere laag. storyRewards: - # Those are the rewards gained from completing the store 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 met de klok mee. - + desc: De roteerder is ontgrendeld - Het draait vormen 90 graden + met de klok mee. reward_painter: title: Verven - desc: >- - De verver is ontgrendeld - Onttrek wat kleur (op dezelfde manier hoe je vormen onttrekt) en combineer het met een vorm in de verver om ze te kleuren!

PS: Als je kleurenblind bent, is er een kleurenblindmodus in de instellingen! - + desc: "De verver is ontgrendeld - Onttrek wat kleur (op + dezelfde manier hoe je vormen onttrekt) en combineer het met een + vorm in de verver om ze te kleuren!

PS: Als je kleurenblind + bent, is er een kleurenblindmodus in de + instellingen!" reward_mixer: title: Kleuren mengen - desc: De menger is ontgrendeld - Gebruik dit gebouw om twee kleuren te mengen met behulp van additieve kleurmenging! - + desc: De menger is ontgrendeld - Gebruik dit gebouw om twee + kleuren te mengen met behulp van additieve + kleurmenging! reward_stacker: title: Stapelaar - desc: Je kunt nu vormen combineren met de stapelaar! De inputs worden gecombineerd en als ze naast elkaar passen worden ze samengevoegd. Als ze niet samengevoegd kunnen worden dan wordt het rechtervoorwerp boven op het linker geplaatst! - + desc: Je kunt nu vormen combineren met de stapelaar! De inputs + worden gecombineerd en als ze naast elkaar passen worden ze + samengevoegd. Als ze niet samengevoegd kunnen + worden dan wordt het rechtervoorwerp boven op het + 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 gebouwen en lopende banden door laten lopen. - + desc: De tunnel is ontgrendeld - Je kunt nu voorwerpen onder + gebouwen en lopende banden door laten lopen. reward_rotater_ccw: title: Roteren (andersom) - desc: Je hebt een variant van de roteerder ontgrendeld - Het roteert voorwerpen tegen de klok in! Om het te bouwen selecteer je de roteerder en druk je op 'T' om tussen varianten te wisselen! - + desc: Je hebt een variant van de roteerder ontgrendeld - Het + roteert voorwerpen tegen de klok in! Om het te bouwen selecteer je + de roteerder en druk je op 'T' om tussen varianten te + 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 reikwijdte- - Je hebt een compacte variant van de verdeler ontgrendeld - Dit voegt twee lopende banden samen tot één. - + 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! reward_cutter_quad: title: Quad Knippen - desc: Je hebt een variant van de knipper ontgrendeld - Dit knipt vormen in vier stukken in plaats van twee! - + desc: Je hebt een variant van de knipper ontgrendeld - Dit + knipt vormen in vier stukken in plaats van twee! reward_painter_double: title: Dubbel verven - desc: Je hebt een variant van de verver ontgrendeld - Het werkt als de gewone verver, maar verft twee vormen tegelijk met één kleur in plaats van twee! - - reward_painter_quad: - title: Quad verven - desc: Je hebt een variant van de verver ontgrendeld - Het verft elk kwadrant van de vorm een andere kleur! - + desc: Je hebt een variant van de verver ontgrendeld - Het werkt + als de gewone verver, maar verft twee vormen + 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! Selecteer een gebied (Houd CTRL ingedrukt en sleep dan met je muis) en druk op 'C' om het geselecteerde gebied te kopiëren.

Plakken is niet gratis, je hebt er blauwdruk-vormen voor nodig! (De vorm die je net ingeleverd hebt). - - # Special reward, which is shown when there is no reward actually + desc: Je kunt nu delen van je fabriek kopiëren en plakken! + Selecteer een gebied (Houd CTRL ingedrukt en sleep dan met je muis) + en druk op 'C' om het geselecteerde gebied te + kopiëren.

Plakken is niet gratis, je hebt er + blauwdruk-vormen voor nodig! (De vorm die je net + ingeleverd hebt). no_reward: title: Volgende level - desc: >- - Je hebt niks nieuws ontgrendeld met dit level, maar bij de volgende zal er weer iets nieuws zijn!

PS: Maak je fabrieken niet kapot - Je hebt al deze vormen later nog nodig om upgrades te ontgrendelen! - + desc: "Je hebt niks nieuws ontgrendeld met dit level, maar bij de volgende zal + er weer iets nieuws zijn!

PS: Maak je fabrieken niet kapot + - Je hebt al deze vormen later nog nodig om + upgrades te ontgrendelen!" no_reward_freeplay: title: Volgende level - desc: >- - Gefeliciteerd! Even tussendoor, het spel wordt in de toekomst nog verder uitgebereid in de standalone! - + desc: Gefeliciteerd! Even tussendoor, het spel wordt in de toekomst nog verder + uitgebereid in de standalone! + reward_balancer: + title: Verdeler + 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: 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: 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: 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: 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: 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: 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 + 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: 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: Einde van de Demo + desc: Je hebt het einde van de demoversie bereikt! settings: title: Opties categories: general: Algemeen userInterface: Opmaak advanced: Geavanceerd - + performance: Performance versionBadges: dev: Ontwikkeling staging: Staging prod: Productie buildDate: gebouwd - labels: uiScale: title: Interface-schaal - description: >- - Veranderd de grootte van de gebruikersinterface. De interface schaalt nog steeds gebaseerd op de resolutie van je apparaat, maar deze optie heeft invloed op de hoeveelheid schaling. + description: Veranderd de grootte van de gebruikersinterface. De interface + schaalt nog steeds gebaseerd op de resolutie van je apparaat, + maar deze optie heeft invloed op de hoeveelheid schaling. scales: super_small: Zeer klein small: Klein regular: Middel large: Groot huge: Jumbo - scrollWheelSensitivity: title: Zoom-gevoeligheid - description: >- - Veranderd hoe gevoelig het zoomen is (muiswiel of trackpad). + description: Veranderd hoe gevoelig het zoomen is (muiswiel of trackpad). sensitivity: super_slow: Super langzaam slow: Langzaam regular: Middel fast: Snel super_fast: Super snel - language: title: Taal - description: >- - Verander de taal. Alle vertalingen zijn bijdragen van gebruikers en zijn mogelijk niet compleet! - + description: Verander de taal. Alle vertalingen zijn bijdragen van gebruikers en + zijn mogelijk niet compleet! fullscreen: title: Volledig scherm - description: >- - Het wordt aangeraden om het spel op volledig scherm te spelen voor de beste ervaring. Dit is alleen beschikbaar in de standalone. - + description: Het wordt aangeraden om het spel op volledig scherm te spelen voor + de beste ervaring. Dit is alleen beschikbaar in de standalone. soundsMuted: title: Demp geluiden - description: >- - Wanneer dit aan staat worden alle geluidseffecten uitgeschakeld. - + description: Wanneer dit aan staat worden alle geluidseffecten uitgeschakeld. musicMuted: title: Demp muziek - description: >- - Wanneer dit aan staat wordt alle muziek uitgeschakeld. - + description: Wanneer dit aan staat wordt alle muziek uitgeschakeld. theme: title: Donkere modus - description: >- - Kies de gewenste weergave (licht / donker). - + description: Kies de gewenste weergave (licht / donker). themes: dark: Donker light: Licht - refreshRate: title: Simulation Target - description: >- - Wanneer je een 144 hz monitor hebt, verander de refresh rate hier zodat het spel naar behoren weer blijft geven. Dit verlaagt mogelijk de FPS als je computer te traag is. - + description: Wanneer je een 144 hz monitor hebt, verander de refresh rate hier + zodat het spel naar behoren weer blijft geven. Dit verlaagt + mogelijk de FPS als je computer te traag is. alwaysMultiplace: title: Plaats meerdere - description: >- - Wanneer dit aan staat zullen gebouwen geselecteerd blijven na plaatsing, tot je dit cancelt. Dit staat gelijk aan permanent SHIFT inhouden. - + description: Wanneer dit aan staat zullen gebouwen geselecteerd blijven na + plaatsing, tot je dit cancelt. Dit staat gelijk aan permanent + SHIFT inhouden. offerHints: title: Hints & Tutorials - description: >- - Wanneer dit uit staat zullen er geen hints en tutorials meer aangeboden worden. Als deze optie aan staat, zullen ook bepaalde elementen uit de UI verborgen worden tot het punt waarop ze gebruikt worden om de instap in het spel makkelijker te maken. - + description: Wanneer dit uit staat zullen er geen hints en tutorials meer + aangeboden worden. Als deze optie aan staat, zullen ook bepaalde + elementen uit de UI verborgen worden tot het punt waarop ze + gebruikt worden om de instap in het spel makkelijker te maken. movementSpeed: title: Bewegingssnelheid - description: Veranderd hoe snel het beeld beweegt wanneer je het toetsenbord gebruikt. + description: Veranderd hoe snel het beeld beweegt wanneer je het toetsenbord + gebruikt. speeds: super_slow: Super langzaam slow: Langzaam @@ -722,20 +799,17 @@ settings: extremely_fast: Extreem snel enableTunnelSmartplace: title: Slimme Tunnels - description: >- - Wanneer dit aan staat zullen tunnels automatisch onnodige lopende banden verwijderen. - Ook kun je dan tunnels slepen en onnodige tunnels worden ook verwijderd. + description: Wanneer dit aan staat zullen tunnels automatisch onnodige lopende + banden verwijderen. Ook kun je dan tunnels slepen en onnodige + tunnels worden ook verwijderd. vignette: title: Vignet - description: >- - Schakelt de vignet in, wat de hoeken van het scherm donkerder maakt zodat de tekst makkelijker te lezen is. - + description: Schakelt de vignet in, wat de hoeken van het scherm donkerder maakt + zodat de tekst makkelijker te lezen is. autosaveInterval: title: Autosave Interval - description: >- - Bepaalt hoe vaak het spel automatisch opslaat. Je kan het hier ook volledig - mee uitschakelen. - + description: Bepaalt hoe vaak het spel automatisch opslaat. Je kan het hier ook + volledig mee uitschakelen. intervals: one_minute: 1 Minuut two_minutes: 2 Minuten @@ -745,31 +819,78 @@ settings: disabled: Uitgeschakeld compactBuildingInfo: title: Compacte gebouwinformatie - description: >- - Informatie weergeven bij gebouwen wordt beperkt tot alleen hun 'ratios'. Anders - zie je een beschrijving en een afbeelding. + description: Informatie weergeven bij gebouwen wordt beperkt tot alleen hun + 'ratios'. Anders zie je een beschrijving en een afbeelding. disableCutDeleteWarnings: title: Schakel knip/verwijder waarschuwingen uit - description: >- - Schakelt de waarschuwing uit die wordt weergegeven wanneer je meer dan 100 dingen probeert te - knippen/verwijderen. + description: Schakelt de waarschuwing uit die wordt weergegeven wanneer je meer + dan 100 dingen probeert te knippen/verwijderen. enableColorBlindHelper: title: Kleurenblindmodus - description: Schakelt verschillende hulpmiddelen in zodat je het spel alsnog kunt spelen wanneer je kleurenblind bent. + description: Schakelt verschillende hulpmiddelen in zodat je het spel alsnog + 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 laatst geplaatst hebt. - Dit kan handig zijn wanneer je vaak tussen verschillende - soorten gebouwen wisselt. - + 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: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + title: Music Volume + description: Set the volume for music + lowQualityMapResources: + 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: 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: 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: Lage kwaliteit + description: Gebruikt een lage kwaliteit voor meer performance. Het spel ziet er + wel niet meer mooi uit! + displayChunkBorders: + 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: 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: 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: 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Sneltoetsen - hint: >- - Tip: Maak gebruik van CTRL, SHIFT en ALT! Hiermee kun je dingen anders en gemakkelijker plaatsen. - + hint: "Tip: Maak gebruik van CTRL, SHIFT en ALT! Hiermee kun je dingen anders en + gemakkelijker plaatsen." resetKeybindings: Reset sneltoetsen - categoryLabels: general: Applicatie ingame: Spel @@ -778,7 +899,6 @@ keybindings: massSelect: Massaselectie buildings: Gebouwen placementModifiers: Plaatsingsaanpassingen - mappings: confirm: Bevestig back: Terug @@ -787,38 +907,30 @@ keybindings: mapMoveDown: Beweeg omlaag mapMoveLeft: Beweeg naar links centerMap: Ga naar het midden van het speelveld - mapZoomIn: Zoom in mapZoomOut: Zoom uit createMarker: Plaats een markering - menuOpenShop: Upgrades menuOpenStats: Statistieken - toggleHud: Schakel HUD toggleFPSInfo: Schakel FPS en Debug Info - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Lopende Band + underground_belt: Tunnel + miner: Ontginner + cutter: Knipper + rotater: Roteerder + stacker: Stapelaar + mixer: Kleurenmenger + painter: Verver + trash: Vuilnisbak rotateWhilePlacing: Roteren - rotateInverseModifier: >- - Aanpassing: Roteer tegen de klok in + rotateInverseModifier: "Aanpassing: Roteer tegen de klok in" cycleBuildingVariants: Wissel tussen varianten confirmMassDelete: Bevestig massaal verwijderen cycleBuildings: Wissel tussen gebouwen - massSelectStart: Klik en sleep voor selecteren massSelectSelectMultiple: Selecteer meerdere gebieden massSelectCopy: Kopieer selectie - placementDisableAutoOrientation: Schakel automatisch draaien uit placeMultiple: Blijf in plaatsmodus placeInverse: Omkeren richting lopende band @@ -831,33 +943,38 @@ keybindings: pipette: Pipet menuClose: Sluit Menu switchLayers: Lagen omwisselen - advanced_processor: Kleur-omvormer - energy_generator: Energiegenerator wire: Energiekabel - + balancer: Balancer + storage: Opslag + constant_signal: Constant Signaal + logic_gate: Logische poort + lever: Schakelaar (regulier) + filter: Filter + wire_tunnel: Kabel kruising + display: Scherm + reader: Lopende band lezer + virtual_processor: Virtuele Snijder + transistor: Transistor + analyzer: Vorm Analyse + comparator: Vergelijk + item_producer: Item Producent (Sandbox) + copyWireValue: "Kabels: Kopieer waarde onder cursor" about: title: Over dit spel body: >- - Dit spel is open source en ontwikkeld door Tobias Springer (dit ben ik).

+ Dit spel is open source en ontwikkeld door Tobias Springer + (dit ben ik).

- Als je ook bij wil dragen, ga dan naar shapez.io op github.

+ Als je ook bij wil dragen, ga dan naar shapez.io op github.

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

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

- De muziek is gemaakt door Peppsen - Hij is geweldig.

- - Tot slot wil ik mijn beste vriend Niklas bedanken - Zonder onze - factorio-sessies zou dit spel nooit bestaan hebben. + De muziek is gemaakt door Peppsen - Hij is geweldig.

+ Tot slot wil ik mijn beste vriend Niklas bedanken - Zonder onze factorio-sessies zou dit spel nooit bestaan hebben. changelog: title: Changelog - demo: features: restoringGames: Savegames terughalen @@ -865,5 +982,81 @@ demo: oneGameLimit: Gelimiteerd tot één savegame customizeKeybindings: Custom sneltoetsen exportingBase: Exporteer volledige basis als afbeelding - settingNotAvailable: Niet beschikbaar in de demo. +tips: + - 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 a0c57941..19eb0ae2 100644 --- a/translations/base-no.yaml +++ b/translations/base-no.yaml @@ -1,112 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io er et spill som handler om å bygge fabrikker for å automatisere produksjon og kombinasjon av former med økende kompleksitet på et uendelig ekspanderende brett. + 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. + discordLinkShort: Offissiell Discord + intro: >- + Shapez.io er et avslappende spill der du skal bygge fabrikker + for automatisert produksjon av geometriske former. - # 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] + 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. - 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 + Og som om det ikke var nok må du også produsere eksponensielt for å tilfredsstille etterspørselen - det eneste som hjelper er skalering! - 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]! + Mens du kun produserer former i starten må du fargelegge de senere - for å gjøre dette må du hente ut og blande farger! - 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. - - 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! - - 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] - - discordLink: Offisiell Discord - Chat med meg! + 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. + Sjekk også mitt Trello-brett for hele veikartet! global: loading: Laster error: Feil - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: ett sekund siden xSecondsAgo: sekunder siden oneMinuteAgo: ett minutt siden @@ -115,14 +67,10 @@ global: xHoursAgo: timer siden oneDayAgo: en dag siden xDaysAgo: dager siden - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: t m - xMinutes: minutter - keys: tab: TAB control: CTRL @@ -130,13 +78,9 @@ global: escape: ESC shift: SHIFT space: MELLOMROM - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demo Versjon - intro: >- - Skaff deg frittstående versjon for å åpne alle funksjoner! - + intro: Skaff deg frittstående versjon for å åpne alle funksjoner! mainMenu: play: Spill changelog: Endringshistorikk @@ -144,19 +88,16 @@ mainMenu: openSourceHint: Dette spillet er åpen kildekode! discordLink: Offisiel Discord-Server helpTranslate: Hjelp oversetting! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Beklager, men spillet er kjent for å kjøre sakte i din nettleser! Skaff deg den frittstående versjonen, eller last ned Chrome for den fulle opplevelsen. - + browserWarning: Beklager, men spillet er kjent for å kjøre sakte i din + nettleser! Skaff deg den frittstående versjonen, eller last ned Chrome + for den fulle opplevelsen. savegameLevel: Nivå savegameLevelUnknown: Ukjent Nivå - continue: Fortsett newGame: Nytt Spill madeBy: Laget av subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,110 +111,99 @@ dialogs: viewUpdate: Vis Oppdatering showUpgrades: Vis Oppgraderinger showKeybindings: Se Hurtigtaster - importSavegameError: title: Importeringsfeil - text: >- - Kunne ikke importere lagringsfilen: - + text: "Kunne ikke importere lagringsfilen:" importSavegameSuccess: title: Lagringsfil importert - text: >- - Din Lagringsfil ble importert. - + text: Din Lagringsfil ble importert. gameLoadFailure: title: Lagringsfilen er ødelagt - text: >- - Kunne ikke laste inn lagringsfilen: - + 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: - + text: "Kunne ikke slette lagringsfilen:" restartRequired: title: Omstart nødvendig - text: >- - Du må starte spillet på nytt for å ta i bruk instillingene. - + text: Du må starte spillet på nytt for å ta i bruk instillingene. editKeybinding: title: Endre Hurtigtast - desc: Trykk på knappen eller museknappen du vil tildele, eller escape for å avbryte. - + desc: Trykk på knappen eller museknappen du vil tildele, eller escape for å + avbryte. resetKeybindingsConfirmation: title: Tilbakestill Hurtigtaster desc: Dette vil tilbakestille alle hurtigtaster. Er du sikker?. - keybindingsResetOk: title: Hurtigtaster tilbakestillt desc: Hurtigtastene har blitt tilbakestillt til standard! - featureRestriction: title: Demoversjon - desc: Du prøvde å benytte deg av en funksjon () som ikke er tilgjengelig i demoen. Vurder å skaffe den frittstående versjonen for den fulle opplevelsen! - + desc: Du prøvde å benytte deg av en funksjon () som ikke er + tilgjengelig i demoen. Vurder å skaffe den frittstående versjonen + for den fulle opplevelsen! oneSavegameLimit: title: Begrenset antall Lagringsfiler - desc: Du kan du ha en lagringsfil om gangen i demoversjonen. Vennligst slett den eksisterende, eller skaff den frittstående versjonen! - + desc: Du kan du ha en lagringsfil om gangen i demoversjonen. Vennligst slett den + eksisterende, eller skaff den frittstående versjonen! updateSummary: title: Ny oppdatering!! - desc: >- - Her er endringene siden sist du spilte: - + desc: "Her er endringene siden sist du spilte:" upgradesIntroduction: title: Åpne Oppgradering - desc: >- - Alle objektene du produserer kan bli brukt til å åpne oppgraderinger - Ikke ødelegg dine gamle fabrikker! + desc: Alle objektene du produserer kan bli brukt til å åpne oppgraderinger - + Ikke ødelegg dine gamle fabrikker! Oppgraderingsfanen er plassert øverst til høyre på skjermen. - massDeleteConfirm: title: Bekreft sletting - desc: >- - Du skal til å slette mange bygninger ( for å være nøyaktig)! Er du sikker på at du ønsker å gjøre dette? - + desc: Du skal til å slette mange bygninger ( for å være nøyaktig)! Er du + sikker på at du ønsker å gjøre dette? massCutConfirm: title: Bekreft Utlipping - desc: >- - Du klipper ut mange bygninger ( for å være nøyaktig)! Er du sikker på at du ønsker å gjøre dette? - + desc: Du klipper ut mange bygninger ( for å være nøyaktig)! Er du sikker + på at du ønsker å gjøre dette? blueprintsNotUnlocked: title: Ikke åpnet enda - desc: >- - Fullfør nivå 12 for å åpne blåkopier! - + desc: Fullfør nivå 12 for å åpne blåkopier! keybindingsIntroduction: title: Nyttige hurtigtaster - desc: >- - Spillet har mange hurtigtaster som gjør det enklere å bygge store fabrikker. - Her er noen få, men sørg for å sjekke ut hurtigtaster!

- CTRL + Dra: Velg et område.
- SHIFT: Hold inne for å plassere flere av en bygning.
- ALT: Inverter rettning på plasserte samlebånd.
- + desc: "Spillet har mange hurtigtaster som gjør det enklere å bygge store + fabrikker. Her er noen få, men sørg for å sjekke ut + hurtigtaster!

CTRL + + Dra: Velg et område.
SHIFT: + Hold inne for å plassere flere av en bygning.
ALT: Inverter rettning på plasserte + 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 versjonen for ubegrensede markører! - + desc: Du kan kun ha to markører i demoverjsonen. Skaff deg den frittstående + versjonen for ubegrensede markører! exportScreenshotWarning: title: Eksporter skjermbilde - desc: Du forespurte å eksportere bilde av basen din som et skjermbilde. Vær obs på at dette kan ta lang tid for en stor base, og i verste fall kræsje spillet ditt (Husk å lagre først)! + desc: Du forespurte å eksportere bilde av basen din som et skjermbilde. Vær obs + på at dette kan ta lang tid for en stor base, og i verste fall + kræsje spillet ditt (Husk å lagre først)! massCutInsufficientConfirm: title: Bekreft Utklipping - desc: Du har ikke råd til å lime inn dette området! er du sikker på at du vil klippe det ut? - + desc: Du har ikke råd til å lime inn dette området! er du sikker på at du vil + klippe det ut? + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Beveg selectBuildings: Velg område @@ -294,18 +224,9 @@ ingame: clearSelection: Fjern Valgte pipette: Pipette switchLayers: Bytt lag - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Trykk for å veksle mellom variantene. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Hastighet range: Lengde @@ -313,36 +234,21 @@ ingame: oneItemPerSecond: 1 objekt / sekund itemsPerSecond: objekter / s itemsPerSecondDouble: (x2) - tiles: ruter - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nivå completed: Fullført unlockText: Åpnet ! buttonNextLevel: Neste Nivå - - # Notifications on the lower right notifications: newUpgrade: En ny oppgradering er tilgjengelig! gameSaved: Spillet ditt er lagret. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Oppgraderinger buttonUnlock: Oppgrader - - # Gets replaced to e.g. "Tier IX" tier: Nivå - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAKS NIVÅ (Hastighet x) - - # The "Statistics" window statistics: title: Statistikk dataSources: @@ -351,55 +257,46 @@ ingame: description: Viser hva som er lagret i hovedbygningen. produced: title: Produsert - description: Viser alle objektene hele fabrikken produserer, inkluderer avanserte objekter. + description: Viser alle objektene hele fabrikken produserer, inkluderer + avanserte objekter. delivered: title: Levert description: Viser objekter som er levert til hovedbygningen. noShapesProduced: Ingen objekter har blitt produsert så langt. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Spilletid - buildingsPlaced: Bygninger beltsPlaced: Samlebånd - - buttons: - continue: Fortsett - settings: Innstillinger - menu: Tilbake til hovedmeny - - # Bottom left tutorial hints tutorialHints: title: Trenger du hjelp? showHint: Vis hint hideHint: Lukk - - # When placing a blueprint blueprintPlacer: cost: Kostnad - - # Map markers waypoints: waypoints: Markør hub: Hovedbygning - description: Venstreklikk en markør for å gå dit, høyreklikk for å slette markøren.

Trykk for å lage en markør fra nåværende sted, eller høyreklikk for å lage en markør på valgt område. + description: Venstreklikk en markør for å gå dit, høyreklikk for å slette + markøren.

Trykk for å lage en markør fra + nåværende sted, eller høyreklikk for å lage en + markør på valgt område. creationSuccessNotification: Markren ble laget. - - # Interactive tutorial interactiveTutorial: title: Opplæring hints: - 1_1_extractor: Plasser en utdrager på toppen av en sirkelform for å samle den! - 1_2_conveyor: >- - Koble utdrageren med et transportbånd til hovedbygningen!

Tips: Trykk og dra beltet med musa! - - 1_3_expand: >- - Dette er IKKE et idle-spill! Bygg flere utdragere og belter for å nå målet raskere.

Tips: Hold SHIFT for å plassere flere utdragere, og bruk R for å rotere dem. - + 1_1_extractor: Plasser en utdrager på toppen av en + sirkelform for å samle den! + 1_2_conveyor: "Koble utdrageren med et transportbånd til + hovedbygningen!

Tips: Trykk og dra + beltet med musa!" + 1_3_expand: "Dette er IKKE et idle-spill! Bygg flere utdragere + og belter for å nå målet raskere.

Tips: Hold + SHIFT for å plassere flere utdragere, og bruk + R for å rotere dem." colors: red: Rød green: Grønn @@ -414,8 +311,42 @@ ingame: title: Lag empty: Tom copyKey: Copy Key - -# All shop upgrades + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Belter, Distributører & Tunneler @@ -429,246 +360,401 @@ shopUpgrades: painting: name: Miksing & Maling description: Hastighet x → x - -# Buildings and their name / description buildings: hub: deliver: Lever toUnlock: for å låse opp levelShortcut: nivå - + endOfDemo: End of Demo belt: default: - name: &belt Samlebånd + name: Samlebånd description: Transporterer objekter, hold og dra for å plassere flere. - - miner: # Internal name for the Extractor + miner: default: - name: &miner Utdrager + name: Utdrager description: Plasser over en form eller farge for å trekke ut. - chainable: name: Utdrager (Kjede) - description: Plasser over en form eller farge for å trekke ut. Kan kobles i kjede. - - underground_belt: # Internal name for the Tunnel + description: Plasser over en form eller farge for å trekke ut. Kan kobles i + kjede. + underground_belt: default: - name: &underground_belt Tunnel - description: Lar deg bruke tuneller for å transportere objekter under bygninger og belter. - + name: Tunnel + description: Lar deg bruke tuneller for å transportere objekter under bygninger + og belter. tier2: name: Tunell Nivå II - description: Lar deg bruke tuneller for å transportere objekter under bygninger og belter. - - splitter: # Internal name for the Balancer - default: - name: &splitter Utjevner - description: Multifunksjonell - Sprer alt jevnt utover. - - compact: - name: Sammenslå (kompakt) - description: Slår sammen to belter til ett. - - compact-inverse: - name: Sammenslå (kompakt) - description: Slår sammen to belter til ett. - + description: Lar deg bruke tuneller for å transportere objekter under bygninger + og belter. cutter: default: - name: &cutter Kutter - description: Kutter objekter fra top til bunn og spytter ut begge halvdeler. Hvis du bare skal bruke den ene biten, sørg for å ødelegge den andre biten ellers vil det stoppe opp! + name: Kutter + description: Kutter objekter fra top til bunn og spytter ut begge halvdeler. + Hvis du bare skal bruke den ene biten, sørg for å + ødelegge den andre biten ellers vil det stoppe opp! quad: name: Kutter (4-Veis) - description: Kutter objekter til 4 biter. Hvis du bare skal bruke den ene biten, sørg for å ødelegge den andre biten ellers vil det stoppe opp! - + description: Kutter objekter til 4 biter. Hvis du bare skal bruke den + ene biten, sørg for å ødelegge den andre biten ellers vil det + stoppe opp! rotater: default: - name: &rotater Roter + name: Roter description: Roter former med klokken, 90 grader. ccw: name: Roter (Mot klokken) description: Roter former mot klokken, 90 grader. - fl: + rotate180: name: Rotate (180) - description: Roterer former 180 grader. - + description: Rotates shapes by 180 degrees. stacker: default: - name: &stacker Stabler - description: Stabler begge formene. Hvis de ikke kan bli stablet sidelengs, vil høyre stables over den andre. - + name: Stabler + description: Stabler begge formene. Hvis de ikke kan bli stablet sidelengs, vil + høyre stables over den andre. mixer: default: - name: &mixer Fargemikser + name: Fargemikser description: Mikser to farger sammen ved å blande de. - painter: default: - name: &painter Maler - description: &painter_desc Maler hele formen på venstre inngang med fargen fra øverste inngang. + name: Maler + description: Maler hele formen på venstre inngang med fargen fra øverste + inngang. double: name: Maler (Dobbel) - description: Maler hele formen på venstre inngang med fargen fra øverste inngang. + description: Maler hele formen på venstre inngang med fargen fra øverste + 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: *painter - description: *painter_desc - + name: Maler + description: Maler hele formen på venstre inngang med fargen fra øverste + inngang. trash: default: - name: &trash Søppelkasse - description: Tar imot former og farger fra alle sider og ødelegger de. For alltid. - - storage: - name: Lagringsboks - description: Lagrer overflødige former og farger, opp til en viss kapasitet. Kan bli brukt som mellomlagring for overflyt. + name: Søppelkasse + description: Tar imot former og farger fra alle sider og ødelegger de. For + alltid. wire: default: name: Energikabel description: Lar deg transportere energi. - advanced_processor: + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + balancer: default: - name: Fargeinverterer - description: Tar imot en farge eller form og inverterer den. - energy_generator: - deliver: Lever - toGenerateEnergy: For - default: - name: Energigenerator - description: Genererer energi ved å ta imot former. - wire_crossings: - default: - name: Kabeldeler - description: Deler en energikabel i to. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Kabelsammenslåer - description: Slår sammen to energikabler til en. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 med klokken 90 grader. - + desc: Rotereren har blitt tilgjengelig! Den roterer objekter + med klokken 90 grader. reward_painter: title: Maling - desc: >- - Maleren har blitt tilgjengelig - Hent ut fargeressurser (på samme måte som du gjør med objekter) og kombiner det med et objekt i maleren for å male de!

PS: Hvis du er fargeblind, så er det en modus for fargeblinde i instillingene! - + desc: "Maleren har blitt tilgjengelig - Hent ut fargeressurser + (på samme måte som du gjør med objekter) og kombiner det med et + objekt i maleren for å male de!

PS: Hvis du er fargeblind, så + er det en modus for fargeblinde i instillingene!" reward_mixer: title: Fargemikser - desc: Fargemikseren har blitt tilgjengelig - Kombiner to farger og bland de sammen med denne bygningen! - + desc: Fargemikseren har blitt tilgjengelig - Kombiner to farger + og bland de sammen med denne bygningen! reward_stacker: title: Sammenslåer - desc: Du kan nå slå sammen forskjellige former med sammenslåeren! Begge inngangene blir slått sammen, og hvis det er mulig blir de plassert ved siden av hverandre, de vil bil til en. Hvis ikke, blir høyre inngang plassert over venstre inngang! - + desc: Du kan nå slå sammen forskjellige former med + sammenslåeren! Begge inngangene blir slått sammen, + og hvis det er mulig blir de plassert ved siden av hverandre, de vil + bil til en. Hvis ikke, blir høyre inngang + 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 objekter under samlebånd og bygninger med den! - + desc: Tunnelen har blitt tilgjengelig - Du kan nå transportere + objekter under samlebånd og bygninger med den! reward_rotater_ccw: title: Rotering mot klokken - desc: Du har åpnte en variant av rotereren - Den tillater rotasjoner mot klokken! For å bygge den, velg rotereren og trykk 'T' for å veksle mellom variantene! - + desc: Du har åpnte en variant av rotereren - Den tillater + rotasjoner mot klokken! For å bygge den, velg rotereren og + 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 lengre rekkevidde, og du kan også blande de forskjellige tunnelene nå! - - reward_splitter_compact: - title: Kompakt Utjevning - desc: >- - Du har åpnet en variant av utjevneren - Den godtar to innganger og slår de sammen til en! - + desc: Du har åpnet en ny variant av tunnelen - Den har + lengre rekkevidde, og du kan også blande de + forskjellige tunnelene nå! reward_cutter_quad: title: 4-Veis Kutting - desc: Du har åpnet en variant av kutteren - Den lar deg dele objekter inn i fire deler istedenfor bare to! - + desc: Du har åpnet en variant av kutteren - Den lar deg dele + objekter inn i fire deler istedenfor bare to! reward_painter_double: title: Dobbel Maling - desc: Du har åpnet en variant av maleren - Den fungerer som vanlig maler, men maler to objekter om gangen, konsumerer bare en farge istedenfor to! - - reward_painter_quad: - title: 4-Veis Maling - desc: Du har åpnet en variant av maleren - Den lar deg male hver del av objektet individuelt! - + desc: Du har åpnet en variant av maleren - Den fungerer som + vanlig maler, men maler to objekter om gangen, + 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! Velg et område (Hold inne CTRL, så dra med musa), trykk så 'C' for å kopiere det.

Lime det inn er ikke gratis, du må produsere blåkopiobjekter for å få råd til det! (Det du nettop leverte). - - # Special reward, which is shown when there is no reward actually + desc: Du kan nå kopiere og lime inn deler av fabrikken din! + Velg et område (Hold inne CTRL, så dra med musa), trykk så 'C' for å + kopiere det.

Lime det inn er ikke gratis, du + må produsere blåkopiobjekter for å få råd til det! + (Det du nettop leverte). no_reward: title: Neste nivå - desc: >- - Dette nivået ga deg ingen belønning, men neste gjør det!

PS: Du burde ikke ødelegge din nåværende fabrikk - Du trenger alle de objektene senere for å åpne nye ting! - + desc: "Dette nivået ga deg ingen belønning, men neste gjør det!

PS: Du + burde ikke ødelegge din nåværende fabrikk - Du trenger + alle de objektene senere for å åpne nye + ting!" no_reward_freeplay: title: Neste nivå - desc: >- - Gratulerer!! Forresten, mer innhold er planlagt for den frittstående versjonen! - + desc: Gratulerer!! Forresten, mer innhold er planlagt for den frittstående + versjonen! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Instillinger categories: general: Generelt userInterface: Brukergrensesnitt advanced: Avansert - + performance: Performance versionBadges: dev: Utvikling staging: Iscenesettelse prod: Produksjon buildDate: Bygget - labels: uiScale: title: Grensesnittskala - description: >- - Endrer størrelsen på brukergrensesnitt. Grensesnittet vil fortsatt skaleres basert på din enhets oppløsning, men denne instillingen styrer mengden den skalerer. + description: Endrer størrelsen på brukergrensesnitt. Grensesnittet vil fortsatt + skaleres basert på din enhets oppløsning, men denne instillingen + styrer mengden den skalerer. scales: super_small: Veldig liten small: Liten regular: Vanlig large: Stor huge: Gigantisk - scrollWheelSensitivity: title: Forstørrelsessensitivitet - description: >- - Endrer hvor sensitiv forstørringen er (Enten musehjulet eller museplate). + description: Endrer hvor sensitiv forstørringen er (Enten musehjulet eller + museplate). sensitivity: super_slow: Veldig Sakte slow: Sakte regular: Vanlig fast: Raskt super_fast: Veldig Raskt - movementSpeed: title: Bevegelses hastighet - description: >- - Endrer hvor raskt bildet beveger seg når man bruker tastaturet. + description: Endrer hvor raskt bildet beveger seg når man bruker tastaturet. speeds: super_slow: Veldig Sakte slow: Sakte @@ -676,66 +762,54 @@ settings: fast: Raskt super_fast: Veldig Raskt extremely_fast: Ekstremt Raskt - language: title: Språk - description: >- - Endre språket. Alle oversettelser er bidrag ifra andre brukere og kan være ufullstendig! - + description: Endre språket. Alle oversettelser er bidrag ifra andre brukere og + kan være ufullstendig! fullscreen: title: Fullskjerm - description: >- - Det er anbefalt å spille spillet i fullskjerm for best mulig opplevelse. Kun tilgjengelig i frittstående versjon. - + description: Det er anbefalt å spille spillet i fullskjerm for best mulig + opplevelse. Kun tilgjengelig i frittstående versjon. soundsMuted: title: Skru av lyder - description: >- - Skrur av alle lydeffekter. - + description: Skrur av alle lydeffekter. musicMuted: title: Skru av Musikk - description: >- - Skrur av all musikk. - + description: Skrur av all musikk. theme: title: Spilltema - description: >- - Velg spilltema (lyst / mørk). + description: Velg spilltema (lyst / mørk). themes: dark: Mørk light: Lyst - refreshRate: title: Simuleringsmål - description: >- - Hvis du har en 144hz skjerm, endre oppdateringsfrekvensen her så vil spillet simuleres mer korrekt på høyere oppdateringsfrekvenser. Dette kan redusere FPS om din PC er for treg. - + description: Hvis du har en 144hz skjerm, endre oppdateringsfrekvensen her så + vil spillet simuleres mer korrekt på høyere + oppdateringsfrekvenser. Dette kan redusere FPS om din PC er for + treg. alwaysMultiplace: title: Plasser flere - description: >- - Hvis aktivert vil alle bygg forbli valgt etter plassering inntil du avbryter det. Dette tilsvarer å holde SHIFT nede permanent. - + description: Hvis aktivert vil alle bygg forbli valgt etter plassering inntil du + avbryter det. Dette tilsvarer å holde SHIFT nede permanent. offerHints: title: Hint & Opplæring - description: >- - Om du ønsker hint og opplæring mens du spiller. Skjuler også enkelte elementer i brukergrensesnittet inntil spesifike nivå for å enklere komme i gang med spillet. - + description: Om du ønsker hint og opplæring mens du spiller. Skjuler også + enkelte elementer i brukergrensesnittet inntil spesifike nivå + for å enklere komme i gang med spillet. enableTunnelSmartplace: title: Smarte Tuneller - description: >- - Når aktivert vil plassering av tunneler automatisk fjerne unødvendige bånd. - Dette lar deg også dra og slippe tunneler, og overflødige tunneler blir fjernet. + description: Når aktivert vil plassering av tunneler automatisk fjerne + unødvendige bånd. Dette lar deg også dra og slippe tunneler, og + overflødige tunneler blir fjernet. vignette: title: Vignett - description: >- - Aktiverer vignett som gjør hjørnene på skjermen mørkere og teksten lettere - å lese. - + description: Aktiverer vignett som gjør hjørnene på skjermen mørkere og teksten + lettere å lese. autosaveInterval: title: Autolagringsintervall - description: >- - Jsuter hvor ofte spillet lagres automatisk. Du kan også - deaktivere det fullstendig. + description: Jsuter hvor ofte spillet lagres automatisk. Du kan også deaktivere + det fullstendig. intervals: one_minute: 1 Minutt two_minutes: 2 Minutter @@ -745,32 +819,77 @@ settings: disabled: Deaktivert compactBuildingInfo: title: Kompakt Bygningsinformasjon - description: >- - Forkorter informasjonsboksen for bygninger ved å bare vise deres forhold. Ellers - vises en beskrivelse og et bilde. + description: Forkorter informasjonsboksen for bygninger ved å bare vise deres + forhold. Ellers vises en beskrivelse og et bilde. disableCutDeleteWarnings: title: Deaktiverer Utklipps- og Sletteadvarsler - description: >- - Deaktiverer advarselsmeldingen som kommer frem når du klipper ut eller sletter mer enn 100 - bygninger. - + description: Deaktiverer advarselsmeldingen som kommer frem når du klipper ut + eller sletter mer enn 100 bygninger. enableColorBlindHelper: title: Fargeblindmodus - description: Aktiverer forskjellige verktøy som lar deg spille spillet om du er fargeblind. + description: Aktiverer forskjellige verktøy som lar deg spille spillet om du er + fargeblind. rotationByBuilding: title: Roter basert på bygningstype - description: >- - Hver bygningstype husker rotasjonen du sist brukte på dee. - Dette kan være mer komfortabelt hvis du ofte veksler mellom plassering + description: Hver bygningstype husker rotasjonen du sist brukte på dee. Dette + kan være mer komfortabelt hvis du ofte veksler mellom plassering av forskjellige bygninger. - + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Hurtigtaster - hint: >- - Tips: Husk å bruke CTRL, SHIFT and ALT! De gir deg flere plasseringsmuligheter. - + hint: "Tips: Husk å bruke CTRL, SHIFT and ALT! De gir deg flere + plasseringsmuligheter." resetKeybindings: Nullstill Hurtigtaster - categoryLabels: general: Applikasjon ingame: Spill @@ -779,7 +898,6 @@ keybindings: massSelect: Velg Masse buildings: Bygningssnarvei placementModifiers: Plasseringsalternativer - mappings: confirm: Bekreft back: Tilbake @@ -789,41 +907,33 @@ keybindings: mapMoveLeft: Flytt Venstre mapMoveFaster: Beveg Raskere centerMap: Midstill Brettet - mapZoomIn: Zoom inn mapZoomOut: Zoom ut createMarker: Lag Markør - menuOpenShop: Oppgraderinger menuOpenStats: Statistikk - toggleHud: Veksle Grensesnitt toggleFPSInfo: Veksle FPS-og debuginformasjon exportScreenshot: Eksporter hele basen som et bilde - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Samlebånd + underground_belt: Tunnel + miner: Utdrager + cutter: Kutter + rotater: Roter + stacker: Stabler + mixer: Fargemikser + painter: Maler + trash: Søppelkasse rotateWhilePlacing: Roter - rotateInverseModifier: >- - Alternativ: Roter mot klokken isteden + rotateInverseModifier: "Alternativ: Roter mot klokken isteden" cycleBuildingVariants: Endre Varianter confirmMassDelete: Bekreft Massesletting pasteLastBlueprint: Lim inn forrige blåkopi cycleBuildings: Endre Bygninger - massSelectStart: Hold og dra for å starte massSelectSelectMultiple: Velg flere områder massSelectCopy: Kopier Område massSelectCut: Klipp ut Område - placementDisableAutoOrientation: Deaktiver automatisk orientering placeMultiple: Forbli i plasseringsmodus placeInverse: Inverter automatisk samlebåndsorientering @@ -832,14 +942,28 @@ keybindings: pipette: Pipette menuClose: Lukk meny switchLayers: Bytt lag - advanced_processor: Fargeinverterer - energy_generator: Energigenerator wire: Energikabel - + 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: Om dette spillet body: >- - Dette spillet er åpen kildekode og utviklet av Tobias Springer (dette er meg).

+ Dette spillet er åpen kildekode og utviklet av Tobias Springer + (dette er meg).

Hvis du ønsker å bidra, sjekk ut shapez.io på github.

@@ -848,10 +972,8 @@ about: Lydsporet er laget av Peppsen - Han er rå.

Til slutt, en stor takk til min beste venn Niklas - Uten våre factorio-økter ville ikke dette spillet ha eksistert. - changelog: title: Endringshistorikk - demo: features: restoringGames: Gjenopprette lagringsfiler @@ -859,5 +981,65 @@ demo: oneGameLimit: Begrenset til en lagringsfil customizeKeybindings: Forandre Hurtigtaster exportingBase: Eksporter hele basen som bilde - settingNotAvailable: Ikke tilgjengelig i demoversjonen. +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. diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index cb5f56de..6eb20c81 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -1,114 +1,65 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io to gra polegająca na budowaniu fabryki automatyzującej tworzenie i łączenie ze sobą coraz bardziej skomplikowanych kształtów na mapie, która nie ma końca. + 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. + discordLinkShort: Oficjalny serwer Discord + intro: >- + Shapez.io jest spokojną grą, której celem jest budowanie automatycznych + fabryk produkujących różne kształty geometryczne. - # 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] + 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. - 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ę. + 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! - 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]! + 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! - 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. - - 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! - - 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] - - discordLink: Oficjalny serwer Discord - Porozmawiaj ze mną! + 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. + Sprawdź moją tablicę Trello, by zobaczyć moje dalsze plany! global: loading: Ładowanie error: Wystąpił błąd - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. - # Translator note: We don't use SI size units for common speak, but if you want to keep it SI - # ...also, Polish has wierd nature of diffrent number naming, we have "million" and "milliard"-thing wich actually is billion in English + decimalSeparator: . suffix: thousands: tys millions: mln billions: mld trillions: bln - - # Shown for infinitely big numbers infinite: ∞ - time: - # Used for formatting past time dates oneSecondAgo: sekundę temu xSecondsAgo: sekund temu oneMinuteAgo: minutę temu @@ -117,15 +68,10 @@ global: xHoursAgo: godzin temu oneDayAgo: dzień temu xDaysAgo: dni temu - - # Short formats for times, e.g. '5h 23m' - # 2nd translator's note: Changed 'm' to 'min' to distinguish from meters & to be consistent secondsShort: s minutesAndSecondsShort: min s hoursAndMinutesShort: godz min - xMinutes: minut - keys: tab: TAB control: CTRL @@ -133,13 +79,9 @@ global: escape: ESC shift: SHIFT space: SPACJA - demoBanners: - # This is the "advertisement" shown in the main menu and other various places - title: Wersja demo - intro: >- - Kup pełną wersję gry, by odblokować więcej funkcji! - + title: Wersja demonstracyjna + intro: Kup pełną wersję gry, by odblokować więcej funkcji! mainMenu: play: Rozpocznij continue: Kontynuuj @@ -149,17 +91,13 @@ mainMenu: openSourceHint: Gra z otwartym kodem źródłowym! discordLink: Oficjalny serwer Discord! helpTranslate: Pomóż w tłumaczeniu! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Przepraszam, ale ta gra może działać wolno w Twojej przeglądarce! Kup pełną wersję gry lub pobierz przeglądarkę chrome. - + browserWarning: Przepraszam, ale ta gra może działać wolno w Twojej + przeglądarce! Kup pełną wersję gry lub pobierz przeglądarkę chrome. savegameLevel: Poziom savegameLevelUnknown: Nieznany poziom - madeBy: Gra wykonana przez subreddit: Reddit - + savegameUnnamed: Zapis bez nazwy dialogs: buttons: ok: OK @@ -173,113 +111,102 @@ dialogs: viewUpdate: Zobacz aktualizację showUpgrades: Pokaż ulepszenia showKeybindings: Pokaż Klawiszologię - importSavegameError: title: Błąd importowania - text: >- - Nie udało się zaimportować twojego zapisu gry: - + text: "Nie udało się zaimportować twojego zapisu gry:" importSavegameSuccess: title: Import zapisu - text: >- - Twoja gra została zaimportowana pomyślnie. - + text: Twoja gra została zaimportowana pomyślnie. gameLoadFailure: title: Błąd wczytywania - text: >- - Nie udało się wczytać twojego zapisu gry: - + 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: - + text: "Nie udało się usunąć zapisu:" restartRequired: title: Wymagany restart - text: >- - Gra wymaga ponownego uruchomienia w celu zastosowania nowych ustawień. - + text: Gra wymaga ponownego uruchomienia w celu zastosowania nowych ustawień. editKeybinding: title: Zmień klawiszologię - desc: Naciśnij klawisz bądź przycisk myszy, który chcesz przypisać lub wciśnij Escape, aby anulować. - + desc: Naciśnij klawisz bądź przycisk myszy, który chcesz przypisać lub wciśnij + Escape, aby anulować. resetKeybindingsConfirmation: title: Zresetuj klawiszologię - desc: Ta akcja zresetuje wszystkie ustawienia klawiszologii do domyślnych wartości. Proszę potwierdzić. - + desc: Ta akcja zresetuje wszystkie ustawienia klawiszologii do domyślnych + wartości. Proszę potwierdzić. keybindingsResetOk: title: Reset Klawiszologii desc: Klawiszologia została przywrócona do ustawień domyślnych! - featureRestriction: - title: Wersja Demo - desc: Próbujesz skorzystać z "", który nie jest dostępny w wersji demo. Rozważ zakup gry dla pełni doświadczeń! - + title: Wersja Demonstracyjna + desc: Próbujesz skorzystać z "", który nie jest dostępny w wersji demo. + 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ń obecny lub zakup pełną wersję gry! - + desc: W wersji demo możesz posiadać wyłącznie jeden zapis gry. Proszę usuń + obecny lub zakup pełną wersję gry! updateSummary: title: Nowa aktualizacja! - desc: >- - Lista zmian od Twojej ostatniej rozgrywki: - + desc: "Lista zmian od Twojej ostatniej rozgrywki:" upgradesIntroduction: title: Ulepszenia - desc: >- - Wszystkie kształty, które produkujesz, mogą zostać użyte do ulepszeń - Nie niszcz starych fabryk! - Zakładka "Ulepszenia" dostępna jest w prawym górnym rogu. - + desc: Wszystkie kształty, które produkujesz, mogą zostać użyte do ulepszeń - + Nie niszcz starych fabryk! Zakładka "Ulepszenia" + dostępna jest w prawym górnym rogu. massDeleteConfirm: title: Potwierdź Usuwanie - desc: >- - Usuwasz sporą ilość maszyn ( gwoli ścisłości)! Czy na pewno chcesz kontynuować? - + desc: Usuwasz sporą ilość maszyn ( gwoli ścisłości)! Czy na pewno chcesz + kontynuować? blueprintsNotUnlocked: title: Jeszcze Nie Odblokowane - desc: >- - Schematy nie zostały jeszcze odblokowane! Awansuj poziomami, by odblokować. - + desc: Schematy nie zostały jeszcze odblokowane! Awansuj poziomami, by + odblokować. keybindingsIntroduction: title: Przydatna Klawiszologia - desc: >- - Gra posiada sporą gamę kombinacji klawiszy upraszczających budowę dużych fabryk. - Oto kilka z nich, lecz nie zmienia to faktu iż warto sprawdzić dostępne kombinacje!

- CTRL + Przeciąganie: Zaznacz obszar do kopiowania/usuwania.
- SHIFT: Przytrzymaj, by wstawić więcej niż jeden budynek.
- ALT: Odwróć orientację stawianych taśmociągów.
- + desc: "Gra posiada sporą gamę kombinacji klawiszy upraszczających budowę dużych + fabryk. Oto kilka z nich, lecz nie zmienia to faktu iż warto + sprawdzić dostępne kombinacje!

CTRL + Przeciąganie: Zaznacz obszar do + kopiowania/usuwania.
SHIFT: + Przytrzymaj, by wstawić więcej niż jeden budynek.
ALT: Odwróć orientację stawianych + 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ą wersję gry dla nielimitowanych znaczników! - + desc: Możesz stworzyć tylko dwa własne znaczniki w wersji demo. Zakup pełną + wersję gry dla nielimitowanych znaczników! massCutConfirm: title: Potwierdź wycinanie - desc: >- - Wycinasz sporą ilość maszyn ( gwoli ścisłości)! Czy na pewno chcesz kontynuować? - + desc: Wycinasz sporą ilość maszyn ( gwoli ścisłości)! Czy na pewno chcesz + kontynuować? exportScreenshotWarning: title: Tworzenie zrzutu fabryki - desc: >- - Zamierzasz wyeksportować swoją fabrykę jako zrzut ekranu. W przypadku dużej - fabryki ta akcja może być bardzo wolna, a nawet może spowodować zawieszenie się lub awarię gry! - Czy na pewno chcesz kontynuować? - + desc: Zamierzasz wyeksportować swoją fabrykę jako zrzut ekranu. W przypadku + dużej fabryki ta akcja może być bardzo wolna, a nawet może + spowodować zawieszenie się lub awarię gry! Czy na pewno chcesz + kontynuować? massCutInsufficientConfirm: title: Potwierdź wycinanie - desc: Nie posiadasz wystarczająco kształtów schematów na wklejenie tego obszaru! Czy na pewno chcesz go wyciąć? - + desc: Nie posiadasz wystarczająco kształtów schematów na wklejenie tego obszaru! + Czy na pewno chcesz go wyciąć? + editSignal: + title: Ustaw Sygnał + descItems: "Ustaw wcześniej zdefiniowany przedmiot:" + descShortKey: ... albo wpisz kod kształtu (Który możesz + wygenerować tutaj) + renameSavegame: + title: Zmień nazwę zapisu gry + desc: Tutaj możesz zmienić nazwę zapisu gry. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Ruch selectBuildings: Zaznacz @@ -300,8 +227,6 @@ ingame: clearSelection: Wyczyść zaznaczenie pipette: Wybierz obiekt z mapy switchLayers: Przełącz warstwy - - # Names of the colors, used for the color blind mode colors: red: Czerwony green: Zielony @@ -312,18 +237,9 @@ ingame: white: Biały uncolored: Brak koloru black: Czarny - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Naciśnij , by zmieniać warianty. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Skrót: - + hotkeyLabel: "Skrót: " infoTexts: speed: Szybkość range: Zasięg @@ -331,38 +247,21 @@ ingame: oneItemPerSecond: 1 obiekt / s itemsPerSecond: obiektów / s itemsPerSecondDouble: (x2) - tiles: kafelków - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Poziom completed: Ukończono unlockText: Odblokowano ! buttonNextLevel: Następny Poziom - - # Notifications on the lower right notifications: newUpgrade: Nowe ulepszenie dostępne! gameSaved: Postęp gry został zapisany. - - # The "Upgrades" window + freeplayLevelComplete: Poziom został ukończony! shop: title: Ulepszenia buttonUnlock: Ulepsz - - # Gets replaced to e.g. "Tier IX" - # Translator note: translated into "rank" - # 2nd translator's note: I think translating this to "level" is better (and that's how Google Translate translates it :)) tier: Poziom - - # The roman numeral for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: POZIOM MAKSYMALNY (Szybkość x) - - # The "Statistics" window statistics: title: Statystyki dataSources: @@ -371,61 +270,87 @@ ingame: description: Wyświetla ilość przechowywanych kształtów w głównym budynku. produced: title: Produkowane - description: Wyświetla wszystkie kształty produkowane przez Twoją fabrykę, w tym półprodukty. + description: Wyświetla wszystkie kształty produkowane przez Twoją fabrykę, w tym + półprodukty. delivered: title: Dostarczone description: Wyświetla kształty dostarczone do budynku głównego. noShapesProduced: Brak wyprodukowanych kształtów. - - # Displays the shapes per minute, e.g. '523 / m' - # Translator note: user "min" to distinguish from "meters" - shapesPerMinute: / min - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / sek. + minute: / min. + hour: / godz. settingsMenu: playtime: Czas Gry - buildingsPlaced: Budynki beltsPlaced: Taśmociągi - - buttons: - continue: Kontynuuj - settings: Ustawienia - menu: Powrót do menu - - # Bottom left tutorial hints tutorialHints: title: Potrzebujesz pomocy? showHint: Pokaż Wskazówkę hideHint: Zamknij - - # When placing a blueprint blueprintPlacer: cost: Koszt - - # Map markers waypoints: waypoints: Znaczniki hub: Budynek Główny - description: Kliknij znacznik lewym przyciskiem myszy, by się do niego przenieść 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. - - # Shape viewer + description: Kliknij znacznik lewym przyciskiem myszy, by się do niego przenieść + lub prawym, by go usunąć.

Naciśnij , by stworzyć + marker na środku widoku lub prawy przycisk myszy, + by stworzyć na wskazanej lokacji. + creationSuccessNotification: Pomyślnie utworzono znacznik. shapeViewer: - title: Poziomy + title: Warstwy empty: Puste copyKey: Skopiuj kod - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Postaw ekstraktor na źródle kształtu koła, aby go wydobyć! - 1_2_conveyor: >- - Połącz ekstraktor taśmociągiem do głównego budynku!

Porada: Kliknij i przeciągnij taśmociąg myszką! - 1_3_expand: >- - To NIE JEST gra "do poczekania"! Buduj więcej taśmociągów i ekstraktorów, by wydobywać szybciej.

Porada: Przytrzymaj SHIFT, by postawić wiele ekstraktorów. Naciśnij R, by je obracać. -# All shop upgrades + 1_1_extractor: Postaw ekstraktor na źródle kształtu + koła, aby go wydobyć! + 1_2_conveyor: "Połącz ekstraktor taśmociągiem do głównego + budynku!

Porada: Kliknij i przeciągnij + taśmociąg myszką!" + 1_3_expand: 'To NIE JEST gra "do poczekania"! Buduj więcej + taśmociągów i ekstraktorów, by wydobywać + szybciej.

Porada: Przytrzymaj SHIFT, by + postawić wiele ekstraktorów. Naciśnij R, by je + obracać.' + connectedMiners: + one_miner: 1 ekstraktor + n_miners: ekstraktorów + limited_items: Ograniczone do + watermark: + title: Wersja demo + desc: Kliknij tutaj, aby zobaczyć co potrafi wersja Steam! + get_on_steam: Kup na Steam + standaloneAdvantages: + title: Kup pełną wersję! + no_thanks: Nie, dziękuję! + points: + levels: + title: 12 Nowych Poziomów + desc: Aby otrzymać 26 poziomów! + buildings: + title: 18 Nowych Budynków + desc: W pełni zautomatyzuj produkcję! + savegames: + title: ∞ Zapisów Gry + desc: Twórz tyle, ile potrzebujesz! + upgrades: + title: 20 Poziomów Ulepszeń + desc: To demo posiada tylko 5! + markers: + title: ∞ Znaczników + desc: Nigdy nie zgub się w swojej fabryce! + wires: + title: Przewody + desc: Całkowicie nowy wymiar! + darkmode: + title: Tryb Ciemny + desc: Przestań psuć swój wzrok! + support: + title: Wspomóż mnie + desc: Tworzę tą grę w swoim wolnym czasie! shopUpgrades: belt: name: Taśmociągi, Dystrybutory & Tunele @@ -439,260 +364,411 @@ shopUpgrades: painting: name: Miksowanie & Malowanie description: Szybkość x → x - -# Buildings and their name / description buildings: hub: deliver: Dostarcz toUnlock: by odblokować levelShortcut: Poz. - + endOfDemo: Koniec wersji demonstracyjnej belt: default: - name: &belt Taśmociąg + name: Taśmociąg description: Transportuje obiekty, przytrzymaj i przeciągnij, by postawić kilka. - - miner: # Internal name for the Extractor + miner: default: - name: &miner Ekstraktor + name: Ekstraktor description: Postaw na źródle kształtów, by je wydobyć. - chainable: name: Ekstraktor (Łańcuchowy) - description: Postaw na źródle kształtów, by je wydobyć. Mogą być połączone szeregowo. - - underground_belt: # Internal name for the Tunnel + description: Postaw na źródle kształtów, by je wydobyć. Mogą być połączone + szeregowo. + underground_belt: default: - name: &underground_belt Tunel + name: Tunel description: Pozwala na transport podziemnym tunelem. - tier2: name: Tunel Poziomu II - description: Pozwala na transport podziemnym tunelem. Nie łączy się z Tunelami Poziomu I. - - splitter: # Internal name for the Balancer - default: - name: &splitter Rozdzielacz - description: Wielofunkcyjny - Równo dystrybuuje obiekty wejściowe do wyjść. - - compact: - name: Łącznik (Kompaktowy) - description: Łączy dwa osobne taśmociągi w jeden. - - compact-inverse: - name: Łącznik (Kompaktowy) - description: Łączy dwa osobne taśmociągi w jeden. - + description: Pozwala na transport podziemnym tunelem. Nie łączy się z Tunelami + Poziomu I. cutter: default: - name: &cutter Przecinak - description: Tnie kształty i oddaje wycięte połówki. Jeśli korzystasz tylko z jednej połówki, upewnij się, że niszczysz drugą, by nie zatkać budynku! + name: Przecinak + description: Tnie kształty i oddaje wycięte połówki. Jeśli korzystasz + tylko z jednej połówki, upewnij się, że niszczysz drugą, by nie + zatkać budynku! quad: name: Przecinak (Poczwórny) - description: Tnie kształty na cztery ćwiartki. Jeśli nie korzystasz z wszystkich ćwiartek, upewnij się, że niszczysz pozostałe, by nie zatkać budynku! - + description: Tnie kształty na cztery ćwiartki. Jeśli nie korzystasz z + wszystkich ćwiartek, upewnij się, że niszczysz pozostałe, by nie + zatkać budynku! rotater: - # 2nd translator's note: CW & CCW could be changed to right & left to make the description shorter. - # Another 2nd translator's note: If you start naming the buildings as "tools to do something", keep naming them like that. Don't suddenly start naming them as "processes" they do default: - name: &rotater Obracacz + name: Obracacz description: Obraca kształt zgodnie z ruchem wskazówek zegara o 90 stopni. ccw: name: Obracacz (Przeciwny kierunek) description: Obraca kształt przeciwnie do ruchu wskazówek zegara o 90 stopni. - fl: + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Sklejacz - description: Skleja obiekty. Jeśli obiekty nie mogą być sklejone, obiekt z prawej jest nakładany na ten z lewej. - + name: Sklejacz + description: Skleja obiekty. Jeśli obiekty nie mogą być sklejone, obiekt z + prawej jest nakładany na ten z lewej. mixer: default: - name: &mixer Mieszadło Kolorów + name: Mieszadło Kolorów description: Miesza kolory dodając kolory do siebie. - painter: - # 2nd translator's note: All those buildings had different descriptions in english. Don't change them all to the same description. default: - name: &painter Malarz - description: &painter_desc Koloruje kształt za pomocą koloru dostarczonego od boku. + name: Malarz + description: Koloruje kształt za pomocą koloru dostarczonego od boku. double: name: Malarz (Podwójny) - description: Koloruje kształt za pomocą koloru dostarczonego od boku. Koloruje 2 kształty używając 1 barwnika. + description: Koloruje kształt za pomocą koloru dostarczonego od boku. Koloruje 2 + 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: *painter - description: *painter_desc - + name: Malarz + description: Koloruje kształt za pomocą koloru dostarczonego od boku. trash: default: - name: &trash Śmietnik + name: Śmietnik description: Przyjmuje obiekty z każdej ze stron i je usuwa. Na zawsze. - - storage: - name: Magazyn - description: Magazynuje obiekty, do określonego limitu. Może zostać użyty jako bramka przepełnienia. wire: default: name: Przewód energetyczny description: Pozwala na transportowanie energii. - advanced_processor: + second: + 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: Odwracacz kolorów - description: Przyjmuje barwnik lub kształt i odwraca jego kolory. - energy_generator: - deliver: Dostarcz - toGenerateEnergy: Za - default: - name: Generator energii - description: Generuje energię poprzez zużywanie kształtów. - wire_crossings: - default: - name: Rozdzielacz przewodów - description: Rozdziela przewód energetyczny na dwa. + name: Dystrybutor + description: Wielofunkcyjny - Równo rozdziela wszystkie kształty wejściowe do + wyjść. merger: - name: Łącznik przewodów - description: Łączy dwa przewody energetyczne w jeden. - + name: Łącznik (kompaktowy) + description: Łączy dwa taśmociągi w jeden. + merger-inverse: + name: Łącznik (kompaktowy) + description: Łączy dwa taśmociągi w jeden. + splitter: + name: Rozdzielacz (kompaktowy) + description: Rozdziela jeden taśmociąg na dwa. + splitter-inverse: + name: Rozdzielacz (kompaktowy) + description: Rozdziela jeden taśmociąg na dwa. + storage: + default: + 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: Skrzyżowanie przewodów + description: Pozwala na skrzyżowanie dwóch przewodów bez ich łączenia. + constant_signal: + default: + 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: 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: Analizator kształtów + description: Analizuje prawą górną ćwiartkę najniższej warstwy i zwraca jej + kształt i kolor. + comparator: + default: + 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: Wirtualny Przecinak + description: Wirtualnie przecina kształt na 2 połówki + rotater: + name: Wirtualny Obracacz + description: Wirtualnie obraca kształt, potrafi to robić w oba kierunki. + unstacker: + name: Wirtualny Odklejacz + description: Wirtualnie oddziela najwyższą warstwę na prawe wyjście i resztę na + lewe. + stacker: + name: Wirtualny Sklejacz + description: Wirtualnie skleja prawy kształt na lewy. + painter: + name: Wirtualny Malarz + description: Wirtualnie maluje kształt z dolnego wejścia barwnikiem z prawego + wejścia. + item_producer: + default: + 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: - # Those are the rewards gained from completing the store 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 stopni zgodnie ze wskazówkami zegara. - - #2nd translator's note: "Color objects" should be translated as "dye" + desc: "Odblokowano nową maszynę: Obracacz! Obraca wejście o 90 + stopni zgodnie ze wskazówkami zegara." 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 aby je pomalować!

PS: Jeśli nie widzisz kolorów, w ustawieniach znajduje się color blind mode! - + desc: "Odblokowano nową maszynę: Maszyna Malująca - wydobądź + 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ę tryb dla daltonistów!" reward_mixer: title: Mieszanie - desc: >- - Odblokowano nową maszynę: Mieszadło Kolorów - Złącz dwa kolory z pomocą modelu addytywnego dzięki tej maszynie! - + desc: "Odblokowano nową maszynę: Mieszadło Kolorów - Złącz dwa + kolory z pomocą modelu addytywnego dzięki tej + maszynie!" reward_stacker: title: Sklejanie - desc: >- - Odblokowano nową maszynę: Sklejacz - łączy dwa kształty w jeden! Jeżeli obiekty mogą zostać sklejone, są łączone w jeden kształt. Jeśli nie mogą zostać sklejone, kształt po prawej jest kładziony na ten z lewej! - + desc: "Odblokowano nową maszynę: Sklejacz - łączy dwa kształty + w jeden! Jeżeli obiekty mogą zostać sklejone, są łączone w + jeden kształt. Jeśli nie mogą zostać sklejone, + 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ć podziemne taśmociągi! - + desc: Tunel został odblokowany - Możesz teraz prowadzić + podziemne taśmociągi! reward_rotater_ccw: title: Obracanie odwrotne - desc: Odblokowano nowy wariant Obracacza - Pozwala odwracać przeciwnie do wskazówek zegara! Aby zbudować, zaznacz Obracacz i naciśnij 'T', by zmieniać warianty! - + desc: Odblokowano nowy wariant Obracacza - Pozwala odwracać + przeciwnie do wskazówek zegara! Aby zbudować, zaznacz Obracacz i + 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 zasięg i nie koliduje z trasami tych krótszych tuneli! - - reward_splitter_compact: - title: Łącznik Kompaktowy - desc: >- - Odblokowano nowy wariant rozdzielacza - Przyjmuje - przedmioty z dwóch taśmociągów i przenosi je na jeden! - + desc: Odblokowano nowy wariant tunelu - Posiada większy + zasięg i nie koliduje z trasami tych krótszych + tuneli! reward_cutter_quad: title: Przecinak Poczwórny - desc: Odblokowano nowy wariant Przecinaka - Pozwala ciąć kształty na cztery ćwiartki! - + desc: Odblokowano nowy wariant Przecinaka - Pozwala ciąć + kształty na cztery ćwiartki! reward_painter_double: title: Podwójne Malowanie - desc: Odblokowano nowy wariant Malarza - Działa jak zwykły malarz, z tą różnicą, że maluje dwa kształty na raz, pobierając wyłącznie jeden barwnik! - - reward_painter_quad: - title: Poczwórne malowanie - desc: Odblokowano nowy wariant Malarza - Pozwala malować każdą ćwiartkę kształtu na inny kolor! - + desc: Odblokowano nowy wariant Malarza - Działa jak zwykły + malarz, z tą różnicą, że maluje dwa kształty na + 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! - Zaznacz obszar (Przytrzymaj CTRL, a następnie przeciągnij myszą) i naciśnij 'C', - by go skopiować.

Wklejanie nie jest darmowe - musisz - produkować kształty schematów (te, które właśnie dostarczyłeś), - by móc wklejać! - - # Special reward, which is shown when there is no reward actually + desc: Możesz teraz kopiować i wklejać części swojej fabryki! + Zaznacz obszar (Przytrzymaj CTRL, a następnie przeciągnij myszą) i + naciśnij 'C', by go skopiować.

Wklejanie nie jest + darmowe - musisz produkować kształty + schematów (te, które właśnie dostarczyłeś), by móc wklejać! no_reward: title: Następny Poziom - desc: >- - Ten poziom nie daje nagrody, lecz kolejny już tak!

PS: Lepiej nie niszczyć istniejących fabryk - Potrzebujesz wszystkich kształtów w późniejszych etapach, by odblokować ulepszenia! - + desc: "Ten poziom nie daje nagrody, lecz kolejny już tak!

PS: Lepiej + nie niszczyć istniejących fabryk - Potrzebujesz + wszystkich kształtów w późniejszych etapach, by + odblokować ulepszenia!" no_reward_freeplay: title: Następny Poziom - desc: >- - Gratulacje! Przy okazji, więcej zawartości jest w planach dla wersji pełnej! - + desc: Gratulacje! Przy okazji, więcej zawartości jest w planach dla wersji + pełnej! + reward_balancer: + title: Dystrybutor + 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: 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: 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: Obracacz (180°) + desc: Właśnie odblokowałeś kolejny wariant obraczacza! - + Pozwala ci na obrócenie kształtu o 180 stopni! + reward_display: + 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: 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: 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: 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: 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: 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: Koniec wersji demo + desc: Dotarłeś do końca wersji demo! settings: title: Ustawienia categories: general: Ogólne userInterface: Interfejs advanced: Zaawansowane - + performance: Wydajność versionBadges: dev: Wersja Rozwojowa staging: Wersja eksperymentalna prod: Wersja Produkcyjna buildDate: Skompilowano - labels: uiScale: title: Skala Interfejsu - description: >- - Zmienia rozmiar interfejsu. Skala będzie dopasowana względem rozdzielczości Twojego ekranu. + description: Zmienia rozmiar interfejsu. Skala będzie dopasowana względem + rozdzielczości Twojego ekranu. scales: super_small: Bardzo Mała small: Mała regular: Zwykła large: Duża huge: Ogromna - scrollWheelSensitivity: title: Czułość Przybliżania - description: >- - Zmienia czułość przybliżania/oddalania. + description: Zmienia czułość przybliżania/oddalania. sensitivity: super_slow: Bardzo mała slow: Mała regular: Zwykła fast: Duża super_fast: Bardzo Duża - movementSpeed: title: Prędkość poruszania - description: >- - Zmienia, jak szybko widok porusza się, używając skrótów klawiszowych. + description: Zmienia, jak szybko widok porusza się, używając skrótów + klawiszowych. speeds: super_slow: Bardzo wolna slow: Wolna @@ -700,65 +776,52 @@ settings: fast: Szybka super_fast: Bardzo szybka extremely_fast: Ekstremalnie szybka - language: title: Język - description: >- - Zmień Język. Wszystkie tłumaczenia są tworzone przez społeczność i mogą nie być w pełni ukończone! - + description: Zmień Język. Wszystkie tłumaczenia są tworzone przez społeczność i + mogą nie być w pełni ukończone! fullscreen: title: Pełny Ekran - description: >- - Zachęcamy do gry w pełnym ekranie dla lepszej rozgrywki. Dostępne tylko w pełnej wersji gry. - + description: Zachęcamy do gry w pełnym ekranie dla lepszej rozgrywki. Dostępne + tylko w pełnej wersji gry. soundsMuted: title: Wycisz Dźwięki - description: >- - Jeżeli włączone, wycisza wszystkie efekty dźwiękowe. - + description: Jeżeli włączone, wycisza wszystkie efekty dźwiękowe. musicMuted: title: Wycisz Muzykę - description: >- - Jeżeli włączone, wycisza muzykę. - + description: Jeżeli włączone, wycisza muzykę. theme: title: Motyw Graficzny Gry - description: >- - Wybierz motyw (jasny / ciemny). + description: Wybierz motyw (jasny / ciemny). themes: dark: Ciemny light: Jasny - refreshRate: title: Częstość Odświeżania - description: >- - Jeśli posiadasz monitor z częstotliwością odświeżania 144hz, zmień tę opcje na poprawną częstotliwość odświeżania ekranu. Może to wpłynąć na FPS jeśli masz za wolny komputer. - + description: Jeśli posiadasz monitor z częstotliwością odświeżania 144hz, zmień + tę opcje na poprawną częstotliwość odświeżania ekranu. Może to + wpłynąć na FPS jeśli masz za wolny komputer. alwaysMultiplace: title: Wielokrotne budowanie - description: >- - Jeżeli włączone, nie anuluje budowy po postawieniu maszyny. Odpowiednik ciągłego trzymania klawisza SHIFT. - + description: Jeżeli włączone, nie anuluje budowy po postawieniu maszyny. + Odpowiednik ciągłego trzymania klawisza SHIFT. offerHints: title: Porady i Tutoriale - description: >- - Oferuje porady i tutoriale podczas gry. Dodatkowo chowa pewne elementy interfejsu, by ułatwić poznanie gry. - + description: Oferuje porady i tutoriale podczas gry. Dodatkowo chowa pewne + elementy interfejsu, by ułatwić poznanie gry. enableTunnelSmartplace: title: Inteligentne taśmociągi i tunele - description: >- - Gdy włączone, umieszczenie tunelu automatycznie usuwa zbędny taśmociąg. - Pozwala również budować tunele przez przeciąganie, gdyż niepotrzebne tunele zostają usunięte. + description: Gdy włączone, umieszczenie tunelu automatycznie usuwa zbędny + taśmociąg. Pozwala również budować tunele przez przeciąganie, + gdyż niepotrzebne tunele zostają usunięte. vignette: title: Winieta - description: >- - Włącza winietę - przyciemnia rogi ekranu, poprawiając czytelność tekstu. - + description: Włącza winietę - przyciemnia rogi ekranu, poprawiając czytelność + tekstu. autosaveInterval: title: Częstość auto-zapisu - description: >- - Zmienia, jak często gra automatycznie zapisuje fabrykę. - Można tą funkcję również całkowicie wyłączyć. + description: Zmienia, jak często gra automatycznie zapisuje fabrykę. Można tą + funkcję również całkowicie wyłączyć. intervals: one_minute: Co minutę two_minutes: Co 2 minuty @@ -766,35 +829,79 @@ settings: ten_minutes: Co 10 minut twenty_minutes: Co 20 minut disabled: Wyłączone - compactBuildingInfo: title: Wyłącz opis budynków - description: >- - Ukrywa opis i zdjęcie budynków w obszarze informacyjnym, pokazując jedynie - ich tytuł i specyfikacje techniczne. - + description: Ukrywa opis i zdjęcie budynków w obszarze informacyjnym, pokazując + jedynie ich tytuł i specyfikacje techniczne. disableCutDeleteWarnings: title: Wyłącz ostrzeżenia usuwania/wycinania - description: >- - Wyłącza ostrzeżenia wyświetlające się przy usuwaniu lub wycinaniu więcej niż - 100 budynków. - + description: Wyłącza ostrzeżenia wyświetlające się przy usuwaniu lub wycinaniu + więcej niż 100 budynków. enableColorBlindHelper: title: Tryb dla daltonistów - description: Włącza różne narzędzia, które pozwalają ci grać, jeśli jesteś daltonistą. + description: Włącza różne narzędzia, które pozwalają ci grać, jeśli jesteś + daltonistą. rotationByBuilding: title: Obrót według typu budynku - description: >- - Każdy typ budynku pamięta obrót, który ostatnio ustawiłeś indywidualnie. - Może to być wygodniejsze, jeśli często przełączasz się między umieszczaniem - różne typy budynków. - + description: Każdy typ budynku pamięta obrót, który ostatnio ustawiłeś + indywidualnie. Może to być wygodniejsze, jeśli często + przełączasz się między umieszczaniem różne typy budynków. + soundVolume: + title: Głośność dźwięków + description: Ustaw głośnośc efektów dźwiękowych + musicVolume: + title: Głośnosć muzyki + description: Ustaw głośność muzyki + lowQualityMapResources: + 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: Wyłącz siatkę + description: Wyłączenie siatki może pomóc z wydajnością. Oprócz tego, poprawia + wygląd gry! + clearCursorOnDeleteWhilePlacing: + 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: 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: 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: 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: 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: 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Klawiszologia - hint: >- - Wskazówka: Upewnij się, że wykorzystujesz CTRL, SHIFT i ALT! Pozwalają na różne metody kładzenia elementów. + hint: "Wskazówka: Upewnij się, że wykorzystujesz CTRL, SHIFT i ALT! Pozwalają na + różne metody kładzenia elementów." resetKeybindings: Zresetuj Klawiszologię - categoryLabels: general: Aplikacja ingame: Gra @@ -803,7 +910,6 @@ keybindings: massSelect: Zbiorowe Zaznaczenie buildings: Skróty Budynków placementModifiers: Modyfikatory Stawiania - mappings: confirm: Potwierdź back: Wstecz @@ -813,39 +919,30 @@ keybindings: mapMoveLeft: Ruch w lewo mapMoveFaster: Przyspiesz ruch centerMap: Wyśrodkuj Mapę - mapZoomIn: Przybliżenie mapZoomOut: Oddalenie createMarker: Stwórz Znacznik - menuOpenShop: Ulepszenia menuOpenStats: Statystyki - toggleHud: Przełącz widoczność interfejsu toggleFPSInfo: Pokaż Licznik FPS i informacje do debugowania - - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Taśmociąg + underground_belt: Tunel + miner: Ekstraktor + cutter: Przecinak + rotater: Obracacz + stacker: Sklejacz + mixer: Mieszadło Kolorów + painter: Malarz + trash: Śmietnik rotateWhilePlacing: Obróć - rotateInverseModifier: >- - Modyfikator: Obróć Odwrotnie + rotateInverseModifier: "Modyfikator: Obróć Odwrotnie" cycleBuildingVariants: Zmień Wariant confirmMassDelete: Potwierdź usuwanie cycleBuildings: Zmień Budynek - massSelectStart: Przytrzymaj i przeciągnij, by zaznaczyć massSelectSelectMultiple: Zaznacz kilka obszarów massSelectCopy: Skopiuj obszar - placementDisableAutoOrientation: Wyłącz automatyczną orientację placeMultiple: Pozostań w trybie stawiania placeInverse: Odwróć automatyczną orientację taśmociągów @@ -853,27 +950,43 @@ keybindings: massSelectCut: Wytnij obszar exportScreenshot: Wyeksportuj całą fabrykę jako zrzut ekranu lockBeltDirection: Tryb planowania taśmociągu - switchDirectionLockSide: >- - Planowanie taśmociągu: Zmień stronę + switchDirectionLockSide: "Planowanie taśmociągu: Zmień stronę" pipette: Wybieranie obiektów z mapy menuClose: Zamknij Menu switchLayers: Przełącz warstwy - advanced_processor: Kolor Falownika - energy_generator: Generator Energii wire: Przewód Energetyczny - + 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 Tobiasa Springera (to ja).

- Jeżeli chcesz pomóc w rozwoju gry, sprawdź repozytorium shapez.io na Githubie.

- Ta gra nie byłaby możliwa bez wspaniałej społeczności Discord skupionej na moich grach - Naprawdę powinieneś dołączyć do mojego serwera Discord!

- Ścieżka dźwiękowa tej gry została stworzona przez Peppsena - Jest niesamowity.

- Na koniec, wielkie dzięki mojemu najlepszemu przyjacielowi: Niklas - Bez naszego wspólnego grania w Factorio ta gra nigdy by nie powstała. - + body: 'Ta gra jest open-source. Rozwijana jest przez Tobiasa Springera + (to ja).

Jeżeli chcesz pomóc w rozwoju gry, sprawdź repozytorium shapez.io na + Githubie.

Ta gra nie byłaby możliwa bez wspaniałej + społeczności Discord skupionej na moich grach - Naprawdę powinieneś + dołączyć do mojego serwera + Discord!

Ścieżka dźwiękowa tej gry została stworzona przez + Peppsena - Jest niesamowity.

Na koniec, + wielkie dzięki mojemu najlepszemu przyjacielowi: Niklas - Bez + naszego wspólnego grania w Factorio ta gra nigdy by nie powstała.' changelog: title: Dziennik zmian - demo: features: restoringGames: Przywracanie zapisów gry @@ -881,5 +994,77 @@ demo: oneGameLimit: Limit jednego zapisu gry customizeKeybindings: Personalizowanie Klawiszologii exportingBase: Eksportowanie całej fabryki jako zrzut ekranu - settingNotAvailable: Niedostępne w wersji demo. +tips: + - 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 3a4fef2c..091adb32 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -1,114 +1,62 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: Shapez.io é um jogo sobre construir fábricas, automatizando a criação e combinação de formas cada vez mais complexas num mapa infinito. + 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. + discordLinkShort: Discord Oficial + intro: >- + Shapez.io é um jogo relaxante no qual você deve construir fábricas para + produzir formas geométricas automaticamente. - # This is the text shown above the Discord link - discordLink: Discord Oficial - Converse comigo! + Conforme os níveis aumentam, as formas se tornam mais complexas, e você terá que explorar o mapa infinito. - # 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] + Como se já não bastasse, sua produção deve crescer exponencialmente para satisfazer a demanda - a única solução é expandir! - Shapez.io é um jogo sobre construir fábricas, automatizando a criação e combinação de formas cada vez mais complexas num mapa infinito. + Enquanto no começo você apenas processa as formas, mais a frente você deve pintá-las - para isso você deve extrair e misturar cores! - Após a entrega das formas requisitadas, você avançará no jogo e desbloqueará melhorias para acelerar sua produção. - - 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]! - - 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. - - 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 além disso 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 tem código aberto![/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] + 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. + Cheque minha lousa no trello para a linha do tempo completa! global: loading: Carregando error: Erro - - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "." - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider: . decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: K millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: um segundo atrás xSecondsAgo: segundos atrás oneMinuteAgo: um minuto atrás @@ -117,14 +65,10 @@ global: xHoursAgo: horas atrás oneDayAgo: um dia atrás xDaysAgo: dias atrás - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minutos - keys: tab: TAB control: CTRL @@ -132,13 +76,9 @@ global: escape: ESC shift: Shift space: Espaço - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Versão Demo - intro: >- - Pegue a versão completa para desbloquear todas os recursos! - + intro: Compre a versão completa para desbloquear todas os recursos! mainMenu: play: Jogar continue: Continuar @@ -150,14 +90,11 @@ mainMenu: discordLink: Discord oficial helpTranslate: Ajude a traduzir! madeBy: Feito por - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Desculpe, o jogo fica lento em seu navegador! Compre a versão completa ou baixe o Chrome para obter uma experiência completa. - + browserWarning: O jogo pode ficar lento em seu navegador! Compre a versão + completa ou baixe o Chrome para obter uma experiência completa. savegameLevel: Nível savegameLevelUnknown: Nível desconhecido - + savegameUnnamed: Sem nome dialogs: buttons: ok: OK @@ -171,112 +108,97 @@ dialogs: viewUpdate: Atualizações showUpgrades: Melhorias showKeybindings: Controles - importSavegameError: title: Erro de importação - text: >- - Houve uma falha ao importar seu jogo salvo: - + text: "Houve uma falha ao importar seu jogo salvo:" importSavegameSuccess: title: Jogo salvo importado - text: >- - Seu jogo salvo foi importado com sucesso. - + text: Seu jogo salvo foi importado com sucesso. gameLoadFailure: title: Jogo salvo corrompido - text: >- - Houve uma falha ao carregar seu jogo salvo: - + 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: - + text: "Houve uma falha ao deletar seu jogo salvo:" restartRequired: title: Reinicialização necessária - text: >- - Você precisa reiniciar o jogo para aplicar as mudanças. - + text: Você precisa reiniciar o jogo para aplicar as mudanças. editKeybinding: title: Alterar tecla desc: Pressione a tecla que deseja vincular, ou ESC para cancelar. - resetKeybindingsConfirmation: 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! - + 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 - desc: Você pode ter apenas um jogo salvo por vez na versão demo. Remova o existente ou obtenha a versão completa! - + 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: title: Nova Atualização! - desc: >- - Aqui estão as alterações desde a última vez que você jogou: - + desc: "Aqui estão as alterações desde a última vez que você jogou:" upgradesIntroduction: title: Desbloquear melhorias - desc: >- - Todas as formas que você produz podem ser usadas para desbloquear melhorias - Não destrua suas antigas fábricas!! - O guia de melhorias pode ser encontrado no canto superior direito da tela. - + desc: Todas as formas que você produz podem ser usadas para desbloquear + melhorias - Não destrua suas antigas fábricas!! O + guia de melhorias pode ser encontrado no canto superior direito da + tela. massDeleteConfirm: title: Deletar? - desc: >- - Você está deletando vários objetos ( para ser exato)! Você quer continuar? - + desc: Você está deletando vários objetos ( para ser exato)! Você quer + continuar? massCutConfirm: title: Confirmar corte? - desc: >- - Você está cortando vários objetos ( para ser exato)! Você quer continuar? - + desc: Você está cortando vários objetos ( para ser exato)! Você quer + continuar? massCutInsufficientConfirm: title: Confirmar Corte? - desc: >- - You can not afford to paste this area! Are you sure you want to cut it? - + 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 desbloqueá-los. - + desc: Os projetos ainda não foram desbloqueados! Complete mais níveis para + desbloqueá-los. keybindingsIntroduction: title: Teclas úteis - desc: >- - Este jogo possui muitas combinações de teclas que facilitam a construção de grandes fábricas - Aqui estão algumas, certifique-se de verificar as combinações de teclas!

- CTRL + Arrastar: Seleciona área para copiar/deletar.
- SHIFT: Mantenha pressionado para colocar várias construções.
- ALT: Inverte as posições.
- + desc: "Este jogo possui muitas combinações de teclas que facilitam a construção + de grandes fábricas Aqui estão algumas, certifique-se de + verificar as combinações de teclas!

CTRL + Arrastar: Seleciona área para + copiar/deletar.
SHIFT: Mantenha + pressionado para colocar várias construções.
ALT: Inverte as posições.
" createMarker: title: Nova Marcação 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! - + desc: Você só pode criar dois marcadores na versão demo. Adquira a versão + completa para marcadores ilimitados! exportScreenshotWarning: title: Exportar captura de tela - desc: Você está prestes a exportar uma captura de tela da sua base. Note que isso pode ser bastante lento para uma base grande, e até mesmo pode travar o jogo! - + desc: Você está prestes a exportar uma captura de tela da sua base. Note que + isso pode ser bastante lento para uma base grande, e até mesmo pode + travar o jogo! + editSignal: + 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: Renomear Save + desc: Você pode renomear seu save aqui. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Mover selectBuildings: Selecionar área @@ -297,8 +219,6 @@ ingame: clearSelection: Limpar Seleção pipette: Conta-Gotas switchLayers: Trocar Camadas - - # Names of the colors, used for the color blind mode colors: red: Vermelho green: Verde @@ -309,18 +229,9 @@ ingame: white: Branco black: Preto uncolored: Sem cor - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Aperte para variações. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Velocidade range: Distância @@ -328,36 +239,21 @@ ingame: oneItemPerSecond: 1 item / segundo itemsPerSecond: itens / s itemsPerSecondDouble: (x2) - tiles: tiles - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nível completed: Concluído unlockText: Desbloqueado ! buttonNextLevel: Próximo Nível - - # Notifications on the lower right notifications: newUpgrade: Nova melhoria disponível! gameSaved: Seu jogo foi salvo. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Melhorias buttonUnlock: Melhorar - - # Gets replaced to e.g. "Tier IX" tier: Nível - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: NÍVEL MÁXIMO (Velocidade x) - - # The "Statistics" window statistics: title: Estatísticas dataSources: @@ -366,62 +262,87 @@ ingame: description: Exibindo a quantidade de formas armazenadas no seu HUB. produced: title: Produção - description: Exibindo todas as formas que toda a sua fábrica produz, incluindo produtos intermediários.. + description: Exibindo todas as formas que toda a sua fábrica produz, incluindo + produtos intermediários.. delivered: title: Entregue description: Exibindo formas entregues no seu HUB. noShapesProduced: Nenhuma forma foi produzida até o momento. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Tempo de Jogo - buildingsPlaced: Construções beltsPlaced: Esteiras - - buttons: - continue: Continuar - settings: Configurações - menu: Voltar ao menu - - # Bottom left tutorial hints tutorialHints: title: Quer ajuda? showHint: Mostrar dica hideHint: Esconder dica - - # When placing a blueprint blueprintPlacer: cost: Custo - - # Map markers waypoints: waypoints: Marcadores hub: HUB - description: Clique com o botão esquerdo do mouse em um marcador para pular, clique com o botão direito do mouse para excluí-lo.

Pressione para criar um marcador à partir da exibição atual ou clique com o botão direito do mouse para criar um marcador no local selecionado. + description: Clique com o botão esquerdo do mouse em um marcador para pular, + clique com o botão direito do mouse para excluí-lo.

+ Pressione para criar um marcador à partir da exibição + atual ou clique com o botão direito do mouse para + criar um marcador no local selecionado. creationSuccessNotification: Marcador criado. - - # Shape viewer shapeViewer: title: Camadas empty: Vazio copyKey: Copiar Chave - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Coloque um extrator em cima de uma fonte de círculo para extraí-lo! - 1_2_conveyor: >- - Conecte o extrator com uma esteira transportadora até a sua base!

Dica, clique e arraste a esteira com o mouse! - - 1_3_expand: >- - Este NÃO é um jogo idle! Construa mais extratores e esteiras para concluir o objetivo mais rapidamente.

Dica, segure SHIFT para colocar vários extratores e use R para girá-los. - -# All shop upgrades + 1_1_extractor: Coloque um extrator em cima de uma fonte + de círculo para extraí-lo! + 1_2_conveyor: Conecte o extrator com uma esteira transportadora + até a sua base!

Dica, clique e arraste a + esteira com o mouse! + 1_3_expand: Este NÃO é um jogo idle! Construa mais extratores e + esteiras para concluir o objetivo mais rapidamente.

Dica, + segure SHIFT para colocar vários extratores e + use R para girá-los. + connectedMiners: + one_miner: 1 Extrator + n_miners: Extratores + limited_items: Limite de + watermark: + title: Versão Demo + desc: Clique aqui para ver as vantagens da versão completa! + get_on_steam: Adquira na Steam + standaloneAdvantages: + title: Adquira a versão completa! + no_thanks: Não, obrigado! + points: + levels: + title: 12 Novos Níveis + desc: Para um total de 26 novos níveis! + buildings: + title: 18 Novas Construções + desc: Automatize sua fábrica inteira! + savegames: + title: Saves ∞ + desc: Quantos o seu coração mandar! + upgrades: + title: 20 Níveis de Melhorias + desc: Essa demo tem apenas 5! + markers: + title: Marcadores ∞ + desc: Nunca se perca na sua fábrica! + wires: + title: Fiação + desc: Uma dimensão completamente nova! + darkmode: + title: Modo Escuro + desc: Não machuque mais seus olhos! + support: + title: Me ajuda + desc: Eu desenvolvo o jogo no meu tempo livre! shopUpgrades: belt: name: Esteiras, Distribuidores e Túneis @@ -435,246 +356,401 @@ shopUpgrades: painting: name: Mistura de cores e Pintura description: Velocidade x → x - -# Buildings and their name / description buildings: hub: deliver: Entregue toUnlock: para desbloquear levelShortcut: LVL - + endOfDemo: Fim da Demo belt: default: - name: &belt Esteira Transportadora - description: Transporta itens; mantenha pressionado e arraste para colocar vários. - + name: Esteira Transportadora + description: Transporta itens; mantenha pressionado e arraste para colocar + vários. wire: default: - name: &wire Fio de Energia + name: Fio de Energia description: Permite transportar energia. - - miner: # Internal name for the Extractor + second: + 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: &miner Extrator + name: Extrator description: Coloque sobre uma forma ou cor para extraí-la. - chainable: name: Extrator (em Cadeia) - description: Coloque sobre uma forma ou cor para extraí-la. Pode ser ligado a outros extratores. - - underground_belt: # Internal name for the Tunnel + description: Coloque sobre uma forma ou cor para extraí-la. Pode ser ligado a + outros extratores. + underground_belt: default: - name: &underground_belt Túnel + name: Túnel description: Permite transportar recursos por baixo de construções e esteiras. - tier2: name: Túnel Classe II - description: Permite transportar recursos por baixo de construções e outras esteiras. - - splitter: # Internal name for the Balancer - default: - name: &splitter Distribuidor - description: Multifuncional - Distribui uniformemente todas as entradas em todas as saídas. - - compact: - name: Misturador (compacto) - description: Une duas esteiras transportadoras em uma. - - compact-inverse: - name: Misturador (compacto) - description: Une duas esteiras transportadoras em uma. - + description: Permite transportar recursos por baixo de construções e outras + esteiras. cutter: default: - name: &cutter Cortador - description: Corta as formas verticalmente e produz as duas metades. Se você usar apenas uma parte, não se esqueça de destruir a outra parte, ou ela irá parar a produção! + name: Cortador + description: Corta as formas verticalmente e produz as duas metades. Se + você usar apenas uma parte, não se esqueça de destruir a outra + parte, ou ela irá parar a produção! quad: name: Cortador (Quádruplo) - description: Corta as formas em quatro partes. Se você usar apenas uma parte, não se esqueça de destruir as outras, ou ela irá parar a produção! - - advanced_processor: - default: - name: &advanced_processor Inversor de Cor - description: Aceita uma cor ou forma e a inverte. - + description: Corta as formas em quatro partes. Se você usar apenas uma + parte, não se esqueça de destruir as outras, ou ela irá parar a + produção! rotater: default: - name: &rotater Rotacionador + name: Rotacionador description: Gira as formas no sentido horário em 90 graus. ccw: name: Rotacionador (Anti-horário) description: Gira as formas no sentido anti-horário em 90 graus. - fl: + rotate180: name: Rotacionador (180) description: Gira as formas em 180 graus. - stacker: default: - name: &stacker Empilhador - description: Empilha os dois itens. Se eles não puderem ser unidos, o item direito será colocado acima do item esquerdo. - + name: Empilhador + description: Empilha os dois itens. Se eles não puderem ser unidos, o item + direito será colocado acima do item esquerdo. mixer: default: - name: &mixer Misturador de Cores + name: Misturador de Cores description: Mistura duas cores usando mistura aditiva. - painter: default: - name: &painter Pintor - description: &painter_desc Colore a forma inteira na entrada esquerda com a cor da entrada direita. - + name: Pintor + description: Colore a forma inteira na entrada esquerda com a cor da entrada + direita. mirrored: - name: *painter - description: *painter_desc - + name: Pintor + description: Colore a forma inteira na entrada esquerda com a cor da entrada + direita. double: name: Pintor (Duplo) description: Colore as formas na entrada esquerda com a cor da entrada superior. quad: name: Pintor (Quádruplo) - description: Permite colorir cada quadrante da forma com uma cor diferente. - + 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: &trash Lixo + name: Lixo description: Aceita qualquer item e os destrói. PARA SEMPRE. - - storage: - name: Estoque - description: Armazena itens em excesso, até uma determinada capacidade. Pode ser usado como uma eclusa. - - energy_generator: - deliver: Entregar - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: Para - + balancer: default: - name: &energy_generator Gerador de Energia - description: Consome formas para gerar energia. - - wire_crossings: - default: - name: &wire_crossings Divisor de Fios - description: Divide um fio de energia em dois. - + name: Balanceador + description: Multifuncional - Distribui igualmente todas as entradas para todas + as saídas. merger: - name: Misturador de Fios - description: Une dois fios de energia em um. - + name: Unificador (compacto) + description: Une duas esteiras em uma. + merger-inverse: + name: Unificador (compacto) + description: Une duas esteiras em uma. + splitter: + name: Divisor (compacto) + description: Divide uma esteira em duas. + splitter-inverse: + name: Divisor (compacto) + description: Divide uma esteira em duas. + storage: + default: + 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: Cruzamento de Fios + description: Permite cruzar dois fios sem conectá-los. + constant_signal: + default: + name: Sinal Constante + description: Emite um sinal constante, que pode ser uma forma, cor ou binário (1 + / 0). + lever: + default: + 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: 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: 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: 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: 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: 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: 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: 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: Conecte um sinal para exibí-lo no display - Pode ser uma forma, cor + ou binário. + reader: + default: + 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: Analizador de Formas + description: Analiza o quadrante superior direito da camada mais baixa da forma + e fornece sua forma e cor. + comparator: + default: + 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: Cortador Virtual + description: Corta virtualmente as formas em duas metades. + rotater: + name: Rotacionador Virtual + description: Rotaciona virtualmente a forma, tanto no sentido horário quanto no + anti-horário. + unstacker: + name: Separador Virtual + description: Extrai virtualmente a camada mais acima para a saída direita e as + restantes para a esquerda. + stacker: + name: Empilhador Virtual + description: Empilha virtualmente a forma da direita em cima da forma da + esquerda. + painter: + name: Pintor Virtual + description: Pinta virtualmente a forma da entrada inferior com a forma da + entrada direita. + item_producer: + default: + 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: - # Those are the rewards gained from completing the store 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 sentido horário em 90 graus. - + desc: O rotacionador foi desbloqueado! Gira as formas no + sentido horário em 90 graus. reward_painter: title: Pintura - desc: >- - O Pintor foi desbloqueado - Extraia alguns pigmentos coloridos (assim como você fez com as formas) e combine-os com uma forma no pintor para colorí-las!

PS: Se for daltônico, existe um modo daltônico nas definições! - + desc: "O Pintor foi desbloqueado - Extraia alguns pigmentos + coloridos (assim como você fez com as formas) e combine-os com uma + forma no pintor para colorí-las!

PS: Se for daltônico, existe + um modo daltônico nas definições!" reward_mixer: title: Misturando cores - desc: O misturador foi desbloqueado - combine duas cores usando mistura aditiva com esta construção! - + desc: O misturador foi desbloqueado - combine duas cores usando + mistura aditiva com esta construção! reward_stacker: title: Empilhador - desc: Agora você pode combinar formas com o empilhador! Ambas as entradas são combinadas e, se puderem ser colocadas próximas uma da outra, serão fundidas. Caso contrário, a entrada direita é empilhada em cima da entrada esquerda! - + desc: Agora você pode combinar formas com o empilhador! Ambas + as entradas são combinadas e, se puderem ser colocadas próximas uma + da outra, serão fundidas. Caso contrário, a entrada + direita é empilhada em cima da entrada esquerda! reward_splitter: - title: Distribuidor - 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 itens abaixo do solo! - + desc: O túnel foi desbloqueado - Agora você pode transportar + itens abaixo do solo! reward_rotater_ccw: title: Rotação anti-horária - desc: Você desbloqueou uma variante do rotacionador - permite girar no sentido anti-horário! Para construí-lo, selecione o rotacionador e pressione 'T' para alternar suas variantes! - + desc: Você desbloqueou uma variante do rotacionador - permite + girar no sentido anti-horário! Para construí-lo, selecione o + rotacionador e pressione 'T' para alternar suas + 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 maior alcance, e também pode atravessar outros túneis na mesma linha! - - reward_splitter_compact: - title: Distribuidor compacto - desc: >- - Você desbloqueou uma variante compacta do Distribuidor - ele aceita duas entradas e as une em uma! - + desc: Você desbloqueou uma nova variante do túnel - ele tem um + maior alcance, e também pode atravessar outros + túneis na mesma linha! reward_cutter_quad: title: Cortador quádruplo - desc: Você desbloqueou uma variante do cortador - permite cortar formas em quatro partes em vez de apenas duas! - + desc: Você desbloqueou uma variante do cortador - permite + cortar formas em quatro partes em vez de apenas + duas! reward_painter_double: title: Pintura dupla - desc: Você desbloqueou uma variante do pintor - funciona como o pintor regular, mas processa duas formas ao mesmo tempo, consumindo apenas uma cor em vez de duas! - - reward_painter_quad: - title: Pintura quádrupla - desc: Você desbloqueou uma variante do pintor - permite pintar cada parte da forma individualmente! - + desc: Você desbloqueou uma variante do pintor - funciona como o + pintor regular, mas processa duas formas ao mesmo + tempo, consumindo apenas uma cor em vez de duas! reward_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! Selecione uma área (mantenha pressionada a tecla CTRL e arraste com o mouse) e pressione 'C' para copiá-la.

Colar não é de graça, é necessário produzir formas do projeto para pagar! (Aquelas que você acabou de entregar). - - # Special reward, which is shown when there is no reward actually + desc: Agora você pode copiar e colar partes de sua fábrica! + Selecione uma área (mantenha pressionada a tecla CTRL e arraste com + o mouse) e pressione 'C' para copiá-la.

Colar não é + de graça, é necessário produzir formas do + projeto para pagar! (Aquelas que você acabou de entregar). no_reward: title: Próximo nível - desc: >- - Este nível não lhe deu nenhuma recompensa, mas em breve?!

PS: Melhor não destruir sua fábrica existente - Você precisa de todas essas formas posteriormente mais tarde para desbloquear atualizações! - + desc: "Este nível não lhe deu nenhuma recompensa, mas em breve?!

PS: + Melhor não destruir sua fábrica existente - Você precisa de + todas essas formas posteriormente mais tarde para + desbloquear atualizações!" no_reward_freeplay: title: Próximo nível - desc: >- - Parabéns! Aliás, mais conteúdo vindo na versão completa! - + desc: Parabéns! Aliás, mais conteúdo vindo na versão completa! + reward_balancer: + title: Balanceador + 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: Unificador Compacto + desc: Você desbloqueou uma variante unificadora do + balanceador - Ele aceita duas entradas e as junta + em uma esteira! + reward_belt_reader: + 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: 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: "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: 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: 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: 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: 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: 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: Fim da Demo + desc: Você chegou no fim da versão demo! settings: title: Opções categories: general: Geral userInterface: Interface de Usuário advanced: Avançado - + performance: Performance versionBadges: dev: Desenvolvedor staging: Teste prod: Produção buildDate: Compilado - labels: uiScale: title: Fonte - description: >- - Altera o tamanho da fonte do usuário. A interface ainda será dimensionada com base na resolução do dispositivo, mas essa configuração controla a escala do texto. + description: Altera o tamanho da fonte do usuário. A interface ainda será + dimensionada com base na resolução do dispositivo, mas essa + configuração controla a escala do texto. scales: super_small: Super Pequeno small: Pequeno regular: Normal large: Grande huge: Gigante - autosaveInterval: - title: Intervalo de save automático - description: >- - Controla a frequência com que o jogo salva automaticamente. Você também pode desativá-lo totalmente aqui. - + title: Intervalo de autosave. + description: Controla a frequência com que o jogo salva automaticamente. Você + também pode desativá-lo completamente por aqui. intervals: one_minute: 1 Minuto two_minutes: 2 Minutos @@ -682,22 +758,18 @@ settings: ten_minutes: 10 Minutos twenty_minutes: 20 Minutos disabled: Desativado - scrollWheelSensitivity: title: Sensibilidade do zoom - description: >- - Altera a sensibilidade do zoom (roda do mouse ou touchpad). + description: Altera a sensibilidade do zoom (roda do mouse ou touchpad). sensitivity: super_slow: Super Lento slow: Lento regular: Normal fast: Rápido super_fast: Super Rápido - movementSpeed: title: Velocidade da câmera - description: >- - Altera a velocidade com que a câmera se move com o teclado. + description: Altera a velocidade com que a câmera se move com o teclado. speeds: super_slow: Super Lento slow: Lento @@ -705,87 +777,128 @@ settings: fast: Rápido super_fast: Super Rápido extremely_fast: Extremamente Rápido - language: title: Idioma - description: >- - Altera o idioma. Todas as traduções são contribuições de usuários e podem estar incompletas! - + description: Altera o idioma. Todas as traduções são contribuições de usuários e + podem estar incompletas! enableColorBlindHelper: title: Modo daltônico. - description: >- - Habilita várias ferramentas que te permitem jogar se você é daltônico. - + description: Habilita várias ferramentas que te permitem jogar se você é + daltônico. fullscreen: title: Tela Cheia - description: >- - É recomendado jogar o jogo em tela cheia para obter a melhor experiência. Disponível apenas na versão completa. - + description: É recomendado jogar o jogo em tela cheia para obter a melhor + experiência. Disponível apenas na versão completa. soundsMuted: title: Som - description: >- - Se ligado, o jogo fica mudo. - + description: Se ligado, o jogo fica mudo. musicMuted: title: Música - description: >- - Se ligado, a música fica muda. - + description: Se ligado, a música fica muda. theme: title: Tema - description: >- - Escolha o tema entre (Claro / Escuro). + description: Escolha o tema entre (Claro / Escuro). themes: dark: Escuro light: Claro - refreshRate: title: Frequência - description: >- - Se você possui um monitor de 144 hz, altere a taxa de atualização aqui para que o jogo seja simulado corretamente com taxas de atualização mais altas. Isso diminuir o FPS consideravelmente se o computador for muito lento. - + description: Se você possui um monitor de 144 hz, altere a taxa de atualização + aqui para que o jogo seja simulado corretamente com taxas de + atualização mais altas. Isso diminuir o FPS consideravelmente se + o computador for muito lento. alwaysMultiplace: title: Posicionamento Múltiplo - description: >- - Se ativado, todas as construções permanecerão selecionadas após o posicionamento até que você a cancele. Isso é equivalente a pressionar SHIFT permanentemente. - + description: Se ativado, todas as construções permanecerão selecionadas após o + posicionamento até que você a cancele. Isso é equivalente a + pressionar SHIFT permanentemente. offerHints: title: Dicas e Tutoriais - description: >- - Se ativado, oferece dicas e tutoriais enquanto se joga. Além disso, esconde certos elementos da interface até certo ponto, para facilitar o começo do jogo. - + description: Se ativado, oferece dicas e tutoriais enquanto se joga. Além disso, + esconde certos elementos da interface até certo ponto, para + facilitar o começo do jogo. enableTunnelSmartplace: title: Túneis Inteligentes - description: >- - Quando colocados, irão remover automaticamente esteiras desnecessárias. Isso também permite arrastar túneis e túneis em excesso serão removidos. - + description: Quando colocados, irão remover automaticamente esteiras + desnecessárias. Isso também permite arrastar túneis e túneis em + excesso serão removidos. vignette: title: Vinheta - description: >- - Habilita o modo vinheta que escurece os cantos da tela e facilita a leitura do texto. - + description: Habilita o modo vinheta que escurece os cantos da tela e facilita a + leitura do texto. rotationByBuilding: title: Rotação por tipo de construção - description: >- - Cada tipo de construção lembra a rotação que você definiu pela última vez individualmente. Isso pode ser mais confortável se você alternar frequentemente entre a colocação de diferentes tipos de construção. - + description: Cada tipo de construção lembra a rotação que você definiu pela + última vez individualmente. Isso pode ser mais confortável se + você alternar frequentemente entre a colocação de diferentes + tipos de construção. compactBuildingInfo: title: Informações compactas sobre construções - description: >- - Reduz as caixas de informações dos construções, mostrando apenas suas proporções. Caso contrário, uma descrição e imagem são mostradas. - + description: Reduz as caixas de informações dos construções, mostrando apenas + suas proporções. Caso contrário, uma descrição e imagem são + mostradas. disableCutDeleteWarnings: title: Desativar avisos de recorte / exclusão - description: >- - Desativa as caixas de diálogo de aviso exibidas ao cortar / excluir mais de 100 entidades. - + description: Desativa as caixas de diálogo de aviso exibidas ao cortar / excluir + mais de 100 entidades. + soundVolume: + title: Volume dos sons + description: Defina um volume para os efeitos sonoros + musicVolume: + title: Volume da música + description: Defina um volume para a música + lowQualityMapResources: + 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: Desabilite a Grade + description: Desabilitar a grade pode ajudar com a performance. Isso também faz + o jogo parecer mais limpo! + clearCursorOnDeleteWhilePlacing: + 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: Texturas de Baixa Qualidade (Feio) + description: Usa texturas de baixa qualidade para ajudar com a performance. Vai + deixar o jogo bem feio! + displayChunkBorders: + 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: 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: 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: 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Controles - hint: >- - Tip: Certifique-se de usar CTRL, SHIFT e ALT! Eles permitem diferentes opções de construção. - + hint: "Tip: Certifique-se de usar CTRL, SHIFT e ALT! Eles permitem diferentes + opções de construção." resetKeybindings: Resetar Controles - categoryLabels: general: Geral ingame: Jogo @@ -794,7 +907,6 @@ keybindings: massSelect: Seleção em Massa buildings: Construções placementModifiers: Modificadores - mappings: confirm: Confirmar back: Voltar @@ -804,58 +916,63 @@ keybindings: mapMoveLeft: Mover para a esquerda mapMoveFaster: Mover mais rápido centerMap: Centralizar mapa - mapZoomIn: Aproximar mapZoomOut: Distanciar createMarker: Criar marcador - menuOpenShop: Melhorias menuOpenStats: Estatísticas menuClose: Fechar Menu - toggleHud: Ocultar Interface toggleFPSInfo: Mostrar FPS e Debug Info switchLayers: Alternar Camadas exportScreenshot: Exportar Base Inteira como Imagem - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Esteira Transportadora + underground_belt: Túnel + miner: Extrator + cutter: Cortador + rotater: Rotacionador + stacker: Empilhador + mixer: Misturador de Cores + painter: Pintor + trash: Lixo + 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 cycleBuildings: Trocar de construção lockBeltDirection: Ativar planejamento de esteira - switchDirectionLockSide: >- - Planejador: Mudar de lado - + switchDirectionLockSide: "Planejador: Mudar de lado" massSelectStart: Segure e arraste para começar massSelectSelectMultiple: Selecionar mais áreas massSelectCopy: Copiar área massSelectCut: Cortar área - placementDisableAutoOrientation: Desligar orientação automática placeMultiple: Permanecer no modo de construção placeInverse: Inverter orientação de esteira - + 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: Leitor de Esteira + virtual_processor: Cortador Virtual + transistor: Transistor + 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: >- - Esse jogo tem código aberto e é desenvolvido por Tobias Springer (esse sou eu).

+ Esse jogo tem código aberto e é desenvolvido por Tobias Springer + (esse sou eu).

Se quiser contribuir, confira shapez.io no github.

@@ -864,10 +981,8 @@ about: A trilha sonora foi feita por Peppsen - Ele é demais.

Finalmente, agradeço muito ao meu melhor amigo Niklas - Sem nossas sessões de Factorio, esse jogo nunca teria existido. - changelog: title: Alterações - demo: features: restoringGames: Restaurar jogos salvos @@ -875,5 +990,73 @@ demo: oneGameLimit: Limitado a um jogo salvo customizeKeybindings: Modificar Teclas exportingBase: Exportar Base inteira como Imagem - settingNotAvailable: Não disponível na versão demo. +tips: + - 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 4f16e0a9..234d1883 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -1,112 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io é um jogo cujo objetivo é construir fábricas para automatizar a criação e fusão de formas geométricas cada vez mais complexas num mapa infinito. + 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. + discordLinkShort: Discord Oficial + intro: >- + Shapez.io é um jogo relaxante onde tens de construir fábricas para + autumatizar a produção de formas geométricas. - # 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] + 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. - shapez.io é um jogo cujo objetivo é construir fábricas para automatizar a criação e fusão de formas geométricas num mapa infinito. - Ao entregar as formas pedidas, irás progredir no jogo e irás desbloquear melhorias para acelerar a produção da tua fábrica. + 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! - Uma vez que a procura aumenta a cada nível, terás de aumentar a tua fábrica para fazer face às necessidades - Para isso, terás de explorar o [b]mapa infinito[/b] para encontrar todos os recursos! + Embora no inicio apenas tenhas de processar formas, mais tarde, vais ter de as colorir - para isto terás de extrair e misturar cores! - Rapidamente irás precisar de misturar cores e pintar as formas com elas - Combina os recursos de cores vermelha, verde e azul para produzires mais cores e usá-las para pintar as formas geométricas com o intuito de satisfazer a procura. + 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. - Este jogo conta com 18 níveis (Que deverão manter-te ocupado durante horas!) mas estou constantemente a adicionar novos conteúdos - Há muitas coisas planeadas! - - Ao comprares o jogo, terás acesso à versão completa, que contém funcionalidades adicionais, e também a conteúdos desenvolvidos recentemente. - - [b]Vantagens do jogo completo[/b] - - [list] - [*] Modo escuro - [*] Marcos ilimitados - [*] Savegames infinitos - [*] Mais definições - [*] Brevemente: Fios & Energia! Previsto para o final de Julho 2020 (aproximadamente). - [*] Brevemente: Mais níveis - [*] Possibilita-me desenvolver ainda mais o shapez.io ❤️ - [/list] - - [b]Atualizações futuras[/b] - - Atualizo o jogo frequentemente e tento lançar uma atualização pelo menos todas as semanas! - - [list] - [*] Mapas diferentes e desafios (por exemplo mapas com obstáculos) - [*] Puzzles (Entrega a forma pedida numa área restrita e/ou com um número limitado de construções) - [*] Modo história onde as construções têm um custo - [*] Criação de mapas configuráveis (Editar o número e tamanho das minas, semente, e mais) - [*] Mais tipos de formas geométricas - [*] Mais melhorias de performance (Apesar do jogo já correr bastante bem!) - [*] E muito mais! - [/list] - - [b]Este jogo é open source (código aberto)![/b] - - Qualquer pessoa pode contribuir! Adicionalmente, Eu ouço [b]muito[/b] a comunidade! Eu tento ler todas as sugestões e retirar delas tanto feedback quanto possível. Segue o meu trello board para veres todo o roteiro de desenvolvimento! - - [b]Ligações[/b] - - [list] - [*] [url=https://discord.com/invite/HN7EVzV]Discord oficial[/url] - [*] [url=https://trello.com/b/ISQncpJP/shapezio]Roteiro de desenvolvimento[/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]Ajuda a traduzir[/url] - [/list] - - discordLink: Discord oficial - Conversa comigo! - global: - loading: A carregar + loading: A Carregar error: Erro - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: há um segundo xSecondsAgo: há segundos oneMinuteAgo: há um minuto @@ -115,14 +67,10 @@ global: xHoursAgo: há horas oneDayAgo: há um dia xDaysAgo: há dias - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minutos - keys: tab: TAB control: CTRL @@ -130,13 +78,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Versão Demo - intro: >- - Compra a versão completa para desbloqueares todas as funcionalidades! - + intro: Compra a versão completa para desbloqueares todas as funcionalidades! mainMenu: play: Jogar changelog: Changelog @@ -144,19 +88,16 @@ mainMenu: openSourceHint: Este jogo é código aberto! discordLink: Discord oficial helpTranslate: Ajuda a traduzir! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Desculpa, mas este jogo parece correr mais lentamente no teu navegador! Compra o jogo completo ou baixa o chrome para melhorares a tua experiência. - + browserWarning: Desculpa, mas este jogo parece correr mais lentamente no teu + navegador! Compra o jogo completo ou baixa o chrome para melhorares a + tua experiência. savegameLevel: Nível savegameLevelUnknown: Nível desconhecido - continue: Continuar newGame: Novo Jogo madeBy: Criado por subreddit: Reddit - + savegameUnnamed: Sem Nome dialogs: buttons: ok: OK @@ -170,112 +111,102 @@ dialogs: viewUpdate: Ver Update showUpgrades: Mostrar Upgrades showKeybindings: Mostrar Atalhos - importSavegameError: title: Erro de importação - text: >- - Erro ao importar o teu savegame: - + text: "Erro ao importar o teu savegame:" importSavegameSuccess: title: Savegame importado - text: >- - O teu savegame foi importado com sucesso. - + text: O teu savegame foi importado com sucesso. gameLoadFailure: title: O jogo está em baixo - text: >- - Erro ao carregar o teu savegame: - + 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: - + text: "Erro ao eliminar o teu savegame:" restartRequired: title: Necessário reiniciar - text: >- - Precisas de reiniciar o jogo para aplicar as mudanças. - + text: Precisas de reiniciar o jogo para aplicar as mudanças. editKeybinding: title: Mudar Atalhos - desc: Pressiona a tecla ou botão do rato que pretendes definir, ou Escape para cancelar. - + desc: Pressiona a tecla ou botão do rato que pretendes definir, ou Escape para + cancelar. resetKeybindingsConfirmation: title: Resetar Atalhos - desc: Isto irá resetar todos os Atalhos para os seus valores pré-definidos. Confirma por favor. - + desc: Isto irá resetar todos os Atalhos para os seus valores pré-definidos. + Confirma por favor. keybindingsResetOk: title: Atalhos resetados desc: Os Atalhos foram resetados para os respetivos valores pré-definidos! - featureRestriction: title: Versão Demo - desc: Tentaste aceder a uma funcionalidade () que não está disponivel no Demo. Considera adquirir o jogo completo para a melhor experiência do jogo! - + desc: Tentaste aceder a uma funcionalidade () que não está disponivel + no Demo. Considera adquirir o jogo completo para a melhor + experiência do jogo! oneSavegameLimit: title: Savegames limitados - desc: Apenas podes ter um savegame de cada vez na versão Demo. Por favor remove o savegame existente ou adquire a versão completa! - + desc: Apenas podes ter um savegame de cada vez na versão Demo. Por favor remove + o savegame existente ou adquire a versão completa! updateSummary: title: Nova atualização! - desc: >- - Aqui estão as mudanças desde a última vez que jogaste: - + desc: "Aqui estão as mudanças desde a última vez que jogaste:" upgradesIntroduction: title: Desbloqueia upgrades - desc: >- - Todas as formas geométricas que produzes podem ser usadas para desbloquear upgrades - Não destruas as tuas fábricas antigas! - A aba dos upgrades pode ser encontrada no canto superior direito do ecrã. - + desc: Todas as formas geométricas que produzes podem ser usadas para desbloquear + upgrades - Não destruas as tuas fábricas antigas! A + aba dos upgrades pode ser encontrada no canto superior direito do + ecrã. massDeleteConfirm: title: Confirmar eliminação - desc: >- - Estás a apagar muitas construções, ( para ser exato)! Tens a certeza? - + desc: Estás a apagar muitas construções, ( para ser exato)! Tens a + certeza? blueprintsNotUnlocked: title: Ainda não está desbloqueado - desc: >- - Os Projetos ainda não foram desbloqueados! Completa mais níveis para os desbloquear. - + desc: Os Projetos ainda não foram desbloqueados! Completa mais níveis para os + desbloquear. keybindingsIntroduction: title: Atalhos úteis - desc: >- - Este jogo tem vários Atalhos que tornarão mais fácil a construção de grandes fábricas. - Aqui estão alguns, mas verifica os restantes Atalhos!

- CTRL + Drag: Seleciona a área para copiar / eliminar.
- SHIFT: Mantém pressionado para colocar várias construções.
- ALT: Inverte as posições.
- + desc: "Este jogo tem vários Atalhos que tornarão mais fácil a construção de + grandes fábricas. Aqui estão alguns, mas verifica os + restantes Atalhos!

CTRL + Drag: Seleciona a área para copiar + / eliminar.
SHIFT: Mantém + pressionado para colocar várias construções.
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 para colocar marcos infinitos! + desc: Apenas podes criar dois marcos na versão Demo. Adquire o jogo completo + para colocar marcos infinitos! massCutConfirm: title: Confirmar corte - desc: >- - Estás a cortar muitas construções ( para ser exato)! Tens a certeza? - + desc: Estás a cortar muitas construções ( para ser exato)! Tens a + certeza? exportScreenshotWarning: title: Exportar captura de ecrã - desc: >- - Tu estás a pedir pra exportar a tua base como uma captura de ecrã. Por favor tem em atenção que isto pode - ser um pouco lento para uma base muito grande até mesmo bloquear o teu jogo! - + desc: Tu estás a pedir pra exportar a tua base como uma captura de ecrã. Por + favor tem em atenção que isto pode ser um pouco lento para uma base + muito grande até mesmo bloquear o teu jogo! massCutInsufficientConfirm: title: Confirma o corte - desc: Não consegues pagar para colar esta área! Tens a certeza que pretendes cortá-la? - + desc: Não consegues pagar para colar esta área! Tens a certeza que pretendes + cortá-la? + editSignal: + 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: Renomear Savegame + desc: Podes renomear o teu savegame aqui. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Mover selectBuildings: Selecionar área @@ -296,18 +227,9 @@ ingame: clearSelection: Cancelar pipette: Pipeta switchLayers: Troca de camadas - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Pressionar para obter variações. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Atalho: - + hotkeyLabel: "Atalho: " infoTexts: speed: Velocidade range: Alcance @@ -315,36 +237,21 @@ ingame: oneItemPerSecond: 1 item / segundo itemsPerSecond: itens / s itemsPerSecondDouble: (x2) - tiles: telas - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nível completed: Completo unlockText: desbloqueado! buttonNextLevel: Próximo nível - - # Notifications on the lower right notifications: newUpgrade: Está disponível um novo upgrade! gameSaved: O teu jogo foi guardado. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Upgrades buttonUnlock: Upgrade - - # Gets replaced to e.g. "Tier IX" tier: Nível - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: NÍVEL MÁXIMO (Velocidade x) - - # The "Statistics" window statistics: title: Estatísticas dataSources: @@ -353,55 +260,46 @@ ingame: description: Formas geométricas armazenadas no edifício central. produced: title: Produzido - description: Formas geométricas que toda a fábrica produz, incluindo produtos intermédios. + description: Formas geométricas que toda a fábrica produz, incluindo produtos + intermédios. delivered: title: Entregue description: Formas geométricas entregues no edifício central. noShapesProduced: Não foram ainda produzidas formas geométricas. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Tempo de jogo - buildingsPlaced: Construções beltsPlaced: Tapetes rolantes - - buttons: - continue: Continuar - settings: Definições - menu: Voltar ao menu - - # Bottom left tutorial hints tutorialHints: title: Precisas de ajuda? showHint: Mostrar dica hideHint: Fechar - - # When placing a blueprint blueprintPlacer: cost: Preço - - # Map markers waypoints: waypoints: Marcos hub: Edifício Central - description: Carrega com o botão esquerdo num marco para saltar, botão direito para o eliminar.

Pressiona para criar um marco na vista atual, ou botão direito para criar um marco no local selecionado. + description: Carrega com o botão esquerdo num marco para saltar, botão direito + para o eliminar.

Pressiona para criar um marco + na vista atual, ou botão direito para criar um + marco no local selecionado. creationSuccessNotification: Marco criado com sucesso. - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Coloca um extrator em cima da forma circular para extraí-la! - 1_2_conveyor: >- - Liga o extrator a um tapete rolante em direção ao Edifício Central!

Dica: Clica e arrasta o tapete com o rato! - - 1_3_expand: >- - Isto NÃO é um jogo idle! Constrói mais extratores e tapetes para atingir o objetivo mais rapidamente.

Dica: Pressiona SHIFT para colocar vários extratores, e usa R para os rodar. - + 1_1_extractor: Coloca um extrator em cima da forma + circular para extraí-la! + 1_2_conveyor: "Liga o extrator a um tapete rolante em direção + ao Edifício Central!

Dica: Clica e + arrasta o tapete com o rato!" + 1_3_expand: "Isto NÃO é um jogo idle! Constrói mais extratores + e tapetes para atingir o objetivo mais rapidamente.

Dica: + Pressiona SHIFT para colocar vários extratores, + e usa R para os rodar." colors: red: Vermelho green: Verde @@ -416,8 +314,42 @@ ingame: title: Camadas empty: Vazio copyKey: Chave de cópia - -# All shop upgrades + connectedMiners: + one_miner: 1 Extrator + n_miners: Extratores + limited_items: Limite de + watermark: + title: Versão Demo + desc: Clica aqui para veres as vantagens da versão na Steam! + get_on_steam: Compra na Steam + standaloneAdvantages: + title: Obtém a versão completa! + no_thanks: Não, obrigado! + points: + levels: + title: 12 Novos Níveis + desc: Para um total de 26 Níveis! + buildings: + title: 18 Novas contruções + desc: Para uma fábrica totalmente automatizada! + savegames: + title: Savegames ∞ + desc: Tantos quanto o teu corção desejar! + upgrades: + title: 20 Níveis de melhoria + desc: Nesta versão demo apenas tens 5! + markers: + title: Marcos ∞ + desc: Nunca te percas na tua Fábrica! + wires: + title: Fios + desc: Uma dimensão totalmente nova!! + darkmode: + title: Modo Escuro + desc: Não magoes os teus olhos! + support: + title: Ajuda-me + desc: Eu desenvolvo este jogo no meu tempo livre! shopUpgrades: belt: name: Tapetes, Distribuidores e Túneis @@ -431,285 +363,445 @@ shopUpgrades: painting: name: Mistura e Pintura description: Velocidade x → x - -# Buildings and their name / description buildings: belt: default: - name: &belt Tapete Rolante - description: Transporta items. Mantém pressionado e arrasta para colocar vários. - - miner: # Internal name for the Extractor + name: Tapete Rolante + description: Transporta itens. Mantém pressionado e arrasta para colocar vários. + miner: default: - name: &miner Extrator + name: Extrator description: Coloca em cima de uma forma geométrica para extraí-la. - chainable: name: Extrator (Série) - description: Coloca em cima de uma forma geométrica para extraí-la. Pode ser colocado em série. - - underground_belt: # Internal name for the Tunnel + description: Coloca em cima de uma forma geométrica para extraí-la. Pode ser + colocado em série. + underground_belt: default: - name: &underground_belt Túnel + name: Túnel description: Permite transportar recursos por baixo de construções e tapetes. - tier2: name: Túnel Nível II description: Permite transportar recursos por baixo de construções e tapetes. - - splitter: # Internal name for the Balancer - default: - name: &splitter Distribuidor - description: Multifunções - Distribui igualmente todas as entradas por todas as saídas. - - compact: - name: Misturador (Comp.) - description: O Misturador Compacto é uma variante do distibruidor. Junta dois tapetes rolantes num só. - - compact-inverse: - name: Misturador (Comp.) - description: O Misturador Compacto é uma variante do distibruidor. Junta dois tapetes rolantes num só. - cutter: default: - name: &cutter Cortador - description: Corta as formas, de cima para baixo, em duas partes. Se apenas usares uma parte, destrói a outra para não encravar a produção! + name: Cortador + description: Corta as formas, de cima para baixo, em duas partes. Se + apenas usares uma parte, destrói a outra para não encravar a + produção! quad: - name: Cortador (Quad) - 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! - + 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! rotater: default: - name: &rotater Rodar + name: Rodar description: Roda as formas 90º no sentido dos ponteiros do relógio. ccw: name: Rodar (CCW) - description: Roda as formas 90º no sentido contrário ao dos ponteiros do relógio. - fl: - name: Rodar (180) + description: Roda as formas 90º no sentido contrário ao dos ponteiros do + relógio. + rotate180: + name: Rodar (180º) description: Roda as formas 180º. - stacker: default: - name: &stacker Empilhador - description: Empilha dois itens. Se não podem ser empilhados, o item da direita será colocado em cima do item da esquerda. - + name: Empilhador + description: Empilha dois itens. Se não podem ser empilhados, o item da direita + será colocado em cima do item da esquerda. mixer: default: - name: &mixer Misturador de cor + name: Misturador de cor description: Mistura duas cores através de mistura aditiva. - painter: default: - name: &painter Pintor - description: &painter_desc Pinta a forma geométrica da entrada esquerda com a cor da entrada superior. + name: Pintor + description: Pinta a forma geométrica da entrada esquerda com a cor da entrada + superior. double: name: Pintor (Duplo) - description: Pinta as formas geométricas das entradas esquerdas com a cor da entrada superior. + description: Pinta as formas geométricas das entradas esquerdas com a cor da + 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: *painter - description: *painter_desc - + name: Pintor + description: Pinta a forma geométrica da entrada esquerda com a cor da entrada + superior. trash: default: - name: &trash Lixo + name: Lixo description: Aceita entradas de todos os lados e destrói-os. Para sempre. - - storage: - name: Armazém - description: Armazena items em excesso até uma determinada capacidade. Pode ser usado como uma porta de transbordo. hub: deliver: Entrega toUnlock: para desbloquear levelShortcut: NVL + endOfDemo: Fim do Demo wire: default: name: Fio Elétrico - description: Permite o transporte de energia. - advanced_processor: + 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: 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: Inversor de Cor - description: Aceita uma cor ou forma e inverte-a. - energy_generator: - deliver: Entrega - toGenerateEnergy: Para - default: - name: Gerador de energia - description: Gera energia consumindo formas. - wire_crossings: - default: - name: Repartidor de fios - description: Divide um fio elétrico em dois. + name: Distribuidor + description: Multifunções - Distribui igualmente todas as entradas por todas as + saídas. merger: - name: Conector de fios - description: Junta dois fios elétricos num só. - + name: Misturador (comp.) + description: Junta dois tapetes rolantes num só. + merger-inverse: + name: Misturador (comp.) + description: Junta dois tapetes rolantes num só. + splitter: + name: Divisor (compacto) + description: Divide um tapete rolante em dois. + splitter-inverse: + name: Divisor (compacto) + description: Divide um tapete rolante em dois. + storage: + default: + 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: Túnel de Fios + description: Permite que dois fios cruzem sem conectarem-se um ao outro. + constant_signal: + default: + 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: 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: 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: 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: 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: 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: Transístor + description: Encaminha a entrada inferior se a entrada lateral for verdade (uma + forma, cor ou "1"). + mirrored: + name: Transístor + description: Encaminha a entrada inferior se a entrada lateral for verdade (uma + forma, cor ou "1"). + filter: + default: + 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: Visor + description: Conecta um sinal para mostrar no Visor - Pode ser uma forma, cor ou + um sinal binário. + reader: + default: + 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: Analizador de Forma + description: Analiza o quadrante superior direito da camada mais baixa da forma + e retorna a forma ou cor. + comparator: + default: + 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: Cortador Virtual + description: Virtualmente, corta as formas em duas metades. + rotater: + name: Rodador Virtual + description: Virtualmente, roda a forma tanto no sentido horário quanto no + anti-horário. + unstacker: + 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: Empilhador Virtual + description: Virtualmente empilhada a forma da direita em cima do item da + esquerda. + painter: + 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: Produtor de Itens + description: Disponível apenas no modo sandbox, produz o sinal dado na camada de + fios na camada normal. storyRewards: - # Those are the rewards gained from completing the store 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 geométricas 90º no sentido dos ponteiros do relógio. - + desc: O Rodador foi desbloqueado! Ele roda as formas + geométricas 90º no sentido dos ponteiros do relógio. reward_painter: title: Pintura - desc: >- - O Pintor foi desbloqueado - Extrai alguns pigmentos coloridos (tal como fazes com as formas) e combina-os com uma forma no pintor para a colorir!

PS: Se fores daltónico, existe um modo daltónico nas definições! - + desc: "O Pintor foi desbloqueado - Extrai alguns pigmentos + coloridos (tal como fazes com as formas) e combina-os com uma forma + no pintor para a colorir!

PS: Se fores daltónico, existe um + modo daltónico nas definições!" reward_mixer: title: Mistura de Cores - desc: O Misturador foi desbloqueado - Combina duas cores através de mistura aditiva com esta construção! - + desc: O Misturador foi desbloqueado - Combina duas cores + através de mistura aditiva com esta construção! reward_stacker: title: Combinador - desc: Agora podes combinar formas geométricas com o Combinador! Ambas as entradas são combinados e, se puderem ser colocados lado-a-lado, serão fundidas. Caso contrário, a entrada da direita é empilhada em cima da da esquerda! - + desc: Agora podes combinar formas geométricas com o Combinador! + Ambas as entradas são combinados e, se puderem ser colocados + lado-a-lado, serão fundidas. Caso contrário, a + 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 através de tapetes e construções! - + desc: O Túnel foi desbloqueado - Com ele podes passar itens + através de tapetes e construções! reward_rotater_ccw: title: Rotação CCW - desc: Desbloqueaste uma variante do Rodador - Permite rodar no sentido contrário ao dos ponteiros do relógio! Para construí-lo, seleciona o Rodador e pressiona 'T' para escolher as variantes! - + desc: Desbloqueaste uma variante do Rodador - Permite rodar no + sentido contrário ao dos ponteiros do relógio! Para construí-lo, + seleciona o Rodador e pressiona 'T' para escolher as + 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 maior alcance, e podes interlaçar as duas variantes entre si! - - reward_splitter_compact: - title: Distribuidor compacto - desc: >- - Desbloqueaste uma variante compacta do Distribuidor - Aceita duas entradas e junta-as numa só! - + desc: Desbloqueaste uma nova variante do Túnel - Tem um + maior alcance, e podes interlaçar as duas variantes + entre si! reward_cutter_quad: title: Corte quádruplo - desc: Desbloqueaste a variante do Cortador - Permite cortar formas geométricas em quatro partes em vez de apenas duas! - + desc: Desbloqueaste a variante do Cortador - Permite cortar + formas geométricas em quatro partes em vez de + apenas duas! reward_painter_double: title: Pintura dupla - desc: Desbloqueaste uma variante do Pintor - Funciona como um pintor normal mas processa duas formas ao mesmo tempo consumindo apenas uma cor em vez de duas! - - reward_painter_quad: - title: Pintura quádrupla - desc: Desbloqueaste uma variante do Pintor - Permite pintar cada parte da forma geométrica individualmente! - + desc: Desbloqueaste uma variante do Pintor - Funciona como um + pintor normal mas processa duas formas ao mesmo + 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!) - + desc: Conseguiste! Desbloqueaste o modo jogo livre! Isto + 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! Seleciona uma área (Mantém pressionado CTRL e arrasta com o rato), e pressiona 'C' para copiar.

Colar não é gratuito, precisas de produzir formas projeto para o pagares! (Aquelas que acabaste de entregar). - - # Special reward, which is shown when there is no reward actually + desc: Agora podes copiar e colar partes da tua fábrica! + Seleciona uma área (Mantém pressionado CTRL e arrasta com o rato), e + pressiona 'C' para copiar.

Colar não é + gratuito, precisas de produzir formas + projeto para o pagares! (Aquelas que acabaste de entregar). no_reward: title: Próximo nível - desc: >- - Este nível não te deu nenhuma recompensa, mas o próximo dará!

PS: É melhor não destruires a tua fábrica atual - Precisarás de todas essas formas no futuro para desbloquear upgrades! - + desc: "Este nível não te deu nenhuma recompensa, mas o próximo dará!

+ PS: É melhor não destruires a tua fábrica atual - Precisarás de + todas essas formas no futuro para + desbloquear upgrades!" no_reward_freeplay: title: Próximo nível - desc: >- - Parabéns! Já agora, está planeado mais conteúdo para o jogo completo! - + desc: Parabéns! Já agora, está planeado mais conteúdo para o jogo completo! + reward_balancer: + title: Distribuidor + 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: Misturador (compacto) + desc: Desbloqueaste um misturador, uma variante do + distribuidor - Aceita duas entradas e junta-as num + só tapete rolante! + reward_belt_reader: + 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: Rodar (180º) + desc: Desbloqueaste o rodador de 180 graus! - Permite-te + rodares formas 180 graus (Surpresa! :D) + reward_display: + 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: 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: 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: 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: 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: 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: Fim da Demo + desc: Tu chegaste ao fim da versão demo! settings: title: Definições categories: general: Geral userInterface: Interface de Utilizador advanced: Avançado - + performance: Performance versionBadges: dev: Desenvolvimento staging: Ensaio prod: Produção buildDate: Construido - labels: uiScale: title: Escala da interface - description: >- - Altera o tamanho da interface do utilizador. A interface será redimensionada com base na resolução do teu dispositivo, mas esta definição controla a escala. + description: Altera o tamanho da interface do utilizador. A interface será + redimensionada com base na resolução do teu dispositivo, mas + esta definição controla a escala. scales: super_small: Super pequeno small: Pequeno regular: Médio large: Grande huge: Enorme - scrollWheelSensitivity: title: Sensibilidade do zoom - description: >- - Define o quão sensível é o zoom (Roda do rato ou trackpado). + description: Define o quão sensível é o zoom (Roda do rato ou trackpado). sensitivity: super_slow: Muito lento slow: Lento regular: Normal fast: Rápido super_fast: Muito rápido - language: title: Língua - description: >- - Muda a língua. Todas as traduções são contribuições dos utilizadores e podem estar incompletas! - + description: Muda a língua. Todas as traduções são contribuições dos + utilizadores e podem estar incompletas! fullscreen: title: Ecrã inteiro - description: >- - É recomendado jogar o jogo em ecrã inteiro para a melhor experiência. Apenas disponível no jogo completo. - + description: É recomendado jogar o jogo em ecrã inteiro para a melhor + experiência. Apenas disponível no jogo completo. soundsMuted: title: Desativar sons - description: >- - Se ativado, desativa todos os sons. - + description: Se ativado, desativa todos os sons. musicMuted: title: Desativar música - description: >- - Se ativado, desativa todas as músicas. - + description: Se ativado, desativa todas as músicas. theme: title: Tema do jogo - description: >- - Escolhe o tema do jogo (claro / escuro). - + description: Escolhe o tema do jogo (claro / escuro). themes: dark: Escuro light: Claro - refreshRate: title: Frequência - description: >- - Se tens um monitor 144hz, muda a frequência para que o jogo simule corretamente frequências de autalização altas. Isto pode resultar em perda de FPS se o teu computador for demasiado lento. - + description: Se tens um monitor 144hz, muda a frequência para que o jogo simule + corretamente frequências de autalização altas. Isto pode + resultar em perda de FPS se o teu computador for demasiado + lento. alwaysMultiplace: title: Colocação múltipla - description: >- - Se ativado, todas as construções permanecerão selecionadas após a colocação até cancelares. Isto é equivalente a pressionares SHIFT permanentemente. - + description: Se ativado, todas as construções permanecerão selecionadas após a + colocação até cancelares. Isto é equivalente a pressionares + SHIFT permanentemente. offerHints: title: Dicas e tutoriais - description: >- - Se ativado, dá dicas e tutoriais de apoio ao jogo. Adicionalmente, esconde certos elementos da interface do utilizador até ao nível em que são desbloqueados de forma a simplificar o início do jogo. - + description: Se ativado, dá dicas e tutoriais de apoio ao jogo. Adicionalmente, + esconde certos elementos da interface do utilizador até ao nível + em que são desbloqueados de forma a simplificar o início do + jogo. movementSpeed: title: Velocidade de movimentação description: Define quão rápida é a movimentação usando o teclado. @@ -722,20 +814,17 @@ settings: extremely_fast: Extremamente rápida enableTunnelSmartplace: title: Túneis inteligentes - description: >- - Quando ativado, a colocação de túneis removerá tapetes desnecessários automaticamente. - Isto também permite arrastar túneis e túneis em excesso serão removidos. + description: Quando ativado, a colocação de túneis removerá tapetes + desnecessários automaticamente. Isto também permite arrastar + túneis e túneis em excesso serão removidos. vignette: title: Vinheta - description: >- - Ativa a vinheta, que escurece os cantos do ecrã e torna a leitura do texto - mais fácil. - + description: Ativa a vinheta, que escurece os cantos do ecrã e torna a leitura + do texto mais fácil. autosaveInterval: title: Intervalo de gravação automática - description: >- - Define o quão frequentemente o jogo grava automaticamente. Também podes desativar - aqui. + description: Define o quão frequentemente o jogo grava automaticamente. Também + podes desativar aqui. intervals: one_minute: 1 Minuto two_minutes: 2 Minutos @@ -745,32 +834,79 @@ settings: disabled: Desligado compactBuildingInfo: title: Informações de construções compactas - description: >- - Encurta caixas de informação e apenas mostra os respetivos rácios. Caso contrário - é mostrada a descrição e a imagem. + description: Encurta caixas de informação e apenas mostra os respetivos rácios. + Caso contrário é mostrada a descrição e a imagem. disableCutDeleteWarnings: title: Desativar Avisos de Corte/Eliminação - description: >- - Desativa os avisos mostrados quando é feito o corte ou a eliminação de mais de 100 - entidades. - + description: Desativa os avisos mostrados quando é feito o corte ou a eliminação + de mais de 100 entidades. enableColorBlindHelper: title: Modo Daltónico - description: Ativa várias ferramentas que te permitirão jogar o jogo se fores daltónico. + description: Ativa várias ferramentas que te permitirão jogar o jogo se fores + daltónico. rotationByBuilding: title: Rotação por tipo de construção - description: >- - Cada tipo construção lembra-se da última rotação que definiste. - Esta definição pode ser mais confortável se alterares frequentemente - a colocação de diferentes tipos de construções. - + description: Cada tipo construção lembra-se da última rotação que definiste. + Esta definição pode ser mais confortável se alterares + frequentemente a colocação de diferentes tipos de construções. + soundVolume: + title: Volume do Som + description: Define o volume para efeitos sonoros + musicVolume: + title: Volume da Música + description: Define o volume para música + lowQualityMapResources: + 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: Desativar Grelha + description: Desativar a grelha pode ajudar com o desempenho. Isto também fazz o + jogo parecer mais limpo! + clearCursorOnDeleteWhilePlacing: + 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: 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: 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: 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: 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: 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Atalhos - hint: >- - Tip: Utiliza o CTRL, o SHIFT e o ALT! Eles permitem diferentes opções de posicionamento. - + hint: "Dica: Utiliza o CTRL, o SHIFT e o ALT! Eles permitem diferentes opções de + posicionamento." resetKeybindings: Resetar Atalhos - categoryLabels: general: Aplicação ingame: Jogo @@ -779,7 +915,6 @@ keybindings: massSelect: Seleção em massa buildings: Atalhos de construções placementModifiers: Modificadores de posicionamento - mappings: confirm: Confirmar back: Retroceder @@ -788,38 +923,30 @@ keybindings: mapMoveDown: Mover para baixo mapMoveLeft: Mover para a esquerda centerMap: Centrar o mapa - mapZoomIn: Zoom in mapZoomOut: Zoom out createMarker: Criar Marco - menuOpenShop: Upgrades menuOpenStats: Estatísticas - toggleHud: Ativar/Desativar HUD toggleFPSInfo: Mostrar FPS e Debug info - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Tapete Rolante + underground_belt: Túnel + miner: Extrator + cutter: Cortador + rotater: Rodar + stacker: Empilhador + mixer: Misturador de cor + 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 - massSelectStart: Pressiona e arrasta para começar massSelectSelectMultiple: Selecionar várias áreas massSelectCopy: Copiar a área - placementDisableAutoOrientation: Desativa orientação automática placeMultiple: Continuar no modo de colocação placeInverse: Inverter orientação automática do tapete @@ -832,32 +959,38 @@ keybindings: pipette: Pipeta menuClose: Fechar Menu switchLayers: Troca de camadas - advanced_processor: Inversor de Cor - energy_generator: Gerador de energia wire: Fio Elétrico + 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: Leitor de Tapete + virtual_processor: Cortador Virtual + transistor: Transistor + 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 (este sou eu).

+ Este jogo é código aberto e desenvolvido por Tobias Springer + (este sou eu).

- Se quiseres contribuir, dá uma olhadela em shapez.io no github.

+ Se quiseres contribuir, dá uma olhadela em shapez.io no github.

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

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

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

- - Finalmente, um grande agradecimento ao meu melhor amigo Niklas - Sem as nossas - sessões de factorio este jogo nunca teria existido. + A banda sonora foi feita por Peppsen - Ele é Fantástico.

+ Finalmente, um grande agradecimento ao meu melhor amigo Niklas - Sem as nossas sessões de factorio este jogo nunca teria existido. changelog: title: Changelog - demo: features: restoringGames: Restauro de savegames @@ -865,5 +998,74 @@ demo: oneGameLimit: Limitado a um savegame customizeKeybindings: Costumizar Atalhos exportingBase: Exportar base como uma imagem - settingNotAvailable: Não disponível no Demo. +tips: + - 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 15d3ff4b..5a635507 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -1,112 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io este un joc despre construirea fabricilor pentru a automatiza crearea și combinarea a din ce in ce mai complexe forme într-o hartă infinită. + 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ă. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # 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] + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - 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. + 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! - 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]! + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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. + 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. - 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] - - discordLink: Official Discord - Chat with me! - global: loading: Se Încarcă error: Eroare - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: acum o secundă xSecondsAgo: acum secunde oneMinuteAgo: acum un minut @@ -115,14 +67,10 @@ global: xHoursAgo: acum ore oneDayAgo: acum o zi xDaysAgo: acum zile - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minute - keys: tab: TAB control: CTRL @@ -130,13 +78,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Versiunea Demo - intro: >- - Ia versiunea Standalone pentru a debloca toate funcțiile! - + intro: Ia versiunea Standalone pentru a debloca toate funcțiile! mainMenu: play: Joacă changelog: Changelog @@ -144,19 +88,15 @@ mainMenu: openSourceHint: Acest joc este open source! discordLink: Serverul oficial de Discord helpTranslate: Ajută să traducem! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Scuze dar, jocul este știut să ruleze încet pe browser-ul tău! Ia versiunea standalone sau descarcă chrome pentru experiența completă. - + browserWarning: Scuze dar, jocul este știut să ruleze încet pe browser-ul tău! + Ia versiunea standalone sau descarcă chrome pentru experiența completă. savegameLevel: Nivelul savegameLevelUnknown: Nivel necunoscut - continue: Continuă newGame: Joc nou madeBy: Făcut de subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,111 +110,101 @@ dialogs: viewUpdate: Vezi Update-ul showUpgrades: Vezi Upgrade-urile showKeybindings: Arată tastele configurate - importSavegameError: title: Eroare la Import - text: >- - Încercarea de import a eșuat: - + text: "Încercarea de import a eșuat:" importSavegameSuccess: title: Savegame importat - text: >- - Savegame-ul tău a fost importat cu succes. - + text: Savegame-ul tău a fost importat cu succes. gameLoadFailure: title: Jocul este stricat - text: >- - Încercarea de încărcat savegame-ul a eșuat: - + 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: - + text: "Nu a reușit să se ștearga savegame-ul:" restartRequired: title: Restartare necesară - text: >- - Trebuie să restartezi jocul pentru a aplica setările. - + text: Trebuie să restartezi jocul pentru a aplica setările. editKeybinding: title: Schimbă Tastele configurate - desc: Apasă tasta sau butonul mouse-ului pe care vrei să îl atribui, sau escape pentru a anula. - + desc: Apasă tasta sau butonul mouse-ului pe care vrei să îl atribui, sau escape + pentru a anula. resetKeybindingsConfirmation: title: Resetează Tastele configurate - desc: Acesta va reseta toate tastele configurate la valorile obișnuite. Vă rog să confirmați. - + desc: Acesta va reseta toate tastele configurate la valorile obișnuite. Vă rog + să confirmați. keybindingsResetOk: title: Tastele configurate se resetează desc: Tastele configurate au fost resetate la valorile lor obișnuite! - featureRestriction: title: Demo Version - desc: Ai încercat să accesezi o funcție () care nu este disponibilă în demo. Consideră să iei standalone-ul pentru experiența completă! - + desc: Ai încercat să accesezi o funcție () care nu este disponibilă în + demo. Consideră să iei standalone-ul pentru experiența completă! oneSavegameLimit: title: Savegame-uri limitate - desc: Poți avea doar un savegame în același timp în versiunea demo. Te rugăm șterge-o pe cea existentă sau ia standalone-ul! - + desc: Poți avea doar un savegame în același timp în versiunea demo. Te rugăm + șterge-o pe cea existentă sau ia standalone-ul! updateSummary: title: Update nou! - desc: >- - Aici sunt schimbările de când ai jucat ultima oară: - + desc: "Aici sunt schimbările de când ai jucat ultima oară:" upgradesIntroduction: title: Deblochează Upgrade-uri - desc: >- - Toate formele pe care le produci pot fi folosite să deblochezi upgrade-uri - Nu îți distruge vechile fabrici! - Fila upgrade-urilor poate fi găsită în colțul din dreapta sus al ecranului. - + desc: Toate formele pe care le produci pot fi folosite să deblochezi upgrade-uri + - Nu îți distruge vechile fabrici! Fila + upgrade-urilor poate fi găsită în colțul din dreapta sus al + ecranului. massDeleteConfirm: title: Confirmă ștergerea - desc: >- - Stergeți multe construcții ( pentru a fi exact)! Sunteți sigur că vreți să faceți asta? - + desc: Stergeți multe construcții ( pentru a fi exact)! Sunteți sigur că + vreți să faceți asta? blueprintsNotUnlocked: title: Nu este deblocat încă - desc: >- - Planurile nu au fost deblocate încă! Completează mai multe nivele să le deblochezi. - + desc: Planurile nu au fost deblocate încă! Completează mai multe nivele să le + deblochezi. keybindingsIntroduction: title: Taste configurate folositoare - desc: >- - Acest joc are multe taste configurate care fac construitul fabricilor mari mai ușor. - Aici sunt câteva dar, fii sigur să verifici tastele configurate!

- CTRL + Drag: Selectează o zonă pentreu a copia / delete.
- SHIFT: Ține apăsat pentru a plasa mai multe dintr-o clădire.
- ALT: Inversează orientația a benzilor rulante.
- + desc: "Acest joc are multe taste configurate care fac construitul fabricilor + mari mai ușor. Aici sunt câteva dar, fii sigur să verifici + tastele configurate!

CTRL + Drag: Selectează o zonă pentreu a + copia / delete.
SHIFT: Ține + apăsat pentru a plasa mai multe dintr-o clădire.
ALT: Inversează orientația a benzilor + 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 pentru Waypoint-uri nelimitate! + desc: Poți crea decât două waypoint-uri personalizate în demo. Ia standalone-ul + pentru Waypoint-uri nelimitate! massCutConfirm: title: Confirmă tăierea - desc: >- - Tu tai multe construcții ( pentru a fi precis)! Sunteți sigur că vreți să faceți asta? - + desc: Tu tai multe construcții ( pentru a fi precis)! Sunteți sigur că + vreți să faceți asta? exportScreenshotWarning: title: Exportează captură de ecran - desc: >- - Ai solicitat să exportezi baza ta ca o captură de ecran. Vă rugăm să rețineți că asta poate fi destul de lent pentru o bază mare și poate chiar să blocheze jocul! - + desc: Ai solicitat să exportezi baza ta ca o captură de ecran. Vă rugăm să + rețineți că asta poate fi destul de lent pentru o bază mare și poate + chiar să blocheze jocul! massCutInsufficientConfirm: title: Confirm cut desc: You can not afford to paste this area! Are you sure you want to cut it? - + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Move selectBuildings: Selectează zona @@ -295,18 +225,9 @@ ingame: clearSelection: Golește Secțiunea pipette: Pipette switchLayers: Switch layers - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Apasă pentru a cicla variantele. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Tasta: - + hotkeyLabel: "Tasta: " infoTexts: speed: Viteză range: Distanță @@ -314,36 +235,21 @@ ingame: oneItemPerSecond: 1 obiect / second itemsPerSecond: obiecte / s itemsPerSecondDouble: (x2) - tiles: Câmpuri - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nivelul completed: Completat unlockText: Ai deblocat ! buttonNextLevel: Nivelul următor - - # Notifications on the lower right notifications: newUpgrade: Un upgrade nou este disponibil! gameSaved: Jocul tău a fost salvat. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Upgrade-uri buttonUnlock: Upgrade - - # 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] - maximumLevel: NIVELUL MAXIM (Speed x) - - # The "Statistics" window statistics: title: Statistici dataSources: @@ -352,55 +258,47 @@ ingame: description: Afișează numărul de forme stocate în construcția centrală . produced: title: Produse - description: Afișează toate formele pe care fabrica ta le produce, incluzând produsele intermediate. + description: Afișează toate formele pe care fabrica ta le produce, incluzând + produsele intermediate. delivered: title: Livrate description: Afișează formele care sunt livrate la construcția centrală. noShapesProduced: Nicio formă nu a fost produsă până acum. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Timp jucat - buildingsPlaced: Construcții beltsPlaced: Benzi - - buttons: - continue: Continuă - settings: Setări - menu: Întoarce-te în meniu - - # Bottom left tutorial hints tutorialHints: title: Ai nevoie de ajutor? showHint: Arată o idee hideHint: Închide - - # When placing a blueprint blueprintPlacer: cost: Preț - - # Map markers waypoints: waypoints: Waypointuri hub: Interfață - description: Click-stânga pe un waypoint pentru a merge la el, click-dreapta pentru a îl șterge.

Apasă pentru a crea un waypoint din perspectiva actuală, sau click-dreapta pentru a crea un waypoint. + description: Click-stânga pe un waypoint pentru a merge la el, click-dreapta + pentru a îl șterge.

Apasă pentru a crea un + waypoint din perspectiva actuală, sau click-dreapta + pentru a crea un waypoint. creationSuccessNotification: Waypointul a fost creat. - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Plasează un extractor pe o formă de cerc pentru a o extrage! - 1_2_conveyor: >- - Conectează extractorul cu obandă rulantă până la centru!

Sfat: Click și trage banda cu mouse-ul tău! - - 1_3_expand: >- - Acesta NU este un joc idle! Construiește mai multe extractoare și benzi pentru a finaliza scopul mai rapid.

Sfat: Ține apăsat SHIFT pentru a plasa mai multe extractoare, și flosește R pentru a le roti. - + 1_1_extractor: Plasează un extractor pe o formă de + cerc pentru a o extrage! + 1_2_conveyor: "Conectează extractorul cu obandă rulantă până la + centru!

Sfat: Click și trage banda cu + mouse-ul tău!" + 1_3_expand: "Acesta NU este un joc idle! Construiește mai multe + extractoare și benzi pentru a finaliza scopul mai + rapid.

Sfat: Ține apăsat SHIFT pentru a + plasa mai multe extractoare, și flosește R + pentru a le roti." colors: red: Roșu green: Verde @@ -415,8 +313,42 @@ ingame: title: Start empty: Gol copyKey: Copy Key - -# All shop upgrades + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Benzi, Distribuitor & Tunele @@ -430,285 +362,435 @@ shopUpgrades: painting: name: Amestecare & Pictare description: Viteza x → x - -# Buildings and their name / description buildings: belt: default: - name: &belt Benzi Rulante + name: Benzi Rulante description: Transportă obiecte, ține apăsat și trage pentru a plasa mai multe. - - miner: # Internal name for the Extractor + miner: default: - name: &miner Extractor + name: Extractor description: Plasează peste o formă sau culoare pentru a o extrage. - chainable: name: Extractor (lanț) - description: Plasează peste o formă sau culoare pentru a o extrage. Poate fi înlănțuit. - - underground_belt: # Internal name for the Tunnel + description: Plasează peste o formă sau culoare pentru a o extrage. Poate fi + înlănțuit. + underground_belt: default: - name: &underground_belt Tunel + name: Tunel description: Permite transportarea resurselor pe sub construcții și benzi. - tier2: name: Tunnel Tier II description: Permite transportarea resurselor pe sub construcții și benzi. - - splitter: # Internal name for the Balancer - default: - name: &splitter Distribuitor - description: Multifuncțional - Distribuie egal toate input-urile pe toate output-urile. - - compact: - name: Combinator (compact) - description: Combină două benzi rulante în una. - - compact-inverse: - name: Combinator (compact) - description: Combină două benzi rulante în una. - cutter: default: - name: &cutter Tăietor - description: Taie forme de sus în jos și scoate ambele jumătăți. Dacă folosești doar o parte, ține minte să o distrugi pe cealaltă sau producția se va opri! + name: Tăietor + description: Taie forme de sus în jos și scoate ambele jumătăți. Dacă + folosești doar o parte, ține minte să o distrugi pe cealaltă sau + producția se va opri! quad: name: Tăietor (Quad) - description: Taie formele în patru părți. Dacă folosești doar o parte, ține minte să o distrugi pe cealaltă sau producția se va opri! - + description: Taie formele în patru părți. Dacă folosești doar o parte, + ține minte să o distrugi pe cealaltă sau producția se va + opri! rotater: default: - name: &rotater Rotate + name: Rotate description: Rotește formele în sensul acelor de ceasornic la 90 de grade. ccw: name: Rotate (CCW) - description: Rotește formele în inversul sensului acelor de ceasornic la 90 de grade. - fl: + description: Rotește formele în inversul sensului acelor de ceasornic la 90 de + grade. + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Mașină de presat - description: Unește ambele obiecte. Dacă ele nu poti fi unite, obiectul drept va fi pus peste obiectul stâng. - + name: Mașină de presat + description: Unește ambele obiecte. Dacă ele nu poti fi unite, obiectul drept va + fi pus peste obiectul stâng. mixer: default: - name: &mixer Mixer de culori + name: Mixer de culori description: Amestecă două culori folosind amestecuri aditive. - painter: default: - name: &painter Mașină de pictat - description: &painter_desc Colorează întreaga formă din input-ul stâng folosind culoarea din input-ul drept. + name: Mașină de pictat + description: Colorează întreaga formă din input-ul stâng folosind culoarea din + input-ul drept. double: name: Mașină de pictat (Dublu) - description: Colorează formele din input-urile din stânga folosind culoarea din input-ul de sus. + description: Colorează formele din input-urile din stânga folosind culoarea din + 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: *painter - description: *painter_desc - + name: Mașină de pictat + description: Colorează întreaga formă din input-ul stâng folosind culoarea din + input-ul drept. trash: default: - name: &trash Gunoi - description: Acceptă input-uri din toate părțile și le distruge. Pentru totdeauna. - - storage: - name: Depozit - description: Depozitează obiectele in exces, până la o capacitate dată. Poate fi folosit ca un overflow gate. + name: Gunoi + description: Acceptă input-uri din toate părțile și le distruge. Pentru + totdeauna. hub: deliver: Deliver toUnlock: pentru a debloca levelShortcut: LVL + endOfDemo: End of Demo wire: default: name: Energy Wire description: Allows you to transport energy. - advanced_processor: + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + balancer: default: - name: Color Inverter - description: Accepts a color or shape and inverts it. - energy_generator: - deliver: Deliver - toGenerateEnergy: For - default: - name: Energy Generator - description: Generates energy by consuming shapes. - wire_crossings: - default: - name: Wire Splitter - description: Splits a energy wire into two. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 grade. - + desc: rotater-ul a fost deblocat! El rotește formele la 90 de + grade. reward_painter: title: Pictatul - desc: >- - The Mașina de pictat a fost deblocată - Extrage niște culori (la fel cum faci și cu formele) și combină-le cu o formă în mașina de pictat pentru a le colora!

PS: Dacă ești orb, acolo este un mod pentru orbi în setări! - + desc: "The Mașina de pictat a fost deblocată - Extrage niște + culori (la fel cum faci și cu formele) și combină-le cu o formă în + mașina de pictat pentru a le colora!

PS: Dacă ești orb, acolo + este un mod pentru orbi în setări!" reward_mixer: title: Amestecatul culorilor - desc: Mixerul a fost deblocat - Combină două culori folosind amestecul de aditivi cu această clădire! - + desc: Mixerul a fost deblocat - Combină două culori folosind + amestecul de aditivi cu această clădire! reward_stacker: title: Mașina de presat - desc: Acum poți combina forme cu mașina de presat! Ambele input-uri vor fi combinate, iar dacă ele pot fi puse alături, ele vor fi sudate. Dacă nu, input-ul drept este pus peste input-ul stâng! - + desc: Acum poți combina forme cu mașina de presat! Ambele + input-uri vor fi combinate, iar dacă ele pot fi puse alături, ele + vor fi sudate. Dacă nu, input-ul drept este + 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 benzi și construcții cu el! - + desc: Tunelul a fost deblocat - Acum poți deplasa obiecte prin + benzi și construcții cu el! reward_rotater_ccw: title: Rotarea CCW - desc: Ai deblocat o variantă a rotater-ului - El permite rotația în sensul invers al acelor de ceasornic! Pentru a îț construi, selectează rotater-ul și apasă 'T' pentru a cicla printre variante! - + desc: Ai deblocat o variantă a rotater-ului - El permite + rotația în sensul invers al acelor de ceasornic! Pentru a îț + construi, selectează rotater-ul și apasă 'T' pentru a cicla + 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 distanță mai mare, iar tu poți de asemenea să alternezi acele tunele acum! - - reward_splitter_compact: - title: Distribuitor compact - desc: >- - Ai deblocat o variantă compactă a distribuitorului - El acceptă două input-uri și le combină intr-una! - + desc: Ai deblocat o variantă nouă a tunelului - El are + distanță mai mare, iar tu poți de asemenea să + alternezi acele tunele acum! reward_cutter_quad: title: Tăiatul quadriplu - desc: Ai deblocat o variantă a tăietorului - El îți permite să tai forme în patru părți în loc de doar două! - + desc: Ai deblocat o variantă a tăietorului - El îți permite să + tai forme în patru părți în loc de doar două! reward_painter_double: title: Pictatul dublu - desc: Ai deblocat o variantă a Mașini de pictat - Funcționează la fel ca o mașină de pictat normală dar, procesează două forme odată consumând doar o culoare în loc de două! - - reward_painter_quad: - title: Pictatul quadruplu - desc: Ai deblocat o variantă a Mașini de pictat - Ea permite să pictezi fiecare parte a formei individual! - + desc: Ai deblocat o variantă a Mașini de pictat - Funcționează + la fel ca o mașină de pictat normală dar, procesează două + 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! Selectează o zonă (Ține apăsat CTRL, apoi trage cu mouse-ul tău), și apasă 'C' pentru a o copia.

Lipitul nu este gratis, ai nevoie să produci forme de planuri pentru a ți le permite! (Acelea pe care tocmai le-ai livrat). - - # Special reward, which is shown when there is no reward actually + desc: Acum poți copia și lipi părți ale fabrici tale! + Selectează o zonă (Ține apăsat CTRL, apoi trage cu mouse-ul tău), și + apasă 'C' pentru a o copia.

Lipitul nu este + gratis, ai nevoie să produci forme de + planuri pentru a ți le permite! (Acelea pe care tocmai + le-ai livrat). no_reward: title: Nivelul următor - desc: >- - Acest nivel nu ți-a dat nimic dar, următor îți va da!

PS: Mai bine nu îți distruge fabricile construite - Ai nevoie de toate acele forme mai târziu din nou pentru a debloca upgrade-uri! - + desc: "Acest nivel nu ți-a dat nimic dar, următor îți va da!

PS: Mai + bine nu îți distruge fabricile construite - Ai nevoie de + toate acele forme mai târziu din nou pentru a + debloca upgrade-uri!" no_reward_freeplay: title: Nivelul următor - desc: >- - Felicitări! Apropo, mai mult conținut este planificat pentru versiunea standalone! - + desc: Felicitări! Apropo, mai mult conținut este planificat pentru versiunea + 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Setări categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Dezvoltare staging: Beta prod: Producere buildDate: Construit - labels: uiScale: title: Scala de interfață - description: >- - Schimbă dimensiunea interfeței utilizatorului. Această interfață tot se va scala bazată pe rezoluția dispozitivului dumneavoastră dar, această setare controlează cantitatea scalări. + description: Schimbă dimensiunea interfeței utilizatorului. Această interfață + tot se va scala bazată pe rezoluția dispozitivului dumneavoastră + dar, această setare controlează cantitatea scalări. scales: super_small: Foarte mică small: Mică regular: Normal large: Mare huge: Imens - scrollWheelSensitivity: title: Sensitivitatea Zoom-ului - description: >- - Schimbă cât de sensitiv zoom-ul este (Fie roata mouse-ului ori trackpadlui). + description: Schimbă cât de sensitiv zoom-ul este (Fie roata mouse-ului ori + trackpadlui). sensitivity: super_slow: Foarte încet slow: Încet regular: Regulat fast: Rapid super_fast: Foarte rapid - language: title: Limba - description: >- - Schimbă limba. Toate traducerile sunt contribuite de utilizatori și pot fi incomplete! - + description: Schimbă limba. Toate traducerile sunt contribuite de utilizatori și + pot fi incomplete! fullscreen: title: Fullscreen - description: >- - Este recomandat ca jocul să fie jucat în fullscreen pentru a aveam cea mai bună experiență. Doar disponibil în versiunea standalone. - + description: Este recomandat ca jocul să fie jucat în fullscreen pentru a aveam + cea mai bună experiență. Doar disponibil în versiunea + standalone. soundsMuted: title: Oprește sunetele - description: >- - Dacă este activat, oprește toate efectele sonore. - + description: Dacă este activat, oprește toate efectele sonore. musicMuted: title: Oprește muzica - description: >- - Dacă este activat, oprește toată muzica. - + description: Dacă este activat, oprește toată muzica. theme: title: Tema jocului - description: >- - Alege tema jocului (luminoasă / întunecată). - + description: Alege tema jocului (luminoasă / întunecată). themes: dark: Întunecată light: Luminoasă - refreshRate: title: Simulation Target - description: >- - Dacă ai un monitor cu 144hz, schimbă refresh rate-ul aici și jocul va simula la refresh rate-uri mai mari. Acesta poate de fapt scădea FPS-urile dacă calculatorul dumneavoastră este prea lent. - + description: Dacă ai un monitor cu 144hz, schimbă refresh rate-ul aici și jocul + va simula la refresh rate-uri mai mari. Acesta poate de fapt + scădea FPS-urile dacă calculatorul dumneavoastră este prea lent. alwaysMultiplace: title: Plasare multiplă - description: >- - Dacă este activat, toate construcțiile vor sta selectate până le anulezi. Asta este echivalent cu ținutul SHIFT-ului apăsat permanent. - + description: Dacă este activat, toate construcțiile vor sta selectate până le + anulezi. Asta este echivalent cu ținutul SHIFT-ului apăsat + permanent. offerHints: title: Indicii & Tutoriale - description: >- - Dacă este activat, oferă indicii și tutoriale în timpul jocului. De asemenea ascunde anumite elemente ale interfeței utilizatorului certain UI pâna la anumite nivele pentru a ușura înțelegerea jocului. - + description: Dacă este activat, oferă indicii și tutoriale în timpul jocului. De + asemenea ascunde anumite elemente ale interfeței utilizatorului + certain UI pâna la anumite nivele pentru a ușura înțelegerea + jocului. movementSpeed: title: Viteza de deplasare description: Modifică viteza cât de rapid se mișcă vederea folosind tastatura. @@ -721,18 +803,17 @@ settings: extremely_fast: Extrem de Rapid enableTunnelSmartplace: title: Tunele Inteligente - description: >- - Când este activat, plasarea tunelelor va elimina automat benzile nefolositoare. - Aceasta permite de asemenea tragerea tunelelor și tunelele în exces vor fi șterse. + description: Când este activat, plasarea tunelelor va elimina automat benzile + nefolositoare. Aceasta permite de asemenea tragerea tunelelor și + tunelele în exces vor fi șterse. vignette: title: Vignette - description: >- - Dacă este activat, înnegrește colțurile ecranului și face textul mai ușor de citit. - + description: Dacă este activat, înnegrește colțurile ecranului și face textul + mai ușor de citit. autosaveInterval: title: Intervalul de salvare automată - description: >- - Controlează cât de des jocul se salvează automat. Poți de asemenea să o dezactivezi total aici. + description: Controlează cât de des jocul se salvează automat. Poți de asemenea + să o dezactivezi total aici. intervals: one_minute: 1 Minut two_minutes: 2 Minute @@ -742,28 +823,77 @@ settings: disabled: Dezactivat compactBuildingInfo: title: Informații ale construcțiilor compacte - description: >- - Shortens info boxes for buildings by only showing their ratios. Otherwise adescription and image is shown. + description: Shortens info boxes for buildings by only showing their ratios. + Otherwise adescription and image is shown. disableCutDeleteWarnings: title: Dezactivre Avertizări Tăiere/Ștergere - description: >- - Dezactivează avertizările dialogului adus când sunt șterse mai mult de 100 de entități. - + description: Dezactivează avertizările dialogului adus când sunt șterse mai mult + de 100 de entități. enableColorBlindHelper: title: Modul pentru orbi de culoare - description: Activează diferite unelte care îți permit să joci jocul chiar dacă ești orb de culoare. + description: Activează diferite unelte care îți permit să joci jocul chiar dacă + ești orb de culoare. rotationByBuilding: title: Rotație după tipul clădirii - description: >- - Fiecare tip de clădire ține minte ultima rotație pe care i-ai setat-o individual. Aceasta poate fi mai confortabil dacă schimbi frecvent între tipurile clădirilor. - + description: Fiecare tip de clădire ține minte ultima rotație pe care i-ai + setat-o individual. Aceasta poate fi mai confortabil dacă + schimbi frecvent între tipurile clădirilor. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Tastele setate - hint: >- - Indiciu: Asigură-te că foloseșto CTRL, SHIFT și ALT! Ele activează diferite opțiuni de plasare. - + hint: "Indiciu: Asigură-te că foloseșto CTRL, SHIFT și ALT! Ele activează + diferite opțiuni de plasare." resetKeybindings: Reset Keyinbindings - categoryLabels: general: Aplicație ingame: Joc @@ -772,7 +902,6 @@ keybindings: massSelect: Selectare în masă buildings: Comenzi rapide pentru clădiri placementModifiers: Modificatori de plasare - mappings: confirm: Confirm back: Înapoi @@ -781,38 +910,30 @@ keybindings: mapMoveDown: Mută în joc mapMoveLeft: Mută în stânga centerMap: Centrează harta - mapZoomIn: Mărește imaginea mapZoomOut: Micșorează imaginea createMarker: Creează waypoint - menuOpenShop: Upgrade-uri menuOpenStats: Statistici - toggleHud: Comută interfața toggleFPSInfo: Comută FPS and Debug Info - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Benzi Rulante + underground_belt: Tunel + miner: Extractor + cutter: Tăietor + rotater: Rotate + stacker: Mașină de presat + mixer: Mixer de culori + painter: Mașină de pictat + trash: Gunoi rotateWhilePlacing: Rotește - rotateInverseModifier: >- - Modifier: Rotește CCW în schimb + rotateInverseModifier: "Modifier: Rotește CCW în schimb" cycleBuildingVariants: Ciclează Variante confirmMassDelete: Confirmă ștergere în masă cycleBuildings: Ciclează clădiri - massSelectStart: Ține apăsat și trage pentru a începe massSelectSelectMultiple: Selectează zone multiple massSelectCopy: Copiază zona - placementDisableAutoOrientation: Dezactivați orientarea automată placeMultiple: Rămâneți în modul de plasare placeInverse: Inversați orientarea automată a benzii @@ -825,33 +946,38 @@ keybindings: pipette: Pipette menuClose: Close Menu switchLayers: Switch layers - advanced_processor: Color Inverter - energy_generator: Energy Generator 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: Despre acest joc body: >- - Acest joc este open source și dezvoltat de Tobias Springer (acesta sunt eu).

+ Acest joc este open source și dezvoltat de Tobias Springer + (acesta sunt eu).

- Dacă vrei să contribui, verifică shapez.io pe github.

+ Dacă vrei să contribui, verifică shapez.io pe github.

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

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

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

- - În final, mii de mulțumiri prietenului meu Niklas - Fără sesiunile noastre de - factorio acest joc nu ar fi existat niciodată. + Coloana sonoră a fost făcută de Peppsen - Este uimitor.

+ În final, mii de mulțumiri prietenului meu Niklas - Fără sesiunile noastre de factorio acest joc nu ar fi existat niciodată. changelog: title: Lista de schimbări - demo: features: restoringGames: Restabilirea savegame-urilor @@ -859,5 +985,65 @@ demo: oneGameLimit: Limitat la un savegame customizeKeybindings: Taste customizabile exportingBase: Exportul întregii baze ca imagine - settingNotAvailable: Nu este valabil în 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. diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 2e1657aa..6d07d56c 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -1,112 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io — это игра о строительстве фабрик для автоматизации создания и объединения все более сложных фигур на бесконечной карте. + shortText: shapez.io — это игра о строительстве фабрик для автоматизации + создания и объединения все более сложных фигур на бесконечной карте. + discordLinkShort: Официальный Discord сервер + intro: >- + Shapez.io - это спокойная игра о создании фабрик для автоматизации + создания сложных геометрических фигур. - # 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] + По мере управления уровня, фигуры становятся все сложнее, так что придется расширять фабрику засчет бесконечной карты. - 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] - - discordLink: Официальный Discord - Общайся со мной! + Приобретение игры в 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: >- + Кто угодно может внести свой вклад в разработку игры - я активно + вовлечен в сообщество и стараюсь просмотреть все предложения и по + возможности прислушиваться к отзывам. + Не забудьте заглянуть на мой Trello board, чтобы ознакомиться с планами на будущее! global: loading: Загрузка error: Ошибка - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: ∞ - time: - # Used for formatting past time dates oneSecondAgo: одну секунду назад xSecondsAgo: секунд(ы) назад oneMinuteAgo: одну минуту назад @@ -115,14 +66,10 @@ global: xHoursAgo: часов(а) назад oneDayAgo: один день назад xDaysAgo: дней(я) назад - - # Short formats for times, e.g. '5h 23m' secondsShort: с minutesAndSecondsShort: м с hoursAndMinutesShort: ч м - xMinutes: мин. - keys: tab: TAB control: CTRL @@ -130,14 +77,9 @@ global: escape: ESC shift: SHIFT space: ПРОБЕЛ - demoBanners: - # This is the "advertisement" shown in the main menu and other various places - title: Демо-версия - intro: >- - Приобретите полную версию, чтобы - разблокировать все возможности! - + title: Демоверсия + intro: Приобретите полную версию, чтобы разблокировать все возможности! mainMenu: play: Играть changelog: Список изменений @@ -145,19 +87,16 @@ mainMenu: openSourceHint: Это игра с открытым исходным кодом! discordLink: Офици- альный Дискорд helpTranslate: Помоги с переводом! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Извините, но игра работает медленно в вашем браузере! Приобретите полную версию или загрузите Chrome чтобы ознакомится с игрой в полной мере. - + browserWarning: Извините, но игра работает медленно в вашем браузере! + Приобретите полную версию или загрузите Chrome чтобы ознакомится с игрой + в полной мере. savegameLevel: Уровень savegameLevelUnknown: Неизвестный уровень - continue: Продолжить newGame: Новая Игра madeBy: Создал subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -171,114 +110,101 @@ 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: >- - Вам необходимо перезапустить игру, чтобы применить настройки. - + text: Вам необходимо перезапустить игру, чтобы применить настройки. editKeybinding: title: Изменение управления - desc: Нажмите клавишу или кнопку мыши, которую хотите назначить, или нажмите «Esc» для отмены. - + desc: Нажмите клавишу или кнопку мыши, которую хотите назначить, или нажмите + «Esc» для отмены. resetKeybindingsConfirmation: title: Сброс управления - desc: Это сбросит все настройки управления к их значениям по умолчанию. Подтвердите это действие. - + desc: Это сбросит все настройки управления к их значениям по умолчанию. + Подтвердите это действие. keybindingsResetOk: title: Сброс управления desc: Настройки управления сброшены до соответствующих значений по умолчанию! - featureRestriction: - title: Демо-версия - desc: Вы попытались получить доступ к функции (), которая недоступна в демо-версии. Вы можете приобрести полную версию чтобы пользоваться всеми функциями! - + title: Демоверсия + desc: Вы попытались получить доступ к функции (), которая недоступна в + демоверсии. Вы можете приобрести полную версию чтобы пользоваться + всеми функциями! oneSavegameLimit: title: Лимит сохранений - desc: Вы можете иметь только одно сохранение игры в демо-версии. Пожалуйста, удалите существующее или приобретите полную версию! - + desc: Вы можете иметь только одно сохранение игры в демоверсии. Пожалуйста, + удалите существующее или приобретите полную версию! updateSummary: title: Новое обновление! - desc: >- - Здесь изменения с тех пор, когда вы в последний раз играли: - + desc: "Здесь изменения с тех пор, когда вы в последний раз играли:" upgradesIntroduction: title: Улучшения открыты! - desc: >- - Все формы, которые вы производите, могут быть использованы для разблокировки - улучшений - Не разрушайте свои старые фабрики! - Вкладка улучшений находится в правом верхнем углу экрана. + desc: Все формы, которые вы производите, могут быть использованы для + разблокировки улучшений - Не разрушайте свои старые + фабрики! Вкладка улучшений находится в правом верхнем углу + экрана. massDeleteConfirm: title: Подтвердить удаление - desc: >- - Вы собираетесь удалить много построек (точнее: )! Вы действительно хотите сделать это? - + desc: "Вы собираетесь удалить много построек (точнее: )! Вы действительно + хотите сделать это?" blueprintsNotUnlocked: title: Еще не открыто - desc: >- - Чертежи еще не открыты! Завершите больше уровней, чтобы открыть их. - + desc: Чертежи еще не открыты! Завершите больше уровней, чтобы открыть их. keybindingsIntroduction: title: Полезные горячие клавиши - desc: >- - В этой игре много горячих клавиш, которые облегчают строительство больших фабрик. - Вот несколько, но обязательно проверьте настройки управления!

- CTRL + Потащить: Выбор области для копирования / удаления.
- SHIFT: Удерживайте, чтобы разместить несколько зданий.
- ALT: Инвертировать направление размещаемых конвейерных лент.
- + desc: "В этой игре много горячих клавиш, которые облегчают строительство больших + фабрик. Вот несколько, но обязательно проверьте настройки + управления!

CTRL + + Потащить: Выбор области для копирования / удаления.
SHIFT: Удерживайте, чтобы разместить + несколько зданий.
ALT: + Инвертировать направление размещаемых конвейерных лент.
" createMarker: title: Новый маркер - desc: Дайте ему содержательное имя, также можно добавить сокращение в виде фигуры (Которое можно сгенерировать здесь) + desc: Дайте ему значимое название, вы также можете добавить короткий + ключ фигуры (Который можно сгенерировать + здесь) titleEdit: Редактирование маркера - markerDemoLimit: - desc: Вы можете создать только 2 своих маркера в демо-версии. Приобретите полную версию для безлимитных маркеров. + desc: Вы можете создать только 2 своих маркера в демоверсии. Приобретите полную + версию для безлимитных маркеров. massCutConfirm: title: Подтвердите вырезку - desc: >- - Вы собираетесь вырезать много зданий (точнее: )! Вы уверены, - что хотите это сделать? - + desc: "Вы собираетесь вырезать много зданий (точнее: )! Вы уверены, что + хотите это сделать?" exportScreenshotWarning: title: Экспорт скриншота - desc: >- - Вы собираетесь экспортировать вашу базу в виде скриншота. Обратите внимание, - что это может быть довольно медленным процессом для большой базы - и даже привести к аварийному завершению игры! - + desc: Вы собираетесь экспортировать вашу базу в виде скриншота. Обратите + внимание, что это может быть довольно медленным процессом для + большой базы и даже привести к аварийному завершению игры! massCutInsufficientConfirm: title: Подтвердите вырезку - desc: Вы не можете позволить себе вставить эту область! Вы уверены, что хотите вырезать ее? - + desc: Вы не можете позволить себе вставить эту область! Вы уверены, что хотите + вырезать ее? + editSignal: + title: Установить Сигнал + descItems: "Выберите объект:" + descShortKey: ... или введите короткий ключ фигуры (Который + можно сгенерировать здесь) + renameSavegame: + title: Переименовать Сохранение + desc: Здесь вы можете изменить название своего сохранения. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Передвижение selectBuildings: Выбрать область @@ -286,7 +212,7 @@ ingame: rotateBuilding: Повернуть постройку placeMultiple: Поставить несколько reverseOrientation: Реверсировать направление - disableAutoOrientation: Отключить авто-определение направления + disableAutoOrientation: Отключить автоопределение направления toggleHud: Переключить HUD placeBuilding: Разместить постройку createMarker: Создать маркер @@ -299,18 +225,9 @@ ingame: clearSelection: Отменить pipette: Пипетка switchLayers: Переключить слои - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Нажмите для переключения вариантов. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Клавиша: - + hotkeyLabel: "Клавиша: " infoTexts: speed: Скорость range: Расстояние @@ -318,36 +235,21 @@ ingame: oneItemPerSecond: 1 пред. / сек. itemsPerSecond: пред. / сек. itemsPerSecondDouble: (x2) - tiles: клеток - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Уровень completed: Завершено unlockText: Открыто ! buttonNextLevel: Следующий уровень - - # Notifications on the lower right notifications: newUpgrade: Новое улучшение доступно! gameSaved: Игра сохранена. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Улучшения buttonUnlock: Улучшить - - # Gets replaced to e.g. "Tier IX" tier: Уровень - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: Скорость x (макс.) - - # The "Statistics" window statistics: title: Статистика dataSources: @@ -356,55 +258,46 @@ ingame: description: Показывает количество хранящихся фигур в хабе. produced: title: Производится - description: Показывает производящиеся фигуры, включая промежуточное производство. + description: Показывает производящиеся фигуры, включая промежуточное + производство. delivered: title: Доставляется description: Показывает фигуры, которые доставляются в хаб. noShapesProduced: Фигуры еще не произведены. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / мин. - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Игровое время - buildingsPlaced: Постройки beltsPlaced: Конвейеры - - buttons: - continue: Продолжить - settings: Настройки - menu: Вернуться в меню - - # Bottom left tutorial hints tutorialHints: title: Нужна помощь? showHint: Показать подсказку hideHint: Закрыть - - # When placing a blueprint blueprintPlacer: cost: Стоимость - - # Map markers waypoints: waypoints: Маркеры hub: ХАБ - description: ЛКМ по маркеру, чтобы переместиться к нему, ПКМ, чтобы удалить.

Нажмите чтобы создать маркер в текущей позиции или ПКМ, чтобы выбрать другое место для создания маркера. + description: ЛКМ по маркеру, чтобы переместиться к нему, ПКМ, чтобы удалить. +

Нажмите чтобы создать маркер в текущей позиции + или ПКМ, чтобы выбрать другое место для создания + маркера. creationSuccessNotification: Маркер создан. - - # Interactive tutorial interactiveTutorial: title: Обучение hints: - 1_1_extractor: Поместите экстрактор на фигуру в форме круга чтобы добыть ее! - 1_2_conveyor: >- - Соедините экстрактор конвейером с хабом!

Подсказка: Необходимо выбрать конвейер и нажать и потащить мышку! - - 1_3_expand: >- - Это НЕ idle-игра! Постройте больше экстракторов и конвейеров, чтобы достичь цели быстрее.

Подсказка: Удерживайте SHIFT чтобы разместить несколько экстракторов, а R чтобы вращать их. - + 1_1_extractor: Поместите экстрактор на фигуру в форме + круга чтобы добыть ее! + 1_2_conveyor: "Соедините экстрактор конвейером с + хабом!

Подсказка: Необходимо выбрать конвейер и + нажать и потащить мышку!" + 1_3_expand: "Это НЕ idle-игра! Постройте больше экстракторов и + конвейеров, чтобы достичь цели быстрее.

Подсказка: + Удерживайте SHIFT чтобы разместить несколько + экстракторов, а R чтобы вращать их." colors: red: Красный green: Зеленый @@ -419,8 +312,42 @@ ingame: title: Слои empty: Пусто copyKey: Копировать - -# All shop upgrades + connectedMiners: + one_miner: 1 Экстрактор + n_miners: Экстрактора(-ов) + limited_items: Ограничено до + watermark: + title: Демоверсия + desc: Нажмите сюда, чтобы узнать о преимуществах Steam версии! + get_on_steam: Приобрести в Steam + standaloneAdvantages: + title: Приобретите полную версию! + no_thanks: Нет, спасибо! + points: + levels: + title: 12 Новых Уровней! + desc: Всего 26 уровней! + buildings: + title: 18 новых Построек! + desc: Полностью автоматизируйте свою фабрику! + savegames: + title: ∞ Сохранений + desc: Сколько Вашей душе угодно! + upgrades: + title: 20 стадий улучшений! + desc: В демоверсии всего 5! + markers: + title: ∞ Маркеров! + desc: Никогда не теряйтесь в своей фабрике! + wires: + title: Провода! + desc: Полноценное дополнительное измерение! + darkmode: + title: Темная Тема! + desc: Дайте глазам отдохнуть! + support: + title: Поддержите меня + desc: Я занимаюсь разработкой в свободное время! shopUpgrades: belt: name: Конвейеры, Разделители & Туннели @@ -434,287 +361,441 @@ shopUpgrades: painting: name: Смешивание & Покраска description: Скорость x → x - -# Buildings and their name / description buildings: belt: default: - name: &belt Конвейер - description: Транспортирует предметы. Держите и тащите, чтобы разместить несколько. - - miner: # Internal name for the Extractor + name: Конвейер + description: Транспортирует предметы. Держите и тащите, чтобы разместить + несколько. + miner: default: - name: &miner Экстрактор - description: Поместите над жилой с фигурами или красителями, чтобы добыть ресурс. - + name: Экстрактор + description: Поместите над жилой с фигурами или красителями, чтобы добыть + ресурс. chainable: name: Цеп. экстрактор - description: Поместите над жилой с фигурами или красителями, чтобы добыть ресурс. Может последовательно соединяться в цепь. - - underground_belt: # Internal name for the Tunnel + description: Поместите над жилой с фигурами или красителями, чтобы добыть + ресурс. Может последовательно соединяться в цепь. + underground_belt: default: - name: &underground_belt Туннель + name: Туннель description: Позволяет перевозить ресурсы под зданиями и конвейерами. - tier2: name: Туннель II description: Позволяет перевозить ресурсы под зданиями и конвейерами. - - splitter: # Internal name for the Balancer - default: - name: &splitter Разделитель - description: Многофункциональный - равномерно распределяет все входы на все выходы. - - compact: - name: Соединитель - description: Компактный - занимает всего одну клетку! Объединяет два конвейера в один. - - compact-inverse: - name: Соединитель - description: Компактный - занимает всего одну клетку! Объединяет два конвейера в один. - cutter: default: - name: &cutter Резак - description: Разрезает фигуры сверху вниз и выводит обе половины. Если Вы собираетесь использовать только одну часть, уничтожьте другую, иначе производство остановится! + name: Резак + description: Разрезает фигуры сверху вниз и выводит обе половины. Если + вы собираетесь использовать только одну часть, уничтожьте + другую, иначе производство остановится! quad: name: Резак (4Вых.) - description: Разрезает фигуры на четыре части. Если Вы собираетесь использовать не все части - уничтожьте оставшиеся, иначе производство остановится! - + description: Разрезает фигуры на четыре части. Если вы собираетесь + использовать не все части - уничтожьте оставшиеся, иначе + производство остановится! rotater: default: - name: &rotater Вращатель + name: Вращатель description: Поворачивает фигуры по часовой стрелке на 90 градусов. ccw: name: Вращатель (Обр.) description: Поворачивает фигуры против часовой стрелки на 90 градусов. - fl: + rotate180: name: Вращатель (180) - description: Вращает фигуры на 180 градусов. - + description: Поворачивает фигуры на 180 градусов. stacker: default: - name: &stacker Объединитель - description: Объединяет два предмета. Если они не могут быть соединены, правый элемент помещается над левым. - + name: Объединитель + description: Объединяет два предмета. Если они не могут быть соединены, правый + элемент помещается над левым. mixer: default: - name: &mixer Смешиватель + name: Смешиватель description: Аддитивно смешивает цвета двух красителей. - painter: default: - name: &painter Покрасчик - description: &painter_desc Красит всю фигуру из левого входа красителем из перпендикулярного. + name: Покрасчик + description: Красит всю фигуру из левого входа красителем из перпендикулярного. double: name: Покрасчик (2Вх.) description: Красит фигуру из левых входов красителем из перпендикулярного. quad: name: Покрасчик (4Вх.) - description: Позволяет раскрасить каждую четверть фигуры разными цветами. + description: Позволяет отдельно окрашивать каждую часть фигуры. Только ячейки с + положительным сигналом на слое с проводами + будут окрашены! mirrored: - name: *painter - description: *painter_desc - + name: Покрасчик + description: Красит всю фигуру из левого входа красителем из перпендикулярного. trash: default: - name: &trash Мусорка + name: Мусорка description: Имеет входы со всех сторон. Уничтожает все принимаемые ресурсы. - - storage: - name: Хранилище - description: Хранит лишние предметы до заданной вместимости. Может использоваться в качестве ворот для пропускания излишков. hub: deliver: Доставить toUnlock: чтобы открыть levelShortcut: Ур. + endOfDemo: Конец Демо wire: default: name: Энерг. провод description: Позволяет транспортировать энергию. - advanced_processor: + second: + name: Энерг. провод + description: Передает сигналы, которые могут быть ресурсами, цветами или + логическими значениями (1 / 0). Провода разных цветов не + соединяются. + balancer: default: - name: Инвертор цвета - description: Инвертирует цвета красителей или фигур. - energy_generator: - deliver: Доставить - toGenerateEnergy: Для - default: - name: Генератор энергии - description: Производит энергию из фигур. - wire_crossings: - default: - name: Разделитель провода - description: Разделяет энергетический провод на два. + name: Балансер + description: Многофункциональный - равномерно распределяет все входы на выходы. merger: - name: Соединитель проводов - description: Соединяет два энергетических провода в один. - + name: Соединитель (компактный) + description: Соединяет две линии ковейера в одну. + merger-inverse: + name: Соединитель (компактный) + description: Соединяет две линии ковейера в одну. + splitter: + name: Разделитель (компактный) + description: Разделяет одну линию конвейера на две. + splitter-inverse: + name: Разделитель (компактный) + description: Разделяет одну линию конвейера на две. + storage: + default: + name: Буферное Хранилище + description: Хранит излишние ресурсы пока есть место. Левый выход в приоритете, + может быть использован как буфер. + wire_tunnel: + default: + name: Пересечение Проводов + description: Позволяет пересекать провода при этом их не соединяя. + constant_signal: + default: + name: Постоянный Сигнал + description: Издает постоянный сигнал, который может быть ресурсом, цветом или + логическим значением (1 / 0). + lever: + default: + name: Переключатель + description: Может быть переключен, чтобы издавать логический сигнал (1 / 0) на + слое с проводами, который может быть использован для управления + Фильтром, например. + logic_gate: + default: + name: AND Gate + description: Издает значение "1" если оба входа положительны. (Положительный - + значит ресурс, цвет или логическое значение "1") + not: + name: NOT Gate + description: Издает значение "1" если вход не положительный. (Положительный - + значит ресурс, цвет или логическое значение "1") + xor: + name: XOR Gate + description: Издает значение "1" только один из входов положительный. + (Положительный - значит ресурс, цвет или логическое значение + "1") + or: + name: OR Gate + description: Издает значение "1" если хотя бы один вход положительный. + (Положительный - значит ресурс, цвет или логическое значение + "1"). + filter: + default: + name: Фильтр + description: Подключите сигнал, чтобы направить все подходящие ресурсы наверх, а + остальные направо. Также контролируемо логическими сигналами. + display: + default: + name: Экран + description: Подключите сигнал, чтобы отобразить его на экране. Это может + ресурс, цвет или логическое значение (1 / 0). + reader: + default: + name: Измеритель + description: Позволяет измерять среднюю пропускную способность конвейера. + Отображает последний прошедший ресурс на слое с проводами (когда + разблокировано). + analyzer: + default: + name: Анализатор Фигур + description: Анализирует правую верхнюю часть низшего слоя фигуры и возвращает + ее форму и цвет. + comparator: + default: + name: Сравнить + description: Возвращает значение "1" если оба сигнала полностью одинаковы. Может + сравнивать фигуры, цвета и логические значения. + virtual_processor: + default: + name: Виртуальный Резак + description: Виртуально разрезает фигуру пополам. + rotater: + name: Виртуальный Вращатель + description: Виртуально вращает фигуру как по часовой стрелке, так и против + часовой стрелки. + unstacker: + name: Виртуальный Разъединитель + description: Виртуально извлекает самый верхний слой фигуры направо, а все + остальное направо. + stacker: + name: Виртуальный Объединитель + description: Виртуально помещает правый предмет поверх левого. + painter: + name: Виртуальный Покрасчик + description: Виртуально окрашивает фигуру из нижнего входа цветом из правого + входа. + item_producer: + default: + name: Генератор Ресурсов + description: Доступен только в режиме песочницы, производит заданный на слое с + проводами сигнал на обычном слое. + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). storyRewards: - # Those are the rewards gained from completing the store reward_cutter_and_trash: title: Разрезание Фигур - desc: Вы только что открыли резак - он разрезает фигуры пополам сверху вниз независимо от их ориентации!

Обязательно избавьтесь от отходов, иначе он остановится - для этого я дал вам мусорку, которая уничтожит все, что в нее поместить! - + desc: Разблокирован резак, который разрезает фигуры пополам по + вертикали независимо от ориентации!

Не + забудьте избавляться от излишков, иначе он забьется и + остановится - для этого я также открыл для Вас + мусорку, которая уничтожает все, что в нее + попадает! reward_rotater: title: Вращение - desc: Разблокирован вращатель! Он поворачивает фигуры по часовой стрелке на 90 градусов. - + desc: Разблокирован вращатель! Он поворачивает фигуры по + часовой стрелке на 90 градусов. reward_painter: title: Покраска - desc: >- - Разблокирован покрасчик! Добудьте краситель из жилы (так же, как и фигуры) и объедините его с фигурой в покрасчике, чтобы раскрасить ее!

PS: Если вы дальтоник, то в настройках есть Режим Дальтоника! - + desc: "Разблокирован покрасчик! Добудьте краситель из жилы (так + же, как и фигуры) и объедините его с фигурой в покрасчике, чтобы + раскрасить ее!

PS: Если вы дальтоник, то в настройках есть + Режим Дальтоника!" reward_mixer: title: Смешивание Цветов - desc: Разблокирован смешиватель! Объедините два цвета в этом здании, используя аддитивное смешивание! - + desc: Разблокирован смешиватель! Объедините два цвета в этом + здании, используя аддитивное смешивание! reward_stacker: title: Объединитель - desc: Теперь вы можете объединять фигуры объединителем! Фигуры из обеих входов объединяются. Если они могут быть расположены рядом друг с другом, они будут соединены, иначе фигура из правого входа наложится на фигуру из левого! - + desc: Теперь вы можете объединять фигуры объединителем! Фигуры + из обеих входов объединяются. Если они могут быть расположены рядом + друг с другом, они будут соединены, иначе фигура из + правого входа наложится на фигуру из левого! reward_splitter: title: Разделитель / Соединитель - desc: Разблокирован многофункциональный разделитель! Его можно использовать для создания больших фабрик путем разделения и соединения конвейеров!

- + desc: Разблокирован разделитель один из вариантов + балансера - он принимает один вход и разделяет его + на два! reward_tunnel: title: Туннель - desc: Разблокирован туннель! Теперь вы можете транспортировать предметы под другими конвейерами и зданиями! - + desc: Разблокирован туннель! Теперь вы можете транспортировать + предметы под другими конвейерами и зданиями! reward_rotater_ccw: title: Вращатель (обратный) - desc: Разблокирован вариант вращателя, вращающий фигуры против часовой стрелки! Чтобы построить его, выберите вращатель и нажмите 'T', чтобы переключить вариант! - + desc: Разблокирован вариант вращателя, вращающий фигуры против + часовой стрелки! Чтобы построить его, выберите вращатель и + нажмите 'T', чтобы переключить вариант! reward_miner_chainable: title: Цепной Экстрактор - desc: Разблокирован цепной экстрактор! Он может передавать свои ресурсы другим экстракторам, чтобы вы могли эффективнее извлекать ресурсы! - + desc: "Разблокирован цепной экстрактор! Он может + передавать свои ресурсы другим экстракторам, чтобы + вы могли эффективнее извлекать ресурсы!

PS: Старый + экстрактор был заменен в панели инструментов!" reward_underground_belt_tier_2: title: Туннель II - desc: Разблокирован новый вариант туннеля с большей дальностью, а также вы можете совмещать эти туннели! - - reward_splitter_compact: - title: Компактный Соединитель - desc: Разблокирован компактный вариант разделителя, объединяющий потоки предметов из двух входов! - + desc: Разблокирован новый вариант туннеля с большей + дальностью, а также вы можете совмещать эти туннели! reward_cutter_quad: title: Резак (4 Выхода) - desc: Разблокирован вариант резака, разрезающий фигуры на четыре части вместо двух! - + desc: Разблокирован вариант резака, разрезающий фигуры на + четыре части вместо двух! reward_painter_double: title: Двойной Покрасчик - desc: Разблокирован вариант покрасчика - он работает как обычный покрасчик, но обрабатывает две фигуры одновременно, потребляя только один краситель вместо двух! - - reward_painter_quad: - title: Покрасчик (4 Входа) - desc: Разблокирован вариант покрасчика - он позволяет отдельно раскрашивать каждую четверть фигуры! - + desc: Разблокирован вариант покрасчика - он работает как + обычный покрасчик, но обрабатывает две фигуры + одновременно, потребляя только один краситель вместо двух! reward_storage: title: Буферное Хранилище - desc: Разблокирован вариант мусорки - он позволяет хранить предметы до заданной вместимости! - + desc: Разблокировано буферное хранилище - оно позволяет хранить + в нем ресурсы пока есть место!

Левый выход в приоритете, + может быть использован как буфер! reward_freeplay: title: Свободная игра - desc: У вас получилось! Разблокирован режим свободной игры! Это означает, что фигуры теперь генерируются случайным образом! (Не беспокойтесь, больше контента планируется в полной версии!) - + desc: У Вас получилось! Разблокирован свободный режим! Это + означает что теперь фигуры будут генерироваться + случайно!

Так как ХАБ отныне будет + требовать определенную пропускную способность, я + настоятельно рекомендую построить механизм, автоматически + доставляющий запрашиваемую фигуру!

ХАБ выводит запрашиваемую + фигуру на слое с проводами, так что все, что необходимо сделать, - + это проанализировать ее и автоматически настроить вашу фабрику. reward_blueprints: title: Чертежи - desc: Теперь вы можете копировать и вставлять части вашей фабрики! Выберите область (Удерживая CTRL, перетащите мышь) и нажмите 'C', чтобы скопировать ее.

Вставка не бесплатна, для этого необходимо произвести фигуры для чертежей! (Которые вы только что доставили). - - # Special reward, which is shown when there is no reward actually + desc: Теперь вы можете копировать и вставлять части вашей + фабрики! Выберите область (Удерживая CTRL, перетащите мышь) и + нажмите 'C', чтобы скопировать ее.

Вставка не + бесплатна, для этого необходимо произвести фигуры + для чертежей! (Которые вы только что доставили). no_reward: title: Следующий уровень - desc: >- - Этот уровень не дал вам награды, но следующий даст!

PS: Лучше не разрушайте вашу существующую фабрику - Вам понадобятся все эти фигуры позже, чтобы разблокировать улучшения! - + desc: "Этот уровень не дал вам награды, но следующий даст!

PS: Лучше не + разрушайте вашу существующую фабрику - Вам понадобятся + все эти фигуры позже, чтобы разблокировать + улучшения!" no_reward_freeplay: title: Следующий уровень - desc: >- - Поздравляем! Кстати, больше контента планируется для полной версии! - + desc: Поздравляем! Кстати, больше контента планируется для полной версии! + reward_balancer: + title: Балансер + 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: Компактный Соединитель + desc: Разблокирован соединитель - вариант + балансера - он принимает два входа и объединяет их + в один конвейер. + reward_belt_reader: + title: Измеритель + desc: Разблокирован измеритель! Он позволяет измерять + пропускную способность конвейера.

А как полезен он будет, + когда вы разблокируете провода! + reward_rotater_180: + title: Вращатель (180 градусов) + desc: Разблокирован rotater на 180 градусов! - Он позволяет + вращать фигур на 180 градусов (Сюрприз! :D) + reward_display: + title: Экран + desc: "Разблокирован Экран - Подключите сигнал на слое с + проводами чтобы отобразить его!

PS: Заметили ли вы, что + измеритель и буферное хранилище отображают последний ресурс, + прошедший через них? Попробуйте отобразить его на экране!" + reward_constant_signal: + title: Постоянный Сигнал + desc: Разблокирован постоянный сигнал на слое с проводами! Он + полезен для подключения к фильтрам, + например.

Постоянный сигнал может издавать + фигуру, цвет или + логическое значение (1 / 0). + reward_logic_gates: + title: Логические Элементы + desc: Разблокированы логические элементы! Вы не обязаны + радоваться по этому поводу, но вообще это очень круто!

С + этими элементами теперь вы можете производить И, ИЛИ, исключающее + ИЛИ и НЕ операции.

Как бонус, я также дал вам + транзистор! + reward_virtual_processing: + title: Виртуальное Производство + desc: Только что я открыл вам множество новых построек, которые позволят + симулировать производство фигур!

Теперь вы + можете симулировать резак, вращатель, объединитель и др. на слое с + проводами! Теперь у вас есть три варианта продолжения игры:

+ - Построить автоматический механизм для + производства любой фигуры, запрашиваемой ХАБ (рекомендую + попробовать!).

- Построить что-то клевое, используя + провода.

- Продолжить обычную игру.

Что бы вы не + выбрали, не забывайте хорошо проводить время! + reward_wires_painter_and_levers: + title: Провода & Покрасчик (4 входа) + desc: Разблокирован Слой с Проводами. Это отдельный слой поверх + обычного слоя, добавляющий множество новых механик!

Для + начала я разблокировал Покрасчик на четыре входа - + соедините ячейки, которые вы бы хотели окрасить на слое с + проводами!

Чтобы переключиться на слой слой с проводами, + нажмите E. + reward_filter: + title: Фильтр + desc: Разблокирован Фильтр! Он направит ресурсы наверх или + направо в зависмости от того, совпадают ли они с установленным + сигналом.

Вы также можете передавать логические значения (1 + / 0), чтобы полностью отключить или включить его. + reward_demo_end: + title: Конец Демо + desc: Вы достигли конца демоверсии игры! settings: title: Настройки categories: general: Основные userInterface: Интерфейс advanced: Продвинутые - + performance: Performance versionBadges: dev: Разработчик staging: Постановка prod: Произведена buildDate: Сборка - labels: uiScale: title: Размер интерфейса - description: >- - Выберите размер пользовательского интерфейса. Интерфейс будет по-прежнему масштабироваться в зависимости от разрешения вашего устройства, но этот параметр управляет величиной масштабирования. + description: Выберите размер пользовательского интерфейса. Интерфейс будет + по-прежнему масштабироваться в зависимости от разрешения вашего + устройства, но этот параметр управляет величиной + масштабирования. scales: super_small: Очень маленький small: Маленький regular: Средний large: Большой huge: Огромный - scrollWheelSensitivity: title: Чувствительность зума - description: >- - Изменяет чувствительность зума (колесико мыши или сенсорная панель). + description: Изменяет чувствительность зума (колесико мыши или сенсорная + панель). sensitivity: super_slow: Очень медленно slow: Медленно regular: Средне fast: Быстро super_fast: Очень быстро - language: title: Язык - description: >- - Выберите язык. Все переводы сделаны пользователями и могут быть не законченными! - + description: Выберите язык. Все переводы сделаны пользователями и могут быть не + законченными! fullscreen: title: Полный экран - description: >- - Для лучшей игры рекомендуется играть в полноэкранном режиме. Доступно только в полной версии. - + description: Для лучшей игры рекомендуется играть в полноэкранном режиме. + Доступно только в полной версии. soundsMuted: title: Выключить звуки - description: >- - Если включено, выключает все звуковые эффекты. - + description: Если включено, выключает все звуковые эффекты. musicMuted: title: Выключить музыку - description: >- - Если включено, выключает музыку. - + description: Если включено, выключает музыку. theme: title: Тема игры - description: >- - Выберите тему игры (светлая / темная). - + description: Выберите тему игры (светлая / темная). themes: dark: Темная light: Светлая - refreshRate: title: Частота обновления - description: >- - Если у вас монитор 144 Гц, измените частоту обновления здесь, чтобы игра правильно выглядела при более высоких частотах обновления. Это может уменьшить FPS, если ваш компьютер работает слишком медленно. - + description: Если у вас монитор 144 Гц, измените частоту обновления здесь, чтобы + игра правильно выглядела при более высоких частотах обновления. + Это может уменьшить FPS, если ваш компьютер работает слишком + медленно. alwaysMultiplace: title: Многократное размещение - description: >- - Если включено, все здания останутся выбранными после размещения, пока вы не отмените выбор. Это эквивалентно постоянному удержанию SHIFT. - + description: Если включено, все здания останутся выбранными после размещения, + пока вы не отмените выбор. Это эквивалентно постоянному + удержанию SHIFT. offerHints: title: Подсказки & Обучение - description: >- - Стоит ли предлагать подсказки и обучающий материал во время игры. Также скрывает определенные элементы пользовательского интерфейса для данного уровня, предназначенные для облегчения "входа" в игру. - + description: Стоит ли предлагать подсказки и обучающий материал во время игры. + Также скрывает определенные элементы пользовательского + интерфейса для данного уровня, предназначенные для облегчения + "входа" в игру. movementSpeed: title: Скорость движения - description: Изменяет скорость перемещения изображения при использовании клавиатуры. + description: Изменяет скорость перемещения изображения при использовании + клавиатуры. speeds: super_slow: Очень медленно slow: Медленно @@ -724,19 +805,17 @@ settings: extremely_fast: Чрезвычайно быстро enableTunnelSmartplace: title: Умные Туннели - description: >- - Если включено, то при размещении туннелей автоматически удаляются ненужные конвейеры. - Это также позволяет протягивать туннели, причем лишние туннели будут удалены. + description: Если включено, то при размещении туннелей автоматически удаляются + ненужные конвейеры. Это также позволяет протягивать туннели, + причем лишние туннели будут удалены. vignette: title: Виньетирование - description: >- - Включает виньетирование, которое затемняет углы экрана и облегчает чтение текста. - + description: Включает виньетирование, которое затемняет углы экрана и облегчает + чтение текста. autosaveInterval: - title: Интервал авто-сохранения - description: >- - Управляет тем, как часто игра автоматически сохраняется. - Также здесь можно полностью отключить авто-сохранение. + title: Интервал автосохранения + description: Управляет тем, как часто игра автоматически сохраняется. Также + здесь можно полностью отключить автосохранение. intervals: one_minute: 1 Минута two_minutes: 2 Минуты @@ -746,32 +825,77 @@ settings: disabled: Отключено compactBuildingInfo: title: Компактная Информация о Зданиях - description: >- - Сокращает отображаемую информацию о зданиях, показывая только их множители. - Иначе информация отображается с описанием и изображением. + description: Сокращает отображаемую информацию о зданиях, показывая только их + множители. Иначе информация отображается с описанием и + изображением. disableCutDeleteWarnings: title: Отключить Предупреждение о Вырезании/Удалении - description: >- - Отключает диалоговые окна с предупреждениями, появляющиеся при + description: Отключает диалоговые окна с предупреждениями, появляющиеся при вырезании/удалении более 100 объектов. - enableColorBlindHelper: title: Режим Дальтоника - description: Включает различные инструменты, которые позволяют играть в игру дальтоникам. + description: Включает различные инструменты, которые позволяют играть в игру + дальтоникам. rotationByBuilding: title: Поворот по типу здания - description: >- - Каждый тип здания запоминает поворот, который в последний раз был установлен. - С этой настройкой может быть удобнее, при частом переключении между - различными типами зданий. - + description: Каждый тип здания запоминает поворот, который в последний раз был + установлен. С этой настройкой может быть удобнее, при частом + переключении между различными типами зданий. + soundVolume: + title: Громкость Звука + description: Задает громкость звуковых эффектов. + musicVolume: + title: Music Volume + description: Задает громкость музыки. + lowQualityMapResources: + title: Низкое качество ресурсов на карте + description: Упрощает отображение ресурсов на карте при приближении для + улучшения производительности. Оно даже выглядит аккуратнее, + поэтому обязательно попробуйте! + disableTileGrid: + title: Отключить Сетку + description: Отключение разделительной сетки может помочь улучшить + производительность. Кроме того, делает игру визуально проще! + clearCursorOnDeleteWhilePlacing: + title: Очистить Курсор на ПКМ + description: Включено по умолчанию, очищает курсор от выбранной постройки при + нажатии на ПКМ. Если отключено, вы можете удалять постройки при + нажатии на ПКМ во время строительства. + lowQualityTextures: + title: Низкое качество текстур (Некрасиво) + description: Использует низкое качество текстур, чтобы улучшить + производительность. Это сделает игру очень некрасивой! + displayChunkBorders: + title: Отображать границы чанков + description: Эта игра разделена на чанки, состоящие из 16x16 ячеек, если эта + настройка включена, границы чанков будут отображаться. + pickMinerOnPatch: + title: Выбрать Экстрактор над Жилой + description: Включено по умолчанию, выбирает экстрактор, если использовать + пипетку над жилой с ресурсами. + simplifiedBelts: + title: Упрощенные Конвейеры (Некрасиво) + description: Не отображает ресурсы, находящиеся на конвейере, если не навести + курсор для улучшения производительности. Не рекомендую играть с + этой настройкой, если вас устраивает производительность. + enableMousePan: + title: Включить Перемещение Мышкой + description: Позволяет двигать карту, перемещая курсор к краям экрана. Скорость + зависит от настройки Скорости движения. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Настройки управления - hint: >- - Подсказка: Обязательно используйте CTRL, SHIFT и ALT! Они дают разные варианты размещения. - + hint: "Подсказка: Обязательно используйте CTRL, SHIFT и ALT! Они дают разные + варианты размещения." resetKeybindings: Сброс настроек управления - categoryLabels: general: Основные ingame: Игровые @@ -780,7 +904,6 @@ keybindings: massSelect: Множественный Выбор buildings: Постройки placementModifiers: Модификаторы Размещения - mappings: confirm: Подтвердить back: Назад @@ -789,41 +912,33 @@ keybindings: mapMoveDown: Вниз mapMoveLeft: Влево centerMap: Центрировать карту - mapZoomIn: Приблизить mapZoomOut: Отдалить createMarker: Создать Маркер - menuOpenShop: Улучшения menuOpenStats: Статистика - toggleHud: Переключить HUD toggleFPSInfo: Включить/выключить FPS и информацию отладки - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Конвейер + underground_belt: Туннель + miner: Экстрактор + cutter: Резак + rotater: Вращатель + stacker: Объединитель + mixer: Смешиватель + painter: Покрасчик + trash: Мусорка rotateWhilePlacing: Вращать - rotateInverseModifier: >- - Модификатор: Вращать против часовой стрелки + rotateInverseModifier: "Модификатор: Вращать против часовой стрелки" cycleBuildingVariants: Переключение Вариантов confirmMassDelete: Подтверждение Массового Удаления cycleBuildings: Переключение Построек - massSelectStart: Модификатор для выделения области massSelectSelectMultiple: Выбрать несколько областей massSelectCopy: Копировать область - - placementDisableAutoOrientation: Отключить авто-определение направления + placementDisableAutoOrientation: Отключить автоопределение направления placeMultiple: Оставаться в режиме размещения - placeInverse: Инвертировать авто-определение направления конвейеров + placeInverse: Инвертировать автоопределение направления конвейеров pasteLastBlueprint: Вставить последний чертеж massSelectCut: Вырезать область exportScreenshot: Экспорт всей Базы в виде Изображения @@ -833,33 +948,38 @@ keybindings: pipette: Пипетка menuClose: Закрыть меню switchLayers: Переключить слои - advanced_processor: Инвертор цвета - energy_generator: Генератор энергии wire: Энергетический провод - + balancer: Балансер + storage: Буферное Хранилище + constant_signal: Постоянный Сигнал + logic_gate: Логический Элемент + lever: Переключатель (обычный) + filter: Фильтр + wire_tunnel: Пересечение Проводов + display: Экран + reader: Измеритель + virtual_processor: Виртуальный Резак + transistor: Транзистор + analyzer: Анализатор Фигур + comparator: Сравнить + item_producer: Генератор Ресурсов (Песочница) + copyWireValue: "Провода: скопировать значение под курсором" about: title: Об игре body: >- - Эта игра с открытым исходным кодом, разработана Тобиасом Спрингером (это я).

+ Эта игра с открытым исходным кодом, разработана Тобиасом Спрингером + (это я).

- Если вы хотите внести свой вклад игре - shapez.io в github.

+ Если вы хотите внести свой вклад игре - shapez.io в github.

- Эта игра не была бы возможна без большого сообщества в дискорде, которое собралось - вокруг моих игр - Вам действительно стоит присоединиться к серверу Discord!!

+ Эта игра не была бы возможна без большого сообщества в дискорде, которое собралось вокруг моих игр - Вам действительно стоит присоединиться к серверу Discord!!

- Саундтрек сделал Peppsen - Он потрясающий.

- - Наконец, огромное спасибо моему лучшему другу Niklas - Без наших - игровых сессий в Factorio эта игра никогда не существовала бы. + Саундтрек сделал Peppsen - Он потрясающий.

+ Наконец, огромное спасибо моему лучшему другу Niklas - Без наших игровых сессий в Factorio эта игра никогда не существовала бы. changelog: title: Список изменений - demo: features: restoringGames: Восстановить сохранения игр @@ -867,5 +987,71 @@ demo: oneGameLimit: Ограниченность одним сохранением игры customizeKeybindings: Пользовательская настройка Управления exportingBase: Экспорт всей Базы в виде Изображения - - settingNotAvailable: Не доступно в демо-версии. + settingNotAvailable: Недоступно в демоверсии. +tips: + - ХАБ принимает любые ресурсы, не только текущую фигуру! + - Старайтесь создавать модульные фабрики - вы не пожалеете! + - Не стройте слишком близко к ХАБ-у, иначе начнется ужасный хаос! + - Если не получается объединить фигуры, попробуйте поменять входы местами! + - Вы можете изменить направление конвейера при строительстве, нажав R. + - Удерживая CTRL, вы можете перемещать конвейеры без авто ориентации. + - Соотношения всегда одинаковы, если уровни улучшений равны. + - Последовательное выполнение эффективнее, чем параллельное. + - Вам будут открываться новые варианты построек по мере прохождения! + - Нажмите T, чтобы переключаться между различными вариантами. + - Симметрия - ключ к успеху! + - Вы можете переплетать между собой туннели разных уровней. + - Попробуйте строить компактные фабрики - вы не пожалеете! + - Покрасчик имеет зеркальный вариант, который может быть выбран, нажав + T. + - Правильные соотношения построек позволяет улучшить эффективность фабрики. + - At maximum level, 5 extractors will fill a single belt. + - Резаки всегда разрезают пополам по вертикали вне зависимости от ориентации. + - Чтобы получить белый цвет, смешайте все три цвета. + - Holding SHIFT will activate the belt planner, letting you place + long lines of belts easily. + - Вкладывайте время в строительство повторяемых механизмов - оно того стоит! + - To get white mix all three colors. + - The storage buffer prioritises the left output. + - Эффективность - ключ к успеху! + - Holding CTRL allows to place multiple buildings. + - You can hold ALT to invert the direction of placed belts. + - Используйте балансеры, чтобы максимизировать эффективность. + - Организация очень важна, старайтесь не пересекать конвейеры слишком часто. + - Планируйте заранее, иначе начнется ужасный хаос! + - Не удаляйте свои старые фабрики! Они понадобятся вам, чтобы открывать + улучшения. + - Попробуйте пройти 20-ый уровень самостоятельно, прежде чем искать помощи! + - Не усложняйте себе жизнь, старайтесь думать проще и вы достигните больших + высот. + - Вам может снова понадобиться ваша старая фабрика позже в игре. Старайтесь + планировать фабрику, чтобы она могла быть повторно использована. + - Иногда, вы можете найти необходимую фигуру на карте, вместо того, чтобы + создавать ее самостоятельно. + - Полноценные мельницы/вертушки никогда не генерируются натурально. + - Окрашивайте свои фигуры, прежде чем разрезать для максимальной + эффективности. + - С модулями теряется восприятие пространства; забота смертных. + - Создайте отдельную фабрику чертежей. Они очень важны для модулей. + - Взгляните внимательнее на смешиватель и вы найдете ответы на свои вопросы. + - With modules, space is merely a perception; a concern for mortal men. + - Строительство вблизи ХАБ-а может помешать будущим проектам. + - Иконка булавки на каждой фигуре закрепляет ее на экране. + - Use CTRL + Click to select an area. + - В вашем распоряжении бесконечная карта! Не загромождайте вашу фабрику, + расширяйтесь! + - Также попробуйте Factorio. Это моя любимая игра. + - Резак(4 входа) разрезает по часовой стрелке, начиная с правой верхней + части! + - Вы можете скачать свои сохранения в главном меню! + - В этой игре множество полезных комбинаций клавиш. Загляните в настройки, + чтобы ознакомиться с ними. + - В этой игре множество настроек, не забудьте с ними ознакомиться. + - Маркер ХАБ-а имеет небольшой компас, указывающий его направление. + - Нажмите F4, чтобы показать FPS и Частоту Обновления. + - Нажмите F4 дважды, чтобы показать координаты курсора и камеры. + - Вы можете нажать на закрепленную фигуру слева, чтобы открепить ее. + - 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. diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml index ad084b9d..737b64ae 100644 --- a/translations/base-sl.yaml +++ b/translations/base-sl.yaml @@ -1,112 +1,64 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io je igra grajenja tovarne katere cilj je avtomatiziranje kreiranja in procesiranja vse bolj zapletenih oblik na neskončni ravnini. + shortText: shapez.io je igra grajenja tovarne katere cilj je avtomatiziranje + kreiranja in procesiranja vse bolj zapletenih oblik na neskončni + ravnini. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # This is the text shown above the Discord link - discordLink: Uradni Discord - Pridruži se klepetu! + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - # 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] + 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! - 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. + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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] + 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 - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: one second ago xSecondsAgo: seconds ago oneMinuteAgo: one minute ago @@ -115,14 +67,10 @@ global: xHoursAgo: hours ago oneDayAgo: one day ago xDaysAgo: days ago - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: minutes - keys: tab: TAB control: CTRL @@ -130,13 +78,9 @@ global: escape: ESC shift: SHIFT space: SPACE - 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! - + intro: Get the standalone to unlock all features! mainMenu: play: Play continue: Continue @@ -148,14 +92,11 @@ mainMenu: discordLink: Official Discord Server helpTranslate: Help translate! madeBy: Made by - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Sorry, but the game is known to run slow on your browser! Get the standalone version or download chrome for the full experience. - + browserWarning: Sorry, but the game is known to run slow on your browser! Get + the standalone version or download chrome for the full experience. savegameLevel: Level savegameLevelUnknown: Unknown Level - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -169,112 +110,96 @@ dialogs: viewUpdate: View Update showUpgrades: Show Upgrades showKeybindings: Show Keybindings - importSavegameError: title: Import Error - text: >- - Failed to import your savegame: - + text: "Failed to import your savegame:" importSavegameSuccess: title: Savegame Imported - text: >- - Your savegame has been successfully imported. - + text: Your savegame has been successfully imported. gameLoadFailure: title: Game is broken - text: >- - Failed to load your savegame: - + 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: - + text: "Failed to delete the savegame:" restartRequired: title: Restart required - text: >- - You need to restart the game to apply the settings. - + text: You need to restart the game to apply the settings. editKeybinding: title: Change Keybinding desc: Press the key or mouse button you want to assign, or escape to cancel. - resetKeybindingsConfirmation: title: Reset keybindings desc: This will reset all keybindings to their default values. Please confirm. - keybindingsResetOk: title: Keybindings reset desc: The keybindings have been reset to their respective defaults! - featureRestriction: title: Demo Version - desc: You tried to access a feature () which is not available in the demo. Consider getting the standalone version for the full experience! - + desc: You tried to access a feature () which is not available in the + demo. Consider getting the standalone version for the full + experience! oneSavegameLimit: title: Limited savegames - desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone version! - + desc: You can only have one savegame at a time in the demo version. Please + remove the existing one or get the standalone version! updateSummary: title: New update! - desc: >- - Here are the changes since you last played: - + desc: "Here are the changes since you last played:" upgradesIntroduction: title: Unlock Upgrades - desc: >- - All shapes you produce can be used to unlock upgrades - Don't destroy your old factories! - The upgrades tab can be found on the top right corner of the screen. - + desc: All shapes you produce can be used to unlock upgrades - Don't + destroy your old factories! The upgrades tab can be found + on the top right corner of the screen. massDeleteConfirm: title: Confirm delete - desc: >- - You are deleting a lot of buildings ( to be exact)! Are you sure you want to do this? - + desc: You are deleting a lot of buildings ( to be exact)! Are you sure + you want to do this? massCutConfirm: title: Confirm cut - desc: >- - You are cutting a lot of buildings ( to be exact)! Are you sure you want to do this? - + desc: You are cutting a lot of buildings ( to be exact)! Are you sure you + want to do this? massCutInsufficientConfirm: title: Confirm cut - desc: >- - You can not afford to paste this area! Are you sure you want to cut it? - + desc: You can not afford to paste this area! Are you sure you want to cut it? blueprintsNotUnlocked: title: Not unlocked yet - desc: >- - Complete level 12 to unlock Blueprints! - + desc: Complete level 12 to unlock Blueprints! keybindingsIntroduction: title: Useful keybindings - desc: >- - This game has a lot of keybindings which make it easier to build big factories. - Here are a few, but be sure to check out the keybindings!

- CTRL + Drag: Select an area.
- SHIFT: Hold to place multiple of one building.
- ALT: Invert orientation of placed belts.
- + desc: "This game has a lot of keybindings which make it easier to build big + factories. Here are a few, but be sure to check out the + keybindings!

CTRL + + Drag: Select an area.
SHIFT: + Hold to place multiple of one building.
ALT: Invert orientation of placed + belts.
" 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) + 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: You can only create two custom markers in the demo. Get the standalone for unlimited markers! - + desc: You can only create two custom markers in the demo. Get the standalone for + unlimited markers! 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 + can be quite slow for a big base and even crash your game! + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Move selectBuildings: Select area @@ -295,8 +220,6 @@ ingame: clearSelection: Clear selection pipette: Pipette switchLayers: Switch layers - - # Names of the colors, used for the color blind mode colors: red: Red green: Green @@ -307,18 +230,9 @@ ingame: white: White black: Black uncolored: No color - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Press to cycle variants. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Speed range: Range @@ -326,36 +240,21 @@ ingame: oneItemPerSecond: 1 item / second itemsPerSecond: items / s itemsPerSecondDouble: (x2) - tiles: tiles - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Level completed: Completed unlockText: Unlocked ! buttonNextLevel: Next Level - - # Notifications on the lower right notifications: newUpgrade: A new upgrade is available! gameSaved: Your game has been saved. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Upgrades buttonUnlock: Upgrade - - # 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] - maximumLevel: MAXIMUM LEVEL (Speed x) - - # The "Statistics" window statistics: title: Statistics dataSources: @@ -364,62 +263,86 @@ ingame: description: Displaying amount of stored shapes in your central building. produced: title: Produced - description: Displaying all shapes your whole factory produces, including intermediate products. + description: Displaying all shapes your whole factory produces, including + intermediate products. delivered: title: Delivered description: Displaying shapes which are delivered to your central building. noShapesProduced: No shapes have been produced so far. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Playtime - buildingsPlaced: Buildings beltsPlaced: Belts - - buttons: - continue: Continue - settings: Settings - menu: Return to menu - - # Bottom left tutorial hints tutorialHints: title: Need help? showHint: Show hint hideHint: Close - - # When placing a blueprint blueprintPlacer: cost: Cost - - # Map markers waypoints: waypoints: Markers hub: HUB - description: Left-click a marker to jump to it, right-click to delete it.

Press to create a marker from the current view, or right-click to create a marker at the selected location. + description: Left-click a marker to jump to it, right-click to delete + it.

Press to create a marker from the current + view, or right-click to create a marker at the + selected location. creationSuccessNotification: Marker has been created. - - # Shape viewer shapeViewer: title: Layers empty: Empty copyKey: Copy Key - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Place an extractor on top of a circle shape to extract it! - 1_2_conveyor: >- - Connect the extractor with a conveyor belt to your hub!

Tip: Click and drag the belt with your mouse! - - 1_3_expand: >- - This is NOT an idle game! Build more extractors and belts to finish the goal quicker.

Tip: Hold SHIFT to place multiple extractors, and use R to rotate them. - -# All shop upgrades + 1_1_extractor: Place an extractor on top of a circle + shape to extract it! + 1_2_conveyor: "Connect the extractor with a conveyor belt to + your hub!

Tip: Click and drag the belt + with your mouse!" + 1_3_expand: "This is NOT an idle game! Build more extractors + and belts to finish the goal quicker.

Tip: Hold + SHIFT to place multiple extractors, and use + R to rotate them." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Belts, Distributor & Tunnels @@ -433,244 +356,385 @@ shopUpgrades: painting: name: Mixing & Painting description: Speed x → x - -# Buildings and their name / description buildings: hub: deliver: Deliver toUnlock: to unlock levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Conveyor Belt + name: Conveyor Belt description: Transports items, hold and drag to place multiple. - wire: default: - name: &wire Wire + name: Wire description: Allows you to transport energy - - miner: # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + miner: default: - name: &miner Extractor + name: Extractor description: Place over a shape or color to extract it. - chainable: name: Extractor (Chain) description: Place over a shape or color to extract it. Can be chained. - - underground_belt: # Internal name for the Tunnel + underground_belt: default: - name: &underground_belt Tunnel + name: Tunnel description: Allows you to tunnel resources under buildings and belts. - tier2: name: Tunnel Tier II description: Allows you to tunnel resources under buildings and belts. - - splitter: # Internal name for the Balancer - default: - name: &splitter Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. - - compact: - name: Merger (compact) - description: Merges two conveyor belts into one. - - compact-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. - cutter: default: - name: &cutter Cutter - description: Cuts shapes from top to bottom and outputs both halves. If you use only one part, be sure to destroy the other part or it will stall! + name: 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! quad: name: Cutter (Quad) - description: Cuts shapes into four parts. If you use only one part, be sure to destroy the other parts or it will stall! - - advanced_processor: - default: - name: &advanced_processor Advanced Processor - description: Advanced shape processing - + description: Cuts shapes into four parts. If you use only one part, be + sure to destroy the other parts or it will stall! rotater: default: - name: &rotater Rotate + name: Rotate description: Rotates shapes clockwise by 90 degrees. ccw: name: Rotate (CCW) description: Rotates shapes counter-clockwise by 90 degrees. - fl: + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Stacker - description: Stacks both items. If they can not be merged, the right item is placed above the left item. - + name: Stacker + description: Stacks both items. If they can not be merged, the right item is + placed above the left item. mixer: default: - name: &mixer Color Mixer + name: Color Mixer description: Mixes two colors using additive blending. - painter: default: - name: &painter Painter - description: &painter_desc Colors the whole shape on the left input with the color from the top input. - + name: Painter + description: Colors the whole shape on the left input with the color from the + top input. mirrored: - name: *painter - description: *painter_desc - + name: Painter + description: Colors the whole shape on the left input with the color from the + top input. double: name: Painter (Double) - description: Colors the shapes on the left inputs with the color from the top input. + description: Colors the shapes on the left inputs with the color from the top + input. quad: name: Painter (Quad) - description: Allows you to color each quadrant of the shape with a different color. - + 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 Trash + name: Trash description: Accepts inputs from all sides and destroys them. Forever. - - storage: - name: Storage - description: Stores excess items, up to a given capacity. Can be used as an overflow gate. - - energy_generator: - deliver: Deliver - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: For - + balancer: default: - name: &energy_generator Energy Generator - description: Generates energy by consuming shapes. Each energy generator requires a different shape. - wire_crossings: - default: - name: Wire Splitter - description: Splits a energy wire into two. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store reward_cutter_and_trash: title: Cutting Shapes - desc: You just unlocked the cutter - it cuts shapes half from top to bottom regardless of its orientation!

Be sure to get rid of the waste, or otherwise it will stall - For this purpose I gave you a trash, which destroys everything you put into it! - + 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 clockwise by 90 degrees. - + desc: The rotater has been unlocked! It rotates shapes + clockwise by 90 degrees. reward_painter: title: Painting - desc: >- - The painter has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!

PS: If you are colorblind, there is a colorblind mode in the settings! - + 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 + colorblind mode in the settings!" reward_mixer: title: Color Mixing - desc: The mixer has been unlocked - Combine two colors using additive blending with this building! - + desc: The mixer has been unlocked - Combine two colors using + additive blending with this building! reward_stacker: title: Combiner - desc: You can now combine shapes with the combiner! Both inputs are combined, and if they can be put next to each other, they will be fused. If not, the right input is stacked on top of the left input! - + desc: You can now combine shapes with the combiner! Both inputs + are combined, and if they can be put next to each other, they will + be fused. If not, the right input is + stacked on top of the left input! 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 through belts and buildings with it! - + desc: The tunnel has been unlocked - You can now tunnel items + through belts and buildings with it! reward_rotater_ccw: title: CCW Rotating - 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! - + desc: You have unlocked a variant of the rotater - It allows + you to rotate shapes counter-clockwise! To build it, select the + rotater and press 'T' to cycle through its + variants! reward_miner_chainable: title: Chaining Extractor - desc: You have unlocked the chaining extractor! It can forward its resources to other extractors so you can more efficiently extract resources! - + 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: You have unlocked a new variant of the tunnel - It has a bigger range, and you can also mix-n-match those tunnels now! - - reward_splitter_compact: - title: Compact Balancer - desc: >- - You have unlocked a compact variant of the balancer - It accepts two inputs and merges them into one belt! - + 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! reward_cutter_quad: title: Quad Cutting - desc: You have unlocked a variant of the cutter - It allows you to cut shapes in four parts instead of just two! - + 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: Double Painting - desc: You have unlocked a variant of the painter - It works as the regular painter but processes two shapes at once consuming just one color instead of two! - - reward_painter_quad: - title: Quad Painting - desc: You have unlocked a variant of the painter - It allows you to paint each part of the shape individually! - + desc: You have unlocked a variant of the painter - It works as + the regular painter but processes two shapes at + once consuming just one color instead of two! 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!) - + 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: Blueprints - desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). - - # Special reward, which is shown when there is no reward actually + 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: Next level - desc: >- - This level gave you no reward, but the next one will!

PS: Better don't destroy your existing factory - You need all those shapes later again to unlock upgrades! - + desc: "This level gave you no reward, but the next one will!

PS: Better + don't destroy your existing factory - You need all + those shapes later again to unlock upgrades!" no_reward_freeplay: title: Next level - desc: >- - Congratulations! By the way, more content is planned for the standalone! - + desc: Congratulations! By the way, more content is planned for the 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Settings categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Development staging: Staging prod: Production buildDate: Built - labels: uiScale: title: Interface scale - description: >- - Changes the size of the user interface. The interface will still scale based on your device's resolution, but this setting controls the amount of scaling. + description: Changes the size of the user interface. The interface will still + scale based on your device's resolution, but this setting + controls the amount of scaling. scales: super_small: Super small small: Small regular: Regular large: Large huge: Huge - autosaveInterval: title: Autosave Interval - description: >- - Controls how often the game saves automatically. You can also disable it entirely here. - + description: Controls how often the game saves automatically. You can also + disable it entirely here. intervals: one_minute: 1 Minute two_minutes: 2 Minutes @@ -678,22 +742,18 @@ settings: ten_minutes: 10 Minutes twenty_minutes: 20 Minutes disabled: Disabled - scrollWheelSensitivity: title: Zoom sensitivity - description: >- - Changes how sensitive the zoom is (Either mouse wheel or trackpad). + description: Changes how sensitive the zoom is (Either mouse wheel or trackpad). sensitivity: super_slow: Super slow slow: Slow regular: Regular fast: Fast super_fast: Super fast - movementSpeed: title: Movement speed - description: >- - Changes how fast the view moves when using the keyboard. + description: Changes how fast the view moves when using the keyboard. speeds: super_slow: Super slow slow: Slow @@ -701,87 +761,122 @@ settings: fast: Fast super_fast: Super Fast extremely_fast: Extremely Fast - language: title: Language - description: >- - Change the language. All translations are user-contributed and might be incomplete! - + description: Change the language. All translations are user-contributed and + might be incomplete! enableColorBlindHelper: title: Color Blind Mode - description: >- - Enables various tools which allow you to play the game if you are color blind. - + description: Enables various tools which allow you to play the game if you are + color blind. fullscreen: title: Fullscreen - description: >- - It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone. - + description: It is recommended to play the game in fullscreen to get the best + experience. Only available in the standalone. soundsMuted: title: Mute Sounds - description: >- - If enabled, mutes all sound effects. - + description: If enabled, mutes all sound effects. musicMuted: title: Mute Music - description: >- - If enabled, mutes all music. - + description: If enabled, mutes all music. theme: title: Game theme - description: >- - Choose the game theme (light / dark). + description: Choose the game theme (light / dark). themes: dark: Dark light: Light - refreshRate: title: Simulation Target - description: >- - If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow. - + description: If you have a 144hz monitor, change the refresh rate here so the + game will properly simulate at higher refresh rates. This might + actually decrease the FPS if your computer is too slow. alwaysMultiplace: title: Multiplace - description: >- - If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. - + description: If enabled, all buildings will stay selected after placement until + you cancel it. This is equivalent to holding SHIFT permanently. offerHints: title: Hints & Tutorials - description: >- - Whether to offer hints and tutorials while playing. Also hides certain UI elements up to a given level to make it easier to get into the game. - + description: Whether to offer hints and tutorials while playing. Also hides + certain UI elements up to a given level to make it easier to get + into the game. enableTunnelSmartplace: title: Smart Tunnels - description: >- - When enabled, placing tunnels will automatically remove unnecessary belts. This also enables you to drag tunnels and excess tunnels will get removed. - + description: When enabled, placing tunnels will automatically remove unnecessary + belts. This also enables you to drag tunnels and excess tunnels + will get removed. vignette: title: Vignette - description: >- - Enables the vignette, which darkens the screen corners and makes text easier to read. - + description: Enables the vignette, which darkens the screen corners and makes + text easier to read. rotationByBuilding: title: Rotation by building type - description: >- - Each building type remembers the rotation you last set it to individually. This may be more comfortable if you frequently switch between placing different building types. - + description: Each building type remembers the rotation you last set it to + individually. This may be more comfortable if you frequently + switch between placing different building types. compactBuildingInfo: title: Compact Building Infos - description: >- - Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown. - + description: Shortens info boxes for buildings by only showing their ratios. + Otherwise a description and image is shown. disableCutDeleteWarnings: title: Disable Cut/Delete Warnings - description: >- - Disables the warning dialogs brought up when cutting/deleting more than 100 entities. - + description: Disables the warning dialogs brought up when cutting/deleting more + than 100 entities. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Keybindings - hint: >- - Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. - + hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different + placement options." resetKeybindings: Reset Keybindings - categoryLabels: general: Application ingame: Game @@ -790,7 +885,6 @@ keybindings: massSelect: Mass Select buildings: Building Shortcuts placementModifiers: Placement Modifiers - mappings: confirm: Confirm back: Back @@ -800,58 +894,63 @@ keybindings: mapMoveLeft: Move Left mapMoveFaster: Move Faster centerMap: Center Map - mapZoomIn: Zoom in mapZoomOut: Zoom out createMarker: Create Marker - menuOpenShop: Upgrades menuOpenStats: Statistics menuClose: Close Menu - toggleHud: Toggle HUD toggleFPSInfo: Toggle FPS and Debug Info switchLayers: Switch layers exportScreenshot: Export whole Base as Image - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Conveyor Belt + underground_belt: Tunnel + miner: Extractor + cutter: Cutter + rotater: Rotate + stacker: Stacker + mixer: Color Mixer + painter: Painter + trash: Trash + wire: Wire pipette: Pipette rotateWhilePlacing: Rotate - rotateInverseModifier: >- - Modifier: Rotate CCW instead + rotateInverseModifier: "Modifier: Rotate CCW instead" cycleBuildingVariants: Cycle Variants confirmMassDelete: Delete area pasteLastBlueprint: Paste last blueprint cycleBuildings: Cycle Buildings lockBeltDirection: Enable belt planner - switchDirectionLockSide: >- - Planner: Switch side - + switchDirectionLockSide: "Planner: Switch side" massSelectStart: Hold and drag to start massSelectSelectMultiple: Select multiple areas massSelectCopy: Copy area massSelectCut: Cut area - placementDisableAutoOrientation: Disable automatic orientation placeMultiple: Stay in placement mode placeInverse: Invert automatic belt orientation - + 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: About this Game body: >- - This game is open source and developed by Tobias Springer (this is me).

+ This game is open source and developed by Tobias Springer + (this is me).

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

@@ -860,10 +959,8 @@ about: The soundtrack was made by Peppsen - He's awesome.

Finally, huge thanks to my best friend Niklas - Without our factorio sessions, this game would never have existed. - changelog: title: Changelog - demo: features: restoringGames: Restoring savegames @@ -871,5 +968,65 @@ demo: oneGameLimit: Limited to one savegame customizeKeybindings: Customizing Keybindings exportingBase: Exporting whole Base as Image - settingNotAvailable: Not available in the 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. diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml index 953c024a..6a4f5f6f 100644 --- a/translations/base-sr.yaml +++ b/translations/base-sr.yaml @@ -1,132 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# -# -# -# Hvala https://github.com/ivanbratovic na idejama za prevod. Alal ti vera na prevodu :) -# -# + HUB = Središte -# + Area = Oblast -# + Shape = Oblik -# + Upgrade = Nadogradnja -# + Waypoint/Marker = Putokaz -# + Blueprint = Nacrt -# + Extractor = Rudar -# + Extractor (chain) = Rudar (lančani) -# + Conveyor Belt = Pokretna Traka -# + Belt = Traka -# + Tunnel = Tunel -# + Merger = Spajač -# + Rotator = Obrtač - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io je igra o pravljenju fabrika za automatizaciju stvaranja i spajanja sve složenijih oblika na beskonačno velikoj mapi. + shortText: shapez.io je igra o pravljenju fabrika za automatizaciju stvaranja i + spajanja sve složenijih oblika na beskonačno velikoj mapi. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # This is the text shown above the Discord link - discordLink: Oficijalni Discord server - # TODO - # This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page. - # 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] + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - shapez.io je igra o pravljenju fabrika za automatizaciju stvaranja i spajanja sve složenijih oblika na beskonačno velikoj mapi. + 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! - Nakon dostavljanja zahtevanog oblika napredovaćete u igri i oključaćete nadogradnje za bržu fabriku. + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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] + 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 - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: hilj. millions: mil. billions: mlrd. trillions: tril. - - # Shown for infinitely big numbers infinite: beskonačno - time: - # Used for formatting past time dates oneSecondAgo: pre jedne sekunde xSecondsAgo: pre sekundi oneMinuteAgo: pre jednog minuta @@ -135,14 +66,10 @@ global: xHoursAgo: pre sati oneDayAgo: pre jednog dana xDaysAgo: pre dana - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: h m - xMinutes: min - keys: tab: TAB control: CTRL @@ -150,13 +77,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demo Verzija - intro: >- - Nabavite punu igru kako biste otključali sve funkcije! - + intro: Nabavite punu igru kako biste otključali sve funkcije! mainMenu: play: Igraj continue: Nastavi @@ -168,14 +91,12 @@ mainMenu: discordLink: Oficijalni Diskord server helpTranslate: Pomozite sa prevođenjem! madeBy: Napravio - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Izvinjavamo se, pošto je poznato da se ova igra koči u pretraživaču! Za puno iskustvo nabavite samostalnu verziju ili koristite chrome. - + browserWarning: Izvinjavamo se, pošto je poznato da se ova igra koči u + pretraživaču! Za puno iskustvo nabavite samostalnu verziju ili koristite + chrome. savegameLevel: Nivo savegameLevelUnknown: Nepoznat Nivo - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -189,112 +110,96 @@ dialogs: viewUpdate: Pogledajte ažuriranje showUpgrades: Prikaži Nadogradnje showKeybindings: Prikaži podešavanje tastera - importSavegameError: title: Greška prilikom uvoza - text: >- - Neuspešan uvoz sačuvane igre: - + text: "Neuspešan uvoz sačuvane igre:" importSavegameSuccess: title: Uvoz sačuvane igre - text: >- - Uspešno uvezena sačuvana igra. - + text: Uspešno uvezena sačuvana igra. gameLoadFailure: title: Igra je pukla - text: >- - Neuspešno učitavanje sačuvane igre: - + 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: - + text: "Neuspešno brisanje sačuvane igre:" restartRequired: title: Potrebno je ponovno pokretanje - text: >- - Da bi primenili podešavanja, potrebno je da ponovo pokrenute igru. - + text: Da bi primenili podešavanja, potrebno je da ponovo pokrenute igru. editKeybinding: title: Promeni podešavanja tastera - desc: Pritisnite taster ili dugme na mišu koje žeite da dodelite, ili Escape za otkazivanje. - + desc: Pritisnite taster ili dugme na mišu koje žeite da dodelite, ili Escape za + otkazivanje. resetKeybindingsConfirmation: title: Resetuj podešavanja tastera - desc: Ovo će resetovati sve tastere na njihove početne vrednosti. Potrebno je potvrditi. - + desc: Ovo će resetovati sve tastere na njihove početne vrednosti. Potrebno je + potvrditi. keybindingsResetOk: title: Podešavanja tastera su resetovana desc: Podešavanja tastera su resetovana na njihove početne vrednosti! - featureRestriction: title: Demo Verzija - desc: Pokušali ste da pristupite funkciji () koja nije dostupna u demo verziji. Za puno iskustvo, nabavite samostalnu igru! - + desc: Pokušali ste da pristupite funkciji () koja nije dostupna u demo + verziji. Za puno iskustvo, nabavite samostalnu igru! oneSavegameLimit: title: Ograničen broj sačuvanih igara - desc: Možete imati samo jednu sačuvanu igru u demo verziji. Izbrišite postojeću ili nabavite samostalnu igru! - + desc: Možete imati samo jednu sačuvanu igru u demo verziji. Izbrišite postojeću + ili nabavite samostalnu igru! updateSummary: title: Novo ažuriranje! - desc: >- - OVo su promene od zadnjeg igranja: - + desc: "OVo su promene od zadnjeg igranja:" upgradesIntroduction: title: Oktključaj Nadogradnje - desc: >- - Svi oblici koje napravite mogu se iskoristiti za oktljučavanje nadogradnji - Ne uništavajte stare fabrike! - Karticu za nadogradnje možete pronaći u gornjem desnom uglu ekrana. - + desc: Svi oblici koje napravite mogu se iskoristiti za oktljučavanje nadogradnji + - Ne uništavajte stare fabrike! Karticu za + nadogradnje možete pronaći u gornjem desnom uglu ekrana. massDeleteConfirm: title: Potvrdi brisanje - desc: >- - građevina će biti obrisano! Da li ste sigurni da to želite? - + desc: građevina će biti obrisano! Da li ste sigurni da to želite? massCutConfirm: title: Potvrdi rezanje - desc: >- - građevina će biti izrezano! Da li ste sigurni da to želite? - + desc: građevina će biti izrezano! Da li ste sigurni da to želite? massCutInsufficientConfirm: title: Potvrdi rezanje - desc: >- - Ne možete da priuštite nalepljivanje ove oblasti! Da li ste sigurni da želite da je izrežete? - + desc: Ne možete da priuštite nalepljivanje ove oblasti! Da li ste sigurni da + želite da je izrežete? blueprintsNotUnlocked: title: Zaključano - desc: >- - Završite nivo 12 kako bi otključali Nacrte! - + desc: Završite nivo 12 kako bi otključali Nacrte! keybindingsIntroduction: title: Korisne kombinacije tastera - desc: >- - Ova igra ima dosta kombinacija tastera koji olakšavaju izgradnju velikih fabrika. - Ovo su neki, ali se preporučuje da pogledate sve kombinacije!

- CTRL + Miš: Biranje oblasti.
- SHIFT: Držato za postavljanje više istih zgrada odjednom.
- ALT: Okrenite smer postavljenh pokretnih traka.
- + desc: "Ova igra ima dosta kombinacija tastera koji olakšavaju izgradnju velikih + fabrika. Ovo su neki, ali se preporučuje da pogledate sve + kombinacije!

CTRL + + Miš: Biranje oblasti.
SHIFT: + Držato za postavljanje više istih zgrada odjednom.
ALT: Okrenite smer postavljenh pokretnih + traka.
" 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! - + desc: U demo verziji možete imati samo dva putokaza istovremeno. Nabavite + samostalnu igru za beskonačno mnogo putokaza! exportScreenshotWarning: title: Izvezi sliku ekrana - desc: Hoćete da izvezete sliku cele fabrike kao snimak ekrana. Ovaj proces može biti prilično spor za velike fabrike, može se desiti i pucanje igre! - + desc: Hoćete da izvezete sliku cele fabrike kao snimak ekrana. Ovaj proces može + biti prilično spor za velike fabrike, može se desiti i pucanje igre! + 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. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Kretanje selectBuildings: Odaberi oblast @@ -315,8 +220,6 @@ ingame: clearSelection: Očisti odabir pipette: Pipeta switchLayers: Promeni sloj - - # Names of the colors, used for the color blind mode colors: red: Crvena green: Zelena @@ -327,18 +230,9 @@ ingame: white: Bela black: Crna uncolored: Bez boje - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Pritisni za različite varijacije građevine. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Taster: - + hotkeyLabel: "Taster: " infoTexts: speed: Brzina range: Domet @@ -346,36 +240,21 @@ ingame: oneItemPerSecond: 1 premet / sekundi itemsPerSecond: predmeta / s itemsPerSecondDouble: (x2) - tiles: polja - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nivo completed: Završen unlockText: Otključali ste ! buttonNextLevel: Sledeći nivo - - # Notifications on the lower right notifications: newUpgrade: Nova nadogradnja je dostupna! gameSaved: Igra je sačuvana. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Nadogradnje buttonUnlock: Nadogradi - - # Gets replaced to e.g. "Tier IX" tier: red - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: MAKSIMALNI LEVEL (Brzina x) - - # The "Statistics" window statistics: title: Statistika dataSources: @@ -384,62 +263,86 @@ ingame: description: Količina skladištenih oblika u središtu. produced: title: Proizvedeno - description: Svi oblici koje proizvodi cela fabrika, uključujući i međuproizvode. + description: Svi oblici koje proizvodi cela fabrika, uključujući i + međuproizvode. delivered: title: Dostavljeno description: Oblici koji su dostavljeni središtu. noShapesProduced: Za sada nema proizvedenih oblika. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / min - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Vreme igranja - buildingsPlaced: Građevine beltsPlaced: Trake - - buttons: - continue: Nastavi - settings: Podešavanja - menu: Povratak na glavni meni - - # Bottom left tutorial hints tutorialHints: title: Potrebna pomoć? showHint: Prikaži savet hideHint: Zatvori - - # When placing a blueprint blueprintPlacer: cost: Cena - - # Map markers waypoints: waypoints: Putokazi hub: Središte - description: Klikni levim klikom na putokaz kako bi skočio na njegovu lokaciju, a izbriši ga desnim klikom.

Za stvaranje putokaza pritisni , ili desnim klikom napravi putokaz na odabranoj lokaciji. + description: Klikni levim klikom na putokaz kako bi skočio na njegovu lokaciju, + a izbriši ga desnim klikom.

Za stvaranje putokaza pritisni + , ili desnim klikom napravi putokaz na + odabranoj lokaciji. creationSuccessNotification: Putokaz kreiran. - - # Shape viewer shapeViewer: title: Slojevi empty: Prazno copyKey: Kopiraj kod oblika - - # Interactive tutorial interactiveTutorial: title: Tutorijal hints: - 1_1_extractor: Postavi Rudara na oblik kruga kako bi ga iskopao! - 1_2_conveyor: >- - Spoji rudara na središte koristeći pokretnu traku.

Savet: Pritisni i prevuci traku mišem! - - 1_3_expand: >- - Ovo NIJE pasivna igra čekanja! Više rudara i pokretnih traka će ubrzati napredak do cilja.

Savet: Drži SHIFT za postavljanje više rudara istovremeno, a pritisni R za okretanje. - -# All shop upgrades + 1_1_extractor: Postavi Rudara na oblik kruga + kako bi ga iskopao! + 1_2_conveyor: "Spoji rudara na središte koristeći pokretnu + traku.

Savet: Pritisni i + prevuci traku mišem!" + 1_3_expand: "Ovo NIJE pasivna igra čekanja! Više rudara i + pokretnih traka će ubrzati napredak do cilja.

Savet: Drži + SHIFT za postavljanje više rudara istovremeno, + a pritisni R za okretanje." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Trake, Delioci i Tuneli @@ -453,246 +356,383 @@ shopUpgrades: painting: name: Mešanje i Farbanje description: Brzina x → x - -# Buildings and their name / description buildings: hub: deliver: Dostavite toUnlock: kako bi otključali levelShortcut: LVL - + endOfDemo: End of Demo belt: default: - name: &belt Pokretna traka + name: Pokretna traka description: Prenosi predmete, drži i prevuci za postavku više njih. - wire: default: - name: &wire Žica + name: Žica description: Omogućava prenos energije. - - miner: # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + miner: default: - name: &miner Rudar + name: Rudar description: Postavite ga na oblik koji želite da iskopate. - chainable: name: Rudar (Lančani) - description: Postavite ga na oblik koji želite da iskopate. Mogu se ređati jedan u drugi. - - underground_belt: # Internal name for the Tunnel + description: Postavite ga na oblik koji želite da iskopate. Mogu se ređati jedan + u drugi. + underground_belt: default: - name: &underground_belt Tunel + name: Tunel description: Omogućava prenos predmeta ispod građevina i traka. - tier2: name: Tunel II Reda description: Omogućava prenos predmeta ispod građevina i traka. - - splitter: # Internal name for the Balancer - default: - name: &splitter Balanser - description: Multifunkcionalan - Jednako raspoređuje sve ulaze na sve izlaze. - - compact: - name: Spajač (kompaktni) - description: Spaja dve pokretne trake u jednu. - - compact-inverse: - name: Spajač (kompaktni) - description: Spaja dve pokretne trake u jednu. - cutter: default: - name: &cutter Rezač - description: Reže oblike od vrha prema dnu i na izlaze daje obe polovine. Ako se koristi samo jedan deo, drugi se mora uništiti da bi se sprečio zastoj! + name: Rezač + description: Reže oblike od vrha prema dnu i na izlaze daje obe polovine. + Ako se koristi samo jedan deo, drugi se mora uništiti da + bi se sprečio zastoj! quad: name: Rezač (četvorostruki) - description: Reže oblike na četiri dela. Ako se koristi samo jedan deo, ostali se moraju uništiti da bi se sprečio zastoj! - #TODO - advanced_processor: - default: - name: &advanced_processor Okretač boje - description: Prihvata boju ili oblik i izokreće je. - + description: Reže oblike na četiri dela. Ako se koristi samo jedan deo, + ostali se moraju uništiti da bi se sprečio zastoj! rotater: default: - name: &rotater Obrtač (↻) + name: Obrtač (↻) description: Okreće oblike za 90 stepeni u smeru kazaljke na satu. ccw: name: Obrtač (↺) description: Okreće oblike za 90 stepeni u smeru suprotnom od kazaljke na satu. - fl: + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Slagač - description: Slaže jedan oblik na drugi. Ako se oblici ne mogu spojiti, desni oblik se postavlja na vrh levog. - + name: Slagač + description: Slaže jedan oblik na drugi. Ako se oblici ne mogu spojiti, desni + oblik se postavlja na vrh levog. mixer: default: - name: &mixer Mešalica boja + name: Mešalica boja description: Spaja dve boje koristeći aditivno mešanje boja. - painter: default: - name: &painter Farbač - description: &painter_desc Farba ceo oblik na levom ulazu bojom sa gornjeg ulaza. - + name: Farbač + description: Farba ceo oblik na levom ulazu bojom sa gornjeg ulaza. mirrored: - name: *painter - description: *painter_desc - + name: Farbač + description: Farba ceo oblik na levom ulazu bojom sa gornjeg ulaza. double: name: Farbač (dupli) 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: &trash Smeće + name: Smeće description: Prima stvar sa svih strana i zauvek ih uništava. - - storage: - name: Skladište - description: Skladišti višak predmeta do određenog kapaciteta. Može se koristiti kao zaštita od prelivanja. - - energy_generator: - deliver: Dostavi - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: Za - + balancer: default: - name: &energy_generator Generator - description: Pretvara oblike u energiju. - #TODO - wire_crossings: - default: - name: &wire_crossings Razdelnik žica - description: Deli žicu na dva dela. - + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Spajač žica - description: Spaja dve žice u jednu. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 smeru kazaljke na satu. - + desc: Obrtač je otključan! On okreće oblike za 90 stepeni u + smeru kazaljke na satu. reward_painter: title: Farbanje - desc: >- - Farbač je otključan - Boja se (kao i oblici) može rudariti i spojiti s oblikom u farbaču!

PS: Postoji opcija za daltonizam u podešavanjima! - + desc: "Farbač je otključan - Boja se (kao i oblici) može + rudariti i spojiti s oblikom u farbaču!

PS: Postoji + opcija za daltonizam u podešavanjima!" reward_mixer: title: Mešalica boja - desc: Mešalica boja je otključana - Ona spaja dve boje koristeći aditivno mešanje! - + desc: Mešalica boja je otključana - Ona spaja dve boje + koristeći aditivno mešanje! reward_stacker: title: Slagač - desc: Dva oblika mogu spojiti slagačem! Oblici sa oba ulaza se spajaju - ako se mogu staviti jedan kraj drugoga, biće spojeni. Ako ne, desni ulaz se slaže na vrh levog! - + desc: Dva oblika mogu spojiti slagačem! Oblici sa oba ulaza se + spajaju - ako se mogu staviti jedan kraj drugoga, biće + spojeni. Ako ne, desni ulaz se slaže na + 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 i ostalih građevina! - + desc: Tunel je otključan - Omogućava prenos stvari ispod traka + i ostalih građevina! reward_rotater_ccw: title: Rotacija u smeru suprotnom od kazaljke na satu - desc: Varijacija obrtača je otključana - Omogućuje okretanje u smeru suprotnom od kazaljke na satu! Odaberi obrtač i pritisni 'T' za menjanje njegove varijacije! - + desc: Varijacija obrtača je otključana - Omogućuje okretanje u + smeru suprotnom od kazaljke na satu! Odaberi obrtač i + 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 veći domet, a uz to se sada mogu kombinovati vrste tunela. - - reward_splitter_compact: - title: Kompaktni Balanser - desc: >- - Varijacija balansera je otključana - On prihvata dva ulaza i spaja ih u jednu traku! - + desc: Otključana je nova varijacija tunela - On ima + veći domet, a uz to se sada mogu kombinovati vrste + tunela. reward_cutter_quad: title: Četvorostruki Rezač - desc: Varijacija rezača je otključana - Omogućava rezanje oblika na četiri dela umesto na samo dva! - + desc: Varijacija rezača je otključana - Omogućava rezanje + oblika na četiri dela umesto na samo dva! reward_painter_double: title: Dupli Farbač - desc: Varijacija farbača je otključana - Radi isti posao kao običan farbač, ali može ofarbati dva oblika odjednom po ceni jedne boje umesto dve! - - reward_painter_quad: - title: Četvorostruki Farbač - desc: Varijacija farbača je otključana - Omogućava farbanje pojedinačnih delova oblika! - + desc: Varijacija farbača je otključana - Radi isti posao kao + običan farbač, ali može ofarbati dva oblika + 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! Odaberite oblast (držite CTRL, prevucite mišem), i pritisnite 'C' da biste kopirali.

Nalepljivanje nije besplatno, potrebno je da napravite oblike za nacrte da biste ga priuštili! (To su oblici koje ste do malopre dostavljali). - - # Special reward, which is shown when there is no reward actually + desc: Sada možete da kopirate i nalepljujete delove fabrike! + Odaberite oblast (držite CTRL, prevucite mišem), i pritisnite 'C' da + biste kopirali.

Nalepljivanje nije + besplatno, potrebno je da napravite oblike za + nacrte da biste ga priuštili! (To su oblici koje ste do + malopre dostavljali). no_reward: title: Sledeći Nivo - desc: >- - Ovaj nivo je bio bez nagrade, ali sledeći neće!

PS: Nemojte uništavati stare fabrike - Svi ti oblici će vam biti potrebni kasnije da biste otključali nadogradnje! - + desc: "Ovaj nivo je bio bez nagrade, ali sledeći neće!

PS: Nemojte + uništavati stare fabrike - Svi ti oblici će vam + biti potrebni kasnije da biste otključali + nadogradnje!" no_reward_freeplay: title: Sledeći Nivo - desc: >- - Svaka čast! Više sadržaja je u planu za samostalnu igru! - + desc: Svaka čast! Više sadržaja je u planu za samostalnu igru! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Podešavanja categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Razvoj - staging: Skela #TODO + staging: Skela prod: produkcija buildDate: Izgrađeno - labels: uiScale: title: Veličina interfejsa - description: >- - Menja veličinu korisničkog interfejsa. Veličina interfejsa će i dalje zavisiti od vaše rezolucije uređaja.Ova opcija kontroliše tu veličinu interfejsa. + description: Menja veličinu korisničkog interfejsa. Veličina interfejsa će i + dalje zavisiti od vaše rezolucije uređaja.Ova opcija kontroliše + tu veličinu interfejsa. scales: super_small: Maleno small: Malo regular: Normalno large: Veliko huge: Ogromno - autosaveInterval: title: Interval Automatskog Čuvanja Igre - description: >- - Kontroliše koliko često će se igra automatski čuvati. Ovu opciju možete i da onemogućite. - + description: Kontroliše koliko često će se igra automatski čuvati. Ovu opciju + možete i da onemogućite. intervals: one_minute: 1 minut two_minutes: 2 minuta @@ -700,22 +740,19 @@ settings: ten_minutes: 10 minuta twenty_minutes: 20 minuta disabled: Onemogućeno - scrollWheelSensitivity: title: Osetljivost zumiranja - description: >- - Kontroliše koliko je zumiranje osetljivo (Točkić na mišu ili trackpad). + description: Kontroliše koliko je zumiranje osetljivo (Točkić na mišu ili + trackpad). sensitivity: super_slow: Najsporije slow: Sporo regular: Normalno fast: Brzo super_fast: Najbrže - movementSpeed: title: Brzina kretanja - description: >- - Menja brzinu kretanja kamere pri korišćenju tastature. + description: Menja brzinu kretanja kamere pri korišćenju tastature. speeds: super_slow: Najsporije slow: Sporo @@ -723,87 +760,121 @@ settings: fast: Brzo super_fast: Najbrže extremely_fast: Brže od najbržeg - language: title: Jezik - description: >- - Promenite jezik igre. Svi prevodi su delo volontera i mogu biti nezavršeni! - + description: Promenite jezik igre. Svi prevodi su delo volontera i mogu biti + nezavršeni! enableColorBlindHelper: title: Opcija za daltonizam - description: >- - Omogućuje razne alate koji pomažu pri igranju igre sa nekim oblikom daltonizma. - + description: Omogućuje razne alate koji pomažu pri igranju igre sa nekim oblikom + daltonizma. fullscreen: title: Ceo ekran - description: >- - Preporučljivo je, radi najboljeg iskustva, da igrate ovu igru na celom ekranu. Opcija dostupna samo u samostalnoj igri. - + description: Preporučljivo je, radi najboljeg iskustva, da igrate ovu igru na + celom ekranu. Opcija dostupna samo u samostalnoj igri. soundsMuted: title: Utišajte Zvukove - description: >- - Ako je odabrana, ova opcija isključuje sve zvučne efekte. - + description: Ako je odabrana, ova opcija isključuje sve zvučne efekte. musicMuted: title: Utišajte Muziku - description: >- - Ako je odabrana, ova opcija isključuje svu muziku. - + description: Ako je odabrana, ova opcija isključuje svu muziku. theme: title: Tema Igre - description: >- - Odaberite temu igre (svetla / tamna). + description: Odaberite temu igre (svetla / tamna). themes: dark: Tamna light: Svetla - refreshRate: title: Simulacija na 144 Hz - description: >- - Opcija za monitore visoke frekvencije osvežavanja. Ovo može smanjiti FPS ako je vaš računar prespor. - + description: Opcija za monitore visoke frekvencije osvežavanja. Ovo može + smanjiti FPS ako je vaš računar prespor. alwaysMultiplace: title: Višestruko Postavljanje - description: >- - Ako je omogućeno, sve građevine će ostati odabrane nakon što su postavljene. Ova opcija je ekvivalenta stalnom držanju dugmeta SHIFT. - + description: Ako je omogućeno, sve građevine će ostati odabrane nakon što su + postavljene. Ova opcija je ekvivalenta stalnom držanju dugmeta + SHIFT. offerHints: title: Saveti i Tutorijali - description: >- - Opcija za prikazivanje saveta i tutorijala za vreme igre. Dodatno krije određene elemente interfejsa, dok ih ne budete otključali, radi lakše igre. - + description: Opcija za prikazivanje saveta i tutorijala za vreme igre. Dodatno + krije određene elemente interfejsa, dok ih ne budete otključali, + radi lakše igre. enableTunnelSmartplace: title: Pametni Tuneli - description: >- - Ako je omogućeno, postavljanje tunela automatski briše nepotrebne pokretne trake. Takođe omogućuje prevlačenje tunela i brisanje višak tunela. - + description: Ako je omogućeno, postavljanje tunela automatski briše nepotrebne + pokretne trake. Takođe omogućuje prevlačenje tunela i brisanje + višak tunela. vignette: title: Vinjeta - description: >- - Omogućeva vinjetu - zatamnjuje ivice ekrana da bi tekst bio čitljiviji. - - rotationByBuilding: #TODO + description: Omogućeva vinjetu - zatamnjuje ivice ekrana da bi tekst bio + čitljiviji. + rotationByBuilding: title: Okretanje prema vrsti građevine - description: >- - Svaka građevina pamti smer na koji je bila okrenuta. Ova opcija je preporučuje ako često menjate vrste građevina koje postavljate. - + description: Svaka građevina pamti smer na koji je bila okrenuta. Ova opcija je + preporučuje ako često menjate vrste građevina koje postavljate. compactBuildingInfo: title: Skraćene Informacije o Građevinama - description: >- - Skraćuje deo sa informacijama građevine tako da prikazuje samo njihove odnose. U suptornom prikazuje opis i sliku građevine. - + description: Skraćuje deo sa informacijama građevine tako da prikazuje samo + njihove odnose. U suptornom prikazuje opis i sliku građevine. disableCutDeleteWarnings: title: Onemogući upozorenje za Rezanje/Brisanje - description: >- - Onemogućuje upozorenje koje se javlja kada režete/brišete više od 100 stvari. - + description: Onemogućuje upozorenje koje se javlja kada režete/brišete više od + 100 stvari. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Tasteri - hint: >- - Savet: Koristite CTRL, SHIFT i ALT! Oni omogućuju razne opcije postavljanja građevina. - + hint: "Savet: Koristite CTRL, SHIFT i ALT! Oni omogućuju razne opcije + postavljanja građevina." resetKeybindings: Resetuj podešavanja tastera - categoryLabels: general: Aplikacija ingame: Igra @@ -812,7 +883,6 @@ keybindings: massSelect: Masovno Odabiranje buildings: Prečice za građevine placementModifiers: Modifikatori Postavljanja - mappings: confirm: Potvrdi back: Nazad @@ -822,58 +892,63 @@ keybindings: mapMoveLeft: Idi Levo mapMoveFaster: Brže kretanje centerMap: Centar mape - mapZoomIn: Zumiraj mapZoomOut: Odzumiraj createMarker: Napravi Putokaz - menuOpenShop: Nadogradnje menuOpenStats: Statistika menuClose: Zatvori Meni - toggleHud: Uključi/Isključi Interfejs toggleFPSInfo: Uključi/Isključi FPS i infomacije o traženju grešaka u kodu switchLayers: Promeni Sloj exportScreenshot: Izvoz slike cele fabrike kao snimak ekrana - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Pokretna traka + underground_belt: Tunel + miner: Rudar + cutter: Rezač + rotater: Obrtač (↻) + stacker: Slagač + mixer: Mešalica boja + painter: Farbač + trash: Smeće + wire: Žica pipette: Pipeta rotateWhilePlacing: Okreni građevinu - rotateInverseModifier: >- - Modifikator: Rotiraj u smeru suprotnom od kazaljke na satu + rotateInverseModifier: "Modifikator: Rotiraj u smeru suprotnom od kazaljke na satu" cycleBuildingVariants: Promena Varijacije confirmMassDelete: Uništite Oblast pasteLastBlueprint: Nalepite posledji nacrt cycleBuildings: Promena Građevine lockBeltDirection: Omogući planer pokretnih traka - switchDirectionLockSide: >- - Planer: Okreni stranu - + switchDirectionLockSide: "Planer: Okreni stranu" massSelectStart: Pritisni i zadrži za za početak massSelectSelectMultiple: Odabir više oblasti massSelectCopy: Kopiranje oblasti massSelectCut: Izrezivanje oblasti - placementDisableAutoOrientation: Onemogućite automatsku orijentaciju placeMultiple: Ostanite u modu za postavljanje placeInverse: Automatski okreni orijentaciju pokretnih traka - + 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: O Igri body: >- - Ova igra je otvorenog koda i napravljena je od strane Tobias Springer (to sam ja).

+ Ova igra je otvorenog koda i napravljena je od strane Tobias Springer (to + sam ja).

Ako želite da doprinesete razvoju, bacite pogled na shapez.io github.

@@ -882,10 +957,8 @@ about: Peppsen je komponovao muziku za igru - On je super.

Na kraju svega, veliko hvala mom najboljem prijatelju Niklas-u - Bez naših factorio sesija, ova igra nikad ne bi postojala. - changelog: title: Promene - demo: features: restoringGames: Obnavljanje sačuvanih igara @@ -893,5 +966,65 @@ demo: oneGameLimit: Ograničenje od jedne sačuvane igre customizeKeybindings: Prilagođena Podešavanja Tastera exportingBase: Izvoz slike cele fabrike kao snimak ekrana - settingNotAvailable: Nije dostupno u demo verziji. +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. diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index ab302368..a06e0c95 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -1,112 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io är ett spel som går ut på att automatisera skapandet av former med ökande komplexitet inom den oändligt stora världen. + 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. + discordLinkShort: Officiel Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # 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] + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - 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. + 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! - 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]! + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - 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. + 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. - 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] - - discordLink: Official Discord - Chat with me! - global: loading: Laddar error: Error - - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "." - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + thousandsDivider: . decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: k millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: inf - time: - # Used for formatting past time dates oneSecondAgo: för en sekund sedan xSecondsAgo: för sekunder sedan oneMinuteAgo: för en minut sedan @@ -115,14 +66,10 @@ global: xHoursAgo: för timmar sedan oneDayAgo: för en dag sedan xDaysAgo: för dagar sedan - - # Short formats for times, e.g. '5h 23m' secondsShort: s minutesAndSecondsShort: m s hoursAndMinutesShort: t m - xMinutes: minuter - keys: tab: TAB control: CTRL @@ -130,13 +77,9 @@ global: escape: ESC shift: SKIFT space: MELLANSLAG - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Demo Version - intro: >- - Skaffa den fristående versionen för att låsa upp alla funktioner! - + intro: Skaffa den fristående versionen för att låsa upp alla funktioner! mainMenu: play: Spela changelog: Ändringslogg @@ -144,19 +87,16 @@ mainMenu: openSourceHint: Detta spelet har öppen kod! discordLink: Officiell Discord Server helpTranslate: Hjälp till att översätta! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Förlåt, men det är känt att spelet spelar långsamt på din browser! Skaffa den fristående versionen eller ladda ner Chrome för en bättre upplevelse. - + browserWarning: Förlåt, men det är känt att spelet spelar långsamt på din + browser! Skaffa den fristående versionen eller ladda ner Chrome för en + bättre upplevelse. savegameLevel: Nivå savegameLevelUnknown: Okänd Nivå - continue: Fortsätt newGame: Nytt spel madeBy: Skapad av subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -170,113 +110,100 @@ dialogs: viewUpdate: Se uppdateringar showUpgrades: Visa uppgraderingar showKeybindings: Visa tangentbindingar - importSavegameError: title: Importfel - text: >- - Kunde inte importera sparfil: - + text: "Kunde inte importera sparfil:" importSavegameSuccess: title: Sparfil importerad - text: >- - Din sparfil har blivit importerad. - + text: Din sparfil har blivit importerad. gameLoadFailure: title: Spel är brutet - text: >- - Kunde inte ladda sparfil: - + 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: - + text: "Kunde inte radera sparfil:" restartRequired: title: Omstart krävs - text: >- - Du behöver starta om spelet för att applicera inställningar. - + text: Du behöver starta om spelet för att applicera inställningar. editKeybinding: title: Ändra snabbtangenter - desc: Tryck ned tangenten eller musknappen du vill använda, eller escape för att avbryta. - + desc: Tryck ned tangenten eller musknappen du vill använda, eller escape för att + avbryta. resetKeybindingsConfirmation: title: Återställ snabbtangenter - desc: Detta kommer att återställa alla tangentbindningar till deras standardtangenter. Var snäll och bekräfta. - + desc: Detta kommer att återställa alla tangentbindningar till deras + standardtangenter. Var snäll och bekräfta. keybindingsResetOk: title: Återställning av snabbtangenter desc: Snabbtangenterna har återställts! - featureRestriction: title: Demoversion - desc: Du försökte nå en funktion () som inte är tillgänglig i demoversionen. Överväg att skaffa den fristående versionen för den fulla upplevelsen! - + desc: Du försökte nå en funktion () som inte är tillgänglig i + demoversionen. Överväg att skaffa den fristående versionen för den + fulla upplevelsen! oneSavegameLimit: title: Begränsad mängd sparfiler - desc: Du kan bara ha en sparfil åt gången i demoversionen. Var snäll och ta bort den nuvarande eller skaffa den fristående versionen! - + desc: Du kan bara ha en sparfil åt gången i demoversionen. Var snäll och ta bort + den nuvarande eller skaffa den fristående versionen! updateSummary: title: Ny uppdatering! - desc: >- - Här är ändringarna sen du senast spelade: - + desc: "Här är ändringarna sen du senast spelade:" upgradesIntroduction: title: Lås upp Uppgraderingar - desc: >- - Alla former du producerar kan användas för att låsa upp uppgraderingar - Förstör inte dina gamla fabriker! + desc: Alla former du producerar kan användas för att låsa upp uppgraderingar - + Förstör inte dina gamla fabriker! Uppgraderingsmenyn finns i det övre högra hörnet på skärmen. - massDeleteConfirm: title: Bekräfta borttagning - desc: >- - Du tar bort ganska många byggnader ( för att vara exakt)! Är du säker på att du vill göra detta? - + desc: Du tar bort ganska många byggnader ( för att vara exakt)! Är du + säker på att du vill göra detta? blueprintsNotUnlocked: title: Inte upplåst än - desc: >- - Nå level 12 för att låsa upp Ritningar. - + desc: Nå level 12 för att låsa upp Ritningar. keybindingsIntroduction: title: Användbara tangentbindningar - desc: >- - Detta spel använder en stor mängd tangentbindningar som gör det lättare att bygga stora fabriker. - Här är några, men se till att kolla in tangentbindningarna!

- CTRL + Dra: Välj en yta att kopiera / radera.
- SHIFT: Håll ned för att placera flera av samma byggnad.
- ALT: Invertera orientationen av placerade rullband.
- + desc: "Detta spel använder en stor mängd tangentbindningar som gör det lättare + att bygga stora fabriker. Här är några, men se till att + kolla in tangentbindningarna!

CTRL + Dra: Välj en yta att kopiera / + radera.
SHIFT: Håll ned för att + placera flera av samma byggnad.
ALT: Invertera orientationen av placerade + rullband.
" 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 versionen för ett obegränsat antal! + desc: Du kan endast ha två markörer i demoversionen. Skaffa den fristående + versionen för ett obegränsat antal! massCutConfirm: title: Bekräfta Klipp - desc: >- - Du klipper en stor mängd byggnader ( för att vara exakt)! - Är du säker på att du vill göra detta? - + desc: Du klipper en stor mängd byggnader ( för att vara exakt)! Är du + säker på att du vill göra detta? exportScreenshotWarning: title: Exportera skärmdump - desc: >- - Du efterfrågade att exportera din fabrik som en skärmdump. - Vänligen notera att detta kan ta ett tag för en stor bas och i vissa fall till och med krascha ditt spel! - + desc: Du efterfrågade att exportera din fabrik som en skärmdump. Vänligen notera + att detta kan ta ett tag för en stor bas och i vissa fall till och + med krascha ditt spel! massCutInsufficientConfirm: title: Bekräfta Klipp - desc: Du har inte råd att placera detta område! Är du säker att du vill klippa det? - + desc: Du har inte råd att placera detta område! Är du säker att du vill klippa + det? + 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: Byt namn på sparfil + desc: Du kan byta namn på din sparfil här. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Flytta selectBuildings: Välj yta @@ -297,18 +224,9 @@ ingame: clearSelection: Rensa vald pipette: Pipett switchLayers: Byt lager - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Tryck ned För att bläddra igenom varianter. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Snabbtangent: " infoTexts: speed: Hastighet range: Räckvidd @@ -316,36 +234,21 @@ ingame: oneItemPerSecond: 1 objekt / sekund itemsPerSecond: objekt / s itemsPerSecondDouble: (x2) - tiles: plattor - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Nivå completed: Avklarad unlockText: Upplåst ! buttonNextLevel: Nästa Nivå - - # Notifications on the lower right notifications: newUpgrade: En ny uppgradering är tillgänglig! gameSaved: Ditt spel har sparats. - - # The "Upgrades" window + freeplayLevelComplete: Nivå har blivit avklarad! shop: title: Upgraderingar buttonUnlock: Upgradera - - # 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] - maximumLevel: MAXNIVÅ (Hastighet x) - - # The "Statistics" window statistics: title: Statistik dataSources: @@ -354,55 +257,46 @@ ingame: description: Visar mängd förvarade former i din centrala byggnad. produced: title: Producerade - description: Visar alla former din fabrik producerar, detta inkluderar mellanhandsprodukter. + description: Visar alla former din fabrik producerar, detta inkluderar + mellanhandsprodukter. delivered: title: Levererade description: Visar former som levereras till din centrala byggnad. noShapesProduced: Inga former har producerats än. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / m - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: Speltid - buildingsPlaced: Byggnader beltsPlaced: Rullband - - buttons: - continue: Fortsätt - settings: Inställningar - menu: Återvänd till meny - - # Bottom left tutorial hints tutorialHints: title: Behöver hjälp? showHint: Visa tips hideHint: Stäng - - # When placing a blueprint blueprintPlacer: cost: Kostnad - - # Map markers waypoints: waypoints: Markörer hub: HUB - description: Vänsterklicka en markör för att hoppa till den, högerklicka för att ta bort den.

Tryck för att skapa en markör från nuvarande position, eller högerklicka för att skapa en markör vid vald plats. + description: Vänsterklicka en markör för att hoppa till den, högerklicka för att + ta bort den.

Tryck för att skapa en markör från + nuvarande position, eller högerklicka för att skapa + en markör vid vald plats. creationSuccessNotification: Markör har skapats. - - # Interactive tutorial interactiveTutorial: title: Tutorial hints: - 1_1_extractor: Placera en extraktor över en cirkel för att extrahera den! - 1_2_conveyor: >- - Koppla extraktorn med ettrullband till din hub!

Tips: Klicka och dra rullbandet med musen! - - 1_3_expand: >- - Detta är INTE ett idle-spel! Bygg fler extraktörer för att klara målet snabbare.

Tips: Håll SKIFT för att placera flera extraktörer, och använd R för att rotera dem. - + 1_1_extractor: Placera en extraktor över en + cirkel för att extrahera den! + 1_2_conveyor: "Koppla extraktorn med ettrullband till din + hub!

Tips: Klicka och dra rullbandet med + musen!" + 1_3_expand: "Detta är INTE ett idle-spel! Bygg fler extraktörer + för att klara målet snabbare.

Tips: Håll + SKIFT för att placera flera extraktörer, och + använd R för att rotera dem." colors: red: Röd green: Grön @@ -416,9 +310,43 @@ ingame: shapeViewer: title: Lager empty: Tom - copyKey: Copy Key - -# All shop upgrades + copyKey: Kopiera nyckel + connectedMiners: + one_miner: 1 Miner + n_miners: Miners + limited_items: Limited to + watermark: + title: Demo-version + desc: Klicka här för att se fördelarna med Steam-versionen! + get_on_steam: Skaffa på Steam + standaloneAdvantages: + title: Skaffa den fulla versionen! + no_thanks: Nej tack! + points: + levels: + title: 12 nya nivåer! + desc: Totalt 26 nivåer! + buildings: + title: 18 nya byggnader! + desc: Automatisera din fabrik fullkomligt! + savegames: + 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: ∞ med markeringar! + desc: Tappa aldrig bort dig i din fabrik längre! + wires: + title: Kablar + desc: En helt ny dimension! + darkmode: + title: Mörkt läge + desc: Sluta skada dina ögon! + support: + title: Stöd mig + desc: Jag utvecklar det på min fritid! shopUpgrades: belt: name: Rullband, Distributörer & Tunnlar @@ -432,288 +360,433 @@ shopUpgrades: painting: name: Blandning & Färgning description: hastighet x → x - -# Buildings and their name / description buildings: belt: default: - name: &belt Rullband + name: Rullband description: Transporterar objekt, håll in och dra för att placera flera. - - miner: # Internal name for the Extractor + miner: default: - name: &miner Extraktor + name: Extraktor description: Placera över en form eller färg för att extrahera den. - chainable: name: Extraktor (kedja) description: Placera över en form eller färg för att extrahera den. Kan kedjas. - - underground_belt: # Internal name for the Tunnel + underground_belt: default: - name: &underground_belt Tunnel + name: Tunnel description: Låter dig tunnla under byggnader och rullband. - tier2: name: Tunnel Tier II description: Låter dig tunnla resurser under byggnader och rullband. - - splitter: # Internal name for the Balancer - default: - name: &splitter balancer - description: Multifunktionell - Distribuerar alla inputs och outputs jämt. - - compact: - name: Sammanslagare (kompakt) - description: Slår ihop två rullband till ett. - - compact-inverse: - name: Sammanslagare (kompakt) - description: Slår ihop två rullband till ett. - cutter: default: - name: &cutter Klippare - description: Klipper former från topp till botten och outputtar båda halvor.Om du endast använder en halva, se till att förstöra den andra, annars kommer den blockera maskinen! + name: Klippare + description: Klipper former från topp till botten och outputtar båda + halvor.Om du endast använder en halva, se till att + förstöra den andra, annars kommer den blockera + maskinen! quad: name: Klippare (Quad) - description: Klipper former i fyra delar. Om du endast använder en del, se till att förstöra de andra, annars kommer de blockera maskinen! - + description: Klipper former i fyra delar. Om du endast använder en del, + se till att förstöra de andra, annars kommer de blockera + maskinen! rotater: default: - name: &rotater Roterare + name: Roterare description: Roterar former 90 grader. ccw: name: Roterare (CCW) description: Roterar former 90 motsols. - fl: + rotate180: name: Rotate (180) description: Rotates shapes by 180 degrees. - stacker: default: - name: &stacker Staplare - description: Staplar båda objekt. Om de inte kan slås ihop, placeras det högra objektet över det vänstra. - + name: Staplare + description: Staplar båda objekt. Om de inte kan slås ihop, placeras det högra + objektet över det vänstra. mixer: default: - name: &mixer Färgblandare + name: Färgblandare description: Blandar två färger genom additiv blandning. - painter: default: - name: &painter Färgläggare - description: &painter_desc Färgar hela formen på den vänstra ingången med färgen från den högra. + name: Färgläggare + description: Färgar hela formen på den vänstra ingången med färgen från den + högra. double: name: Färgläggare (Dubbel) 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: *painter - description: *painter_desc - + name: Färgläggare + description: Färgar hela formen på den vänstra ingången med färgen från den + högra. trash: default: - name: &trash Skräphantering + name: Skräphantering description: Tar in former från alla sidor och förstör dem. För alltid. - - storage: - name: Förvaring - description: Förvarar överskottliga objekt, till kapacitet. Kan användas som överflödsport. hub: deliver: Leverera toUnlock: Att låsa upp levelShortcut: LVL + endOfDemo: End of Demo wire: default: name: Energy Wire description: Allows you to transport energy. - advanced_processor: + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. + balancer: default: - name: Color Inverter - description: Accepts a color or shape and inverts it. - energy_generator: - deliver: Deliver - toGenerateEnergy: For - default: - name: Energy Generator - description: Generates energy by consuming shapes. - wire_crossings: - default: - name: Wire Splitter - description: Splits a energy wire into two. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 grader medsols. - + desc: Roteraren har blivit upplåst! Den roterar former 90 + grader medsols. reward_painter: title: Måleri - desc: >- - Målaren har låsts upp - Extrahera färger (precis som du gör med formerna) och kombinera med en form i målaren för att måla formen!

PS: Om du är färgblind finns det ett färblint läge bland inställningarna! - + desc: "Målaren har låsts upp - Extrahera färger (precis som du + gör med formerna) och kombinera med en form i målaren för att måla + formen!

PS: Om du är färgblind finns det ett färblint + läge bland inställningarna!" reward_mixer: title: Färgblandning - desc: Färgblandaren har blivit upplåst - Kombinera två färger genom additiv färgblandning med denna byggnad! - + desc: Färgblandaren har blivit upplåst - Kombinera två färger + genom additiv färgblandning med denna byggnad! reward_stacker: title: Kombinera - desc: Du kan nu kombinera former medstaplaren! Båda inputs blir kombinerade och om de kan sättas brevid varandra kommer de att sättas ihop. Om inte kommer den högra staplas över den vänstra! - + desc: Du kan nu kombinera former medstaplaren! Båda inputs blir + kombinerade och om de kan sättas brevid varandra kommer de att + sättas ihop. Om inte kommer den högra + 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 under rullband och byggnader med den! - + desc: Tunneln blivit upplåst- Du kan nu transportera saker + under rullband och byggnader med den! reward_rotater_ccw: title: Motsols rotation - desc: Du har låst upp en variant av roteraren - Den låter dig rotera saker motsols! För att bygga den, välj roteraren och tryck ned 'T' för att bläddra genom dess varianter! - + desc: Du har låst upp en variant av roteraren - Den låter dig + rotera saker motsols! För att bygga den, välj roteraren och + 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 större räckvidd, och du kan också mix-matcha tunnlarna nu! - - reward_splitter_compact: - title: Kompakt Balanserare - desc: >- - Du har låst upp en ny variant av balanseraren - Den accepterar två input och gör dem till en! - + desc: Du har låst upp en ny variant av tunneln - Den har en + större räckvidd, och du kan också mix-matcha + tunnlarna nu! reward_cutter_quad: title: Quad Klippning - desc: Du har låst upp en ny variant av klipparen - Den låter dig klippa former i fyra delar istället för bara två! - + desc: Du har låst upp en ny variant av klipparen - Den låter + dig klippa former i fyra delar istället för bara + två! reward_painter_double: title: Dubbelfärgläggning - desc: Du har låst upp en ny variant av Färgläggaren - Den fungerar som en vanlig färgläggare fast den färglägger två former åt gången och använder bara en färg istället för två! - - reward_painter_quad: - title: Quad Färgläggning - desc: Du har låst upp en ny variant av Färgläggaren - Den låter dig färglägga varje del av en form individuellt! - + desc: Du har låst upp en ny variant av Färgläggaren - Den + fungerar som en vanlig färgläggare fast den färglägger två + former åt gången och använder bara en färg istället för + 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! Välj ett område (håll in CTRL, dra sedan med musen), och tryck 'C' för att kopiera det.

Att klistra in ärinte gratis, du behöver producera ritningsformer för att ha råd med det! (De du just levererade). - - # Special reward, which is shown when there is no reward actually + desc: Du kan nu kopiera och klistra in delar av din fabrik! + Välj ett område (håll in CTRL, dra sedan med musen), och tryck 'C' + för att kopiera det.

Att klistra in är inte + gratis, du behöver producera + ritningsformer för att ha råd med det! (De du just + levererade). no_reward: title: Nästa nivå - desc: >- - Denna nivå har ingen belöning, men nästa har!

PS: Se till att inte förstöra din redan existerande fabrik - Du behöver alla de där formerna igen för att låsa upp uppgraderingar! - + desc: "Denna nivå har ingen belöning, men nästa har!

PS: Se till att + inte förstöra din redan existerande fabrik - Du behöver + alla de där formerna igen för att låsa upp + uppgraderingar!" no_reward_freeplay: title: Nästa nivå - desc: >- - Grattis! Förresten, mer spelinnehåll är planerat för den fristående versionen! - + desc: Grattis! Förresten, mer spelinnehåll är planerat för den fristående + versionen! + 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: 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 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). + 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. + reward_demo_end: + title: Slutet av demo-versionen + desc: Du har nått slutet av demo-versionen! settings: title: Inställningar categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: dev: Utveckling staging: Iscensättning prod: Produktion buildDate: Skapad - labels: uiScale: title: Gränssnittsskala - description: >- - Ändrar storleken på gränssnittet. gränssnittet kommer fortfarande baseras på skärmupplösning, men denna inställning kontrollerar mängdskala. + description: Ändrar storleken på gränssnittet. gränssnittet kommer fortfarande + baseras på skärmupplösning, men denna inställning kontrollerar + mängdskala. scales: super_small: Superliten small: Liten regular: Normal large: Stor huge: Enorm - scrollWheelSensitivity: title: Zoomkänslighet - description: >- - Ändrar hur känslig zoomen är (Mushjul eller styrplatta). + description: Ändrar hur känslig zoomen är (Mushjul eller styrplatta). sensitivity: super_slow: Superlångsam slow: Långsam regular: Normal fast: Snabb super_fast: Supersnabb - language: title: Språk - description: >- - Ändra språk. Alla språk är användarbidragna och kan vara inkompletta! - + description: Ändra språk. Alla språk är användarbidragna och kan vara + inkompletta! fullscreen: title: Fullskärm - description: >- - Det är rekommenderat att spela i fullskärm för bästa upplevelse. Endast tillgängligt i den fristående versionen. - + description: Det är rekommenderat att spela i fullskärm för bästa upplevelse. + Endast tillgängligt i den fristående versionen. soundsMuted: title: Dämpa Ljud - description: >- - Om på, stänger av alla ljud. - + description: Om på, stänger av alla ljud. musicMuted: title: Dämpa Musik - description: >- - Om på, stänger av all musik. - + description: Om på, stänger av all musik. theme: title: Spelutseende - description: >- - Välj spelutseende (ljust / mörkt). - + description: Välj spelutseende (ljust / mörkt). themes: dark: Mörkt light: Ljust - refreshRate: title: Simulationsmål - description: >- - Om du har en 144hz skärm, ändra uppdateringshastigheten här så kommer spelet simulera vid en högre uppdateringshastighet. Detta kan dock sänka FPS om din dator är långsam. - + description: Om du har en 144hz skärm, ändra uppdateringshastigheten här så + kommer spelet simulera vid en högre uppdateringshastighet. Detta + kan dock sänka FPS om din dator är långsam. alwaysMultiplace: title: Flerplacering - description: >- - Om på, alla byggnader kommer fortsätta vara valda efter placering. Att ha detta på är som att konstant hålla ned SKIFT. - + description: Om på, alla byggnader kommer fortsätta vara valda efter placering. + Att ha detta på är som att konstant hålla ned SKIFT. offerHints: title: Tips & Tutorials - description: >- - Om tips och tutorials ska synas under spelets gång. Gömmer också vissa delar av UI tills senare i spelet för att göra det lättare att komma in i spelet. - + description: Om tips och tutorials ska synas under spelets gång. Gömmer också + vissa delar av UI tills senare i spelet för att göra det lättare + att komma in i spelet. movementSpeed: title: Rörelsehastighet - description: Ändrar hur snabbt kameran förflyttar sig när du använder tangentbordet för att flytta kameran. + description: Ändrar hur snabbt kameran förflyttar sig när du använder + tangentbordet för att flytta kameran. speeds: super_slow: Superlångsamt slow: Långsamt @@ -723,20 +796,17 @@ settings: extremely_fast: Extremt snabbt enableTunnelSmartplace: title: Smarta Tunnlar - description: >- - När på, att placera ut tunnlar kommer automatiskt ta bort onödiga rullband. - Detta låter dig också dra för att sätta ut tunnlar och onödiga tunnlar kommer att tas bort. + description: När på, att placera ut tunnlar kommer automatiskt ta bort onödiga + rullband. Detta låter dig också dra för att sätta ut tunnlar och + onödiga tunnlar kommer att tas bort. vignette: title: Vinjett - description: >- - Sätter på vinjetten vilket gör skärmen mörkare i hörnen och - gör text lättare att läsa - + description: Sätter på vinjetten vilket gör skärmen mörkare i hörnen och gör + text lättare att läsa autosaveInterval: title: Intervall för automatisk sparning - description: >- - Kontrollerar hur ofta spelet sparas atomatiskt. - Du kan också stäng av det helt. + description: Kontrollerar hur ofta spelet sparas atomatiskt. Du kan också stäng + av det helt. intervals: one_minute: 1 Minut two_minutes: 2 Minuter @@ -746,31 +816,77 @@ settings: disabled: Avstängd compactBuildingInfo: title: Kompakt byggnadsinfo - description: >- - Kortar ned infotexter för byggnader genom att endast visa dess storlek. - Annars visas en beskrivning och bild. + description: Kortar ned infotexter för byggnader genom att endast visa dess + storlek. Annars visas en beskrivning och bild. disableCutDeleteWarnings: title: Stäng av klipp/raderingsvarningar - description: >- - Stänger av varningsdialogen som kommer upp då fler än 100 saker - ska tas bort - + description: Stänger av varningsdialogen som kommer upp då fler än 100 saker ska + tas bort enableColorBlindHelper: title: Färgblint läge - description: Aktiverar olika verktyg som låter dig spela spelet om du är färbling. + description: Aktiverar olika verktyg som låter dig spela spelet om du är + färbling. rotationByBuilding: title: Rotering per byggnadstyp - description: >- - Varje byggnadstyp kommer ihåg rotationen du senast var på individuellt. - Detta kan vara mer bekvämt om du ofta bytar byggnader som du placerar. - + description: Varje byggnadstyp kommer ihåg rotationen du senast var på + individuellt. Detta kan vara mer bekvämt om du ofta bytar + byggnader som du placerar. + soundVolume: + title: Ljudvolym + description: Ställ in volymen för ljudeffekter + musicVolume: + 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 + improve performance. It even looks cleaner, so be sure to try it + out! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Snabbtangenter - hint: >- - Tips: Se till att använda CTRL, SKIFT, och ALT! De låter dig använda olika placeringslägen. - + hint: "Tips: Se till att använda CTRL, SKIFT, och ALT! De låter dig använda + olika placeringslägen." resetKeybindings: Återställ Snabbtangenter - categoryLabels: general: Applikation ingame: Spelinställningar @@ -779,7 +895,6 @@ keybindings: massSelect: Massval buildings: Snabbtangenter placementModifiers: Placeringsmodifierare - mappings: confirm: Godkänn back: Tillbaka @@ -788,38 +903,30 @@ keybindings: mapMoveDown: Gå Nedåt mapMoveLeft: Gå Vänster centerMap: Till mitten av världen - mapZoomIn: Zooma in mapZoomOut: Zooma ut createMarker: Skapa Markör - menuOpenShop: Uppgraderingar menuOpenStats: Statistik - toggleHud: Toggle HUD toggleFPSInfo: Toggle FPS och Debug info - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Rullband + underground_belt: Tunnel + miner: Extraktor + cutter: Klippare + rotater: Roterare + stacker: Staplare + mixer: Färgblandare + painter: Färgläggare + trash: Skräphantering rotateWhilePlacing: Rotera - rotateInverseModifier: >- - Modifiering: Rotera motsols istället + rotateInverseModifier: "Modifiering: Rotera motsols istället" cycleBuildingVariants: Cykla varianter confirmMassDelete: Godkänn massborttagning cycleBuildings: Cykla byggnader - massSelectStart: Håll in och dra för att starta massSelectSelectMultiple: Välj flera ytor massSelectCopy: Kopiera yta - placementDisableAutoOrientation: Stäng av automatisk orientering placeMultiple: Stanna kvar i placeringsläge placeInverse: Invertera automatisk rullbandsorientering @@ -830,35 +937,40 @@ keybindings: lockBeltDirection: Sätt på rullbandsplanerare switchDirectionLockSide: "Planerare: Byt sida" pipette: Pipett - menuClose: Close Menu - switchLayers: Switch layers - advanced_processor: Color Inverter - energy_generator: Energy Generator - wire: Energy Wire - + menuClose: Stäng meny + switchLayers: Byt lager + wire: Elkabel + balancer: Balancer + storage: Lagring + constant_signal: Konstant 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: Om detta spel body: >- - Detta spel är open source och utvecklas av Tobias Springer (Det är jag).

+ Detta spel är open source och utvecklas av Tobias Springer + (Det är jag).

- Om du vill hjälpa, kolla in shapez.io på github.

+ Om du vill hjälpa, kolla in shapez.io på github.

- Spelet hade inte varit möjligt utan den fantastiska discordgemenskapen - runt mina spel - Du borde gå med i den Discord server!

+ Spelet hade inte varit möjligt utan den fantastiska discordgemenskapen runt mina spel - Du borde gå med i den Discord server!

- Musiken skapades av Peppsen - Han är grym!

- - Och sist men inte minst, tack till min bästa vän Niklas - Utan våra - factoriosessioner hade detta spel aldrig funnits. + Musiken skapades av Peppsen - Han är grym!

+ Och sist men inte minst, tack till min bästa vän Niklas - Utan våra factoriosessioner hade detta spel aldrig funnits. changelog: title: Changelog - demo: features: restoringGames: Återställer sparfiler @@ -866,5 +978,65 @@ demo: oneGameLimit: Limiterad till endast en sparfil customizeKeybindings: Finjustera snabbtangenter exportingBase: Exportera hela fabriken som en bild - settingNotAvailable: Inte tillgänglig i demoversionen. +tips: + - 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! + - 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. diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index 26b95e35..837f14b3 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -1,113 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io giderek karmaşıklaşan şekillerin sonsuz bir harita üzerinde üretimi ve birleştirilmesi hakında bir oyundur. + shortText: shapez.io giderek karmaşıklaşan şekillerin sonsuz bir harita üzerinde + üretimi ve birleştirilmesi hakında bir oyundur. + discordLinkShort: Official Discord + intro: >- + Shapez.io geometrik şekillerin otomatik üretimi için fabrika + kurabildiğiniz sakinleştirici bir oyundur. - # 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] + Seviye arttıkça şekiller daha karmaşık hale gelecek ve sonsuz haritada genişlemen gerekecek! - 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. + 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! - Ş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! + En başta sadece şekilleri işlerken, sonradan onları boyaman gerekecek - bunun için boyaları çıkarmalı ve karıştırmalısın! - 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] - - discordLink: Official Discord - Chat with me! + 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 - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: b millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: sonsuz - time: - # Used for formatting past time dates oneSecondAgo: bir saniye önce xSecondsAgo: saniye önce oneMinuteAgo: bir dakika önce @@ -116,14 +66,10 @@ global: xHoursAgo: saat önce oneDayAgo: bir gün önce xDaysAgo: gün önce - - # Short formats for times, e.g. '5h 23m' secondsShort: sn - minutesAndSecondsShort: dk sn - hoursAndMinutesShort: sa dk - + minutesAndSecondsShort: dk dk + hoursAndMinutesShort: sa sa xMinutes: dakika - keys: tab: TAB control: CTRL @@ -131,13 +77,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Deneme Sürümü - intro: >- - Bütün özellikleri açmak için tam sürümü satın alın! - + intro: Bütün özellikleri açmak için tam sürümü satın alın! mainMenu: play: Oyna changelog: Değİşİklİk Günlüğü @@ -145,19 +87,15 @@ mainMenu: openSourceHint: Bu oyun açık kaynak kodlu! discordLink: Resmİ Discord Sunucusu helpTranslate: Çevİrİye yardım et! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Üzgünüz, bu oyunun tarayıcınızda yavaş çalıştığı biliniyor! Tam sürümü satın alın veya iyi performans için Chrome tarayıcısını kullanın. - + browserWarning: Üzgünüz, bu oyunun tarayıcınızda yavaş çalıştığı biliniyor! Tam + sürümü satın alın veya iyi performans için Chrome tarayıcısını kullanın. savegameLevel: Seviye savegameLevelUnknown: Bilinmeyen seviye - continue: Devam et newGame: YENİ OYUN madeBy: tarafından yapıldı subreddit: Reddit - + savegameUnnamed: Unnamed dialogs: buttons: ok: OK @@ -171,112 +109,99 @@ dialogs: viewUpdate: Güncellemeleri Görüntüle showUpgrades: Geliştirmeleri Göster showKeybindings: Tuş Kısayollarını Göster - importSavegameError: title: Kayıt yükleme hatası - text: >- - Oyun kaydı yükleme başarısız: - + text: "Oyun kaydı yükleme başarısız:" importSavegameSuccess: title: Oyun Kaydı Yüklendi - text: >- - Oyun kaydı başarıyla yüklendi. - + text: Oyun kaydı başarıyla yüklendi. gameLoadFailure: title: Oyun bozuk - text: >- - Oyun yükleme başarısız: - + 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: - + text: "Oyun kaydını silme başarısız:" restartRequired: title: Yeniden başlatma gerekiyor - text: >- - Değişiklikleri uygulamak için oyunu yeniden başlatılmalı. - + text: Değişiklikleri uygulamak için oyunu yeniden başlatılmalı. editKeybinding: title: Tuş Atamasını Değiştir - desc: Atamak isteğiniz tuşa veya fare butonun basın, veya iptal etmek için Esc tuşuna basın. - + desc: Atamak isteğiniz tuşa veya fare butonun basın, veya iptal etmek için Esc + tuşuna basın. resetKeybindingsConfirmation: title: Tuş Atamasını Sıfırla - desc: Bu işlem bütün tuş atamalarını varsayılan durumuna sıfırlayacak. Lütfen onaylayın. - + desc: Bu işlem bütün tuş atamalarını varsayılan durumuna sıfırlayacak. Lütfen + onaylayın. keybindingsResetOk: title: Tuş Atamaları sıfırlandı desc: Tuş atamaları varsayılan duruma sıfırlandı! - featureRestriction: title: Deneme Sürümü - desc: Demoda olmayan bir özelliğe () erişmeye çalıştınız. Tam deneyim için tam versiyonu satın alın. - + desc: Demoda olmayan bir özelliğe () erişmeye çalıştınız. Tam deneyim + için tam versiyonu satın alın. oneSavegameLimit: title: Sınırlı Oyun Kaydı - desc: Deneme sürümünde sadece tek bir oyun kaydınız olabilir. Lütfen varolanı silin veya tam sürümü satın alın! - + desc: Deneme sürümünde sadece tek bir oyun kaydınız olabilir. Lütfen varolanı + silin veya tam sürümü satın alın! updateSummary: title: Yeni güncelleme! - desc: >- - Son oynadığınızdan bu yana gelen değişikler: - + desc: "Son oynadığınızdan bu yana gelen değişikler:" upgradesIntroduction: title: Geliştirmeleri Aç - desc: >- - Ürettiğiniz her şekil geliştirmeler için kullanılabilir - Eski fabrikalarınızı silmeyin! - Güncellemeler sekmesini ekranınızın sağ üst köşesinde bulabilirsiniz. - + desc: Ürettiğiniz her şekil geliştirmeler için kullanılabilir - Eski + fabrikalarınızı silmeyin! Güncellemeler sekmesini + ekranınızın sağ üst köşesinde bulabilirsiniz. massDeleteConfirm: title: Silmeyi onayla - desc: >- - Çok fazla yapı siliyorsunuz (tam olarak adet)! Bunu yapmak istediğinize emin misiniz? - + desc: Çok fazla yapı siliyorsunuz (tam olarak adet)! Bunu yapmak + istediğinize emin misiniz? blueprintsNotUnlocked: title: Henüz açılmadı - desc: >- - Taslakları açmak için 12. seviyeyi tamamlamalısınız! - + desc: Taslakları açmak için 12. seviyeyi tamamlamalısınız! keybindingsIntroduction: title: Kullanışlı tuş atamaları - desc: >- - Bu oyunda büyük fabrikalar inşa etmeyi kolaylaştıran çok fazla tuş ataması var. - Bunlardan bazıları şunlar, ama emin olmak için tuş atamalarını kontrol edin!

- CTRL + Sürükle: Silmek için alan seç.
- SHIFT: Çoklu yapı inşa etmek için basılı tutun
- ALT: Yerleştirilen taşıma bantlarının yönünü ters çevirir.
- + desc: "Bu oyunda büyük fabrikalar inşa etmeyi kolaylaştıran çok fazla tuş + ataması var. Bunlardan bazıları şunlar, ama emin olmak için + tuş atamalarını kontrol edin!

CTRL + Sürükle: Silmek için alan seç.
+ SHIFT: Çoklu yapı inşa etmek için + basılı tutun
ALT: Yerleştirilen + taşıma bantlarının yönünü ters çevirir.
" createMarker: title: 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 imi için tam sürümü alın! + desc: Deneme sürümünde sadece iki adet yer imi oluşturabilirsiniz. Sınırsız yer + imi için tam sürümü alın! massCutConfirm: title: Kesmeyi onayla - desc: >- - Çok fazla yapı kesiyorsunuz (tam olarak adet)! Bunu yapmak istediğinize emin misiniz? - + desc: Çok fazla yapı kesiyorsunuz (tam olarak adet)! Bunu yapmak + istediğinize emin misiniz? exportScreenshotWarning: title: Ekran görüntüsünü dışa aktar - desc: >- - Fabrikanızın ekran görüntüsünü dışarı aktarmak istiyorsunuz. Lütfen dikkat edin, - büyük bir fabrika için bu işlem oldukça yavaş olabilir ve hatta oyununuz kapanabilir. - + desc: Fabrikanızın ekran görüntüsünü dışarı aktarmak istiyorsunuz. Lütfen dikkat + edin, büyük bir fabrika için bu işlem oldukça yavaş olabilir ve + hatta oyununuz kapanabilir. massCutInsufficientConfirm: title: Kesmeyi onayla - desc: Seçili yapıları yapıştırmak için yeterli kaynağınız yok! Kesmek istediğinize emin misiniz? - + desc: Seçili yapıları yapıştırmak için yeterli kaynağınız yok! Kesmek + istediğinize emin misiniz? + editSignal: + title: Sinyal Ata + descItems: "Önceden tanımlı bir eşya seçin:" + descShortKey: ... veya şekil kodunu girin (Buradan + edinebileceğiniz) + renameSavegame: + title: Oyun Kaydının Yeniden Adlandır + desc: Oyun kaydını buradan adlandırabilirsiniz. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Hareket Et selectBuildings: Alan seç @@ -291,68 +216,43 @@ 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 pipette: Pİpet switchLayers: Katman değİştİr - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Yapının farklı türlerine geçmek için tuşuna bas. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Kısayol: - + hotkeyLabel: "Kısayol: " infoTexts: - Hız: Hız range: Menzil storage: Depo oneItemPerSecond: 1 eşya / saniye itemsPerSecond: eşya / sn itemsPerSecondDouble: (x2) - tiles: karo - - # The notification when completing a level + speed: Speed levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: SEVİYE completed: Tamamlandı unlockText: Açıldı ! buttonNextLevel: Sonrakİ Sevİye - - # Notifications on the lower right notifications: newUpgrade: Yeni geliştirme mevcut! gameSaved: Oyun kaydedildi. - - # The "Upgrades" window + freeplayLevelComplete: Seviye tamamlandı! shop: - title: Geliştirmeler - buttonUnlock: Geliştir - - # Gets replaced to e.g. "Tier IX" + title: Gelİştİrmeler + buttonUnlock: Gelİştİr tier: Aşama - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: SON SEVİYE (Hız x) - - # The "Statistics" window statistics: title: İstatistikler dataSources: stored: title: Mevcut description: Merkez yapınızda bulunan şekillerin miktarını gösterir. - produced: title: Üretilen description: Fabrikanızın ürettiği bütün şekilleri gösterir, ara ürünler dahil. @@ -360,49 +260,40 @@ ingame: title: Teslim Edilen description: Merkez binanıza giden bütün şekilleri gösterir. noShapesProduced: Henüz hiçbir şekil üretilmedi. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: / dk - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: - playtime: Oynama zamani - + playtime: Oynama zamanı buildingsPlaced: Yapılar beltsPlaced: Taşıma bantları - - buttons: - continue: Devam - settings: Ayarlar - menu: Ana Menüye Dön - - # Bottom left tutorial hints tutorialHints: title: Yardım? showHint: İpucu Göster hideHint: Kapat - - # When placing a blueprint blueprintPlacer: cost: Bedel - - # Map markers waypoints: waypoints: Yer İmi hub: MERKEZ - description: Sol-tık ile Yer İmlerine git, sağ-tık ile yer imini sil.

Mevcut konumdan yer imi oluşturmak için 'a bas, sağ-tık ile mevcut konumda yer imi oluştur. + description: Sol-tık ile Yer İmlerine git, sağ-tık ile yer imini + sil.

Mevcut konumdan yer imi oluşturmak için 'a + bas, sağ-tık ile mevcut konumda yer imi oluştur. creationSuccessNotification: Yer İmi oluşturuldu. - - # Interactive tutorial interactiveTutorial: title: Eğİtİm hints: - 1_1_extractor: Daire üretmek için daire şekli üzerine bir üretici yerleştir! - 1_2_conveyor: >- - Üreticiyi taşıma bandı ile merkezine bağla!

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

İpucu: Birden fazla üretici yerleştirmek için SHIFT tuşuna basılı tut, ve R tuşuyla taşıma bandının yönünü döndür. - + 1_1_extractor: Daire üretmek için daire şekli üzerine bir + üretici yerleştir! + 1_2_conveyor: "Üreticiyi taşıma bandı ile merkezine + bağla!

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

İpucu: Birden fazla üretici yerleştirmek için + SHIFT tuşuna basılı tut, ve R + tuşuyla taşıma bandının yönünü döndür." colors: red: Kırmızı green: Yeşil @@ -417,14 +308,48 @@ ingame: title: Katmanlar empty: Boş copyKey: Şekil Kodunu Kopyala - -# All shop upgrades + connectedMiners: + one_miner: 1 Üretici + n_miners: Üretici + limited_items: Sınır + watermark: + 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: Tam versiyonu al! + no_thanks: Hayır, teşekkürler! + points: + levels: + title: 12 Yeni Seviye + desc: Toplamda 26 seviye! + buildings: + title: 18 Yeni Yapı + desc: Fabrikanı tamamen otomatikleştir! + savegames: + title: ∞ Oyun Kayıtları + desc: Canın ne kadar isterse! + upgrades: + title: 20 Geliştirme Aşaması + desc: Bu deneme sürümünde sadece 5 tane var! + markers: + title: ∞ Yer imleri + desc: Fabrikanda asla kaybolma! + wires: + title: Kablolar + desc: Tamamen yeni bir boyut! + darkmode: + title: Gece Modu + desc: Gözlerini artık yorma! + support: + 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ı @@ -432,310 +357,447 @@ shopUpgrades: painting: name: Karıştırma & Boyama description: Hız x → x - -# Buildings and their name / description buildings: hub: - deliver: "Teslİm et" - toUnlock: "Açılacak" + deliver: Teslİm et + toUnlock: Açılacak levelShortcut: SVY - + endOfDemo: Deneme Sürümünün Sonu belt: default: - name: &belt Taşıma Bandı - description: Eşyaları taşır, basılı birden fazla yerleştirmek için tutup sürükle. - - miner: # Internal name for the Extractor + name: Taşıma Bandı + description: Eşyaları taşır, basılı birden fazla yerleştirmek için tutup + sürükle. + miner: default: - name: &miner Üretİcİ + name: Üretİcİ 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. - - underground_belt: # Internal name for the Tunnel + description: Bir şekli veya rengi üretmek için üzerlerini yerleştir. Zincirleme + bağlanabilir. + underground_belt: default: - name: &underground_belt Tünel + name: Tünel description: Yapıların ve taşıma bantlarının altından kaynak aktarımı sağlar. - tier2: name: Tünel Aşama II - description: Yapıların, taşıma bantlarının ve normal tünellerin altından kaynak aktarımı sağlar. - - splitter: # Internal name for the Balancer - default: - name: &splitter Dengeleyici - description: Çok işlevli - bütün girdileri eşit olarak bütün çıkışlara dağıtır. - - compact: - name: Bİrleştİrİcİ (tekİl) - description: İki taşıma bandını bir çıktı verecek şekilde birleştirir. - - compact-inverse: - name: Birleştİrİcİ (tekİl) - description: İki taşıma bandını bir çıktı verecek şekilde birleştirir. - + description: Yapıların, taşıma bantlarının ve normal tünellerin altından kaynak + aktarımı sağlar. cutter: default: - name: &cutter Kesİcİ - description: Şekilleri yukarıdan aşağıya böler ve iki yarım parçayı çıktı olarak verir. Eğer sadece bir çıktıyı kullanıyorsanız diğer çıkan parçayı yok etmeyi unutmayın, yoksa kesim durur! + name: Kesİcİ + description: Şekilleri yukarıdan aşağıya böler ve iki yarım parçayı çıktı olarak + verir. Eğer sadece bir çıktıyı kullanıyorsanız diğer + çıkan parçayı yok etmeyi unutmayın, yoksa kesim durur! quad: name: Kesİcİ (Dörtlü) - description: Şekilleri dört parçaya böler. Eğer sadece bir çıktıyı kullanıyorsanız diğer çıkan parçaları yok etmeyi unutmayın, yoksa kesim durur! - + description: Şekilleri dört parçaya böler. Eğer sadece bir çıktıyı + kullanıyorsanız diğer çıkan parçaları yok etmeyi unutmayın, + yoksa kesim durur! rotater: default: - name: &rotater Döndürücü + name: Döndürücü description: Şekilleri saat yönünde 90 derece döndürür. ccw: name: Döndürücü (Saat Yönünün Tersİ) description: Şekilleri saat yönünün tersinde 90 derece döndürür. - fl: - name: Döndürücü (180) + rotate180: + name: Dödürücü (180 Derece) description: Şekilleri 180 derece döndürür. - stacker: default: - name: &stacker Kaynaştırıcı - description: İki eşyayı kaynaştırır. Eğer eşyalar kaynaştırılamazsa sağdaki eşya soldaki eşyanın üzerine kaynaştırılır. - + name: Kaynaştırıcı + description: İki eşyayı kaynaştırır. Eğer eşyalar kaynaştırılamazsa sağdaki eşya + soldaki eşyanın üzerine kaynaştırılır. mixer: default: - name: &mixer Renk Karıştırıcısı - description: Mixes two colors using additive blending. İki rengi eklemeli renk metoduyla birleştirir. - + name: Renk Karıştırıcısı + description: İki rengi eklemeli renk metoduyla birleştirir. painter: default: - name: &painter Boyayıcı - description: &painter_desc Sol girdideki bütün şekli sağ girdideki renk ile boyar. + 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: *painter - description: *painter_desc - + name: Boyayıcı + description: Sol girdideki bütün şekli aşağı girdideki renk ile boyar. trash: default: - name: &trash Çöp + name: Çöp description: Her yönden giren girdileri yok eder. Tamamen. - - storage: - name: Depo - description: Belirli bir sınıra kadar fazla eşyaları depolar. Taşırma kapısı olarak kullanıla bilir. wire: default: - name: Enerji Kablosu - description: Enerji aktarmayı sağlar. - advanced_processor: + name: Kablo + description: Sinyali, eşyalar veya ikili değerler(1 / 0), aktarmayı sağlar. + Farklı renkteki kablolar bağlanamaz. + second: + name: Kablo + description: Sinyali, eşyalar veya ikili değerler(1 / 0), aktarmayı sağlar. + Farklı renkteki kablolar bağlanamaz. + wire_tunnel: default: - name: Renk Ters Dönüştürücü - description: Bir rengi veya şeklin rengini ters dönüştürür. - energy_generator: - deliver: Teslİm et - toGenerateEnergy: İçİn + name: Kablo Tüneli + description: İki farklı kabloyu birbirine bağlamadan bir köprü oluşturur. + balancer: default: - name: Enerjİ Üretİcİ - description: Şekilleri tüketerek enerji üretir. - wire_crossings: - default: - name: Kablo Çoklayıcı - description: Bir kablo çıkışını ikiye çoğaltır. + name: Dengeleyici + description: Çok işlevli - bütün girdileri eşit olarak bütün çıkışlara dağıtır. merger: - name: Kablo Bİrleştİrİcİ - description: İki enerji kablosunu birleştirir - + name: Bİrleştİrİcİ (tekİl) + description: İki taşıma bandını bir çıktı verecek şekilde birleştirir. + merger-inverse: + name: Birleştİrİcİ (tekİl) + description: İki taşıma bandını bir çıktı verecek şekilde birleştirir. + splitter: + name: Ayırıcı (tekİl) + description: Bir taşıma bandını iki çıktı verecek şekilde ayırır. + splitter-inverse: + name: Ayırıcı (tekİl) + description: Bir taşıma bandını iki çıktı verecek şekilde ayırır. + storage: + default: + name: Storage + description: Belirli bir sınıra kadar fazla eşyaları depolar. Taşırma kapısı + olarak kullanıla bilir. + constant_signal: + default: + name: Sabit Sinyal + description: Şekil, renk veya ikili değer (1 / 0) olan sabit bir sinyal + gönderir. + lever: + default: + 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 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 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 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 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: Transistör + description: Eğer yan girdi doğruysa aşağı doğru sinyal akışına izin verir. + (Şekil, renk veya "1"). + mirrored: + 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: 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: 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: 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: Şekil Analizcisi + description: Şeklin en alt katmanında sağ üst köşesinde bulunan şekli analiz + eder, şekli ve rengini verir. + comparator: + default: + 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: Sanal Kesici + description: Sanal olarak şekli ikiye böler. + rotater: + 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: 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: Sanal Kaynaştırıcı + description: Sanal olarak sağdaki şekli soldaki şeklin üstüne kaynaştırır. + painter: + name: Sanal Boyayıcı + description: Sanal olarak aşağı girdideki şekli sağ girdideki renk ile boyar. + item_producer: + default: + name: Eşya Üretici + description: Sadece kum kutusu modunda açık, kablo katmanındaki sinyali normal + katmanda çıktı olarak verir. storyRewards: - # Those are the rewards gained from completing the store 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 derece döndürür. - + desc: Döndürücü açıldı! Döndürücü şekilleri saat yönüne 90 + derece döndürür. reward_painter: title: 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 ayarlardan renk körü modunu kullanabilirsiniz! - + 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 + ayarlardan renk körü modunu kullanabilirsiniz!" reward_mixer: title: Renk Karıştırma - desc: Karıştırıcı açıldı - Bu yapıyla iki rengi eklemeli renk metodu ile karıştırın! - + desc: Karıştırıcı açıldı - Bu yapıyla iki rengi + eklemeli renk metodu ile karıştırın! reward_stacker: title: Kaynaştırıcı - desc: Artık kaynaştırıcı ile şekilleri birleştirebilirsiniz! İki şekil eğer yanyana koyulabilirse şekiller birleştirilir, yoksa sol girişteki şeklin üzerine kaynaştırılır! - + desc: Artık kaynaştırıcı ile şekilleri birleştirebilirsiniz! + İki şekil eğer yanyana koyulabilirse şekiller + birleştirilir, yoksa sol girişteki şeklin + üzerine kaynaştırılır! reward_splitter: title: 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 altından geçirebilirsiniz! - + desc: Tünel açıldı - Artık eşyaları taşıma bantları ve yapılar + altından geçirebilirsiniz! reward_rotater_ccw: title: Saat yönünün tersİnde Döndürme - desc: Döndürücünün farklı bir türünü açtın - Şekiller artık saat yönünün tersinde döndürülebilir! İnşa etmek için döndürücüyü seç ve türler arası geçiş yapmak için 'T' tuşuna bas! - + desc: Döndürücünün farklı bir türünü açtın - Şekiller artık + saat yönünün tersinde döndürülebilir! İnşa etmek için döndürücüyü + seç ve türler arası geçiş yapmak için 'T' tuşuna + bas! reward_miner_chainable: - title: 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! - - reward_splitter_compact: - title: Tekİl Dengeleyİcİ - desc: >- - Dengeleyecinin daha küçük bir türünü açtın - İki taşıma bandından gelen eşyaları tek hatta birleştirir! - + 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 parça yerine dört parçaya ayırabilir! - + desc: Kesicinin yeni bir türünü açtın - Bu tür şekilleri iki + parça yerine dört parçaya ayırabilir! reward_painter_double: title: Çİfte Boyama - desc: Boyayıcının başka bir türünü açtın - Sıradan bir boyayıcı gibi çalışır, fakat iki şekli birden boyayarak iki boya yerine sadece bir boya harcar! - - reward_painter_quad: - title: Dörtlü Boyama - desc: Boyayıcının başka bir türünü açtın - Şeklin her parçasının bağımsız olarak boyanmasını sağlar! - + desc: Boyayıcının başka bir türünü açtın - Sıradan bir boyayıcı + gibi çalışır, fakat iki şekli birden boyayarak iki + boya yerine sadece bir boya harcar! reward_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!) - - reward_blueprints: # 'Taslaklar' yerine 'planlar' da kullanılabilir. + 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 yapıştırabilirsin! Bir alan seç (CTRL tuşuna bas ve fareyi sol-tık tuşuna basarak sürükle), ve kopyalamak için 'C' tuşuna bas.

Kopyaladığın taslağı bedel karşılığı yapıştırabilmek için taslak şekilleri üretmelisin! (Az önce teslim ettiğin şekiller). - - # Special reward, which is shown when there is no reward actually + desc: Fabrikanın bölümlerini artık kopyalayıp + yapıştırabilirsin! Bir alan seç (CTRL tuşuna bas ve fareyi + sol-tık tuşuna basarak sürükle), ve kopyalamak için 'C' tuşuna + bas.

Kopyaladığın taslağı bedel karşılığı + yapıştırabilmek için taslak şekilleri üretmelisin! + (Az önce teslim ettiğin şekiller). 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! - + 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: Deneme Sürümünün Sonu + desc: Deneme sürümünün sonuna geldin! + reward_balancer: + title: Dengeleyici + desc: Çok fonksiyonlu dengeleyici açıldı. - Eşyaları + bantlara ayırarak ve bantları birleştirerek daha büyük + fabrikalar kurmak 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: "Ekranı açtın. - Kablo katmanında bir sinyal + bağla ve onu ekranda göster!

Not: Bant okuyucunun ve + deponun son okudukları eşyayı çıkardığını fark ettin mi? + Bunu ekranda göstermeyi dene!" + reward_constant_signal: + title: Sabit Sinyal + desc: Kablo katmanında inşa edilebilen sabit sinyal'i açtın! + Bu yapı eşya filtrelerine bağlanabilir. + Sabit sinyal şekil, + renk veya ikili değer (1 veya 0) + gönderelebilir. + 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İş - - versionBadges: # Development, Staging, Production + performance: Performans + versionBadges: dev: Geliştirme staging: Yükseltme prod: Üretim buildDate: derlendi - + rangeSliderPercentage: % labels: uiScale: title: Arayüz Ölçeğİ - description: >- - Kullanıcı arayüzünün boyutunu değiştirir. Arayüz cihazınızın çözünürlüğüne göre ölçeklendirilir, ama ölçeğin miktarı burada ayarlanabilir. + description: Kullanıcı arayüzünün boyutunu değiştirir. Arayüz cihazınızın + çözünürlüğüne göre ölçeklendirilir, ama ölçeğin miktarı burada + ayarlanabilir. scales: super_small: Çok Küçük small: Küçük regular: Normal large: Büyük huge: Çok Büyük - scrollWheelSensitivity: title: Yakınlaştırma Hassasİyeti - description: >- - Yakınlaştırmanın ne kadar hassas olduğunu ayarlar (Fare tekerleği veya dokunmatik farketmez). + description: Yakınlaştırmanın ne kadar hassas olduğunu ayarlar (Fare tekerleği + veya dokunmatik farketmez). sensitivity: super_slow: Çok Yavaş slow: Yavaş regular: Normal fast: Hızlı super_fast: Çok Hızlı - language: title: Dİl - description: >- - Dili değiştirir. Bütün çevirmeler kullanıcı katkılarıyla oluşturulmuştur ve tam olmayabilir! - + description: Dili değiştirir. Bütün çevirmeler kullanıcı katkılarıyla + oluşturulmuştur ve tam olmayabilir! fullscreen: title: Tam Ekran - description: >- - En iyi oyun tecrübesi için oyunun tam ekranda oynanması tavsiye edilir. Sadece tam sürümde mevcut. - + description: En iyi oyun tecrübesi için oyunun tam ekranda oynanması tavsiye + edilir. Sadece tam sürümde mevcut. soundsMuted: title: Ses Efektlerİnİ Sustur - description: >- - Aktif edildiğinde bütün ses efektleri susturulur. - + description: Aktif edildiğinde bütün ses efektleri susturulur. musicMuted: title: Müzİğİ Sustur - description: >- - Aktif edildiğinde bütün müzikler susturulur. - + description: Aktif edildiğinde bütün müzikler susturulur. theme: title: Renk Teması - description: >- - Renk temasını seçin (aydınlık / karanlık). - + description: Renk temasını seçin (aydınlık / karanlık). themes: dark: Karanlık light: Aydınlık - refreshRate: title: Sİmülasyon Hızı - description: >- - Eğer mönitörünüzün yenileme hızı (Hz) yüksekse oyunun akıcı bir şekilde çalışması için yenileme hızını buradan değiştirin. Eğer bilgisayarınız yavaşsa bu ayar oyunun gösterdiği kare hızını (FPS) düşürebilir. - + description: Eğer mönitörünüzün yenileme hızı (Hz) yüksekse oyunun akıcı bir + şekilde çalışması için yenileme hızını buradan değiştirin. Eğer + bilgisayarınız yavaşsa bu ayar oyunun gösterdiği kare hızını + (FPS) düşürebilir. alwaysMultiplace: title: Çoklu Yerleştirme - description: >- - Aktif edildiğinde bir yapı seçilip yerleştirildiğinde, yapıyı yerleştirmeye siz iptal edene kadar devam edebilirsiniz. Bu özellik SHIFT tuşuna sürekli basılı tutup yapı yerleştirmeyle aynıdır. - + description: Aktif edildiğinde bir yapı seçilip yerleştirildiğinde, yapıyı + yerleştirmeye siz iptal edene kadar devam edebilirsiniz. Bu + özellik SHIFT tuşuna sürekli basılı tutup yapı yerleştirmeyle + aynıdır. offerHints: title: İpuçları ve Eğİtİmler - description: >- - İpuçları ve eğitimleri açar. Ayrıca bazı arayüz elemanlarını oyunun daha kolay öğrenilebilmesi için gizler. - - movementHız: - title: Hareket hızı - description: Changes how fast the view moves when using the keyboard. - Hızs: - super_slow: Super slow - slow: Slow - regular: Regular - fast: Fast - super_fast: Super Fast - extremely_fast: Extremely Fast + 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. - + 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ığı - description: >- - Oyunun hangi sıklıkta kaydedileceğini belirler. Ayrıca otomatik kayıt tamamen kapatılabilir. + 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: one_minute: 1 Dakika two_minutes: 2 Dakika @@ -744,30 +806,85 @@ settings: twenty_minutes: 20 Dakika disabled: Devredışı compactBuildingInfo: - title: Derlİ Toplu Yapı Bilgileri - 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. + 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: title: Kes/Sİl Uyarılarını Devredışı Bırak - description: >- - 100 birimden fazla parçayı kesme/silme işlemlerinde beliren uyarı pencerelerini devredışı bırakır. - + description: 100 birimden fazla parçayı kesme/silme işlemlerinde beliren uyarı + pencerelerini devredışı bırakır. enableColorBlindHelper: title: Renk Körü Modu - description: Eğer renkleri seçemiyorsanız oyunu ayarlamak için çeşitli araç gereçleri aktif eder. + description: Eğer renkleri seçemiyorsanız oyunu ayarlamak için çeşitli araç + gereçleri aktif eder. rotationByBuilding: - title: Rotation by building type - description: >- - 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. - + 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: Hareket Hızı + description: Haritanın klavye veya fare ile gezinme hızını değiştirir. + speeds: + super_slow: Çok Yavaş + slow: Yavaş + regular: Normal + fast: Hızlı + super_fast: Çok Hızlı + extremely_fast: Aşırı Hızlı + soundVolume: + title: Ses Ayarı + description: Ses efektlerinin seviyesini ayarlar + musicVolume: + title: Müzİk Ayarı + description: Müzik seviyesini ayarlar + lowQualityMapResources: + 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: 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: 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: 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: 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: 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: 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: Fare Kaydırarak Hareket Etme + description: Fareyi ekranın köşelerine getirerek hareket ettirmeyi sağlar. + zoomToCursor: + title: Farenin Konumuna Yakınlaştırma + description: Eğer etkinleştirilirse zaman ekran yakınlaştırılması fare imlecinin bulunduğu + yere doğru olur. Etkinleştirilmezse yakınlaştırma ekranın ortasına doğru olur. + mapResourcesScale: + title: Uzak Bakışta Kaynakların Büyüklüğü + description: Haritaya uzaktan bakıldığında, haritadaki şekillerin + büyüklüğünü ayarlar. keybindings: title: Tuş Atamaları - hint: >- - İpucu: CTRL, SHIFT ve ALT tuşlarından yararlanın! Farklı yerleştirme seçeneklerini kullanmanızı sağlarlar. - + hint: "İpucu: CTRL, SHIFT ve ALT tuşlarından yararlanın! Farklı yerleştirme + seçeneklerini kullanmanızı sağlarlar." resetKeybindings: Tuş Atamalarını Sıfırla - categoryLabels: general: Uygulama ingame: Oyun @@ -776,7 +893,6 @@ keybindings: massSelect: Çoklu Seçim buildings: Yapı Kısayolları placementModifiers: Yerleştİrme Özellİklerİ - mappings: confirm: Kabul back: Geri @@ -785,38 +901,30 @@ keybindings: mapMoveDown: Aşagı Git mapMoveLeft: Sola Git centerMap: Haritayı Ortala - mapZoomIn: Yakınlaş mapZoomOut: Uzaklaş createMarker: Yer İmi Oluştur - menuOpenShop: Geliştirmeler menuOpenStats: İstatistikler - toggleHud: Arayüzü Aç/Kapat toggleFPSInfo: FPS ve Debug Bilgisini Aç/Kapat - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: Taşıma Bandı + underground_belt: Tünel + miner: Üretİcİ + cutter: Kesİcİ + rotater: Döndürücü + stacker: Kaynaştırıcı + mixer: Renk Karıştırıcısı + painter: Boyayıcı + trash: Çöp rotateWhilePlacing: Döndür - rotateInverseModifier: >- - Basılı Tut: Saat yönünün tersinde döndür + rotateInverseModifier: "Basılı Tut: Saat yönünün tersinde döndür" cycleBuildingVariants: Yapı türünü değiştir confirmMassDelete: Çoklu Silme cycleBuildings: Yapıyı değiştir - massSelectStart: Basılı tutup seçme massSelectSelectMultiple: Birden fazla alanı seçme massSelectCopy: Alanı kopyala - placementDisableAutoOrientation: Otomatik Yönü devredışı bırak placeMultiple: Yerleştirme modunda kal placeInverse: Taşıma bandı yönünü ters çevir @@ -829,33 +937,38 @@ keybindings: pipette: Pipet menuClose: Menüyü Kapat switchLayers: Katman değiştir - advanced_processor: Renk Ters Çevirici - energy_generator: Enerji Üretici wire: Enerji Kablosu - + 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: Ş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.

- - Finally, huge thanks to my best friend Niklas - Without our - factorio sessions this game would never have existed. + Oyun müzikleri Peppsen tarafından yapıldı - Harika biri.

+ 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: features: restoringGames: Oyun kayıtlarını yükleme @@ -863,5 +976,78 @@ demo: oneGameLimit: Bir oyun kaydıyla sınırlı customizeKeybindings: Tuş Atamalarını Değiştirme exportingBase: Bütün merkezi resim olarak dışa aktarma - settingNotAvailable: Demo sürümünde mevcut değil +tips: + - 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 885fd477..e7b0d00f 100644 --- a/translations/base-uk.yaml +++ b/translations/base-uk.yaml @@ -1,127 +1,63 @@ -# -# GAME TRANSLATIONS -# -# Translators: -# -# Prosta4ok_ua 07.07.2020 — 05.09.2020 -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# Ґлосарій: -# map мапа -# keybinds гарячі клавіши -# upgrade поліпшення -# marker позначка -# area ділянка -# hub центр -# range дальність -# storage сховище -# shape форма -# layer шар - ---- steamPage: - # This is the short text appearing on the steam page - shortText: shapez.io — це гра про будування фабрик для автоматизації створення та обробки все більш складних форм на нескінченно розширюваній мапі. + shortText: shapez.io — це гра про будування фабрик для автоматизації створення + та обробки все більш складних форм на нескінченно розширюваній мапі. + discordLinkShort: Official Discord + intro: >- + Shapez.io is a relaxed game in which you have to build factories for the + automated production of geometric shapes. - # This is the text shown above the Discord link - discordLink: Офіційний Discord сервер — поговори зі мною! + As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. - # 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] + 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! - shapez.io — це гра про будування фабрик для автоматизації створення та обробки все більш складних форм на нескінченно розширюваній мапі. - Після доставки потрібних форм ви просунетеся в грі та розблокуєте поліпшення, щоб пришвидшити свою фабрику. + While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - Коли попит на форми зростає, вам доведеться збільшити масштаб своєї фабрики, щоб задовольнити попит. Однак не забувайте про ресурси, вам доведеться розширюватися на [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] + 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: Помилка - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" decimalSeparator: "," - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: тис. millions: млн billions: млрд trillions: трлн - - # Shown for infinitely big numbers infinite: неск. - time: - # Used for formatting past time dates oneSecondAgo: одну секунду тому xSecondsAgo: секунд тому oneMinuteAgo: 1 хвилину тому @@ -130,14 +66,10 @@ global: xHoursAgo: годин тому oneDayAgo: один день тому xDaysAgo: днів тому - - # Short formats for times, e.g. '5h 23m' secondsShort: сек. minutesAndSecondsShort: хв. сек. hoursAndMinutesShort: год. хв. - xMinutes: хв. - keys: tab: TAB control: CTRL @@ -145,13 +77,9 @@ global: escape: ESC shift: SHIFT space: SPACE - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: Демоверсія - intro: >- - Завантажте окрему версію, щоб розблокувати всі функції! - + intro: Завантажте окрему версію, щоб розблокувати всі функції! mainMenu: play: Грати continue: Продовжити @@ -163,14 +91,12 @@ mainMenu: discordLink: Офіційний Discord сервер helpTranslate: Допоможіть з перекладом! madeBy: Зробив - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - Вибачте, але гра, як відомо, працює повільно у вашому браузері! Завантажте окрему версію чи хром, щоб отримати більше задоволення від гри. - + browserWarning: Вибачте, але гра, як відомо, працює повільно у вашому браузері! + Завантажте окрему версію чи хром, щоб отримати більше задоволення від + гри. savegameLevel: Рівень savegameLevelUnknown: Невідомий рівень - + savegameUnnamed: Unnamed dialogs: buttons: ok: Гаразд @@ -184,112 +110,99 @@ dialogs: viewUpdate: Переглянути оновлення showUpgrades: Показати поліпшення showKeybindings: Показати прив’язки клавіш - importSavegameError: title: Помилка при імпортуванні - text: >- - Не вдалося імпортувати вашу збережену гру: - + text: "Не вдалося імпортувати вашу збережену гру:" importSavegameSuccess: title: Збереження імпортовано - text: >- - Вашу збережену гру успішно імпортовано. - + text: Вашу збережену гру успішно імпортовано. gameLoadFailure: title: Гра поламана - text: >- - Не вдалося завантажити вашу збережену гру. - + 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: >- - Не вдалося видалити збережену гру. - + text: Не вдалося видалити збережену гру. restartRequired: title: Потрібне перезавантаження - text: >- - Перезавантажте гру, щоб налаштування вступили в дію. - + text: Перезавантажте гру, щоб налаштування вступили в дію. editKeybinding: title: Зміна гарячої клавіши desc: Натисніть клавішу, яку ви хочете призначити, або escape для скасування. - resetKeybindingsConfirmation: title: Скинути гарячу клавіші - desc: Це скине всі прив'язки клавіш до їхніх значень за замовчуванням. Будь ласка, підтвердіть. - + desc: Це скине всі прив'язки клавіш до їхніх значень за замовчуванням. Будь + ласка, підтвердіть. keybindingsResetOk: title: Скинути гарячі клавіші desc: Гарячі клавіши скинемуться до їхніх початкових значень! - featureRestriction: title: Демоверсія - desc: Ви спробували отримати доступ до функції (), яка недоступна в демонстраційній версії. Подумайте про отримання окремої версії, щоб насолодитися грою сповна! - + desc: Ви спробували отримати доступ до функції (), яка недоступна в + демонстраційній версії. Подумайте про отримання окремої версії, щоб + насолодитися грою сповна! oneSavegameLimit: title: Обмежені збереження - desc: Ви можете мати лише одне збереження одночасно в демоверсії. Будь ласка, видаліть збереження чи завантажте окрему версію гри! - + desc: Ви можете мати лише одне збереження одночасно в демоверсії. Будь ласка, + видаліть збереження чи завантажте окрему версію гри! updateSummary: title: Нове оновлення! - desc: >- - Ось зміни з вашої останньої гри: - + desc: "Ось зміни з вашої останньої гри:" upgradesIntroduction: title: Розблокування поліпшень - desc: >- - Усі форми, що ви виробляєте, можуть використовуватися для розблокування поліпшення - Не зруйнуйте свої старі фабрики! + desc: Усі форми, що ви виробляєте, можуть використовуватися для розблокування + поліпшення - Не зруйнуйте свої старі фабрики! Вкладку з поліпшеннями можна знайти в правому верхньому куті екрана. - massDeleteConfirm: title: Підтвердження видалення - desc: >- - Ви видаляєте багато будівль (, якщо бути точним)! Ви справді хочете зробити це? - + desc: Ви видаляєте багато будівль (, якщо бути точним)! Ви справді хочете + зробити це? massCutConfirm: title: Підтвердження вирізання - desc: >- - Ви вирізаєте багато будівль(, якщо бути точним)! Ви справді хочете зробити це? - + desc: Ви вирізаєте багато будівль(, якщо бути точним)! Ви справді хочете + зробити це? massCutInsufficientConfirm: title: Підтвердити вирізання - desc: >- - Ви не можете дозволити собі вставити цю область! Ви справді хочете вирізати це? - + desc: Ви не можете дозволити собі вставити цю область! Ви справді хочете + вирізати це? blueprintsNotUnlocked: title: Ще не розблоковано - desc: >- - Досягніть 13-го рівня, щоб розблокувати креслення! - + desc: Досягніть 13-го рівня, щоб розблокувати креслення! keybindingsIntroduction: title: Корисні гарячі клавіши - desc: >- - Гра має багато гарячих клавіш, що полегшують будівництво великих фабрик. - Ось декілька, але обов’язково ознайомтеся з прив’язками клавіш!

- CTRL + тягніть: виділити зону.
- SHIFT: тримайте, щоб розмістити декілька одного будинку.
- ALT: змінити сторону розміщеної конвеєрної стрічки.
- + desc: "Гра має багато гарячих клавіш, що полегшують будівництво великих фабрик. + Ось декілька, але обов’язково ознайомтеся з прив’язками + клавіш!

CTRL + + тягніть: виділити зону.
SHIFT: + тримайте, щоб розмістити декілька одного будинку.
ALT: змінити сторону розміщеної конвеєрної + стрічки.
" 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 позначки в демоверсії. Отримайте окрему версії для створення необмеженної кількості позначок. - + desc: Ви можете створити тільки 2 позначки в демоверсії. Отримайте окрему версії + для створення необмеженної кількості позначок. exportScreenshotWarning: 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) + renameSavegame: + title: Rename Savegame + desc: You can rename your savegame here. ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: Рухатися selectBuildings: Виділити будівлі @@ -310,8 +223,6 @@ ingame: clearSelection: Очистити виділене pipette: Піпетка switchLayers: Змінити шари - - # Names of the colors, used for the color blind mode colors: red: Червоний green: Зелений @@ -322,18 +233,9 @@ ingame: white: Білий black: Чорний uncolored: Без кольору - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: Натисніть для циклу варіантів. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - Hotkey: - + hotkeyLabel: "Hotkey: " infoTexts: speed: Швидкість range: Дальність @@ -341,36 +243,21 @@ ingame: oneItemPerSecond: 1 предмет за сек. itemsPerSecond: предмет. за сек itemsPerSecondDouble: (x2) - tiles: плиток - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Рівень completed: Завершено unlockText: Розблоковано «»! buttonNextLevel: Наступний рівень - - # Notifications on the lower right notifications: newUpgrade: Нове оновлення розблоковано! gameSaved: Вашу гру збережено. - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: Поліпшення buttonUnlock: Поліпшення - - # Gets replaced to e.g. "Tier IX" tier: Ранг - - # The roman number for each tier - tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] - maximumLevel: МАКСИМАЛЬНИЙ РІВЕНЬ (Швидкість x) - - # The "Statistics" window statistics: title: Статистика dataSources: @@ -379,62 +266,87 @@ ingame: description: Відображає кількість збережених фігур у вашому центрі. produced: title: Виробляється - description: Відображає всі форми вашої цілої фабрики, що виробляються, включаючи проміжні продукти. + description: Відображає всі форми вашої цілої фабрики, що виробляються, + включаючи проміжні продукти. delivered: title: Доставлено description: Відображає форми, що доставляються до центру. noShapesProduced: Жодної форми поки не випускається. - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: за хв. - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / s + minute: / m + hour: / h settingsMenu: playtime: У грі - buildingsPlaced: Будівлі beltsPlaced: Стрічки - - buttons: - continue: Продовжити - settings: Налаштування - menu: Повернутися до меню - - # Bottom left tutorial hints tutorialHints: title: Потрібна допомога? showHint: Показати підказку hideHint: Закрити - - # When placing a blueprint blueprintPlacer: cost: Вартість - - # Map markers waypoints: waypoints: Позначки hub: Центр - description: ЛКМ на позначку, щоб перейти до неї, ПКМ для видалення

Натисніть для створення позначки з поточного виду або ПКМ, щоб створити позначку в обраному місці. + description: ЛКМ на позначку, щоб перейти до неї, ПКМ для + видалення

Натисніть для створення позначки з + поточного виду або ПКМ, щоб створити позначку в + обраному місці. creationSuccessNotification: Позначку створено. - - # Shape viewer shapeViewer: title: Шари empty: Пустий copyKey: Копіювати ключ - - # Interactive tutorial interactiveTutorial: title: Навчання hints: - 1_1_extractor: Розмістіть екстрактор поверх фігури кола, щоб отримати її! - 1_2_conveyor: >- - З’єднайте екстрактор з вашим центром за допомогою конвеєрної стрічки!

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

Підказка: Утримуйте SHIFT, щоб розмістити багато екстракторів, і використовуйте R, щоб обертати їх. - -# All shop upgrades + 1_1_extractor: Розмістіть екстрактор поверх фігури + кола, щоб отримати її! + 1_2_conveyor: "З’єднайте екстрактор з вашим центром за допомогою + конвеєрної стрічки!

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

Підказка: Утримуйте SHIFT, щоб + розмістити багато екстракторів, і використовуйте + R, щоб обертати їх." + 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 + standaloneAdvantages: + title: Get the full version! + no_thanks: No, thanks! + points: + levels: + title: 12 New Levels + desc: For a total of 26 levels! + buildings: + title: 18 New Buildings + desc: Fully automate your factory! + savegames: + title: ∞ Savegames + desc: As many as your heart desires! + upgrades: + title: 20 Upgrade Tiers + desc: This demo version has only 5! + markers: + title: ∞ Markers + desc: Never get lost in your factory! + wires: + title: Wires + desc: An entirely new dimension! + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! + support: + title: Support me + desc: I develop it in my spare time! shopUpgrades: belt: name: Стрічки, розподілювачі і тунелі @@ -448,249 +360,389 @@ shopUpgrades: painting: name: Змішування і малювання description: Швидкість x → x - -# Buildings and their name / description buildings: hub: deliver: Доставте, toUnlock: щоб розблокувати levelShortcut: РІВ - + endOfDemo: End of Demo belt: default: - name: &belt Конвеєрна стрічка - description: Транспортує предмети, утримуйте і перетягуйте для розміщення декількох. - + name: Конвеєрна стрічка + description: Транспортує предмети, утримуйте і перетягуйте для розміщення + декількох. wire: default: - name: &wire Дріт + name: Дріт description: Дозволяє передавати енергію - - # Internal name for the Extractor + second: + name: Wire + description: Transfers signals, which can be items, colors or booleans (1 / 0). + Different colored wires do not connect. miner: default: - name: &miner Екстрактор + name: Екстрактор description: Розмістіть над формою чи кольором, який хочете видобути. - chainable: name: Екстрактор (Ланц.) - description: Розмістіть над формою чи кольором, який хочете видобути. Можна об’єднати в ланцюг. - - # Internal name for the Tunnel + description: Розмістіть над формою чи кольором, який хочете видобути. Можна + об’єднати в ланцюг. underground_belt: default: - name: &underground_belt Тунель + name: Тунель description: Дозволяє транспортувати ресурси під будівлями та стрічками. - tier2: name: Тунель, ранг II description: Дозволяє транспортувати ресурси під будівлями та стрічками. - - # Internal name for the Balancer - splitter: - default: - name: &splitter Розподілювач - description: Багатофункціональний. Рівномірно розподіляє все, що входить. - - compact: - name: З’єднувач - description: Об’єднує дві конвеєрні стрічки в одну. Займає усього на всього одну клітину. - - compact-inverse: - name: З’єднувач - description: Об’єднує дві конвеєрні стрічки в одну. Займає усього на всього одну клітину. - cutter: default: - name: &cutter Різчик - description: Розрізає форми зверху вниз і виводить обидві половинки. Якщо ви використовуєте лише одну частину, не забудьте знищити іншу частину, інакше вона застрягне в механізмі! + name: Різчик + description: Розрізає форми зверху вниз і виводить обидві половинки. + Якщо ви використовуєте лише одну частину, не забудьте + знищити іншу частину, інакше вона застрягне в + механізмі! quad: name: Різчик (4 вих.) - description: Розрізає форми на 4 частини. Якщо ви використовуєте лише одну частину, не забудьте знищити інші, інакше вони застрягнуть в механізмі! - - advanced_processor: - default: - name: &advanced_processor Передовий процесор - description: Покращена обробка форм. - + description: Розрізає форми на 4 частини. Якщо ви використовуєте лише + одну частину, не забудьте знищити інші, інакше вони застрягнуть + в механізмі! rotater: default: - name: &rotater Обертач + name: Обертач description: Обертає форми за годинниковою стрілкою на 90 градусів. ccw: name: Обертач (-90) description: Обертає форми проти годинникової стрілки на 90 градусів. - fl: - name: Обертач (180) - description: Обертає форми на 180 градусів. - + rotate180: + name: Rotate (180) + description: Rotates shapes by 180 degrees. stacker: default: - name: &stacker Укладальник - description: Складає обидва елементи. Якщо їх неможливо об’єднати, правий елемент розміщується над лівим елементом. - + name: Укладальник + description: Складає обидва елементи. Якщо їх неможливо об’єднати, правий + елемент розміщується над лівим елементом. mixer: default: - name: &mixer Змішувач кольорів + name: Змішувач кольорів description: Змішує два кольори за допомогою добавки. - painter: default: - name: &painter Фарбувач - description: &painter_desc Забирає форму з лівого входу, а колір з верхнього. - + name: Фарбувач + description: Забирає форму з лівого входу, а колір з верхнього. mirrored: - name: *painter - description: *painter_desc - + name: Фарбувач + description: Забирає форму з лівого входу, а колір з верхнього. double: name: Фарбувач (подв.) - description: Фарбує фігури, що надійшла з лівого входу, кольором, що надійшов з верхнього. + 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! trash: default: - name: &trash Смітник + name: Смітник description: Приймає форми зі всіх сторін і руйнує їх. Назавжди. - - storage: - name: Сховище - description: Зберігає зайві предмети до заданої місткості. Може використовуватися для зберігання надлишкових речей. - - energy_generator: - deliver: Доставте - - # This will be shown before the amount, so for example 'For 123 Energy' - toGenerateEnergy: За - + balancer: default: - name: &energy_generator Енергетичний генератор - description: Створює енергію споживаючи форми. Кожний енергетичний генератор потрібує свою форму. - - wire_crossings: - default: - name: &wire_crossings Дротовий розподілювач - description: Ділить дріт надвоє. - + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Дротовий з’єднувач - description: Об’єднує два дроти в один. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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 градусів. - + desc: Обертач розблоковано! Він повертає форми за годинниковою + стрілкою на 90 градусів. reward_painter: title: Фарбування - desc: >- - Фарбувач розблоковано. Видобудьте трохи кольорів з відповідних жилок (як ви зробили це з формами) і об’єднуйте їх з формами у фарбувачі, щоб розфарбувати форми!

До речі, якщо ви дальтонік, то в увімкніть режим високої контрастності в налаштуваннях! - + desc: Фарбувач розблоковано. Видобудьте трохи кольорів з + відповідних жилок (як ви зробили це з формами) і об’єднуйте їх з + формами у фарбувачі, щоб розфарбувати форми!

До речі, якщо ви + дальтонік, то в увімкніть режим високої + контрастності в налаштуваннях! reward_mixer: title: Змішування кольорів - desc: Змішування кольорів розблоковано. Об’єднуйте два кольори у цій будівлі. - + desc: The mixer has been unlocked - It mixes two colors using + additive blending! reward_stacker: title: Поєднувач форм - desc: Тепер ви можете поєднувати фігури з поєднувачем форм! Форми об’єднуються з двох сторін, і якщо їх можна поставити поруч, вони будуть з’єднані. Якщо ні, то форма, що подана з правого входу, застрягне на горі лівого входу. - + 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: Тунель розблоковано. Ви можете створювати тунелі для преметів через стрічки і будівлі. - + desc: Тунель розблоковано. Ви можете створювати тунелі для + преметів через стрічки і будівлі. reward_rotater_ccw: title: Обертання проти годинникової стрілки - desc: Ви розблокували новий варіант обертача. Він дозволяє обертати проти годинникової стрілки! Щоб побудувати його виберіть обертач, натисніть «T», щоб переглянути всі варіанти, та оберіть потрібний! - + 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: Тунель II - desc: Ви розблокували новий варіант тунеля. Він має більшу дальність, і ви можете також змішувати і зіставляти ці тунелі! - - reward_splitter_compact: - title: Компактний розподілювач - desc: >- - Ви розблокували компактний варіант розподілювача. Він приймає з двох сторін і об’єднує на одну стрічку! - + desc: Ви розблокували новий варіант тунеля. Він має + більшу дальність, і ви можете також змішувати і + зіставляти ці тунелі! reward_cutter_quad: title: Різчик (чотири) - desc: Ви розблокували інший варіант різчика. Він може розрізати форми на чотири частини замість двох. - + desc: Ви розблокували інший варіант різчика. Він може розрізати + форми на чотири частини замість двох. reward_painter_double: title: Double Painting - desc: Ви розблокували інший варіант фарбувача. Він працює як звичайний фарбувач, але обробляє дві фігури одночасно, споживаючи лише один колір замість двох! - - reward_painter_quad: - title: Quad Painting - desc: Ви розблокували інший варіант фарбувача. Він дозволяє фарбувати кожну частину форми індивідуально! - + desc: Ви розблокували інший варіант фарбувача. Він працює як + звичайний фарбувач, але обробляє дві фігури + одночасно, споживаючи лише один колір замість двох! 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: Ви вже можете копіювати і вставляти частини вашої фабрики. Виберіть зону (утримуйте CTRL, а тоді тягніть мишою), і натисніть «C», щоб скопіювати.

Вставляти креслення — річ не безкоштовна, спочатку вам потрібно створити форми креслень, щоб собі це дозволити! (ті, що ви щойно доставили). - - # Special reward, which is shown when there is no reward actually + desc: Ви вже можете копіювати і вставляти частини вашої + фабрики. Виберіть зону (утримуйте CTRL, а тоді тягніть мишою), і + натисніть «C», щоб скопіювати.

Вставляти креслення — + річ не безкоштовна, спочатку вам потрібно створити + форми креслень, щоб собі це дозволити! (ті, що ви + щойно доставили). 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: >- - Вітаємо! До речі, більше контенту планується в окремій версії! - + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: Налаштування categories: general: Загальне userInterface: Користувацький інтерфейс advanced: Передове - + performance: Performance versionBadges: dev: Розробка staging: Тестування prod: Виробництво buildDate: Створено - labels: uiScale: title: Масштаб інтерфейсу - description: >- - Змінює розмір користувацього інтерфейсу. Інтерфейс усе ще буде масштабуватися залежно від роздільної здатності вашого пристрою, але цей параметр контролює масштаб масштабування. + description: Змінює розмір користувацього інтерфейсу. Інтерфейс усе ще буде + масштабуватися залежно від роздільної здатності вашого пристрою, + але цей параметр контролює масштаб масштабування. scales: super_small: Надзвичайно малий small: Малий regular: Звичайний large: Великий huge: Величезний - autosaveInterval: title: Проміжок між автозбереженнями - description: >- - Контролює, як часто гра автоматично зберігатиметься. Ви також можете повністю вимкнути його тут. - + description: Контролює, як часто гра автоматично зберігатиметься. Ви також + можете повністю вимкнути його тут. intervals: one_minute: 1 хвилина two_minutes: 2 хвилини @@ -698,22 +750,18 @@ settings: ten_minutes: 10 хвилин twenty_minutes: 20 хвилин disabled: Вимкнено - scrollWheelSensitivity: title: Чутливість масштабування - description: >- - Змінює наскільки чутливе масштабування (колесо миші або трекпад). + description: Змінює наскільки чутливе масштабування (колесо миші або трекпад). sensitivity: super_slow: Надзвичайно повільна slow: Повільна regular: Звичайна fast: Швидка super_fast: Надзвичайно швидка - movementSpeed: title: Швидкість руху - description: >- - Змінює Змінює швидкість руху бачення при використанні клавіатури. + description: Змінює Змінює швидкість руху бачення при використанні клавіатури. speeds: super_slow: Надзвичайно повільна slow: Повільна @@ -721,87 +769,125 @@ settings: fast: Швидка super_fast: Надзвичайно швидка extremely_fast: Екстремально швидка - language: title: Мова - description: >- - Зміна мови. Усі переклади зроблені користувачами і можуть бути незавершеними! - + description: Зміна мови. Усі переклади зроблені користувачами і можуть бути + незавершеними! enableColorBlindHelper: title: Режим високої контрастності - description: >- - Дозволяє використовувати різні інструменти, які дозволяють грати в гру, якщо ви є дальтоніком. - + description: Дозволяє використовувати різні інструменти, які дозволяють грати в + гру, якщо ви є дальтоніком. fullscreen: title: Повноекранний режим - description: >- - Щоб повністю насолодитися грою, рекомендується грати у повноекранному режимі. Не доступно тільки в демоверсії. - + description: Щоб повністю насолодитися грою, рекомендується грати у + повноекранному режимі. Не доступно тільки в демоверсії. soundsMuted: title: Заглушити звуки - description: >- - Якщо увімкнено, то вимикає всі звукові ефекти. - + description: Якщо увімкнено, то вимикає всі звукові ефекти. musicMuted: title: Заглушити музику - description: >- - Якщо увімкнено, то вимикає всю музику. - + description: Якщо увімкнено, то вимикає всю музику. theme: title: Тема гри - description: >- - Оберіть тему гри (світлу чи темну). + description: Оберіть тему гри (світлу чи темну). themes: dark: Темна light: Світла - refreshRate: title: Частота оновлення - description: >- - Якщо ви маєте 144-герцовий монітор, то змініть частоту оновлення тут, щоб гра правильно працювала при більшій швидкості оновлення. Це може фактично знизити FPS, якщо ваш комп’ютер занадто повільний. - + description: Якщо ви маєте 144-герцовий монітор, то змініть частоту оновлення + тут, щоб гра правильно працювала при більшій швидкості + оновлення. Це може фактично знизити FPS, якщо ваш комп’ютер + занадто повільний. alwaysMultiplace: title: Мультирозміщення - description: >- - Якщо ввімкнено, всі будівлі залишатимуться вибраними після розміщення, доки ви не скасуєте це. Це еквівалентно постійному утримуванню SHIFT. - + description: Якщо ввімкнено, всі будівлі залишатимуться вибраними після + розміщення, доки ви не скасуєте це. Це еквівалентно постійному + утримуванню SHIFT. offerHints: title: Підказки & посібники - description: >- - Якщо увімкнено, то пропонує підказки та посібники під час гри. Також приховує певні елементи інтерфейсу до заданого рівня, щоб полегшити потрапляння в гру. - + description: Якщо увімкнено, то пропонує підказки та посібники під час гри. + Також приховує певні елементи інтерфейсу до заданого рівня, щоб + полегшити потрапляння в гру. enableTunnelSmartplace: title: Розумні тунелі - description: >- - Якщо увімкнено, то розміщення тунелів видалить непотрібні стрічки. Це також дозволяє вам перетягувати тунелі і видаляти автоматично зайві тунелі. - + description: Якщо увімкнено, то розміщення тунелів видалить непотрібні стрічки. + Це також дозволяє вам перетягувати тунелі і видаляти автоматично + зайві тунелі. vignette: title: Віньєтка - description: >- - Вмикає віньєтку, яка затемнює кути екрану і робить текст легшим для читання. - + description: Вмикає віньєтку, яка затемнює кути екрану і робить текст легшим для + читання. rotationByBuilding: title: Обертання за типом будівлі - description: >- - Кожний тип будівлі запам’ятовує обертання, яке ви встановили. Це може бути зручнішим, якщо ви часто перемикаєтесь між розміщенням різних типів будівель. - + description: Кожний тип будівлі запам’ятовує обертання, яке ви встановили. Це + може бути зручнішим, якщо ви часто перемикаєтесь між розміщенням + різних типів будівель. compactBuildingInfo: title: Компактна інформація про будівлі - description: >- - Скорочує інформаційні поля для будівель, лише показуючи їх співвідношення. В іншому випадку відображається опис та зображення. - + description: Скорочує інформаційні поля для будівель, лише показуючи їх + співвідношення. В іншому випадку відображається опис та + зображення. disableCutDeleteWarnings: title: Вимкнути попердження про вирізання та видалення - description: >- - Вимикає діалогові вікна попередження, що з’являються під час вирізання/видалення більше 100 об’єктів. - + description: Вимикає діалогові вікна попередження, що з’являються під час + вирізання/видалення більше 100 об’єктів. + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: Гарячі клавіши - hint: >- - Tip: Упевніться, що ви можете використовувати CTRL, SHIFT і ALT! Вони дозволяють різні варіанти розміщення. - + hint: "Tip: Упевніться, що ви можете використовувати CTRL, SHIFT і ALT! Вони + дозволяють різні варіанти розміщення." resetKeybindings: Скинути гарячі клавіші - categoryLabels: general: Застосунок ingame: Гра @@ -810,7 +896,6 @@ keybindings: massSelect: Масовий вибір buildings: Гарячі клавіши будівництва placementModifiers: Модифікатори розміщення - mappings: confirm: Підтвердити back: Назад @@ -820,58 +905,63 @@ keybindings: mapMoveLeft: Ліворуч mapMoveFaster: Пришвидшитися centerMap: Центрувати мапу - mapZoomIn: Приблизити mapZoomOut: Віддалити createMarker: Створити позначку - menuOpenShop: Поліпшення menuOpenStats: Статистика menuClose: Закрити меню - toggleHud: Перемкнути користувацький інтерфейс toggleFPSInfo: Перемкнути інформацію про FPS та зневадження switchLayers: Перемкнути шари exportScreenshot: Експортувати цілу базу у вигляді зображення - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - advanced_processor: *advanced_processor - rotater: *rotater - stacker: *stacker - mixer: *mixer - energy_generator: *energy_generator - painter: *painter - trash: *trash - wire: *wire - + belt: Конвеєрна стрічка + underground_belt: Тунель + miner: Екстрактор + cutter: Різчик + rotater: Обертач + stacker: Укладальник + mixer: Змішувач кольорів + painter: Фарбувач + trash: Смітник + wire: Дріт pipette: Піпетка rotateWhilePlacing: Повернути - rotateInverseModifier: >- - Modifier: Повернути проти годинникової стрілки натомість + rotateInverseModifier: "Modifier: Повернути проти годинникової стрілки натомість" cycleBuildingVariants: Повторювати варіанти циклічно confirmMassDelete: Видалити ділянку pasteLastBlueprint: Вставити останнє креслення cycleBuildings: Перемикання будівль lockBeltDirection: Увімкнути планувальник конвеєрних стрічок - switchDirectionLockSide: >- - Planner: Змінити сторону - + switchDirectionLockSide: "Planner: Змінити сторону" massSelectStart: Утримуйте і перетягуйте, щоб розпочати - massSelectSelectMultiple: + massSelectSelectMultiple: Select multiple areas massSelectCopy: Копіювати ділянку massSelectCut: Вирізати ділянку - placementDisableAutoOrientation: Вимкнути автоматичну орієнтацію placeMultiple: Залишатися у режимі розміщення placeInverse: Перевернути автоматичну орієнтацію стрічки - + 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 (це + я).

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

@@ -880,10 +970,8 @@ about: Звуковий трек був зроблений гравцем Peppsen — він просто приголомшливий.

І нарешті, величезна подяка моєму найкращому другу Niklas, бо без наших сеансів у факторіо ця гра ніколи б не існувала. - changelog: title: Змінопис - demo: features: restoringGames: Відновлення збережень @@ -891,5 +979,65 @@ demo: oneGameLimit: Обмежено одним збереженням 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. diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 225619e0..771470d0 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -1,141 +1,54 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - -# Chinese translation dictionary. TODO: better names for the buildings. -# Standalone:独立版 -# Demo:演示版 -# Level:关/关卡 -# Shape:图形 -# tile:格子/格 -# Keybind:按键设置 -# Menu:主界面 -# Center/Hub:基地 -# Upgrade:建筑升级/升级 -# Efficiency:效率 -# Building:建筑 -# Variant:建筑变体 -# Belt: 传送带 -# Balancer:平衡机 -# Compact Balancer:小型合流机 -# Merger:合并机 -# Tunnel:隧道 -# Extractor:开采机 -# Cutter:切割机 -# Rotate:旋转机 -# Stacker:堆叠机 -# Color Mixer:混色机 -# Painter:上色机 -# Trash:垃圾桶 - ---- steamPage: - # This is the short text appearing on the steam page shortText: shapez.io 是一款在无边际的地图上建造工厂、自动化生产与组合愈加复杂的图形的游戏。 - # shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map. - - # 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] - - 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] - - discordLink: Official Discord - Chat with me! - + 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: 错误 - - # Chinese translation: There is typically no divider used for numbers. - # How big numbers are rendered, e.g. "10,000" - thousandsDivider: "" - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # TODO: Chinese translation: suffix changes every 10000 in Chinese numbering system. - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + thousandsDivider: "," + decimalSeparator: . suffix: thousands: K millions: M billions: B trillions: T - - # Shown for infinitely big numbers infinite: 无限 - time: - # Used for formatting past time dates oneSecondAgo: 1秒前 xSecondsAgo: 秒前 oneMinuteAgo: 1分钟前 @@ -144,14 +57,10 @@ global: xHoursAgo: 小时前 oneDayAgo: 1天前 xDaysAgo: 天前 - - # Short formats for times, e.g. '5h 23m' secondsShort: 秒 minutesAndSecondsShort: 秒 - hoursAndMinutesShort: 小时 秒 - + hoursAndMinutesShort: 秒 xMinutes: 分钟 - keys: tab: TAB control: CTRL @@ -159,13 +68,9 @@ global: escape: ESC shift: SHIFT space: 空格 - demoBanners: - # This is the "advertisement" shown in the main menu and other various places - title: 演示版 - intro: >- - 获取独立版以解锁所有功能! - + title: 试玩版 + intro: 获取独立版以解锁所有游戏内容! mainMenu: play: 开始游戏 changelog: 更新日志 @@ -173,25 +78,20 @@ mainMenu: openSourceHint: 本游戏已开源! discordLink: 官方Discord服务器 helpTranslate: 帮助我们翻译! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 Chrome 或者获取独立版以得到更好的体验。 - + browserWarning: 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 Chrome 或者获取独立版以得到更好的体验。 savegameLevel: 第关 - savegameLevelUnknown: - 未知关卡 + savegameLevelUnknown: 未知关卡 continue: 继续游戏 newGame: 新游戏 madeBy: 作者: subreddit: Reddit - + savegameUnnamed: 未命名 dialogs: buttons: - ok: 确认 # 好 完成 - delete: 删除 # Delete - cancel: 取消 # Cancel - later: 以后 # Later + ok: 确认 + delete: 删除 + cancel: 取消 + later: 以后 restart: 重启游戏 reset: 重置 getStandalone: 获取独立版 @@ -199,113 +99,84 @@ dialogs: viewUpdate: 查看更新 showUpgrades: 显示建筑升级 showKeybindings: 显示按键设置 - importSavegameError: title: 导入错误 - text: >- - 未能导入你的存档: - + text: 未能导入你的存档: importSavegameSuccess: title: 导入成功 - text: >- - 存档被成功导入 - + text: 存档被成功导入 gameLoadFailure: title: 存档损坏 - text: >- - 未能导入你的存档: - + 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: >- - 未能删除你的存档 - + text: 未能删除你的存档 restartRequired: title: 需要重启游戏 - text: >- - 你需要重启游戏以应用变更的设置。 - + text: 你需要重启游戏以应用变更的设置。 editKeybinding: title: 更改按键设置 desc: 请按下你想要使用的按键,或者按下 ESC 键来取消设置。 - resetKeybindingsConfirmation: title: 重置所有按键 desc: 你将要重置所有按键,请确认。 - keybindingsResetOk: title: 重置所有按键 desc: 成功重置所有按键! - featureRestriction: - title: 演示版 - desc: 你尝试使用了功能。该功能在演示版中不可用。请考虑购买独立版以获得更好的体验。 - + title: 试玩版 + desc: 你尝试使用了功能。该功能在试玩版中不可用。请考虑购买独立版以获得更好的体验。 oneSavegameLimit: title: 存档数量限制 - desc: 演示版中只能保存一份存档。请删除旧存档或者获取独立版! - + desc: 试玩版中只能保存一份存档。请删除旧存档或者获取独立版! updateSummary: title: 更新啦! - desc: >- - 以下为自上次游戏以来更新的内容: - + desc: "以下为自上次游戏以来更新的内容:" upgradesIntroduction: title: 解锁建筑升级 - desc: >- - 不要销毁你之前建造的工厂!你生产过的所有图形都会被用来升级建筑。 - 升级菜单在屏幕右上角。 - # All shapes you produce can be used to unlock upgrades - Don't destroy your old factories! - # The upgrades tab can be found on the top right corner of the screen. - + desc: 不要销毁你之前建造的工厂!你生产过的所有图形都会被用来升级建筑。 升级菜单在屏幕右上角。 massDeleteConfirm: title: 确认删除 - desc: >- - 你将要删除很多建筑,准确来说有幢! 你确定要这么做吗? - + desc: 你将要删除很多建筑,准确来说有幢! 你确定要这么做吗? blueprintsNotUnlocked: title: 未解锁 - desc: >- - 你还没有解锁蓝图功能!完成更多的关卡来解锁蓝图。 - + desc: 你还没有解锁蓝图功能!完成更多的关卡来解锁蓝图。 keybindingsIntroduction: title: 实用按键 - desc: >- - 这个游戏有很多能帮助搭建工厂的使用按键。 - 以下是其中的一些,记得在按键设置中查看其他的!

- CTRL + 拖动:选择区域以复制或删除。
- SHIFT: 按住以放置多个。
- ALT: 反向放置传送带。
- + 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: >- - 你将要剪切很多建筑,准确来说有幢! 你确定要这么做吗? - + desc: 你将要剪切很多建筑,准确来说有幢! 你确定要这么做吗? exportScreenshotWarning: title: 工厂截图 - desc: >- - 你将要导出你的工厂的截图。如果你的基地很大,截图过程将会很慢,且有可能导致游戏崩溃! - + desc: 你将要导出你的工厂的截图。如果你的基地很大,截图过程将会很慢,且有可能导致游戏崩溃! massCutInsufficientConfirm: 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: 重命名存档 + desc: 您可以在此重命名存档。 ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: 移动地图 selectBuildings: 选择区域 @@ -326,18 +197,9 @@ ingame: clearSelection: 取消选择 pipette: 选取器 switchLayers: Switch layers - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: 按 键以选择建筑变体. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - 快捷键: - + hotkeyLabel: "快捷键: " infoTexts: speed: 效率 range: 范围 @@ -345,37 +207,21 @@ ingame: oneItemPerSecond: 1个/秒 itemsPerSecond: 个/秒 itemsPerSecondDouble: (2倍) - tiles: 格 - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: 第关 completed: 完成 unlockText: 解锁! buttonNextLevel: 下一关 - - # Notifications on the lower right notifications: newUpgrade: 有新更新啦! gameSaved: 游戏已保存。 - - # The "Upgrades" window + freeplayLevelComplete: Level has been completed! shop: title: 建筑升级 buttonUnlock: 升级 - - # Gets replaced to e.g. "Tier IX" tier: 级 - - # The roman number for each tier - # Chinese translation: Chinese characters for each tier - tierLabels: [一, 二, 三, 四, 五, 六, 七, 八, 九, 十] - maximumLevel: 最高级(倍效率) - - # The "Statistics" window statistics: title: 统计信息 dataSources: @@ -389,51 +235,33 @@ ingame: title: 送达 description: 显示图形送达基地并交付的速度。 noShapesProduced: 你还没有生产任何图形。 - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: 个 / 分钟 - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / 秒 + minute: / 分 + hour: / 时 settingsMenu: playtime: 游戏时间 - buildingsPlaced: 建筑数量 beltsPlaced: 传送带数量 - - buttons: - continue: 继续 - settings: 设置 - menu: 回到主界面 - - # Bottom left tutorial hints tutorialHints: title: 需要帮助? showHint: 显示帮助 hideHint: 关闭 - - # When placing a blueprint blueprintPlacer: cost: 需要 - - # Map markers waypoints: waypoints: 地图标记 hub: 基地 - description: 左键跳转到地图标记,右键删除地图标记。

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

+ 在当前地点创建地图标记,或者在选定位置上右键创建地图标记. creationSuccessNotification: 成功创建地图标记。 - - # Interactive tutorial interactiveTutorial: title: 教程 hints: 1_1_extractor: 在圆形矿脉上放一个开采机来获取圆形! - 1_2_conveyor: >- - 用传送带将你的开采机连接到基地上!

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

- 提示:按住 SHIFT 键来放置多个开采机,用 R 键旋转它们。 - + 1_2_conveyor: 用传送带将你的开采机连接到基地上!

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

提示:按住 + SHIFT 键来放置多个开采机,用 R 键旋转它们。 colors: red: 红色 green: 绿色 @@ -445,11 +273,45 @@ ingame: uncolored: 无色 black: 黑色 shapeViewer: - title: 层 # TODO: find better translation + title: 层 empty: 空 copyKey: 复制短代码 - -# All shop upgrades + connectedMiners: + one_miner: 1 个开采机 + n_miners: 个开采机 + limited_items: 限制在 + watermark: + title: 试玩版 + desc: 点击这里 了解完整版内容 + get_on_steam: 在 steam 商城购买 + standaloneAdvantages: + title: 购买完整版! + no_thanks: 不需要,谢谢 + points: + levels: + title: 12 个全新关卡! + desc: 总共 26 个不同关卡! + buildings: + title: 18 个全新建筑 + desc: 用于建造全自动工厂! + savegames: + title: 无限数量存档 + desc: 存档功能可以尽情使用 + upgrades: + title: 20 个等级升级 + desc: 试玩版只有 5 个等级! + markers: + title: 无限数量地图标记 + desc: 再也不会找不到自己的工厂了 + wires: + title: 导线更新包 + desc: 解锁更多可能! + darkmode: + title: 暗色模式 + desc: 优雅且护眼的配色 + support: + title: 支持作者 + desc: 我使用闲暇时间开发游戏! shopUpgrades: belt: name: 传送带、平衡机、隧道 @@ -463,290 +325,388 @@ shopUpgrades: painting: name: 混色、上色 description: 效率 倍 → 倍 - -# Buildings and their name / description buildings: belt: default: - name: &belt 传送带 + name: 传送带 description: 运送物品,按住并拖动来放置多个传送带。 - - miner: # Internal name for the Extractor + miner: default: - name: &miner 开采机 + name: 开采机 description: 在图形或者颜色上放置来开采他们。 - chainable: name: 链式开采机 description: 在图形或者颜色上放置来开采他们。可以被链接在一起。 - - underground_belt: # Internal name for the Tunnel + underground_belt: default: - name: &underground_belt 隧道 + name: 隧道 description: 可以从其他传送带或建筑底下方运送物品。 - tier2: name: 二级隧道 description: 可以从其他传送带或建筑底下方运送物品。 - - splitter: # Internal name for the Balancer - default: - name: &splitter 平衡机 - description: 多功能——将所有输入平均分配到所有输出。 - - compact: - name: 小型合流机 - description: 把两个输入合并到一个输出上。 - - compact-inverse: - name: 小型合流机 - description: 把两个输入合并到一个输出上。 - cutter: default: - name: &cutter 切割机 + name: 切割机 description: 将图形从上到下切开并输出。如果你只需要其中一半,记得把另一半销毁掉,否则切割机会停止工作! quad: name: 切割机(四向) description: 将输入的图形切成四块。如果你只需要其中一块,记得把其他的销毁掉,否则切割机会停止工作! - rotater: default: - name: &rotater 旋转机 + name: 旋转机 description: 将图形顺时针旋转90度。 ccw: name: 旋转机(逆时针) description: 将图形逆时针旋转90度。 - fl: - name: Rotate (180) - description: Rotates shapes by 180 degrees. - + rotate180: + name: 旋转机 (180度) + description: 将图形旋转180度。 stacker: default: - name: &stacker 堆叠机 + name: 堆叠机 description: 将输入的图形拼贴在一起。如果不能被直接拼贴,右边的图形会被堆叠在左边的图形上面. - mixer: default: - name: &mixer 混色机 + name: 混色机 description: 用加法混色将两个颜色混合起来 - painter: default: - name: &painter 上色机 - description: &painter_desc 将整个图形涂上输入的颜色。 + name: 上色机 + description: 将整个图形涂上输入的颜色。 double: name: 上色机(双倍) 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: *painter - description: *painter_desc - + name: 上色机 (镜像) + description: 将整个图形涂上输入的颜色。 trash: default: - name: &trash 垃圾桶 + name: 垃圾桶 description: 从所有四个方向上输入物品并销毁它们。永远。 - - storage: - name: 仓库 - description: 储存多余的物品,有一定储存上限。可以被用来作为溢流门。 hub: deliver: 交付 toUnlock: 来解锁 levelShortcut: LVL + endOfDemo: 试玩版结束 wire: default: - name: Energy Wire - description: Allows you to transport energy. - advanced_processor: + name: 能量导线 + description: 用于传输能量。 + second: + name: 导线 + description: 传输信号,信号可以是物品,颜色或者布尔值。 不同颜色的导线不会互相连接。 + balancer: default: - name: Color Inverter - description: Accepts a color or shape and inverts it. - energy_generator: - deliver: Deliver - toGenerateEnergy: For - default: - name: Energy Generator - description: Generates energy by consuming shapes. - wire_crossings: - default: - name: Wire Splitter - description: Splits a energy wire into two. + name: Balancer + description: Multifunctional - Evenly distributes all inputs onto all outputs. merger: - name: Wire Merger - description: Merges two energy wires into one. - + 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. + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + 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. + logic_gate: + default: + name: AND Gate + 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") + 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") + or: + name: OR Gate + description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means + shape, color or boolean "1") + transistor: + default: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "1"). + mirrored: + name: Transistor + description: Forwards the bottom input if the side input is truthy (a shape, + color or "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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or 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). + analyzer: + default: + name: Shape Analyzer + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: Compare + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: Virtual Cutter + description: Virtually cuts the shape into two halves. + rotater: + name: Virtual Rotater + description: Virtually rotates the shape, both clockwise and counter-clockwise. + unstacker: + name: Virtual Unstacker + description: Virtually extracts the topmost layer to the right output and the + remaining ones to the left. + stacker: + name: Virtual Stacker + description: Virtually stacks the right shape onto the left. + painter: + name: Virtual Painter + description: Virtually paints the shape from the bottom input with the shape on + the right input. + item_producer: + default: + name: Item Producer + description: Available in sandbox mode only, outputs the given signal from the + wires layer on the regular layer. storyRewards: - # Those are the rewards gained from completing the store 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度。 - reward_painter: title: 上色 - desc: >- - 恭喜!你解锁了上色机。开采一些颜色 (就像你开采图形一样) 将其在上色机中与图形结合来将图形上色!

PS:如果你患有色盲,可以在设置中启用色盲模式! - + desc: 恭喜!你解锁了上色机。开采一些颜色 (就像你开采图形一样) + 将其在上色机中与图形结合来将图形上色!

PS:如果你患有色盲,可以在设置中启用色盲模式! reward_mixer: title: 混合颜色 desc: 恭喜!你解锁了混色机。这个建筑使用加法混色将两种颜色混合起来。 - reward_stacker: title: 堆叠 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"键来选取这个变体。 - 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_splitter_compact: - title: 小型合流机 - desc: 恭喜!你解锁了平衡机的变体。它能够接受两个输入,合并成一个输出! - reward_cutter_quad: title: 四向切割机 desc: 恭喜!你解锁了切割机四向变体。它可以将输入的图形切成四块而不只是左右两块! - reward_painter_double: title: 双倍上色机 desc: 恭喜!你解锁了上色机双倍变体。它可以同时为两个图形上色,每次只消耗一份颜色! - - reward_painter_quad: - title: 四向上色机 - 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 键并拖动鼠标来选择一块区域,然后按C键复制。

粘贴并不是免费的,你需要使用蓝图图形来粘贴你的蓝图。蓝图图形是你刚刚交付的图形。 - - # Special reward, which is shown when there is no reward actually + desc: 你现在可以复制粘贴你的工厂的一部分了!按住 CTRL + 键并拖动鼠标来选择一块区域,然后按C键复制。

粘贴并不是免费的,你需要使用蓝图图形来粘贴你的蓝图。蓝图图形是你刚刚交付的图形。 no_reward: title: 下一关 - desc: >- - 这一关没有奖励,但是下一关有!

PS:你生产过的所有图形都会被用来升级建筑。 - + desc: 这一关没有奖励,但是下一关有!

+ PS:你生产过的所有图形都会被用来升级建筑。 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! + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: 设置 categories: general: 通用 userInterface: 用户界面 advanced: 高级 - + performance: Performance versionBadges: - dev: 开发版本 # Development - staging: 预览版本 # Staging - prod: 正式版本 # Production + dev: 开发版本 + staging: 预览版本 + prod: 正式版本 buildDate: 于编译 - labels: uiScale: title: 用户界面大小 - description: >- - 改变用户界面大小。用户界面会随着设备分辨率缩放,这个设置决定缩放比例。 + description: 改变用户界面大小。用户界面会随着设备分辨率缩放,这个设置决定缩放比例。 scales: super_small: 最小 small: 较小 regular: 正常 large: 较大 huge: 最大 - scrollWheelSensitivity: title: 缩放灵敏度 - description: >- - 改变缩放灵敏度(鼠标滚轮或者触控板)。 + description: 改变缩放灵敏度(鼠标滚轮或者触控板)。 sensitivity: super_slow: 最低 slow: 较低 regular: 正常 fast: 较高 super_fast: 最高 - language: title: 语言 - description: >- - 改变语言。所有的翻译皆由玩家提供,且有可能正在施工中! - + description: 改变语言。所有的翻译皆由玩家提供,且有可能正在施工中! fullscreen: title: 全屏 - description: >- - 全屏以获得更好的游戏体验。仅在独立版中可用。 - + description: 全屏以获得更好的游戏体验。仅在独立版中可用。 soundsMuted: title: 关闭音效 - description: >- - 关闭所有音效。 - + description: 关闭所有音效。 musicMuted: title: 关闭音乐 - description: >- - 关闭所有音乐。 - + description: 关闭所有音乐。 theme: title: 界面主题 - description: >- - 选择界面主题(深色或浅色)。 - + description: 选择界面主题(深色或浅色)。 themes: dark: 深色 light: 浅色 - refreshRate: title: 模拟频率、刷新频率 - description: >- - 如果你的显示器是 144Hz 的,请在这里更改刷新频率,这样游戏可以正确地根据你的屏幕进行模拟。但是如果你的电脑性能不佳,提高刷新频率可能降低帧数。 - # description: >- - # If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow. - + description: 如果你的显示器是 144Hz + 的,请在这里更改刷新频率,这样游戏可以正确地根据你的屏幕进行模拟。但是如果你的电脑性能不佳,提高刷新频率可能降低帧数。 alwaysMultiplace: title: 多重放置 - description: >- - 开启这个选项之后放下建筑将不会取消建筑选择。等同于一直按下 SHIFT 键。 - # description: >- - # If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. - + description: 开启这个选项之后放下建筑将不会取消建筑选择。等同于一直按下 SHIFT 键。 offerHints: title: 提示与教程 - description: >- - 是否显示提示、教程以及一些其他的帮助理解游戏的 UI 元素。 - # description: >- - # Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game. - + description: 是否显示提示、教程以及一些其他的帮助理解游戏的 UI 元素。 movementSpeed: title: 移动速度 description: 改变摄像头移动速度 @@ -757,21 +717,15 @@ settings: fast: 较快 super_fast: 非常快 extremely_fast: 最快 - enableTunnelSmartplace: title: 智能隧道放置 - description: >- - 启用后,放置隧道时会将多余的传送带移除。 - 此外,拖动隧道可以快速铺设隧道,以及移除不必要的隧道。 + description: 启用后,放置隧道时会将多余的传送带移除。 此外,拖动隧道可以快速铺设隧道,以及移除不必要的隧道。 vignette: title: 晕映 - description: >- - 启用晕映,将屏幕角落里的颜色变深,更容易阅读文本。 - + description: 启用晕映,将屏幕角落里的颜色变深,更容易阅读文本。 autosaveInterval: title: 自动保存间隔 - description: >- - 在这里控制你的游戏多长时间保存一次,或者完全关闭这个功能。 + description: 在这里控制你的游戏多长时间保存一次,或者完全关闭这个功能。 intervals: one_minute: 1分钟 two_minutes: 2分钟 @@ -781,30 +735,71 @@ settings: disabled: 关闭 compactBuildingInfo: title: 精简建筑信息 - description: >- - 缩小建筑信息展示框。如果打开,放置建筑时建筑将不再显示建筑说明和图片,只显示建筑速度或其他数据。 + description: 缩小建筑信息展示框。如果打开,放置建筑时建筑将不再显示建筑说明和图片,只显示建筑速度或其他数据。 disableCutDeleteWarnings: title: 关闭剪切/删除警告 - description: >- - 如果打开,将不再在剪切或者删除100+建筑时显示警告信息。 - + description: 如果打开,将不再在剪切或者删除100+建筑时显示警告信息。 enableColorBlindHelper: title: 色盲模式 description: 提供一些分辨颜色的工具。目前当鼠标移至颜色资源上方时,屏幕上方会显示颜色名称。 rotationByBuilding: title: 记忆建筑方向 - description: >- - 每一类建筑都会记住各自上一次的旋转方向。如果你经常在不同建筑类型之间切换,这个设置会让游戏更加舒适。 - + description: 每一类建筑都会记住各自上一次的旋转方向。如果你经常在不同建筑类型之间切换,这个设置会让游戏更加舒适。 + soundVolume: + title: Sound Volume + description: Set the volume for sound effects + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: 按键设置 - hint: >- - 提示:使用 CTRL、SHIFT、ALT!这些建在放置建筑时有不同的效果。 - # hint: >- - # Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options. - + hint: 提示:使用 CTRL、SHIFT、ALT!这些建在放置建筑时有不同的效果。 resetKeybindings: 重置按键设置 - categoryLabels: general: 通用 ingame: 游戏 @@ -813,7 +808,6 @@ keybindings: massSelect: 批量选择 buildings: 建筑快捷键 placementModifiers: 放置建筑修饰键 - mappings: confirm: 确认 back: 返回 @@ -822,44 +816,30 @@ keybindings: mapMoveDown: 下 mapMoveLeft: 左 centerMap: 回到基地 - # confirm: Confirm - # back: Back - # mapMoveUp: Move Up - # mapMoveRight: Move Right - # mapMoveDown: Move Down - # mapMoveLeft: Move Left - # centerMap: Center Map - mapZoomIn: 放大 mapZoomOut: 缩小 createMarker: 创建地图标记 - menuOpenShop: 升级菜单 menuOpenStats: 统计菜单 - toggleHud: 开关HUD toggleFPSInfo: 开关帧数与调试信息 - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: 传送带 + underground_belt: 隧道 + miner: 开采机 + cutter: 切割机 + rotater: 旋转机 + stacker: 堆叠机 + mixer: 混色机 + painter: 上色机 + trash: 垃圾桶 rotateWhilePlacing: 顺时针旋转 - rotateInverseModifier: >- - 修饰键: 改为逆时针旋转 + rotateInverseModifier: "修饰键: 改为逆时针旋转" cycleBuildingVariants: 选择建筑变体 confirmMassDelete: 确认批量删除 cycleBuildings: 选择建筑 massSelectStart: 开始批量选择 massSelectSelectMultiple: 选择多个区域 massSelectCopy: 复制 - placementDisableAutoOrientation: 取消自动定向 placeMultiple: 继续放置 placeInverse: 反向放置传送带 @@ -867,44 +847,108 @@ keybindings: massSelectCut: 剪切 exportScreenshot: 导出截图 mapMoveFaster: 快速移动 - lockBeltDirection: 启用传送带规划 - switchDirectionLockSide: "规划器:换边" + switchDirectionLockSide: 规划器:换边 pipette: 选取器 menuClose: Close Menu switchLayers: Switch layers - advanced_processor: Color Inverter - energy_generator: Energy Generator 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: 关于游戏 - # title: About this Game body: >- - 本游戏由 Tobias Springer(我)开发,并且已经开源。

+ 本游戏由 Tobias + Springer(我)开发,并且已经开源。

- 如果你想参与开发,请查看 shapez.io on github

+ 如果你想参与开发,请查看 shapez.io on github

- 这个游戏的开发少不了热情的 Discord 社区。请加入我们的 Discord 服务器

+ 这个游戏的开发少不了热情的 Discord 社区。请加入我们的 Discord 服务器

- 本游戏的音乐由 Peppsen 制作——他是个很棒的伙伴。

- - 最后,我想感谢我最好的朋友 Niklas ——如果没有与他的异星工厂(factorio)的游戏体验,shapez.io将不会存在。 + 本游戏的音乐由 Peppsen 制作——他是个很棒的伙伴。

+ 最后,我想感谢我最好的朋友 Niklas ——如果没有与他的异星工厂(factorio)的游戏体验,shapez.io将不会存在。 changelog: title: 版本日志 - demo: features: - restoringGames: 恢复存档 #中? - importingGames: 倒入存档 #中? + restoringGames: 恢复存档 + importingGames: 倒入存档 oneGameLimit: 最多一个存档 customizeKeybindings: 按键设置 - # customizeKeybindings: Customizing Keybindings 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! + - 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. diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index 65aef6fa..03690ecd 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -1,139 +1,55 @@ -# -# GAME TRANSLATIONS -# -# Contributing: -# -# If you want to contribute, please make a pull request on this respository -# and I will have a look. -# -# Placeholders: -# -# Do *not* replace placeholders! Placeholders have a special syntax like -# `Hotkey: `. They are encapsulated within angle brackets. The correct -# translation for this one in German for example would be: `Taste: ` (notice -# how the placeholder stayed '' and was not replaced!) -# -# Adding a new language: -# -# If you want to add a new language, ask me in the Discord and I will setup -# the basic structure so the game also detects it. -# - -# Chinese (traditional) translation dictionary. TODO: better names for the buildings. -# Standalone:獨立版 -# Demo:演示版 -# Level:關 -# Shape:圖形 -# tile:格子 -# Keybind:按鍵設置 -# Menu:主選單 -# Center/Hub:基地 -# Upgrade:升級 -# Efficiency:效率 -# Building:建築 -# Variant:建築變體 -# Belt: 傳送帶 -# Balancer:平衡機 -# Compact Balancer:小型合流機 -# Merger:合併機 -# Tunnel:隧道 -# Extractor:開採機 -# Cutter:切割機 -# Rotate:旋轉機 -# Stacker:混合機 -# Color Mixer:混色機 -# Painter:上色機 -# Trash:垃圾桶 - ---- steamPage: - # This is the short text appearing on the steam page shortText: shapez.io 是一款在一個無邊際的地圖上建造工廠、自動化生產與組合愈加複雜圖形的遊戲。 - # shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map. - - # 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] - 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] - - discordLink: Official Discord - Chat with me! - + discordLinkShort: 官方 Discord 伺服器 + intro: |- + 你喜歡自動化生產的遊戲類型嗎?那你來對地方了! + Shapez.io 是一款建造工廠、自動化生產與組合圖形的休閒遊戲。 + 每當玩家不斷晉級,形狀會越來越複雜,你的工廠將在一個無邊際的地圖上不斷擴展。 + 除此之外,你也必須不斷累加你的生產量來達到升級的需求,達成目標的方法無他,只有不段地擴張! + 遊戲初期只需要組合特定圖形,接著玩家會被要求幫圖形上色,有時甚至需要先混色才能達到目標。 + 玩家可以在 Steam 購買本游戲的單機版,如果還在猶豫,也可以到 shapez.io 先免費試玩再決定! + title_advantages: 單機版優點 + advantages: + - 12 個新關卡 (總共有26關) + - 18 個新建築 幫助玩家自動化整個工廠! + - 20 個升級 讓遊玩時間更久! + - 電路更新 帶給玩家新次元體驗! + - 深色模式! + - 無限存檔 + - 無限標記 + - 支持我! ❤️ + title_future: 未來計劃 + 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: 錯誤 - - # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " - - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" - decimalSeparator: "." - - # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. + decimalSeparator: . suffix: thousands: 千 millions: 百萬 billions: 十億 trillions: 兆 - - # Shown for infinitely big numbers infinite: 無限 - time: - # Used for formatting past time dates oneSecondAgo: 1秒前 xSecondsAgo: 秒前 oneMinuteAgo: 1分鐘前 @@ -142,14 +58,10 @@ global: xHoursAgo: 小時前 oneDayAgo: 1天前 xDaysAgo: 天前 - - # Short formats for times, e.g. '5h 23m' secondsShort: 秒 minutesAndSecondsShort: 秒 hoursAndMinutesShort: 小時 秒 - xMinutes: 分鐘 - keys: tab: TAB control: CTRL @@ -157,33 +69,24 @@ global: escape: ESC shift: SHIFT space: 空格 - demoBanners: - # This is the "advertisement" shown in the main menu and other various places title: 演示版 - intro: >- - 獲取獨立版以解鎖所有功能! - + intro: 獲取單機版以解鎖所有功能! mainMenu: play: 開始遊戲 changelog: 更新日誌 importSavegame: 導入 openSourceHint: 本遊戲已開源! - discordLink: 官方Discord伺服器 + discordLink: 官方 Discord 伺服器 helpTranslate: 幫助我們翻譯! - - # This is shown when using firefox and other browsers which are not supported. - browserWarning: >- - 很抱歉, 本遊戲在當前瀏覽器上可能運行緩慢! 使用chrome或者獲取獨立版以得到更好的體驗。 - - savegameLevel: Level + browserWarning: 很抱歉, 本遊戲在當前瀏覽器上可能運行緩慢! 使用chrome或者獲取單機版以得到更好的體驗。 + savegameLevel: 級 savegameLevelUnknown: 未知關卡 - continue: 繼續 newGame: 新遊戲 madeBy: 作者: subreddit: Reddit - + savegameUnnamed: 未命名 dialogs: buttons: ok: 確認 @@ -192,116 +95,88 @@ dialogs: later: 之後 restart: 重啟 reset: 重置 - getStandalone: 獲得獨立版 + getStandalone: 獲得單機版 deleteGame: 我知道我在做什麼 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: >- - 你需要重啟遊戲以套用變更的設置。 - + text: 你需要重啟遊戲以套用變更的設置。 editKeybinding: title: 更改按鍵設置 desc: 請按下你想要使用的按鍵,或者按下ESC鍵來取消設置。 - resetKeybindingsConfirmation: title: 重置所有按鍵 desc: 這將會重置所有按鍵,請確認。 - keybindingsResetOk: title: 重置了所有按鍵 desc: 成功重置了所有按鍵! - featureRestriction: title: 演示版 - desc: 你嘗試使用了 功能。該功能在演示版中不可用。請考慮購買獨立版以獲得更好的體驗。 - + desc: 你嘗試使用了 功能。該功能在演示版中不可用。請考慮購買單機版以獲得更好的體驗。 oneSavegameLimit: title: 存檔數量限制 - desc: 演示版中只能保存一份存檔。請刪除舊存檔或者獲取獨立版! - + desc: 演示版中只能保存一份存檔。請刪除舊存檔或者獲取單機版! updateSummary: title: 更新了! - desc: >- - 以下為自上次遊戲以來更新的內容: - + desc: "以下為自上次遊戲以來更新的內容:" upgradesIntroduction: title: 解鎖建築升級 - desc: >- - 你生產過的所有圖形可以被用來升級建築。不要銷毀你之前建造的工廠! - 升級選單在屏幕右上角。 - + desc: 你生產過的所有圖形可以被用來升級建築。不要銷毀你之前建造的工廠! 升級選單在屏幕右上角。 massDeleteConfirm: title: 確認刪除 - desc: >- - 你將要刪除很多建築,準確來說有幢!你確定要這麼做嗎? - + desc: 你將要刪除很多建築,準確來說有幢!你確定要這麼做嗎? blueprintsNotUnlocked: title: 未解鎖 - desc: >- - 你還沒有解鎖藍圖功能!完成更多的關卡來解鎖藍圖。 - + desc: 你還沒有解鎖藍圖功能!完成更多的關卡來解鎖藍圖。 keybindingsIntroduction: title: 實用按鍵 - desc: >- - 這個遊戲有很多能幫助搭建工廠的使用按鍵。 - 以下是其中的一些,記得在按鍵設置中查看其他的!

- CTRL + 拖動:選擇區域以復製或刪除。
- SHIFT: 按住以放置多個。
- ALT: 反向放置傳送帶。
- + desc: "這個遊戲有很多能幫助搭建工廠的使用按鍵。 以下是其中的一些,記得在按鍵設置中查看其他的!

+ CTRL + 拖動:選擇區域以復製或刪除。
SHIFT: 按住以放置多個。
ALT: 反向放置傳送帶。
" createMarker: title: 創建標記 - desc: 給地圖標記起一個的名字。你可以在名字中加入一個短代碼以加入圖形。 (你可以在這裡生成短代碼。) - titleEdit: Edit Marker - + desc: 給地圖標記起一個的名字。 + 你可以在名字中加入一個短代碼以加入圖形。 + (你可以在 here 生成短代碼。) + titleEdit: 修改標記 markerDemoLimit: - desc: 在演示版中你只能創建兩個地圖標記。請獲取獨立版以創建更多標記。 + desc: 在演示版中你只能創建兩個地圖標記。請獲取單機版以創建更多標記。 massCutConfirm: title: 確認剪下 - desc: >- - 你將要剪下很多建築,準確來說有幢!你確定要這麼做嗎? - + desc: 你將要剪下很多建築,準確來說有幢!你確定要這麼做嗎? exportScreenshotWarning: title: 工廠截圖 - desc: >- - 你將要匯出你的工廠的截圖。如果你的基地很大,截圖過程將會很慢,甚至有可能導致遊戲當掉! - + 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: 重新命名存檔 + desc: 你可以在這裡重新命名存檔 ingame: - # This is shown in the top left corner and displays useful keybindings in - # every situation keybindingsOverlay: moveMap: 移動 selectBuildings: 選擇區域 @@ -321,19 +196,10 @@ ingame: copySelection: 複製選取 clearSelection: 清空選取 pipette: 吸附 - switchLayers: Switch layers - - # Everything related to placing buildings (I.e. as soon as you selected a building - # from the toolbar) + switchLayers: 切換層 buildingPlacement: - # Buildings can have different variants which are unlocked at later levels, - # and this is the hint shown when there are multiple variants available. cycleBuildingVariants: 按鍵以選擇建築變體. - - # Shows the hotkey in the ui, e.g. "Hotkey: Q" - hotkeyLabel: >- - 快捷鍵: - + hotkeyLabel: "快捷鍵: " infoTexts: speed: 效率 range: 範圍 @@ -341,37 +207,21 @@ ingame: oneItemPerSecond: 1個/秒 itemsPerSecond: 個/秒 itemsPerSecondDouble: (2倍) - tiles: 格 - - # The notification when completing a level levelCompleteNotification: - # is replaced by the actual level, so this gets 'Level 03' for example. - levelTitle: Level + levelTitle: 第級 completed: 完成 unlockText: 解鎖! buttonNextLevel: 下一關 - - # Notifications on the lower right notifications: newUpgrade: 有新的更新啦! gameSaved: 遊戲已保存。 - - # The "Upgrades" window + freeplayLevelComplete: 已完成第級! shop: title: 建築升級 buttonUnlock: 升級 - - # Gets replaced to e.g. "Tier IX" tier: 級 - - # The roman number for each tier - # Chinese translation: Chinese characters for each tier - tierLabels: [壹, 貳, 叁, 肆, 伍, 陸, 柒, 捌, 玖, 拾] - maximumLevel: 最高級(倍效率) - - # The "Statistics" window statistics: title: 統計資訊 dataSources: @@ -385,51 +235,34 @@ ingame: title: 送達 description: 顯示圖形送達基地的速度。 noShapesProduced: 你還沒有生產任何圖形。 - - # Displays the shapes per minute, e.g. '523 / m' - shapesPerMinute: 個/分鐘 - - # Settings menu, when you press "ESC" + shapesDisplayUnits: + second: / 秒 + minute: / 分 + hour: / 時 settingsMenu: playtime: 遊戲時間 - buildingsPlaced: 建築數量 beltsPlaced: 傳送帶數量 - - buttons: - continue: 繼續 - settings: 設置 - menu: 回到主選單 - - # Bottom left tutorial hints tutorialHints: title: 需要幫助? showHint: 顯示 hideHint: 關閉 - - # When placing a blueprint blueprintPlacer: cost: 需要 - - # Map markers waypoints: waypoints: 地圖標記 hub: 基地 - description: 滑鼠左鍵按標記跳轉到它,按右鍵將其刪除。

從當前視圖創建一個標記,或按右鍵創建一個標記。 所選位置的標記。 + description: 在標記上按左鍵以快速移動到標記區域,在標記上按右鍵以刪除該標記。

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

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

+ 1_2_conveyor: 用傳送帶將你的開採機連接到基地上! +

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

提示:按住SHIFT鍵來放置多個開採機,用R鍵旋轉它們。 - colors: red: 紅 green: 綠 @@ -444,8 +277,42 @@ ingame: title: 層 empty: 空 copyKey: Copy Key - -# All shop upgrades + connectedMiners: + one_miner: 1 個開採機 + n_miners: 個開採機 + limited_items: Limited to + watermark: + title: Demo version + desc: Click here to see the Steam version advantages! + get_on_steam: 在 Steam 上取得 + standaloneAdvantages: + title: 取得單機版! + no_thanks: 不用了,謝謝! + points: + levels: + title: 12 個新關卡 + desc: 總共26關! + buildings: + title: 18 個新建築 + desc: 邁向完全自動化! + savegames: + title: ∞ 個存檔 + desc: 隨心所欲! + upgrades: + title: 20 個等級 + desc: 試玩版只有 5 個。 + markers: + title: ∞ 個地圖標記 + desc: 再也不會迷失在一望無際的地圖裡! + wires: + title: 電路 + desc: 全新次元! + darkmode: + title: 深色模式 + desc: 要保養眼球~ + support: + title: 支持我 + desc: 遊戲使我利用閒暇時間做的! shopUpgrades: belt: name: 傳送帶、平衡機、隧道 @@ -459,291 +326,369 @@ shopUpgrades: painting: name: 混色、上色 description: 效率 倍 → 倍 - -# Buildings and their name / description buildings: belt: default: - name: &belt 傳送帶 + name: 傳送帶 description: 運送物品,按住並拖動來放置多個。 - - miner: # Internal name for the Extractor + miner: default: - name: &miner 開採機 + name: 開採機 description: 在圖形或者顏色上放置來開採他們。 - chainable: name: 鏈式開採機 description: 在圖形或者顏色上放置來開採他們。可以被鏈接在一起。 - - underground_belt: # Internal name for the Tunnel + underground_belt: default: - name: &underground_belt 隧道 + name: 隧道 description: 可以從其他傳送帶或建築底下方運送物品。 - tier2: name: 貳級隧道 description: 可以從其他傳送帶或建築底下方運送物品。 - - splitter: # Internal name for the Balancer - default: - name: &splitter 平衡機 - description: 多功能——將所有輸入平均分配到所有輸出。 - - compact: - name: 小型合流機 - description: 把兩個輸入合併到一個輸出上。 - - compact-inverse: - name: 小型合流機 (反轉) - description: 把兩個輸入合併到一個輸出上。 - cutter: default: - name: &cutter 切割機 + name: 切割機 description: 將圖形從上到下切開並輸出。 如果你只需要其中一半,記得把另一半銷毀掉,否則切割機會停止運作! quad: name: 切割機(四分) description: 將輸入的圖形切成四塊。 如果你只需要其中一塊,記得把其他的銷毀掉,否則切割機會停止運作! - rotater: default: - name: &rotater 旋轉機 + name: 旋轉機 description: 將圖形順時針旋轉90度。 ccw: name: 旋轉機(逆時針) description: 將圖形逆時針旋轉90度。 - fl: - name: Rotate (180) - description: Rotates shapes by 180 degrees. - + rotate180: + name: 旋轉機 (180度) + description: 將圖形旋轉180度。 stacker: default: - name: &stacker 混合機 + name: 混合機 description: 將輸入的圖形拼貼在一起。如果不能被直接拼貼,右邊的圖形會被疊在左邊的圖形上面. - mixer: default: - name: &mixer 混色機 + name: 混色機 description: 將兩個顏色加在一起。 - painter: default: - name: &painter 上色機 - description: &painter_desc 將整個圖形塗上輸入的顏色。 + name: 上色機 + description: 將整個圖形塗上輸入的顏色。 double: name: 上色機(雙倍) description: 同時為兩個輸入的圖形上色,每次上色只消耗一份顏色塗料。 quad: name: 上色機(四向) - description: 為圖形的四個角塗上不同的顏色。 + description: 分別為圖形的四個部分上色。 只有 truthy signal 的格子會被上色。 mirrored: - name: *painter - description: *painter_desc - + name: 上色機 + description: 將整個圖形塗上輸入的顏色。 trash: default: - name: &trash 垃圾桶 + name: 垃圾桶 description: 從所有四個方向上輸入物品並永遠銷毀它們。 - - storage: - name: 倉庫 - description: 儲存多餘的物品,有一定儲存上限。可以被用來作為溢流門。最多五千個。 hub: deliver: 交付 toUnlock: 來解鎖 levelShortcut: LVL + endOfDemo: 試玩結束 wire: default: - name: Energy Wire - description: Allows you to transport energy. - advanced_processor: + name: 能量電線 + description: 傳輸能量。 + second: + name: 電線 + description: 傳輸訊號,訊號可以是物件,顏色或布林值(0或1)。 不同顏色的電線無法互相連接。 + balancer: default: - name: Color Inverter - description: Accepts a color or shape and inverts it. - energy_generator: - deliver: Deliver - toGenerateEnergy: For - default: - name: Energy Generator - description: Generates energy by consuming shapes. - wire_crossings: - default: - name: Wire Splitter - description: Splits a energy wire into two. + name: 平衡機 + description: 多功能——將所有輸入平均分配到所有輸出。 merger: - name: Wire Merger - description: Merges two energy wires into one. - + name: 合流機(右) + description: 將兩個傳送帶整合成一個。 + merger-inverse: + name: 合流機(左) + description: 將兩個傳送帶整合成一個。 + splitter: + name: 分流機(右) + description: 將單個傳送帶分流成兩個。 + splitter-inverse: + name: 分流機(左) + description: 將單個傳送帶分流成兩個。 + storage: + default: + name: 倉庫 + description: 儲存多餘的物品,有一定儲存上限。優先從左側輸出,可以被用來作為溢流門。 + wire_tunnel: + default: + name: Wire Crossing + description: Allows to cross two wires without connecting them. + constant_signal: + default: + name: Constant Signal + description: Emits a constant signal, which can be either a shape, color or + boolean (1 / 0). + lever: + default: + name: 信號切換器 + 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. + logic_gate: + default: + name: AND 邏輯閘 + description: 當輸入均為「真」時,輸出才為1。 (「真」值代表:形狀正確、顏色正確或布林值為1) + not: + name: NOT 邏輯閘 + description: 當輸入之ㄧ為「假」時,輸出才為1。 (「假」值代表:形狀不正確、顏色不正確或布林值為0) + xor: + name: XOR 邏輯閘 + description: 當輸入均為「假」時,輸出才為1。 (「假」值代表:形狀不正確、顏色不正確或布林值為0) + or: + name: OR 邏輯閘 + description: 當輸入之ㄧ為「真」時,輸出才為1。 (「真」值代表:形狀正確、顏色正確或布林值為1) + transistor: + default: + name: 電晶體 + description: 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 + (「真」值代表:形狀正確、顏色正確或布林值為1) + mirrored: + 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. + display: + default: + name: Display + description: Connect a signal to show it on the display - It can be a shape, + color or boolean. + reader: + default: + name: 傳送帶讀取機 + description: Allows to measure the average belt throughput. Outputs the last + read item on the wires layer (once unlocked). + analyzer: + default: + name: 形狀分析機 + description: Analyzes the top right quadrant of the lowest layer of the shape + and returns its shape and color. + comparator: + default: + name: 比較機 + description: Returns boolean "1" if both signals are exactly equal. Can compare + shapes, items and booleans. + virtual_processor: + default: + name: 虛擬切割機 + description: 虛擬地將圖形從上到下切開並輸出。 + rotater: + name: 虛擬旋轉機 + description: 虛擬地將圖形順時針或逆時針旋轉。 + unstacker: + name: 虛擬提取機 + description: 虛擬地提取最上層的圖形到右方輸出,剩下的圖形由左方輸出。 + stacker: + name: 虛擬堆疊機 + description: 虛擬地將輸入的圖形拼貼在一起。如果不能被直接拼貼,右邊的圖形會被疊在左邊的圖形上面。 + painter: + name: 虛擬上色機 + description: 虛擬地將整個圖形塗上輸入的顏色。 + item_producer: + default: + name: 物品製造機 + description: 沙盒模式專有,將電路層的輸入轉化成一般層的輸出。 storyRewards: - # Those are the rewards gained from completing the store reward_cutter_and_trash: title: 切割圖形 - desc: 切割機已解鎖。不論切割機的方向,它都會把圖形垂直地切成兩半。

記得把不需要的部分處理掉,否則這個這個建築會停止運作。為此我給你準備了垃圾桶,它會把所有放進去的物品銷毀掉。 - + desc: 切割機已解鎖。不論切割機的方向,它都會把圖形垂直地切成兩半。 +

記得把不需要的部分處理掉,否則這個這個建築會停止運作。 + 為此我給你準備了垃圾桶,它會把所有放進去的物品銷毀掉。 reward_rotater: title: 順時針旋轉 - desc: 旋轉機已解鎖。它會順時針旋轉輸入的圖形90度。 - + desc: 順時針旋轉機已解鎖。它會順時針旋轉輸入的圖形90度。 reward_painter: title: 上色 - desc: >- - 上色機已解鎖。開採一些顏色,用上色機把顏色和圖形混合,就可以為圖形著色。

備註:如果你是色盲,設置中有色盲模式可以選。 - + desc: 上色機已解鎖。開採一些顏色,用上色機把顏色和圖形混合,就可以為圖形著色。

備註:如果你是色盲,設置中有色盲模式可以選。 reward_mixer: title: 混色 desc: 混色器已解鎖-在此建築物中使用附加混合結合兩種顏色! - reward_stacker: title: 混合 desc: 混合機已解鎖。如果沒有重疊的部分,混合機會嘗試把兩個輸入的圖形拼貼在一起。如果有重疊的部分,右邊的輸入會被到左邊的輸入上方! - reward_splitter: - title: 分離/合併 - desc: 平衡機已解鎖。在大型工廠中,平衡機負責合併或分離多個傳送帶上的物品。

- + title: 分流 + 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: 逆時針旋轉機已解鎖。它會逆時針旋轉輸入的圖形90度。 + 逆時針旋轉機是順時針旋轉機的變體。選擇「順時針旋轉機」並按「T」來切換變體就能創建。 reward_miner_chainable: - title: 鏈式開採機 - desc: 鏈式開採機變體已解鎖。它是開採機的一個變體。它可以將開採出來的資源傳遞給其他的開採機,使得資源提取更加高效! - + title: 鏈式開採 + desc: "鏈式開採機變體已解鎖。它是開採機的一個變體。 + 它可以將開採出來的資源傳遞給其他的開採機,使得資源提取更加高效!

+ PS: 工具列中舊的開採機已被取代。" reward_underground_belt_tier_2: title: 貳級隧道 desc: 貳級隧道變體已解鎖。這個隧道有更長的傳輸距離。你還可以混用不同的隧道變體! - - reward_splitter_compact: - title: 小型合流機 - desc: >- - 小型合流機變體已解鎖。它可以把兩個輸入合併到一個輸出上。 - reward_cutter_quad: - title: 四分切割機 - desc: 您已解鎖了四分切割機的變體-它允許您將形狀直接切割為四個部分,而不是兩個! - + title: 四分切割 + desc: 您已解鎖了切割機的變體:四分切割機。 + 它允許您將形狀直接切割為四個部分,而不是兩個! reward_painter_double: - title: 雙倍上色機 - desc: 您已經解鎖了雙倍上色機的變體-它可以作為常規畫家使用,但一次只能處理兩個形狀,而只消耗一種顏色而不是兩種顏色! - - reward_painter_quad: - title: 四向上色機 - desc: 上色機四向變體已解鎖。它可以在一個圖形的四個角上塗不同的顏色! - + title: 雙倍上色 + desc: 您已經解鎖了上色機的變體:雙倍上色機。 + 它的運作方式跟上色機類似,但一次能處理兩個形狀,而且只消耗一種顏色而不是兩種顏色! reward_storage: title: 倉庫 - desc: 倉庫變體已解鎖。它可以暫時儲存一些材料,有容量上限。 - + desc: 倉庫 已解鎖: + 可以儲存多餘的物品,有一定儲存上限。

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

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

+ 基地會在電路層輸出他需要的形狀,你只需要分析這些訊號,然後依照需求自動調整你的工廠。 reward_blueprints: title: 藍圖 - desc: 現在,您可以複製並貼上工廠的各個部分! 選擇一個區域(按住CTRL,然後用游標拖動),然後按'C'將其複制。

複製不是免費的,您需要用藍圖 形狀來支付! (您剛交付的那些)。 - - # Special reward, which is shown when there is no reward actually + desc: 現在,你可以複製並貼上工廠的各個部分! + 選擇一個區域(按住CTRL,然後用游標拖動),然後按「C」將其複制。

+ 複製不是免費的,你需要用藍圖形狀來支付!(剛交付的那些)。 no_reward: title: 下一關 - desc: >- - 這一關沒有獎勵,但是下一關有!

PS: 你生產過的所有圖形都會被用來升級建築。 - + desc: "這一關沒有獎勵,但是下一關有!

PS: + 你生產過的所有圖形都會被用來升級建築。" no_reward_freeplay: title: 下一關 - desc: >- - 恭喜你!另外,我們已經計劃在獨立版中加入更多內容! - + desc: 恭喜你!另外,我們已經計劃在單機版中加入更多內容! + reward_balancer: + title: 平衡物流 + desc: 平衡機已解鎖。在大型工廠中,平衡機負責合流或分流多個傳送帶上的物品。 + reward_merger: + title: 合流 + 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 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). + 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. + reward_demo_end: + title: End of Demo + desc: You have reached the end of the demo version! settings: title: 設置 categories: general: General userInterface: User Interface advanced: Advanced - + performance: Performance versionBadges: - dev: 開發版本 # Development - staging: 預覽版本 # Staging - prod: 正式版本 # Production + dev: 開發版本 + staging: 預覽版本 + prod: 正式版本 buildDate: 於創建 - labels: uiScale: title: 用戶界面大小 - description: >- - 改變用戶界面大小。用戶界面會隨著設備分辨率縮放,這個設置決定縮放比例。 + description: 改變用戶界面大小。用戶界面會隨著設備分辨率縮放,這個設置決定縮放比例。 scales: super_small: 最小 small: 較小 regular: 正常 large: 較大 huge: 最大 - scrollWheelSensitivity: title: 縮放靈敏度 - description: >- - 改變縮放靈敏度(鼠標滾輪或者觸控板)。 + description: 改變縮放靈敏度(鼠標滾輪或者觸控板)。 sensitivity: super_slow: 最低 slow: 較低 regular: 正常 fast: 較高 super_fast: 最高 - language: title: 語言 - description: >- - 改變語言。所有的翻譯皆由玩家提供,且有可能正在施工中! - + description: 改變語言。所有的翻譯皆由玩家提供,且有可能正在施工中! fullscreen: title: 全螢幕 - description: >- - 全螢幕以獲得更好的遊戲體驗。僅在獨立版中可用。 - + description: 全螢幕以獲得更好的遊戲體驗。僅在單機版中可用。 soundsMuted: title: 關閉音效 - description: >- - 關閉所有音效。 - + description: 關閉所有音效。 musicMuted: title: 關閉音樂 - description: >- - 關閉所有音樂。 - + description: 關閉所有音樂。 theme: title: 界面主題 - description: >- - 選擇界面主題(深色或淺色)。 - + description: 選擇界面主題(深色或淺色)。 themes: dark: 深色 light: 淺色 - refreshRate: title: 模擬頻率、刷新頻率 - description: >- - 如果你的顯示器是144hz的,請在這裡更改刷新頻率,這樣遊戲可以正確地根據你的螢幕進行模擬。但是如果你的電腦性能不佳,提高刷新頻率可能降低幀數。 - # description: >- - # If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow. - + description: 如果你的顯示器是144hz的,請在這裡更改刷新頻率,這樣遊戲可以正確地根據你的螢幕進行模擬。但是如果你的電腦性能不佳,提高刷新頻率可能降低幀數。 alwaysMultiplace: title: 多重放置 - description: >- - 開啟這個選項之後放下建築將不會取消建築選擇。等同於一直按下SHIFT鍵。 - # description: >- - # If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently. - + description: 開啟這個選項之後放下建築將不會取消建築選擇。等同於一直按下SHIFT鍵。 offerHints: title: 提示與教程 - description: >- - 是否顯示提示、教程以及一些其他的幫助理解遊戲的UI元素。 - # description: >- - # Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game. - + description: 是否顯示提示、教程以及一些其他的幫助理解遊戲的UI元素。 movementSpeed: title: 移動速度 description: 改變攝像頭移動速度 @@ -754,21 +699,15 @@ settings: fast: 較快 super_fast: 非常快 extremely_fast: 最快 - enableTunnelSmartplace: title: 智能隧道放置 - description: >- - 啟用後,放置隧道時會將多餘的傳送帶移除。 - 此外,拖動隧道可以快速鋪設隧道,以及移除不必要的隧道。 + description: 啟用後,放置隧道時會將多餘的傳送帶移除。 此外,拖動隧道可以快速鋪設隧道,以及移除不必要的隧道。 vignette: title: 暈映 - description: >- - 啟用暈映,將屏幕角落裡的顏色變深,更容易閱讀文字。 - + description: 啟用暈映,將屏幕角落裡的顏色變深,更容易閱讀文字。 autosaveInterval: title: 自動刷新時間 - description: >- - 控制遊戲自動刷新的頻率。 您也可以禁用它。 + description: 控制遊戲自動刷新的頻率。 您也可以禁用它。 intervals: one_minute: 1分鐘 two_minutes: 2分鐘 @@ -778,31 +717,73 @@ settings: disabled: 停用 compactBuildingInfo: title: 省略建築信息 - description: >- + description: |- 通過顯示建築物的比率來縮短建築物的資訊框。 否則 顯示所有說明+圖像。 disableCutDeleteWarnings: title: 停用剪下/刪除的警告 - description: >- - 剪下/刪除超過100幢建築物時不顯示警告。 - + description: 剪下/刪除超過100幢建築物時不顯示警告。 enableColorBlindHelper: title: 色盲模式 description: 如果您是色盲者,啟用了這設定,就可以玩遊戲了。 - rotationByBuilding: title: 依建築類型旋轉 - description: >- - 每個建築類型,將會分別記住您最後一次使用的旋轉方向。 - 如果您常常切換不同類型的建築,這樣可能會更方便。 - + description: 每個建築類型,將會分別記住您最後一次使用的旋轉方向。 如果您常常切換不同類型的建築,這樣可能會更方便。 + soundVolume: + title: 音效 + description: 音效設定 + musicVolume: + 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! + disableTileGrid: + title: Disable Grid + description: Disabling the tile grid can help with the performance. This also + makes the game look cleaner! + 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. + lowQualityTextures: + title: Low quality textures (Ugly) + description: Uses low quality textures to save performance. This will make the + game look very ugly! + 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. + pickMinerOnPatch: + title: Pick miner on resource patch + description: Enabled by default, selects the miner if you use the pipette when + hovering a resource patch. + 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. + 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. + 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. + mapResourcesScale: + title: Map Resources Size + description: Controls the size of the shapes on the map overview (when zooming + out). + rangeSliderPercentage: % keybindings: title: 按鍵設置 - hint: >- - 提示:使用CTRL、SHIFT、ALT! 這些建在放置建築時有不同的效果。 - + hint: 提示:使用CTRL、SHIFT、ALT! 這些建在放置建築時有不同的效果。 resetKeybindings: 重置按鍵設置 - categoryLabels: general: 通用 ingame: 遊戲 @@ -811,7 +792,6 @@ keybindings: massSelect: 批量選擇 buildings: 建築快捷鍵 placementModifiers: 放置建築修飾鍵 - mappings: confirm: 確認 back: 返回 @@ -820,37 +800,30 @@ keybindings: mapMoveDown: 下 mapMoveLeft: 左 centerMap: 回到基地 - mapZoomIn: 放大 mapZoomOut: 縮小 createMarker: 創建地圖標記 - menuOpenShop: 升級選單 menuOpenStats: 統計選單 - toggleHud: 開關HUD toggleFPSInfo: 開關幀數與調試信息 - belt: *belt - splitter: *splitter - underground_belt: *underground_belt - miner: *miner - cutter: *cutter - rotater: *rotater - stacker: *stacker - mixer: *mixer - painter: *painter - trash: *trash - + belt: 傳送帶 + underground_belt: 隧道 + miner: 開採機 + cutter: 切割機 + rotater: 旋轉機 + stacker: 混合機 + mixer: 混色機 + painter: 上色機 + trash: 垃圾桶 rotateWhilePlacing: 順時針旋轉 - rotateInverseModifier: >- - 修飾鍵: 改為逆時針旋轉 + rotateInverseModifier: "修飾鍵: 改為逆時針旋轉" cycleBuildingVariants: 選擇建築變體 confirmMassDelete: 確認批量刪除 cycleBuildings: 選擇建築 massSelectStart: 開始批量選擇 massSelectSelectMultiple: 選擇多個區域 massSelectCopy: 複製 - placementDisableAutoOrientation: 取消自動定向 placeMultiple: 繼續放置 placeInverse: 反向放置傳送帶 @@ -858,44 +831,108 @@ keybindings: massSelectCut: 剪切 exportScreenshot: 匯出截圖 mapMoveFaster: 快速移動 - lockBeltDirection: 啟用傳送帶規劃 - switchDirectionLockSide: "規劃器:換邊" + switchDirectionLockSide: 規劃器:換邊 pipette: Pipette menuClose: Close Menu - switchLayers: Switch layers - advanced_processor: Color Inverter - energy_generator: Energy Generator + switchLayers: 更換層 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: 關於遊戲 - # title: About this Game body: >- - 本遊戲由Tobias Springer(我)開發,並且已經開源。

+ 本遊戲由Tobias + Springer(我)開發,並且已經開源。

- 如果你想參與開發,請查看shapez.io on github

+ 如果你想參與開發,請查看shapez.io on github

- 這個遊戲的開發少不了熱情的Discord社區。請加入我們的Discord 服務器

+ 這個遊戲的開發少不了熱情的Discord社區。請加入我們的Discord 服務器

- 本遊戲的音樂由Peppsen製作——他是個很棒的伙伴。

- - 最後,我想感謝我最好的朋友Niklas——如果沒有與他的異星工廠(factorio)的遊戲體驗,shapez.io將不會存在。 + 本遊戲的音樂由Peppsen製作——他是個很棒的伙伴。

+ 最後,我想感謝我最好的朋友Niklas——如果沒有與他的異星工廠(factorio)的遊戲體驗,shapez.io將不會存在。 changelog: title: 版本日誌 - demo: features: - restoringGames: 恢復存檔 #中? - importingGames: 匯入存檔 #中? + restoringGames: 恢復存檔 + importingGames: 匯入存檔 oneGameLimit: 最多一個存檔 customizeKeybindings: 按鍵設置 - # customizeKeybindings: Customizing Keybindings 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. diff --git a/yarn.lock b/yarn.lock index 7fd22674..da9d4625 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1000,6 +1000,103 @@ dependencies: core-js "^2.5.7" +"@octokit/auth-token@^2.4.0": + version "2.4.2" + resolved "https://registry.yarnpkg.com/@octokit/auth-token/-/auth-token-2.4.2.tgz#10d0ae979b100fa6b72fa0e8e63e27e6d0dbff8a" + integrity sha512-jE/lE/IKIz2v1+/P0u4fJqv0kYwXOTujKemJMFr6FeopsxlIK3+wKDCJGnysg81XID5TgZQbIfuJ5J0lnTiuyQ== + dependencies: + "@octokit/types" "^5.0.0" + +"@octokit/core@^3.0.0": + version "3.1.2" + resolved "https://registry.yarnpkg.com/@octokit/core/-/core-3.1.2.tgz#c937d5f9621b764573068fcd2e5defcc872fd9cc" + integrity sha512-AInOFULmwOa7+NFi9F8DlDkm5qtZVmDQayi7TUgChE3yeIGPq0Y+6cAEXPexQ3Ea+uZy66hKEazR7DJyU+4wfw== + dependencies: + "@octokit/auth-token" "^2.4.0" + "@octokit/graphql" "^4.3.1" + "@octokit/request" "^5.4.0" + "@octokit/types" "^5.0.0" + before-after-hook "^2.1.0" + universal-user-agent "^6.0.0" + +"@octokit/endpoint@^6.0.1": + version "6.0.6" + resolved "https://registry.yarnpkg.com/@octokit/endpoint/-/endpoint-6.0.6.tgz#4f09f2b468976b444742a1d5069f6fa45826d999" + integrity sha512-7Cc8olaCoL/mtquB7j/HTbPM+sY6Ebr4k2X2y4JoXpVKQ7r5xB4iGQE0IoO58wIPsUk4AzoT65AMEpymSbWTgQ== + dependencies: + "@octokit/types" "^5.0.0" + is-plain-object "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/graphql@^4.3.1": + version "4.5.6" + resolved "https://registry.yarnpkg.com/@octokit/graphql/-/graphql-4.5.6.tgz#708143ba15cf7c1879ed6188266e7f270be805d4" + integrity sha512-Rry+unqKTa3svswT2ZAuqenpLrzJd+JTv89LTeVa5UM/5OX8o4KTkPL7/1ABq4f/ZkELb0XEK/2IEoYwykcLXg== + dependencies: + "@octokit/request" "^5.3.0" + "@octokit/types" "^5.0.0" + universal-user-agent "^6.0.0" + +"@octokit/plugin-paginate-rest@^2.2.0": + version "2.4.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-paginate-rest/-/plugin-paginate-rest-2.4.0.tgz#92f951ddc8a1cd505353fa07650752ca25ed7e93" + integrity sha512-YT6Klz3LLH6/nNgi0pheJnUmTFW4kVnxGft+v8Itc41IIcjl7y1C8TatmKQBbCSuTSNFXO5pCENnqg6sjwpJhg== + dependencies: + "@octokit/types" "^5.5.0" + +"@octokit/plugin-request-log@^1.0.0": + version "1.0.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-request-log/-/plugin-request-log-1.0.0.tgz#eef87a431300f6148c39a7f75f8cfeb218b2547e" + integrity sha512-ywoxP68aOT3zHCLgWZgwUJatiENeHE7xJzYjfz8WI0goynp96wETBF+d95b8g/uL4QmS6owPVlaxiz3wyMAzcw== + +"@octokit/plugin-rest-endpoint-methods@4.2.0": + version "4.2.0" + resolved "https://registry.yarnpkg.com/@octokit/plugin-rest-endpoint-methods/-/plugin-rest-endpoint-methods-4.2.0.tgz#c5a0691b3aba5d8b4ef5dffd6af3649608f167ba" + integrity sha512-1/qn1q1C1hGz6W/iEDm9DoyNoG/xdFDt78E3eZ5hHeUfJTLJgyAMdj9chL/cNBHjcjd+FH5aO1x0VCqR2RE0mw== + dependencies: + "@octokit/types" "^5.5.0" + deprecation "^2.3.1" + +"@octokit/request-error@^2.0.0": + version "2.0.2" + resolved "https://registry.yarnpkg.com/@octokit/request-error/-/request-error-2.0.2.tgz#0e76b83f5d8fdda1db99027ea5f617c2e6ba9ed0" + integrity sha512-2BrmnvVSV1MXQvEkrb9zwzP0wXFNbPJij922kYBTLIlIafukrGOb+ABBT2+c6wZiuyWDH1K1zmjGQ0toN/wMWw== + dependencies: + "@octokit/types" "^5.0.1" + deprecation "^2.0.0" + once "^1.4.0" + +"@octokit/request@^5.3.0", "@octokit/request@^5.4.0": + version "5.4.9" + resolved "https://registry.yarnpkg.com/@octokit/request/-/request-5.4.9.tgz#0a46f11b82351b3416d3157261ad9b1558c43365" + integrity sha512-CzwVvRyimIM1h2n9pLVYfTDmX9m+KHSgCpqPsY8F1NdEK8IaWqXhSBXsdjOBFZSpEcxNEeg4p0UO9cQ8EnOCLA== + dependencies: + "@octokit/endpoint" "^6.0.1" + "@octokit/request-error" "^2.0.0" + "@octokit/types" "^5.0.0" + deprecation "^2.0.0" + is-plain-object "^5.0.0" + node-fetch "^2.6.1" + once "^1.4.0" + universal-user-agent "^6.0.0" + +"@octokit/rest@^18.0.6": + version "18.0.6" + resolved "https://registry.yarnpkg.com/@octokit/rest/-/rest-18.0.6.tgz#76c274f1a68f40741a131768ef483f041e7b98b6" + integrity sha512-ES4lZBKPJMX/yUoQjAZiyFjei9pJ4lTTfb9k7OtYoUzKPDLl/M8jiHqt6qeSauyU4eZGLw0sgP1WiQl9FYeM5w== + dependencies: + "@octokit/core" "^3.0.0" + "@octokit/plugin-paginate-rest" "^2.2.0" + "@octokit/plugin-request-log" "^1.0.0" + "@octokit/plugin-rest-endpoint-methods" "4.2.0" + +"@octokit/types@^5.0.0", "@octokit/types@^5.0.1", "@octokit/types@^5.5.0": + version "5.5.0" + resolved "https://registry.yarnpkg.com/@octokit/types/-/types-5.5.0.tgz#e5f06e8db21246ca102aa28444cdb13ae17a139b" + integrity sha512-UZ1pErDue6bZNjYOotCNveTXArOMZQFG6hKJfOnGnulVCMcVVi7YIIuuR4WfBhjo7zgpmzn/BkPDnUXtNx+PcQ== + dependencies: + "@types/node" ">= 8" + "@sindresorhus/is@^0.7.0": version "0.7.0" resolved "https://registry.yarnpkg.com/@sindresorhus/is/-/is-0.7.0.tgz#9a06f4f137ee84d7df0460c1fdb1135ffa6c50fd" @@ -1037,6 +1134,11 @@ resolved "https://registry.yarnpkg.com/@types/json-schema/-/json-schema-7.0.4.tgz#38fd73ddfd9b55abb1e1b2ed578cb55bd7b7d339" integrity sha512-8+KAKzEvSUdeo+kmqnKrqgeE+LcA0tjYWFY7RPProVYwnqDjukzO+3b6dLD56rYX5TdWejnEOLJYOIeh4CXKuA== +"@types/node@>= 8": + version "14.11.2" + resolved "https://registry.yarnpkg.com/@types/node/-/node-14.11.2.tgz#2de1ed6670439387da1c9f549a2ade2b0a799256" + integrity sha512-jiE3QIxJ8JLNcb1Ps6rDbysDhN4xa8DJJvuC9prr6w+1tIh+QAbYyNF3tyiZNLDBIuBCf4KEcV2UvQm/V60xfA== + "@types/q@^1.5.1": version "1.5.2" resolved "https://registry.yarnpkg.com/@types/q/-/q-1.5.2.tgz#690a1475b84f2a884fd07cd797c00f5f31356ea8" @@ -1589,6 +1691,11 @@ base@^0.11.1: mixin-deep "^1.2.0" pascalcase "^0.1.1" +before-after-hook@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/before-after-hook/-/before-after-hook-2.1.0.tgz#b6c03487f44e24200dd30ca5e6a1979c5d2fb635" + integrity sha512-IWIbu7pMqyw3EAJHzzHbWa85b6oud/yfKYg5rqB5hNE8CeMi3nX+2C2sj0HswfblST86hpVEOAb9x34NZd6P7A== + bfj@^6.1.1: version "6.1.2" resolved "https://registry.yarnpkg.com/bfj/-/bfj-6.1.2.tgz#325c861a822bcb358a41c78a33b8e6e2086dde7f" @@ -2876,6 +2983,11 @@ depd@~1.1.2: resolved "https://registry.yarnpkg.com/depd/-/depd-1.1.2.tgz#9bcd52e14c097763e749b274c4346ed2e560b5a9" integrity sha1-m81S4UwJd2PnSbJ0xDRu0uVgtak= +deprecation@^2.0.0, deprecation@^2.3.1: + version "2.3.1" + resolved "https://registry.yarnpkg.com/deprecation/-/deprecation-2.3.1.tgz#6368cbdb40abf3373b525ac87e4a260c3a700919" + integrity sha512-xmHIy4F3scKVwMsQ4WnVaS8bHOx0DmVwRywosKhaILI0ywMDWPtBSku2HNxRvF7jtwDRsoEwYQSfbxj8b7RlJQ== + des.js@^1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/des.js/-/des.js-1.0.1.tgz#5382142e1bdc53f85d86d53e5f4aa7deb91e0843" @@ -4581,6 +4693,11 @@ is-plain-object@^2.0.3, is-plain-object@^2.0.4: dependencies: isobject "^3.0.1" +is-plain-object@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" + integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== + is-png@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/is-png/-/is-png-2.0.0.tgz#ee8cbc9e9b050425cedeeb4a6fb74a649b0a4a8d" @@ -5373,6 +5490,11 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" +node-fetch@^2.6.1: + version "2.6.1" + resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.6.1.tgz#045bd323631f76ed2e2b55573394416b639a0052" + integrity sha512-V4aYg89jEoVRxRb2fJdAg8FHvI7cEyYdVAh94HH0UIK8oJxUfkjlDQN9RbMx+bEjP7+ggMiFRprSti032Oipxw== + node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -8147,6 +8269,11 @@ unique-slug@^2.0.0: dependencies: imurmurhash "^0.1.4" +universal-user-agent@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/universal-user-agent/-/universal-user-agent-6.0.0.tgz#3381f8503b251c0d9cd21bc1de939ec9df5480ee" + integrity sha512-isyNax3wXoKaulPDZWHQqbmIx1k2tb9fb3GGDBRxCscfYV2Ch7WxPArBsFEG8s/safwXTT7H4QGhaIkTp9447w== + unpipe@1.0.0, unpipe@~1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/unpipe/-/unpipe-1.0.0.tgz#b2bf4ee8514aae6165b4817829d21b2ef49904ec"