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
tmp_standalone_files
tmp_standalone_files_china
tmp_standalone_files_wegame
# Local config
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.
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)
- [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

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.listen();

View File

@ -47,8 +47,36 @@ function listen() {
return;
}
console.log("Adding listeners");
ipcMain.handle("steam:get-achievement-names", getAchievementNames);
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) {

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({
server: buildFolder,
port: 3005,
@ -163,7 +168,7 @@ function serve({ standalone, chineseVersion = false }) {
gulp.watch(["../src/**/*.scss"], gulp.series("css.dev"));
// 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
// 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 }));
});
// Start the webpack watching server (Will never return)
if (standalone) {
gulp.series("js.standalone-dev.watch")(() => true);
} else {
if (chineseVersion) {
gulp.series("china.js.dev.watch")(() => true);
} else {
switch (version) {
case "web": {
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)
for (const prefix of ["", "china."]) {
for (const prefix of ["", "china.", "wegame."]) {
gulp.task(
prefix + "step.standalone-prod.code",
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.all", gulp.series("main.deploy.staging", "main.deploy.prod"));
// steam
gulp.task("regular.main.standalone", gulp.series("build.standalone-prod", "standalone.package.prod"));
// china
gulp.task(
"china.main.standalone",
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
gulp.task(
"main.serveDev",
gulp.series("build.dev", () => serve({ standalone: false }))
gulp.series("build.dev", () => serve({ version: "web" }))
);
gulp.task(
"main.serveStandalone",
gulp.series("build.standalone.dev", () => serve({ standalone: true }))
gulp.series("build.standalone.dev", () => serve({ version: "standalone" }))
);
gulp.task(
"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"));

View File

@ -59,6 +59,36 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
.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
gulp.task("js.staging.transpiled", () => {
@ -208,6 +238,23 @@ function gulptasksJS($, gulp, buildFolder, browserSync) {
)
.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 = {

View File

@ -9,21 +9,31 @@ const buildutils = require("./buildutils");
const execSync = require("child_process").execSync;
function gulptasksStandalone($, gulp) {
const electronBaseDir = path.join(__dirname, "..", "electron");
const targets = [
{
tempDestDir: path.join(__dirname, "..", "tmp_standalone_files"),
suffix: "",
taskPrefix: "",
electronBaseDir: path.join(__dirname, "..", "electron"),
steam: true,
},
{
tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_china"),
suffix: "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");
gulp.task(taskPrefix + "standalone.prepare.cleanup", () => {
@ -34,13 +44,17 @@ function gulptasksStandalone($, gulp) {
const requiredFiles = [
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*"),
// fails on platforms which support symlinks
// https://github.com/gulpjs/gulp/issues/1427
// 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));
});
@ -64,6 +78,11 @@ function gulptasksStandalone($, gulp) {
});
gulp.task(taskPrefix + "standalone.prepareVDF", cb => {
if (!steam) {
cb();
return;
}
const hash = buildutils.getRevision();
const steampipeDir = path.join(__dirname, "steampipe", "scripts");
@ -116,11 +135,10 @@ function gulptasksStandalone($, gulp) {
const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml"));
const privateArtifactsPath = "node_modules/shapez.io-private-artifacts";
let asar;
if (fs.existsSync(path.join(tempDestBuildDir, privateArtifactsPath))) {
let asar = steam;
if (steam && fs.existsSync(path.join(tempDestBuildDir, privateArtifactsPath))) {
// @ts-expect-error
asar = { unpackDir: privateArtifactsPath };
} else {
asar = true;
}
packager({
@ -147,6 +165,7 @@ function gulptasksStandalone($, gulp) {
return;
}
if (steam) {
fs.writeFileSync(
path.join(appPath, "LICENSE"),
fs.readFileSync(path.join(__dirname, "..", "LICENSE"))
@ -166,6 +185,7 @@ function gulptasksStandalone($, gulp) {
);
fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
}
}
});
cb();

View File

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

View File

@ -1,7 +1,7 @@
"DepotBuildConfig"
{
"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"
{
"LocalPath" "*"

View File

@ -1,7 +1,7 @@
"DepotBuildConfig"
{
"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"
{
"LocalPath" "*"

View File

@ -1,7 +1,7 @@
"DepotBuildConfig"
{
"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"
{
"LocalPath" "*"

View File

@ -1,7 +1,7 @@
"DepotBuildConfig"
{
"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"
{
"LocalPath" "*"

View File

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

View File

@ -17,6 +17,7 @@ module.exports = ({
isBrowser = true,
mobileApp = false,
chineseVersion = false,
wegameVersion = false,
}) => {
const globalDefs = {
assert: enableAssert ? "window.assert" : "false && window.assert",
@ -25,6 +26,7 @@ module.exports = ({
G_IS_DEV: "false",
G_CHINA_VERSION: JSON.stringify(chineseVersion),
G_WEGAME_VERSION: JSON.stringify(wegameVersion),
G_IS_RELEASE: environment === "prod" ? "true" : "false",
G_IS_STANDALONE: standalone ? "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 {
@include S(width, 30px);
@include S(height, 22px);
@include S(height, 30px);
background-size: 45%;
&:not(.unlocked) {
@ -49,6 +49,10 @@
}
.building {
display: flex;
@include S(width, 40px);
position: relative;
@include S(height, 40px);
.icon {
color: $accentColorDark;
display: flex;
@ -56,18 +60,18 @@
position: relative;
align-items: center;
justify-content: center;
@include S(padding, 5px);
@include S(padding-bottom, 1px);
@include S(width, 35px);
@include S(height, 37px);
width: 100%;
height: 100%;
padding: 0;
margin: 0;
@include S(border-radius, $globalBorderRadius);
background: center center / 70% no-repeat;
}
&:not(.unlocked) {
@include S(width, 25px);
.icon {
@include S(width, 20px);
opacity: 0.15;
}
&.editor {
@ -91,8 +95,8 @@
pointer-events: all;
transition: all 50ms ease-in-out;
transition-property: background-color, transform;
cursor: pointer;
&:hover {
background-color: rgba(30, 40, 90, 0.1);
}
@ -100,40 +104,38 @@
&.pressed {
transform: scale(0.9) !important;
}
}
&.selected {
// transform: scale(1.05);
background-color: rgba(lighten($colorBlueBright, 9), 0.4);
@include S(border-radius, 2px);
.keybinding {
color: #111;
}
}
}
.puzzle-lock {
& {
/* @load-async */
background: uiResource("locked_building.png") center center / #{D(14px)} #{D(14px)}
no-repeat;
background: uiResource("locked_building.png") center center / 90% no-repeat;
}
display: grid;
grid-auto-flow: column;
@include S(margin-top, 2px);
@include S(margin-left, 16px);
@include S(margin-bottom, 29px);
position: absolute;
bottom: 20px;
@include S(top, -15px);
left: 50%;
transform: translateX(-50%) !important;
transition: all 0.12s ease-in-out;
transition-property: opacity, transform;
cursor: pointer;
pointer-events: all;
@include S(width, 14px);
@include S(height, 14px);
@include S(width, 12px);
@include S(height, 12px);
&:hover {
opacity: 0.5;

View File

@ -96,12 +96,13 @@
@include S(height, 60px);
@include S(margin, 0, 10px);
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;
@include IncreasedClickArea(0px);
&.liked-yes {
/* @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;
}
@ -110,7 +111,18 @@
}
&.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) {
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 {
position: absolute;
@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;
}
}
&.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);
display: grid;
grid-template-columns: 1fr;
&.demo {
&[data-columns="1"] {
grid-template-columns: 1fr;
}
&[data-columns="2"] {
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 {
display: flex;
align-items: center;
grid-row: 1 / 2;
justify-content: center;
flex-direction: column;
background: #fafafa;

View File

@ -1,11 +1,11 @@
export const CHANGELOG = [
{
version: "1.4.0",
date: "UNRELEASED",
date: "04.06.2021",
entries: [
"Added puzzle mode",
"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");
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 = [
G_CHINA_VERSION ? "logo_cn.png" : "logo.png",
getLogoSprite(),
...G_ALL_UI_IMAGES.filter(src => src.startsWith("ui/") && src.indexOf(".gif") < 0),
];
const essentialMainMenuSounds = [

View File

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

View File

@ -90,9 +90,9 @@ export class StateManager {
dialogParent.classList.add("modalDialogParent");
document.body.appendChild(dialogParent);
this.currentState.internalEnterCallback(payload);
this.app.sound.playThemeMusic(this.currentState.getThemeMusic());
this.currentState.internalEnterCallback(payload);
this.currentState.onResized(this.app.screenWidth, this.app.screenHeight);
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='.')
*/
export function formatItemsPerSecond(speed, double = false, separator = T.global.decimalSeparator) {
return speed === 1.0
return (
(speed === 1.0
? T.ingame.buildingPlacement.infoTexts.oneItemPerSecond
: T.ingame.buildingPlacement.infoTexts.itemsPerSecond.replace(
"<x>",
round2Digits(speed).toString().replace(".", separator)
) + (double ? " " + T.ingame.buildingPlacement.infoTexts.itemsPerSecondDouble : "");
)) + (double ? " " + T.ingame.buildingPlacement.infoTexts.itemsPerSecondDouble : "")
);
}
/**

View File

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

View File

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

View File

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

View File

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

View File

@ -16,20 +16,12 @@ export class BeltReaderComponent extends Component {
static getSchema() {
return {
type: types.string,
lastItem: types.nullable(typeItemSingleton),
};
}
/**
* @param {object} param0
* @param {string=} param0.type
*/
constructor({ type = enumBeltReaderType.wired }) {
constructor() {
super();
this.type = type;
this.clear();
}
@ -58,8 +50,4 @@ export class BeltReaderComponent extends Component {
*/
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 { Component } from "../component";
import { BaseItem } from "../base_item";
import { Component } from "../component";
import { typeItemSingleton } from "../item_resolver";
/** @enum {string} */

View File

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

View File

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

View File

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

View File

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

View File

@ -163,7 +163,9 @@ export class HUDPuzzleEditorReview extends BaseHUDPart {
const serialized = new PuzzleSerializer().generateDumpFromGameRoot(this.root);
logger.log("Submitting puzzle, title=", title, "shortKey=", shortKey);
if (G_IS_DEV) {
logger.log("Serialized data:", serialized);
}
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 { HUDPuzzleBackToMenu } from "../hud/parts/puzzle_back_to_menu";
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 {
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 { MetaBlockBuilding } from "../buildings/block";
import { MetaBuilding } from "../meta_building";
import { gMetaBuildingRegistry } from "../../core/global_registries";
const logger = createLogger("puzzle-play");
const copy = require("clipboard-copy");
@ -47,7 +48,7 @@ export class PuzzlePlayGameMode extends PuzzleGameMode {
super(root);
/** @type {Array<typeof MetaBuilding>} */
const excludedBuildings = [
let excludedBuildings = [
MetaConstantProducerBuilding,
MetaGoalAcceptorBuilding,
MetaBlockBuilding,
@ -70,7 +71,22 @@ export class PuzzlePlayGameMode extends PuzzleGameMode {
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.puzzlePlaySettings = HUDPuzzlePlaySettings;

View File

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

View File

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

View File

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

View File

@ -15,14 +15,12 @@ export class ItemProducerSystem extends GameSystemWithFilter {
update() {
for (let i = 0; i < this.allEntities.length; ++i) {
const entity = this.allEntities[i];
const producerComp = entity.components.ItemProducer;
const ejectorComp = entity.components.ItemEjector;
if (producerComp.isWireless()) {
const pinsComp = entity.components.WiredPins;
if (!pinsComp) {
continue;
}
const pinsComp = entity.components.WiredPins;
const pin = pinsComp.slots[0];
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_CHINA_VERSION: boolean;
declare const G_WEGAME_VERSION: boolean;
// Polyfills
declare interface String {

View File

@ -3,10 +3,10 @@ import { Application } from "../application";
/* typehints:end */
import { createLogger } from "../core/logging";
import { compressX64 } from "../core/lzstring";
import { getIPCRenderer } from "../core/utils";
import { T } from "../translations";
const logger = createLogger("puzzle-api");
const rusha = require("rusha");
export class ClientAPI {
/**
@ -21,15 +21,6 @@ export class ClientAPI {
* @type {string|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() {
@ -109,12 +100,30 @@ export class ClientAPI {
* @returns {Promise<{token: string}>}
*/
apiTryLogin() {
if (!G_IS_STANDALONE) {
const token = window.prompt(
"Please enter the auth token for the puzzle DLC (If you have none, you can't login):"
);
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: this.syncToken,
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() {
this.syncKey = null;
if (G_WEGAME_VERSION) {
return;
}
setInterval(() => this.sendTimePoints(), 60 * 1000);
// Retrieve sync key from player
@ -136,6 +140,10 @@ export class ShapezGameAnalytics extends GameAnalyticsInterface {
* @param {string} value
*/
sendGameEvent(category, value) {
if (G_WEGAME_VERSION) {
return;
}
if (!this.syncKey) {
logger.warn("Can not send event due to missing sync key");
return;

View File

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

View File

@ -7,6 +7,24 @@ const logger = createLogger("electron-storage");
export class StorageImplElectron extends StorageInterface {
constructor(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() {
@ -15,52 +33,42 @@ export class StorageImplElectron extends StorageInterface {
writeFileAsync(filename, contents) {
return new Promise((resolve, reject) => {
getIPCRenderer()
.invoke("fs-job", {
// ipcMain
const jobId = ++this.jobId;
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "write",
filename,
contents,
})
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
id: jobId,
});
});
}
readFileAsync(filename) {
return new Promise((resolve, reject) => {
getIPCRenderer()
.invoke("fs-job", {
// ipcMain
const jobId = ++this.jobId;
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "read",
filename,
})
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
id: jobId,
});
});
}
deleteFileAsync(filename) {
return new Promise((resolve, reject) => {
getIPCRenderer()
.invoke("fs-job", {
// ipcMain
const jobId = ++this.jobId;
this.jobs[jobId] = { resolve, reject };
getIPCRenderer().send("fs-job", {
type: "delete",
filename,
})
.then(result => {
if (result.success) {
resolve(result.data);
} else {
reject(result.error);
}
id: jobId,
});
});
}

View File

@ -10,6 +10,10 @@ const logger = createLogger("electron-wrapper");
export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser {
initialize() {
this.dlcs = {
puzzle: false,
};
this.steamOverlayCanvasFix = document.createElement("canvas");
this.steamOverlayCanvasFix.width = 1;
this.steamOverlayCanvasFix.height = 1;
@ -23,9 +27,9 @@ export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser {
this.app.storage = new StorageImplElectron(this);
this.app.achievementProvider = new SteamAchievementProvider(this.app);
return this.initializeAchievementProvider().then(() =>
PlatformWrapperInterface.prototype.initialize.call(this)
);
return this.initializeAchievementProvider()
.then(() => this.initializeDlcStatus())
.then(() => PlatformWrapperInterface.prototype.initialize.call(this));
}
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() {
return true;
}

View File

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

View File

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

View File

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

View File

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

View File

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

View File

@ -1,3 +1,4 @@
import { getLogoSprite } from "../core/background_resources_loader";
import { cachebust } from "../core/cachebust";
import { A_B_TESTING_LINK_TYPE, globalConfig, THIRDPARTY_URLS } from "../core/config";
import { GameState } from "../core/game_state";
@ -15,8 +16,8 @@ import {
startFileChoose,
waitNextFrame,
} from "../core/utils";
import { enumGameModeIds } from "../game/game_mode";
import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs";
import { PlatformWrapperImplElectron } from "../platform/electron/wrapper";
import { getApplicationSettingById } from "../profile/application_settings";
import { T } from "../translations";
@ -41,10 +42,15 @@ export class MainMenuState extends GameState {
const showDemoBadges = this.app.restrictionMgr.getIsStandaloneMarketingActive();
const puzzleDlc =
G_IS_STANDALONE &&
/** @type { PlatformWrapperImplElectron
}*/ (this.app.platformWrapper).dlcs.puzzle;
return `
<div class="topButtons">
${
G_CHINA_VERSION
G_CHINA_VERSION || G_WEGAME_VERSION
? ""
: `<button class="languageChoose" data-languageicon="${this.app.settings.getLanguage()}"></button>`
}
@ -64,30 +70,66 @@ export class MainMenuState extends GameState {
</video>
<div class="logo">
<img src="${cachebust(
G_CHINA_VERSION ? "res/logo_cn.png" : "res/logo.png"
)}" alt="shapez.io Logo">
<span class="updateLabel">v${G_BUILD_VERSION} - Puzzle DLC!</span>
<img src="${cachebust("res/" + getLogoSprite())}" alt="shapez.io Logo">
${
G_WEGAME_VERSION
? ""
: `<span class="updateLabel">v${G_BUILD_VERSION} - Puzzle DLC!</span>`
}
</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">
${showDemoBadges ? `<div class="standaloneBanner">${bannerHtml}</div>` : ""}
</div>
<div class="mainContainer">
${
isSupportedBrowser()
G_IS_STANDALONE || isSupportedBrowser()
? ""
: `<div class="browserWarning">${T.mainMenu.browserWarning}</div>`
}
<div class="buttons"></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>
${
G_WEGAME_VERSION
? "<div class='footer wegame'></div>"
: `
<div class="footer ${G_CHINA_VERSION ? "china" : ""} ">
${
@ -119,6 +161,8 @@ export class MainMenuState extends GameState {
'<a class="producerLink" target="_blank">Tobias Springer</a>'
)}</div>
</div>
`
}
`;
}
@ -232,7 +276,7 @@ export class MainMenuState extends GameState {
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(".redditLink"), this.onRedditClicked);
this.trackClicks(qs(".changelog"), this.onChangelogClicked);
@ -252,6 +296,7 @@ export class MainMenuState extends GameState {
}
const discordLink = this.htmlElement.querySelector(".discordLink");
if (discordLink) {
this.trackClicks(
discordLink,
() => {
@ -260,6 +305,7 @@ export class MainMenuState extends GameState {
},
{ preventClick: true }
);
}
const githubLink = this.htmlElement.querySelector(".githubLink");
if (githubLink) {
@ -274,9 +320,25 @@ export class MainMenuState extends GameState {
}
const producerLink = this.htmlElement.querySelector(".producerLink");
this.trackClicks(producerLink, () => this.app.platformWrapper.openExternalLink("https://tobspr.io"), {
if (producerLink) {
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() {
@ -313,14 +375,6 @@ export class MainMenuState extends GameState {
this.trackClicks(playBtn, this.onPlayButtonClicked);
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) {
@ -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() {
this.renderMainMenu();
this.renderSavegames();

View File

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

View File

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

View File

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

View File

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

View File

@ -50,6 +50,7 @@ global:
escape: ESC
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Demo Version
intro: Get the standalone to unlock all features!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Level <x>
savegameLevelUnknown: Unknown Level
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:
buttons:
ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: View Update
showUpgrades: Show Upgrades
showKeybindings: Show Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Import Error
text: "Failed to import your savegame:"
@ -179,6 +188,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Move
@ -200,6 +270,7 @@ ingame:
clearSelection: Clear selection
pipette: Pipette
switchLayers: Switch layers
clearBelts: Clear belts
colors:
red: Red
green: Green
@ -347,6 +418,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Belts, Distributor & Tunnels
@ -553,6 +662,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Cutting Shapes
@ -954,6 +1075,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: About this Game
body: >-
@ -1039,3 +1164,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: SHIFT
space: ESPAI
loggingIn: Logging in
demoBanners:
title: Demo - Versió de prova
intro: Aconsegueix el joc complet per obtenir totes les característiques!
@ -73,6 +74,11 @@ mainMenu:
savegameLevel: Nivell <x>
savegameLevelUnknown: Nivell desconegut
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:
buttons:
ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Veure actualitzacions
showUpgrades: Mostrar millores
showKeybindings: Mostrar dreceres de teclat
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Error en importar
text: "Ha ocurrit un error intentant importar la teva partida:"
@ -187,6 +196,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Moure
@ -208,6 +278,7 @@ ingame:
clearSelection: Buidar selecció
pipette: Pipeta
switchLayers: Intercanviar capes
clearBelts: Clear belts
colors:
red: Roig
green: Verd
@ -357,6 +428,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Cintes transportadores, Distribuidors i Túnels
@ -569,6 +678,18 @@ buildings:
name: Productor d'ítems
description: Només avaliable en mode "sandbox", emet la senyal de la capa de
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:
reward_cutter_and_trash:
title: Tallar figures
@ -981,6 +1102,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Sobre aquest Joc
body: >-
@ -1081,3 +1206,57 @@ tips:
- Premeu F4 per mostrar la vostra tarifa FPS i Tick.
- Premeu F4 dues vegades per mostrar el mosaic del ratolí i la càmera.
- Podeu fer clic a una forma fixada al costat esquerre per desenganxar-la.
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!
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
nothernlion_comment: This game is great - I'm having a wonderful time playing,
and time has flown by.
notch_comment: Oh crap. I really should sleep, but I think I just figured out
how to make a computer in shapez.io
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
efficient.
what_others_say: Co o shapez.io říkají lidé
nothernlion_comment: Tato hra je úžasná - Užívám si čas strávený hraním této hry,
jen strašně rychle utekl.
notch_comment: Sakra. Opravdu bych měl jít spát, ale myslím si, že jsem zrovna přišel na to,
jak v shapez.io vytvořit počítač.
steam_review_comment: Tato hra mi ukradla život a já ho nechci zpět.
Odpočinková factory hra, která mi nedovolí přestat dělat mé výrobní linky více
efektivní.
global:
loading: Načítání
error: Chyba
@ -49,6 +49,7 @@ global:
escape: ESC
shift: SHIFT
space: SPACE
loggingIn: Přihlašuji
demoBanners:
title: Demo verze
intro: Získejte plnou verzi pro odemknutí všech funkcí a obsahu!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Úroveň <x>
savegameLevelUnknown: Neznámá úroveň
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:
buttons:
ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Zobrazit aktualizaci
showUpgrades: Zobrazit vylepšení
showKeybindings: Zobrazit klávesové zkratky
retry: Opakovat
continue: Pokračovat
playOffline: Hrát offline
importSavegameError:
title: Chyba Importu
text: "Nepovedlo se importovat vaši uloženou hru:"
@ -178,6 +187,67 @@ dialogs:
title: Dostupný tutoriál
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?
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:
keybindingsOverlay:
moveMap: Posun mapy
@ -199,6 +269,7 @@ ingame:
clearSelection: Zrušit výběr
pipette: Kapátko
switchLayers: Změnit vrstvy
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: Zmáčkněte <key> pro přepínání mezi variantami.
hotkeyLabel: "Klávesová zkratka: <key>"
@ -347,7 +418,45 @@ ingame:
desc: Vyvíjím to ve svém volném čase!
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:
belt:
name: Pásy, distribuce a tunely
@ -403,7 +512,7 @@ buildings:
name: Rotor
description: Otáčí tvary o 90 stupňů po směru hodinových ručiček.
ccw:
name: Rotor (opačný)
name: Rotor (Opačný)
description: Otáčí tvary o 90 stupňů proti směru hodinových ručiček.
rotate180:
name: Rotor (180°)
@ -546,6 +655,18 @@ buildings:
name: Výrobník předmětů
description: Dostupný pouze v sandboxovém módu, vydává daný signál z vrstvy
kabelů na běžnou vrstvu.
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:
reward_cutter_and_trash:
title: Řezání tvarů
@ -945,6 +1066,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: O hře
body: >-
@ -1039,3 +1164,57 @@ tips:
- Stisknutím F4 zobrazíte FPS a rychlost ticků.
- 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í.
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
shift: SKIFT/SHIFT
space: MELLEMRUM
loggingIn: Logging in
demoBanners:
title: Demo Version
intro: Køb spillet for at få den fulde oplevelse!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Niveau <x>
savegameLevelUnknown: Ukendt Niveau
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Se Opdatering
showUpgrades: Vis Opgraderinger
showKeybindings: Vis Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Import Fejl
text: "Importering af gemt spil fejlede:"
@ -184,6 +193,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Bevæg dig
@ -205,6 +275,7 @@ ingame:
clearSelection: Ryd Selektion
pipette: Pipette
switchLayers: Skift Lag
clearBelts: Clear belts
colors:
red: Rød
green: Grøn
@ -352,6 +423,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Bælter, Fordelere & Tuneller
@ -557,6 +666,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Klippe Figurer
@ -963,6 +1084,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Om dette spil
body: >-
@ -1048,3 +1173,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: UMSCH
space: LEER
loggingIn: Logging in
demoBanners:
title: Demo-Version
intro: Kauf die Vollversion für alle Features!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Level <x>
savegameLevelUnknown: Unbekanntes Level
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:
buttons:
ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Update anzeigen
showUpgrades: Upgrades anzeigen
showKeybindings: Kürzel anzeigen
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Importfehler
text: "Fehler beim Importieren deines Speicherstands:"
@ -181,6 +190,67 @@ dialogs:
title: Tutorial verfügbar
desc: Für dieses Level ist ein Tutorial-Video verfügbar, allerdings nur auf
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:
keybindingsOverlay:
moveMap: Bewegen
@ -202,6 +272,7 @@ ingame:
clearSelection: Auswahl aufheben
pipette: Pipette
switchLayers: Ebenen wechseln
clearBelts: Clear belts
colors:
red: Rot
green: Grün
@ -350,6 +421,44 @@ ingame:
achievements:
title: Errungenschaften
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:
belt:
name: Fließbänder, Verteiler & Tunnel
@ -566,6 +675,18 @@ buildings:
name: Item-Produzent
description: Nur im Sandkastenmodus verfügbar. Gibt das Signal aus der
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:
reward_cutter_and_trash:
title: Formen zerschneiden
@ -913,7 +1034,8 @@ settings:
position, otherwise in the middle of the screen.
mapResourcesScale:
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:
title: Tastenbelegung
hint: "Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene
@ -991,6 +1113,10 @@ keybindings:
rotateToDown: "Rotieren: Nach unten zeigend"
rotateToRight: "Rotieren: Nach rechts zeigend"
rotateToLeft: "Rotieren: Nach links zeigend"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Über dieses Spiel
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
bestimmen.
- 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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Demo Version
intro: Get the standalone to unlock all features!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Made by <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Προβολή ενημέρωσης
showUpgrades: Εμφάνιση αναβαθμίσεων
showKeybindings: Συνδυασμοί πλήκτρων
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Σφάλμα εισαγωγής
text: "Αποτυχία εισαγωγής του αποθηκευμένου παιχνιδιού:"
@ -192,6 +201,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Κίνηση
@ -213,6 +283,7 @@ ingame:
clearSelection: Εκκαθαρισμός επιλογής
pipette: Σταγονόμετρο
switchLayers: Εναλλαγή στρώματος
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: Πάτησε <key> για εναλλαγή μεταξύ παραλλαγών.
hotkeyLabel: "Hotkey: <key>"
@ -363,6 +434,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Ιμάντες, Διανομείς & Σήραγγες
@ -573,6 +682,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Κοπή σχημάτων
@ -986,6 +1107,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Σχετικά με αυτό το παιχνίδι
body: >-
@ -1078,3 +1203,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
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:
play: Play
edit: Edit
@ -617,8 +622,9 @@ ingame:
- 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. Once you click review, your puzzle will be validated and you can publish 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 :)
- 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!
@ -628,7 +634,8 @@ ingame:
titleRating: How difficult did you find the puzzle?
titleRatingDesc: Your rating will help me to make you better suggestions in the future
buttonSubmit: Continue
continueBtn: Keep Playing
menuBtn: Menu
puzzleMetadata:
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!
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
nothernlion_comment: This game is great - I'm having a wonderful time playing,
and time has flown by.
notch_comment: Oh crap. I really should sleep, but I think I just figured out
how to make a computer in shapez.io
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
efficient.
what_others_say: Lo que otras personas dicen sobre shapez.io
nothernlion_comment: Este juego es estupendo - Estoy teniendo un tiempo
maravolloso jugano, y el tiempo ha pasado volando.
notch_comment: Miercoles. Verdaderamente debería dormir, pero creo que acabo de
descubrir como hacer un ordenador en shapez.io
steam_review_comment: Este juego ha robado mi vida y no la quiero de vuelta. Muy
relajante juego de fábrica que no me dejará hacer mis lineas más
eficientes.
global:
loading: Cargando
error: Error
thousandsDivider: .
decimalSeparator: ","
thousandsDivider: ","
decimalSeparator: .
suffix:
thousands: k
millions: M
@ -53,6 +53,7 @@ global:
escape: ESC
shift: SHIFT
space: ESPACIO
loggingIn: Logging in
demoBanners:
title: Versión de prueba
intro: ¡Obtén el juego completo para desbloquear todas las características!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Nivel <x>
savegameLevelUnknown: Nivel desconocido
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Ver actualización
showUpgrades: Ver mejoras
showKeybindings: Ver atajos de teclado
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Error de importación
text: "Fallo al importar tu partida guardada:"
@ -187,6 +196,67 @@ dialogs:
title: Tutorial Disponible
desc: Hay un video tutorial disponible para este nivel, pero solo está
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:
keybindingsOverlay:
moveMap: Mover
@ -196,7 +266,7 @@ ingame:
placeMultiple: Colocar varios
reverseOrientation: Invertir la orientación
disableAutoOrientation: Desactivar la autoorientación
toggleHud: Habilitar el HUD
toggleHud: Habilitar la interfaz
placeBuilding: Colocar edificio
createMarker: Crear marcador
delete: Destruir
@ -208,6 +278,7 @@ ingame:
clearSelection: Limpiar selección
pipette: Cuentagotas
switchLayers: Cambiar capas
clearBelts: Clear belts
colors:
red: Rojo
green: Verde
@ -217,7 +288,7 @@ ingame:
cyan: Cian
white: Blanco
black: Negro
uncolored: Gris
uncolored: Incoloro
buildingPlacement:
cycleBuildingVariants: Pulsa <key> para rotar por las distintas variantes.
hotkeyLabel: "Tecla: <key>"
@ -248,18 +319,18 @@ ingame:
dataSources:
stored:
title: Almacenado
description: Muestra la cantidad de figuras guardadas en tu HUB.
description: Muestra la cantidad de figuras guardadas en tu Centro.
produced:
title: Producido
description: Muestra todas las figuras que tu fábrica al completo produce,
incluyendo productos intermedios.
delivered:
title: Entregados
description: Muestra las figuras que son entregadas a tu HUB.
description: Muestra las figuras que son entregadas a tu Centro.
noShapesProduced: Todavía no se han producido figuras.
shapesDisplayUnits:
second: <shapes> / s
minute: <shapes> / m
minute: <shapes> / min
hour: <shapes> / h
settingsMenu:
playtime: Tiempo de juego
@ -273,7 +344,7 @@ ingame:
cost: Coste
waypoints:
waypoints: Marcadores
hub: HUB
hub: Centro
description: Click izquierdo sobre un marcador para ir ahí, click derecho para
borrarlo. <br><br> Pulsa <keybinding> para crear un marcador de la
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
<strong>círculo</strong> para extraerlo!
1_2_conveyor: "¡Conecta el extractor con una <strong>cinta
transportadora</strong> a tu HUB!<br><br> Pista: ¡<strong>Pulsa
y arrastra</strong> la cinta transportadora con el ratón!"
transportadora</strong> a tu Centro!<br><br> Pista:
¡<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
extractores y cintas transportadoras para completar el objetivo
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
<strong>0-9 </strong> para acceder a los edificios más rápido!"
3_1_rectangles: "¡Ahora consigamos unos rectangulos! <strong>construye 4
extractores</strong> y conectalos a el HUB.<br><br> PD: Manten
apretado <strong>SHIFT</strong> mientrás pones cintas
extractores</strong> y conectalos a el Centro.<br><br> PD:
Manten apretado <strong>SHIFT</strong> mientrás pones cintas
transportadoras para activar el planeador de cintas!"
21_1_place_quad_painter: ¡Pon el <strong>pintador cuádruple</strong> y consigue
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
conéctalo con cables!
21_4_press_button: "Presiona el interruptor para hacer que <strong>emita una
señal verdadera</strong> lo cual activa el pintador.<br><br>
PD: ¡No necesitas conectar todas las entradas! Intenta
conectando sólo dos."
señal verdadera</strong> lo cual activa el pintador.<br><br> PD:
¡No necesitas conectar todas las entradas! Intenta conectando
sólo dos."
connectedMiners:
one_miner: 1 Minero
n_miners: <amount> Mineros
@ -356,8 +428,46 @@ ingame:
title: Apoyame
desc: ¡Desarrollo este juego en mi tiempo libre!
achievements:
title: Achievements
desc: Hunt them all!
title: Logros
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:
belt:
name: Cintas transportadoras, Distribuidores y Túneles
@ -375,8 +485,8 @@ buildings:
hub:
deliver: Entregar
toUnlock: para desbloquear
levelShortcut: LVL
endOfDemo: End of Demo
levelShortcut: Nivel
endOfDemo: Final de la demo
belt:
default:
name: Cinta Transportadora
@ -574,6 +684,18 @@ buildings:
name: Productor de items
description: Solo disponible en modo libre, envía la señal recivida de la capa
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:
reward_cutter_and_trash:
title: Cortador de figuras
@ -649,12 +771,12 @@ storyRewards:
desc: ¡Lo hiciste! Haz desbloqueado el <strong>modo de juego libre</strong>!
¡Esto significa que las formas ahora son
<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
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,
así que todo lo que tienes que hacer es analizarla y automaticamente
configurar tu fabrica basada en ello.
pedida!<br><br> El Centro emite la forma pedida en la capa de
cables, así que todo lo que tienes que hacer es analizarla y
automaticamente configurar tu fabrica basada en ello.
reward_blueprints:
title: Planos
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
la capa de cables! Con esto ahora tienes tres opciones para
continuar el juego:<br><br> - Construir una <strong>maquina
automatizada</strong> para crear cualquier forma que te pida el HUB
(¡Te recomiendo que lo intentes!).<br><br> - Construir algo genial
con los cables.<br><br> - Continuar jugando de la manera
automatizada</strong> para crear cualquier forma que te pida el
Centro (¡Te recomiendo que lo intentes!).<br><br> - Construir algo
genial con los cables.<br><br> - Continuar jugando de la manera
regular.<br><br> ¡Cualquiera que eligas, recuerda divertirte!
reward_wires_painter_and_levers:
title: Cables y pintor cuádruple
@ -941,7 +1063,7 @@ keybindings:
menuOpenShop: Mejoras
menuOpenStats: Estadísticas
menuClose: Cerrar menú
toggleHud: Activar HUD
toggleHud: Activar Interfaz
toggleFPSInfo: Activar FPS e información de depurado
switchLayers: Cambiar capas
exportScreenshot: Exportar la base completa como imagen
@ -963,7 +1085,7 @@ keybindings:
pasteLastBlueprint: Pegar último plano
cycleBuildings: Ciclar edificios
lockBeltDirection: Activar planificador de cintas transportadoras
switchDirectionLockSide: "Planner: Cambiar sentido"
switchDirectionLockSide: "Planificador: Cambiar sentido"
massSelectStart: Mantén pulsado y arrastra para empezar
massSelectSelectMultiple: Seleccionar múltiples áreas
massSelectCopy: Copiar área
@ -986,10 +1108,14 @@ keybindings:
comparator: Comparador
item_producer: Productor de items (Sandbox)
copyWireValue: "Cables: Copiar valor bajo el cursos"
rotateToUp: "Rotate: Point Up"
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
rotateToUp: "Rotar: Apuntar hacia arriba"
rotateToDown: "Rotar: Apuntar hacia abajo"
rotateToRight: "Rotar: Apuntar hacia la derecha"
rotateToLeft: "Rotar: Apuntar hacia la izquierda"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Sobre el juego
body: >-
@ -1015,9 +1141,9 @@ demo:
exportingBase: Exportando la base completa como imagen
settingNotAvailable: No disponible en la versión de prueba.
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!
- 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.
- 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.
@ -1047,7 +1173,7 @@ tips:
- Puedes apretar <b>ALT</b> para invertir la dirección a la que van las
cintas.
- ¡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.
- Las máquinas tienen una velocidad limitada, divídelas para una máxima
eficiencia.
@ -1071,7 +1197,7 @@ tips:
- Echa un vistazo más de cerca al mezclador de colores, y tus preguntas
serán respondidas.
- 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.
- El icono del alfiler junto a cada forma de la lista de mejoras lo fija a
la pantalla.
@ -1084,10 +1210,65 @@ tips:
- ¡Este juego tiene un montón de atajos útiles! Asegúrate de revisar la
página de ajustes.
- 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
el mismo lugar.
- Presiona F4 para mostrar tu FPS y Tick Rate.
- Presiona F4 dos veces para mostrar las coordenadas de tu ratón y de la
cámara.
- 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
shift: SHIFT
space: VÄLILYÖNTI
loggingIn: Logging in
demoBanners:
title: Demoversio
intro: Hanki pelin täysversio avataksesi kaikki ominaisuudet!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Taso <x>
savegameLevelUnknown: Tuntematon taso
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Näytä päivitys
showUpgrades: Näytä päivitykset
showKeybindings: Näytä pikanäppäimet
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Tuontivirhe
text: "Tallennuksen tuonti epäonnistui:"
@ -180,6 +189,67 @@ dialogs:
tutorialVideoAvailableForeignLanguage:
title: Ohjevideo saatavilla
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:
keybindingsOverlay:
moveMap: Liiku
@ -201,6 +271,7 @@ ingame:
clearSelection: Tyhjennä valinta
pipette: Pipetti
switchLayers: Vaihda tasoa
clearBelts: Clear belts
colors:
red: Punainen
green: Vihreä
@ -349,6 +420,44 @@ ingame:
achievements:
title: Saavutukset
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:
belt:
name: Kuljettimet, jakelijat & tunnelit
@ -559,15 +668,26 @@ buildings:
name: Signaaligeneraattori
description: Saatavilla vain hiekkalaatikkotilassa. Lähettää johtotasolla
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:
reward_cutter_and_trash:
title: Muotojen Leikkaus
desc: Avasit <strong>Leikkurin</strong>, joka leikkaa muotoja
ylhäältä alas <strong>muodon suunnasta
riippumatta</strong>!<br><br>muista hankkiutua eroon jätteestä, tai
muuten <strong>se tukkii ja pysäyttää leikkurin</strong> - Siksi
olen antanut sinulle <strong>roskiksen</strong>, joka tuhoaa
kaiken sinne laitetun!
desc: Avasit <strong>Leikkurin</strong>, joka leikkaa muotoja ylhäältä alas
<strong>muodon suunnasta riippumatta</strong>!<br><br>muista
hankkiutua eroon jätteestä, tai muuten <strong>se tukkii ja
pysäyttää leikkurin</strong> - Siksi olen antanut sinulle
<strong>roskiksen</strong>, joka tuhoaa kaiken sinne laitetun!
reward_rotater:
title: Kääntö
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:
title: Vapaapeli
desc: Onnistuit! Avasit juuri <strong>vapaapelimuodon</strong>! Muodot luodaan
nyt <strong>satunnaisesti</strong><br><br> Koska keskusrakennus vaatii
tietyn <strong>kuljetuskapasiteetin</strong> tästä eteenpäin, suosittelen
lämpimästi rakentamaan koneen, joka tuottaa vaaditun muodon
automaattisesti!<br><br> Keskusrakennus lähettää pyydetyn muodon
johtotasolle, joten sinun ei tarvitse kuin analysoida se ja
nyt <strong>satunnaisesti</strong><br><br> Koska keskusrakennus
vaatii tietyn <strong>kuljetuskapasiteetin</strong> tästä eteenpäin,
suosittelen lämpimästi rakentamaan koneen, joka tuottaa vaaditun
muodon automaattisesti!<br><br> Keskusrakennus lähettää pyydetyn
muodon johtotasolle, joten sinun ei tarvitse kuin analysoida se ja
konfiguroida tehtaasi sen perusteella.
reward_blueprints:
title: Piirustukset
@ -956,12 +1076,15 @@ keybindings:
rotateToDown: "Käännä: osoittaa alas"
rotateToRight: "Käännä: osoittaa oikealle"
rotateToLeft: "Käännä: osoittaa vasemmalle"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Tietoja tästä pelistä
body: >-
Tämä peli on avointa lähdekoodia ja <a
href="https://github.com/tobspr" target="_blank">Tobias Springer</a>in
(siis minun) kehittämäni.<br><br>
Tämä peli on avointa lähdekoodia ja <a href="https://github.com/tobspr"
target="_blank">Tobias Springer</a>in (siis minun) kehittämäni.<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.
- Press F4 kahdesti nähdäksesi hiiren ja kameran ruudun.
- 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!
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,
and time has flown by.
notch_comment: Oh crap. I really should sleep, but I think I just figured out
how to make a computer in shapez.io
notch_comment: Mince! Je devrais vraiment me coucher, Mais je crois que j'ai trouvé
comment faire un ordinateur dans Shapez.io
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
efficient.
@ -50,6 +50,7 @@ global:
escape: ESC
shift: MAJ
space: ESPACE
loggingIn: Logging in
demoBanners:
title: Version de démo
intro: Achetez la version complète pour débloquer toutes les fonctionnalités!
@ -70,6 +71,11 @@ mainMenu:
savegameLevel: Niveau <x>
savegameLevelUnknown: Niveau inconnu
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:
buttons:
ok: OK
@ -83,6 +89,9 @@ dialogs:
viewUpdate: Voir les mises à jour
showUpgrades: Montrer les améliorations
showKeybindings: Montrer les raccourcis
retry: Reesayer
continue: Continuer
playOffline: Jouer Hors-ligne
importSavegameError:
title: Erreur dimportation
text: "Impossible dimporter votre sauvegarde :"
@ -183,6 +192,67 @@ dialogs:
title: Tutoriel disponible
desc: Il y a un tutoriel vidéo pour ce niveau, mais il nest disponible quen
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:
keybindingsOverlay:
moveMap: Déplacer
@ -204,6 +274,7 @@ ingame:
clearSelection: Effacer la sélection
pipette: Pipette
switchLayers: Changer de calque
clearBelts: Suprimer les rails
colors:
red: Rouge
green: Vert
@ -357,6 +428,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Convoyeurs, distributeurs et tunnels
@ -574,6 +683,18 @@ buildings:
name: Générateur dobjet
description: Seulement disponible en mode bac à sable. Renvoie le signal du
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:
reward_cutter_and_trash:
title: Découpage de formes
@ -1000,6 +1121,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: À propos de ce jeu
body: >-
@ -1101,3 +1226,57 @@ tips:
- Appuyez sur F4 pour voir vos IPS et votre fréquence de rafraîchissement.
- Appuyez deux fois sur F4 pour voir les coordonnées.
- Cliquez sur une forme épinglée à gauche pour 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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Demo Verzija
intro: Nabavi samostalnu igru kako bi otključao sve značajke!
@ -71,6 +72,11 @@ mainMenu:
savegameLevel: Nivo <x>
savegameLevelUnknown: Nepoznati Nivo
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:
buttons:
ok: OK
@ -84,6 +90,9 @@ dialogs:
viewUpdate: Pogledaj ažuriranje
showUpgrades: Pokaži Nadogradnje
showKeybindings: Pokaži tipke
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Greška prilikom uvoza
text: "Neuspješan uvoz spremljene igre:"
@ -181,6 +190,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Kretanje
@ -202,6 +272,7 @@ ingame:
clearSelection: Očisti odabir
pipette: Pipeta
switchLayers: Promijeni sloj
clearBelts: Clear belts
colors:
red: Crvena
green: Zelena
@ -349,6 +420,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Trake, Distributer i Tuneli
@ -553,6 +662,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Rezanje Oblika
@ -949,6 +1070,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: O Igri
body: >-
@ -1034,3 +1159,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: SHIFT
space: SZÓKÖZ
loggingIn: Logging in
demoBanners:
title: Demó verzió
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
savegameLevelUnknown: Ismeretlen szint
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:
buttons:
ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Frissítés Megtekintése
showUpgrades: Fejlesztések
showKeybindings: Irányítás
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Importálás Hiba
text: "Nem sikerült importálni a mentésedet:"
@ -182,6 +191,67 @@ dialogs:
title: Oktatás Elérhető
desc: Elérhető egy oktatóvideó ehhez a szinthez, de csak angol nyelven.
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:
keybindingsOverlay:
moveMap: Mozgatás
@ -203,6 +273,7 @@ ingame:
clearSelection: Kijelölés megszüntetése
pipette: Pipetta
switchLayers: Réteg váltás
clearBelts: Clear belts
colors:
red: Piros
green: Zöld
@ -352,6 +423,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Futószalagok, Elosztók & Alagutak
@ -561,6 +670,18 @@ buildings:
name: Létrehozó
description: Csak Homokozó módban elérhető. Létrehozza a Vezeték 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:
reward_cutter_and_trash:
title: Alakzatok Vágása
@ -972,6 +1093,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: A Játékról
body: >-
@ -1065,3 +1190,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
menemukan bagaimana cara membuat komputer di shapez.io
steam_review_comment: Game ini telah mencuri hidup saya dan saya tidak
menginginkannya kembali. Game pembuatan pabrik yang sangat santai yang tidak
akan membiarkan saya berhenti membuat pabrik saya lebih efisien.
menginginkannya kembali. Game pembuatan pabrik yang sangat santai yang
tidak akan membiarkan saya berhenti membuat pabrik saya lebih efisien.
global:
loading: Memuat
error: Terjadi kesalahan
@ -50,6 +50,7 @@ global:
escape: ESC
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Versi Demo
intro: Dapatkan versi lengkap untuk membuka semua fitur!
@ -69,6 +70,11 @@ mainMenu:
savegameLevel: Level <x>
savegameLevelUnknown: Level tidak diketahui
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:
buttons:
ok: OK
@ -82,6 +88,9 @@ dialogs:
viewUpdate: Tampilkan Update
showUpgrades: Tunjukkan Tingkatan
showKeybindings: Tunjukkan Tombol Pintas
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Kesalahan pada Impor
text: "Gagal memasukkan data simpanan kamu:"
@ -185,6 +194,67 @@ dialogs:
title: Tutorial Tersedia
desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam
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:
keybindingsOverlay:
moveMap: Geser
@ -206,6 +276,7 @@ ingame:
clearSelection: Hapus pilihan
pipette: Pipet
switchLayers: Ganti lapisan
clearBelts: Clear belts
colors:
red: Merah
green: Hijau
@ -358,6 +429,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Sabuk konveyor, Pembagi Arus & Terowongan
@ -577,6 +686,18 @@ buildings:
name: Pembuat Bentuk
description: Hanya tersedia di dalam mode sandbox, mengeluarkan sinyal yang
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:
reward_cutter_and_trash:
title: Memotong Bentuk
@ -1008,6 +1129,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Tentang permainan ini
body: >-
@ -1115,3 +1240,57 @@ tips:
- Tekan F4 dua kali untuk menunjukkan ubin mouse dan kameramu.
- Kamu bisa mengklik bentuk yang di-pin di sebelah kiri untuk tidak
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
shift: MAIUSC
space: SPAZIO
loggingIn: Logging in
demoBanners:
title: Versione Demo
intro: Ottieni la versione completa per sbloccare tutte le funzioni!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Creato da <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Mostra aggiornamento
showUpgrades: Mostra miglioramenti
showKeybindings: Mostra scorciatoie
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Errore di importazione
text: "Impossibile caricare il salvataggio:"
@ -189,6 +198,67 @@ dialogs:
title: Tutorial Disponibile
desc: C'è un video tutorial per questo livello, ma è disponibile solo in
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:
keybindingsOverlay:
moveMap: Sposta
@ -210,6 +280,7 @@ ingame:
clearSelection: Annulla selezione
pipette: Contagocce
switchLayers: Cambia livello
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: Premi <key> per cambiare variante.
hotkeyLabel: "Hotkey: <key>"
@ -361,6 +432,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Nastri, distribuzione e tunnel
@ -574,6 +683,18 @@ buildings:
name: Generatore di oggetti
description: Disponibile solo nella modalità sandbox, emette il segnale dal
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:
reward_cutter_and_trash:
title: Taglio forme
@ -991,6 +1112,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Riguardo questo gioco
body: >-
@ -1089,3 +1214,57 @@ tips:
- 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
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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: デモ版
intro: スタンドアローン版を手に入れ、すべての機能をアンロックしましょう!
@ -63,6 +64,11 @@ mainMenu:
savegameLevel: レベル <x>
savegameLevelUnknown: 不明なレベル
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:
buttons:
ok: OK
@ -76,6 +82,9 @@ dialogs:
viewUpdate: アップデートを見る
showUpgrades: アップグレード表示
showKeybindings: キー設定表示
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: インポートエラー
text: "セーブデータのインポートに失敗しました:"
@ -157,6 +166,67 @@ dialogs:
tutorialVideoAvailableForeignLanguage:
title: チュートリアル視聴可能
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:
keybindingsOverlay:
moveMap: マップ移動
@ -178,6 +248,7 @@ ingame:
clearSelection: 選択範囲をクリア
pipette: スポイト
switchLayers: レイヤーを変更
clearBelts: Clear belts
colors:
red:
green:
@ -313,6 +384,44 @@ ingame:
achievements:
title: アチーブメント
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:
belt:
name: ベルト、分配機とトンネル
@ -493,6 +602,18 @@ buildings:
default:
name: なんでも抽出機
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:
reward_cutter_and_trash:
title: 形の切断
@ -558,18 +679,21 @@ storyRewards:
desc: <strong>回転機</strong>のバリエーションが利用可能になりました 180°の回転ができるようになりますサプライズ :D
reward_wires_painter_and_levers:
title: ワイヤ&着色機(四分割)
desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の レイヤーの上にある別のレイヤであり、多くの新しい要素があります!<br><br>
まず最初に、<strong>四色着色機</strong>が利用可能になりました - 着色するスロットをワイヤレイヤで接続してください!<br><br>
ワイヤレイヤに切り替えるには、<strong>E</strong>を押します。 <br><br>
補足: 設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。"
desc: "<strong>ワイヤレイヤ</strong>が利用可能になりました: これは通常の
レイヤーの上にある別のレイヤであり、多くの新しい要素があります!<br><br>
まず最初に、<strong>四色着色機</strong>が利用可能になりました -
着色するスロットをワイヤレイヤで接続してください!<br><br>
ワイヤレイヤに切り替えるには、<strong>E</strong>を押します。 <br><br> 補足:
設定で<strong>ヒントを有効にする</strong>と、 ワイヤのチュートリアルが有効になります。"
reward_filter:
title: アイテムフィルタ
desc: <strong>アイテムフィルタ</strong>が利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、アイテムを上側または右側の出力に分離します。<br><br>
また、真偽値(0/1)信号を入力すれば全てのアイテムの通過・非通過を制御できます。
reward_display:
title: ディスプレイ
desc: "<strong>ディスプレイ</strong>が利用可能になりました - ワイヤレイヤで信号を接続することで、その内容を表示できます!<br><br>
補足: ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!"
desc: "<strong>ディスプレイ</strong>が利用可能になりました -
ワイヤレイヤで信号を接続することで、その内容を表示できます!<br><br> 補足:
ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!"
reward_constant_signal:
title: 定数信号
desc: <strong>定数信号</strong>がワイヤレイヤで利用可能になりました! これは例えば<strong>アイテムフィルタ</strong>に接続すると便利です。<br><br>
@ -814,6 +938,10 @@ keybindings:
rotateToDown: "回転: 下向きにする"
rotateToRight: "回転: 右向きにする"
rotateToLeft: "回転: 左向きにする"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: このゲームについて
body: >-
@ -860,9 +988,9 @@ tips:
- 切断機は配置された向きを考慮せず、常に垂直に切断します。
- ストレージは左側の出力を優先します。
- 増築可能なデザインを作るために時間を使ってください。それだけの価値があります!
- <b>SHIFT</b>を使用すると複数の建物を一度に配置できます。
- Invest time to build repeatable designs - it's worth it!
- <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を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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: 체험판 버전
intro: 정식 버전을 구매해서 모든 콘텐츠를 사용해 보세요!
@ -66,6 +67,11 @@ mainMenu:
madeBy: 제작 <author-link>
subreddit: Reddit
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:
buttons:
ok: 확인
@ -79,6 +85,9 @@ dialogs:
viewUpdate: 업데이트 보기
showUpgrades: 업그레이드 보기
showKeybindings: 조작법 보기
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: 가져오기 오류
text: "세이브 파일을 가져오지 못했습니다:"
@ -163,6 +172,67 @@ dialogs:
tutorialVideoAvailableForeignLanguage:
title: 활성화된 튜토리얼
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:
keybindingsOverlay:
moveMap: 이동
@ -184,6 +254,7 @@ ingame:
clearSelection: 지우기
pipette: 피펫
switchLayers: 레이어 전환
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: <key> 키를 눌러 변형 전환
hotkeyLabel: "단축키: <key>"
@ -322,6 +393,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: 벨트, 밸런서, 터널
@ -506,6 +615,18 @@ buildings:
default:
name: 아이템 생성기
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:
reward_cutter_and_trash:
title: 절단기
@ -765,8 +886,8 @@ settings:
description: 기본적으로 활성화되어 있으며, 자원 패치에서 피펫 기능을 사용 시 즉시 추출기를 선택합니다.
simplifiedBelts:
title: 벨트 단순화 (못생김)
description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할
정도로 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다.
description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 정도로
심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다.
enableMousePan:
title: 화면 가장자리 패닝
description: 커서를 화면 가장자리로 옮기면 스크롤되어 지도를 이동할 수 있습니다. 스크롤 속도는 이동 속도 설정에 따릅니다.
@ -853,6 +974,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: 게임 정보
body: >-
@ -922,7 +1047,7 @@ tips:
- 공장을 허브에 가까이 지으면 나중에 거대한 프로젝트에 방해가 될 수 있습니다.
- 업그레이드 목록에 나타나는 도형 옆의 핀 아이콘을 누르면 화면에 고정됩니다.
- 세 가지의 기본 색상을 모두 섞어서 흰색을 만드세요!
- 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 껏 확장하세요!
- 당신에겐 무한한 땅이 있습니다. 굳이 공간을 적게 쓸 필요는 없으니, 마음껏 확장하세요!
- Factorio도 플레이 해보세요! 제가 가장 좋아하는 게임입니다.
- 4단 절단기는 오른쪽 상단부터 시계 방향으로 차례로 절단합니다.
- 메인 메뉴에서 세이브 파일을 다운로드 할 수 있습니다.
@ -933,3 +1058,57 @@ tips:
- F4 키를 누르면 FPS와 틱 비율을 표시합니다.
- 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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Demo Version
intro: Get the standalone to unlock all features!
@ -71,6 +72,11 @@ mainMenu:
madeBy: Made by <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -84,6 +90,9 @@ dialogs:
viewUpdate: View Update
showUpgrades: Show Upgrades
showKeybindings: Show Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Import Error
text: "Failed to import your savegame:"
@ -180,6 +189,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Move
@ -201,6 +271,7 @@ ingame:
clearSelection: Clear Selection
pipette: Pipette
switchLayers: Switch layers
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: Press <key> to cycle variants.
hotkeyLabel: "Hotkey: <key>"
@ -348,6 +419,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Belts, Distributor & Tunnels
@ -554,6 +663,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Cutting Shapes
@ -954,6 +1075,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: About this Game
body: >-
@ -1039,3 +1164,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: SHIFT
space: SPATIE
loggingIn: Inloggen
demoBanners:
title: Demoversie
intro: Koop de standalone om alle functies te ontgrendelen!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Gemaakt door <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Zie Update
showUpgrades: Zie Upgrades
showKeybindings: Zie Sneltoetsen
retry: Opnieuw Proberen
continue: Ga Verder
playOffline: Offline Spelen
importSavegameError:
title: Importeerfout
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
bekijken?
tutorialVideoAvailableForeignLanguage:
title: Tutorial Available
title: Tutorial Beschikbaar
desc: Er is een tutorial beschikbaar voor dit level, maar het is alleen
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:
keybindingsOverlay:
moveMap: Beweeg speelveld
@ -209,6 +273,7 @@ ingame:
clearSelection: Annuleer selectie
pipette: Pipet
switchLayers: Wissel lagen
clearBelts: Lopende banden leeg maken
buildingPlacement:
cycleBuildingVariants: Druk op <key> om tussen varianten te wisselen.
hotkeyLabel: "Hotkey: <key>"
@ -358,6 +423,39 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Banden, Verdeler & Tunnels
@ -562,6 +660,18 @@ buildings:
name: Item Producent
description: Alleen beschikbaar in sandbox-modus, geeft het gegeven signaal van
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:
reward_cutter_and_trash:
title: Vormen Knippen
@ -979,6 +1089,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constante Producent
goal_acceptor: Ontvanger
block: Blokkade
massSelectClear: Lopende banden leeg maken
about:
title: Over dit spel
body: >-
@ -1080,3 +1194,52 @@ tips:
- 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
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
shift: SHIFT
space: MELLOMROM
loggingIn: Logging in
demoBanners:
title: Demo Versjon
intro: Skaff deg frittstående versjon for å åpne alle funksjoner!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Laget av <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Vis Oppdatering
showUpgrades: Vis Oppgraderinger
showKeybindings: Se Hurtigtaster
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Importeringsfeil
text: "Kunne ikke importere lagringsfilen:"
@ -186,6 +195,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Beveg
@ -207,6 +277,7 @@ ingame:
clearSelection: Fjern Valgte
pipette: Pipette
switchLayers: Bytt lag
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: Trykk <key> for å veksle mellom variantene.
hotkeyLabel: "Hotkey: <key>"
@ -354,6 +425,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Belter, Distributører & Tunneler
@ -565,6 +674,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Kutt Objekter
@ -970,6 +1091,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Om dette spillet
body: >-
@ -1055,3 +1180,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: SHIFT
space: SPACJA
loggingIn: Logging in
demoBanners:
title: Wersja demonstracyjna
intro: Kup pełną wersję gry, by odblokować więcej funkcji!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Gra wykonana przez <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Zobacz aktualizację
showUpgrades: Pokaż ulepszenia
showKeybindings: Pokaż Klawiszologię
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Błąd importowania
text: "Nie udało się zaimportować twojego zapisu gry:"
@ -187,6 +196,67 @@ dialogs:
title: Dostępny tutorial
desc: Dla tego poziomu dostępny jest video tutorial w języku angielskim. Chcesz
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:
keybindingsOverlay:
moveMap: Ruch
@ -208,6 +278,7 @@ ingame:
clearSelection: Wyczyść zaznaczenie
pipette: Wybierz obiekt z mapy
switchLayers: Przełącz warstwy
clearBelts: Clear belts
colors:
red: Czerwony
green: Zielony
@ -356,6 +427,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Taśmociągi, Dystrybutory & Tunele
@ -573,6 +682,18 @@ buildings:
name: Producent kształtów
description: Dostępne tylko w trybie piaskownicy. Produkuje przedmioty z sygnału
danego na warstwie przewodów na główną warstwę.
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:
reward_cutter_and_trash:
title: Przecinanie Kształtów
@ -640,7 +761,7 @@ storyRewards:
reward_storage:
title: Magazyn
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
przepełnieniowa</strong>!
reward_freeplay:
@ -980,6 +1101,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: O Grze
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 dwa razy, by zobaczyć kratkę twojej myszy i kamery.
- 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!
what_others_say: O que as pessoas dizem sobre o shapez.io
nothernlion_comment: Este jogo é ótimo - estou me divertindo muito jogando
e o tempo passou voando.
notch_comment: Droga. Eu realmente deveria dormir, mas eu acho que acabei
de descobrir como fazer um computador no shapez.io
nothernlion_comment: Este jogo é ótimo - estou me divertindo muito jogando e o
tempo passou voando.
notch_comment: Droga. Eu realmente deveria dormir, mas eu acho que acabei de
descobrir como fazer um computador no shapez.io
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
linhas mais eficientes.
@ -52,6 +52,7 @@ global:
escape: ESC
shift: Shift
space: Espaço
loggingIn: Entrando
demoBanners:
title: Versão Demo
intro: Compre a versão completa para desbloquear todos os recursos!
@ -71,6 +72,11 @@ mainMenu:
savegameLevel: Nível <x>
savegameLevelUnknown: Nível desconhecido
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:
buttons:
ok: OK
@ -84,6 +90,9 @@ dialogs:
viewUpdate: Atualizações
showUpgrades: Melhorias
showKeybindings: Controles
retry: Tentar novamente
continue: Continue
playOffline: Jogar Offline
importSavegameError:
title: Erro de importação
text: "Houve uma falha ao importar seu jogo salvo:"
@ -181,6 +190,67 @@ dialogs:
title: Tutorial disponível
desc: Existe um tutorial em vídeo para esse nível, mas está disponível apenas em
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:
keybindingsOverlay:
moveMap: Mover
@ -202,6 +272,7 @@ ingame:
clearSelection: Limpar Seleção
pipette: Conta-Gotas
switchLayers: Trocar Camadas
clearBelts: Clear belts
colors:
red: Vermelho
green: Verde
@ -351,8 +422,45 @@ ingame:
title: Me ajuda
desc: Eu desenvolvo o jogo no meu tempo livre!
achievements:
title: Achievements
desc: Hunt them all!
title: Conquistas
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:
belt:
name: Esteiras, Distribuidores e Túneis
@ -569,6 +677,18 @@ buildings:
name: Fabricante de Itens
description: Disponível no modo sandbox apenas, envia o sinal recebido do plano
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:
reward_cutter_and_trash:
title: Cortando formas
@ -980,10 +1100,14 @@ keybindings:
comparator: Comparador
item_producer: Produtor de Itens (Sandbox)
copyWireValue: "Fios: Copiar valor abaixo do cursor"
rotateToUp: "Rotate: Point Up"
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
rotateToUp: "Rotação: Para cima"
rotateToDown: "Rotação: Para baixo"
rotateToRight: "Rotação: Para direita"
rotateToLeft: "Rotação: Para esquerda"
constant_producer: Produtor Constante
goal_acceptor: Receptor de Objetivo
block: Bloco
massSelectClear: Limpar esteiras
about:
title: Sobre o jogo
body: >-
@ -1077,3 +1201,57 @@ tips:
- Pressione F4 para mostrar seu FPS e taxa de tiques.
- Pressione F4 duas vezes para mostrar o ladrilho do seu mouse e da câmera.
- Você pode clicar em uma forma fixada na esquerda para tirá-la de lá.
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!
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,
e o tempo parece que voa.
nothernlion_comment: Este é um jogo fantástico - Estou a ter um bom bocado
enquanto o jogo, e o tempo parece que voa.
notch_comment: Ora bolas. Eu devia ir dormir, mas acho que acabei de descobrir
como criar computorizar no shapez.io
steam_review_comment: Este jogo roubou a minha vida e não a quero de volta.
Jogo de fábrica relaxante que não me deixa parar de fazer as minhas linhas
steam_review_comment: Este jogo roubou a minha vida e não a quero de volta. Jogo
de fábrica relaxante que não me deixa parar de fazer as minhas linhas
cada vez mais eficientes.
global:
loading: A Carregar
@ -53,6 +53,7 @@ global:
escape: ESC
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Versão Demo
intro: Compra a versão completa para desbloqueares todas as funcionalidades!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Criado por <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Ver Update
showUpgrades: Mostrar Upgrades
showKeybindings: Mostrar Atalhos
retry: Tentar novamente
continue: Continuar
playOffline: Jogar Offline
importSavegameError:
title: Erro de importação
text: "Erro ao importar o teu savegame:"
@ -189,6 +198,67 @@ dialogs:
title: Tutorial Disponível
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?
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:
keybindingsOverlay:
moveMap: Mover
@ -210,6 +280,7 @@ ingame:
clearSelection: Cancelar
pipette: Pipeta
switchLayers: Troca de camadas
clearBelts: Limpar tapetes rolantes
buildingPlacement:
cycleBuildingVariants: Pressionar <key> para obter variações.
hotkeyLabel: "Atalho: <key>"
@ -358,8 +429,46 @@ ingame:
title: Ajuda-me
desc: Eu desenvolvo este jogo no meu tempo livre!
achievements:
title: Achievements
desc: Hunt them all!
title: Conquistas
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:
belt:
name: Tapetes, Distribuidores e Túneis
@ -576,6 +685,18 @@ buildings:
name: Produtor de Itens
description: Disponível apenas no modo sandbox, produz o sinal dado na camada de
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:
reward_cutter_and_trash:
title: Corte de formas
@ -990,6 +1111,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Produtor Constante
goal_acceptor: Recetor de Objetivo
block: Bloqueador
massSelectClear: Limpar tapetes rolante
about:
title: Sobre o Jogo
body: >-
@ -1085,3 +1210,57 @@ tips:
- Pressiona F4 para mostrar os teus FPS e Tick Rate.
- Pressiona F4 duas vezes para mostrar a tile do teu rato e câmara.
- Podes clicar numa forma afixada no lado direito para 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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Versiunea Demo
intro: Instalează versiunea Standalone pentru a debloca toate funcțiile!
@ -73,6 +74,11 @@ mainMenu:
madeBy: Făcut de <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -86,6 +92,9 @@ dialogs:
viewUpdate: Vezi Update-ul
showUpgrades: Vezi Upgrade-urile
showKeybindings: Arată tastele configurate
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Eroare la Importare
text: "Încercarea de importare a eșuat:"
@ -188,6 +197,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Move
@ -209,6 +279,7 @@ ingame:
clearSelection: Golește Secțiunea
pipette: Pipette
switchLayers: Switch layers
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: Apasă <key> pentru a cicla variantele.
hotkeyLabel: "Tasta: <key>"
@ -357,6 +428,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Benzi, Distribuitor & Tunele
@ -567,6 +676,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Tăierea formelor
@ -975,6 +1096,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Despre acest joc
body: >-
@ -1060,3 +1185,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Demo Version
intro: Get the standalone to unlock all features!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Level <x>
savegameLevelUnknown: Unknown Level
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: View Update
showUpgrades: Show Upgrades
showKeybindings: Show Keybindings
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Import Error
text: "Failed to import your savegame:"
@ -182,6 +191,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Move
@ -203,6 +273,7 @@ ingame:
clearSelection: Clear selection
pipette: Pipette
switchLayers: Switch layers
clearBelts: Clear belts
colors:
red: Red
green: Green
@ -350,6 +421,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Belts, Distributor & Tunnels
@ -556,6 +665,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Cutting Shapes
@ -957,6 +1078,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: About this Game
body: >-
@ -1042,3 +1167,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: SHIFT
space: SPACE
loggingIn: Logging in
demoBanners:
title: Demo Verzija
intro: Nabavite punu igru kako biste otključali sve funkcije!
@ -72,6 +73,11 @@ mainMenu:
savegameLevel: Nivo <x>
savegameLevelUnknown: Nepoznat Nivo
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Pogledajte ažuriranje
showUpgrades: Prikaži Nadogradnje
showKeybindings: Prikaži podešavanje tastera
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Greška prilikom uvoza
text: "Neuspešan uvoz sačuvane igre:"
@ -182,6 +191,67 @@ dialogs:
title: Tutorial Available
desc: There is a tutorial video available for this level, but it is only
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:
keybindingsOverlay:
moveMap: Kretanje
@ -203,6 +273,7 @@ ingame:
clearSelection: Očisti odabir
pipette: Pipeta
switchLayers: Promeni sloj
clearBelts: Clear belts
colors:
red: Crvena
green: Zelena
@ -350,6 +421,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Trake, Delioci i Tuneli
@ -554,6 +663,18 @@ buildings:
name: Item Producer
description: Available in sandbox mode only, outputs the given signal from the
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:
reward_cutter_and_trash:
title: Rezanje Oblika
@ -955,6 +1076,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: O Igri
body: >-
@ -1040,3 +1165,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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
shift: SKIFT
space: MELLANSLAG
loggingIn: Logging in
demoBanners:
title: Demo-version
intro: Skaffa den fristående versionen för att låsa upp alla funktioner!
@ -72,6 +73,11 @@ mainMenu:
madeBy: Skapad av <author-link>
subreddit: Reddit
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:
buttons:
ok: OK
@ -85,6 +91,9 @@ dialogs:
viewUpdate: Se uppdateringar
showUpgrades: Visa uppgraderingar
showKeybindings: Visa tangentbindingar
retry: Retry
continue: Continue
playOffline: Play Offline
importSavegameError:
title: Importfel
text: "Kunde inte importera sparfil:"
@ -186,6 +195,67 @@ dialogs:
title: Handledning Tillgänglig
desc: Det finns en handledningsvideo tillgänglig för denna nivå, men den är bara
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:
keybindingsOverlay:
moveMap: Flytta
@ -207,6 +277,7 @@ ingame:
clearSelection: Rensa vald
pipette: Pipett
switchLayers: Byt lager
clearBelts: Clear belts
buildingPlacement:
cycleBuildingVariants: Tryck ned <key> För att bläddra igenom varianter.
hotkeyLabel: "Snabbtangent: <key>"
@ -354,6 +425,44 @@ ingame:
achievements:
title: Achievements
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:
belt:
name: Rullband, Distributörer & Tunnlar
@ -559,6 +668,18 @@ buildings:
name: Item Producer
description: Endast tillgänglig i sandlådeläge, avger en given signal från
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:
reward_cutter_and_trash:
title: Att klippa former
@ -965,6 +1086,10 @@ keybindings:
rotateToDown: "Rotate: Point Down"
rotateToRight: "Rotate: Point Right"
rotateToLeft: "Rotate: Point Left"
constant_producer: Constant Producer
goal_acceptor: Goal Acceptor
block: Block
massSelectClear: Clear belts
about:
title: Om detta spel
body: >-
@ -1050,3 +1175,57 @@ tips:
- Press F4 to show your FPS and Tick Rate.
- Press F4 twice to show the tile of your mouse and camera.
- You can click a pinned shape on the left side to unpin it.
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