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

Merge branch 'master' into puzzle

This commit is contained in:
Sense101 2021-06-14 13:42:35 +01:00
commit cd764146aa
104 changed files with 8324 additions and 1306 deletions

1
.gitignore vendored
View File

@ -47,6 +47,7 @@ res_built
gulp/runnable-texturepacker.jar gulp/runnable-texturepacker.jar
tmp_standalone_files tmp_standalone_files
tmp_standalone_files_china tmp_standalone_files_china
tmp_standalone_files_wegame
# Local config # Local config
config.local.js config.local.js

View File

@ -5,11 +5,11 @@
This is the source code for shapez.io, an open source base building game inspired by Factorio. This is the source code for shapez.io, an open source base building game inspired by Factorio.
Your goal is to produce shapes by cutting, rotating, merging and painting parts of shapes. Your goal is to produce shapes by cutting, rotating, merging and painting parts of shapes.
- [Trello Board & Roadmap](https://trello.com/b/ISQncpJP/shapezio)
- [Free web version](https://shapez.io)
- [itch.io Page](https://tobspr.itch.io/shapezio)
- [Steam Page](https://steam.shapez.io) - [Steam Page](https://steam.shapez.io)
- [Official Discord](https://discord.com/invite/HN7EVzV) <- _Highly recommended to join!_ - [Official Discord](https://discord.com/invite/HN7EVzV) <- _Highly recommended to join!_
- [Trello Board & Roadmap](https://trello.com/b/ISQncpJP/shapezio)
- [itch.io Page](https://tobspr.itch.io/shapezio)
- [Free web version](https://shapez.io)
## Reporting issues, suggestions, feedback, bugs ## Reporting issues, suggestions, feedback, bugs
@ -35,9 +35,9 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts
You can use [Gitpod](https://www.gitpod.io/) (an Online Open Source VS Code-like IDE which is free for Open Source) for working on issues and making PRs to this project. With a single click it will start a workspace and automatically: You can use [Gitpod](https://www.gitpod.io/) (an Online Open Source VS Code-like IDE which is free for Open Source) for working on issues and making PRs to this project. With a single click it will start a workspace and automatically:
- clone the `shapez.io` repo. - clone the `shapez.io` repo.
- install all of the dependencies. - install all of the dependencies.
- start `gulp` in `gulp/` directory. - start `gulp` in `gulp/` directory.
[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) [![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/)

View File

@ -274,7 +274,10 @@ async function performFsJob(job) {
} }
} }
ipcMain.handle("fs-job", (event, arg) => performFsJob(arg)); ipcMain.on("fs-job", async (event, arg) => {
const result = await performFsJob(arg);
event.reply("fs-response", { id: arg.id, result });
});
steam.init(isDev); steam.init(isDev);
steam.listen(); steam.listen();

View File

@ -47,8 +47,36 @@ function listen() {
return; return;
} }
console.log("Adding listeners");
ipcMain.handle("steam:get-achievement-names", getAchievementNames); ipcMain.handle("steam:get-achievement-names", getAchievementNames);
ipcMain.handle("steam:activate-achievement", activateAchievement); ipcMain.handle("steam:activate-achievement", activateAchievement);
function bufferToHex(buffer) {
return Array.from(new Uint8Array(buffer))
.map(b => b.toString(16).padStart(2, "0"))
.join("");
}
ipcMain.handle("steam:get-ticket", (event, arg) => {
console.log("Requested steam ticket ...");
return new Promise((resolve, reject) => {
greenworks.getAuthSessionTicket(
success => {
const ticketHex = bufferToHex(success.ticket);
resolve(ticketHex);
},
error => {
console.error("Failed to get steam ticket:", error);
reject(error);
}
);
});
});
ipcMain.handle("steam:check-app-ownership", (event, appId) => {
return Promise.resolve(greenworks.isSubscribedApp(appId));
});
} }
function isInitialized(event) { function isInitialized(event) {

1
electron_wegame/.gitignore vendored Normal file
View File

@ -0,0 +1 @@
wegame_sdk

View File

@ -0,0 +1,13 @@
{
"folders": [
{
"path": "."
}
],
"settings": {
"files.exclude": {
"**/node_modules": true,
"**/typedefs_gen": true
}
}
}

Binary file not shown.

BIN
electron_wegame/favicon.ico Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 103 KiB

BIN
electron_wegame/favicon.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 14 KiB

288
electron_wegame/index.js Normal file
View File

@ -0,0 +1,288 @@
/* eslint-disable quotes,no-undef */
const { app, BrowserWindow, Menu, MenuItem, ipcMain, shell } = require("electron");
app.commandLine.appendSwitch("in-process-gpu");
const path = require("path");
const url = require("url");
const fs = require("fs");
const wegame = require("./wegame");
const asyncLock = require("async-lock");
const isDev = process.argv.indexOf("--dev") >= 0;
const isLocal = process.argv.indexOf("--local") >= 0;
const roamingFolder =
process.env.APPDATA ||
(process.platform == "darwin"
? process.env.HOME + "/Library/Preferences"
: process.env.HOME + "/.local/share");
let storePath = path.join(roamingFolder, "shapez.io", "saves");
if (!fs.existsSync(storePath)) {
// No try-catch by design
fs.mkdirSync(storePath, { recursive: true });
}
/** @type {BrowserWindow} */
let win = null;
let menu = null;
function createWindow() {
let faviconExtension = ".png";
if (process.platform === "win32") {
faviconExtension = ".ico";
}
win = new BrowserWindow({
width: 1280,
height: 800,
show: false,
backgroundColor: "#222428",
useContentSize: true,
minWidth: 800,
minHeight: 600,
title: "shapez.io Standalone",
transparent: false,
icon: path.join(__dirname, "favicon" + faviconExtension),
// fullscreen: true,
autoHideMenuBar: true,
webPreferences: {
nodeIntegration: true,
webSecurity: false,
},
// allowRunningInsecureContent: false,
});
if (isLocal) {
win.loadURL("http://localhost:3005");
} else {
win.loadURL(
url.format({
pathname: path.join(__dirname, "index.html"),
protocol: "file:",
slashes: true,
})
);
}
win.webContents.session.clearCache(() => null);
win.webContents.session.clearStorageData();
win.webContents.on("new-window", (event, pth) => {
event.preventDefault();
shell.openExternal(pth);
});
win.on("closed", () => {
console.log("Window closed");
win = null;
});
if (isDev) {
menu = new Menu();
const mainItem = new MenuItem({
label: "Toggle Dev Tools",
click: () => win.webContents.toggleDevTools(),
accelerator: "F12",
});
menu.append(mainItem);
const reloadItem = new MenuItem({
label: "Restart",
click: () => win.reload(),
accelerator: "F5",
});
menu.append(reloadItem);
const fullscreenItem = new MenuItem({
label: "Fullscreen",
click: () => win.setFullScreen(!win.isFullScreen()),
accelerator: "F11",
});
menu.append(fullscreenItem);
Menu.setApplicationMenu(menu);
} else {
Menu.setApplicationMenu(null);
}
win.once("ready-to-show", () => {
win.show();
win.focus();
});
}
if (!app.requestSingleInstanceLock()) {
app.exit(0);
} else {
app.on("second-instance", (event, commandLine, workingDirectory) => {
// Someone tried to run a second instance, we should focus
if (win) {
if (win.isMinimized()) {
win.restore();
}
win.focus();
}
});
}
app.on("ready", createWindow);
app.on("window-all-closed", () => {
console.log("All windows closed");
app.quit();
});
ipcMain.on("set-fullscreen", (event, flag) => {
win.setFullScreen(flag);
});
ipcMain.on("exit-app", (event, flag) => {
win.close();
app.quit();
});
let renameCounter = 1;
const fileLock = new asyncLock({
timeout: 30000,
maxPending: 1000,
});
function niceFileName(filename) {
return filename.replace(storePath, "@");
}
async function writeFileSafe(filename, contents) {
++renameCounter;
const prefix = "[ " + renameCounter + ":" + niceFileName(filename) + " ] ";
const transactionId = String(new Date().getTime()) + "." + renameCounter;
if (fileLock.isBusy()) {
console.warn(prefix, "Concurrent write process on", filename);
}
await fileLock.acquire(filename, async () => {
console.log(prefix, "Starting write on", niceFileName(filename), "in transaction", transactionId);
if (!fs.existsSync(filename)) {
// this one is easy
console.log(prefix, "Writing file instantly because it does not exist:", niceFileName(filename));
fs.writeFileSync(filename, contents, { encoding: "utf8" });
return;
}
// first, write a temporary file (.tmp-XXX)
const tempName = filename + ".tmp-" + transactionId;
console.log(prefix, "Writing temporary file", niceFileName(tempName));
fs.writeFileSync(tempName, contents, { encoding: "utf8" });
// now, rename the original file to (.backup-XXX)
const oldTemporaryName = filename + ".backup-" + transactionId;
console.log(
prefix,
"Renaming old file",
niceFileName(filename),
"to",
niceFileName(oldTemporaryName)
);
fs.renameSync(filename, oldTemporaryName);
// now, rename the temporary file (.tmp-XXX) to the target
console.log(
prefix,
"Renaming the temporary file",
niceFileName(tempName),
"to the original",
niceFileName(filename)
);
fs.renameSync(tempName, filename);
// we are done now, try to create a backup, but don't fail if the backup fails
try {
// check if there is an old backup file
const backupFileName = filename + ".backup";
if (fs.existsSync(backupFileName)) {
console.log(prefix, "Deleting old backup file", niceFileName(backupFileName));
// delete the old backup
fs.unlinkSync(backupFileName);
}
// rename the old file to the new backup file
console.log(prefix, "Moving", niceFileName(oldTemporaryName), "to the backup file location");
fs.renameSync(oldTemporaryName, backupFileName);
} catch (ex) {
console.error(prefix, "Failed to switch backup files:", ex);
}
});
}
async function performFsJob(job) {
const fname = path.join(storePath, job.filename);
switch (job.type) {
case "read": {
if (!fs.existsSync(fname)) {
return {
// Special FILE_NOT_FOUND error code
error: "file_not_found",
};
}
try {
const data = fs.readFileSync(fname, { encoding: "utf8" });
return {
success: true,
data,
};
} catch (ex) {
console.error(ex);
return {
error: ex,
};
}
}
case "write": {
try {
writeFileSafe(fname, job.contents);
return {
success: true,
data: job.contents,
};
} catch (ex) {
console.error(ex);
return {
error: ex,
};
}
}
case "delete": {
try {
fs.unlinkSync(fname);
} catch (ex) {
console.error(ex);
return {
error: ex,
};
}
return {
success: true,
data: null,
};
}
default:
throw new Error("Unkown fs job: " + job.type);
}
}
ipcMain.on("fs-job", async (event, arg) => {
const result = await performFsJob(arg);
event.sender.send("fs-response", { id: arg.id, result });
});
wegame.init(isDev);
wegame.listen();

View File

@ -0,0 +1,18 @@
{
"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": "3.1.13"
},
"dependencies": {
"async-lock": "^1.2.8"
}
}

52
electron_wegame/wegame.js Normal file
View File

@ -0,0 +1,52 @@
const railsdk = require("./wegame_sdk/railsdk.js");
const { dialog } = require("electron");
function init(isDev) {
console.log("Step 1: wegame: init");
try {
console.log("Step 2: Calling need restart app");
const need_restart = railsdk.RailNeedRestartAppForCheckingEnvironment(
2001639,
[`--rail_render_pid=${process.pid}`] //,"--rail_debug_mode",
);
console.log("Step 3: Needs restart =", need_restart);
if (need_restart) {
console.error("Step 4: Need restart");
dialog.showErrorBox("加载RailSDK失败", "请先运行WeGame开发者版本");
return;
}
} catch (err) {
console.error("Rail SDK error:", err);
dialog.showErrorBox("加载RailSDK失败", err);
return;
}
console.log("Step 5: starting rail sdk");
if (railsdk.RailInitialize() === false) {
console.error("RailInitialize() = false");
dialog.showErrorBox("RailInitialize调用失败", "请先运行WeGame开发者版本");
return;
}
console.log("Initialize RailSDK success!");
railsdk.RailRegisterEvent(railsdk.RailEventID.kRailEventSystemStateChanged, event => {
console.log(event);
if (event.result === railsdk.RailResult.kSuccess) {
if (
event.state === railsdk.RailSystemState.kSystemStatePlatformOffline ||
event.state === railsdk.RailSystemState.kSystemStatePlatformExit ||
event.state === railsdk.RailSystemState.kSystemStateGameExitByAntiAddiction
) {
remote.app.exit();
}
}
});
}
function listen() {
console.log("wegame: listen");
}
module.exports = { init, listen };

982
electron_wegame/yarn.lock Normal file
View File

@ -0,0 +1,982 @@
# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY.
# yarn lockfile v1
"@types/node@^10.1.4":
version "10.17.60"
resolved "https://registry.yarnpkg.com/@types/node/-/node-10.17.60.tgz#35f3d6213daed95da7f0f73e75bcc6980e90597b"
integrity sha512-F0KIgDJfy2nA3zMLmWGKxcH2ZVEtCZXHHdOQs2gSaQ27+lNeEfGxzkIw90aXswATX7AZ33tahPbzy6KAfUreVw==
ajv@^6.12.3:
version "6.12.6"
resolved "https://registry.yarnpkg.com/ajv/-/ajv-6.12.6.tgz#baf5a62e802b07d977034586f8c3baf5adf26df4"
integrity sha512-j3fVLgvTo527anyYyJOGTYJbG+vnnQYvE0m5mmkc1TK+nxAppkCLMIL0aZ4dblVCNoGShhm+kzE4ZUykBoMg4g==
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=
async-lock@^1.2.8:
version "1.2.8"
resolved "https://registry.yarnpkg.com/async-lock/-/async-lock-1.2.8.tgz#7b02bdfa2de603c0713acecd11184cf97bbc7c4c"
integrity sha512-G+26B2jc0Gw0EG/WN2M6IczuGepBsfR1+DtqLnyFSH4p2C668qkOCtEkGNVEaaNAVlYwEMazy1+/jnLxltBkIQ==
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.11.0"
resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.11.0.tgz#d61f46d83b2519250e2784daf5b09479a8b41c59"
integrity sha512-xh1Rl34h6Fi1DC2WWKfxUTVqRsNnr6LsKz2+hfwDxQJWmrx8+c7ylaqBMcHfl1U1r2dsifOvKX3LQuLNZ+XSvA==
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-crc32@~0.2.3:
version "0.2.13"
resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242"
integrity sha1-DTM+PwDqxQqhRUq9MO+MKl2ackI=
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.1.3, debug@^2.2.0, 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@^3.0.0:
version "3.2.7"
resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a"
integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ==
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@3.1.13:
version "3.1.13"
resolved "https://registry.yarnpkg.com/electron/-/electron-3.1.13.tgz#aeb276f4cf5e3785078b6495e982ee46d553a5d2"
integrity sha512-aRNywoUSO1Va/lpU4nz3K6GDyFqYtlOnHGLcERAAHfhB+IJrJ34cUJW4FVBpm43AwvUdAeuCkVKRLtOmrgx5CA==
dependencies:
"@types/node" "^10.1.4"
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.7.0"
resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-1.7.0.tgz#556cc3ae9df7f452c493a0cfb51cc30277940927"
integrity sha512-xoh5G1W/PB0/27lXgMQyIhP5DSY/LhoCsOyZgb+6iMmRtCwVBo55uKaMoEYrDCKQhWvqEip5ZPKAc6eFNyf/MA==
dependencies:
concat-stream "^1.6.2"
debug "^2.6.9"
mkdirp "^0.5.4"
yauzl "^2.10.0"
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.3"
resolved "https://registry.yarnpkg.com/fast-deep-equal/-/fast-deep-equal-3.1.3.tgz#3a7d56b559d6cbc3eb512325244e619a65c6c525"
integrity sha512-f3qQ9oQy9j2AhBe/H9VC91wLmKBCCU/gDOnKNAYG5hswO7BLKj09Hc5HYNz9cGI++xlpDCIgDaitVs03ATR84Q==
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.1.0:
version "1.1.0"
resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e"
integrity sha1-JcfInLH5B3+IkbvmHY85Dq4lbx4=
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"
function-bind@^1.1.1:
version "1.1.1"
resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d"
integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A==
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, graceful-fs@^4.1.6:
version "4.2.6"
resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.6.tgz#ff040b2b0853b23c3d31027523706f1885d76bee"
integrity sha512-nTnJ528pbqxYanhpDYsi4Rd8MAeaBA67+RZ10CM1m3bTAVFEDcd5AuA4a6W5YkGZ1iNXHzZz8T6TBKLeBuNriQ==
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.5"
resolved "https://registry.yarnpkg.com/har-validator/-/har-validator-5.1.5.tgz#1f0803b9f8cb20c0fa13822df1ecddb36bde1efd"
integrity sha512-nmT2T0lljbxdQZfspsno9hgrG3Uir6Ks5afism62poxqBM6sDnMEuPmzTq8XN0OEwqKLLdh1jQI3qyE66Nzb3w==
dependencies:
ajv "^6.12.3"
har-schema "^2.0.0"
has@^1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796"
integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw==
dependencies:
function-bind "^1.1.1"
hosted-git-info@^2.1.4:
version "2.8.9"
resolved "https://registry.yarnpkg.com/hosted-git-info/-/hosted-git-info-2.8.9.tgz#dffc0bf9a21c02209090f2aa69429e1414daf3f9"
integrity sha512-mxIDAb9Lsm6DoOJ7xH+5+X4y1LU/4Hi50L9C5sIswK3JzULS4bwk1FvjdBgvYR4bzT4tuUQiC15FE2f5HbLvYw==
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.8"
resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.8.tgz#a29da425b48806f34767a4efce397269af28432c"
integrity sha512-JV/yugV2uzW5iMRSiZAyDtQd+nxtUnjeLt0acNdw98kKLrvuRVyB80tsREOE7yvGVgalhZ6RNXCmEHkUKBKxew==
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-core-module@^2.2.0:
version "2.4.0"
resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.4.0.tgz#8e9fc8e15027b011418026e98f0e6f4d86305cc1"
integrity sha512-6A2fkfq1rfeQZjxrZJGerpLCTHRNEBiSgnu0+obeJpEPZRUooHgsizvzv0ZjJwOz3iWIHdJtVWJ/tmPr3D21/A==
dependencies:
has "^1.0.3"
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.47.0:
version "1.47.0"
resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.47.0.tgz#8cb313e59965d3c05cfbf898915a267af46a335c"
integrity sha512-QBmA/G2y+IfeS4oktet3qRZ+P5kPhCKRXxXnQEudYqUaEioAU1/Lq2us3D/t1Jfo4hE9REQPrbB7K5sOczJVIw==
mime-types@^2.1.12, mime-types@~2.1.19:
version "2.1.30"
resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.30.tgz#6e7be8b4c479825f85ed6326695db73f9305d62d"
integrity sha512-crmjA4bLtR8m9qLpHvgxSChT+XoSlZi8J4n/aIdn3z92e/U47Z0V/yl+Wh9W046GgFVAmoNR/fmdbZYcSSIUeg==
dependencies:
mime-db "1.47.0"
minimist@^1.1.0, minimist@^1.1.3, minimist@^1.2.0, minimist@^1.2.5:
version "1.2.5"
resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.5.tgz#67d66014b66a6a8aaa0c083c5fd58df4e4e97602"
integrity sha512-FM9nNUYrRBAELZQT3xeZQ7fmMOBg6nWNmJKTcgsJeaLstP/UODVpGsr5OhXhhXg6f+qtJ8uiZ+PUxkDWcgIXLw==
mkdirp@^0.5.4:
version "0.5.5"
resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.5.tgz#d91cefd62d1436ca0f41620e251288d420099def"
integrity sha512-NKmAlESf6jMGym1++R0Ra7wvhV+wFW63FaSOFPwRahvea0gMUcGUhVeAg/0BC0wiv9ih5NYPB1Wn1UEI1/L+xQ==
dependencies:
minimist "^1.2.5"
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.3"
resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2"
integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==
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.7"
resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57"
integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw==
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.20.0"
resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.20.0.tgz#629a013fb3f70755d6f0b7935cc1c2c5378b1975"
integrity sha512-wENBPt4ySzg4ybFQW2TT1zMQucPK95HSh/nq2CFTZVOGut2+pQvSsgtda4d26YrYcr067wjbmzOG8byDPBX63A==
dependencies:
is-core-module "^2.2.0"
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.1"
resolved "https://registry.yarnpkg.com/spdx-correct/-/spdx-correct-3.1.1.tgz#dece81ac9c1e6713e5f7d1b6f17d468fa53d89a9"
integrity sha512-cOYcUWwhCuHCXi49RhFRCyJEK3iPj1Ziz9DpViV3tbZOwXD49QzIN3MpOLJNxh2qwq2lJJZaKMVw9qNi4jTC0w==
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.9"
resolved "https://registry.yarnpkg.com/spdx-license-ids/-/spdx-license-ids-3.0.9.tgz#8a595135def9592bda69709474f1cbeea7c2467f"
integrity sha512-Ki212dKK4ogX+xDo4CtOZBVIwhsKBEfsEEcwmJfLQzirgc2jIWdzg40Unxz/HzEUqM1WFzVlQSMF9kZZ2HboLQ==
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.4.1"
resolved "https://registry.yarnpkg.com/uri-js/-/uri-js-4.4.1.tgz#9b1a52595225859e55f669d928f88c6c57f2a77e"
integrity sha512-7rKUyy33Q1yc98pQ1DAmLtwX109F7TIfWlW1Ydo8Wl1ii1SeHieeh0HHfPeL2fMXK6z0s8ecKs9frCuLJvndBg==
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.10.0:
version "2.10.0"
resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9"
integrity sha1-x+sXyT4RLLEIb6bY5R+wZnt5pfk=
dependencies:
buffer-crc32 "~0.2.3"
fd-slicer "~1.1.0"

View File

@ -139,7 +139,12 @@ gulp.task("main.webserver", () => {
); );
}); });
function serve({ standalone, chineseVersion = false }) { /**
*
* @param {object} param0
* @param {"web"|"standalone"|"china"|"wegame"} param0.version
*/
function serve({ version = "web" }) {
browserSync.init({ browserSync.init({
server: buildFolder, server: buildFolder,
port: 3005, port: 3005,
@ -163,7 +168,7 @@ function serve({ standalone, chineseVersion = false }) {
gulp.watch(["../src/**/*.scss"], gulp.series("css.dev")); gulp.watch(["../src/**/*.scss"], gulp.series("css.dev"));
// Watch .html files, those trigger a html rebuild // Watch .html files, those trigger a html rebuild
gulp.watch("../src/**/*.html", gulp.series(standalone ? "html.standalone-dev" : "html.dev")); gulp.watch("../src/**/*.html", gulp.series(version === "web" ? "html.dev" : "html.standalone-dev"));
// Watch sound files // Watch sound files
// gulp.watch(["../res_raw/sounds/**/*.mp3", "../res_raw/sounds/**/*.wav"], gulp.series("sounds.dev")); // gulp.watch(["../res_raw/sounds/**/*.mp3", "../res_raw/sounds/**/*.wav"], gulp.series("sounds.dev"));
@ -199,14 +204,25 @@ function serve({ standalone, chineseVersion = false }) {
return gulp.src(path).pipe(browserSync.reload({ stream: true })); return gulp.src(path).pipe(browserSync.reload({ stream: true }));
}); });
// Start the webpack watching server (Will never return) switch (version) {
if (standalone) { case "web": {
gulp.series("js.standalone-dev.watch")(() => true);
} else {
if (chineseVersion) {
gulp.series("china.js.dev.watch")(() => true);
} else {
gulp.series("js.dev.watch")(() => true); gulp.series("js.dev.watch")(() => true);
break;
}
case "standalone": {
gulp.series("js.standalone-dev.watch")(() => true);
break;
}
case "china": {
gulp.series("china.js.dev.watch")(() => true);
break;
}
case "wegame": {
gulp.series("wegame.js.dev.watch")(() => true);
break;
}
default: {
throw new Error("Unknown version " + version);
} }
} }
} }
@ -294,7 +310,7 @@ gulp.task(
// Builds everything (standalone-prod) // Builds everything (standalone-prod)
for (const prefix of ["", "china."]) { for (const prefix of ["", "china.", "wegame."]) {
gulp.task( gulp.task(
prefix + "step.standalone-prod.code", prefix + "step.standalone-prod.code",
gulp.series("sounds.fullbuildHQ", "translations.fullBuild", prefix + "js.standalone-prod") gulp.series("sounds.fullbuildHQ", "translations.fullBuild", prefix + "js.standalone-prod")
@ -327,25 +343,45 @@ gulp.task(
); );
gulp.task("main.deploy.prod", gulp.series("utils.requireCleanWorkingTree", "build.prod", "ftp.upload.prod")); gulp.task("main.deploy.prod", gulp.series("utils.requireCleanWorkingTree", "build.prod", "ftp.upload.prod"));
gulp.task("main.deploy.all", gulp.series("main.deploy.staging", "main.deploy.prod")); gulp.task("main.deploy.all", gulp.series("main.deploy.staging", "main.deploy.prod"));
// steam
gulp.task("regular.main.standalone", gulp.series("build.standalone-prod", "standalone.package.prod")); gulp.task("regular.main.standalone", gulp.series("build.standalone-prod", "standalone.package.prod"));
// china
gulp.task( gulp.task(
"china.main.standalone", "china.main.standalone",
gulp.series("china.build.standalone-prod", "china.standalone.package.prod") gulp.series("china.build.standalone-prod", "china.standalone.package.prod")
); );
gulp.task("standalone.all", gulp.series("regular.main.standalone", "china.main.standalone"));
// wegame
gulp.task(
"wegame.main.standalone",
gulp.series("wegame.build.standalone-prod", "wegame.standalone.package.prod")
);
// all (except wegame)
gulp.task("standalone.steam", gulp.series("regular.main.standalone", "china.main.standalone"));
gulp.task(
"standalone.all",
gulp.series("regular.main.standalone", "china.main.standalone", "wegame.main.standalone")
);
// Live-development // Live-development
gulp.task( gulp.task(
"main.serveDev", "main.serveDev",
gulp.series("build.dev", () => serve({ standalone: false })) gulp.series("build.dev", () => serve({ version: "web" }))
); );
gulp.task( gulp.task(
"main.serveStandalone", "main.serveStandalone",
gulp.series("build.standalone.dev", () => serve({ standalone: true })) gulp.series("build.standalone.dev", () => serve({ version: "standalone" }))
); );
gulp.task( gulp.task(
"china.main.serveDev", "china.main.serveDev",
gulp.series("build.dev", () => serve({ standalone: false, chineseVersion: true })) gulp.series("build.dev", () => serve({ version: "china" }))
);
gulp.task(
"wegame.main.serveDev",
gulp.series("build.dev", () => serve({ version: "wegame" }))
); );
gulp.task("default", gulp.series("main.serveDev")); gulp.task("default", gulp.series("main.serveDev"));

View File

@ -59,6 +59,36 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
.pipe(gulp.dest(buildFolder)); .pipe(gulp.dest(buildFolder));
}); });
//// DEV WEGAME
gulp.task("wegame.js.dev.watch", () => {
return gulp
.src("../src/js/main.js")
.pipe(
$.webpackStream(
requireUncached("./webpack.config.js")({
watch: true,
wegameVersion: true,
})
)
)
.pipe(gulp.dest(buildFolder))
.pipe(browserSync.stream());
});
gulp.task("wegame.js.dev", () => {
return gulp
.src("../src/js/main.js")
.pipe(
$.webpackStream(
requireUncached("./webpack.config.js")({
wegameVersion: true,
})
)
)
.pipe(gulp.dest(buildFolder));
});
//// STAGING //// STAGING
gulp.task("js.staging.transpiled", () => { gulp.task("js.staging.transpiled", () => {
@ -208,6 +238,23 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
) )
.pipe(gulp.dest(buildFolder)); .pipe(gulp.dest(buildFolder));
}); });
gulp.task("wegame.js.standalone-prod", () => {
return gulp
.src("../src/js/main.js")
.pipe(
$.webpackStream(
requireUncached("./webpack.production.config.js")({
enableAssert: false,
environment: "prod",
es6: false,
standalone: true,
wegameVersion: true,
})
)
)
.pipe(gulp.dest(buildFolder));
});
} }
module.exports = { module.exports = {

View File

@ -9,21 +9,31 @@ const buildutils = require("./buildutils");
const execSync = require("child_process").execSync; const execSync = require("child_process").execSync;
function gulptasksStandalone($, gulp) { function gulptasksStandalone($, gulp) {
const electronBaseDir = path.join(__dirname, "..", "electron");
const targets = [ const targets = [
{ {
tempDestDir: path.join(__dirname, "..", "tmp_standalone_files"), tempDestDir: path.join(__dirname, "..", "tmp_standalone_files"),
suffix: "", suffix: "",
taskPrefix: "", taskPrefix: "",
electronBaseDir: path.join(__dirname, "..", "electron"),
steam: true,
}, },
{ {
tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_china"), tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_china"),
suffix: "china", suffix: "china",
taskPrefix: "china.", taskPrefix: "china.",
electronBaseDir: path.join(__dirname, "..", "electron"),
steam: true,
},
{
tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_wegame"),
suffix: "wegame",
taskPrefix: "wegame.",
electronBaseDir: path.join(__dirname, "..", "electron_wegame"),
steam: false,
}, },
]; ];
for (const { tempDestDir, suffix, taskPrefix } of targets) { for (const { tempDestDir, suffix, taskPrefix, electronBaseDir, steam } of targets) {
const tempDestBuildDir = path.join(tempDestDir, "built"); const tempDestBuildDir = path.join(tempDestDir, "built");
gulp.task(taskPrefix + "standalone.prepare.cleanup", () => { gulp.task(taskPrefix + "standalone.prepare.cleanup", () => {
@ -34,13 +44,17 @@ function gulptasksStandalone($, gulp) {
const requiredFiles = [ const requiredFiles = [
path.join(electronBaseDir, "node_modules", "**", "*.*"), path.join(electronBaseDir, "node_modules", "**", "*.*"),
path.join(electronBaseDir, "node_modules", "**", ".*"), path.join(electronBaseDir, "node_modules", "**", ".*"),
path.join(electronBaseDir, "steam_appid.txt"), path.join(electronBaseDir, "wegame_sdk", "**", "*.*"),
path.join(electronBaseDir, "wegame_sdk", "**", ".*"),
path.join(electronBaseDir, "favicon*"), path.join(electronBaseDir, "favicon*"),
// fails on platforms which support symlinks // fails on platforms which support symlinks
// https://github.com/gulpjs/gulp/issues/1427 // https://github.com/gulpjs/gulp/issues/1427
// path.join(electronBaseDir, "node_modules", "**", "*"), // path.join(electronBaseDir, "node_modules", "**", "*"),
]; ];
if (steam) {
requiredFiles.push(path.join(electronBaseDir, "steam_appid.txt"));
}
return gulp.src(requiredFiles, { base: electronBaseDir }).pipe(gulp.dest(tempDestBuildDir)); return gulp.src(requiredFiles, { base: electronBaseDir }).pipe(gulp.dest(tempDestBuildDir));
}); });
@ -64,6 +78,11 @@ function gulptasksStandalone($, gulp) {
}); });
gulp.task(taskPrefix + "standalone.prepareVDF", cb => { gulp.task(taskPrefix + "standalone.prepareVDF", cb => {
if (!steam) {
cb();
return;
}
const hash = buildutils.getRevision(); const hash = buildutils.getRevision();
const steampipeDir = path.join(__dirname, "steampipe", "scripts"); const steampipeDir = path.join(__dirname, "steampipe", "scripts");
@ -116,11 +135,10 @@ function gulptasksStandalone($, gulp) {
const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml")); const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml"));
const privateArtifactsPath = "node_modules/shapez.io-private-artifacts"; const privateArtifactsPath = "node_modules/shapez.io-private-artifacts";
let asar; let asar = steam;
if (fs.existsSync(path.join(tempDestBuildDir, privateArtifactsPath))) { if (steam && fs.existsSync(path.join(tempDestBuildDir, privateArtifactsPath))) {
// @ts-expect-error
asar = { unpackDir: privateArtifactsPath }; asar = { unpackDir: privateArtifactsPath };
} else {
asar = true;
} }
packager({ packager({
@ -147,24 +165,26 @@ function gulptasksStandalone($, gulp) {
return; return;
} }
fs.writeFileSync( if (steam) {
path.join(appPath, "LICENSE"),
fs.readFileSync(path.join(__dirname, "..", "LICENSE"))
);
fse.copySync(
path.join(tempDestBuildDir, "steam_appid.txt"),
path.join(appPath, "steam_appid.txt")
);
fs.writeFileSync(path.join(appPath, ".itch.toml"), tomlFile);
if (platform === "linux") {
fs.writeFileSync( fs.writeFileSync(
path.join(appPath, "play.sh"), path.join(appPath, "LICENSE"),
'#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n' fs.readFileSync(path.join(__dirname, "..", "LICENSE"))
); );
fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
fse.copySync(
path.join(tempDestBuildDir, "steam_appid.txt"),
path.join(appPath, "steam_appid.txt")
);
fs.writeFileSync(path.join(appPath, ".itch.toml"), tomlFile);
if (platform === "linux") {
fs.writeFileSync(
path.join(appPath, "play.sh"),
'#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n'
);
fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
}
} }
}); });

View File

@ -2,16 +2,16 @@
{ {
"appid" "1318690" "appid" "1318690"
"desc" "$DESC$" "desc" "$DESC$"
"buildoutput" "C:\work\shapez.io\gulp\steampipe\steamtemp" "buildoutput" "C:\work\shapez\shapez.io\gulp\steampipe\steamtemp"
"contentroot" "" "contentroot" ""
"setlive" "" "setlive" ""
"preview" "0" "preview" "0"
"local" "" "local" ""
"depots" "depots"
{ {
"1318691" "C:\work\shapez.io\gulp\steampipe\scripts\windows.vdf" "1318691" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\windows.vdf"
"1318694" "C:\work\shapez.io\gulp\steampipe\scripts\china-windows.vdf" "1318694" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-windows.vdf"
"1318692" "C:\work\shapez.io\gulp\steampipe\scripts\linux.vdf" "1318692" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\linux.vdf"
"1318695" "C:\work\shapez.io\gulp\steampipe\scripts\china-linux.vdf" "1318695" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\china-linux.vdf"
} }
} }

View File

@ -1,7 +1,7 @@
"DepotBuildConfig" "DepotBuildConfig"
{ {
"DepotID" "1318695" "DepotID" "1318695"
"contentroot" "C:\work\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-linux-x64" "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-linux-x64"
"FileMapping" "FileMapping"
{ {
"LocalPath" "*" "LocalPath" "*"

View File

@ -1,7 +1,7 @@
"DepotBuildConfig" "DepotBuildConfig"
{ {
"DepotID" "1318694" "DepotID" "1318694"
"contentroot" "C:\work\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-win32-x64" "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files_china\shapez.io-standalonechina-win32-x64"
"FileMapping" "FileMapping"
{ {
"LocalPath" "*" "LocalPath" "*"

View File

@ -1,7 +1,7 @@
"DepotBuildConfig" "DepotBuildConfig"
{ {
"DepotID" "1318692" "DepotID" "1318692"
"contentroot" "C:\work\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64" "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64"
"FileMapping" "FileMapping"
{ {
"LocalPath" "*" "LocalPath" "*"

View File

@ -1,7 +1,7 @@
"DepotBuildConfig" "DepotBuildConfig"
{ {
"DepotID" "1318691" "DepotID" "1318691"
"contentroot" "C:\work\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64" "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64"
"FileMapping" "FileMapping"
{ {
"LocalPath" "*" "LocalPath" "*"

View File

@ -6,7 +6,7 @@ const { getRevision, getVersion, getAllResourceImages } = require("./buildutils"
const lzString = require("lz-string"); const lzString = require("lz-string");
const CircularDependencyPlugin = require("circular-dependency-plugin"); const CircularDependencyPlugin = require("circular-dependency-plugin");
module.exports = ({ watch = false, standalone = false, chineseVersion = false }) => { module.exports = ({ watch = false, standalone = false, chineseVersion = false, wegameVersion = false }) => {
return { return {
mode: "development", mode: "development",
devtool: "cheap-source-map", devtool: "cheap-source-map",
@ -35,6 +35,7 @@ module.exports = ({ watch = false, standalone = false, chineseVersion = false })
lzString.compressToEncodedURIComponent("http://localhost:10005/v1") lzString.compressToEncodedURIComponent("http://localhost:10005/v1")
), ),
G_CHINA_VERSION: JSON.stringify(chineseVersion), G_CHINA_VERSION: JSON.stringify(chineseVersion),
G_WEGAME_VERSION: JSON.stringify(wegameVersion),
G_IS_DEV: "true", G_IS_DEV: "true",
G_IS_RELEASE: "false", G_IS_RELEASE: "false",
G_IS_MOBILE_APP: "false", G_IS_MOBILE_APP: "false",

View File

@ -17,6 +17,7 @@ module.exports = ({
isBrowser = true, isBrowser = true,
mobileApp = false, mobileApp = false,
chineseVersion = false, chineseVersion = false,
wegameVersion = false,
}) => { }) => {
const globalDefs = { const globalDefs = {
assert: enableAssert ? "window.assert" : "false && window.assert", assert: enableAssert ? "window.assert" : "false && window.assert",
@ -25,6 +26,7 @@ module.exports = ({
G_IS_DEV: "false", G_IS_DEV: "false",
G_CHINA_VERSION: JSON.stringify(chineseVersion), G_CHINA_VERSION: JSON.stringify(chineseVersion),
G_WEGAME_VERSION: JSON.stringify(wegameVersion),
G_IS_RELEASE: environment === "prod" ? "true" : "false", G_IS_RELEASE: environment === "prod" ? "true" : "false",
G_IS_STANDALONE: standalone ? "true" : "false", G_IS_STANDALONE: standalone ? "true" : "false",
G_IS_BROWSER: isBrowser ? "true" : "false", G_IS_BROWSER: isBrowser ? "true" : "false",

BIN
res/logo_wegame.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 40 KiB

BIN
res/puzzle_dlc_logo.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 32 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 44 KiB

Binary file not shown.

View File

@ -37,7 +37,7 @@
.building { .building {
@include S(width, 30px); @include S(width, 30px);
@include S(height, 22px); @include S(height, 30px);
background-size: 45%; background-size: 45%;
&:not(.unlocked) { &:not(.unlocked) {
@ -49,6 +49,10 @@
} }
.building { .building {
display: flex;
@include S(width, 40px);
position: relative;
@include S(height, 40px);
.icon { .icon {
color: $accentColorDark; color: $accentColorDark;
display: flex; display: flex;
@ -56,18 +60,18 @@
position: relative; position: relative;
align-items: center; align-items: center;
justify-content: center; justify-content: center;
@include S(padding, 5px); width: 100%;
@include S(padding-bottom, 1px); height: 100%;
@include S(width, 35px); padding: 0;
@include S(height, 37px); margin: 0;
@include S(border-radius, $globalBorderRadius); @include S(border-radius, $globalBorderRadius);
background: center center / 70% no-repeat; background: center center / 70% no-repeat;
} }
&:not(.unlocked) { &:not(.unlocked) {
@include S(width, 25px);
.icon { .icon {
@include S(width, 20px);
opacity: 0.15; opacity: 0.15;
} }
&.editor { &.editor {
@ -91,8 +95,8 @@
pointer-events: all; pointer-events: all;
transition: all 50ms ease-in-out; transition: all 50ms ease-in-out;
transition-property: background-color, transform; transition-property: background-color, transform;
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background-color: rgba(30, 40, 90, 0.1); background-color: rgba(30, 40, 90, 0.1);
} }
@ -100,40 +104,38 @@
&.pressed { &.pressed {
transform: scale(0.9) !important; transform: scale(0.9) !important;
} }
}
&.selected {
// transform: scale(1.05);
background-color: rgba(lighten($colorBlueBright, 9), 0.4);
@include S(border-radius, 2px);
&.selected { .keybinding {
// transform: scale(1.05); color: #111;
background-color: rgba(lighten($colorBlueBright, 9), 0.4);
.keybinding {
color: #111;
}
} }
} }
.puzzle-lock { .puzzle-lock {
& { & {
/* @load-async */ /* @load-async */
background: uiResource("locked_building.png") center center / #{D(14px)} #{D(14px)} background: uiResource("locked_building.png") center center / 90% no-repeat;
no-repeat;
} }
display: grid; display: grid;
grid-auto-flow: column; grid-auto-flow: column;
@include S(margin-top, 2px);
@include S(margin-left, 16px);
@include S(margin-bottom, 29px);
position: absolute; position: absolute;
bottom: 20px; @include S(top, -15px);
left: 50%;
transform: translateX(-50%) !important;
transition: all 0.12s ease-in-out; transition: all 0.12s ease-in-out;
transition-property: opacity, transform; transition-property: opacity, transform;
cursor: pointer; cursor: pointer;
pointer-events: all; pointer-events: all;
@include S(width, 14px); @include S(width, 12px);
@include S(height, 14px); @include S(height, 12px);
&:hover { &:hover {
opacity: 0.5; opacity: 0.5;

View File

@ -96,12 +96,13 @@
@include S(height, 60px); @include S(height, 60px);
@include S(margin, 0, 10px); @include S(margin, 0, 10px);
box-sizing: border-box; box-sizing: border-box;
@include S(border-radius, $globalBorderRadius); border-radius: 50%;
transition: opacity 0.12s ease-in-out, background-color 0.12s ease-in-out; transition: opacity 0.12s ease-in-out, background-color 0.12s ease-in-out;
@include IncreasedClickArea(0px);
&.liked-yes { &.liked-yes {
/* @load-async */ /* @load-async */
background: uiResource("icons/puzzle_action_liked_yes.png") center center / 70% background: uiResource("icons/puzzle_action_liked_yes.png") center 55% / 60%
no-repeat; no-repeat;
} }
@ -110,7 +111,18 @@
} }
&.active { &.active {
background-color: #151118 !important; background-color: $colorRedBright !important;
@include InlineAnimation(0.3s ease-in-out) {
0% {
transform: scale(0);
}
50% {
transform: scale(1.2);
}
100% {
transform: scale(1);
}
}
} }
&:not(.active) { &:not(.active) {
opacity: 0.4; opacity: 0.4;
@ -119,6 +131,26 @@
} }
} }
> .buttonBar {
display: flex;
@include S(margin-top, 20px);
button.continue {
background: #555;
@include S(margin-right, 10px);
}
button.menu {
background-color: $colorGreenBright;
}
> button {
@include S(min-width, 100px);
@include S(padding, 10px, 20px);
@include IncreasedClickArea(0px);
}
}
> .actions { > .actions {
position: absolute; position: absolute;
@include S(bottom, 40px); @include S(bottom, 40px);
@ -135,14 +167,5 @@
} }
} }
} }
button.close {
border: 0;
position: relative;
@include S(margin-top, 15px);
background: $colorGreenBright;
@include Heading;
@include S(padding, 14px, 40px);
}
} }
} }

View File

@ -16,4 +16,9 @@
background: uiResource("puzzle_dlc_logo_inverse.png") center center / contain no-repeat; background: uiResource("puzzle_dlc_logo_inverse.png") center center / contain no-repeat;
} }
} }
&.china {
/* @load-async */
background: uiResource("puzzle_dlc_logo_china.png") center center / contain no-repeat !important;
}
} }

View File

@ -88,9 +88,11 @@
@include S(grid-column-gap, 10px); @include S(grid-column-gap, 10px);
display: grid; display: grid;
grid-template-columns: 1fr;
&.demo { &[data-columns="1"] {
grid-template-columns: 1fr;
}
&[data-columns="2"] {
grid-template-columns: 1fr 1fr; grid-template-columns: 1fr 1fr;
} }
@ -223,9 +225,48 @@
} }
} }
.puzzleContainer {
display: flex;
align-items: center;
justify-content: center;
flex-direction: column;
background: #4cc98a;
grid-row: 1 / 2;
grid-column: 2 / 3;
@include S(padding, 20px);
@include S(border-radius, $globalBorderRadius);
> .dlcLogo {
@include S(width, 190px);
}
> button {
@include S(margin-top, 20px);
@include Heading;
@include S(padding, 10px, 30px);
background-color: #333;
color: #fff;
}
&.notOwned {
p {
@include PlainText;
color: #333;
@include S(margin-top, 10px);
@include S(width, 190px);
}
> button {
box-sizing: border-box;
@include S(margin-top, 10px);
@include S(width, 190px);
@include S(padding, 10px, 20px);
}
}
}
.mainContainer { .mainContainer {
display: flex; display: flex;
align-items: center; align-items: center;
grid-row: 1 / 2;
justify-content: center; justify-content: center;
flex-direction: column; flex-direction: column;
background: #fafafa; background: #fafafa;

View File

@ -1,11 +1,11 @@
export const CHANGELOG = [ export const CHANGELOG = [
{ {
version: "1.4.0", version: "1.4.0",
date: "UNRELEASED", date: "04.06.2021",
entries: [ entries: [
"Added puzzle mode",
"Belts in blueprints should now always paste correctly", "Belts in blueprints should now always paste correctly",
"You can now clear belts by selecting them, and then pressing 'B'", "You can now clear belts by selecting them and then pressing 'B'",
"Preparations for the <a href='https://store.steampowered.com/app/1625400/shapezio__Puzzle_DLC/' target='_blank'>Puzzle DLC</a>, coming June 22nd!",
], ],
}, },
{ {

View File

@ -12,8 +12,13 @@ import { cachebust } from "./cachebust";
const logger = createLogger("background_loader"); const logger = createLogger("background_loader");
export function getLogoSprite() {
// @todo: ugh, in a hurry
return G_WEGAME_VERSION ? "logo_wegame.png" : G_CHINA_VERSION ? "logo_cn.png" : "logo.png";
}
const essentialMainMenuSprites = [ const essentialMainMenuSprites = [
G_CHINA_VERSION ? "logo_cn.png" : "logo.png", getLogoSprite(),
...G_ALL_UI_IMAGES.filter(src => src.startsWith("ui/") && src.indexOf(".gif") < 0), ...G_ALL_UI_IMAGES.filter(src => src.startsWith("ui/") && src.indexOf(".gif") < 0),
]; ];
const essentialMainMenuSounds = [ const essentialMainMenuSounds = [

View File

@ -18,6 +18,7 @@ export const THIRDPARTY_URLS = {
shapeViewer: "https://viewer.shapez.io", shapeViewer: "https://viewer.shapez.io",
standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/", standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/",
puzzleDlcStorePage: "https://store.steampowered.com/app/1625400/shapezio__Puzzle_DLC",
levelTutorialVideos: { levelTutorialVideos: {
21: "https://www.youtube.com/watch?v=0nUfRLMCcgo&", 21: "https://www.youtube.com/watch?v=0nUfRLMCcgo&",

View File

@ -90,9 +90,9 @@ export class StateManager {
dialogParent.classList.add("modalDialogParent"); dialogParent.classList.add("modalDialogParent");
document.body.appendChild(dialogParent); document.body.appendChild(dialogParent);
this.currentState.internalEnterCallback(payload);
this.app.sound.playThemeMusic(this.currentState.getThemeMusic()); this.app.sound.playThemeMusic(this.currentState.getThemeMusic());
this.currentState.internalEnterCallback(payload);
this.currentState.onResized(this.app.screenWidth, this.app.screenHeight); this.currentState.onResized(this.app.screenWidth, this.app.screenHeight);
this.app.analytics.trackStateEnter(key); this.app.analytics.trackStateEnter(key);

View File

@ -573,12 +573,14 @@ export function round1DigitLocalized(speed, separator = T.global.decimalSeparato
* @param {string=} separator The decimal separator for numbers like 50.1 (separator='.') * @param {string=} separator The decimal separator for numbers like 50.1 (separator='.')
*/ */
export function formatItemsPerSecond(speed, double = false, separator = T.global.decimalSeparator) { export function formatItemsPerSecond(speed, double = false, separator = T.global.decimalSeparator) {
return speed === 1.0 return (
? T.ingame.buildingPlacement.infoTexts.oneItemPerSecond (speed === 1.0
: T.ingame.buildingPlacement.infoTexts.itemsPerSecond.replace( ? T.ingame.buildingPlacement.infoTexts.oneItemPerSecond
"<x>", : T.ingame.buildingPlacement.infoTexts.itemsPerSecond.replace(
round2Digits(speed).toString().replace(".", separator) "<x>",
) + (double ? " " + T.ingame.buildingPlacement.infoTexts.itemsPerSecondDouble : ""); round2Digits(speed).toString().replace(".", separator)
)) + (double ? " " + T.ingame.buildingPlacement.infoTexts.itemsPerSecondDouble : "")
);
} }
/** /**

View File

@ -32,6 +32,12 @@ export class AchievementProxy {
} }
onLoad() { onLoad() {
if (!this.root.gameMode.hasAchievements()) {
logger.log("Disabling achievements because game mode does not have achievements");
this.disabled = true;
return;
}
this.provider this.provider
.onLoad(this.root) .onLoad(this.root)
.then(() => { .then(() => {

View File

@ -199,7 +199,7 @@ export class BeltPath extends BasicSerializableObject {
/** /**
* Finds the entity which accepts our items * Finds the entity which accepts our items
* @param {boolean=} debug_Silent Whether debug output should be silent * @param {boolean=} debug_Silent Whether debug output should be silent
* @return { (BaseItem, number) => boolean } * @return { (BaseItem, number?) => boolean }
*/ */
computeAcceptingEntityAndSlot(debug_Silent = false) { computeAcceptingEntityAndSlot(debug_Silent = false) {
DEBUG && !debug_Silent && logger.log("Recomputing acceptor target"); DEBUG && !debug_Silent && logger.log("Recomputing acceptor target");

View File

@ -3,9 +3,9 @@ import { Entity } from "../entity";
/* typehints:end */ /* typehints:end */
import { enumDirection, Vector } from "../../core/vector"; import { enumDirection, Vector } from "../../core/vector";
import { enumConstantSignalType, ConstantSignalComponent } from "../components/constant_signal"; import { ConstantSignalComponent } from "../components/constant_signal";
import { ItemEjectorComponent } from "../components/item_ejector"; import { ItemEjectorComponent } from "../components/item_ejector";
import { enumItemProducerType, ItemProducerComponent } from "../components/item_producer"; import { ItemProducerComponent } from "../components/item_producer";
import { MetaBuilding } from "../meta_building"; import { MetaBuilding } from "../meta_building";
export class MetaConstantProducerBuilding extends MetaBuilding { export class MetaConstantProducerBuilding extends MetaBuilding {
@ -36,15 +36,7 @@ export class MetaConstantProducerBuilding extends MetaBuilding {
slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }], slots: [{ pos: new Vector(0, 0), direction: enumDirection.top }],
}) })
); );
entity.addComponent( entity.addComponent(new ItemProducerComponent({}));
new ItemProducerComponent({ entity.addComponent(new ConstantSignalComponent({}));
type: enumItemProducerType.wireless,
})
);
entity.addComponent(
new ConstantSignalComponent({
type: enumConstantSignalType.wireless,
})
);
} }
} }

View File

@ -3,9 +3,7 @@ import { Entity } from "../entity";
/* typehints:end */ /* typehints:end */
import { enumDirection, Vector } from "../../core/vector"; import { enumDirection, Vector } from "../../core/vector";
import { enumBeltReaderType, BeltReaderComponent } from "../components/belt_reader";
import { GoalAcceptorComponent } from "../components/goal_acceptor"; import { GoalAcceptorComponent } from "../components/goal_acceptor";
import { ItemEjectorComponent } from "../components/item_ejector";
import { ItemAcceptorComponent } from "../components/item_acceptor"; import { ItemAcceptorComponent } from "../components/item_acceptor";
import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor"; import { enumItemProcessorTypes, ItemProcessorComponent } from "../components/item_processor";
import { MetaBuilding } from "../meta_building"; import { MetaBuilding } from "../meta_building";

View File

@ -16,20 +16,12 @@ export class BeltReaderComponent extends Component {
static getSchema() { static getSchema() {
return { return {
type: types.string,
lastItem: types.nullable(typeItemSingleton), lastItem: types.nullable(typeItemSingleton),
}; };
} }
/** constructor() {
* @param {object} param0
* @param {string=} param0.type
*/
constructor({ type = enumBeltReaderType.wired }) {
super(); super();
this.type = type;
this.clear(); this.clear();
} }
@ -58,8 +50,4 @@ export class BeltReaderComponent extends Component {
*/ */
this.lastThroughputComputation = 0; this.lastThroughputComputation = 0;
} }
isWireless() {
return this.type === enumBeltReaderType.wireless;
}
} }

View File

@ -1,7 +1,6 @@
import { gItemRegistry } from "../../core/global_registries";
import { types } from "../../savegame/serialization"; import { types } from "../../savegame/serialization";
import { Component } from "../component";
import { BaseItem } from "../base_item"; import { BaseItem } from "../base_item";
import { Component } from "../component";
import { typeItemSingleton } from "../item_resolver"; import { typeItemSingleton } from "../item_resolver";
/** @enum {string} */ /** @enum {string} */

View File

@ -112,6 +112,11 @@ export class GameMode extends BasicSerializableObject {
return true; return true;
} }
/** @returns {boolean} */
hasAchievements() {
return false;
}
/** @returns {number} */ /** @returns {number} */
getMinimumZoom() { getMinimumZoom() {
return 0.1; return 0.1;

View File

@ -40,7 +40,6 @@ export class HUDBaseToolbar extends BaseHUDPart {
* element: HTMLElement, * element: HTMLElement,
* index: number * index: number
* puzzleLocked: boolean; * puzzleLocked: boolean;
* class: typeof MetaBuilding,
* }>} */ * }>} */
this.buildingHandles = {}; this.buildingHandles = {};
} }
@ -136,7 +135,6 @@ export class HUDBaseToolbar extends BaseHUDPart {
selected: false, selected: false,
index: i, index: i,
puzzleLocked: false, puzzleLocked: false,
class: allBuildings[i],
}; };
} }

View File

@ -52,12 +52,26 @@ export class HUDPuzzleCompleteNotification extends BaseHUDPart {
this.updateState(); this.updateState();
}); });
this.btnClose = document.createElement("button"); const buttonBar = document.createElement("div");
this.btnClose.classList.add("close", "styledButton"); buttonBar.classList.add("buttonBar");
this.btnClose.innerText = T.ingame.puzzleCompletion.buttonSubmit; this.elemContents.appendChild(buttonBar);
dialog.appendChild(this.btnClose);
this.trackClicks(this.btnClose, this.close); this.continueBtn = document.createElement("button");
this.continueBtn.classList.add("continue", "styledButton");
this.continueBtn.innerText = T.ingame.puzzleCompletion.continueBtn;
buttonBar.appendChild(this.continueBtn);
this.trackClicks(this.continueBtn, () => {
this.close(false);
});
this.menuBtn = document.createElement("button");
this.menuBtn.classList.add("menu", "styledButton");
this.menuBtn.innerText = T.ingame.puzzleCompletion.menuBtn;
buttonBar.appendChild(this.menuBtn);
this.trackClicks(this.menuBtn, () => {
this.close(true);
});
} }
updateState() { updateState() {
@ -79,13 +93,16 @@ export class HUDPuzzleCompleteNotification extends BaseHUDPart {
return this.visible; return this.visible;
} }
close() { close(toMenu) {
/** @type {PuzzlePlayGameMode} */ (this.root.gameMode) /** @type {PuzzlePlayGameMode} */ (this.root.gameMode)
.trackCompleted(this.userDidLikePuzzle, Math.round(this.timeOfCompletion)) .trackCompleted(this.userDidLikePuzzle, Math.round(this.timeOfCompletion))
.then(() => { .then(() => {
// this.root.gameState.moveToState("PuzzleMenuState"); if (toMenu) {
this.visible = false; this.root.gameState.moveToState("PuzzleMenuState");
this.cleanup(); } else {
this.visible = false;
this.cleanup();
}
}); });
} }

View File

@ -4,6 +4,7 @@ import { BaseHUDPart } from "../base_hud_part";
export class HUDPuzzleDLCLogo extends BaseHUDPart { export class HUDPuzzleDLCLogo extends BaseHUDPart {
createElements(parent) { createElements(parent) {
this.element = makeDiv(parent, "ingame_HUD_PuzzleDLCLogo"); this.element = makeDiv(parent, "ingame_HUD_PuzzleDLCLogo");
this.element.classList.toggle("china", G_CHINA_VERSION || G_WEGAME_VERSION);
parent.appendChild(this.element); parent.appendChild(this.element);
} }

View File

@ -163,7 +163,9 @@ export class HUDPuzzleEditorReview extends BaseHUDPart {
const serialized = new PuzzleSerializer().generateDumpFromGameRoot(this.root); const serialized = new PuzzleSerializer().generateDumpFromGameRoot(this.root);
logger.log("Submitting puzzle, title=", title, "shortKey=", shortKey); logger.log("Submitting puzzle, title=", title, "shortKey=", shortKey);
logger.log("Serialized data:", serialized); if (G_IS_DEV) {
logger.log("Serialized data:", serialized);
}
const closeLoading = this.root.hud.parts.dialogs.showLoadingDialog(T.puzzleMenu.submittingPuzzle); const closeLoading = this.root.hud.parts.dialogs.showLoadingDialog(T.puzzleMenu.submittingPuzzle);

View File

@ -7,9 +7,6 @@ import { types } from "../../savegame/serialization";
import { enumGameModeTypes, GameMode } from "../game_mode"; import { enumGameModeTypes, GameMode } from "../game_mode";
import { HUDPuzzleBackToMenu } from "../hud/parts/puzzle_back_to_menu"; import { HUDPuzzleBackToMenu } from "../hud/parts/puzzle_back_to_menu";
import { HUDPuzzleDLCLogo } from "../hud/parts/puzzle_dlc_logo"; import { HUDPuzzleDLCLogo } from "../hud/parts/puzzle_dlc_logo";
import { gMetaBuildingRegistry } from "../../core/global_registries";
import { MetaBalancerBuilding } from "../buildings/balancer";
import { MetaUndergroundBeltBuilding } from "../buildings/underground_belt";
export class PuzzleGameMode extends GameMode { export class PuzzleGameMode extends GameMode {
static getType() { static getType() {

View File

@ -29,6 +29,7 @@ import { HUDPuzzleCompleteNotification } from "../hud/parts/puzzle_complete_noti
import { HUDPuzzlePlaySettings } from "../hud/parts/puzzle_play_settings"; import { HUDPuzzlePlaySettings } from "../hud/parts/puzzle_play_settings";
import { MetaBlockBuilding } from "../buildings/block"; import { MetaBlockBuilding } from "../buildings/block";
import { MetaBuilding } from "../meta_building"; import { MetaBuilding } from "../meta_building";
import { gMetaBuildingRegistry } from "../../core/global_registries";
const logger = createLogger("puzzle-play"); const logger = createLogger("puzzle-play");
const copy = require("clipboard-copy"); const copy = require("clipboard-copy");
@ -47,7 +48,7 @@ export class PuzzlePlayGameMode extends PuzzleGameMode {
super(root); super(root);
/** @type {Array<typeof MetaBuilding>} */ /** @type {Array<typeof MetaBuilding>} */
const excludedBuildings = [ let excludedBuildings = [
MetaConstantProducerBuilding, MetaConstantProducerBuilding,
MetaGoalAcceptorBuilding, MetaGoalAcceptorBuilding,
MetaBlockBuilding, MetaBlockBuilding,
@ -70,7 +71,22 @@ export class PuzzlePlayGameMode extends PuzzleGameMode {
MetaTransistorBuilding, MetaTransistorBuilding,
]; ];
this.hiddenBuildings = excludedBuildings.concat(puzzle.game.excludedBuildings); if (puzzle.game.excludedBuildings) {
/**
* @type {any}
*/
const puzzleHidden = puzzle.game.excludedBuildings
.map(id => {
if (!gMetaBuildingRegistry.hasId(id)) {
return;
}
return gMetaBuildingRegistry.findById(id).constructor;
})
.filter(x => !!x);
excludedBuildings = excludedBuildings.concat(puzzleHidden);
}
this.hiddenBuildings = excludedBuildings;
this.additionalHudParts.puzzlePlayMetadata = HUDPuzzlePlayMetadata; this.additionalHudParts.puzzlePlayMetadata = HUDPuzzlePlayMetadata;
this.additionalHudParts.puzzlePlaySettings = HUDPuzzlePlaySettings; this.additionalHudParts.puzzlePlaySettings = HUDPuzzlePlaySettings;

View File

@ -66,6 +66,8 @@ const preparementShape = "CpRpCp--:SwSwSwSw";
// Tiers need % of the previous tier as requirement too // Tiers need % of the previous tier as requirement too
const tierGrowth = 2.5; const tierGrowth = 2.5;
const chinaShapes = G_WEGAME_VERSION || G_CHINA_VERSION;
/** /**
* Generates all upgrades * Generates all upgrades
* @returns {Object<string, UpgradeTiers>} */ * @returns {Object<string, UpgradeTiers>} */
@ -144,7 +146,7 @@ function generateUpgrades(limitedVersion = false) {
{ {
required: [ required: [
{ {
shape: G_CHINA_VERSION shape: chinaShapes
? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu" ? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu"
: "CbRbRbCb:CwCwCwCw:WbWbWbWb", : "CbRbRbCb:CwCwCwCw:WbWbWbWb",
amount: 50000, amount: 50000,
@ -205,7 +207,7 @@ function generateUpgrades(limitedVersion = false) {
{ {
required: [ required: [
{ {
shape: G_CHINA_VERSION ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", shape: chinaShapes ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw",
amount: 6500, amount: 6500,
}, },
], ],
@ -382,7 +384,7 @@ export function generateLevelDefinitions(limitedVersion = false) {
// 13 // 13
// Tunnel Tier 2 // Tunnel Tier 2
{ {
shape: G_CHINA_VERSION ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", // painting t3 shape: chinaShapes ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", // painting t3
required: 3800, required: 3800,
reward: enumHubGoalRewards.reward_underground_belt_tier_2, reward: enumHubGoalRewards.reward_underground_belt_tier_2,
}, },
@ -391,7 +393,7 @@ export function generateLevelDefinitions(limitedVersion = false) {
...(limitedVersion ...(limitedVersion
? [ ? [
{ {
shape: G_CHINA_VERSION ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", shape: chinaShapes ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw",
required: 0, required: 0,
reward: enumHubGoalRewards.reward_demo_end, reward: enumHubGoalRewards.reward_demo_end,
}, },
@ -425,7 +427,7 @@ export function generateLevelDefinitions(limitedVersion = false) {
// 17 // 17
// Double painter // Double painter
{ {
shape: G_CHINA_VERSION shape: chinaShapes
? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu" ? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu"
: "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) : "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants)
required: 20000, required: 20000,
@ -467,7 +469,7 @@ export function generateLevelDefinitions(limitedVersion = false) {
// 22 // 22
// Constant signal // Constant signal
{ {
shape: G_CHINA_VERSION shape: chinaShapes
? "RrSySrSy:RyCrCwCr:CyCyRyCy" ? "RrSySrSy:RyCrCwCr:CyCyRyCy"
: "Cg----Cr:Cw----Cw:Sy------:Cy----Cy", : "Cg----Cr:Cw----Cw:Sy------:Cy----Cy",
required: 25000, required: 25000,
@ -477,7 +479,7 @@ export function generateLevelDefinitions(limitedVersion = false) {
// 23 // 23
// Display // Display
{ {
shape: G_CHINA_VERSION shape: chinaShapes
? "CrCrCrCr:CwCwCwCw:WwWwWwWw:CrCrCrCr" ? "CrCrCrCr:CwCwCwCw:WwWwWwWw:CrCrCrCr"
: "CcSyCcSy:SyCcSyCc:CcSyCcSy", : "CcSyCcSy:SyCcSyCc:CcSyCcSy",
required: 25000, required: 25000,
@ -486,7 +488,7 @@ export function generateLevelDefinitions(limitedVersion = false) {
// 24 Logic gates // 24 Logic gates
{ {
shape: G_CHINA_VERSION shape: chinaShapes
? "Su----Su:RwRwRwRw:Cu----Cu:CwCwCwCw" ? "Su----Su:RwRwRwRw:Cu----Cu:CwCwCwCw"
: "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy", : "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy",
required: 25000, required: 25000,
@ -615,4 +617,9 @@ export class RegularGameMode extends GameMode {
getIsFreeplayAvailable() { getIsFreeplayAvailable() {
return this.root.app.restrictionMgr.getHasExtendedLevelsAndFreeplay(); return this.root.app.restrictionMgr.getHasExtendedLevelsAndFreeplay();
} }
/** @returns {boolean} */
hasAchievements() {
return true;
}
} }

View File

@ -22,7 +22,7 @@ export class BeltReaderSystem extends GameSystemWithFilter {
readerComp.lastItemTimes.shift(); readerComp.lastItemTimes.shift();
} }
if (!entity.components.BeltReader.isWireless()) { if (pinsComp) {
pinsComp.slots[1].value = readerComp.lastItem; pinsComp.slots[1].value = readerComp.lastItem;
pinsComp.slots[0].value = pinsComp.slots[0].value =
(readerComp.lastItemTimes[readerComp.lastItemTimes.length - 1] || 0) > (readerComp.lastItemTimes[readerComp.lastItemTimes.length - 1] || 0) >

View File

@ -16,15 +16,11 @@ export class ConstantProducerSystem extends GameSystemWithFilter {
update() { update() {
for (let i = 0; i < this.allEntities.length; ++i) { for (let i = 0; i < this.allEntities.length; ++i) {
const entity = this.allEntities[i]; const entity = this.allEntities[i];
const producerComp = entity.components.ItemProducer;
const signalComp = entity.components.ConstantSignal; const signalComp = entity.components.ConstantSignal;
const ejectorComp = entity.components.ItemEjector;
if (!producerComp.isWireless() || !signalComp.isWireless()) { if (!ejectorComp) {
continue; continue;
} }
const ejectorComp = entity.components.ItemEjector;
ejectorComp.tryEject(0, signalComp.signal); ejectorComp.tryEject(0, signalComp.signal);
} }
} }
@ -41,7 +37,7 @@ export class ConstantProducerSystem extends GameSystemWithFilter {
const producerComp = contents[i].components.ItemProducer; const producerComp = contents[i].components.ItemProducer;
const signalComp = contents[i].components.ConstantSignal; const signalComp = contents[i].components.ConstantSignal;
if (!producerComp || !producerComp.isWireless() || !signalComp || !signalComp.isWireless()) { if (!producerComp || !signalComp) {
continue; continue;
} }

View File

@ -6,7 +6,7 @@ import { fillInLinkIntoTranslation } from "../../core/utils";
import { T } from "../../translations"; import { T } from "../../translations";
import { BaseItem } from "../base_item"; import { BaseItem } from "../base_item";
import { enumColors } from "../colors"; import { enumColors } from "../colors";
import { ConstantSignalComponent, enumConstantSignalType } from "../components/constant_signal"; import { ConstantSignalComponent } from "../components/constant_signal";
import { Entity } from "../entity"; import { Entity } from "../entity";
import { GameSystemWithFilter } from "../game_system_with_filter"; import { GameSystemWithFilter } from "../game_system_with_filter";
import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON } from "../items/boolean_item"; import { BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON } from "../items/boolean_item";
@ -27,13 +27,11 @@ export class ConstantSignalSystem extends GameSystemWithFilter {
for (let i = 0; i < this.allEntities.length; ++i) { for (let i = 0; i < this.allEntities.length; ++i) {
const entity = this.allEntities[i]; const entity = this.allEntities[i];
const signalComp = entity.components.ConstantSignal; const signalComp = entity.components.ConstantSignal;
if (signalComp.isWireless()) {
continue;
}
const pinsComp = entity.components.WiredPins; const pinsComp = entity.components.WiredPins;
pinsComp.slots[0].value = signalComp.signal;
if (pinsComp) {
pinsComp.slots[0].value = signalComp.signal;
}
} }
} }
@ -56,19 +54,20 @@ export class ConstantSignalSystem extends GameSystemWithFilter {
label: fillInLinkIntoTranslation(T.dialogs.editSignal.descShortKey, THIRDPARTY_URLS.shapeViewer), label: fillInLinkIntoTranslation(T.dialogs.editSignal.descShortKey, THIRDPARTY_URLS.shapeViewer),
placeholder: "", placeholder: "",
defaultValue: "", defaultValue: "",
validator: val => this.parseSignalCode(entity.components.ConstantSignal.type, val), validator: val => this.parseSignalCode(entity, val),
}); });
const items = [...Object.values(COLOR_ITEM_SINGLETONS)]; const items = [...Object.values(COLOR_ITEM_SINGLETONS)];
if (entity.components.ConstantSignal.type === enumConstantSignalType.wired) { if (entity.components.WiredPins) {
items.unshift(BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON); items.unshift(BOOL_FALSE_SINGLETON, BOOL_TRUE_SINGLETON);
items.push( items.push(
this.root.shapeDefinitionMgr.getShapeItemFromShortKey( this.root.shapeDefinitionMgr.getShapeItemFromShortKey(
this.root.gameMode.getBlueprintShapeKey() this.root.gameMode.getBlueprintShapeKey()
) )
); );
} else if (entity.components.ConstantSignal.type === enumConstantSignalType.wireless) { } else {
// producer which can produce virtually anything
const shapes = ["CuCuCuCu", "RuRuRuRu", "WuWuWuWu", "SuSuSuSu"]; const shapes = ["CuCuCuCu", "RuRuRuRu", "WuWuWuWu", "SuSuSuSu"];
items.unshift( items.unshift(
...shapes.reverse().map(key => this.root.shapeDefinitionMgr.getShapeItemFromShortKey(key)) ...shapes.reverse().map(key => this.root.shapeDefinitionMgr.getShapeItemFromShortKey(key))
@ -129,10 +128,7 @@ export class ConstantSignalSystem extends GameSystemWithFilter {
if (itemInput.chosenItem) { if (itemInput.chosenItem) {
constantComp.signal = itemInput.chosenItem; constantComp.signal = itemInput.chosenItem;
} else { } else {
constantComp.signal = this.parseSignalCode( constantComp.signal = this.parseSignalCode(entity, signalValueInput.getValue());
entity.components.ConstantSignal.type,
signalValueInput.getValue()
);
} }
}; };
@ -171,11 +167,11 @@ export class ConstantSignalSystem extends GameSystemWithFilter {
/** /**
* Tries to parse a signal code * Tries to parse a signal code
* @param {string} type * @param {Entity} entity
* @param {string} code * @param {string} code
* @returns {BaseItem} * @returns {BaseItem}
*/ */
parseSignalCode(type, code) { parseSignalCode(entity, code) {
if (!this.root || !this.root.shapeDefinitionMgr) { if (!this.root || !this.root.shapeDefinitionMgr) {
// Stale reference // Stale reference
return null; return null;
@ -188,7 +184,7 @@ export class ConstantSignalSystem extends GameSystemWithFilter {
return COLOR_ITEM_SINGLETONS[codeLower]; return COLOR_ITEM_SINGLETONS[codeLower];
} }
if (type === enumConstantSignalType.wired) { if (entity.components.WiredPins) {
if (code === "1" || codeLower === "true") { if (code === "1" || codeLower === "true") {
return BOOL_TRUE_SINGLETON; return BOOL_TRUE_SINGLETON;
} }

View File

@ -15,14 +15,12 @@ export class ItemProducerSystem extends GameSystemWithFilter {
update() { update() {
for (let i = 0; i < this.allEntities.length; ++i) { for (let i = 0; i < this.allEntities.length; ++i) {
const entity = this.allEntities[i]; const entity = this.allEntities[i];
const producerComp = entity.components.ItemProducer;
const ejectorComp = entity.components.ItemEjector; const ejectorComp = entity.components.ItemEjector;
const pinsComp = entity.components.WiredPins;
if (producerComp.isWireless()) { if (!pinsComp) {
continue; continue;
} }
const pinsComp = entity.components.WiredPins;
const pin = pinsComp.slots[0]; const pin = pinsComp.slots[0];
const network = pin.linkedNetwork; const network = pin.linkedNetwork;

1
src/js/globals.d.ts vendored
View File

@ -20,6 +20,7 @@ declare const G_ALL_UI_IMAGES: Array<string>;
declare const G_IS_RELEASE: boolean; declare const G_IS_RELEASE: boolean;
declare const G_CHINA_VERSION: boolean; declare const G_CHINA_VERSION: boolean;
declare const G_WEGAME_VERSION: boolean;
// Polyfills // Polyfills
declare interface String { declare interface String {

View File

@ -3,10 +3,10 @@ import { Application } from "../application";
/* typehints:end */ /* typehints:end */
import { createLogger } from "../core/logging"; import { createLogger } from "../core/logging";
import { compressX64 } from "../core/lzstring"; import { compressX64 } from "../core/lzstring";
import { getIPCRenderer } from "../core/utils";
import { T } from "../translations"; import { T } from "../translations";
const logger = createLogger("puzzle-api"); const logger = createLogger("puzzle-api");
const rusha = require("rusha");
export class ClientAPI { export class ClientAPI {
/** /**
@ -21,15 +21,6 @@ export class ClientAPI {
* @type {string|null} * @type {string|null}
*/ */
this.token = null; this.token = null;
this.syncToken = window.localStorage.getItem("tmp.syncToken");
if (!this.syncToken) {
this.syncToken = rusha
.createHash()
.update(new Date().getTime() + "=" + Math.random())
.digest("hex");
window.localStorage.setItem("tmp.syncToken", this.syncToken);
}
} }
getEndpoint() { getEndpoint() {
@ -109,12 +100,30 @@ export class ClientAPI {
* @returns {Promise<{token: string}>} * @returns {Promise<{token: string}>}
*/ */
apiTryLogin() { apiTryLogin() {
return this._request("/v1/public/login", { if (!G_IS_STANDALONE) {
method: "POST", const token = window.prompt(
body: { "Please enter the auth token for the puzzle DLC (If you have none, you can't login):"
token: this.syncToken, );
return Promise.resolve({ token });
}
const renderer = getIPCRenderer();
return renderer.invoke("steam:get-ticket").then(
ticket => {
logger.log("Got auth ticket:", ticket);
return this._request("/v1/public/login", {
method: "POST",
body: {
token: ticket,
},
});
}, },
}); err => {
logger.error("Failed to get auth ticket from steam: ", err);
throw err;
}
);
} }
/** /**

View File

@ -53,6 +53,10 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface {
initialize() { initialize() {
this.syncKey = null; this.syncKey = null;
if (G_WEGAME_VERSION) {
return;
}
setInterval(() => this.sendTimePoints(), 60 * 1000); setInterval(() => this.sendTimePoints(), 60 * 1000);
// Retrieve sync key from player // Retrieve sync key from player
@ -136,6 +140,10 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface {
* @param {string} value * @param {string} value
*/ */
sendGameEvent(category, value) { sendGameEvent(category, value) {
if (G_WEGAME_VERSION) {
return;
}
if (!this.syncKey) { if (!this.syncKey) {
logger.warn("Can not send event due to missing sync key"); logger.warn("Can not send event due to missing sync key");
return; return;

View File

@ -105,6 +105,10 @@ export class SteamAchievementProvider extends AchievementProviderInterface {
return Promise.resolve(); return Promise.resolve();
} }
if (G_WEGAME_VERSION) {
return Promise.resolve();
}
this.ipc = getIPCRenderer(); this.ipc = getIPCRenderer();
return this.ipc.invoke("steam:is-initialized").then(initialized => { return this.ipc.invoke("steam:is-initialized").then(initialized => {
@ -125,6 +129,10 @@ export class SteamAchievementProvider extends AchievementProviderInterface {
activate(key) { activate(key) {
let promise; let promise;
if (G_WEGAME_VERSION) {
return Promise.resolve();
}
if (!this.initialized) { if (!this.initialized) {
promise = Promise.resolve(); promise = Promise.resolve();
} else { } else {

View File

@ -7,6 +7,24 @@ const logger = createLogger("electron-storage");
export class StorageImplElectron extends StorageInterface { export class StorageImplElectron extends StorageInterface {
constructor(app) { constructor(app) {
super(app); super(app);
/** @type {Object.<number, {resolve:Function, reject: Function}>} */
this.jobs = {};
this.jobId = 0;
getIPCRenderer().on("fs-response", (event, arg) => {
const id = arg.id;
if (!this.jobs[id]) {
logger.warn("Got unhandled FS response, job not known:", id);
return;
}
const { resolve, reject } = this.jobs[id];
if (arg.result.success) {
resolve(arg.result.data);
} else {
reject(arg.result.error);
}
});
} }
initialize() { initialize() {
@ -15,53 +33,43 @@ export class StorageImplElectron extends StorageInterface {
writeFileAsync(filename, contents) { writeFileAsync(filename, contents) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getIPCRenderer() // ipcMain
.invoke("fs-job", { const jobId = ++this.jobId;
type: "write", this.jobs[jobId] = { resolve, reject };
filename,
contents, getIPCRenderer().send("fs-job", {
}) type: "write",
.then(result => { filename,
if (result.success) { contents,
resolve(result.data); id: jobId,
} else { });
reject(result.error);
}
});
}); });
} }
readFileAsync(filename) { readFileAsync(filename) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getIPCRenderer() // ipcMain
.invoke("fs-job", { const jobId = ++this.jobId;
type: "read", this.jobs[jobId] = { resolve, reject };
filename,
}) getIPCRenderer().send("fs-job", {
.then(result => { type: "read",
if (result.success) { filename,
resolve(result.data); id: jobId,
} else { });
reject(result.error);
}
});
}); });
} }
deleteFileAsync(filename) { deleteFileAsync(filename) {
return new Promise((resolve, reject) => { return new Promise((resolve, reject) => {
getIPCRenderer() // ipcMain
.invoke("fs-job", { const jobId = ++this.jobId;
type: "delete", this.jobs[jobId] = { resolve, reject };
filename, getIPCRenderer().send("fs-job", {
}) type: "delete",
.then(result => { filename,
if (result.success) { id: jobId,
resolve(result.data); });
} else {
reject(result.error);
}
});
}); });
} }
} }

View File

@ -10,6 +10,10 @@ const logger = createLogger("electron-wrapper");
export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser {
initialize() { initialize() {
this.dlcs = {
puzzle: false,
};
this.steamOverlayCanvasFix = document.createElement("canvas"); this.steamOverlayCanvasFix = document.createElement("canvas");
this.steamOverlayCanvasFix.width = 1; this.steamOverlayCanvasFix.width = 1;
this.steamOverlayCanvasFix.height = 1; this.steamOverlayCanvasFix.height = 1;
@ -23,9 +27,9 @@ export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser {
this.app.storage = new StorageImplElectron(this); this.app.storage = new StorageImplElectron(this);
this.app.achievementProvider = new SteamAchievementProvider(this.app); this.app.achievementProvider = new SteamAchievementProvider(this.app);
return this.initializeAchievementProvider().then(() => return this.initializeAchievementProvider()
PlatformWrapperInterface.prototype.initialize.call(this) .then(() => this.initializeDlcStatus())
); .then(() => PlatformWrapperInterface.prototype.initialize.call(this));
} }
steamOverlayFixRedrawCanvas() { steamOverlayFixRedrawCanvas() {
@ -66,6 +70,26 @@ export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser {
}); });
} }
initializeDlcStatus() {
const renderer = getIPCRenderer();
if (G_WEGAME_VERSION) {
return Promise.resolve();
}
logger.log("Checking DLC ownership ...");
// @todo: Don't hardcode the app id
return renderer.invoke("steam:check-app-ownership", 1625400).then(
res => {
logger.log("Got DLC ownership:", res);
this.dlcs.puzzle = Boolean(res);
},
err => {
logger.error("Failed to get DLC ownership:", err);
}
);
}
getSupportsFullscreen() { getSupportsFullscreen() {
return true; return true;
} }

View File

@ -35,6 +35,10 @@ export const MUSIC = {
menu: "menu", menu: "menu",
}; };
if (G_IS_STANDALONE || G_IS_DEV) {
MUSIC.puzzle = "puzzle-full";
}
export class SoundInstanceInterface { export class SoundInstanceInterface {
constructor(key, url) { constructor(key, url) {
this.key = key; this.key = key;

View File

@ -2,7 +2,6 @@
import { GameRoot } from "../game/root"; import { GameRoot } from "../game/root";
import { PuzzleGameMode } from "../game/modes/puzzle"; import { PuzzleGameMode } from "../game/modes/puzzle";
/* typehints:end */ /* typehints:end */
import { enumConstantSignalType } from "../game/components/constant_signal";
import { StaticMapEntityComponent } from "../game/components/static_map_entity"; import { StaticMapEntityComponent } from "../game/components/static_map_entity";
import { ShapeItem } from "../game/items/shape_item"; import { ShapeItem } from "../game/items/shape_item";
import { Vector } from "../core/vector"; import { Vector } from "../core/vector";
@ -38,7 +37,6 @@ export class PuzzleSerializer {
const signalComp = entity.components.ConstantSignal; const signalComp = entity.components.ConstantSignal;
if (signalComp) { if (signalComp) {
assert(signalComp.type === enumConstantSignalType.wireless, "not a wireless signal");
assert(["shape", "color"].includes(signalComp.signal.getItemType()), "not a shape signal"); assert(["shape", "color"].includes(signalComp.signal.getItemType()), "not a shape signal");
buildings.push({ buildings.push({
type: "emitter", type: "emitter",
@ -85,12 +83,13 @@ export class PuzzleSerializer {
const handles = root.hud.parts.buildingsToolbar.buildingHandles; const handles = root.hud.parts.buildingsToolbar.buildingHandles;
const ids = gMetaBuildingRegistry.getAllIds(); const ids = gMetaBuildingRegistry.getAllIds();
/** @type {Array<typeof MetaBuilding>} */ /** @type {Array<string>} */
let excludedBuildings = []; let excludedBuildings = [];
for (let i = 0; i < ids.length; ++i) { for (let i = 0; i < ids.length; ++i) {
const handle = handles[ids[i]]; const handle = handles[ids[i]];
if (handle && handle.puzzleLocked) { if (handle && handle.puzzleLocked) {
excludedBuildings.push(handle.class); // @ts-ignore
excludedBuildings.push(handle.metaBuilding.getId());
} }
} }

View File

@ -87,7 +87,7 @@ import { MetaBuilding } from "../game/meta_building";
* version: number; * version: number;
* bounds: { w: number; h: number; }, * bounds: { w: number; h: number; },
* buildings: (PuzzleGameBuildingGoal | PuzzleGameBuildingConstantProducer | PuzzleGameBuildingBlock)[], * buildings: (PuzzleGameBuildingGoal | PuzzleGameBuildingConstantProducer | PuzzleGameBuildingBlock)[],
* excludedBuildings: Array<typeof MetaBuilding>, * excludedBuildings: Array<string>,
* }} PuzzleGameData * }} PuzzleGameData
*/ */

View File

@ -275,7 +275,7 @@ export function deserializeSchema(obj, schema, data, baseclassErrorResult = null
return baseclassErrorResult; return baseclassErrorResult;
} }
if (!data) { if (data === null || typeof data === "undefined") {
logger.error("Got 'NULL' data for", obj, "and schema", schema, "!"); logger.error("Got 'NULL' data for", obj, "and schema", schema, "!");
return "Got null data"; return "Got null data";
} }

View File

@ -2,6 +2,7 @@ import { TextualGameState } from "../core/textual_game_state";
import { T } from "../translations"; import { T } from "../translations";
import { THIRDPARTY_URLS } from "../core/config"; import { THIRDPARTY_URLS } from "../core/config";
import { cachebust } from "../core/cachebust"; import { cachebust } from "../core/cachebust";
import { getLogoSprite } from "../core/background_resources_loader";
export class AboutState extends TextualGameState { export class AboutState extends TextualGameState {
constructor() { constructor() {
@ -15,9 +16,7 @@ export class AboutState extends TextualGameState {
getMainContentHTML() { getMainContentHTML() {
return ` return `
<div class="head"> <div class="head">
<img src="${cachebust( <img src="${cachebust("res/" + getLogoSprite())}" alt="shapez.io Logo">
G_CHINA_VERSION ? "res/logo_cn.png" : "res/logo.png"
)}" alt="shapez.io Logo">
</div> </div>
<div class="text"> <div class="text">
${T.about.body ${T.about.body

View File

@ -104,6 +104,9 @@ export class InGameState extends GameState {
} }
getThemeMusic() { getThemeMusic() {
if (this.creationPayload.gameModeId && this.creationPayload.gameModeId.includes("puzzle")) {
return MUSIC.puzzle;
}
return MUSIC.theme; return MUSIC.theme;
} }

View File

@ -1,3 +1,4 @@
import { getLogoSprite } from "../core/background_resources_loader";
import { cachebust } from "../core/cachebust"; import { cachebust } from "../core/cachebust";
import { A_B_TESTING_LINK_TYPE, globalConfig, THIRDPARTY_URLS } from "../core/config"; import { A_B_TESTING_LINK_TYPE, globalConfig, THIRDPARTY_URLS } from "../core/config";
import { GameState } from "../core/game_state"; import { GameState } from "../core/game_state";
@ -15,8 +16,8 @@ import {
startFileChoose, startFileChoose,
waitNextFrame, waitNextFrame,
} from "../core/utils"; } from "../core/utils";
import { enumGameModeIds } from "../game/game_mode";
import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs"; import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs";
import { PlatformWrapperImplElectron } from "../platform/electron/wrapper";
import { getApplicationSettingById } from "../profile/application_settings"; import { getApplicationSettingById } from "../profile/application_settings";
import { T } from "../translations"; import { T } from "../translations";
@ -41,10 +42,15 @@ export class MainMenuState extends GameState {
const showDemoBadges = this.app.restrictionMgr.getIsStandaloneMarketingActive(); const showDemoBadges = this.app.restrictionMgr.getIsStandaloneMarketingActive();
const puzzleDlc =
G_IS_STANDALONE &&
/** @type { PlatformWrapperImplElectron
}*/ (this.app.platformWrapper).dlcs.puzzle;
return ` return `
<div class="topButtons"> <div class="topButtons">
${ ${
G_CHINA_VERSION G_CHINA_VERSION || G_WEGAME_VERSION
? "" ? ""
: `<button class="languageChoose" data-languageicon="${this.app.settings.getLanguage()}"></button>` : `<button class="languageChoose" data-languageicon="${this.app.settings.getLanguage()}"></button>`
} }
@ -64,31 +70,67 @@ export class MainMenuState extends GameState {
</video> </video>
<div class="logo"> <div class="logo">
<img src="${cachebust( <img src="${cachebust("res/" + getLogoSprite())}" alt="shapez.io Logo">
G_CHINA_VERSION ? "res/logo_cn.png" : "res/logo.png" ${
)}" alt="shapez.io Logo"> G_WEGAME_VERSION
<span class="updateLabel">v${G_BUILD_VERSION} - Puzzle DLC!</span> ? ""
: `<span class="updateLabel">v${G_BUILD_VERSION} - Puzzle DLC!</span>`
}
</div> </div>
<div class="mainWrapper ${showDemoBadges ? "demo" : "noDemo"}"> <div class="mainWrapper ${showDemoBadges ? "demo" : "noDemo"}" data-columns="${
G_IS_STANDALONE ? 2 : showDemoBadges ? 2 : 1
}">
<div class="sideContainer"> <div class="sideContainer">
${showDemoBadges ? `<div class="standaloneBanner">${bannerHtml}</div>` : ""} ${showDemoBadges ? `<div class="standaloneBanner">${bannerHtml}</div>` : ""}
</div> </div>
<div class="mainContainer"> <div class="mainContainer">
${ ${
isSupportedBrowser() G_IS_STANDALONE || isSupportedBrowser()
? "" ? ""
: `<div class="browserWarning">${T.mainMenu.browserWarning}</div>` : `<div class="browserWarning">${T.mainMenu.browserWarning}</div>`
} }
<div class="buttons"></div> <div class="buttons"></div>
</div> </div>
<div class="bottomContainer">
<div class="buttons"></div> ${
</div> !G_WEGAME_VERSION && G_IS_STANDALONE && puzzleDlc
? `
<div class="puzzleContainer">
<img class="dlcLogo" src="${cachebust(
G_CHINA_VERSION || G_WEGAME_VERSION
? "res/puzzle_dlc_logo_china.png"
: "res/puzzle_dlc_logo.png"
)}" alt="shapez.io Logo">
<button class="styledButton puzzleDlcPlayButton">${T.mainMenu.play}</button>
</div>`
: ""
}
${
!G_WEGAME_VERSION && G_IS_STANDALONE && !puzzleDlc
? `
<div class="puzzleContainer notOwned">
<img class="dlcLogo" src="${cachebust(
G_CHINA_VERSION || G_WEGAME_VERSION
? "res/puzzle_dlc_logo_china.png"
: "res/puzzle_dlc_logo.png"
)}" alt="shapez.io Logo">
<p>${T.mainMenu.puzzleDlcText}</p>
<button class="styledButton puzzleDlcGetButton">${
T.mainMenu.puzzleDlcWishlist
}</button>
</div>`
: ""
}
</div> </div>
<div class="footer ${G_CHINA_VERSION ? "china" : ""}"> ${
G_WEGAME_VERSION
? "<div class='footer wegame'></div>"
: `
<div class="footer ${G_CHINA_VERSION ? "china" : ""} ">
${ ${
G_CHINA_VERSION G_CHINA_VERSION
@ -119,6 +161,8 @@ export class MainMenuState extends GameState {
'<a class="producerLink" target="_blank">Tobias Springer</a>' '<a class="producerLink" target="_blank">Tobias Springer</a>'
)}</div> )}</div>
</div> </div>
`
}
`; `;
} }
@ -232,7 +276,7 @@ export class MainMenuState extends GameState {
this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked); this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked);
if (!G_CHINA_VERSION) { if (!G_CHINA_VERSION && !G_WEGAME_VERSION) {
this.trackClicks(qs(".languageChoose"), this.onLanguageChooseClicked); this.trackClicks(qs(".languageChoose"), this.onLanguageChooseClicked);
this.trackClicks(qs(".redditLink"), this.onRedditClicked); this.trackClicks(qs(".redditLink"), this.onRedditClicked);
this.trackClicks(qs(".changelog"), this.onChangelogClicked); this.trackClicks(qs(".changelog"), this.onChangelogClicked);
@ -252,14 +296,16 @@ export class MainMenuState extends GameState {
} }
const discordLink = this.htmlElement.querySelector(".discordLink"); const discordLink = this.htmlElement.querySelector(".discordLink");
this.trackClicks( if (discordLink) {
discordLink, this.trackClicks(
() => { discordLink,
this.app.analytics.trackUiClick("main_menu_link_discord"); () => {
this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.discord); this.app.analytics.trackUiClick("main_menu_link_discord");
}, this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.discord);
{ preventClick: true } },
); { preventClick: true }
);
}
const githubLink = this.htmlElement.querySelector(".githubLink"); const githubLink = this.htmlElement.querySelector(".githubLink");
if (githubLink) { if (githubLink) {
@ -274,9 +320,25 @@ export class MainMenuState extends GameState {
} }
const producerLink = this.htmlElement.querySelector(".producerLink"); const producerLink = this.htmlElement.querySelector(".producerLink");
this.trackClicks(producerLink, () => this.app.platformWrapper.openExternalLink("https://tobspr.io"), { if (producerLink) {
preventClick: true, this.trackClicks(
}); producerLink,
() => this.app.platformWrapper.openExternalLink("https://tobspr.io"),
{
preventClick: true,
}
);
}
const puzzleModeButton = qs(".puzzleDlcPlayButton");
if (puzzleModeButton) {
this.trackClicks(puzzleModeButton, () => this.onPuzzleModeButtonClicked());
}
const puzzleWishlistButton = qs(".puzzleDlcGetButton");
if (puzzleWishlistButton) {
this.trackClicks(puzzleWishlistButton, () => this.onPuzzleWishlistButtonClicked());
}
} }
renderMainMenu() { renderMainMenu() {
@ -313,14 +375,6 @@ export class MainMenuState extends GameState {
this.trackClicks(playBtn, this.onPlayButtonClicked); this.trackClicks(playBtn, this.onPlayButtonClicked);
buttonContainer.appendChild(importButtonElement); buttonContainer.appendChild(importButtonElement);
} }
const bottomButtonContainer = this.htmlElement.querySelector(".bottomContainer .buttons");
removeAllChildren(bottomButtonContainer);
const puzzleModeButton = makeButton(bottomButtonContainer, ["styledButton"], T.mainMenu.puzzleMode);
bottomButtonContainer.appendChild(puzzleModeButton);
this.trackClicks(puzzleModeButton, () => this.onPuzzleModeButtonClicked());
} }
onPuzzleModeButtonClicked(force = false) { onPuzzleModeButtonClicked(force = false) {
@ -341,6 +395,12 @@ export class MainMenuState extends GameState {
}); });
} }
onPuzzleWishlistButtonClicked() {
this.app.platformWrapper.openExternalLink(
THIRDPARTY_URLS.puzzleDlcStorePage + "?ref=mmsl2&prc=" + A_B_TESTING_LINK_TYPE
);
}
onBackButtonClicked() { onBackButtonClicked() {
this.renderMainMenu(); this.renderMainMenu();
this.renderSavegames(); this.renderSavegames();

View File

@ -1,6 +1,7 @@
import { GameState } from "../core/game_state"; import { GameState } from "../core/game_state";
import { cachebust } from "../core/cachebust"; import { cachebust } from "../core/cachebust";
import { THIRDPARTY_URLS } from "../core/config"; import { THIRDPARTY_URLS } from "../core/config";
import { getLogoSprite } from "../core/background_resources_loader";
export class MobileWarningState extends GameState { export class MobileWarningState extends GameState {
constructor() { constructor() {
@ -10,9 +11,7 @@ export class MobileWarningState extends GameState {
getInnerHTML() { getInnerHTML() {
return ` return `
<img class="logo" src="${cachebust( <img class="logo" src="${cachebust("res/" + getLogoSprite())}" alt="shapez.io Logo">
G_CHINA_VERSION ? "res/logo_cn.png" : "res/logo.png"
)}" alt="shapez.io Logo">
<p> <p>
I'm sorry, but shapez.io is not available on mobile devices yet! I'm sorry, but shapez.io is not available on mobile devices yet!

View File

@ -1,4 +1,5 @@
import { CHANGELOG } from "../changelog"; import { CHANGELOG } from "../changelog";
import { getLogoSprite } from "../core/background_resources_loader";
import { cachebust } from "../core/cachebust"; import { cachebust } from "../core/cachebust";
import { globalConfig } from "../core/config"; import { globalConfig } from "../core/config";
import { GameState } from "../core/game_state"; import { GameState } from "../core/game_state";
@ -19,7 +20,7 @@ export class PreloadState extends GameState {
return ` return `
<div class="loadingImage"></div> <div class="loadingImage"></div>
<div class="loadingStatus"> <div class="loadingStatus">
<span class="desc">${G_CHINA_VERSION ? "加载中" : "Booting"}</span> <span class="desc">${G_CHINA_VERSION || G_WEGAME_VERSION ? "加载中" : "Booting"}</span>
</div> </div>
</div> </div>
<span class="prefab_GameHint"></span> <span class="prefab_GameHint"></span>
@ -112,7 +113,7 @@ export class PreloadState extends GameState {
.then(() => this.setStatus("Initializing language")) .then(() => this.setStatus("Initializing language"))
.then(() => { .then(() => {
if (G_CHINA_VERSION) { if (G_CHINA_VERSION || G_WEGAME_VERSION) {
return this.app.settings.updateLanguage("zh-CN"); return this.app.settings.updateLanguage("zh-CN");
} }
@ -164,7 +165,7 @@ export class PreloadState extends GameState {
return; return;
} }
if (G_CHINA_VERSION) { if (G_CHINA_VERSION || G_WEGAME_VERSION) {
return; return;
} }
@ -227,7 +228,7 @@ export class PreloadState extends GameState {
} }
update() { update() {
if (G_CHINA_VERSION) { if (G_CHINA_VERSION || G_WEGAME_VERSION) {
return; return;
} }
const now = performance.now(); const now = performance.now();
@ -260,7 +261,7 @@ export class PreloadState extends GameState {
*/ */
setStatus(text) { setStatus(text) {
logger.log("✅ " + text); logger.log("✅ " + text);
if (G_CHINA_VERSION) { if (G_CHINA_VERSION || G_WEGAME_VERSION) {
return Promise.resolve(); return Promise.resolve();
} }
this.currentStatus = text; this.currentStatus = text;
@ -278,9 +279,7 @@ export class PreloadState extends GameState {
subElement.innerHTML = ` subElement.innerHTML = `
<div class="logo"> <div class="logo">
<img src="${cachebust( <img src="${cachebust("res/" + getLogoSprite())}" alt="Shapez.io Logo">
G_CHINA_VERSION ? "res/logo_cn.png" : "res/logo.png"
)}" alt="Shapez.io Logo">
</div> </div>
<div class="failureInner"> <div class="failureInner">
<div class="errorHeader"> <div class="errorHeader">

View File

@ -6,6 +6,7 @@ import { TextualGameState } from "../core/textual_game_state";
import { formatBigNumberFull } from "../core/utils"; import { formatBigNumberFull } from "../core/utils";
import { enumGameModeIds } from "../game/game_mode"; import { enumGameModeIds } from "../game/game_mode";
import { ShapeDefinition } from "../game/shape_definition"; import { ShapeDefinition } from "../game/shape_definition";
import { MUSIC } from "../platform/sound";
import { Savegame } from "../savegame/savegame"; import { Savegame } from "../savegame/savegame";
import { T } from "../translations"; import { T } from "../translations";
@ -59,6 +60,10 @@ export class PuzzleMenuState extends TextualGameState {
this.activeCategory = ""; this.activeCategory = "";
} }
getThemeMusic() {
return MUSIC.puzzle;
}
getStateHeaderTitle() { getStateHeaderTitle() {
return T.puzzleMenu.title; return T.puzzleMenu.title;
} }
@ -186,7 +191,10 @@ export class PuzzleMenuState extends TextualGameState {
const difficulty = document.createElement("div"); const difficulty = document.createElement("div");
difficulty.classList.add("difficulty"); difficulty.classList.add("difficulty");
const completionPercentage = Math.round((puzzle.completions / puzzle.downloads) * 100.0); const completionPercentage = Math.max(
0,
Math.min(100, Math.round((puzzle.completions / puzzle.downloads) * 100.0))
);
difficulty.innerText = completionPercentage + "%"; difficulty.innerText = completionPercentage + "%";
stats.appendChild(difficulty); stats.appendChild(difficulty);
@ -201,10 +209,13 @@ export class PuzzleMenuState extends TextualGameState {
} }
} }
const downloads = document.createElement("div"); if (this.activeCategory === "mine") {
downloads.classList.add("downloads"); const downloads = document.createElement("div");
downloads.innerText = String(puzzle.downloads); downloads.classList.add("downloads");
stats.appendChild(downloads); downloads.innerText = String(puzzle.downloads);
stats.appendChild(downloads);
stats.classList.add("withDownloads");
}
const likes = document.createElement("div"); const likes = document.createElement("div");
likes.classList.add("likes"); likes.classList.add("likes");
@ -235,7 +246,7 @@ export class PuzzleMenuState extends TextualGameState {
/** /**
* *
* @param {*} category * @param {*} category
* @returns {Promise<import("../savegame/savegame_typedefs").PuzzleMetadata[]} * @returns {Promise<import("../savegame/savegame_typedefs").PuzzleMetadata[]>}
*/ */
getPuzzlesForCategory(category) { getPuzzlesForCategory(category) {
if (category === "levels") { if (category === "levels") {

View File

@ -30,7 +30,7 @@ export class SettingsState extends TextualGameState {
<div class="other"> <div class="other">
${ ${
G_CHINA_VERSION G_CHINA_VERSION || G_WEGAME_VERSION
? "" ? ""
: ` : `
<button class="styledButton about">${T.about.title}</button> <button class="styledButton about">${T.about.title}</button>
@ -74,7 +74,7 @@ export class SettingsState extends TextualGameState {
for (let i = 0; i < allApplicationSettings.length; ++i) { for (let i = 0; i < allApplicationSettings.length; ++i) {
const setting = allApplicationSettings[i]; const setting = allApplicationSettings[i];
if (G_CHINA_VERSION && setting.id === "language") { if ((G_CHINA_VERSION || G_WEGAME_VERSION) && setting.id === "language") {
continue; continue;
} }
@ -105,7 +105,7 @@ export class SettingsState extends TextualGameState {
onEnter(payload) { onEnter(payload) {
this.renderBuildText(); this.renderBuildText();
if (!G_CHINA_VERSION) { if (!G_CHINA_VERSION && !G_WEGAME_VERSION) {
this.trackClicks(this.htmlElement.querySelector(".about"), this.onAboutClicked, { this.trackClicks(this.htmlElement.querySelector(".about"), this.onAboutClicked, {
preventDefault: false, preventDefault: false,
}); });
@ -144,7 +144,7 @@ export class SettingsState extends TextualGameState {
initSettings() { initSettings() {
allApplicationSettings.forEach(setting => { allApplicationSettings.forEach(setting => {
if (G_CHINA_VERSION && setting.id === "language") { if ((G_CHINA_VERSION || G_WEGAME_VERSION) && setting.id === "language") {
return; return;
} }

View File

@ -50,6 +50,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Version title: Demo Version
intro: Get the standalone to unlock all features! intro: Get the standalone to unlock all features!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Level <x> savegameLevel: Level <x>
savegameLevelUnknown: Unknown Level savegameLevelUnknown: Unknown Level
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: View Update viewUpdate: View Update
showUpgrades: Show Upgrades showUpgrades: Show Upgrades
showKeybindings: Show Keybindings showKeybindings: Show Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Import Error title: Import Error
text: "Failed to import your savegame:" text: "Failed to import your savegame:"
@ -179,6 +188,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Move moveMap: Move
@ -200,6 +270,7 @@ ingame:
clearSelection: Clear selection clearSelection: Clear selection
pipette: Pipette pipette: Pipette
switchLayers: Switch layers switchLayers: Switch layers
clearBelts: Clear belts
colors: colors:
red: Red red: Red
green: Green green: Green
@ -347,6 +418,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Belts, Distributor & Tunnels name: Belts, Distributor & Tunnels
@ -553,6 +662,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Cutting Shapes title: Cutting Shapes
@ -954,6 +1075,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: About this Game title: About this Game
body: >- body: >-
@ -1039,3 +1164,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: ESPAI space: ESPAI
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo - Versió de prova 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!
@ -73,6 +74,11 @@ mainMenu:
savegameLevel: Nivell <x> savegameLevel: Nivell <x>
savegameLevelUnknown: Nivell desconegut savegameLevelUnknown: Nivell desconegut
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Veure actualitzacions viewUpdate: Veure actualitzacions
showUpgrades: Mostrar millores showUpgrades: Mostrar millores
showKeybindings: Mostrar dreceres de teclat showKeybindings: Mostrar dreceres de teclat
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Error en importar title: Error en importar
text: "Ha ocurrit un error intentant importar la teva partida:" text: "Ha ocurrit un error intentant importar la teva partida:"
@ -187,6 +196,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Moure moveMap: Moure
@ -208,6 +278,7 @@ ingame:
clearSelection: Buidar selecció clearSelection: Buidar selecció
pipette: Pipeta pipette: Pipeta
switchLayers: Intercanviar capes switchLayers: Intercanviar capes
clearBelts: Clear belts
colors: colors:
red: Roig red: Roig
green: Verd green: Verd
@ -357,6 +428,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Cintes transportadores, Distribuidors i Túnels name: Cintes transportadores, Distribuidors i Túnels
@ -569,6 +678,18 @@ buildings:
name: Productor d'ítems name: Productor d'ítems
description: Només avaliable en mode "sandbox", emet la senyal de la capa de description: Només avaliable en mode "sandbox", emet la senyal de la capa de
cablejat a la capa normal. cablejat a la capa normal.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Tallar figures title: Tallar figures
@ -981,6 +1102,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Sobre aquest Joc title: Sobre aquest Joc
body: >- body: >-
@ -1081,3 +1206,57 @@ tips:
- Premeu F4 per mostrar la vostra tarifa FPS i Tick. - Premeu F4 per mostrar la vostra tarifa FPS i Tick.
- Premeu F4 dues vegades per mostrar el mosaic del ratolí i la càmera. - 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. - Podeu fer clic a una forma fixada al costat esquerre per desenganxar-la.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -10,14 +10,14 @@ steamPage:
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í! Zatímco na začátku tvary pouze zpracováváte, později je musíte obarvit - těžbou a mícháním barev! 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í! Zatímco na začátku tvary pouze zpracováváte, později je musíte obarvit - těžbou a mícháním barev!
Koupením hry na platformě Steam získáte přístup k plné verzi hry, ale také můžete nejdříve hrát demo verzi na shapez.io a až potom se rozhodnout! Koupením hry na platformě Steam získáte přístup k plné verzi hry, ale také můžete nejdříve hrát demo verzi na shapez.io a až potom se rozhodnout!
what_others_say: What people say about shapez.io what_others_say: Co o shapez.io říkají lidé
nothernlion_comment: This game is great - I'm having a wonderful time playing, nothernlion_comment: Tato hra je úžasná - Užívám si čas strávený hraním této hry,
and time has flown by. jen strašně rychle utekl.
notch_comment: Oh crap. I really should sleep, but I think I just figured out notch_comment: Sakra. Opravdu bych měl jít spát, ale myslím si, že jsem zrovna přišel na to,
how to make a computer in shapez.io jak v shapez.io vytvořit počítač.
steam_review_comment: This game has stolen my life and I don't want it back. steam_review_comment: Tato hra mi ukradla život a já ho nechci zpět.
Very chill factory game that won't let me stop making my lines more Odpočinková factory hra, která mi nedovolí přestat dělat mé výrobní linky více
efficient. efektivní.
global: global:
loading: Načítání loading: Načítání
error: Chyba error: Chyba
@ -49,6 +49,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Přihlašuji
demoBanners: demoBanners:
title: Demo verze title: Demo verze
intro: Získejte plnou verzi pro odemknutí všech funkcí a obsahu! intro: Získejte plnou verzi pro odemknutí všech funkcí a obsahu!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Úroveň <x> savegameLevel: Úroveň <x>
savegameLevelUnknown: Neznámá úroveň savegameLevelUnknown: Neznámá úroveň
savegameUnnamed: Nepojmenovaný savegameUnnamed: Nepojmenovaný
puzzleMode: Puzzle mód
back: Zpět
puzzleDlcText: Baví vás zmenšování a optimalizace továren? Pořiďte si nyní Puzzle
DLC na Steamu pro ještě více zábavy!
puzzleDlcWishlist: Přidejte si nyní na seznam přání!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Zobrazit aktualizaci viewUpdate: Zobrazit aktualizaci
showUpgrades: Zobrazit vylepšení showUpgrades: Zobrazit vylepšení
showKeybindings: Zobrazit klávesové zkratky showKeybindings: Zobrazit klávesové zkratky
retry: Opakovat
continue: Pokračovat
playOffline: Hrát offline
importSavegameError: importSavegameError:
title: Chyba Importu title: Chyba Importu
text: "Nepovedlo se importovat vaši uloženou hru:" text: "Nepovedlo se importovat vaši uloženou hru:"
@ -178,6 +187,67 @@ dialogs:
title: Dostupný tutoriál title: Dostupný tutoriál
desc: Pro tuto úroveň je k dispozici tutoriál, ale je dostupný pouze v desc: Pro tuto úroveň je k dispozici tutoriál, ale je dostupný pouze v
angličtině. Chtěli byste se na něj podívat? angličtině. Chtěli byste se na něj podívat?
editConstantProducer:
title: Nastavte tvar
puzzleLoadFailed:
title: Načítání puzzle selhalo
desc: "Bohužel nebylo možné puzzle načíst:"
submitPuzzle:
title: Odeslat puzzle
descName: "Pojmenujte svůj puzzle:"
descIcon: "Prosím zadejte unikátní krátký klíč, který bude zobrazen jako ikona
vašeho puzzle (Ten můžete vygenerovat <link>zde</link>, nebo vyberte jeden
z níže náhodně vybraných tvarů):"
placeholderName: Název puzzlu
puzzleResizeBadBuildings:
title: Změna velikosti není možná
desc: Zónu není možné více zmenšit, protože by některé budovy byly
mimo zónu.
puzzleLoadError:
title: Špatný puzzle
desc: "Načítání puzzlu selhalo:"
offlineMode:
title: Offline mód
desc: Nebylo možné kontaktovat herní servery, proto musí hra běžet v offline módu.
Ujistěte se, že máte aktivní připojení k internetu.
puzzleDownloadError:
title: Chyba stahování
desc: "Stažení puzzlu selhalo:"
puzzleSubmitError:
title: Chyba odeslání
desc: "Odeslání puzzlu selhalo:"
puzzleSubmitOk:
title: Puzzle zveřejněno
desc: Gratuluji! Vaše puzzle bylo zvěřejněno a je dostupné pro
ostatní hráče. Můžete ho najít v sekci "Má puzzle".
puzzleCreateOffline:
title: Offline mód
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Posun mapy moveMap: Posun mapy
@ -199,6 +269,7 @@ ingame:
clearSelection: Zrušit výběr clearSelection: Zrušit výběr
pipette: Kapátko pipette: Kapátko
switchLayers: Změnit vrstvy switchLayers: Změnit vrstvy
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Zmáčkněte <key> pro přepínání mezi variantami. cycleBuildingVariants: Zmáčkněte <key> pro přepínání mezi variantami.
hotkeyLabel: "Klávesová zkratka: <key>" hotkeyLabel: "Klávesová zkratka: <key>"
@ -347,7 +418,45 @@ ingame:
desc: Vyvíjím to ve svém volném čase! desc: Vyvíjím to ve svém volném čase!
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Získejte je všechny!
puzzleEditorSettings:
zoneTitle: Zóna
zoneWidth: Šířka
zoneHeight: Výška
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Pásy, distribuce a tunely name: Pásy, distribuce a tunely
@ -403,7 +512,7 @@ buildings:
name: Rotor name: Rotor
description: Otáčí tvary o 90 stupňů po směru hodinových ručiček. description: Otáčí tvary o 90 stupňů po směru hodinových ručiček.
ccw: ccw:
name: Rotor (opačný) name: Rotor (Opačný)
description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček. description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček.
rotate180: rotate180:
name: Rotor (180°) name: Rotor (180°)
@ -546,6 +655,18 @@ buildings:
name: Výrobník předmětů name: Výrobník předmětů
description: Dostupný pouze v sandboxovém módu, vydává daný signál z vrstvy description: Dostupný pouze v sandboxovém módu, vydává daný signál z vrstvy
kabelů na běžnou vrstvu. kabelů na běžnou vrstvu.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Řezání tvarů title: Řezání tvarů
@ -945,6 +1066,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: O hře title: O hře
body: >- body: >-
@ -1039,3 +1164,57 @@ tips:
- Stisknutím F4 zobrazíte FPS a rychlost ticků. - Stisknutím F4 zobrazíte FPS a rychlost ticků.
- Stisknutím F4 dvakrát zobrazíte souřadnici myši a kamery. - Stisknutím F4 dvakrát zobrazíte souřadnici myši a kamery.
- Můžete kliknout na připínáček vlevo vedle připnutého tvaru k jeho odepnutí. - Můžete kliknout na připínáček vlevo vedle připnutého tvaru k jeho odepnutí.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SKIFT/SHIFT shift: SKIFT/SHIFT
space: MELLEMRUM space: MELLEMRUM
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Version title: Demo Version
intro: Køb spillet for at få den fulde oplevelse! intro: Køb spillet for at få den fulde oplevelse!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Niveau <x> savegameLevel: Niveau <x>
savegameLevelUnknown: Ukendt Niveau savegameLevelUnknown: Ukendt Niveau
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Se Opdatering viewUpdate: Se Opdatering
showUpgrades: Vis Opgraderinger showUpgrades: Vis Opgraderinger
showKeybindings: Vis Keybindings showKeybindings: Vis Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Import Fejl title: Import Fejl
text: "Importering af gemt spil fejlede:" text: "Importering af gemt spil fejlede:"
@ -184,6 +193,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Bevæg dig moveMap: Bevæg dig
@ -205,6 +275,7 @@ ingame:
clearSelection: Ryd Selektion clearSelection: Ryd Selektion
pipette: Pipette pipette: Pipette
switchLayers: Skift Lag switchLayers: Skift Lag
clearBelts: Clear belts
colors: colors:
red: Rød red: Rød
green: Grøn green: Grøn
@ -352,6 +423,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Bælter, Fordelere & Tuneller name: Bælter, Fordelere & Tuneller
@ -557,6 +666,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Klippe Figurer title: Klippe Figurer
@ -963,6 +1084,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Om dette spil title: Om dette spil
body: >- body: >-
@ -1048,3 +1173,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -49,6 +49,7 @@ global:
escape: ESC escape: ESC
shift: UMSCH shift: UMSCH
space: LEER space: LEER
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo-Version title: Demo-Version
intro: Kauf die Vollversion für alle Features! intro: Kauf die Vollversion für alle Features!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Level <x> savegameLevel: Level <x>
savegameLevelUnknown: Unbekanntes Level savegameLevelUnknown: Unbekanntes Level
savegameUnnamed: Unbenannt savegameUnnamed: Unbenannt
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Update anzeigen viewUpdate: Update anzeigen
showUpgrades: Upgrades anzeigen showUpgrades: Upgrades anzeigen
showKeybindings: Kürzel anzeigen showKeybindings: Kürzel anzeigen
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Importfehler title: Importfehler
text: "Fehler beim Importieren deines Speicherstands:" text: "Fehler beim Importieren deines Speicherstands:"
@ -181,6 +190,67 @@ dialogs:
title: Tutorial verfügbar title: Tutorial verfügbar
desc: Für dieses Level ist ein Tutorial-Video verfügbar, allerdings nur auf desc: Für dieses Level ist ein Tutorial-Video verfügbar, allerdings nur auf
Englisch. Willst du es trotzdem anschauen? Englisch. Willst du es trotzdem anschauen?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Bewegen moveMap: Bewegen
@ -202,6 +272,7 @@ ingame:
clearSelection: Auswahl aufheben clearSelection: Auswahl aufheben
pipette: Pipette pipette: Pipette
switchLayers: Ebenen wechseln switchLayers: Ebenen wechseln
clearBelts: Clear belts
colors: colors:
red: Rot red: Rot
green: Grün green: Grün
@ -350,6 +421,44 @@ ingame:
achievements: achievements:
title: Errungenschaften title: Errungenschaften
desc: Hol sie dir alle! desc: Hol sie dir alle!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Fließbänder, Verteiler & Tunnel name: Fließbänder, Verteiler & Tunnel
@ -566,6 +675,18 @@ buildings:
name: Item-Produzent name: Item-Produzent
description: Nur im Sandkastenmodus verfügbar. Gibt das Signal aus der description: Nur im Sandkastenmodus verfügbar. Gibt das Signal aus der
Wires-Ebene als Item aus. Wires-Ebene als Item aus.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Formen zerschneiden title: Formen zerschneiden
@ -913,7 +1034,8 @@ settings:
position, otherwise in the middle of the screen. position, otherwise in the middle of the screen.
mapResourcesScale: mapResourcesScale:
title: Größe der Ressourcen auf der Karte title: Größe der Ressourcen auf der Karte
description: Legt die Größe der Ressourcen auf der Karte (beim Herauszoomen) fest. description: Legt die Größe der Ressourcen auf der Karte (beim Herauszoomen)
fest.
keybindings: keybindings:
title: Tastenbelegung title: Tastenbelegung
hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene
@ -991,6 +1113,10 @@ keybindings:
rotateToDown: "Rotieren: Nach unten zeigend" rotateToDown: "Rotieren: Nach unten zeigend"
rotateToRight: "Rotieren: Nach rechts zeigend" rotateToRight: "Rotieren: Nach rechts zeigend"
rotateToLeft: "Rotieren: Nach links zeigend" rotateToLeft: "Rotieren: Nach links zeigend"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Über dieses Spiel title: Über dieses Spiel
body: Dieses Spiel ist quelloffen (Open Source) und wurde von <a body: Dieses Spiel ist quelloffen (Open Source) und wurde von <a
@ -1094,3 +1220,57 @@ tips:
- Drücke doppelt F4 um den Standort des Mauszeigers und der Kamera zu - Drücke doppelt F4 um den Standort des Mauszeigers und der Kamera zu
bestimmen. bestimmen.
- Du kannst die angehefteten Formen am linken Rand wieder entfernen. - Du kannst die angehefteten Formen am linken Rand wieder entfernen.
puzzleMenu:
play: Spielen
edit: bearbeiten
title: Puzzle Modus
createPuzzle: Puzzle erstellen
loadPuzzle: Laden
reviewPuzzle: Überprüfen & Veröffentlichen
validatingPuzzle: Puzzle wird überprüft
submittingPuzzle: Puzzle wird veröffentlicht
noPuzzles: Hier gibt es bisher noch keine Puzzles.
categories:
levels: Levels
new: Neu
top-rated: Am besten bewertet
mine: Meine Puzzles
short: Kurz
easy: Einfach
hard: Schwierig
completed: Abgeschlossen
validation:
title: Ungültiges Puzzle
noProducers: Bitte plaziere einen Item-Produzent!
noGoalAcceptors: Bitte plaziere einen Ziel-Akzeptor!
goalAcceptorNoItem: Einer oder mehrere Ziel-Akzeptoren haben noch kein zugewiesenes Item.
Liefere eine Form zu diesen, um ein Ziel zu setzen.
goalAcceptorRateNotMet: Einer oder mehrere Ziel-Aktzeptoren bekommen nicht genügend Items.
Stelle sicher, dass alle Akzeptatorindikatoren grün sind.
buildingOutOfBounds: Ein oder mehrere Gebäude befinden sich außerhalb des beabauren Bereichs.
Vergrößere den Bereich oder entferene die Gebäude.
autoComplete: Dein Puzzle schließt sich selbst ab! Bitte stelle sicher, dass deine Item-Produzent
nicht direkt an deine Ziel-Akzeptoren lieferen.
backendErrors:
ratelimit: Du führst Aktionen zu schnell aus. Bitte warte kurz.
invalid-api-key: Kommunikation mit dem Back-End fehlgeschlagen, veruche das Spiel
neustarten oder zu updaten (Ungültiger Api-Schlüssel).
unauthorized: Kommunikation mit dem Back-End fehlgeschlagen, veruche das Spiel
neustarten oder zu updaten (Nicht autorisiert).
bad-token: Kommunikation mit dem Back-End fehlgeschlagen, veruche das Spiel
neustarten oder zu updaten (Ungültiger Token).
bad-id: Ungültige Puzzle Identifikation.
not-found: Das gegebene Puzzle konnte nicht gefunden werden.
bad-category: Die gegebene Kategorie konnte nicht gefunden werden.
bad-short-key: Der gegebene Kurzschlüssel ist ungültig.
profane-title: Dein Puzzletitel enthält ungültige Wörter.
bad-title-too-many-spaces: Dein Puzzletitel ist zu kurz.
bad-shape-key-in-emitter: Einem konstanten Produzenten wurde ein ungültiges Item zugewiesen.
bad-shape-key-in-goal: Einem Ziel-Akzeptor wurde ein ungültiges Item zugewiesen.
no-emitters: Dein Puzzle enthält keine konstanten Produzenten.
no-goals: Dein Puzzle enthält keine Ziel-Akzeptoren.
short-key-already-taken: Dieser Kurzschlüssel ist bereits vergeben, bitte wähle einen anderen.
can-not-report-your-own-puzzle: Du kannst nicht dein eigenes Puzzle melden.
bad-payload: Die Anfrage beinhaltet ungültige Daten.
bad-building-placement: Dein Puzzle beinhaltet Gebäude, die sich an ungültigen Stellen befinden.
timeout: Es kam zu einer Zeitüberschreitung bei der Anfrage.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Version title: Demo Version
intro: Get the standalone to unlock all features! intro: Get the standalone to unlock all features!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Προβολή ενημέρωσης viewUpdate: Προβολή ενημέρωσης
showUpgrades: Εμφάνιση αναβαθμίσεων showUpgrades: Εμφάνιση αναβαθμίσεων
showKeybindings: Συνδυασμοί πλήκτρων showKeybindings: Συνδυασμοί πλήκτρων
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Σφάλμα εισαγωγής title: Σφάλμα εισαγωγής
text: "Αποτυχία εισαγωγής του αποθηκευμένου παιχνιδιού:" text: "Αποτυχία εισαγωγής του αποθηκευμένου παιχνιδιού:"
@ -192,6 +201,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Κίνηση moveMap: Κίνηση
@ -213,6 +283,7 @@ ingame:
clearSelection: Εκκαθαρισμός επιλογής clearSelection: Εκκαθαρισμός επιλογής
pipette: Σταγονόμετρο pipette: Σταγονόμετρο
switchLayers: Εναλλαγή στρώματος switchLayers: Εναλλαγή στρώματος
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Πάτησε <key> για εναλλαγή μεταξύ παραλλαγών. cycleBuildingVariants: Πάτησε <key> για εναλλαγή μεταξύ παραλλαγών.
hotkeyLabel: "Hotkey: <key>" hotkeyLabel: "Hotkey: <key>"
@ -363,6 +434,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Ιμάντες, Διανομείς & Σήραγγες name: Ιμάντες, Διανομείς & Σήραγγες
@ -573,6 +682,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Κοπή σχημάτων title: Κοπή σχημάτων
@ -986,6 +1107,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Σχετικά με αυτό το παιχνίδι title: Σχετικά με αυτό το παιχνίδι
body: >- body: >-
@ -1078,3 +1203,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -120,6 +120,11 @@ mainMenu:
puzzleMode: Puzzle Mode puzzleMode: Puzzle Mode
back: Back back: Back
puzzleDlcText: >-
Do you enjoy compacting and optimizing factories?
Get the Puzzle DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
puzzleMenu: puzzleMenu:
play: Play play: Play
edit: Edit edit: Edit
@ -617,8 +622,9 @@ ingame:
- 1. Place <strong>Constant Producers</strong> to provide shapes and colors to the player - 1. Place <strong>Constant Producers</strong> to provide shapes and colors to the player
- 2. Build one or more shapes you want the player to build later and deliver it to one or more <strong>Goal Acceptors</strong> - 2. Build one or more shapes you want the player to build later and deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of time, it <strong>saves it as a goal</strong> that the player must produce later (Indicated by the <strong>green badge</strong>). - 3. Once a Goal Acceptor receives a shape for a certain amount of time, it <strong>saves it as a goal</strong> that the player must produce later (Indicated by the <strong>green badge</strong>).
- 4. Once you click review, your puzzle will be validated and you can publish it. - 4. Click the <strong>lock button</strong> on a building to disable it.
- 5. Upon release, <strong>all buildings will be removed</strong> except for the Producers and Goal Acceptors - That's the part that the player is supposed to figure out for themselves, after all :) - 5. Once you click review, your puzzle will be validated and you can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong> except for the Producers and Goal Acceptors - That's the part that the player is supposed to figure out for themselves, after all :)
puzzleCompletion: puzzleCompletion:
title: Puzzle Completed! title: Puzzle Completed!
@ -628,7 +634,8 @@ ingame:
titleRating: How difficult did you find the puzzle? titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future titleRatingDesc: Your rating will help me to make you better suggestions in the future
buttonSubmit: Continue continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata: puzzleMetadata:
author: Author author: Author

View File

@ -14,19 +14,19 @@ steamPage:
Mientras que sólo procesas formas al principio, tienes que colorearlas después - ¡para ello tienes que extraer y mezclar colores! Mientras que sólo procesas formas al principio, tienes que colorearlas después - ¡para ello tienes que extraer y mezclar colores!
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! 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!
what_others_say: What people say about shapez.io what_others_say: Lo que otras personas dicen sobre shapez.io
nothernlion_comment: This game is great - I'm having a wonderful time playing, nothernlion_comment: Este juego es estupendo - Estoy teniendo un tiempo
and time has flown by. maravolloso jugano, y el tiempo ha pasado volando.
notch_comment: Oh crap. I really should sleep, but I think I just figured out notch_comment: Miercoles. Verdaderamente debería dormir, pero creo que acabo de
how to make a computer in shapez.io descubrir como hacer un ordenador en shapez.io
steam_review_comment: This game has stolen my life and I don't want it back. steam_review_comment: Este juego ha robado mi vida y no la quiero de vuelta. Muy
Very chill factory game that won't let me stop making my lines more relajante juego de fábrica que no me dejará hacer mis lineas más
efficient. eficientes.
global: global:
loading: Cargando loading: Cargando
error: Error error: Error
thousandsDivider: . thousandsDivider: ","
decimalSeparator: "," decimalSeparator: .
suffix: suffix:
thousands: k thousands: k
millions: M millions: M
@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: ESPACIO space: ESPACIO
loggingIn: Logging in
demoBanners: demoBanners:
title: Versión de prueba 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!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Nivel <x> savegameLevel: Nivel <x>
savegameLevelUnknown: Nivel desconocido savegameLevelUnknown: Nivel desconocido
savegameUnnamed: Sin nombre savegameUnnamed: Sin nombre
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Ver actualización viewUpdate: Ver actualización
showUpgrades: Ver mejoras showUpgrades: Ver mejoras
showKeybindings: Ver atajos de teclado showKeybindings: Ver atajos de teclado
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Error de importación title: Error de importación
text: "Fallo al importar tu partida guardada:" text: "Fallo al importar tu partida guardada:"
@ -187,6 +196,67 @@ dialogs:
title: Tutorial Disponible title: Tutorial Disponible
desc: Hay un video tutorial disponible para este nivel, pero solo está desc: Hay un video tutorial disponible para este nivel, pero solo está
disponible en inglés ¿Te gustaría verlo? disponible en inglés ¿Te gustaría verlo?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Mover moveMap: Mover
@ -196,7 +266,7 @@ ingame:
placeMultiple: Colocar varios placeMultiple: Colocar varios
reverseOrientation: Invertir la orientación reverseOrientation: Invertir la orientación
disableAutoOrientation: Desactivar la autoorientación disableAutoOrientation: Desactivar la autoorientación
toggleHud: Habilitar el HUD toggleHud: Habilitar la interfaz
placeBuilding: Colocar edificio placeBuilding: Colocar edificio
createMarker: Crear marcador createMarker: Crear marcador
delete: Destruir delete: Destruir
@ -208,6 +278,7 @@ ingame:
clearSelection: Limpiar selección clearSelection: Limpiar selección
pipette: Cuentagotas pipette: Cuentagotas
switchLayers: Cambiar capas switchLayers: Cambiar capas
clearBelts: Clear belts
colors: colors:
red: Rojo red: Rojo
green: Verde green: Verde
@ -217,7 +288,7 @@ ingame:
cyan: Cian cyan: Cian
white: Blanco white: Blanco
black: Negro black: Negro
uncolored: Gris uncolored: Incoloro
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Pulsa <key> para rotar por las distintas variantes. cycleBuildingVariants: Pulsa <key> para rotar por las distintas variantes.
hotkeyLabel: "Tecla: <key>" hotkeyLabel: "Tecla: <key>"
@ -248,18 +319,18 @@ ingame:
dataSources: dataSources:
stored: stored:
title: Almacenado title: Almacenado
description: Muestra la cantidad de figuras guardadas en tu HUB. description: Muestra la cantidad de figuras guardadas en tu Centro.
produced: produced:
title: Producido title: Producido
description: Muestra todas las figuras que tu fábrica al completo produce, description: Muestra todas las figuras que tu fábrica al completo produce,
incluyendo productos intermedios. incluyendo productos intermedios.
delivered: delivered:
title: Entregados title: Entregados
description: Muestra las figuras que son entregadas a tu HUB. description: Muestra las figuras que son entregadas a tu Centro.
noShapesProduced: Todavía no se han producido figuras. noShapesProduced: Todavía no se han producido figuras.
shapesDisplayUnits: shapesDisplayUnits:
second: <shapes> / s second: <shapes> / s
minute: <shapes> / m minute: <shapes> / min
hour: <shapes> / h hour: <shapes> / h
settingsMenu: settingsMenu:
playtime: Tiempo de juego playtime: Tiempo de juego
@ -273,7 +344,7 @@ ingame:
cost: Coste cost: Coste
waypoints: waypoints:
waypoints: Marcadores waypoints: Marcadores
hub: HUB hub: Centro
description: Click izquierdo sobre un marcador para ir ahí, click derecho para description: Click izquierdo sobre un marcador para ir ahí, click derecho para
borrarlo. <br><br> Pulsa <keybinding> para crear un marcador de la borrarlo. <br><br> Pulsa <keybinding> para crear un marcador de la
vista actual o <strong>click derecho</strong> para crear un marcador vista actual o <strong>click derecho</strong> para crear un marcador
@ -289,8 +360,9 @@ ingame:
1_1_extractor: ¡Coloca un <strong>extractor</strong> encima de un 1_1_extractor: ¡Coloca un <strong>extractor</strong> encima de un
<strong>círculo</strong> para extraerlo! <strong>círculo</strong> para extraerlo!
1_2_conveyor: "¡Conecta el extractor con una <strong>cinta 1_2_conveyor: "¡Conecta el extractor con una <strong>cinta
transportadora</strong> a tu HUB!<br><br> Pista: ¡<strong>Pulsa transportadora</strong> a tu Centro!<br><br> Pista:
y arrastra</strong> la cinta transportadora con el ratón!" ¡<strong>Pulsa y arrastra</strong> la cinta transportadora con
el ratón!"
1_3_expand: '¡Esto <strong>NO</strong> es un "juego de esperar"! Construye más 1_3_expand: '¡Esto <strong>NO</strong> es un "juego de esperar"! Construye más
extractores y cintas transportadoras para completar el objetivo extractores y cintas transportadoras para completar el objetivo
más rápido.<br><br> Pista: Mantén pulsado <strong>SHIFT</strong> más rápido.<br><br> Pista: Mantén pulsado <strong>SHIFT</strong>
@ -307,8 +379,8 @@ ingame:
para acelerar este lento proceso!<br><br> PD: Usa las teclas para acelerar este lento proceso!<br><br> PD: Usa las teclas
<strong>0-9 </strong> para acceder a los edificios más rápido!" <strong>0-9 </strong> para acceder a los edificios más rápido!"
3_1_rectangles: "¡Ahora consigamos unos rectangulos! <strong>construye 4 3_1_rectangles: "¡Ahora consigamos unos rectangulos! <strong>construye 4
extractores</strong> y conectalos a el HUB.<br><br> PD: Manten extractores</strong> y conectalos a el Centro.<br><br> PD:
apretado <strong>SHIFT</strong> mientrás pones cintas Manten apretado <strong>SHIFT</strong> mientrás pones cintas
transportadoras para activar el planeador de cintas!" transportadoras para activar el planeador de cintas!"
21_1_place_quad_painter: ¡Pon el <strong>pintador cuádruple</strong> y consigue 21_1_place_quad_painter: ¡Pon el <strong>pintador cuádruple</strong> y consigue
unos <strong>círculos</strong>, el color <strong>blanco</strong> unos <strong>círculos</strong>, el color <strong>blanco</strong>
@ -319,9 +391,9 @@ ingame:
21_3_place_button: ¡Genial! ¡Ahora pon un <strong>Interruptor</strong> y 21_3_place_button: ¡Genial! ¡Ahora pon un <strong>Interruptor</strong> y
conéctalo con cables! conéctalo con cables!
21_4_press_button: "Presiona el interruptor para hacer que <strong>emita una 21_4_press_button: "Presiona el interruptor para hacer que <strong>emita una
señal verdadera</strong> lo cual activa el pintador.<br><br> señal verdadera</strong> lo cual activa el pintador.<br><br> PD:
PD: ¡No necesitas conectar todas las entradas! Intenta ¡No necesitas conectar todas las entradas! Intenta conectando
conectando sólo dos." sólo dos."
connectedMiners: connectedMiners:
one_miner: 1 Minero one_miner: 1 Minero
n_miners: <amount> Mineros n_miners: <amount> Mineros
@ -356,8 +428,46 @@ ingame:
title: Apoyame title: Apoyame
desc: ¡Desarrollo este juego en mi tiempo libre! desc: ¡Desarrollo este juego en mi tiempo libre!
achievements: achievements:
title: Achievements title: Logros
desc: Hunt them all! desc: Atrapalos a todos!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Cintas transportadoras, Distribuidores y Túneles name: Cintas transportadoras, Distribuidores y Túneles
@ -375,8 +485,8 @@ buildings:
hub: hub:
deliver: Entregar deliver: Entregar
toUnlock: para desbloquear toUnlock: para desbloquear
levelShortcut: LVL levelShortcut: Nivel
endOfDemo: End of Demo endOfDemo: Final de la demo
belt: belt:
default: default:
name: Cinta Transportadora name: Cinta Transportadora
@ -574,6 +684,18 @@ buildings:
name: Productor de items name: Productor de items
description: Solo disponible en modo libre, envía la señal recivida de la capa description: Solo disponible en modo libre, envía la señal recivida de la capa
de cables en la capa regular. de cables en la capa regular.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Cortador de figuras title: Cortador de figuras
@ -649,12 +771,12 @@ storyRewards:
desc: ¡Lo hiciste! Haz desbloqueado el <strong>modo de juego libre</strong>! desc: ¡Lo hiciste! Haz desbloqueado el <strong>modo de juego libre</strong>!
¡Esto significa que las formas ahora son ¡Esto significa que las formas ahora son
<strong>aleatoriamente</strong> generadas!<br><br> Debído a que <strong>aleatoriamente</strong> generadas!<br><br> Debído a que
desde ahora de adelante el HUB pedrirá una cantidad especifica de desde ahora de adelante el Centro pedrirá una cantidad especifica de
formas <strong>por segundo</strong> ¡Te recomiendo encarecidamente formas <strong>por segundo</strong> ¡Te recomiendo encarecidamente
que construyas una maquina que automáticamente envíe la forma que construyas una maquina que automáticamente envíe la forma
pedida!<br><br> El HUB emite la forma pedida en la capa de cables, pedida!<br><br> El Centro emite la forma pedida en la capa de
así que todo lo que tienes que hacer es analizarla y automaticamente cables, así que todo lo que tienes que hacer es analizarla y
configurar tu fabrica basada en ello. automaticamente configurar tu fabrica basada en ello.
reward_blueprints: reward_blueprints:
title: Planos title: Planos
desc: ¡Ahora puedes <strong>copiar y pegar</strong> partes de tu fábrica! desc: ¡Ahora puedes <strong>copiar y pegar</strong> partes de tu fábrica!
@ -719,9 +841,9 @@ storyRewards:
¡Ahora puedes simular un cortador, rotador, apilador y más dentro de ¡Ahora puedes simular un cortador, rotador, apilador y más dentro de
la capa de cables! Con esto ahora tienes tres opciones para la capa de cables! Con esto ahora tienes tres opciones para
continuar el juego:<br><br> - Construir una <strong>maquina continuar el juego:<br><br> - Construir una <strong>maquina
automatizada</strong> para crear cualquier forma que te pida el HUB automatizada</strong> para crear cualquier forma que te pida el
(¡Te recomiendo que lo intentes!).<br><br> - Construir algo genial Centro (¡Te recomiendo que lo intentes!).<br><br> - Construir algo
con los cables.<br><br> - Continuar jugando de la manera genial con los cables.<br><br> - Continuar jugando de la manera
regular.<br><br> ¡Cualquiera que eligas, recuerda divertirte! regular.<br><br> ¡Cualquiera que eligas, recuerda divertirte!
reward_wires_painter_and_levers: reward_wires_painter_and_levers:
title: Cables y pintor cuádruple title: Cables y pintor cuádruple
@ -941,7 +1063,7 @@ keybindings:
menuOpenShop: Mejoras menuOpenShop: Mejoras
menuOpenStats: Estadísticas menuOpenStats: Estadísticas
menuClose: Cerrar menú menuClose: Cerrar menú
toggleHud: Activar HUD toggleHud: Activar Interfaz
toggleFPSInfo: Activar FPS e información de depurado toggleFPSInfo: Activar FPS e información de depurado
switchLayers: Cambiar capas switchLayers: Cambiar capas
exportScreenshot: Exportar la base completa como imagen exportScreenshot: Exportar la base completa como imagen
@ -963,7 +1085,7 @@ keybindings:
pasteLastBlueprint: Pegar último plano pasteLastBlueprint: Pegar último plano
cycleBuildings: Ciclar edificios cycleBuildings: Ciclar edificios
lockBeltDirection: Activar planificador de cintas transportadoras lockBeltDirection: Activar planificador de cintas transportadoras
switchDirectionLockSide: "Planner: Cambiar sentido" switchDirectionLockSide: "Planificador: Cambiar sentido"
massSelectStart: Mantén pulsado y arrastra para empezar massSelectStart: Mantén pulsado y arrastra para empezar
massSelectSelectMultiple: Seleccionar múltiples áreas massSelectSelectMultiple: Seleccionar múltiples áreas
massSelectCopy: Copiar área massSelectCopy: Copiar área
@ -986,10 +1108,14 @@ keybindings:
comparator: Comparador comparator: Comparador
item_producer: Productor de items (Sandbox) item_producer: Productor de items (Sandbox)
copyWireValue: "Cables: Copiar valor bajo el cursos" copyWireValue: "Cables: Copiar valor bajo el cursos"
rotateToUp: "Rotate: Point Up" rotateToUp: "Rotar: Apuntar hacia arriba"
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotar: Apuntar hacia abajo"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotar: Apuntar hacia la derecha"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotar: Apuntar hacia la izquierda"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Sobre el juego title: Sobre el juego
body: >- body: >-
@ -1015,9 +1141,9 @@ demo:
exportingBase: Exportando la base completa como imagen exportingBase: Exportando la base completa como imagen
settingNotAvailable: No disponible en la versión de prueba. settingNotAvailable: No disponible en la versión de prueba.
tips: tips:
- El HUB acepta entradas de cualquier tipo ¡No solo la forma actual! - El Centro acepta entradas de cualquier tipo ¡No solo la forma actual!
- Trata de que tus fábricas sean modulares - ¡Te servirá en el futuro! - Trata de que tus fábricas sean modulares - ¡Te servirá en el futuro!
- No construyas muy cerca del HUB ¡O se volverá todo un caos! - No construyas muy cerca del Centro ¡O se volverá todo un caos!
- Si apilar las formas no funciona, intenta intercambiar las entradas. - Si apilar las formas no funciona, intenta intercambiar las entradas.
- Puedes activar la dirección del planeador de cintas apretando <b>R</b>. - Puedes activar la dirección del planeador de cintas apretando <b>R</b>.
- Mantener apretado <b>CTRL</b> te permite poner cintas sin auto-orientación. - Mantener apretado <b>CTRL</b> te permite poner cintas sin auto-orientación.
@ -1047,7 +1173,7 @@ tips:
- Puedes apretar <b>ALT</b> para invertir la dirección a la que van las - Puedes apretar <b>ALT</b> para invertir la dirección a la que van las
cintas. cintas.
- ¡La eficiencia es la clave! - ¡La eficiencia es la clave!
- Mientras más lejos del HUB estés más complejas serán las formas que te - Mientras más lejos del Centro estés más complejas serán las formas que te
encuentres. encuentres.
- Las máquinas tienen una velocidad limitada, divídelas para una máxima - Las máquinas tienen una velocidad limitada, divídelas para una máxima
eficiencia. eficiencia.
@ -1071,7 +1197,7 @@ tips:
- Echa un vistazo más de cerca al mezclador de colores, y tus preguntas - Echa un vistazo más de cerca al mezclador de colores, y tus preguntas
serán respondidas. serán respondidas.
- Usa <b>CTRL</b> + Click izquierdo para seleccionar un área. - Usa <b>CTRL</b> + Click izquierdo para seleccionar un área.
- Construir demasiado cerca del HUB puede interponerse en el camino de - Construir demasiado cerca del Centro puede interponerse en el camino de
proyectos a futuro. proyectos a futuro.
- El icono del alfiler junto a cada forma de la lista de mejoras lo fija a - El icono del alfiler junto a cada forma de la lista de mejoras lo fija a
la pantalla. la pantalla.
@ -1084,10 +1210,65 @@ tips:
- ¡Este juego tiene un montón de atajos útiles! Asegúrate de revisar la - ¡Este juego tiene un montón de atajos útiles! Asegúrate de revisar la
página de ajustes. página de ajustes.
- Este juego tiene muchos ajustes, ¡asegúrate de revisarlos! - Este juego tiene muchos ajustes, ¡asegúrate de revisarlos!
- ¡El marcador de tu HUB tiene una pequeña brújula para indicar su dirección! - ¡El marcador de tu Centro tiene una pequeña brújula para indicar su
dirección!
- Para despejar las cintas transportadoras, corta el área y luego pégala en - Para despejar las cintas transportadoras, corta el área y luego pégala en
el mismo lugar. el mismo lugar.
- Presiona F4 para mostrar tu FPS y Tick Rate. - Presiona F4 para mostrar tu FPS y Tick Rate.
- Presiona F4 dos veces para mostrar las coordenadas de tu ratón y de la - Presiona F4 dos veces para mostrar las coordenadas de tu ratón y de la
cámara. cámara.
- Puedes hacer clic en una forma fijada en el lado izquierdo para desfijarla. - Puedes hacer clic en una forma fijada en el lado izquierdo para desfijarla.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: VÄLILYÖNTI space: VÄLILYÖNTI
loggingIn: Logging in
demoBanners: demoBanners:
title: Demoversio title: Demoversio
intro: Hanki pelin täysversio avataksesi kaikki ominaisuudet! intro: Hanki pelin täysversio avataksesi kaikki ominaisuudet!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Taso <x> savegameLevel: Taso <x>
savegameLevelUnknown: Tuntematon taso savegameLevelUnknown: Tuntematon taso
savegameUnnamed: Nimetön savegameUnnamed: Nimetön
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Näytä päivitys viewUpdate: Näytä päivitys
showUpgrades: Näytä päivitykset showUpgrades: Näytä päivitykset
showKeybindings: Näytä pikanäppäimet showKeybindings: Näytä pikanäppäimet
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Tuontivirhe title: Tuontivirhe
text: "Tallennuksen tuonti epäonnistui:" text: "Tallennuksen tuonti epäonnistui:"
@ -180,6 +189,67 @@ dialogs:
tutorialVideoAvailableForeignLanguage: tutorialVideoAvailableForeignLanguage:
title: Ohjevideo saatavilla title: Ohjevideo saatavilla
desc: Tästä tasosta on saatavilla ohjevideo! Haluaisitko katsoa sen? desc: Tästä tasosta on saatavilla ohjevideo! Haluaisitko katsoa sen?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Liiku moveMap: Liiku
@ -201,6 +271,7 @@ ingame:
clearSelection: Tyhjennä valinta clearSelection: Tyhjennä valinta
pipette: Pipetti pipette: Pipetti
switchLayers: Vaihda tasoa switchLayers: Vaihda tasoa
clearBelts: Clear belts
colors: colors:
red: Punainen red: Punainen
green: Vihreä green: Vihreä
@ -349,6 +420,44 @@ ingame:
achievements: achievements:
title: Saavutukset title: Saavutukset
desc: Metsästä kaikki! desc: Metsästä kaikki!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Kuljettimet, jakelijat & tunnelit name: Kuljettimet, jakelijat & tunnelit
@ -559,15 +668,26 @@ buildings:
name: Signaaligeneraattori name: Signaaligeneraattori
description: Saatavilla vain hiekkalaatikkotilassa. Lähettää johtotasolla description: Saatavilla vain hiekkalaatikkotilassa. Lähettää johtotasolla
annetun signaalin normaaliin tasoon. annetun signaalin normaaliin tasoon.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Muotojen Leikkaus title: Muotojen Leikkaus
desc: Avasit <strong>Leikkurin</strong>, joka leikkaa muotoja desc: Avasit <strong>Leikkurin</strong>, joka leikkaa muotoja ylhäältä alas
ylhäältä alas <strong>muodon suunnasta <strong>muodon suunnasta riippumatta</strong>!<br><br>muista
riippumatta</strong>!<br><br>muista hankkiutua eroon jätteestä, tai hankkiutua eroon jätteestä, tai muuten <strong>se tukkii ja
muuten <strong>se tukkii ja pysäyttää leikkurin</strong> - Siksi pysäyttää leikkurin</strong> - Siksi olen antanut sinulle
olen antanut sinulle <strong>roskiksen</strong>, joka tuhoaa <strong>roskiksen</strong>, joka tuhoaa kaiken sinne laitetun!
kaiken sinne laitetun!
reward_rotater: reward_rotater:
title: Kääntö title: Kääntö
desc: Avasit <strong>Kääntäjän</strong>! Se kääntää muotoja myötäpäivään 90 desc: Avasit <strong>Kääntäjän</strong>! Se kääntää muotoja myötäpäivään 90
@ -629,11 +749,11 @@ storyRewards:
reward_freeplay: reward_freeplay:
title: Vapaapeli title: Vapaapeli
desc: Onnistuit! Avasit juuri <strong>vapaapelimuodon</strong>! Muodot luodaan desc: Onnistuit! Avasit juuri <strong>vapaapelimuodon</strong>! Muodot luodaan
nyt <strong>satunnaisesti</strong><br><br> Koska keskusrakennus vaatii nyt <strong>satunnaisesti</strong><br><br> Koska keskusrakennus
tietyn <strong>kuljetuskapasiteetin</strong> tästä eteenpäin, suosittelen vaatii tietyn <strong>kuljetuskapasiteetin</strong> tästä eteenpäin,
lämpimästi rakentamaan koneen, joka tuottaa vaaditun muodon suosittelen lämpimästi rakentamaan koneen, joka tuottaa vaaditun
automaattisesti!<br><br> Keskusrakennus lähettää pyydetyn muodon muodon automaattisesti!<br><br> Keskusrakennus lähettää pyydetyn
johtotasolle, joten sinun ei tarvitse kuin analysoida se ja muodon johtotasolle, joten sinun ei tarvitse kuin analysoida se ja
konfiguroida tehtaasi sen perusteella. konfiguroida tehtaasi sen perusteella.
reward_blueprints: reward_blueprints:
title: Piirustukset title: Piirustukset
@ -956,12 +1076,15 @@ keybindings:
rotateToDown: "Käännä: osoittaa alas" rotateToDown: "Käännä: osoittaa alas"
rotateToRight: "Käännä: osoittaa oikealle" rotateToRight: "Käännä: osoittaa oikealle"
rotateToLeft: "Käännä: osoittaa vasemmalle" rotateToLeft: "Käännä: osoittaa vasemmalle"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Tietoja tästä pelistä title: Tietoja tästä pelistä
body: >- body: >-
Tämä peli on avointa lähdekoodia ja <a Tämä peli on avointa lähdekoodia ja <a href="https://github.com/tobspr"
href="https://github.com/tobspr" target="_blank">Tobias Springer</a>in target="_blank">Tobias Springer</a>in (siis minun) kehittämäni.<br><br>
(siis minun) kehittämäni.<br><br>
Jos haluat avustaa, käy katsomassa <a href="<githublink>" target="_blank">shapez.io GitHubissa</a>.<br><br> Jos haluat avustaa, käy katsomassa <a href="<githublink>" target="_blank">shapez.io GitHubissa</a>.<br><br>
@ -1043,3 +1166,57 @@ tips:
- Paina F4 nähdäksesi FPS laskurin ja virkistystaajuuden. - Paina F4 nähdäksesi FPS laskurin ja virkistystaajuuden.
- Press F4 kahdesti nähdäksesi hiiren ja kameran ruudun. - Press F4 kahdesti nähdäksesi hiiren ja kameran ruudun.
- Klikkaa kiinnitetyn muodon vasemmalta puolelta irrottaaksesi sen. - Klikkaa kiinnitetyn muodon vasemmalta puolelta irrottaaksesi sen.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -11,11 +11,11 @@ steamPage:
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! 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!
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! 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!
what_others_say: What people say about shapez.io what_others_say: Ce que les gens pensent de Shapez.io
nothernlion_comment: This game is great - I'm having a wonderful time playing, nothernlion_comment: This game is great - I'm having a wonderful time playing,
and time has flown by. and time has flown by.
notch_comment: Oh crap. I really should sleep, but I think I just figured out notch_comment: Mince! Je devrais vraiment me coucher, Mais je crois que j'ai trouvé
how to make a computer in shapez.io comment faire un ordinateur dans Shapez.io
steam_review_comment: This game has stolen my life and I don't want it back. steam_review_comment: This game has stolen my life and I don't want it back.
Very chill factory game that won't let me stop making my lines more Very chill factory game that won't let me stop making my lines more
efficient. efficient.
@ -50,6 +50,7 @@ global:
escape: ESC escape: ESC
shift: MAJ shift: MAJ
space: ESPACE space: ESPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Version de démo title: Version de démo
intro: Achetez la version complète pour débloquer toutes les fonctionnalités! intro: Achetez la version complète pour débloquer toutes les fonctionnalités!
@ -70,6 +71,11 @@ mainMenu:
savegameLevel: Niveau <x> savegameLevel: Niveau <x>
savegameLevelUnknown: Niveau inconnu savegameLevelUnknown: Niveau inconnu
savegameUnnamed: Sans titre savegameUnnamed: Sans titre
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Vous aimez compacter et optimiser vos usines? Achetez le DLC
sur Steam dés maintenant pour encore plus d'amusement!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -83,6 +89,9 @@ dialogs:
viewUpdate: Voir les mises à jour viewUpdate: Voir les mises à jour
showUpgrades: Montrer les améliorations showUpgrades: Montrer les améliorations
showKeybindings: Montrer les raccourcis showKeybindings: Montrer les raccourcis
retry: Reesayer
continue: Continuer
playOffline: Jouer Hors-ligne
importSavegameError: importSavegameError:
title: Erreur dimportation title: Erreur dimportation
text: "Impossible dimporter votre sauvegarde :" text: "Impossible dimporter votre sauvegarde :"
@ -183,6 +192,67 @@ dialogs:
title: Tutoriel disponible title: Tutoriel disponible
desc: Il y a un tutoriel vidéo pour ce niveau, mais il nest disponible quen desc: Il y a un tutoriel vidéo pour ce niveau, mais il nest disponible quen
anglais. Voulez-vous le regarder? anglais. Voulez-vous le regarder?
editConstantProducer:
title: Définir l'objet
puzzleLoadFailed:
title: Le chargement du Puzzle à échoué
desc: "Malheuresement, le puzzle n'a pas pu être chargé:"
submitPuzzle:
title: Envoyer le Puzzle
descName: "Donnez un nom à votre puzzle:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Mode hors-ligne
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Erreur de téléchargment
desc: "Le téléchargement à échoué:"
puzzleSubmitError:
title: Erreur d'envoi
desc: "L'envoi à échoué:"
puzzleSubmitOk:
title: Puzzle envoyé
desc: Félicitation! Votre puzzle à été envoyé et peut maintenant être joué.
Vous pouvez maintenant le retrouver dans la section "Mes Puzzle".
puzzleCreateOffline:
title: Mode Hors-ligne
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Merci pour votre retour!
desc: Le puzzle à été marqué.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Déplacer moveMap: Déplacer
@ -204,6 +274,7 @@ ingame:
clearSelection: Effacer la sélection clearSelection: Effacer la sélection
pipette: Pipette pipette: Pipette
switchLayers: Changer de calque switchLayers: Changer de calque
clearBelts: Suprimer les rails
colors: colors:
red: Rouge red: Rouge
green: Vert green: Vert
@ -357,6 +428,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Convoyeurs, distributeurs et tunnels name: Convoyeurs, distributeurs et tunnels
@ -574,6 +683,18 @@ buildings:
name: Générateur dobjet name: Générateur dobjet
description: Seulement disponible en mode bac à sable. Renvoie le signal du description: Seulement disponible en mode bac à sable. Renvoie le signal du
calque de câblage sur le calque normal. calque de câblage sur le calque normal.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Découpage de formes title: Découpage de formes
@ -1000,6 +1121,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: À propos de ce jeu title: À propos de ce jeu
body: >- body: >-
@ -1101,3 +1226,57 @@ tips:
- Appuyez sur F4 pour voir vos IPS et votre fréquence de rafraîchissement. - Appuyez sur F4 pour voir vos IPS et votre fréquence de rafraîchissement.
- Appuyez deux fois sur F4 pour voir les coordonnées. - Appuyez deux fois sur F4 pour voir les coordonnées.
- Cliquez sur une forme épinglée à gauche pour lenlever. - Cliquez sur une forme épinglée à gauche pour lenlever.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

File diff suppressed because it is too large Load Diff

View File

@ -52,6 +52,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Verzija 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!
@ -71,6 +72,11 @@ mainMenu:
savegameLevel: Nivo <x> savegameLevel: Nivo <x>
savegameLevelUnknown: Nepoznati Nivo savegameLevelUnknown: Nepoznati Nivo
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -84,6 +90,9 @@ dialogs:
viewUpdate: Pogledaj ažuriranje viewUpdate: Pogledaj ažuriranje
showUpgrades: Pokaži Nadogradnje showUpgrades: Pokaži Nadogradnje
showKeybindings: Pokaži tipke showKeybindings: Pokaži tipke
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Greška prilikom uvoza title: Greška prilikom uvoza
text: "Neuspješan uvoz spremljene igre:" text: "Neuspješan uvoz spremljene igre:"
@ -181,6 +190,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Kretanje moveMap: Kretanje
@ -202,6 +272,7 @@ ingame:
clearSelection: Očisti odabir clearSelection: Očisti odabir
pipette: Pipeta pipette: Pipeta
switchLayers: Promijeni sloj switchLayers: Promijeni sloj
clearBelts: Clear belts
colors: colors:
red: Crvena red: Crvena
green: Zelena green: Zelena
@ -349,6 +420,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Trake, Distributer i Tuneli name: Trake, Distributer i Tuneli
@ -553,6 +662,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Rezanje Oblika title: Rezanje Oblika
@ -949,6 +1070,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: O Igri title: O Igri
body: >- body: >-
@ -1034,3 +1159,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -50,6 +50,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SZÓKÖZ space: SZÓKÖZ
loggingIn: Logging in
demoBanners: demoBanners:
title: Demó verzió 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!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: <x>. szint savegameLevel: <x>. szint
savegameLevelUnknown: Ismeretlen szint savegameLevelUnknown: Ismeretlen szint
savegameUnnamed: Névtelen savegameUnnamed: Névtelen
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Frissítés Megtekintése viewUpdate: Frissítés Megtekintése
showUpgrades: Fejlesztések showUpgrades: Fejlesztések
showKeybindings: Irányítás showKeybindings: Irányítás
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Importálás Hiba title: Importálás Hiba
text: "Nem sikerült importálni a mentésedet:" text: "Nem sikerült importálni a mentésedet:"
@ -182,6 +191,67 @@ dialogs:
title: Oktatás Elérhető title: Oktatás Elérhető
desc: Elérhető egy oktatóvideó ehhez a szinthez, de csak angol nyelven. desc: Elérhető egy oktatóvideó ehhez a szinthez, de csak angol nyelven.
Szeretnéd megnézni? Szeretnéd megnézni?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Mozgatás moveMap: Mozgatás
@ -203,6 +273,7 @@ ingame:
clearSelection: Kijelölés megszüntetése clearSelection: Kijelölés megszüntetése
pipette: Pipetta pipette: Pipetta
switchLayers: Réteg váltás switchLayers: Réteg váltás
clearBelts: Clear belts
colors: colors:
red: Piros red: Piros
green: Zöld green: Zöld
@ -352,6 +423,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Futószalagok, Elosztók & Alagutak name: Futószalagok, Elosztók & Alagutak
@ -561,6 +670,18 @@ buildings:
name: Létrehozó name: Létrehozó
description: Csak Homokozó módban elérhető. Létrehozza a Vezeték rétegen description: Csak Homokozó módban elérhető. Létrehozza a Vezeték rétegen
beállított jelet a normál rétegen. beállított jelet a normál rétegen.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Alakzatok Vágása title: Alakzatok Vágása
@ -972,6 +1093,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: A Játékról title: A Játékról
body: >- body: >-
@ -1065,3 +1190,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -17,8 +17,8 @@ steamPage:
notch_comment: Oh sial. Saya benar-benar harus tidur, namun sepertinya saya baru notch_comment: Oh sial. Saya benar-benar harus tidur, namun sepertinya saya baru
menemukan bagaimana cara membuat komputer di shapez.io menemukan bagaimana cara membuat komputer di shapez.io
steam_review_comment: Game ini telah mencuri hidup saya dan saya tidak steam_review_comment: Game ini telah mencuri hidup saya dan saya tidak
menginginkannya kembali. Game pembuatan pabrik yang sangat santai yang tidak menginginkannya kembali. Game pembuatan pabrik yang sangat santai yang
akan membiarkan saya berhenti membuat pabrik saya lebih efisien. tidak akan membiarkan saya berhenti membuat pabrik saya lebih efisien.
global: global:
loading: Memuat loading: Memuat
error: Terjadi kesalahan error: Terjadi kesalahan
@ -50,6 +50,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Versi Demo title: Versi Demo
intro: Dapatkan versi lengkap untuk membuka semua fitur! intro: Dapatkan versi lengkap untuk membuka semua fitur!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Level <x> savegameLevel: Level <x>
savegameLevelUnknown: Level tidak diketahui savegameLevelUnknown: Level tidak diketahui
savegameUnnamed: Tidak Dinamai savegameUnnamed: Tidak Dinamai
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Tampilkan Update viewUpdate: Tampilkan Update
showUpgrades: Tunjukkan Tingkatan showUpgrades: Tunjukkan Tingkatan
showKeybindings: Tunjukkan Tombol Pintas showKeybindings: Tunjukkan Tombol Pintas
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Kesalahan pada Impor title: Kesalahan pada Impor
text: "Gagal memasukkan data simpanan kamu:" text: "Gagal memasukkan data simpanan kamu:"
@ -185,6 +194,67 @@ dialogs:
title: Tutorial Tersedia title: Tutorial Tersedia
desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam
Bahasa Inggris. Apakah kamu ingin menontonnya? Bahasa Inggris. Apakah kamu ingin menontonnya?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Geser moveMap: Geser
@ -206,6 +276,7 @@ ingame:
clearSelection: Hapus pilihan clearSelection: Hapus pilihan
pipette: Pipet pipette: Pipet
switchLayers: Ganti lapisan switchLayers: Ganti lapisan
clearBelts: Clear belts
colors: colors:
red: Merah red: Merah
green: Hijau green: Hijau
@ -358,6 +429,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Sabuk konveyor, Pembagi Arus & Terowongan name: Sabuk konveyor, Pembagi Arus & Terowongan
@ -577,6 +686,18 @@ buildings:
name: Pembuat Bentuk name: Pembuat Bentuk
description: Hanya tersedia di dalam mode sandbox, mengeluarkan sinyal yang description: Hanya tersedia di dalam mode sandbox, mengeluarkan sinyal yang
diberikan dari lapisan kabel ke lapisan biasa. diberikan dari lapisan kabel ke lapisan biasa.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Memotong Bentuk title: Memotong Bentuk
@ -1008,6 +1129,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Tentang permainan ini title: Tentang permainan ini
body: >- body: >-
@ -1115,3 +1240,57 @@ tips:
- Tekan F4 dua kali untuk menunjukkan ubin mouse dan kameramu. - Tekan F4 dua kali untuk menunjukkan ubin mouse dan kameramu.
- Kamu bisa mengklik bentuk yang di-pin di sebelah kiri untuk tidak - Kamu bisa mengklik bentuk yang di-pin di sebelah kiri untuk tidak
mem-pinnya lagi. mem-pinnya lagi.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: MAIUSC shift: MAIUSC
space: SPAZIO space: SPAZIO
loggingIn: Logging in
demoBanners: demoBanners:
title: Versione Demo title: Versione Demo
intro: Ottieni la versione completa per sbloccare tutte le funzioni! intro: Ottieni la versione completa per sbloccare tutte le funzioni!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Creato da <author-link> madeBy: Creato da <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Senza nome savegameUnnamed: Senza nome
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Mostra aggiornamento viewUpdate: Mostra aggiornamento
showUpgrades: Mostra miglioramenti showUpgrades: Mostra miglioramenti
showKeybindings: Mostra scorciatoie showKeybindings: Mostra scorciatoie
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Errore di importazione title: Errore di importazione
text: "Impossibile caricare il salvataggio:" text: "Impossibile caricare il salvataggio:"
@ -189,6 +198,67 @@ dialogs:
title: Tutorial Disponibile title: Tutorial Disponibile
desc: C'è un video tutorial per questo livello, ma è disponibile solo in desc: C'è un video tutorial per questo livello, ma è disponibile solo in
Inglese. Vorresti dargli un'occhiata? Inglese. Vorresti dargli un'occhiata?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Sposta moveMap: Sposta
@ -210,6 +280,7 @@ ingame:
clearSelection: Annulla selezione clearSelection: Annulla selezione
pipette: Contagocce pipette: Contagocce
switchLayers: Cambia livello switchLayers: Cambia livello
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Premi <key> per cambiare variante. cycleBuildingVariants: Premi <key> per cambiare variante.
hotkeyLabel: "Hotkey: <key>" hotkeyLabel: "Hotkey: <key>"
@ -361,6 +432,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Nastri, distribuzione e tunnel name: Nastri, distribuzione e tunnel
@ -574,6 +683,18 @@ buildings:
name: Generatore di oggetti name: Generatore di oggetti
description: Disponibile solo nella modalità sandbox, emette il segnale dal description: Disponibile solo nella modalità sandbox, emette il segnale dal
livello elettrico come oggetti sul livello normale. livello elettrico come oggetti sul livello normale.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Taglio forme title: Taglio forme
@ -991,6 +1112,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Riguardo questo gioco title: Riguardo questo gioco
body: >- body: >-
@ -1089,3 +1214,57 @@ tips:
- Premi F4 due volte per mostrare la casella del cursore e della telecamera. - Premi F4 due volte per mostrare la casella del cursore e della telecamera.
- Puoi cliccare a sinistra di una forma fermata a schermo per rimuoverla - Puoi cliccare a sinistra di una forma fermata a schermo per rimuoverla
dalla lista. dalla lista.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -45,6 +45,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: デモ版 title: デモ版
intro: スタンドアローン版を手に入れ、すべての機能をアンロックしましょう! intro: スタンドアローン版を手に入れ、すべての機能をアンロックしましょう!
@ -63,6 +64,11 @@ mainMenu:
savegameLevel: レベル <x> savegameLevel: レベル <x>
savegameLevelUnknown: 不明なレベル savegameLevelUnknown: 不明なレベル
savegameUnnamed: 無名のデータ savegameUnnamed: 無名のデータ
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -76,6 +82,9 @@ dialogs:
viewUpdate: アップデートを見る viewUpdate: アップデートを見る
showUpgrades: アップグレード表示 showUpgrades: アップグレード表示
showKeybindings: キー設定表示 showKeybindings: キー設定表示
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: インポートエラー title: インポートエラー
text: "セーブデータのインポートに失敗しました:" text: "セーブデータのインポートに失敗しました:"
@ -157,6 +166,67 @@ dialogs:
tutorialVideoAvailableForeignLanguage: tutorialVideoAvailableForeignLanguage:
title: チュートリアル視聴可能 title: チュートリアル視聴可能
desc: このレベルで利用できるチュートリアル動画がありますが、言語は英語です。確認しますか? desc: このレベルで利用できるチュートリアル動画がありますが、言語は英語です。確認しますか?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: マップ移動 moveMap: マップ移動
@ -178,6 +248,7 @@ ingame:
clearSelection: 選択範囲をクリア clearSelection: 選択範囲をクリア
pipette: スポイト pipette: スポイト
switchLayers: レイヤーを変更 switchLayers: レイヤーを変更
clearBelts: Clear belts
colors: colors:
red: red:
green: green:
@ -313,6 +384,44 @@ ingame:
achievements: achievements:
title: アチーブメント title: アチーブメント
desc: 取り尽くせ! desc: 取り尽くせ!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: ベルト、分配機とトンネル name: ベルト、分配機とトンネル
@ -493,6 +602,18 @@ buildings:
default: default:
name: なんでも抽出機 name: なんでも抽出機
description: サンドボックスモードでのみ使用可能で、ワイヤレイヤーで与えられた信号の形状を通常レイヤーに出力します。 description: サンドボックスモードでのみ使用可能で、ワイヤレイヤーで与えられた信号の形状を通常レイヤーに出力します。
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: 形の切断 title: 形の切断
@ -558,18 +679,21 @@ storyRewards:
desc: <strong>回転機</strong>のバリエーションが利用可能になりました 180°の回転ができるようになりますサプライズ :D desc: <strong>回転機</strong>のバリエーションが利用可能になりました 180°の回転ができるようになりますサプライズ :D
reward_wires_painter_and_levers: reward_wires_painter_and_levers:
title: ワイヤ&着色機(四分割) title: ワイヤ&着色機(四分割)
desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の レイヤーの上にある別のレイヤであり、多くの新しい要素があります!<br><br> desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の
まず最初に、<strong>四色着色機</strong>が利用可能になりました - 着色するスロットをワイヤレイヤで接続してください!<br><br> レイヤーの上にある別のレイヤであり、多くの新しい要素があります!<br><br>
ワイヤレイヤに切り替えるには、<strong>E</strong>を押します。 <br><br> まず最初に、<strong>四色着色機</strong>が利用可能になりました -
補足: 設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。" 着色するスロットをワイヤレイヤで接続してください!<br><br>
ワイヤレイヤに切り替えるには、<strong>E</strong>を押します。 <br><br> 補足:
設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。"
reward_filter: reward_filter:
title: アイテムフィルタ title: アイテムフィルタ
desc: <strong>アイテムフィルタ</strong>が利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、アイテムを上側または右側の出力に分離します。<br><br> desc: <strong>アイテムフィルタ</strong>が利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、アイテムを上側または右側の出力に分離します。<br><br>
また、真偽値(0/1)信号を入力すれば全てのアイテムの通過・非通過を制御できます。 また、真偽値(0/1)信号を入力すれば全てのアイテムの通過・非通過を制御できます。
reward_display: reward_display:
title: ディスプレイ title: ディスプレイ
desc: "<strong>ディスプレイ</strong>が利用可能になりました - ワイヤレイヤで信号を接続することで、その内容を表示できます!<br><br> desc: "<strong>ディスプレイ</strong>が利用可能になりました -
補足: ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!" ワイヤレイヤで信号を接続することで、その内容を表示できます!<br><br> 補足:
ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!"
reward_constant_signal: reward_constant_signal:
title: 定数信号 title: 定数信号
desc: <strong>定数信号</strong>がワイヤレイヤで利用可能になりました! これは例えば<strong>アイテムフィルタ</strong>に接続すると便利です。<br><br> desc: <strong>定数信号</strong>がワイヤレイヤで利用可能になりました! これは例えば<strong>アイテムフィルタ</strong>に接続すると便利です。<br><br>
@ -814,6 +938,10 @@ keybindings:
rotateToDown: "回転: 下向きにする" rotateToDown: "回転: 下向きにする"
rotateToRight: "回転: 右向きにする" rotateToRight: "回転: 右向きにする"
rotateToLeft: "回転: 左向きにする" rotateToLeft: "回転: 左向きにする"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: このゲームについて title: このゲームについて
body: >- body: >-
@ -860,9 +988,9 @@ tips:
- 切断機は配置された向きを考慮せず、常に垂直に切断します。 - 切断機は配置された向きを考慮せず、常に垂直に切断します。
- ストレージは左側の出力を優先します。 - ストレージは左側の出力を優先します。
- 増築可能なデザインを作るために時間を使ってください。それだけの価値があります! - 増築可能なデザインを作るために時間を使ってください。それだけの価値があります!
- <b>SHIFT</b>を使用すると複数の建物を一度に配置できます。 - Invest time to build repeatable designs - it's worth it!
- <b>ALT</b>を押しながらベルトを設置すると、向きを逆転できます。 - <b>ALT</b>を押しながらベルトを設置すると、向きを逆転できます。
- 効率が重要です! - You can hold <b>ALT</b> to invert the direction of placed belts.
- ハブから遠くに離れるほど、形状資源はより複雑な形になります。 - ハブから遠くに離れるほど、形状資源はより複雑な形になります。
- 機械の速度には上限があるので、最大効率を得るためには入力を分割してください。 - 機械の速度には上限があるので、最大効率を得るためには入力を分割してください。
- 効率を最大化するために分配機/合流機を使用できます。 - 効率を最大化するために分配機/合流機を使用できます。
@ -878,8 +1006,8 @@ tips:
- モジュールがあれば、空間はただの認識に過ぎなくなる――生ある人間に対する気遣いだ。 - モジュールがあれば、空間はただの認識に過ぎなくなる――生ある人間に対する気遣いだ。
- 設計図としての工場を別に作っておくと、工場のモジュール化において重要な役割を果たします。 - 設計図としての工場を別に作っておくと、工場のモジュール化において重要な役割を果たします。
- 混色機をよく見ると、色の混ぜ方が解ります。 - 混色機をよく見ると、色の混ぜ方が解ります。
- <b>CTRL</b> + クリックで範囲選択ができます。 - Have a closer look at the color mixer, and your questions will be answered.
- ハブに近すぎる設計物を作ると、のちの設計の邪魔になるかもしれません。 - Use <b>CTRL</b> + Click to select an area.
- アップグレードリストの各形状の横にあるピンのアイコンは、その形状を画面左に固定表示します。 - アップグレードリストの各形状の横にあるピンのアイコンは、その形状を画面左に固定表示します。
- 三原色全てを混ぜ合わせると白になります! - 三原色全てを混ぜ合わせると白になります!
- マップは無限の広さがあります。臆せずに拡張してください。 - マップは無限の広さがあります。臆せずに拡張してください。
@ -893,3 +1021,58 @@ tips:
- F4を押すことで、FPSとTickレートを表示できます。 - F4を押すことで、FPSとTickレートを表示できます。
- F4を2回押すと、マウスとカメラの座標を表示できます。 - F4を2回押すと、マウスとカメラの座標を表示できます。
- 左のピン留めされた図形をクリックすると、固定を解除できます。 - 左のピン留めされた図形をクリックすると、固定を解除できます。
- You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -47,6 +47,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: 체험판 버전 title: 체험판 버전
intro: 정식 버전을 구매해서 모든 콘텐츠를 사용해 보세요! intro: 정식 버전을 구매해서 모든 콘텐츠를 사용해 보세요!
@ -66,6 +67,11 @@ mainMenu:
madeBy: 제작 <author-link> madeBy: 제작 <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: 이름 없음 savegameUnnamed: 이름 없음
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: 확인 ok: 확인
@ -79,6 +85,9 @@ dialogs:
viewUpdate: 업데이트 보기 viewUpdate: 업데이트 보기
showUpgrades: 업그레이드 보기 showUpgrades: 업그레이드 보기
showKeybindings: 조작법 보기 showKeybindings: 조작법 보기
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: 가져오기 오류 title: 가져오기 오류
text: "세이브 파일을 가져오지 못했습니다:" text: "세이브 파일을 가져오지 못했습니다:"
@ -163,6 +172,67 @@ dialogs:
tutorialVideoAvailableForeignLanguage: tutorialVideoAvailableForeignLanguage:
title: 활성화된 튜토리얼 title: 활성화된 튜토리얼
desc: 현재 레벨에서 사용할 수 있는 튜토리얼 비디오가 있습니다! 허나 영어로만 제공될 것입니다. 보시겠습니까? desc: 현재 레벨에서 사용할 수 있는 튜토리얼 비디오가 있습니다! 허나 영어로만 제공될 것입니다. 보시겠습니까?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: 이동 moveMap: 이동
@ -184,6 +254,7 @@ ingame:
clearSelection: 지우기 clearSelection: 지우기
pipette: 피펫 pipette: 피펫
switchLayers: 레이어 전환 switchLayers: 레이어 전환
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: <key> 키를 눌러 변형 전환 cycleBuildingVariants: <key> 키를 눌러 변형 전환
hotkeyLabel: "단축키: <key>" hotkeyLabel: "단축키: <key>"
@ -322,6 +393,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: 벨트, 밸런서, 터널 name: 벨트, 밸런서, 터널
@ -506,6 +615,18 @@ buildings:
default: default:
name: 아이템 생성기 name: 아이템 생성기
description: 샌드박스 모드에서만 사용할 수 있는 아이템으로, 일반 레이어 위에 있는 전선 레이어에서 주어진 신호를 출력합니다. description: 샌드박스 모드에서만 사용할 수 있는 아이템으로, 일반 레이어 위에 있는 전선 레이어에서 주어진 신호를 출력합니다.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: 절단기 title: 절단기
@ -765,8 +886,8 @@ settings:
description: 기본적으로 활성화되어 있으며, 자원 패치에서 피펫 기능을 사용 시 즉시 추출기를 선택합니다. description: 기본적으로 활성화되어 있으며, 자원 패치에서 피펫 기능을 사용 시 즉시 추출기를 선택합니다.
simplifiedBelts: simplifiedBelts:
title: 벨트 단순화 (못생김) title: 벨트 단순화 (못생김)
description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 정도로
정도로 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다. 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다.
enableMousePan: enableMousePan:
title: 화면 가장자리 패닝 title: 화면 가장자리 패닝
description: 커서를 화면 가장자리로 옮기면 스크롤되어 지도를 이동할 수 있습니다. 스크롤 속도는 이동 속도 설정에 따릅니다. description: 커서를 화면 가장자리로 옮기면 스크롤되어 지도를 이동할 수 있습니다. 스크롤 속도는 이동 속도 설정에 따릅니다.
@ -853,6 +974,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: 게임 정보 title: 게임 정보
body: >- body: >-
@ -922,7 +1047,7 @@ tips:
- 공장을 허브에 가까이 지으면 나중에 거대한 프로젝트에 방해가 될 수 있습니다. - 공장을 허브에 가까이 지으면 나중에 거대한 프로젝트에 방해가 될 수 있습니다.
- 업그레이드 목록에 나타나는 도형 옆의 핀 아이콘을 누르면 화면에 고정됩니다. - 업그레이드 목록에 나타나는 도형 옆의 핀 아이콘을 누르면 화면에 고정됩니다.
- 세 가지의 기본 색상을 모두 섞어서 흰색을 만드세요! - 세 가지의 기본 색상을 모두 섞어서 흰색을 만드세요!
- 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 껏 확장하세요! - 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 마음껏 확장하세요!
- Factorio도 플레이 해보세요! 제가 가장 좋아하는 게임입니다. - Factorio도 플레이 해보세요! 제가 가장 좋아하는 게임입니다.
- 4단 절단기는 오른쪽 상단부터 시계 방향으로 차례로 절단합니다. - 4단 절단기는 오른쪽 상단부터 시계 방향으로 차례로 절단합니다.
- 메인 메뉴에서 세이브 파일을 다운로드 할 수 있습니다. - 메인 메뉴에서 세이브 파일을 다운로드 할 수 있습니다.
@ -933,3 +1058,57 @@ tips:
- F4 키를 누르면 FPS와 틱 비율을 표시합니다. - F4 키를 누르면 FPS와 틱 비율을 표시합니다.
- F4 키를 두번 누르면 마우스와 카메라의 타일을 표시합니다. - F4 키를 두번 누르면 마우스와 카메라의 타일을 표시합니다.
- 왼쪽에 고정된 도형을 클릭하여 고정을 해제할 수 있습니다. - 왼쪽에 고정된 도형을 클릭하여 고정을 해제할 수 있습니다.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -52,6 +52,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Version title: Demo Version
intro: Get the standalone to unlock all features! intro: Get the standalone to unlock all features!
@ -71,6 +72,11 @@ mainMenu:
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -84,6 +90,9 @@ dialogs:
viewUpdate: View Update viewUpdate: View Update
showUpgrades: Show Upgrades showUpgrades: Show Upgrades
showKeybindings: Show Keybindings showKeybindings: Show Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Import Error title: Import Error
text: "Failed to import your savegame:" text: "Failed to import your savegame:"
@ -180,6 +189,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Move moveMap: Move
@ -201,6 +271,7 @@ ingame:
clearSelection: Clear Selection clearSelection: Clear Selection
pipette: Pipette pipette: Pipette
switchLayers: Switch layers switchLayers: Switch layers
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Press <key> to cycle variants. cycleBuildingVariants: Press <key> to cycle variants.
hotkeyLabel: "Hotkey: <key>" hotkeyLabel: "Hotkey: <key>"
@ -348,6 +419,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Belts, Distributor & Tunnels name: Belts, Distributor & Tunnels
@ -554,6 +663,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Cutting Shapes title: Cutting Shapes
@ -954,6 +1075,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: About this Game title: About this Game
body: >- body: >-
@ -1039,3 +1164,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPATIE space: SPATIE
loggingIn: Inloggen
demoBanners: demoBanners:
title: Demoversie title: Demoversie
intro: Koop de standalone om alle functies te ontgrendelen! intro: Koop de standalone om alle functies te ontgrendelen!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Gemaakt door <author-link> madeBy: Gemaakt door <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Naamloos savegameUnnamed: Naamloos
puzzleMode: Puzzel Modus
back: Terug
puzzleDlcText: Houd je van het comprimeren en optimaliseren van fabrieken? Verkrijg de puzzel
DLC nu op Steam voor nog meer plezier!
puzzleDlcWishlist: Voeg nu toe aan je verlanglijst!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Zie Update viewUpdate: Zie Update
showUpgrades: Zie Upgrades showUpgrades: Zie Upgrades
showKeybindings: Zie Sneltoetsen showKeybindings: Zie Sneltoetsen
retry: Opnieuw Proberen
continue: Ga Verder
playOffline: Offline Spelen
importSavegameError: importSavegameError:
title: Importeerfout title: Importeerfout
text: "Het importeren van je savegame is mislukt:" text: "Het importeren van je savegame is mislukt:"
@ -185,9 +194,64 @@ dialogs:
desc: Er is een tutorial video beschikbaar voor dit level! Zou je het willen desc: Er is een tutorial video beschikbaar voor dit level! Zou je het willen
bekijken? bekijken?
tutorialVideoAvailableForeignLanguage: tutorialVideoAvailableForeignLanguage:
title: Tutorial Available title: Tutorial Beschikbaar
desc: Er is een tutorial beschikbaar voor dit level, maar het is alleen desc: Er is een tutorial beschikbaar voor dit level, maar het is alleen
beschikbaar in het Engels. Zou je het toch graag kijken? beschikbaar in het Engels. Zou je het toch graag kijken?
editConstantProducer:
title: Item instellen
puzzleLoadFailed:
title: Puzzels kunnen niet geladen worden
desc: "Helaas konden de puzzels niet worden geladen:"
submitPuzzle:
title: Puzzel indienen
descName: "Geef je puzzel een naam:"
descIcon: "Voer een unieke vorm sleutel in, die wordt weergegeven als het icoon van
uw puzzel (je kunt ze <link>hier</link> genereren, of je kunt er een kiezen
van de willekeurig voorgestelde vormen hieronder):"
placeholderName: Puzzel Naam
puzzleResizeBadBuildings:
title: Formaat wijzigen niet mogelijk
desc: Je kunt het gebied niet kleiner maken, want dan zouden sommige gebouwen buiten het gebied zijn.
puzzleLoadError:
title: Foute Puzzel
desc: "De puzzel kon niet geladen worden:"
offlineMode:
title: Offline Modus
desc: We konden de server niet bereiken, dus het spel moet offline modus draaien. Zorg ervoor dat je een actieve internetverbinding heeft.
puzzleDownloadError:
title: Download fout
desc: "Downloaden van de puzzel is mislukt:"
puzzleSubmitError:
title: Indieningsfout
desc: "Het indienen van je puzzel is mislukt:"
puzzleSubmitOk:
title: Puzzel Gepubliceerd
desc: Gefeliciteerd! Je puzzel is gepubliceerd en kan nu worden gespeeld door
anderen. Je kunt het nu vinden in het gedeelte "Mijn puzzels".
puzzleCreateOffline:
title: Offline Modus
desc: Aangezien je offline bent, kan je je puzzels niet opslaan of publiceren. Wil je nog steeds doorgaan?
puzzlePlayRegularRecommendation:
title: Aanbeveling
desc: Ik raad <strong>sterk</strong> aan om het normale spel tot niveau 12 te spelen voordat je de puzzel-DLC probeert, anders kan je mechanica tegenkomen die je nog niet kent. Wil je toch doorgaan?
puzzleShare:
title: Vorm Sleutel Gekopieerd
desc: De vorm sleutel van de puzzel (<key>) is naar je klembord gekopieerd! Het kan in het puzzelmenu worden ingevoerd om toegang te krijgen tot de puzzel.
puzzleReport:
title: Puzzel Rapporteren
options:
profane: Ongepast
unsolvable: Niet oplosbaar
trolling: Trollen
puzzleReportComplete:
title: Bedankt voor je feedback!
desc: De puzzel is gemarkeerd.
puzzleReportError:
title: Melden mislukt
desc: "Uw melding kan niet worden verwerkt:"
puzzleLoadShortKey:
title: Voer een vorm sleutel in
desc: Voer de vorm sleutel van de puzzel in om deze te laden.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Beweeg speelveld moveMap: Beweeg speelveld
@ -209,6 +273,7 @@ ingame:
clearSelection: Annuleer selectie clearSelection: Annuleer selectie
pipette: Pipet pipette: Pipet
switchLayers: Wissel lagen switchLayers: Wissel lagen
clearBelts: Lopende banden leeg maken
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Druk op <key> om tussen varianten te wisselen. cycleBuildingVariants: Druk op <key> om tussen varianten te wisselen.
hotkeyLabel: "Hotkey: <key>" hotkeyLabel: "Hotkey: <key>"
@ -358,6 +423,39 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Gebied
zoneWidth: Breedte
zoneHeight: Hoogte
trimZone: Bijsnijden
clearItems: Items leeg maken
share: Delen
report: Rapporteren
puzzleEditorControls:
title: Puzzel Maker
instructions:
- 1. Plaats <strong>Constante Producenten</strong> om vormen en
kleuren aan de speler te bieden
- 2. Bouw een of meer vormen die de speler later en
bezorg het aan een of meer <strong>Ontvangers</strong>
- 3. Wanneer een Ontvanger een vorm ontvangt voor een bepaalde tijd, het <strong>slaat het op als een doel</strong> dat de speler later moet produceren (Aangegeven door de <strong>groene indicatoren</strong>).
- 4. Klik de <strong>vergrendelknop</strong> om een gebouw uit te schakelen.
- 5. Zodra je op review klikt, wordt je puzzel gevalideerd en jij
kan het publiceren.
- 6. Bij publicatie, <strong>worden alle gebouwen verwijderd</strong> behalve de Muren, Constante Producenten en Ontvangers - Dat is het deel dat de speler tenslotte voor zichzelf moet uitzoeken :)
puzzleCompletion:
title: Puzzel Voltooid!
titleLike: "Klik op het hartje als je de puzzel leuk vond:"
titleRating: Hoe moeilijk vond je de puzzel?
titleRatingDesc: Je beoordeling helpt me om je in de toekomst betere suggesties te geven
continueBtn: Blijf Spelen
menuBtn: Menu
puzzleMetadata:
author: Auteur
shortKey: Vorm Sleutel
rating: Moeilijkheidsgraad
averageDuration: Gem. Speel Tijd
completionRate: Voltooiingspercentage
shopUpgrades: shopUpgrades:
belt: belt:
name: Banden, Verdeler & Tunnels name: Banden, Verdeler & Tunnels
@ -562,6 +660,18 @@ buildings:
name: Item Producent name: Item Producent
description: Alleen beschikbaar in sandbox-modus, geeft het gegeven signaal van description: Alleen beschikbaar in sandbox-modus, geeft het gegeven signaal van
de kabel laag op de reguliere laag. de kabel laag op de reguliere laag.
constant_producer:
default:
name: Constante Producent
description: Voert constant een bepaalde vorm of kleur uit.
goal_acceptor:
default:
name: Ontvanger
description: Lever vormen aan de Ontvanger om ze als doel te stellen.
block:
default:
name: Blokkade
description: Hiermee kan je een tegel blokkeren.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Vormen Knippen title: Vormen Knippen
@ -979,6 +1089,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constante Producent
goal_acceptor: Ontvanger
block: Blokkade
massSelectClear: Lopende banden leeg maken
about: about:
title: Over dit spel title: Over dit spel
body: >- body: >-
@ -1080,3 +1194,52 @@ tips:
- Druk twee keer op F4 om de tegel van je muis en camera weer te geven. - Druk twee keer op F4 om de tegel van je muis en camera weer te geven.
- Je kan aan de linkerkant op een vastgezette vorm klikken om deze los te - Je kan aan de linkerkant op een vastgezette vorm klikken om deze los te
maken. maken.
puzzleMenu:
play: Spelen
edit: Bewerken
title: Puzzel Modus
createPuzzle: Puzzel Maken
loadPuzzle: Laden
reviewPuzzle: Beoordeel en publiceer
validatingPuzzle: Puzzel Valideren
submittingPuzzle: Puzzel Indienen
noPuzzles: Er zijn momenteel geen puzzels in deze sectie.
categories:
levels: Levels
new: Nieuw
top-rated: Best Beoordeeld
mine: Mijn Puzzels
short: Kort
easy: Makkelijk
hard: Moeilijk
completed: Voltooid
validation:
title: Ongeldige Puzzel
noProducers: Plaats alstublieft een Constante Producent!
noGoalAcceptors: Plaats alstublieft een Ontvanger!
goalAcceptorNoItem: Een of meer Ontvangers hebben nog geen item toegewezen.
Geef ze een vorm om een doel te stellen.
goalAcceptorRateNotMet: Een of meerdere Ontvangers krijgen niet genoeg items.
Zorg ervoor dat de indicatoren groen zijn voor alle acceptanten.
buildingOutOfBounds: Een of meer gebouwen bevinden zich buiten het bebouwbare gebied. Vergroot het gebied of verwijder ze.
autoComplete: Je puzzel voltooid zichzelf automatisch! Zorg ervoor dat je Constante Producenten niet rechtstreeks aan je Ontvangers leveren.
backendErrors:
ratelimit: Je voert je handelingen te vaak uit. Wacht alstublieft even.
invalid-api-key: Kan niet communiceren met de servers, probeer alstublieft het spel te updaten/herstarten (ongeldige API-sleutel).
unauthorized: Kan niet communiceren met de servers, probeer alstublieft het spel te updaten/herstarten (Onbevoegd).
bad-token: Kan niet communiceren met de servers, probeer alstublieft het spel te updaten/herstarten (Ongeldige Token).
bad-id: Ongeldige puzzel-ID.
not-found: De opgegeven puzzel is niet gevonden.
bad-category: De opgegeven categorie is niet gevonden.
bad-short-key: De opgegeven vorm sleutel is ongeldig.
profane-title: Je puzzel titel bevat groffe woorden.
bad-title-too-many-spaces: Je puzzel titel is te kort.
bad-shape-key-in-emitter: Een Ontvanger heeft een ongeldig item.
bad-shape-key-in-goal: Een Constante Producent heeft een ongeldig item.
no-emitters: Je puzzel heeft geen Constante Producenten.
no-goals: Je puzzel heeft geen Ontvangers.
short-key-already-taken: Deze vorm sleutel is al in gebruik, gebruik een andere.
can-not-report-your-own-puzzle: Je kunt je eigen puzzel niet melden.
bad-payload: Het verzoek bevat ongeldige gegevens.
bad-building-placement: Je puzzel bevat ongeldig geplaatste gebouwen.
timeout: Het verzoek is verlopen.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: MELLOMROM space: MELLOMROM
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Versjon title: Demo Versjon
intro: Skaff deg frittstående versjon for å åpne alle funksjoner! intro: Skaff deg frittstående versjon for å åpne alle funksjoner!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Laget av <author-link> madeBy: Laget av <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Vis Oppdatering viewUpdate: Vis Oppdatering
showUpgrades: Vis Oppgraderinger showUpgrades: Vis Oppgraderinger
showKeybindings: Se Hurtigtaster showKeybindings: Se Hurtigtaster
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Importeringsfeil title: Importeringsfeil
text: "Kunne ikke importere lagringsfilen:" text: "Kunne ikke importere lagringsfilen:"
@ -186,6 +195,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Beveg moveMap: Beveg
@ -207,6 +277,7 @@ ingame:
clearSelection: Fjern Valgte clearSelection: Fjern Valgte
pipette: Pipette pipette: Pipette
switchLayers: Bytt lag switchLayers: Bytt lag
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Trykk <key> for å veksle mellom variantene. cycleBuildingVariants: Trykk <key> for å veksle mellom variantene.
hotkeyLabel: "Hotkey: <key>" hotkeyLabel: "Hotkey: <key>"
@ -354,6 +425,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Belter, Distributører & Tunneler name: Belter, Distributører & Tunneler
@ -565,6 +674,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Kutt Objekter title: Kutt Objekter
@ -970,6 +1091,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Om dette spillet title: Om dette spillet
body: >- body: >-
@ -1055,3 +1180,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACJA space: SPACJA
loggingIn: Logging in
demoBanners: demoBanners:
title: Wersja demonstracyjna title: Wersja demonstracyjna
intro: Kup pełną wersję gry, by odblokować więcej funkcji! intro: Kup pełną wersję gry, by odblokować więcej funkcji!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Gra wykonana przez <author-link> madeBy: Gra wykonana przez <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Zapis bez nazwy savegameUnnamed: Zapis bez nazwy
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Zobacz aktualizację viewUpdate: Zobacz aktualizację
showUpgrades: Pokaż ulepszenia showUpgrades: Pokaż ulepszenia
showKeybindings: Pokaż Klawiszologię showKeybindings: Pokaż Klawiszologię
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Błąd importowania title: Błąd importowania
text: "Nie udało się zaimportować twojego zapisu gry:" text: "Nie udało się zaimportować twojego zapisu gry:"
@ -187,6 +196,67 @@ dialogs:
title: Dostępny tutorial title: Dostępny tutorial
desc: Dla tego poziomu dostępny jest video tutorial w języku angielskim. Chcesz desc: Dla tego poziomu dostępny jest video tutorial w języku angielskim. Chcesz
go obejrzeć? go obejrzeć?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Ruch moveMap: Ruch
@ -208,6 +278,7 @@ ingame:
clearSelection: Wyczyść zaznaczenie clearSelection: Wyczyść zaznaczenie
pipette: Wybierz obiekt z mapy pipette: Wybierz obiekt z mapy
switchLayers: Przełącz warstwy switchLayers: Przełącz warstwy
clearBelts: Clear belts
colors: colors:
red: Czerwony red: Czerwony
green: Zielony green: Zielony
@ -356,6 +427,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Taśmociągi, Dystrybutory & Tunele name: Taśmociągi, Dystrybutory & Tunele
@ -573,6 +682,18 @@ buildings:
name: Producent kształtów name: Producent kształtów
description: Dostępne tylko w trybie piaskownicy. Produkuje przedmioty z sygnału description: Dostępne tylko w trybie piaskownicy. Produkuje przedmioty z sygnału
danego na warstwie przewodów na główną warstwę. danego na warstwie przewodów na główną warstwę.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Przecinanie Kształtów title: Przecinanie Kształtów
@ -640,7 +761,7 @@ storyRewards:
reward_storage: reward_storage:
title: Magazyn title: Magazyn
desc: Właśnie odblokowałeś <strong>magazyn</strong> - Pozwala na przechowywanie desc: Właśnie odblokowałeś <strong>magazyn</strong> - Pozwala na przechowywanie
przedmiotów, do pewnej ilości!<br><br> Prawe wyjście posiada większy przedmiotów, do pewnej ilości!<br><br> Lewe wyjście posiada większy
piorytet, więc może być on użyty jako <strong>brama piorytet, więc może być on użyty jako <strong>brama
przepełnieniowa</strong>! przepełnieniowa</strong>!
reward_freeplay: reward_freeplay:
@ -980,6 +1101,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: O Grze title: O Grze
body: 'Ta gra jest open-source. Rozwijana jest przez <a body: 'Ta gra jest open-source. Rozwijana jest przez <a
@ -1078,3 +1203,57 @@ tips:
- Naciśnij F4, by zobaczyć ilość FPS i tempo ticków. - Naciśnij F4, by zobaczyć ilość FPS i tempo ticków.
- Naciśnij F4 dwa razy, by zobaczyć kratkę twojej myszy i kamery. - Naciśnij F4 dwa razy, by zobaczyć kratkę twojej myszy i kamery.
- Możesz kliknąć przypięty kształt po lewej stronie, by go odpiąć. - Możesz kliknąć przypięty kształt po lewej stronie, by go odpiąć.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -14,10 +14,10 @@ steamPage:
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! 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!
what_others_say: O que as pessoas dizem sobre o shapez.io what_others_say: O que as pessoas dizem sobre o shapez.io
nothernlion_comment: Este jogo é ótimo - estou me divertindo muito jogando nothernlion_comment: Este jogo é ótimo - estou me divertindo muito jogando e o
e o tempo passou voando. tempo passou voando.
notch_comment: Droga. Eu realmente deveria dormir, mas eu acho que acabei notch_comment: Droga. Eu realmente deveria dormir, mas eu acho que acabei de
de descobrir como fazer um computador no shapez.io descobrir como fazer um computador no shapez.io
steam_review_comment: Este jogo roubou minha vida e eu não a quero de volta. steam_review_comment: Este jogo roubou minha vida e eu não a quero de volta.
Jogo de fábrica muito descontraído que não me deixa parar de fazer Jogo de fábrica muito descontraído que não me deixa parar de fazer
linhas mais eficientes. linhas mais eficientes.
@ -52,6 +52,7 @@ global:
escape: ESC escape: ESC
shift: Shift shift: Shift
space: Espaço space: Espaço
loggingIn: Entrando
demoBanners: demoBanners:
title: Versão Demo title: Versão Demo
intro: Compre a versão completa para desbloquear todos os recursos! intro: Compre a versão completa para desbloquear todos os recursos!
@ -71,6 +72,11 @@ mainMenu:
savegameLevel: Nível <x> savegameLevel: Nível <x>
savegameLevelUnknown: Nível desconhecido savegameLevelUnknown: Nível desconhecido
savegameUnnamed: Sem nome savegameUnnamed: Sem nome
puzzleMode: Modo Puzzle
back: Voltar
puzzleDlcText: Você gosta de compactar e otimizar fábricas? Adquira a Puzzle
DLC já disponível na Steam para se divertir ainda mais!
puzzleDlcWishlist: Adicione já a sua lista de desejos!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -84,6 +90,9 @@ dialogs:
viewUpdate: Atualizações viewUpdate: Atualizações
showUpgrades: Melhorias showUpgrades: Melhorias
showKeybindings: Controles showKeybindings: Controles
retry: Tentar novamente
continue: Continue
playOffline: Jogar Offline
importSavegameError: importSavegameError:
title: Erro de importação title: Erro de importação
text: "Houve uma falha ao importar seu jogo salvo:" text: "Houve uma falha ao importar seu jogo salvo:"
@ -181,6 +190,67 @@ dialogs:
title: Tutorial disponível title: Tutorial disponível
desc: Existe um tutorial em vídeo para esse nível, mas está disponível apenas em desc: Existe um tutorial em vídeo para esse nível, mas está disponível apenas em
Inglês. Gostaria de assistí-lo? Inglês. Gostaria de assistí-lo?
editConstantProducer:
title: Selecionar Item
puzzleLoadFailed:
title: O carregamento dos desafios falhou
desc: "Infelizmente os desafios não puderam ser carregados:"
submitPuzzle:
title: Enviar desafio
descName: "Dê um nome ao seu desafio:"
descIcon: "Por favor crie um código exclusivo, o qual será o ícone
do seu Desafio (Você pode gera-los <link>aqui</link>, ou escolha um
dos gerados aleatoriamente abaixo):"
placeholderName: Nome do desafio
puzzleResizeBadBuildings:
title: Mudar o tamanho não é possível
desc: Você não pode deixar a zona menor, porque algumas construções ficariam
fora dela.
puzzleLoadError:
title: Desafio Ruim
desc: "O desafio não pôde ser carregado:"
offlineMode:
title: Modo Offline
desc: Não conseguimos nos conectar aos servidores, então o jogo terá que ser jogado no Modo Offline.
Por favor garanta que você tenha uma conexão ativa com a internet.
puzzleDownloadError:
title: Erro no download
desc: "Falha ao baixar o desafio:"
puzzleSubmitError:
title: Erro no envio
desc: "Erro ao enviar seu desafio:"
puzzleSubmitOk:
title: Desafio publicado
desc: Parabéns! Seu desafio foi publicado e pode ser acessado por
outros jogadores. Você pode acha-lo na categoria "Meus Desafios".
puzzleCreateOffline:
title: Modo Offline
desc: Como você está no Modo Offline, não será possível salvar e/ou publicar seus
desafios. Você deseja continuar?
puzzlePlayRegularRecommendation:
title: Recomendação
desc: Eu <strong>fortemente</strong> recomendo jogar o jogo normal até o nível 12
antes de se aventurar na Puzzle DLC, senão você poderá encontrar
mecânicas que ainda não foram introduzidas. Você ainda deseja continuar?
puzzleShare:
title: Código copiado
desc: O código do desafio (<key>) foi copiado para sua área de transferência! Ele
pode ser inserido no menu de desafios para acessar o desafio.
puzzleReport:
title: Denunciar Desafio
options:
profane: Ofensivo
unsolvable: Impossível
trolling: Antijogo
puzzleReportComplete:
title: Obrigado pelo seu feedback!
desc: O desafio foi marcado.
puzzleReportError:
title: Falha ao denunciar
desc: "Sua denúncia não pôde ser processada:"
puzzleLoadShortKey:
title: Insira código
desc: Insira o código do desafio para carrega-lo.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Mover moveMap: Mover
@ -202,6 +272,7 @@ ingame:
clearSelection: Limpar Seleção clearSelection: Limpar Seleção
pipette: Conta-Gotas pipette: Conta-Gotas
switchLayers: Trocar Camadas switchLayers: Trocar Camadas
clearBelts: Clear belts
colors: colors:
red: Vermelho red: Vermelho
green: Verde green: Verde
@ -351,8 +422,45 @@ ingame:
title: Me ajuda title: Me ajuda
desc: Eu desenvolvo o jogo no meu tempo livre! desc: Eu desenvolvo o jogo no meu tempo livre!
achievements: achievements:
title: Achievements title: Conquistas
desc: Hunt them all! desc: Consiga todas elas!
puzzleEditorSettings:
zoneTitle: Zona
zoneWidth: Largura
zoneHeight: Altura
trimZone: Cortar
clearItems: Limpar Items
share: Compartilhar
report: Denunciar
puzzleEditorControls:
title: Criador de Desafios
instructions:
- 1. Coloque <strong>Produtores Constantes</strong> para gerar itens e
cores ao jogador
- 2. Monte uma ou mais itens que você quer que o jogador produza e
entregue em um ou mais <strong>Receptores de Objetivo</strong>
- 3. Uma vez que um Receptor de Objetivo recebe uma item por uma certa quantidade de
tempo, ele <strong>a salva como seu objetivo</strong> , o qual o jogador terá
que produzir depois (Indicato pela <strong>insígnia verde</strong>).
- 4. Clique no <strong>botao de travar</strong> de uma construção para desabilita-la.
- 5. Uma vez que você clicou em revisar, seu desafio será validado e você
poderá publica-lo.
- 6. Quando seu desafio for publicado, <strong>todas as construções serão removidas</strong>
exceto os Produtores Constantes e Receptores de Objetivo - Essa é a parte que
o jogador terá que descobrir sozinho, por isso se chama desafio :)
puzzleCompletion:
title: Desafio Completo!
titleLike: "Clique no coração se você gostou do desafio:"
titleRating: O qual difícil foi esse desafio?
titleRatingDesc: Sua avaliação me ajuda a te fazer sugestões melhores no futuro!
continueBtn: Continuar jogando
menuBtn: Menu
puzzleMetadata:
author: Autor
shortKey: Código
rating: Dificuldade
averageDuration: Duração média
completionRate: Taxa de sucesso
shopUpgrades: shopUpgrades:
belt: belt:
name: Esteiras, Distribuidores e Túneis name: Esteiras, Distribuidores e Túneis
@ -569,6 +677,18 @@ buildings:
name: Fabricante de Itens name: Fabricante de Itens
description: Disponível no modo sandbox apenas, envia o sinal recebido do plano description: Disponível no modo sandbox apenas, envia o sinal recebido do plano
de fios para o plano regular. de fios para o plano regular.
constant_producer:
default:
name: Produtor Constante
description: Produz constantemente um item ou cor específica.
goal_acceptor:
default:
name: Receptor de Objetivo
description: Entregue itens ao Receptor de Objetivo para os definir como o objetivo.
block:
default:
name: Bloco
description: Te permite bloquear um espaço.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Cortando formas title: Cortando formas
@ -980,10 +1100,14 @@ keybindings:
comparator: Comparador comparator: Comparador
item_producer: Produtor de Itens (Sandbox) item_producer: Produtor de Itens (Sandbox)
copyWireValue: "Fios: Copiar valor abaixo do cursor" copyWireValue: "Fios: Copiar valor abaixo do cursor"
rotateToUp: "Rotate: Point Up" rotateToUp: "Rotação: Para cima"
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotação: Para baixo"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotação: Para direita"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotação: Para esquerda"
constant_producer: Produtor Constante
goal_acceptor: Receptor de Objetivo
block: Bloco
massSelectClear: Limpar esteiras
about: about:
title: Sobre o jogo title: Sobre o jogo
body: >- body: >-
@ -1077,3 +1201,57 @@ tips:
- Pressione F4 para mostrar seu FPS e taxa de tiques. - 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. - 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á. - Você pode clicar em uma forma fixada na esquerda para tirá-la de lá.
puzzleMenu:
play: Jogar
edit: Editar
title: Modo Puzzle
createPuzzle: Criar Desafio
loadPuzzle: Carregar
reviewPuzzle: Revisar e Publicar
validatingPuzzle: Validando Desafio
submittingPuzzle: Enviando Desafio
noPuzzles: Não existem desafios nesta categoria atualmente.
categories:
levels: Níveis
new: Novo
top-rated: Melhor Avaliados
mine: Meus Desafios
short: Curto
easy: Fácil
hard: Difícil
completed: Completados
validation:
title: Desafio inválido
noProducers: Por favor coloque um Produtor Constante!
noGoalAcceptors: Por favor coloque um Receptor de Objetivo!
goalAcceptorNoItem: Um ou mais Receptores de Objetivo ainda não tiveram um item determinado.
Entregue um item a ele para definir seu objetivo.
goalAcceptorRateNotMet: Um ou mais Receptores de Objetivo não estão recebendo itens suficientes.
Garanta que os indicadores estejam verdes para todos os Receptores.
buildingOutOfBounds: Uma ou mais construções estão fora da área construível.
Você pode aumentar a área ou removê-los.
autoComplete: Seu desafio se completa sozinho! Por favor garanta que seus Produtores
Constantes não estão entregando diretamente aos seus Receptores de Objetivo.
backendErrors:
ratelimit: Você está fazendo coisas muito rapidamente. Por favor espere um pouco.
invalid-api-key: Falha ao comunicar com o backend, por favor tente
atualizar/reiniciar o jogo (Chave API Inválida).
unauthorized: Falha ao comunicar com o backend, por favor tente
atualizar/reiniciar o jogo (Não autorizado).
bad-token: Falha ao comunicar com o backend, por favor tente
atualizar/reiniciar o jogo (Bad Token).
bad-id: Indentificador de desafio inválido.
not-found: O desafio não pôde ser achado.
bad-category: A categoria não pôde ser achada.
bad-short-key: O código é inválido.
profane-title: O nome do seu desafio contém palavras proibidas.
bad-title-too-many-spaces: O nome do seu desafio é muito curto.
bad-shape-key-in-emitter: Um Produtor Constante contém um item inválido.
bad-shape-key-in-goal: Um Receptor de Objetivo contém um item inválido.
no-emitters: Seu desafio não contém nenhum Produtor Constante.
no-goals: Seu desafio não contém nenhum Receptor de Objetivo.
short-key-already-taken: Esse código já está sendo usado, por favor escolha outro.
can-not-report-your-own-puzzle: Você não pode denunciar seu próprio desafio.
bad-payload: O pedido contém dados inválidos.
bad-building-placement: Seu desafio contém construções colocadas de forma inválida.
timeout: Acabou o tempo do pedido.

View File

@ -15,12 +15,12 @@ steamPage:
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! 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!
what_others_say: O que dizem sobre o shapez.io what_others_say: O que dizem sobre o shapez.io
nothernlion_comment: Este é um jogo fantástico - Estou a ter um bom bocado enquanto o jogo, nothernlion_comment: Este é um jogo fantástico - Estou a ter um bom bocado
e o tempo parece que voa. enquanto o jogo, e o tempo parece que voa.
notch_comment: Ora bolas. Eu devia ir dormir, mas acho que acabei de descobrir notch_comment: Ora bolas. Eu devia ir dormir, mas acho que acabei de descobrir
como criar computorizar no shapez.io como criar computorizar no shapez.io
steam_review_comment: Este jogo roubou a minha vida e não a quero de volta. steam_review_comment: Este jogo roubou a minha vida e não a quero de volta. Jogo
Jogo de fábrica relaxante que não me deixa parar de fazer as minhas linhas de fábrica relaxante que não me deixa parar de fazer as minhas linhas
cada vez mais eficientes. cada vez mais eficientes.
global: global:
loading: A Carregar loading: A Carregar
@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Versão Demo 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!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Criado por <author-link> madeBy: Criado por <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Sem Nome savegameUnnamed: Sem Nome
puzzleMode: Modo Puzzle
back: Voltar
puzzleDlcText: Gostas de compactar e otimizar fábricas? Adquire agora o DLC Puzzle
na Steam para ainda mais diversão!
puzzleDlcWishlist: Lista de desejos agora!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Ver Update viewUpdate: Ver Update
showUpgrades: Mostrar Upgrades showUpgrades: Mostrar Upgrades
showKeybindings: Mostrar Atalhos showKeybindings: Mostrar Atalhos
retry: Tentar novamente
continue: Continuar
playOffline: Jogar Offline
importSavegameError: importSavegameError:
title: Erro de importação title: Erro de importação
text: "Erro ao importar o teu savegame:" text: "Erro ao importar o teu savegame:"
@ -189,6 +198,67 @@ dialogs:
title: Tutorial Disponível title: Tutorial Disponível
desc: Existe um vídeo de tutorial disponível para este nível, mas apenas está desc: Existe um vídeo de tutorial disponível para este nível, mas apenas está
disponível em Inglês. Gostarias de o ver? disponível em Inglês. Gostarias de o ver?
editConstantProducer:
title: Selecionar Item
puzzleLoadFailed:
title: Puzzles falharam a carregar
desc: "Infelizmente os puzzles não podem ser carregados:"
submitPuzzle:
title: Submeter Puzzle
descName: "Dá um nome ao teu puzzle:"
descIcon: "Por favor insere um pequeno código único que será a imagem do ícone
da teu puzzle (Podes gerar o código <link>aqui</link>, ou escolher uma
das seguintes sugestões aleatoriamente geradas.):"
placeholderName: Título do Puzzle
puzzleResizeBadBuildings:
title: Não é possível alterar o tamanho
desc: Não podes tornar a zona mais pequena, assim algumas das construções ficariam
fora da zona.
puzzleLoadError:
title: Mau puzzle
desc: "O puzzle falhou ao carregar:"
offlineMode:
title: Modo Offline
desc: Não conseguimos correr os servidores, sendo assim o jogo tem de ser jogado em modo offline.
Por favor assegura-te de que tens uma boa conexão de internet.
puzzleDownloadError:
title: Falha no Download
desc: "Falha ao fazer o download do puzzle:"
puzzleSubmitError:
title: Erro ao submeter
desc: "Falha ao submeter o teu puzzle:"
puzzleSubmitOk:
title: Puzzle Publicado
desc: Parabéns! O teu puzzle foi publicado e agora pode ser jogado
por outros jogadores. Agora podes encontrar o teu puzzle na zona "Meus puzzles".
puzzleCreateOffline:
title: Modo Offline
desc: Como estás no modo offline, tu não poderás salvar e/ou publicar o
teu puzzle. Mesmo assim queres continuar?
puzzlePlayRegularRecommendation:
title: Recomendação
desc: Eu recomendo <strong>fortemente</strong> a jogares no modo normal até ao nível 12
antes de tentares o "puzzle DLC", caso contrário poderás encontrar
mecanicas às quais ainda não foste introduzido. Mesmo assim queres continuar?
puzzleShare:
title: Pequeno código copiado
desc: O pequeno código do puzzle (<key>) foi copiado para a tua área de transferências!
Poderá ser introduzido no menu puzzle para teres acesso ao puzzle.
puzzleReport:
title: Reportar Puzzle
options:
profane: Inapropriado
unsolvable: Não solucionável
trolling: Trolling
puzzleReportComplete:
title: Obrigado pelo teu feedback!
desc: O puzzle foi sinalizado.
puzzleReportError:
title: Falha ao reportar
desc: "Não foi possível proceder com o ter reporte:"
puzzleLoadShortKey:
title: Introduzir pequeno código
desc: Introduz um pequeno código para o puzzle carregar.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Mover moveMap: Mover
@ -210,6 +280,7 @@ ingame:
clearSelection: Cancelar clearSelection: Cancelar
pipette: Pipeta pipette: Pipeta
switchLayers: Troca de camadas switchLayers: Troca de camadas
clearBelts: Limpar tapetes rolantes
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Pressionar <key> para obter variações. cycleBuildingVariants: Pressionar <key> para obter variações.
hotkeyLabel: "Atalho: <key>" hotkeyLabel: "Atalho: <key>"
@ -358,8 +429,46 @@ ingame:
title: Ajuda-me title: Ajuda-me
desc: Eu desenvolvo este jogo no meu tempo livre! desc: Eu desenvolvo este jogo no meu tempo livre!
achievements: achievements:
title: Achievements title: Conquistas
desc: Hunt them all! desc: Tenta obtê-las todas!
puzzleEditorSettings:
zoneTitle: Zona
zoneWidth: Largura
zoneHeight: Altura
trimZone: Aparar
clearItems: Limpar Itens
share: Partilhar
report: Reportar
puzzleEditorControls:
title: Criador de Puzzle
instructions:
- 1. Coloca um <strong>Produtor Constante</strong> para fornecer formas e
cores ao jogador
- 2. Constrói uma ou mais formas que queiras que o jogador tenha de contruir mais tarde
e a tenha de entregar a um ou mais <strong>Recetor de Objetivo</strong>
- 3. Assim que o Recetor de Objetivo receba uma forma durante um certo espaço
de tempo, ele <strong>guarda-a num objetivo</strong> que o jogador terá
de produzir mais tarde (Indicatdo pelo <strong>distintivo verde</strong>).
- 4. Clcica no <strong>botão de bloqueio</strong> numa construção para
desátiva-lo.
- 5. Assim que clicares em analisar, o teu puzzle será validado e poderás
publicá-lo.
- 6. Após publicado, <strong>todas as construções serão removidas</strong>
excepto os Produtores e Recetores de Objetivo - Esta é a parte em que
é suposto o jogador tentar descobrir como resolver o teu Puzzle :)
puzzleCompletion:
title: Puzzle Completo!
titleLike: "Clica no coração se gostaste do puzzle:"
titleRating: Quão difícil achaste que foi o puzzle?
titleRatingDesc: A tua avaliação ajudar-me-á a fazer melhores sugestões no futuro
continueBtn: Continua a Jogar
menuBtn: Menu
puzzleMetadata:
author: Autor
shortKey: Pequeno Código
rating: Grau de dificuldade
averageDuration: Média de duração
completionRate: Taxa de conclusão
shopUpgrades: shopUpgrades:
belt: belt:
name: Tapetes, Distribuidores e Túneis name: Tapetes, Distribuidores e Túneis
@ -576,6 +685,18 @@ buildings:
name: Produtor de Itens name: Produtor de Itens
description: Disponível apenas no modo sandbox, produz o sinal dado na camada de description: Disponível apenas no modo sandbox, produz o sinal dado na camada de
fios na camada normal. fios na camada normal.
constant_producer:
default:
name: Produtor Constante
description: Produz constantemente uma forma ou cor específica.
goal_acceptor:
default:
name: Recetor de Objetivo
description: Entrega formas ao recetor de objetivo para defini-las como um objetivo.
block:
default:
name: Bloqueador
description: Permite-te bloquear uma quadrícula.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Corte de formas title: Corte de formas
@ -990,6 +1111,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Produtor Constante
goal_acceptor: Recetor de Objetivo
block: Bloqueador
massSelectClear: Limpar tapetes rolante
about: about:
title: Sobre o Jogo title: Sobre o Jogo
body: >- body: >-
@ -1085,3 +1210,57 @@ tips:
- Pressiona F4 para mostrar os teus FPS e Tick Rate. - Pressiona F4 para mostrar os teus FPS e Tick Rate.
- Pressiona F4 duas vezes para mostrar a tile do teu rato e câmara. - Pressiona F4 duas vezes para mostrar a tile do teu rato e câmara.
- Podes clicar numa forma afixada no lado direito para desafixa-la. - Podes clicar numa forma afixada no lado direito para desafixa-la.
puzzleMenu:
play: Jogar
edit: Editar
title: Modo Puzzle
createPuzzle: Criar Puzzle
loadPuzzle: Carregar
reviewPuzzle: Analisar e Publicar
validatingPuzzle: A validar Puzzle
submittingPuzzle: A submeter Puzzle
noPuzzles: Não há atualmente puzzles nesta secção.
categories:
levels: Nivéis
new: Novo
top-rated: Melhor Avaliado
mine: Meus Puzzles
short: Pequeno
easy: Fácil
hard: Difícil
completed: Completo
validation:
title: Puzzle Inválido
noProducers: Por favor coloca um Produtor Constante!
noGoalAcceptors: Por favor coloca um Recetor de Objetivo!
goalAcceptorNoItem: Um ou mais Recetores de Objetivo ainda não tem itens atrbuídos.
Entrega uma forma nele para definires um objetivo.
goalAcceptorRateNotMet: Um ou mais Recetores de Objetivo não está a receber itens suficientes.
Assegura-te de que tens o indicador verde em todos os Recetores.
buildingOutOfBounds: Uma ou mais formas estão fora da área de construção.
Ou aumentas a área ou removes esses itens.
autoComplete: O teu Puzzle completa-se sozinho! Por favor assegura-te de que os teus
Produtores Constantes não estão automaticamente direcionados para os Recetores de Objetivo.
backendErrors:
ratelimit: Estás a realizar as tuas ações demasiado rápido. Aguarda um pouco.
invalid-api-key: Falha ao cominucar com o backend, por favor tenta
atualizar/resetar o Jogo (Chave Api inválida).
unauthorized: Falha ao cominucar com o backend, or favor tenta
atualizar/resetar o Jogo (Não autorizado).
bad-token: Falha ao cominucar com o backend, por favor tenta atualizar/resetar
o Jogo (Mau Token).
bad-id: Identificador de Puzzle inválido.
not-found: O Puzzle pedido não foi encontrado.
bad-category: A categoria pedida não foi encontrada.
bad-short-key: O pequeno código inserido não é válido.
profane-title: O título do teu Puzzle contém palavras impróprias.
bad-title-too-many-spaces: O título do teu Puzzle é demasiado pequeno.
bad-shape-key-in-emitter: Um Produtor Constante tem um item inválido.
bad-shape-key-in-goal: Um Recetor de Objetivo tem um item inválido.
no-emitters: O teu Puzzle não contém nenhum Produtor Constante.
no-goals: O teu Puzzle não contém nenhum Recetor de Objetivo.
short-key-already-taken: Este pequeno código já foi utilizado, por favor tenta outro.
can-not-report-your-own-puzzle: Não podes reportar o teu próprio puzzle.
bad-payload: O pedido contém informção inválida.
bad-building-placement: O teu Puzzle contém construções posicionadas de forma inválida.
timeout: O tempo do pedido esgotou.

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Versiunea Demo title: Versiunea Demo
intro: Instalează versiunea Standalone pentru a debloca toate funcțiile! intro: Instalează versiunea Standalone pentru a debloca toate funcțiile!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Făcut de <author-link> madeBy: Făcut de <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Fară nume savegameUnnamed: Fară nume
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Vezi Update-ul viewUpdate: Vezi Update-ul
showUpgrades: Vezi Upgrade-urile showUpgrades: Vezi Upgrade-urile
showKeybindings: Arată tastele configurate showKeybindings: Arată tastele configurate
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Eroare la Importare title: Eroare la Importare
text: "Încercarea de importare a eșuat:" text: "Încercarea de importare a eșuat:"
@ -188,6 +197,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Move moveMap: Move
@ -209,6 +279,7 @@ ingame:
clearSelection: Golește Secțiunea clearSelection: Golește Secțiunea
pipette: Pipette pipette: Pipette
switchLayers: Switch layers switchLayers: Switch layers
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Apasă <key> pentru a cicla variantele. cycleBuildingVariants: Apasă <key> pentru a cicla variantele.
hotkeyLabel: "Tasta: <key>" hotkeyLabel: "Tasta: <key>"
@ -357,6 +428,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Benzi, Distribuitor & Tunele name: Benzi, Distribuitor & Tunele
@ -567,6 +676,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Tăierea formelor title: Tăierea formelor
@ -975,6 +1096,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Despre acest joc title: Despre acest joc
body: >- body: >-
@ -1060,3 +1185,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

File diff suppressed because it is too large Load Diff

View File

@ -53,6 +53,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Version title: Demo Version
intro: Get the standalone to unlock all features! intro: Get the standalone to unlock all features!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Level <x> savegameLevel: Level <x>
savegameLevelUnknown: Unknown Level savegameLevelUnknown: Unknown Level
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: View Update viewUpdate: View Update
showUpgrades: Show Upgrades showUpgrades: Show Upgrades
showKeybindings: Show Keybindings showKeybindings: Show Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Import Error title: Import Error
text: "Failed to import your savegame:" text: "Failed to import your savegame:"
@ -182,6 +191,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Move moveMap: Move
@ -203,6 +273,7 @@ ingame:
clearSelection: Clear selection clearSelection: Clear selection
pipette: Pipette pipette: Pipette
switchLayers: Switch layers switchLayers: Switch layers
clearBelts: Clear belts
colors: colors:
red: Red red: Red
green: Green green: Green
@ -350,6 +421,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Belts, Distributor & Tunnels name: Belts, Distributor & Tunnels
@ -556,6 +665,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Cutting Shapes title: Cutting Shapes
@ -957,6 +1078,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: About this Game title: About this Game
body: >- body: >-
@ -1042,3 +1167,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -52,6 +52,7 @@ global:
escape: ESC escape: ESC
shift: SHIFT shift: SHIFT
space: SPACE space: SPACE
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo Verzija title: Demo Verzija
intro: Nabavite punu igru kako biste otključali sve funkcije! intro: Nabavite punu igru kako biste otključali sve funkcije!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Nivo <x> savegameLevel: Nivo <x>
savegameLevelUnknown: Nepoznat Nivo savegameLevelUnknown: Nepoznat Nivo
savegameUnnamed: Unnamed savegameUnnamed: Unnamed
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Pogledajte ažuriranje viewUpdate: Pogledajte ažuriranje
showUpgrades: Prikaži Nadogradnje showUpgrades: Prikaži Nadogradnje
showKeybindings: Prikaži podešavanje tastera showKeybindings: Prikaži podešavanje tastera
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Greška prilikom uvoza title: Greška prilikom uvoza
text: "Neuspešan uvoz sačuvane igre:" text: "Neuspešan uvoz sačuvane igre:"
@ -182,6 +191,67 @@ dialogs:
title: Tutorial Available title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only desc: There is a tutorial video available for this level, but it is only
available in English. Would you like to watch it? available in English. Would you like to watch it?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Kretanje moveMap: Kretanje
@ -203,6 +273,7 @@ ingame:
clearSelection: Očisti odabir clearSelection: Očisti odabir
pipette: Pipeta pipette: Pipeta
switchLayers: Promeni sloj switchLayers: Promeni sloj
clearBelts: Clear belts
colors: colors:
red: Crvena red: Crvena
green: Zelena green: Zelena
@ -350,6 +421,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Trake, Delioci i Tuneli name: Trake, Delioci i Tuneli
@ -554,6 +663,18 @@ buildings:
name: Item Producer name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the description: Available in sandbox mode only, outputs the given signal from the
wires layer on the regular layer. wires layer on the regular layer.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Rezanje Oblika title: Rezanje Oblika
@ -955,6 +1076,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: O Igri title: O Igri
body: >- body: >-
@ -1040,3 +1165,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

View File

@ -52,6 +52,7 @@ global:
escape: ESC escape: ESC
shift: SKIFT shift: SKIFT
space: MELLANSLAG space: MELLANSLAG
loggingIn: Logging in
demoBanners: demoBanners:
title: Demo-version 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!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Skapad av <author-link> madeBy: Skapad av <author-link>
subreddit: Reddit subreddit: Reddit
savegameUnnamed: Namnlöst savegameUnnamed: Namnlöst
puzzleMode: Puzzle Mode
back: Back
puzzleDlcText: Do you enjoy compacting and optimizing factories? Get the Puzzle
DLC now on Steam for even more fun!
puzzleDlcWishlist: Wishlist now!
dialogs: dialogs:
buttons: buttons:
ok: OK ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Se uppdateringar viewUpdate: Se uppdateringar
showUpgrades: Visa uppgraderingar showUpgrades: Visa uppgraderingar
showKeybindings: Visa tangentbindingar showKeybindings: Visa tangentbindingar
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError: importSavegameError:
title: Importfel title: Importfel
text: "Kunde inte importera sparfil:" text: "Kunde inte importera sparfil:"
@ -186,6 +195,67 @@ dialogs:
title: Handledning Tillgänglig title: Handledning Tillgänglig
desc: Det finns en handledningsvideo tillgänglig för denna nivå, men den är bara desc: Det finns en handledningsvideo tillgänglig för denna nivå, men den är bara
tillgänglig på engelska. Vill du se den? tillgänglig på engelska. Vill du se den?
editConstantProducer:
title: Set Item
puzzleLoadFailed:
title: Puzzles failed to load
desc: "Unfortunately the puzzles could not be loaded:"
submitPuzzle:
title: Submit Puzzle
descName: "Give your puzzle a name:"
descIcon: "Please enter a unique short key, which will be shown as the icon of
your puzzle (You can generate them <link>here</link>, or choose one
of the randomly suggested shapes below):"
placeholderName: Puzzle Title
puzzleResizeBadBuildings:
title: Resize not possible
desc: You can't make the zone any smaller, because then some buildings would be
outside the zone.
puzzleLoadError:
title: Bad Puzzle
desc: "The puzzle failed to load:"
offlineMode:
title: Offline Mode
desc: We couldn't reach the servers, so the game has to run in offline mode.
Please make sure you have an active internect connection.
puzzleDownloadError:
title: Download Error
desc: "Failed to download the puzzle:"
puzzleSubmitError:
title: Submission Error
desc: "Failed to submit your puzzle:"
puzzleSubmitOk:
title: Puzzle Published
desc: Congratulations! Your puzzle has been published and can now be played by
others. You can now find it in the "My puzzles" section.
puzzleCreateOffline:
title: Offline Mode
desc: Since you are offline, you will not be able to save and/or publish your
puzzle. Would you still like to continue?
puzzlePlayRegularRecommendation:
title: Recommendation
desc: I <strong>strongly</strong> recommend playing the normal game to level 12
before attempting the puzzle DLC, otherwise you may encounter
mechanics not yet introduced. Do you still want to continue?
puzzleShare:
title: Short Key Copied
desc: The short key of the puzzle (<key>) has been copied to your clipboard! It
can be entered in the puzzle menu to access the puzzle.
puzzleReport:
title: Report Puzzle
options:
profane: Profane
unsolvable: Not solvable
trolling: Trolling
puzzleReportComplete:
title: Thank you for your feedback!
desc: The puzzle has been flagged.
puzzleReportError:
title: Failed to report
desc: "Your report could not get processed:"
puzzleLoadShortKey:
title: Enter short key
desc: Enter the short key of the puzzle to load it.
ingame: ingame:
keybindingsOverlay: keybindingsOverlay:
moveMap: Flytta moveMap: Flytta
@ -207,6 +277,7 @@ ingame:
clearSelection: Rensa vald clearSelection: Rensa vald
pipette: Pipett pipette: Pipett
switchLayers: Byt lager switchLayers: Byt lager
clearBelts: Clear belts
buildingPlacement: buildingPlacement:
cycleBuildingVariants: Tryck ned <key> För att bläddra igenom varianter. cycleBuildingVariants: Tryck ned <key> För att bläddra igenom varianter.
hotkeyLabel: "Snabbtangent: <key>" hotkeyLabel: "Snabbtangent: <key>"
@ -354,6 +425,44 @@ ingame:
achievements: achievements:
title: Achievements title: Achievements
desc: Hunt them all! desc: Hunt them all!
puzzleEditorSettings:
zoneTitle: Zone
zoneWidth: Width
zoneHeight: Height
trimZone: Trim
clearItems: Clear Items
share: Share
report: Report
puzzleEditorControls:
title: Puzzle Creator
instructions:
- 1. Place <strong>Constant Producers</strong> to provide shapes and
colors to the player
- 2. Build one or more shapes you want the player to build later and
deliver it to one or more <strong>Goal Acceptors</strong>
- 3. Once a Goal Acceptor receives a shape for a certain amount of
time, it <strong>saves it as a goal</strong> that the player must
produce later (Indicated by the <strong>green badge</strong>).
- 4. Click the <strong>lock button</strong> on a building to disable
it.
- 5. Once you click review, your puzzle will be validated and you
can publish it.
- 6. Upon release, <strong>all buildings will be removed</strong>
except for the Producers and Goal Acceptors - That's the part that
the player is supposed to figure out for themselves, after all :)
puzzleCompletion:
title: Puzzle Completed!
titleLike: "Click the heart if you liked the puzzle:"
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
author: Author
shortKey: Short Key
rating: Difficulty score
averageDuration: Avg. Duration
completionRate: Completion rate
shopUpgrades: shopUpgrades:
belt: belt:
name: Rullband, Distributörer & Tunnlar name: Rullband, Distributörer & Tunnlar
@ -559,6 +668,18 @@ buildings:
name: Item Producer name: Item Producer
description: Endast tillgänglig i sandlådeläge, avger en given signal från description: Endast tillgänglig i sandlådeläge, avger en given signal från
kabellagret till det vanliga lagret. kabellagret till det vanliga lagret.
constant_producer:
default:
name: Constant Producer
description: Constantly outputs a specified shape or color.
goal_acceptor:
default:
name: Goal Acceptor
description: Deliver shapes to the goal acceptor to set them as a goal.
block:
default:
name: Block
description: Allows you to block a tile.
storyRewards: storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Att klippa former title: Att klippa former
@ -965,6 +1086,10 @@ keybindings:
rotateToDown: "Rotate: Point Down" rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right" rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left" rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about: about:
title: Om detta spel title: Om detta spel
body: >- body: >-
@ -1050,3 +1175,57 @@ tips:
- Press F4 to show your FPS and Tick Rate. - Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera. - 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. - You can click a pinned shape on the left side to unpin it.
puzzleMenu:
play: Play
edit: Edit
title: Puzzle Mode
createPuzzle: Create Puzzle
loadPuzzle: Load
reviewPuzzle: Review & Publish
validatingPuzzle: Validating Puzzle
submittingPuzzle: Submitting Puzzle
noPuzzles: There are currently no puzzles in this section.
categories:
levels: Levels
new: New
top-rated: Top Rated
mine: My Puzzles
short: Short
easy: Easy
hard: Hard
completed: Completed
validation:
title: Invalid Puzzle
noProducers: Please place a Constant Producer!
noGoalAcceptors: Please place a Goal Acceptor!
goalAcceptorNoItem: One or more Goal Acceptors have not yet assigned an item.
Deliver a shape to them to set a goal.
goalAcceptorRateNotMet: One or more Goal Acceptors are not getting enough items.
Make sure that the indicators are green for all acceptors.
buildingOutOfBounds: One or more buildings are outside of the buildable area.
Either increase the area or remove them.
autoComplete: Your puzzle autocompletes itself! Please make sure your constant
producers are not directly delivering to your goal acceptors.
backendErrors:
ratelimit: You are performing your actions too frequent. Please wait a bit.
invalid-api-key: Failed to communicate with the backend, please try to
update/restart the game (Invalid Api Key).
unauthorized: Failed to communicate with the backend, please try to
update/restart the game (Unauthorized).
bad-token: Failed to communicate with the backend, please try to update/restart
the game (Bad Token).
bad-id: Invalid puzzle identifier.
not-found: The given puzzle could not be found.
bad-category: The given category could not be found.
bad-short-key: The given short key is invalid.
profane-title: Your puzzle title contains profane words.
bad-title-too-many-spaces: Your puzzle title is too short.
bad-shape-key-in-emitter: A constant producer has an invalid item.
bad-shape-key-in-goal: A goal acceptor has an invalid item.
no-emitters: Your puzzle does not contain any constant producers.
no-goals: Your puzzle does not contain any goal acceptors.
short-key-already-taken: This short key is already taken, please use another one.
can-not-report-your-own-puzzle: You can not report your own puzzle.
bad-payload: The request contains invalid data.
bad-building-placement: Your puzzle contains invalid placed buildings.
timeout: The request timed out.

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