Merge branch 'master' of git://github.com/tobspr/shapez.io

This commit is contained in:
Gerdon Abbink 2020-06-23 18:20:37 +02:00
commit 1756740947
58 changed files with 1699 additions and 674 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 17 KiB

After

Width:  |  Height:  |  Size: 18 KiB

View File

@ -1,3 +1,3 @@
version https://git-lfs.github.com/spec/v1 version https://git-lfs.github.com/spec/v1
oid sha256:ebde52e75e54d2f4add0cf498c85f059082a0745212a23c4de7328a7d78b00a5 oid sha256:ae83b8805191eeba13016e40216fc4781ac3958e6886769ce8677ea28370d13e
size 238170 size 239706

Binary file not shown.

After

Width:  |  Height:  |  Size: 577 B

View File

@ -0,0 +1,2 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" id="Capa_1" enable-background="new 0 0 512 512" height="512px" viewBox="0 0 512 512" width="512px" class=""><g><path d="m106 512h300c24.814 0 45-20.186 45-45v-317h-105c-24.814 0-45-20.186-45-45v-105h-195c-24.814 0-45 20.186-45 45v422c0 24.814 20.186 45 45 45zm60-301h180c8.291 0 15 6.709 15 15s-6.709 15-15 15h-180c-8.291 0-15-6.709-15-15s6.709-15 15-15zm0 60h180c8.291 0 15 6.709 15 15s-6.709 15-15 15h-180c-8.291 0-15-6.709-15-15s6.709-15 15-15zm0 60h180c8.291 0 15 6.709 15 15s-6.709 15-15 15h-180c-8.291 0-15-6.709-15-15s6.709-15 15-15zm0 60h120c8.291 0 15 6.709 15 15s-6.709 15-15 15h-120c-8.291 0-15-6.709-15-15s6.709-15 15-15z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#00AF80"/><path d="m346 120h96.211l-111.211-111.211v96.211c0 8.276 6.724 15 15 15z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#00AF80"/></g> </svg>

After

Width:  |  Height:  |  Size: 953 B

View File

@ -0,0 +1 @@
<svg enable-background="new 0 0 24 24" height="512" viewBox="0 0 24 24" width="512" xmlns="http://www.w3.org/2000/svg"><path d="m21.325 9.308c-.758 0-1.425.319-1.916.816-1.805-1.268-4.239-2.084-6.936-2.171l1.401-6.406 4.461 1.016c0 1.108.89 2.013 1.982 2.013 1.113 0 2.008-.929 2.008-2.038s-.889-2.038-2.007-2.038c-.779 0-1.451.477-1.786 1.129l-4.927-1.108c-.248-.067-.491.113-.557.365l-1.538 7.062c-2.676.113-5.084.928-6.895 2.197-.491-.518-1.184-.837-1.942-.837-2.812 0-3.733 3.829-1.158 5.138-.091.405-.132.837-.132 1.268 0 4.301 4.775 7.786 10.638 7.786 5.888 0 10.663-3.485 10.663-7.786 0-.431-.045-.883-.156-1.289 2.523-1.314 1.594-5.115-1.203-5.117zm-15.724 5.41c0-1.129.89-2.038 2.008-2.038 1.092 0 1.983.903 1.983 2.038 0 1.109-.89 2.013-1.983 2.013-1.113.005-2.008-.904-2.008-2.013zm10.839 4.798c-1.841 1.868-7.036 1.868-8.878 0-.203-.18-.203-.498 0-.703.177-.18.491-.18.668 0 1.406 1.463 6.07 1.488 7.537 0 .177-.18.491-.18.668 0 .207.206.207.524.005.703zm-.041-2.781c-1.092 0-1.982-.903-1.982-2.011 0-1.129.89-2.038 1.982-2.038 1.113 0 2.008.903 2.008 2.038-.005 1.103-.895 2.011-2.008 2.011z" fill="#ff5722"/></svg>

After

Width:  |  Height:  |  Size: 1.1 KiB

View File

@ -0,0 +1,2 @@
<?xml version="1.0"?>
<svg xmlns="http://www.w3.org/2000/svg" id="Capa_1" enable-background="new 0 0 512 512" height="512px" viewBox="0 0 512 512" width="512px"><g><g><g><path d="m496 0h-210c-8.284 0-15 6.716-15 15v260c0 8.284 6.716 15 15 15h143.787l55.606 55.606c2.869 2.87 6.706 4.394 10.609 4.394 1.933 0 3.882-.374 5.737-1.142 5.605-2.322 9.26-7.792 9.26-13.858v-320c.001-8.284-6.715-15-14.999-15zm-40 130h-10.978c-3.123 23.867-13.59 45.455-29.054 62.414 10.691 4.857 22.545 7.586 35.032 7.586 8.284 0 15 6.716 15 15s-6.716 15-15 15c-21.972 0-42.521-6.198-60-16.931-17.478 10.733-38.028 16.931-60 16.931-8.284 0-15-6.716-15-15s6.716-15 15-15c12.487 0 24.342-2.729 35.032-7.586-15.464-16.959-25.932-38.547-29.054-62.414h-10.978c-8.284 0-15-6.716-15-15s6.716-15 15-15h50v-25c0-8.284 6.716-15 15-15s15 6.716 15 15v25h50c8.284 0 15 6.716 15 15s-6.716 15-15 15z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#4949E7"/><path d="m391 175.148c12.068-12.039 20.523-27.681 23.648-45.148h-47.295c3.124 17.467 11.579 33.11 23.647 45.148z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#4949E7"/></g><g><path d="m100.59 327.624h41.01l-20.411-54.086z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#4949E7"/><path d="m226 162h-210c-8.284 0-15 6.716-15 15v320c0 6.067 3.654 11.537 9.26 13.858 1.855.769 3.805 1.142 5.737 1.142 3.903 0 7.74-1.524 10.609-4.394l55.607-55.606h143.787c8.284 0 15-6.716 15-15v-260c0-8.284-6.716-15-15-15zm-44.438 229.034c-1.743.658-3.534.97-5.293.97-6.062 0-11.77-3.701-14.037-9.708l-9.311-24.673h-63.757l-9.413 24.715c-2.948 7.741-11.61 11.628-19.356 8.679-7.741-2.948-11.627-11.615-8.679-19.356l52.569-138.028c.043-.114.088-.228.135-.34 2.803-6.852 9.397-11.284 16.8-11.292h.021c7.396 0 13.99 4.416 16.806 11.256.057.137.11.275.163.413l52.092 138.034c2.924 7.751-.989 16.405-8.74 19.33z" data-original="#000000" class="active-path" data-old_color="#000000" fill="#4949E7"/></g></g></g> </svg>

After

Width:  |  Height:  |  Size: 2.0 KiB

View File

@ -0,0 +1,3 @@
version https://git-lfs.github.com/spec/v1
oid sha256:1dc8775fdf5155097d6e1d60a436f48916af56eec14fb9034e71b32ad3b6f1b0
size 358896

View File

@ -0,0 +1,18 @@
#ingame_HUD_ColorBlindBelowTileHelper {
position: absolute;
@include SuperSmallText;
color: #fff;
background: $ingameHudBg;
@include S(padding, 5px);
@include S(top, 20px);
left: 50%;
transform: translateX(-50%);
text-transform: uppercase;
&:not(.visible) {
display: none;
}
@include DarkThemeInvert;
}

View File

@ -72,6 +72,24 @@
grid-row: 1 / 2; grid-row: 1 / 2;
} }
> .infoButton {
@include S(width, 8px);
@include S(height, 8px);
background: uiResource("icons/info_button.png") center center / 95% no-repeat;
position: absolute;
opacity: 0.7;
@include S(top, 13px);
@include S(left, -7px);
@include DarkThemeInvert;
@include IncreasedClickArea(2px);
transition: opacity 0.12s ease-in-out;
z-index: 100;
&:hover {
opacity: 0.8;
}
}
&.goal, &.goal,
&.blueprint { &.blueprint {
.amountLabel::after { .amountLabel::after {

View File

@ -0,0 +1,131 @@
#ingame_HUD_ShapeViewer {
.dialogInner {
@include S(width, 160px);
}
.content {
display: flex;
flex-direction: column;
width: 100%;
align-items: center;
justify-items: center;
.seperator {
display: flex;
align-items: center;
justify-content: center;
width: 100%;
}
.layer {
position: relative;
background: #eee;
@include DarkThemeOverride {
background: rgba(0, 10, 20, 0.2);
}
@include S(width, 150px);
@include S(height, 100px);
display: flex;
align-items: center;
justify-content: center;
> canvas {
@include S(width, 50px);
@include S(height, 50px);
}
.quad {
position: absolute;
width: 50%;
height: 50%;
display: flex;
justify-content: center;
align-items: center;
box-sizing: border-box;
$arrowDims: 23px;
$spacing: 9px;
@include S(padding, 6px);
.colorLabel {
text-transform: uppercase;
@include SuperSmallText;
@include S(font-size, 9px);
}
.emptyLabel {
text-transform: uppercase;
@include SuperSmallText;
@include S(font-size, 9px);
}
&::after {
content: " ";
background: rgba(0, 10, 20, 0.5);
@include S(width, $arrowDims);
@include S(height, 1px);
position: absolute;
transform: rotate(45deg);
transform-origin: 50% 50%;
}
@include DarkThemeOverride {
&::after {
background: rgba(255, 255, 255, 0.5);
}
}
&.quad-0 {
right: 0;
top: 0;
align-items: flex-start;
justify-content: flex-end;
&::after {
@include S(left, $spacing);
@include S(bottom, $arrowDims / 2 + $spacing);
transform: rotate(-45deg);
}
}
&.quad-1 {
bottom: 0;
right: 0;
align-items: flex-end;
justify-content: flex-end;
&::after {
@include S(left, $spacing);
@include S(top, $arrowDims / 2 + $spacing);
transform: rotate(45deg);
}
}
&.quad-2 {
bottom: 0;
left: 0;
align-items: flex-end;
justify-content: flex-start;
&::after {
@include S(right, $spacing);
@include S(top, $arrowDims / 2 + $spacing);
transform: rotate(135deg);
}
}
&.quad-3 {
top: 0;
left: 0;
align-items: flex-start;
justify-content: flex-start;
&::after {
@include S(right, $spacing);
@include S(bottom, $arrowDims / 2 + $spacing);
transform: rotate(225deg);
}
}
}
}
}
}

View File

@ -195,6 +195,25 @@
} }
} }
button.showInfo {
@include S(width, 11px);
@include S(height, 11px);
background: uiResource("icons/info_button.png") center center / 95% no-repeat;
position: absolute;
@include S(top, 17px);
@include S(right, 2.5px);
opacity: 0.5;
cursor: pointer;
pointer-events: all;
@include IncreasedClickArea(5px);
transition: opacity 0.12s ease-in-out;
@include DarkThemeInvert;
&:hover {
opacity: 0.6;
}
}
canvas { canvas {
@include S(width, 40px); @include S(width, 40px);
@include S(height, 40px); @include S(height, 40px);
@ -241,7 +260,7 @@
&.complete { &.complete {
background-color: $colorGreenBright; background-color: $colorGreenBright;
@include DarkThemeOverride { @include DarkThemeOverride {
background-color: $colorGreenBright; background-color: $colorGreenBright;
} }

View File

@ -49,6 +49,8 @@
@import "ingame_hud/blueprint_placer"; @import "ingame_hud/blueprint_placer";
@import "ingame_hud/waypoints"; @import "ingame_hud/waypoints";
@import "ingame_hud/interactive_tutorial"; @import "ingame_hud/interactive_tutorial";
@import "ingame_hud/color_blind_helper";
@import "ingame_hud/shape_viewer";
// prettier-ignore // prettier-ignore
$elements: $elements:
@ -74,6 +76,7 @@ ingame_HUD_buildings_toolbar,
ingame_HUD_BlueprintPlacer, ingame_HUD_BlueprintPlacer,
ingame_HUD_Waypoints_Hint, ingame_HUD_Waypoints_Hint,
ingame_HUD_Watermark, ingame_HUD_Watermark,
ingame_HUD_ColorBlindBelowTileHelper,
// Overlays // Overlays
ingame_HUD_BetaOverlay, ingame_HUD_BetaOverlay,
@ -81,6 +84,7 @@ ingame_HUD_BetaOverlay,
// Dialogs // Dialogs
ingame_HUD_Shop, ingame_HUD_Shop,
ingame_HUD_Statistics, ingame_HUD_Statistics,
ingame_HUD_ShapeViewer,
ingame_HUD_UnlockNotification, ingame_HUD_UnlockNotification,
ingame_HUD_SettingsMenu, ingame_HUD_SettingsMenu,
ingame_HUD_ModalDialogs; ingame_HUD_ModalDialogs;

View File

@ -224,6 +224,12 @@
width: 100%; width: 100%;
box-sizing: border-box; box-sizing: border-box;
.buttons {
display: flex;
flex-direction: column;
align-items: center;
}
.browserWarning { .browserWarning {
@include S(margin-bottom, 10px); @include S(margin-bottom, 10px);
background-color: $colorRedBright; background-color: $colorRedBright;
@ -337,33 +343,42 @@
} }
.footer { .footer {
display: flex; display: grid;
flex-grow: 1; flex-grow: 1;
justify-content: center; justify-content: center;
align-items: flex-end; align-items: flex-end;
width: 100%; width: 100%;
grid-template-columns: auto auto auto 1fr;
@include S(padding, 10px);
box-sizing: border-box;
@include S(grid-gap, 5px);
.author { .author {
flex-grow: 1; flex-grow: 1;
text-align: right; text-align: right;
@include S(padding-right, 10px); @include PlainText;
color: #888a8f;
a {
color: #333438;
}
} }
@include S(padding, 15px); @include S(padding, 15px);
> a {
> .boxLink {
display: grid; display: grid;
align-items: center; align-items: center;
grid-template-columns: 1fr auto; grid-template-columns: 1fr auto;
justify-content: center; justify-content: center;
background: #fafafa; background: #fdfdfd;
@include S(padding, 5px); @include S(padding, 5px);
@include S(padding-left, 10px); @include S(padding-left, 10px);
@include S(border-radius, $globalBorderRadius); @include S(border-radius, $globalBorderRadius);
@include S(margin-left, 10px);
@include SuperSmallText(); @include SuperSmallText();
font-weight: bold; font-weight: bold;
box-sizing: border-box;
text-transform: uppercase; text-transform: uppercase;
color: #616266; color: #616266;
@ -371,19 +386,11 @@
transition-property: background-color, transform; transition-property: background-color, transform;
pointer-events: all; pointer-events: all;
@include S(width, 120px); @include S(width, 120px);
@include S(height, 50px); @include S(height, 60px);
cursor: pointer; cursor: pointer;
&:hover { &:hover {
background-color: #fff; background-color: #fff;
transform: scale(1.01);
}
&:not(.boxLink) {
align-self: flex-end;
justify-self: flex-end;
height: unset;
width: unset;
@include S(padding, 3px);
} }
.thirdpartyLogo { .thirdpartyLogo {
@ -400,6 +407,49 @@
} }
} }
} }
> .sidelinks {
display: grid;
align-items: flex-start;
justify-content: flex-start;
grid-template-rows: 1fr 1fr 1fr;
@include S(grid-gap, 2px);
@include S(height, 60px);
> a {
color: #616266;
background: #fdfdfd;
height: 100%;
&:hover {
background-color: #fff;
}
@include SuperSmallText;
text-transform: uppercase;
width: 100%;
@include S(padding, 2px, 10px);
display: flex;
align-items: center;
justify-content: flex-start;
@include S(padding-left, 25px);
box-sizing: border-box;
font-weight: bold;
background-position: #{D(5px)} center;
background-size: #{D(12px)};
background-repeat: no-repeat;
&.redditLink {
background-image: uiResource("main_menu/reddit.svg");
}
&.changelog {
background-image: uiResource("main_menu/changelog.svg");
}
&.helpTranslate {
background-image: uiResource("main_menu/translate.svg");
}
}
}
} }
@include DarkThemeOverride { @include DarkThemeOverride {
@ -423,9 +473,14 @@
} }
.footer { .footer {
> a { > a,
background: darken($darkModeGameBackground, 10); .sidelinks > a {
background-color: darken($darkModeGameBackground, 10);
color: #eee; color: #eee;
&:hover {
background-color: darken($darkModeGameBackground, 8);
}
} }
.author { .author {

View File

@ -1,15 +1,21 @@
export const CHANGELOG = [ export const CHANGELOG = [
{ {
version: "1.1.17", version: "1.1.17",
date: "unreleased", date: "22.06.2020",
entries: [ entries: [
"Color blind mode! You can now activate it in the settings and it will show you which color is below your cursor (Either resource or on the belt)",
"Add info buttons to all shapes so you can figure out how they are built! (And also, which colors they have)",
"Allow configuring autosave interval and disabling it in the settings", "Allow configuring autosave interval and disabling it in the settings",
"The smart-tunnel placement has been reworked to properly replace belts. Thus the setting has been turned on again by default",
"The soundtrack now has a higher quality on the standalone version than the web version", "The soundtrack now has a higher quality on the standalone version than the web version",
"Add setting to disable cut/delete warnings (by hexy)", "Add setting to disable cut/delete warnings (by hexy)",
"Fix bug where belts in blueprints don't orient correctly (by hexy)", "Fix bug where belts in blueprints don't orient correctly (by hexy)",
"Fix camera moving weird after dragging and holding (by hexy)", "Fix camera moving weird after dragging and holding (by hexy)",
"Fix keybinding for pipette showing while pasting blueprints",
"Improve visibility of shape background in dark mode",
"Added sound when destroying a building",
"Added swedish translation",
"Update tutorial image for tier 2 tunnels to explain mix/match (by jimmyshadow1)", "Update tutorial image for tier 2 tunnels to explain mix/match (by jimmyshadow1)",
"Prevent default actions on all keybindings in the web version so you don't accidentally use builtin browser shortcuts",
], ],
}, },
{ {

View File

@ -19,6 +19,7 @@ const smoothCanvas = true;
export const THIRDPARTY_URLS = { export const THIRDPARTY_URLS = {
discord: "https://discord.gg/HN7EVzV", discord: "https://discord.gg/HN7EVzV",
github: "https://github.com/tobspr/shapez.io", github: "https://github.com/tobspr/shapez.io",
reddit: "https://www.reddit.com/r/shapezio",
standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/", standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/",
}; };

View File

@ -191,7 +191,17 @@ export class InputDistributor {
*/ */
handleKeyMouseDown(event) { handleKeyMouseDown(event) {
const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode; const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode;
event.preventDefault(); if (
keyCode === 4 || // MB4
keyCode === 5 || // MB5
keyCode === 9 || // TAB
keyCode === 16 || // SHIFT
keyCode === 17 || // CTRL
keyCode === 18 || // ALT
(keyCode >= 112 && keyCode < 122) // F1 - F10
) {
event.preventDefault();
}
const isInitial = !this.keysDown.has(keyCode); const isInitial = !this.keysDown.has(keyCode);
this.keysDown.add(keyCode); this.keysDown.add(keyCode);

View File

@ -275,7 +275,7 @@ export class HubGoals extends BasicSerializableObject {
* @param {string} upgradeId * @param {string} upgradeId
* @returns {boolean} * @returns {boolean}
*/ */
tryUnlockUgprade(upgradeId) { tryUnlockUpgrade(upgradeId) {
if (!this.canUnlockUpgrade(upgradeId)) { if (!this.canUnlockUpgrade(upgradeId)) {
return false; return false;
} }

View File

@ -34,7 +34,8 @@ import { HUDPartTutorialHints } from "./parts/tutorial_hints";
import { HUDWaypoints } from "./parts/waypoints"; import { HUDWaypoints } from "./parts/waypoints";
import { HUDInteractiveTutorial } from "./parts/interactive_tutorial"; import { HUDInteractiveTutorial } from "./parts/interactive_tutorial";
import { HUDScreenshotExporter } from "./parts/screenshot_exporter"; import { HUDScreenshotExporter } from "./parts/screenshot_exporter";
import { Entity } from "../entity"; import { HUDColorBlindHelper } from "./parts/color_blind_helper";
import { HUDShapeViewer } from "./parts/shape_viewer";
export class GameHUD { export class GameHUD {
/** /**
@ -68,6 +69,7 @@ export class GameHUD {
debugInfo: new HUDDebugInfo(this.root), debugInfo: new HUDDebugInfo(this.root),
dialogs: new HUDModalDialogs(this.root), dialogs: new HUDModalDialogs(this.root),
screenshotExporter: new HUDScreenshotExporter(this.root), screenshotExporter: new HUDScreenshotExporter(this.root),
shapeViewer: new HUDShapeViewer(this.root),
}; };
this.signals = { this.signals = {
@ -76,7 +78,8 @@ export class GameHUD {
shapeUnpinRequested: /** @type {TypedSignal<[string]>} */ (new Signal()), shapeUnpinRequested: /** @type {TypedSignal<[string]>} */ (new Signal()),
notification: /** @type {TypedSignal<[string, enumNotificationType]>} */ (new Signal()), notification: /** @type {TypedSignal<[string, enumNotificationType]>} */ (new Signal()),
buildingsSelectedForCopy: /** @type {TypedSignal<[Array<number>]>} */ (new Signal()), buildingsSelectedForCopy: /** @type {TypedSignal<[Array<number>]>} */ (new Signal()),
pasteBlueprintRequested: new Signal(), pasteBlueprintRequested: /** @type {TypedSignal<[]>} */ (new Signal()),
viewShapeDetailsRequested: /** @type {TypedSignal<[ShapeDefinition]>} */ (new Signal()),
}; };
if (!IS_MOBILE) { if (!IS_MOBILE) {
@ -100,6 +103,10 @@ export class GameHUD {
this.parts.vignetteOverlay = new HUDVignetteOverlay(this.root); this.parts.vignetteOverlay = new HUDVignetteOverlay(this.root);
} }
if (this.root.app.settings.getAllSettings().enableColorBlindHelper) {
this.parts.colorBlindHelper = new HUDColorBlindHelper(this.root);
}
const frag = document.createDocumentFragment(); const frag = document.createDocumentFragment();
for (const key in this.parts) { for (const key in this.parts) {
this.parts[key].createElements(frag); this.parts[key].createElements(frag);
@ -208,7 +215,13 @@ export class GameHUD {
* @param {DrawParameters} parameters * @param {DrawParameters} parameters
*/ */
draw(parameters) { draw(parameters) {
const partsOrder = ["waypoints", "massSelector", "buildingPlacer", "blueprintPlacer"]; const partsOrder = [
"waypoints",
"massSelector",
"buildingPlacer",
"blueprintPlacer",
"colorBlindHelper",
];
for (let i = 0; i < partsOrder.length; ++i) { for (let i = 0; i < partsOrder.length; ++i) {
if (this.parts[partsOrder[i]]) { if (this.parts[partsOrder[i]]) {

View File

@ -10,6 +10,7 @@ import { blueprintShape } from "../../upgrades";
import { BaseHUDPart } from "../base_hud_part"; import { BaseHUDPart } from "../base_hud_part";
import { DynamicDomAttach } from "../dynamic_dom_attach"; import { DynamicDomAttach } from "../dynamic_dom_attach";
import { Blueprint } from "./blueprint"; import { Blueprint } from "./blueprint";
import { SOUNDS } from "../../../platform/sound";
export class HUDBlueprintPlacer extends BaseHUDPart { export class HUDBlueprintPlacer extends BaseHUDPart {
createElements(parent) { createElements(parent) {
@ -103,7 +104,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
if (blueprint.tryPlace(this.root, tile)) { if (blueprint.tryPlace(this.root, tile)) {
const cost = blueprint.getCost(); const cost = blueprint.getCost();
this.root.hubGoals.takeShapeByKey(blueprintShape, cost); this.root.hubGoals.takeShapeByKey(blueprintShape, cost);
this.root.soundProxy.playUi(SOUNDS.placeBuilding);
// This actually feels weird // This actually feels weird
// if (!this.root.keyMapper.getBinding(KEYMAPPINGS.placementModifiers.placeMultiple).pressed) { // if (!this.root.keyMapper.getBinding(KEYMAPPINGS.placementModifiers.placeMultiple).pressed) {
// this.currentBlueprint.set(null); // this.currentBlueprint.set(null);

View File

@ -10,6 +10,7 @@ import { Entity } from "../../entity";
import { KEYMAPPINGS } from "../../key_action_mapper"; import { KEYMAPPINGS } from "../../key_action_mapper";
import { defaultBuildingVariant, MetaBuilding } from "../../meta_building"; import { defaultBuildingVariant, MetaBuilding } from "../../meta_building";
import { BaseHUDPart } from "../base_hud_part"; import { BaseHUDPart } from "../base_hud_part";
import { SOUNDS } from "../../../platform/sound";
/** /**
* Contains all logic for the building placer - this doesn't include the rendering * Contains all logic for the building placer - this doesn't include the rendering
@ -183,6 +184,13 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
if (mousePos) { if (mousePos) {
this.onMouseMove(mousePos); this.onMouseMove(mousePos);
} }
// Make sure we have nothing selected while in overview mode
if (this.root.camera.getIsMapOverlayActive()) {
if (this.currentMetaBuilding.get()) {
this.currentMetaBuilding.set(null);
}
}
} }
/** /**
@ -215,6 +223,7 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
const contents = this.root.map.getTileContent(tile); const contents = this.root.map.getTileContent(tile);
if (contents) { if (contents) {
this.root.logic.tryDeleteBuilding(contents); this.root.logic.tryDeleteBuilding(contents);
this.root.soundProxy.playUi(SOUNDS.destroyBuilding);
} }
} }
@ -650,6 +659,7 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
const contents = this.root.map.getTileContentXY(x0, y0); const contents = this.root.map.getTileContentXY(x0, y0);
if (contents && !contents.queuedForDestroy && !contents.destroyed) { if (contents && !contents.queuedForDestroy && !contents.destroyed) {
this.root.logic.tryDeleteBuilding(contents); this.root.logic.tryDeleteBuilding(contents);
this.root.soundProxy.playUi(SOUNDS.destroyBuilding);
} }
} else { } else {
this.tryPlaceCurrentBuildingAt(new Vector(x0, y0)); this.tryPlaceCurrentBuildingAt(new Vector(x0, y0));

View File

@ -0,0 +1,106 @@
import { BaseHUDPart } from "../base_hud_part";
import { makeDiv } from "../../../core/utils";
import { TrackedState } from "../../../core/tracked_state";
import { enumColors } from "../../colors";
import { ColorItem } from "../../items/color_item";
import { DrawParameters } from "../../../core/draw_parameters";
import { THEME } from "../../theme";
import { globalConfig } from "../../../core/config";
import { T } from "../../../translations";
export class HUDColorBlindHelper extends BaseHUDPart {
createElements(parent) {
this.belowTileIndicator = makeDiv(parent, "ingame_HUD_ColorBlindBelowTileHelper", []);
}
initialize() {
this.trackedColorBelowTile = new TrackedState(this.onColorBelowTileChanged, this);
}
/**
* Called when the color below the current tile changed
* @param {enumColors|null} color
*/
onColorBelowTileChanged(color) {
this.belowTileIndicator.classList.toggle("visible", !!color);
if (color) {
this.belowTileIndicator.innerText = T.ingame.colors[color];
}
}
/**
* Computes the color below the current tile
* @returns {enumColors}
*/
computeColorBelowTile() {
const mousePosition = this.root.app.mousePosition;
if (!mousePosition) {
// Not on screen
return null;
}
const worldPos = this.root.camera.screenToWorld(mousePosition);
const tile = worldPos.toTileSpace();
const contents = this.root.map.getTileContent(tile);
if (contents && !contents.components.Miner) {
const beltComp = contents.components.Belt;
// Check if the belt has a color item
if (beltComp) {
const firstItem = beltComp.sortedItems[0];
if (firstItem && firstItem[1] instanceof ColorItem) {
return firstItem[1].color;
}
}
// Check if we are ejecting an item, if so use that color
const ejectorComp = contents.components.ItemEjector;
if (ejectorComp) {
for (let i = 0; i < ejectorComp.slots.length; ++i) {
const slot = ejectorComp.slots[i];
if (slot.item && slot.item instanceof ColorItem) {
return slot.item.color;
}
}
}
} else {
// We hovered a lower layer, show the color there
const lowerLayer = this.root.map.getLowerLayerContentXY(tile.x, tile.y);
if (lowerLayer && lowerLayer instanceof ColorItem) {
return lowerLayer.color;
}
}
return null;
}
update() {
this.trackedColorBelowTile.set(this.computeColorBelowTile());
}
/**
* Draws the currently selected tile
* @param {DrawParameters} parameters
*/
draw(parameters) {
const mousePosition = this.root.app.mousePosition;
if (!mousePosition) {
// Not on screen
return null;
}
const below = this.computeColorBelowTile();
if (below) {
// We have something below our tile
const worldPos = this.root.camera.screenToWorld(mousePosition);
const tile = worldPos.toTileSpace().toWorldSpace();
parameters.context.strokeStyle = THEME.map.colorBlindPickerTile;
parameters.context.lineWidth = 1;
parameters.context.beginPath();
parameters.context.rect(tile.x, tile.y, globalConfig.tileSize, globalConfig.tileSize);
parameters.context.stroke();
}
}
}

View File

@ -168,7 +168,7 @@ export class HUDKeybindingOverlay extends BaseHUDPart {
// Pipette // Pipette
label: T.ingame.keybindingsOverlay.pipette, label: T.ingame.keybindingsOverlay.pipette,
keys: [k.placement.pipette], keys: [k.placement.pipette],
condition: () => !this.mapOverviewActive, condition: () => !this.mapOverviewActive && !this.blueprintPlacementActive,
}, },
{ {

View File

@ -26,7 +26,8 @@ export class HUDPinnedShapes extends BaseHUDPart {
* amountLabel: HTMLElement, * amountLabel: HTMLElement,
* lastRenderedValue: string, * lastRenderedValue: string,
* element: HTMLElement, * element: HTMLElement,
* detector?: ClickDetector * detector?: ClickDetector,
* infoDetector?: ClickDetector
* }>} * }>}
*/ */
this.handles = []; this.handles = [];
@ -155,6 +156,10 @@ export class HUDPinnedShapes extends BaseHUDPart {
if (detector) { if (detector) {
detector.cleanup(); detector.cleanup();
} }
const infoDetector = this.handles[i].infoDetector;
if (infoDetector) {
infoDetector.cleanup();
}
} }
this.handles = []; this.handles = [];
@ -198,12 +203,24 @@ export class HUDPinnedShapes extends BaseHUDPart {
detector = new ClickDetector(element, { detector = new ClickDetector(element, {
consumeEvents: true, consumeEvents: true,
preventDefault: true, preventDefault: true,
targetOnly: true,
}); });
detector.click.add(() => this.unpinShape(key)); detector.click.add(() => this.unpinShape(key));
} else { } else {
element.classList.add("marked"); element.classList.add("marked");
} }
// Show small info icon
const infoButton = document.createElement("button");
infoButton.classList.add("infoButton");
element.appendChild(infoButton);
const infoDetector = new ClickDetector(infoButton, {
consumeEvents: true,
preventDefault: true,
targetOnly: true,
});
infoDetector.click.add(() => this.root.hud.signals.viewShapeDetailsRequested.dispatch(definition));
const amountLabel = makeDiv(element, null, ["amountLabel"], ""); const amountLabel = makeDiv(element, null, ["amountLabel"], "");
const goal = this.findGoalValueForShape(key); const goal = this.findGoalValueForShape(key);
@ -216,6 +233,8 @@ export class HUDPinnedShapes extends BaseHUDPart {
element, element,
amountLabel, amountLabel,
lastRenderedValue: "", lastRenderedValue: "",
detector,
infoDetector,
}); });
} }

View File

@ -0,0 +1,109 @@
import { BaseHUDPart } from "../base_hud_part";
import { makeDiv, removeAllChildren } from "../../../core/utils";
import { T } from "../../../translations";
import { defaultBuildingVariant } from "../../meta_building";
import { ShapeDefinition } from "../../shape_definition";
import { KEYMAPPINGS, KeyActionMapper } from "../../key_action_mapper";
import { InputReceiver } from "../../../core/input_receiver";
import { DynamicDomAttach } from "../dynamic_dom_attach";
export class HUDShapeViewer extends BaseHUDPart {
createElements(parent) {
this.background = makeDiv(parent, "ingame_HUD_ShapeViewer", ["ingameDialog"]);
// DIALOG Inner / Wrapper
this.dialogInner = makeDiv(this.background, null, ["dialogInner"]);
this.title = makeDiv(this.dialogInner, null, ["title"], T.ingame.shapeViewer.title);
this.closeButton = makeDiv(this.title, null, ["closeButton"]);
this.trackClicks(this.closeButton, this.close);
this.contentDiv = makeDiv(this.dialogInner, null, ["content"]);
}
initialize() {
this.root.hud.signals.viewShapeDetailsRequested.add(this.renderForShape, this);
this.domAttach = new DynamicDomAttach(this.root, this.background, {
attachClass: "visible",
});
this.inputReciever = new InputReceiver("shape_viewer");
this.keyActionMapper = new KeyActionMapper(this.root, this.inputReciever);
this.keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.close, this);
this.close();
}
/**
* Closes the dialog
*/
close() {
this.visible = false;
document.body.classList.remove("ingameDialogOpen");
this.root.app.inputMgr.makeSureDetached(this.inputReciever);
this.update();
}
/**
* Shows the viewer for a given definition
* @param {ShapeDefinition} definition
*/
renderForShape(definition) {
this.visible = true;
document.body.classList.add("ingameDialogOpen");
this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever);
removeAllChildren(this.contentDiv);
const layers = definition.layers;
for (let i = 0; i < layers.length; ++i) {
const layerElem = makeDiv(this.contentDiv, null, ["layer", "layer-" + i]);
let fakeLayers = [];
for (let k = 0; k < i; ++k) {
fakeLayers.push([null, null, null, null]);
}
fakeLayers.push(layers[i]);
const thisLayerOnly = new ShapeDefinition({ layers: fakeLayers });
const thisLayerCanvas = thisLayerOnly.generateAsCanvas(160);
layerElem.appendChild(thisLayerCanvas);
for (let quad = 0; quad < 4; ++quad) {
const quadElem = makeDiv(layerElem, null, ["quad", "quad-" + quad]);
const contents = layers[i][quad];
if (contents) {
const colorLabelElem = makeDiv(
quadElem,
null,
["colorLabel"],
T.ingame.colors[contents.color]
);
} else {
const emptyLabelElem = makeDiv(
quadElem,
null,
["emptyLabel"],
T.ingame.shapeViewer.empty
);
}
}
if (i < layers.length - 1) {
makeDiv(this.contentDiv, null, ["seperator"], "+");
}
}
}
/**
* Cleans up everything
*/
cleanup() {
document.body.classList.remove("ingameDialogOpen");
}
update() {
this.domAttach.update(this.visible);
}
}

View File

@ -79,6 +79,7 @@ export class HUDShop extends BaseHUDPart {
const requiredHandle = handle.requireIndexToElement[i]; const requiredHandle = handle.requireIndexToElement[i];
requiredHandle.container.remove(); requiredHandle.container.remove();
requiredHandle.pinDetector.cleanup(); requiredHandle.pinDetector.cleanup();
requiredHandle.infoDetector.cleanup();
} }
// Cleanup // Cleanup
@ -122,6 +123,10 @@ export class HUDShop extends BaseHUDPart {
pinButton.classList.add("pin"); pinButton.classList.add("pin");
container.appendChild(pinButton); container.appendChild(pinButton);
const viewInfoButton = document.createElement("button");
viewInfoButton.classList.add("showInfo");
container.appendChild(viewInfoButton);
const currentGoalShape = this.root.hubGoals.currentGoal.definition.getHash(); const currentGoalShape = this.root.hubGoals.currentGoal.definition.getHash();
if (shape === currentGoalShape) { if (shape === currentGoalShape) {
pinButton.classList.add("isGoal"); pinButton.classList.add("isGoal");
@ -145,6 +150,14 @@ export class HUDShop extends BaseHUDPart {
} }
}); });
const infoDetector = new ClickDetector(viewInfoButton, {
consumeEvents: true,
preventDefault: true,
});
infoDetector.click.add(() =>
this.root.hud.signals.viewShapeDetailsRequested.dispatch(shapeDef)
);
handle.requireIndexToElement.push({ handle.requireIndexToElement.push({
container, container,
progressLabel, progressLabel,
@ -152,6 +165,7 @@ export class HUDShop extends BaseHUDPart {
definition: shapeDef, definition: shapeDef,
required: amount, required: amount,
pinDetector, pinDetector,
infoDetector,
}); });
}); });
} }
@ -202,6 +216,7 @@ export class HUDShop extends BaseHUDPart {
const requiredHandle = handle.requireIndexToElement[i]; const requiredHandle = handle.requireIndexToElement[i];
requiredHandle.container.remove(); requiredHandle.container.remove();
requiredHandle.pinDetector.cleanup(); requiredHandle.pinDetector.cleanup();
requiredHandle.infoDetector.cleanup();
} }
handle.requireIndexToElement = []; handle.requireIndexToElement = [];
} }
@ -231,6 +246,6 @@ export class HUDShop extends BaseHUDPart {
tryUnlockNextTier(upgradeId) { tryUnlockNextTier(upgradeId) {
// Nothing // Nothing
this.root.hubGoals.tryUnlockUgprade(upgradeId); this.root.hubGoals.tryUnlockUpgrade(upgradeId);
} }
} }

View File

@ -333,7 +333,7 @@ export class ShapeDefinition extends BasicSerializableObject {
const quadrantSize = 10; const quadrantSize = 10;
const quadrantHalfSize = quadrantSize / 2; const quadrantHalfSize = quadrantSize / 2;
context.fillStyle = "rgba(40, 50, 65, 0.1)"; context.fillStyle = THEME.items.circleBackground;
context.beginCircle(0, 0, quadrantSize * 1.15); context.beginCircle(0, 0, quadrantSize * 1.15);
context.fill(); context.fill();

View File

@ -8,7 +8,7 @@ import { SOUNDS } from "../platform/sound";
const avgSoundDurationSeconds = 0.25; const avgSoundDurationSeconds = 0.25;
const maxOngoingSounds = 2; const maxOngoingSounds = 2;
const maxOngoingUiSounds = 25; const maxOngoingUiSounds = 10;
// Proxy to the application sound instance // Proxy to the application sound instance
export class SoundProxy { export class SoundProxy {

View File

@ -77,6 +77,7 @@ export class UndergroundBeltSystem extends GameSystemWithFilter {
const tier = undergroundComp.tier; const tier = undergroundComp.tier;
const range = globalConfig.undergroundBeltMaxTilesByTier[tier]; const range = globalConfig.undergroundBeltMaxTilesByTier[tier];
// FIND ENTRANCE
// Search for the entrance which is furthes apart (this is why we can't reuse logic here) // Search for the entrance which is furthes apart (this is why we can't reuse logic here)
let matchingEntrance = null; let matchingEntrance = null;
for (let i = 0; i < range; ++i) { for (let i = 0; i < range; ++i) {
@ -104,31 +105,49 @@ export class UndergroundBeltSystem extends GameSystemWithFilter {
return; return;
} }
// Remove any belts between entrance and exit which have the same direction // DETECT OBSOLETE BELTS BETWEEN
// Remove any belts between entrance and exit which have the same direction,
// but only if they *all* have the right direction
currentPos = tile.copy(); currentPos = tile.copy();
let allBeltsMatch = true;
for (let i = 0; i < matchingEntrance.range; ++i) { for (let i = 0; i < matchingEntrance.range; ++i) {
currentPos.addInplace(offset); currentPos.addInplace(offset);
const contents = this.root.map.getTileContent(currentPos); const contents = this.root.map.getTileContent(currentPos);
if (!contents) { if (!contents) {
continue; allBeltsMatch = false;
break;
} }
const contentsStaticComp = contents.components.StaticMapEntity; const contentsStaticComp = contents.components.StaticMapEntity;
const contentsBeltComp = contents.components.Belt; const contentsBeltComp = contents.components.Belt;
if (!contentsBeltComp) {
allBeltsMatch = false;
break;
}
if (contentsBeltComp) { // It's a belt
// It's a belt if (
if ( contentsBeltComp.direction !== enumDirection.top ||
contentsBeltComp.direction === enumDirection.top && enumAngleToDirection[contentsStaticComp.rotation] !== direction
enumAngleToDirection[contentsStaticComp.rotation] === direction ) {
) { allBeltsMatch = false;
// It's same rotation, drop it break;
this.root.logic.tryDeleteBuilding(contents);
}
} }
} }
currentPos = tile.copy();
if (allBeltsMatch) {
// All belts between this are obsolete, so drop them
for (let i = 0; i < matchingEntrance.range; ++i) {
currentPos.addInplace(offset);
const contents = this.root.map.getTileContent(currentPos);
assert(contents, "Invalid smart underground belt logic");
this.root.logic.tryDeleteBuilding(contents);
}
}
// REMOVE OBSOLETE TUNNELS
// Remove any double tunnels, by checking the tile plus the tile above // Remove any double tunnels, by checking the tile plus the tile above
currentPos = tile.copy().add(offset); currentPos = tile.copy().add(offset);
for (let i = 0; i < matchingEntrance.range - 1; ++i) { for (let i = 0; i < matchingEntrance.range - 1; ++i) {

View File

@ -12,6 +12,8 @@
"directionLock": "rgb(74, 237, 134)", "directionLock": "rgb(74, 237, 134)",
"directionLockTrack": "rgba(74, 237, 134, 0.2)", "directionLockTrack": "rgba(74, 237, 134, 0.2)",
"colorBlindPickerTile": "rgba(255, 255, 255, 0.5)",
"resources": { "resources": {
"shape": "#3d3f4a", "shape": "#3d3f4a",
"red": "#4a3d3f", "red": "#4a3d3f",
@ -26,6 +28,7 @@
"items": { "items": {
"outline": "#111418", "outline": "#111418",
"outlineWidth": 0.75 "outlineWidth": 0.75,
"circleBackground": "rgba(20, 30, 40, 0.3)"
} }
} }

View File

@ -12,6 +12,8 @@
"directionLock": "rgb(74, 237, 134)", "directionLock": "rgb(74, 237, 134)",
"directionLockTrack": "rgba(74, 237, 134, 0.2)", "directionLockTrack": "rgba(74, 237, 134, 0.2)",
"colorBlindPickerTile": "rgba(50, 50, 50, 0.4)",
"resources": { "resources": {
"shape": "#eaebec", "shape": "#eaebec",
"red": "#ffbfc1", "red": "#ffbfc1",
@ -27,6 +29,7 @@
"items": { "items": {
"outline": "#55575a", "outline": "#55575a",
"outlineWidth": 0.75 "outlineWidth": 0.75,
"circleBackground": "rgba(40, 50, 65, 0.1)"
} }
} }

View File

@ -86,4 +86,10 @@ export const LANGUAGES = {
code: "zh", code: "zh",
region: "CN", region: "CN",
}, },
"sv": {
name: "Svenska",
data: require("./built-temp/base-sv.json"),
code: "sv",
region: "",
},
}; };

View File

@ -22,6 +22,7 @@ export const SOUNDS = {
levelComplete: "level_complete", levelComplete: "level_complete",
destroyBuilding: "destroy_building",
placeBuilding: "place_building", placeBuilding: "place_building",
placeBelt: "place_belt", placeBelt: "place_belt",
}; };

View File

@ -172,6 +172,15 @@ export const allApplicationSettings = [
(app, value) => app.sound.setMusicMuted(value) (app, value) => app.sound.setMusicMuted(value)
), ),
new BoolSetting(
"enableColorBlindHelper",
categoryApp,
/**
* @param {Application} app
*/
(app, value) => null
),
// GAME // GAME
new BoolSetting("offerHints", categoryGame, (app, value) => {}), new BoolSetting("offerHints", categoryGame, (app, value) => {}),
@ -269,6 +278,8 @@ class SettingsStorage {
this.compactBuildingInfo = false; this.compactBuildingInfo = false;
this.disableCutDeleteWarnings = false; this.disableCutDeleteWarnings = false;
this.enableColorBlindHelper = false;
/** /**
* @type {Object.<string, number>} * @type {Object.<string, number>}
*/ */
@ -468,7 +479,7 @@ export class ApplicationSettings extends ReadWriteProxy {
} }
getCurrentVersion() { getCurrentVersion() {
return 15; return 17;
} }
/** @param {{settings: SettingsStorage, version: number}} data */ /** @param {{settings: SettingsStorage, version: number}} data */
@ -530,6 +541,17 @@ export class ApplicationSettings extends ReadWriteProxy {
data.version = 15; data.version = 15;
} }
if (data.version < 16) {
// RE-ENABLE this setting, it already existed
data.settings.enableTunnelSmartplace = true;
data.version = 16;
}
if (data.version < 17) {
data.settings.enableColorBlindHelper = false;
data.version = 17;
}
return ExplainedResult.good(); return ExplainedResult.good();
} }
} }

View File

@ -9,6 +9,7 @@ import {
waitNextFrame, waitNextFrame,
isSupportedBrowser, isSupportedBrowser,
makeButton, makeButton,
removeAllChildren,
} from "../core/utils"; } from "../core/utils";
import { ReadWriteProxy } from "../core/read_write_proxy"; import { ReadWriteProxy } from "../core/read_write_proxy";
import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs"; import { HUDModalDialogs } from "../game/hud/parts/modal_dialogs";
@ -72,6 +73,7 @@ export class MainMenuState extends GameState {
? "" ? ""
: `<div class="browserWarning">${T.mainMenu.browserWarning}</div>` : `<div class="browserWarning">${T.mainMenu.browserWarning}</div>`
} }
<div class="buttons"></div>
</div> </div>
@ -89,10 +91,14 @@ export class MainMenuState extends GameState {
<span class="thirdpartyLogo discordLogo"></span> <span class="thirdpartyLogo discordLogo"></span>
</a> </a>
<a class="changelog">${T.changelog.title}</a> <div class="sidelinks">
<a class="redditLink">${T.mainMenu.subreddit}</a>
<a class="helpTranslate">${T.mainMenu.helpTranslate}</a>
<a class="changelog">${T.changelog.title}</a>
<a class="helpTranslate">${T.mainMenu.helpTranslate}</a>
</div>
<div class="author">${T.mainMenu.madeBy.replace( <div class="author">${T.mainMenu.madeBy.replace(
"<author-link>", "<author-link>",
'<a class="producerLink" target="_blank">Tobias Springer</a>' '<a class="producerLink" target="_blank">Tobias Springer</a>'
@ -148,6 +154,7 @@ export class MainMenuState extends GameState {
T.dialogs.importSavegameSuccess.text T.dialogs.importSavegameSuccess.text
); );
this.renderMainMenu();
this.renderSavegames(); this.renderSavegames();
}, },
err => { err => {
@ -212,6 +219,7 @@ export class MainMenuState extends GameState {
this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked); this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked);
this.trackClicks(qs(".changelog"), this.onChangelogClicked); this.trackClicks(qs(".changelog"), this.onChangelogClicked);
this.trackClicks(qs(".redditLink"), this.onRedditClicked);
this.trackClicks(qs(".languageChoose"), this.onLanguageChooseClicked); this.trackClicks(qs(".languageChoose"), this.onLanguageChooseClicked);
this.trackClicks(qs(".helpTranslate"), this.onTranslationHelpLinkClicked); this.trackClicks(qs(".helpTranslate"), this.onTranslationHelpLinkClicked);
@ -255,6 +263,10 @@ export class MainMenuState extends GameState {
} }
renderMainMenu() { renderMainMenu() {
const buttonContainer = this.htmlElement.querySelector(".mainContainer .buttons");
removeAllChildren(buttonContainer);
// Import button
const importButtonElement = makeButtonElement( const importButtonElement = makeButtonElement(
["importButton", "styledButton"], ["importButton", "styledButton"],
T.mainMenu.importSavegame T.mainMenu.importSavegame
@ -262,14 +274,15 @@ export class MainMenuState extends GameState {
this.trackClicks(importButtonElement, this.requestImportSavegame); this.trackClicks(importButtonElement, this.requestImportSavegame);
if (this.savedGames.length > 0) { if (this.savedGames.length > 0) {
// Continue game
const continueButton = makeButton( const continueButton = makeButton(
this.htmlElement.querySelector(".mainContainer"), buttonContainer,
["continueButton", "styledButton"], ["continueButton", "styledButton"],
T.mainMenu.continue T.mainMenu.continue
); );
this.trackClicks(continueButton, this.onContinueButtonClicked); this.trackClicks(continueButton, this.onContinueButtonClicked);
const outerDiv = makeDiv(this.htmlElement.querySelector(".mainContainer"), null, ["outer"], null); const outerDiv = makeDiv(buttonContainer, null, ["outer"], null);
outerDiv.appendChild(importButtonElement); outerDiv.appendChild(importButtonElement);
const newGameButton = makeButton( const newGameButton = makeButton(
this.htmlElement.querySelector(".mainContainer .outer"), this.htmlElement.querySelector(".mainContainer .outer"),
@ -277,24 +290,11 @@ export class MainMenuState extends GameState {
T.mainMenu.newGame T.mainMenu.newGame
); );
this.trackClicks(newGameButton, this.onPlayButtonClicked); this.trackClicks(newGameButton, this.onPlayButtonClicked);
const oldPlayButton = this.htmlElement.querySelector(".mainContainer .playButton");
if (oldPlayButton) oldPlayButton.remove();
} else { } else {
const playBtn = makeButton( // New game
this.htmlElement.querySelector(".mainContainer"), const playBtn = makeButton(buttonContainer, ["playButton", "styledButton"], T.mainMenu.play);
["playButton", "styledButton"],
T.mainMenu.play
);
this.trackClicks(playBtn, this.onPlayButtonClicked); this.trackClicks(playBtn, this.onPlayButtonClicked);
buttonContainer.appendChild(importButtonElement);
this.htmlElement.querySelector(".mainContainer").appendChild(importButtonElement);
const outerDiv = this.htmlElement.querySelector(".mainContainer .outer");
if (outerDiv) {
outerDiv.remove();
this.htmlElement.querySelector(".mainContainer .continueButton").remove();
}
} }
} }
@ -312,6 +312,11 @@ export class MainMenuState extends GameState {
this.moveToState("ChangelogState"); this.moveToState("ChangelogState");
} }
onRedditClicked() {
this.app.analytics.trackUiClick("main_menu_reddit_link");
this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.reddit);
}
onContestClicked() { onContestClicked() {
this.app.analytics.trackUiClick("contest_click"); this.app.analytics.trackUiClick("contest_click");

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -711,6 +725,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -134,9 +134,10 @@ mainMenu:
showInfo: Zobrazit showInfo: Zobrazit
contestOver: Tato soutěž skončila - Připojte se na Discord a získejte informace o nových soutěžích! contestOver: Tato soutěž skončila - Připojte se na Discord a získejte informace o nových soutěžích!
continue: Continue continue: Pokračovat
newGame: New Game newGame: Nová hra
madeBy: Made by <author-link> madeBy: Vytvořil <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -266,12 +267,12 @@ ingame:
createMarker: Vytvořit značku createMarker: Vytvořit značku
delete: Zničit delete: Zničit
pasteLastBlueprint: Vložit poslední plán pasteLastBlueprint: Vložit poslední plán
lockBeltDirection: Enable belt planner lockBeltDirection: Zamknout směr pásu
plannerSwitchSide: Flip planner side plannerSwitchSide: Otočit strany plánovače
cutSelection: Cut cutSelection: Vyjmout
copySelection: Copy copySelection: Kopířovat
clearSelection: Clear Selection clearSelection: Zrušit výběr
pipette: Pipette pipette: Kapátko
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -378,6 +379,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Toto <strong>NENÍ</strong> hra o čekání! Sestavte další extraktory a pásy, abyste dosáhli cíle rychleji.<br><br>Tip: Chcete-li umístit více extraktorů, podržte <strong>SHIFT</strong>. Pomocí <strong>R</strong> je můžete otočit. Toto <strong>NENÍ</strong> hra o čekání! Sestavte další extraktory a pásy, abyste dosáhli cíle rychleji.<br><br>Tip: Chcete-li umístit více extraktorů, podržte <strong>SHIFT</strong>. Pomocí <strong>R</strong> je můžete otočit.
colors:
red: Červená
green: Zelená
blue: Modrá
yellow: Žlutá
purple: Fialová
cyan: Tyrkysová
white: Bílá
uncolored: Bez barvy
shapeViewer:
title: Vrstvy
empty: Prázdné
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -582,7 +596,7 @@ settings:
labels: labels:
uiScale: uiScale:
title: Škála UI title: Škálování UI
description: >- description: >-
Změní velikost uživatelského rozhraní. Rozhraní se bude stále přizpůsobovoat rozlišení vaší obrazovky, toto nastavení pouze mění jeho škálu. Změní velikost uživatelského rozhraní. Rozhraní se bude stále přizpůsobovoat rozlišení vaší obrazovky, toto nastavení pouze mění jeho škálu.
scales: scales:
@ -658,40 +672,42 @@ settings:
super_fast: Hodně Rychlá super_fast: Hodně Rychlá
extremely_fast: Extrémně Rychlá extremely_fast: Extrémně Rychlá
enableTunnelSmartplace: enableTunnelSmartplace:
title: Smart Tunnels title: Chytré tunely
description: >- description: >-
When enabled, placing tunnels will automatically remove unnecessary belts. Pokládání tunelů po zapnutí bude samo odstraňovat nepotřebné pásy.
This also enables to drag tunnels and excess tunnels will get removed. Umožňuje také potahování tunelů a nadbytečné tunely budou odstraněny.
vignette: vignette:
title: Vignette title: Viněta
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier Zapne vinětu, která ztmaví rohy obrazovky, což umožňuje lepší čtení textu.
to read.
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Interval automatického ukládání
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Určuje jak často se hra automaticky ukládá. Lze ji zde také úplně zakázat.
entirely here.
intervals: intervals:
one_minute: 1 Minute one_minute: 1 minuta
two_minutes: 2 Minutes two_minutes: 2 minuty
five_minutes: 5 Minutes five_minutes: 5 minut
ten_minutes: 10 Minutes ten_minutes: 10 minut
twenty_minutes: 20 Minutes twenty_minutes: 20 minut
disabled: Disabled disabled: Zrušeno
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Kompaktní informace o stavbách
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Zkrátí informační políčka pro budovy tím, že pouze ukáže jejich koeficient.
description and image is shown. V opačném případě zobrazí popis a obrázek.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Zakázat upozornění o vyjmutí nebo odstranění
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Deaktivujte varovná dialogová okna vyvolaná při vymutí/mazání více než 100
entities. entit.
enableColorBlindHelper:
title: Režim pro barvoslepé
description: Zapné různé nástroje, které vám umožní hrát hru i pokud jste barvoslepí.
keybindings: keybindings:
title: Klávesové zkratky title: Klávesové zkratky
@ -756,9 +772,9 @@ keybindings:
pasteLastBlueprint: Vložit poslední plán pasteLastBlueprint: Vložit poslední plán
massSelectCut: Vyjmout oblast massSelectCut: Vyjmout oblast
exportScreenshot: Exportovat celou základnu jako obrázek exportScreenshot: Exportovat celou základnu jako obrázek
lockBeltDirection: Enable belt planner lockBeltDirection: Zamknout směr pásu
switchDirectionLockSide: "Planner: Switch side" switchDirectionLockSide: Otočit strany zámku plánovače
pipette: Pipette pipette: Kapátko
about: about:
title: O hře title: O hře

View File

@ -155,6 +155,7 @@ mainMenu:
continue: Fortsetzen continue: Fortsetzen
newGame: Neues Spiel newGame: Neues Spiel
madeBy: Ein Spiel von <author-link> madeBy: Ein Spiel von <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -286,7 +287,7 @@ ingame:
plannerSwitchSide: "Planer: Seite wechseln" plannerSwitchSide: "Planer: Seite wechseln"
cutSelection: Ausschneiden cutSelection: Ausschneiden
copySelection: Kopieren copySelection: Kopieren
clearSelection: Leere Selektion clearSelection: Auswahl aufheben
pipette: Pipette pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
@ -294,7 +295,7 @@ ingame:
buildingPlacement: buildingPlacement:
# Buildings can have different variants which are unlocked at later levels, # Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available. # and this is the hint shown when there are multiple variants available.
cycleBuildingVariants: Drücke <key>, um zwischen den Varianten zu wählen. cycleBuildingVariants: <key> Wechsle Variante
# Shows the hotkey in the ui, e.g. "Hotkey: Q" # Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >- hotkeyLabel: >-
@ -394,6 +395,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Dies ist <strong>KEIN</strong> Idle-Game! Baue mehr Extrahierer und Förderbänder, um das Ziel schneller zu erreichen.<br><br>Tipp: Halte <strong>UMSCH</strong>, um mehrere Gebäude zu platzieren und nutze <strong>R</strong> um sie zu rotieren. Dies ist <strong>KEIN</strong> Idle-Game! Baue mehr Extrahierer und Förderbänder, um das Ziel schneller zu erreichen.<br><br>Tipp: Halte <strong>UMSCH</strong>, um mehrere Gebäude zu platzieren und nutze <strong>R</strong> um sie zu rotieren.
colors:
red: Rot
green: Grün
blue: Blau
yellow: Gelb
purple: Violett
cyan: Cyan
white: Weiß
uncolored: Farblos
shapeViewer:
title: Ebenen
empty: Leer
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -688,29 +702,32 @@ settings:
und das Lesen der Textfelder vereinfacht. und das Lesen der Textfelder vereinfacht.
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Intervall für automatisches Speichern
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Ändert das Intervall, in dem der Spielstand automatisch gespeichert wird.
entirely here. Die Funktion kann hier auch deaktiviert werden.
intervals: intervals:
one_minute: 1 Minute one_minute: 1 Minute
two_minutes: 2 Minutes two_minutes: 2 Minuten
five_minutes: 5 Minutes five_minutes: 5 Minuten
ten_minutes: 10 Minutes ten_minutes: 10 Minuten
twenty_minutes: 20 Minutes twenty_minutes: 20 Minuten
disabled: Disabled disabled: Deaktiviert
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Kompakte Gebäudeinformationen
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Reduziert die Infoboxen der Gebäude auf ihre Arbeitsgeschwindigkeit. Anderenfalls wird ein
description and image is shown. Bild mit Beschreibung angezeigt.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Deaktiviere Warnungsdialog beim Löschen
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Deaktiviert die Warnung, die beim Löschen und Ausschneiden von mehr als 100 Feldern angezeigt wird.
entities.
enableColorBlindHelper:
title: Modus für Farbenblinde
description: Aktiviert verschiedene Werkzeuge, die dir das Spielen trotz Farbenblindheit ermöglichen.
keybindings: keybindings:
title: Tastenbelegung title: Tastenbelegung
@ -739,7 +756,7 @@ keybindings:
mapZoomIn: Hineinzoomen mapZoomIn: Hineinzoomen
mapZoomOut: Herauszoomen mapZoomOut: Herauszoomen
createMarker: Markeirung erstellen createMarker: Markierung erstellen
menuOpenShop: Upgrades menuOpenShop: Upgrades
menuOpenStats: Statistiken menuOpenStats: Statistiken
@ -759,7 +776,7 @@ keybindings:
rotateWhilePlacing: Rotieren rotateWhilePlacing: Rotieren
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: stattdessen gegen UZS rotieren Modifikator: stattdessen gegen UZS rotieren
cycleBuildingVariants: Variante wählen cycleBuildingVariants: Variante wählen
confirmMassDelete: Massenlöschung bestätigen confirmMassDelete: Massenlöschung bestätigen
cycleBuildings: Gebäude rotieren cycleBuildings: Gebäude rotieren
@ -782,22 +799,22 @@ keybindings:
about: about:
title: Über dieses Spiel title: Über dieses Spiel
body: >- body: >-
This game is open source and developed by <a href="https://github.com/tobspr" Dieses Spiel hat einen offenen Quellcode (Open Source) und wurde von <a href="https://github.com/tobspr"
target="_blank">Tobias Springer</a> (this is me).<br><br> target="_blank">Tobias Springer</a> (das bin ich!) entwickelt.<br><br>
If you want to contribute, check out <a href="<githublink>" Wenn du etwas zum Spiel beitragen möchtest, dann schaue dir <a href="<githublink>"
target="_blank">shapez.io on github</a>.<br><br> target="_blank">shapez.io auf GitHub</a> an.<br><br>
This game wouldn't have been possible without the great discord community Das Spiel wurde erst durch die großartige Discord-Community
around my games - You should really join the <a href="<discordlink>" um meine Spiele möglich gemacht. Komm doch einfach mal auf dem <a href="<discordlink>"
target="_blank">discord server</a>!<br><br> target="_blank">Discord-Server</a> vorbei!<br><br>
The soundtrack was made by <a href="https://soundcloud.com/pettersumelius" Der Soundtrack wurde von <a href="https://soundcloud.com/pettersumelius"
target="_blank">Peppsen</a> - He's awesome.<br><br> target="_blank">Peppsen</a> komponiert! Klasse Typ.<br><br>
Finally, huge thanks to my best friend <a Abschließend möchte ich meinem Kumpel <a
href="https://github.com/niklas-dahl" target="_blank">Niklas</a> - Without our href="https://github.com/niklas-dahl" target="_blank">Niklas</a> danken! Ohne unsere
factorio sessions this game would never have existed. etlichen gemeinsamen Stunden in Factorio wäre dieses Projekt nie zustande gekommen.
changelog: changelog:
title: Änderungen title: Änderungen

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -712,6 +726,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -121,6 +121,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
changelog: Changelog changelog: Changelog
subreddit: Reddit
importSavegame: Import importSavegame: Import
openSourceHint: This game is open source! openSourceHint: This game is open source!
discordLink: Official Discord Server discordLink: Official Discord Server
@ -290,6 +291,17 @@ ingame:
clearSelection: Clear Selection clearSelection: Clear Selection
pipette: Pipette pipette: Pipette
# Names of the colors, used for the color blind mode
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
buildingPlacement: buildingPlacement:
@ -384,6 +396,11 @@ ingame:
description: Left-click a marker to jump to it, right-click to delete it.<br><br>Press <keybinding> to create a marker from the current view, or <strong>right-click</strong> to create a marker at the selected location. description: Left-click a marker to jump to it, right-click to delete it.<br><br>Press <keybinding> to create a marker from the current view, or <strong>right-click</strong> to create a marker at the selected location.
creationSuccessNotification: Marker has been created. creationSuccessNotification: Marker has been created.
# Shape viewer
shapeViewer:
title: Layers
empty: Empty
# Interactive tutorial # Interactive tutorial
interactiveTutorial: interactiveTutorial:
title: Tutorial title: Tutorial
@ -652,6 +669,11 @@ settings:
description: >- description: >-
Change the language. All translations are user contributed and might be incomplete! Change the language. All translations are user contributed and might be incomplete!
enableColorBlindHelper:
title: Color Blind Mode
description: >-
Enables various tools which allow to play the game if you are color blind.
fullscreen: fullscreen:
title: Fullscreen title: Fullscreen
description: >- description: >-

View File

@ -57,7 +57,7 @@ steamPage:
[*] Modo historia en el que los edificios cuesten figuras [*] Modo historia en el que los edificios cuesten figuras
[*] Más niveles y edificios (exclusivos del juego completo) [*] Más niveles y edificios (exclusivos del juego completo)
[*] Mapas diferentes y tal vez obstáculos en el mapa [*] Mapas diferentes y tal vez obstáculos en el mapa
[*] Configuración en la cración del mapa (Editar el número y tamaño de los recursos, la semilla, y más) [*] Configuración en la creación del mapa (Editar el número y tamaño de los recursos, la semilla, y más)
[*] Más tipos de formas [*] Más tipos de formas
[*] Mejoras de rendimiento (Aunque el juego ya funciona muy bien!) [*] Mejoras de rendimiento (Aunque el juego ya funciona muy bien!)
[*] Modo para daltónicos [*] Modo para daltónicos
@ -155,6 +155,7 @@ mainMenu:
showInfo: Ver showInfo: Ver
contestOver: El concurso ha terminado - Únete al discord para enterarte sobre nuevos concursos! contestOver: El concurso ha terminado - Únete al discord para enterarte sobre nuevos concursos!
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -282,12 +283,12 @@ ingame:
placeBuilding: Colocar edificio placeBuilding: Colocar edificio
createMarker: Crear marca createMarker: Crear marca
delete: Destruir delete: Destruir
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Pegar último plano
lockBeltDirection: Enable belt planner lockBeltDirection: Activar planificador de cintas transportadoras
plannerSwitchSide: Flip planner side plannerSwitchSide: Invertir giro del planificador
cutSelection: Cut cutSelection: Cortar
copySelection: Copy copySelection: Copiar
clearSelection: Clear Selection clearSelection: Limpiar Selección
pipette: Pipette pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
@ -393,6 +394,20 @@ ingame:
¡Conecta el extractor con una <strong>cinta transportadora</strong> a tu edificio central!<br><br> Pista: <strong>Pulsa y arrastra</strong> la cinta transportadora con el ratón! ¡Conecta el extractor con una <strong>cinta transportadora</strong> a tu edificio central!<br><br> Pista: <strong>Pulsa y arrastra</strong> la cinta transportadora con el ratón!
1_3_expand: >- 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> para colocar varios extractores y usa <strong>R</strong> para rotarlos. ¡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> para colocar varios extractores y usa <strong>R</strong> para rotarlos.
colors:
red: Rojo
green: Verde
blue: Azul
yellow: Amarillo
purple: Morado
cyan: Cian
white: Blanco
uncolored: Sin color
shapeViewer:
title: Capas
empty: Vacio
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -439,7 +454,7 @@ buildings:
description: Multifuncional - Distribuye equitativamente todas las entradas a todas las salidas. description: Multifuncional - Distribuye equitativamente todas las entradas a todas las salidas.
compact: compact:
name: fusionador (compacto) name: Fusionador (compacto)
description: Junta dos cintas transportadoras en una. description: Junta dos cintas transportadoras en una.
compact-inverse: compact-inverse:
@ -605,7 +620,7 @@ settings:
huge: Enorme huge: Enorme
scrollWheelSensitivity: scrollWheelSensitivity:
title: Sensitividad del zoom title: Sensibilidad del zoom
description: >- description: >-
Cambia como de sensible es el zoom (Tanto la ruedo del ratón como el trackpad) Cambia como de sensible es el zoom (Tanto la ruedo del ratón como el trackpad)
sensitivity: sensitivity:
@ -674,33 +689,33 @@ settings:
Si está activado, colocar túneles automáticamente removerá las cintas transportadoras innecesarias. Esto también permite arrastrar con el ratón y los túneles excedentes serán removidos. Si está activado, colocar túneles automáticamente removerá las cintas transportadoras innecesarias. Esto también permite arrastrar con el ratón y los túneles excedentes serán removidos.
vignette: vignette:
title: Vignette title: Viñeta
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier Activa el efecto viñeta que oscurece loas esquinas de la pantalla y hace el texto mas fácil de leer.
to read.
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Intervalo de Autoguardado
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Controla cada cuanto tiempo se guarda el juego automaticamente. Aquí tambien puedes deshabilitarlo por completo.
entirely here.
intervals: intervals:
one_minute: 1 Minute one_minute: 1 Minuto
two_minutes: 2 Minutes two_minutes: 2 Minutos
five_minutes: 5 Minutes five_minutes: 5 Minutos
ten_minutes: 10 Minutes ten_minutes: 10 Minutos
twenty_minutes: 20 Minutes twenty_minutes: 20 Minutos
disabled: Disabled disabled: Deshabilitado
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Información Compacta de Edificios
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Acorta la caja de información mostrando solo sus ratios. Si no, se mostrara una descripción y una imagen.
description and image is shown.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Deshabilitar las advertencias de Cortar/Eliminar
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Deshabilita los dialogos de advertencia que se muestran cuando se cortan/eliminan mas de 100 elementos.
entities.
enableColorBlindHelper:
title: Modo para Daltonicos
description: Activa varias herramientas que permiten jugar si eres daltonico.
keybindings: keybindings:
title: Atajos de Teclado title: Atajos de Teclado

View File

@ -157,6 +157,7 @@ mainMenu:
continue: Continuer continue: Continuer
newGame: Nouvelle partie newGame: Nouvelle partie
madeBy: Créé par <author-link> madeBy: Créé par <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -212,7 +213,7 @@ dialogs:
keybindingsResetOk: keybindingsResetOk:
title: Réinitialisation des contrôles title: Réinitialisation des contrôles
desc: Les contrôles ont été réinitialisés par leur état par défaut respectifs ! desc: Les contrôles ont été réinitialisés dans leur état par défaut respectifs !
featureRestriction: featureRestriction:
title: Version démo title: Version démo
@ -236,7 +237,7 @@ dialogs:
massDeleteConfirm: massDeleteConfirm:
title: Confirmation de suppression title: Confirmation de suppression
desc: >- desc: >-
Vous allez supprimer pas mal de bâtiments (<count> pour être exact) ! Etes vous certains de vouloir faire cela ? Vous allez supprimer pas mal de bâtiments (<count> pour être exact) ! Êtes vous certains de vouloir faire cela ?
massCutConfirm: massCutConfirm:
title: Confirmer la coupure title: Confirmer la coupure
@ -247,7 +248,7 @@ dialogs:
blueprintsNotUnlocked: blueprintsNotUnlocked:
title: Pas encore débloqué title: Pas encore débloqué
desc: >- desc: >-
Les patrons n'ont pas encore étés débloqués ! Terminez encore quelques niveaux pour les débloquer. Les patrons n'ont pas encore étés débloqués ! Terminez encore quelques niveaux pour y avoir accès.
keybindingsIntroduction: keybindingsIntroduction:
title: Raccourcis utiles title: Raccourcis utiles
@ -288,9 +289,9 @@ ingame:
pasteLastBlueprint: Copier le dernier patron pasteLastBlueprint: Copier le dernier patron
lockBeltDirection: Utiliser le plannificateur de convoyeurs lockBeltDirection: Utiliser le plannificateur de convoyeurs
plannerSwitchSide: Échanger la direction du plannificateur plannerSwitchSide: Échanger la direction du plannificateur
cutSelection: Cut cutSelection: Couper
copySelection: Copy copySelection: Copier
clearSelection: Clear Selection clearSelection: Effacer la sélection
pipette: Pipette pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Ceci n'est <strong>PAS</strong> un jeu incrémental et inactif ! Construisez plus d'extracteurs et de convoyeurs pour atteindre plus vite votre votre but.<br><br>Astuce: Gardez <strong>SHIFT</strong> enfoncé pour placer plusieurs extracteurs, et utilisez <strong>R</strong> pour les faire pivoter. Ceci n'est <strong>PAS</strong> un jeu incrémental et inactif ! Construisez plus d'extracteurs et de convoyeurs pour atteindre plus vite votre votre but.<br><br>Astuce: Gardez <strong>SHIFT</strong> enfoncé pour placer plusieurs extracteurs, et utilisez <strong>R</strong> pour les faire pivoter.
colors:
red: Rouge
green: Vert
blue: Bleu
yellow: Jaune
purple: Violet
cyan: Cyan
white: Blanc
uncolored: Non coloré
shapeViewer:
title: Calques
empty: Vide
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -691,27 +705,28 @@ settings:
Permet l'affichage de l'effet de vignette qui assombrit les coins de l'écran afin de rendre le texte plus facile à lire. Permet l'affichage de l'effet de vignette qui assombrit les coins de l'écran afin de rendre le texte plus facile à lire.
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Fréquence des sauvegardes automatiques
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Contrôle avec quelle fréquence le jeu sera sauvegardé automatiquement. Vous pouvez aussi entièrement désactiver cette fonctionnalité ici.
entirely here.
intervals: intervals:
one_minute: 1 Minute one_minute: 1 Minute
two_minutes: 2 Minutes two_minutes: 2 Minutes
five_minutes: 5 Minutes five_minutes: 5 Minutes
ten_minutes: 10 Minutes ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes twenty_minutes: 20 Minutes
disabled: Disabled disabled: Désactivé
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Informations réduites sur les bâtiments
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Raccourcit les panneaux d'information sur les bâtiments en n'affichant que les ratios. Dans le cas contraire, une description et une imagine sont présentés.
description and image is shown.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Désactive les avertissement pour Couper/Effacer
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Désactive la boîte de dialogue qui s'affiche lorsque vous vous apprêtez à couper/effacer plus de 100 entités.
entities.
enableColorBlindHelper:
title: Mode Daltonien
description: Active divers outils qui permettent de jouer à ce jeu si vous êtes daltonien.
keybindings: keybindings:
title: Contrôles title: Contrôles

View File

@ -156,6 +156,7 @@ mainMenu:
showInfo: View showInfo: View
contestOver: This contest has ended - Join the discord to get noticed about new contests! contestOver: This contest has ended - Join the discord to get noticed about new contests!
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -395,6 +396,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: 続きから continue: 続きから
newGame: 新規ゲーム newGame: 新規ゲーム
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -286,10 +287,10 @@ ingame:
pasteLastBlueprint: ブループリントの内容を設置 pasteLastBlueprint: ブループリントの内容を設置
lockBeltDirection: ベルトプランナーを有効化 lockBeltDirection: ベルトプランナーを有効化
plannerSwitchSide: プランナーが通る側を反転 plannerSwitchSide: プランナーが通る側を反転
cutSelection: Cut cutSelection: カット
copySelection: Copy copySelection: コピー
clearSelection: Clear Selection clearSelection: 選択範囲をクリア
pipette: Pipette pipette: ピペット
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -396,6 +397,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
このゲームは放置系のゲームでは<strong>ありません</strong> もっと早く要件を満たせるように、追加の抽出機とベルトを設置しましょう。<br><br>Tip: <strong>SHIFT</strong> キーを押し続けると抽出機を連続配置できます。<strong>R</strong>キーで設置方向を回転できます。 このゲームは放置系のゲームでは<strong>ありません</strong> もっと早く要件を満たせるように、追加の抽出機とベルトを設置しましょう。<br><br>Tip: <strong>SHIFT</strong> キーを押し続けると抽出機を連続配置できます。<strong>R</strong>キーで設置方向を回転できます。
colors:
red:
green:
blue:
yellow:
purple:
cyan: シアン
white:
uncolored: 無色
shapeViewer:
title: レイヤー
empty:
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -686,27 +700,28 @@ settings:
画面の隅を暗くして文字を読みやすくするビネットを有効化します。 画面の隅を暗くして文字を読みやすくするビネットを有効化します。
autosaveInterval: autosaveInterval:
title: Autosave Interval title: オートセーブ間隔
description: >- description: >-
Controls how often the game saves automatically. You can also disable it ゲームが自動的にセーブされる頻度を設定します。無効化することも可能です。
entirely here.
intervals: intervals:
one_minute: 1 Minute one_minute: 1
two_minutes: 2 Minutes two_minutes: 2
five_minutes: 5 Minutes five_minutes: 5
ten_minutes: 10 Minutes ten_minutes: 10
twenty_minutes: 20 Minutes twenty_minutes: 20
disabled: Disabled disabled: 無効
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: コンパクトな建造物情報
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a レートのみを表示することで、建造物の情報ボックスを短くします。選択しない場合は、説明文と画像も表示されます。
description and image is shown.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: カット/削除の警告を無効化
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 100個以上のエンティティをカット/削除する際に表示される警告ダイアログを無効にします。
entities.
enableColorBlindHelper:
title: 色覚モード
description: 色覚異常を持っていてもゲームがプレイできるようにするための各種ツールを有効化します。
keybindings: keybindings:
title: キー設定 title: キー設定
@ -773,7 +788,7 @@ keybindings:
mapMoveFaster: より速く移動 mapMoveFaster: より速く移動
lockBeltDirection: ベルトプランナーを有効化 lockBeltDirection: ベルトプランナーを有効化
switchDirectionLockSide: "プランナー: 通る側を切り替え" switchDirectionLockSide: "プランナー: 通る側を切り替え"
pipette: Pipette pipette: ピペット
about: about:
title: このゲームについて title: このゲームについて

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
이것은 방치형 게임이 <strong>아닙니다!</strong> 추출기를 더 놓아 목표를 빨리 달성하세요.<br><br>팁: <strong>SHIFT</strong>를 눌러 여러 개의 추출기를 놓고 <strong>R</strong>로 회전 시키세요. 이것은 방치형 게임이 <strong>아닙니다!</strong> 추출기를 더 놓아 목표를 빨리 달성하세요.<br><br>팁: <strong>SHIFT</strong>를 눌러 여러 개의 추출기를 놓고 <strong>R</strong>로 회전 시키세요.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -711,6 +725,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: 키바인딩 title: 키바인딩
hint: >- hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Verder continue: Verder
newGame: Nieuw Spel newGame: Nieuw Spel
madeBy: Gemaakt door <author-link> madeBy: Gemaakt door <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -283,12 +284,12 @@ ingame:
createMarker: Plaats markering createMarker: Plaats markering
delete: Vernietig delete: Vernietig
pasteLastBlueprint: Plak de laatst gekopiëerde blauwdruk pasteLastBlueprint: Plak de laatst gekopiëerde blauwdruk
lockBeltDirection: Enable belt planner lockBeltDirection: Maak gebruik van de lopende band planner
plannerSwitchSide: Flip planner side plannerSwitchSide: Draai de richting van de planner
cutSelection: Cut cutSelection: Knip
copySelection: Copy copySelection: Kopieer
clearSelection: Clear Selection clearSelection: Cancel selectie
pipette: Pipette pipette: Pipet
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -395,6 +396,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Dit is <strong>GEEN</strong> nietsdoen-spel! bouw meer ontginners en lopende banden om het doel sneller te behalen.<br><br>Tip: Houd <strong>SHIFT</strong> ingedrukt om meerdere ontginners te plaatsen en gebruik <strong>R</strong> om ze te draaien. Dit is <strong>GEEN</strong> nietsdoen-spel! bouw meer ontginners en lopende banden om het doel sneller te behalen.<br><br>Tip: Houd <strong>SHIFT</strong> ingedrukt om meerdere ontginners te plaatsen en gebruik <strong>R</strong> om ze te draaien.
colors:
red: Rood
green: Groen
blue: Blauw
yellow: Geel
purple: Paars
cyan: Cyaan
white: Wit
uncolored: Geen kleur
shapeViewer:
title: Lagen
empty: Leeg
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -519,7 +533,7 @@ storyRewards:
reward_mixer: reward_mixer:
title: Kleuren mengen title: Kleuren mengen
desc: The <strong>mixer</strong> has been unlocked - Combine two colors using <strong>additive blending</strong> with this building! desc: De <strong>menger</strong> is ontgrendeld - gebruik dit gebouw om twee kleuren te mengen via <strong>'additive blending'</strong>!
reward_stacker: reward_stacker:
title: Stapelaar title: Stapelaar
@ -687,25 +701,29 @@ settings:
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Autosave Interval
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Bepaalt hoe vaak het spel automatisch opslaat. Je kan het hier ook volledig
entirely here. mee uitschakelen.
intervals: intervals:
one_minute: 1 Minute one_minute: 1 Minuut
two_minutes: 2 Minutes two_minutes: 2 Minuten
five_minutes: 5 Minutes five_minutes: 5 Minuten
ten_minutes: 10 Minutes ten_minutes: 10 Minuten
twenty_minutes: 20 Minutes twenty_minutes: 20 Minuten
disabled: Disabled disabled: Uitgeschakeld
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Combacte gebouwinformatie
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Informatie weergeven bij gebouwen wordt beperkt tot alleen hun 'ratios'. Anders
description and image is shown. zie je een beschrijving en een afbeelding.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Schakel knip/delete waarschuwingen uit.
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Schakelt de waarschuwing uit die wordt weergegeven wanneer je meer dan 100 dingen probeert te
entities. knippen/deleten.
enableColorBlindHelper:
title: Kleurenblindmodus
description: Schakelt verschillende hulpmiddelen in zodat je het spel alsnog kunt spelen wanneer je kleurenblind bent.
keybindings: keybindings:
title: Sneltoetsen title: Sneltoetsen
@ -771,8 +789,8 @@ keybindings:
exportScreenshot: Exporteer volledige basis als afbeelding exportScreenshot: Exporteer volledige basis als afbeelding
mapMoveFaster: Beweeg sneller mapMoveFaster: Beweeg sneller
lockBeltDirection: Schakel lopende band-planner in lockBeltDirection: Schakel lopende band-planner in
switchDirectionLockSide: "Planner: Wissel van kant" switchDirectionLockSide: "Planner: Wissel van richting"
pipette: Pipette pipette: Pipet
about: about:
title: Over dit spel title: Over dit spel

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Fortsett continue: Fortsett
newGame: Nytt Spill newGame: Nytt Spill
madeBy: Laget av <author-link> madeBy: Laget av <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -285,9 +286,9 @@ ingame:
pasteLastBlueprint: Lim inn forrige blåkopi pasteLastBlueprint: Lim inn forrige blåkopi
lockBeltDirection: Aktiver båndplanleggeren lockBeltDirection: Aktiver båndplanleggeren
plannerSwitchSide: Flipp båndplanleggeren plannerSwitchSide: Flipp båndplanleggeren
cutSelection: Cut cutSelection: Klipp Ut
copySelection: Copy copySelection: Kopier
clearSelection: Clear Selection clearSelection: Fjern Valgte
pipette: Pipette pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
@ -395,6 +396,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Dette er <strong>IKKE</strong> et idle-spill! Bygg flere utdragere og belter for å nå målet raskere.<br><br>Tips: Hold <strong>SHIFT</strong> for å plassere flere utdragere, og bruk <strong>R</strong> for å rotere dem. Dette er <strong>IKKE</strong> et idle-spill! Bygg flere utdragere og belter for å nå målet raskere.<br><br>Tips: Hold <strong>SHIFT</strong> for å plassere flere utdragere, og bruk <strong>R</strong> for å rotere dem.
colors:
red: Rød
green: Grønn
blue: Blå
yellow: Gul
purple: Lilla
cyan: Cyan
white: Hvit
uncolored: Ingen farge
shapeViewer:
title: Lag
empty: Tom
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -572,7 +586,7 @@ storyRewards:
reward_blueprints: reward_blueprints:
title: Blåkopier title: Blåkopier
desc: Du kan nå <strong>kopiere og lime inn</strong> deler av fabrikken din! Velg et område (Hold inne CTRL, så dra med musa), trykk så 'C' for å kopiere det.<br><br>Lime det inn er <strong>ikke graits</strong>, du må produsere <strong>blåkopi objekter</strong> for å få råd til det! (Det du nettop leverte). desc: Du kan nå <strong>kopiere og lime inn</strong> deler av fabrikken din! Velg et område (Hold inne CTRL, så dra med musa), trykk så 'C' for å kopiere det.<br><br>Lime det inn er <strong>ikke gratis</strong>, du må produsere <strong>blåkopi objekter</strong> for å få råd til det! (Det du nettop leverte).
# Special reward, which is shown when there is no reward actually # Special reward, which is shown when there is no reward actually
no_reward: no_reward:
@ -687,27 +701,31 @@ settings:
å lese. å lese.
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Autolagringsintervall
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Jsuter hvor ofte spillet lagres automatisk. Du kan også
entirely here. deaktivere det fullstendig.
intervals: intervals:
one_minute: 1 Minute one_minute: 1 Minutt
two_minutes: 2 Minutes two_minutes: 2 Minutter
five_minutes: 5 Minutes five_minutes: 5 Minutter
ten_minutes: 10 Minutes ten_minutes: 10 Minutter
twenty_minutes: 20 Minutes twenty_minutes: 20 Minutter
disabled: Disabled disabled: Deaktivert
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Kompakt Bygningsinformasjon
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Forkorter informasjonsboksen for bygninger ved å bare vise dems forhold. Ellers
description and image is shown. vises en beskrivelse og bilde er vist.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Deaktiverer Kutt/Slette Advarsler
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Deaktiverer advarselsdialogen som kommer frem når du kutter/sletter mer enn 100
entities. bygninger.
enableColorBlindHelper:
title: Fargeblind Modus
description: Aktiverer forskjellige verktøy som lar deg spille spillet om du er fargeblind.
keybindings: keybindings:
title: Hurtigtaster title: Hurtigtaster
@ -773,7 +791,7 @@ keybindings:
placeMultiple: Forbli i plasseringsmodus placeMultiple: Forbli i plasseringsmodus
placeInverse: Inverter automatisk transportbånd orientering placeInverse: Inverter automatisk transportbånd orientering
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: "Planner: Switch side" switchDirectionLockSide: "Planlegger: Bytt side"
pipette: Pipette pipette: Pipette
about: about:

View File

@ -159,7 +159,8 @@ mainMenu:
showInfo: Wyświetl showInfo: Wyświetl
contestOver: Ten konkurs już się skończył - Dołącz do serwera Discord by nie przegapić kolejnych! contestOver: Ten konkurs już się skończył - Dołącz do serwera Discord by nie przegapić kolejnych!
madeBy: Made by <author-link> madeBy: Gra wykonana przez <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -292,10 +293,21 @@ ingame:
pasteLastBlueprint: Wklej ostatnio skopiowany obszar pasteLastBlueprint: Wklej ostatnio skopiowany obszar
lockBeltDirection: Tryb planowania taśmociągu lockBeltDirection: Tryb planowania taśmociągu
plannerSwitchSide: Obróć planowany taśmociąg plannerSwitchSide: Obróć planowany taśmociąg
cutSelection: Cut cutSelection: Wytnij
copySelection: Copy copySelection: Skopiuj
clearSelection: Clear Selection clearSelection: Wyczyść zaznaczenie
pipette: Pipette pipette: Wybierz obiekt z mapy
# Names of the colors, used for the color blind mode
colors:
red: Czerwony
green: Zielony
blue: Niebieski
yellow: Żółty
purple: Fioletowy
cyan: Cyjanowy
white: Biały
uncolored: Brak koloru
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -394,6 +406,11 @@ ingame:
description: Kliknij znacznik lewym przyciskiem myszy, by się do niego przenieść lub prawym, by go usunąć.<br><br>Naciśnij <keybinding>, by stworzyć marker na środku widoku lub <strong>prawy przycisk myszy</strong>, by stworzyć na wskazanej lokacji. description: Kliknij znacznik lewym przyciskiem myszy, by się do niego przenieść lub prawym, by go usunąć.<br><br>Naciśnij <keybinding>, by stworzyć marker na środku widoku lub <strong>prawy przycisk myszy</strong>, by stworzyć na wskazanej lokacji.
creationSuccessNotification: Utworzono znacznik. creationSuccessNotification: Utworzono znacznik.
# Shape viewer
shapeViewer:
title: Poziomy
empty: Puste
# Interactive tutorial # Interactive tutorial
interactiveTutorial: interactiveTutorial:
title: Tutorial title: Tutorial
@ -698,37 +715,43 @@ settings:
Oferuje porady i tutoriale podczas gry. Dodatkowo chowa pewne elementy interfejsu, by ułatwić poznanie gry. Oferuje porady i tutoriale podczas gry. Dodatkowo chowa pewne elementy interfejsu, by ułatwić poznanie gry.
enableTunnelSmartplace: enableTunnelSmartplace:
title: Smart Tunnels title: Inteligentne taśmociągi i tunele
description: >- description: >-
Gdy włączone, umieszczenie tunelu automatycznie usuwa zbędny taśmociąg. Gdy włączone, umieszczenie tunelu automatycznie usuwa zbędny taśmociąg.
Pozwala również budować tunele przez przeciąganie i nadmiarowe tunele zostają usunięte. Pozwala również budować tunele przez przeciąganie, gdyż niepotrzebne tunele zostają usunięte.
vignette: vignette:
title: Vignette title: Winieta
description: >- description: >-
Włącza winietowanie, które przyciemnia rogi ekranu i poprawia czytelność tekstu. Włącza winietę - przyciemnia rogi ekranu, poprawiając czytelność tekstu.
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Częstość auto-zapisu
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Zmienia, jak często gra automatycznie zapisuje fabrykę.
entirely here. Można tą funkcję również całkowicie wyłączyć.
intervals: intervals:
one_minute: 1 Minute one_minute: Co minutę
two_minutes: 2 Minutes two_minutes: Co 2 minuty
five_minutes: 5 Minutes five_minutes: Co 5 minut
ten_minutes: 10 Minutes ten_minutes: Co 10 minut
twenty_minutes: 20 Minutes twenty_minutes: Co 20 minut
disabled: Disabled disabled: Wyłączone
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Wyłącz opis budynków
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Ukrywa opis i zdjęcie budynków w obszarze informacyjnym, pokazując jedynie
description and image is shown. ich tytuł i specyfikacje techniczne.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Wyłącz ostrzeżenia usuwania/wycinania
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Wyłącza ostrzeżenia wyświetlające się przy usuwaniu lub wycinaniu więcej niż
entities. 100 budynków.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Klawiszologia title: Klawiszologia
@ -793,8 +816,9 @@ keybindings:
massSelectCut: Wytnij obszar massSelectCut: Wytnij obszar
exportScreenshot: Wyeksportuj całą fabrykę jako zrzut ekranu exportScreenshot: Wyeksportuj całą fabrykę jako zrzut ekranu
lockBeltDirection: Tryb planowania taśmociągu lockBeltDirection: Tryb planowania taśmociągu
switchDirectionLockSide: "Planowanie taśmociągu: Zmień stronę" switchDirectionLockSide: >-
pipette: Pipette Planowanie taśmociągu: Zmień stronę
pipette: Wybieranie obiektów z mapy
about: about:
title: O Grze title: O Grze

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -396,6 +397,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Este <strong> NÃO </strong> é um jogo inativo! Construa mais extratores e esteiras para concluir o objetivo mais rapidamente.<br><br>Dica, segure <strong> SHIFT </strong> para colocar vários extratores e use <strong> R </strong> para girá-los. Este <strong> NÃO </strong> é um jogo inativo! Construa mais extratores e esteiras para concluir o objetivo mais rapidamente.<br><br>Dica, segure <strong> SHIFT </strong> para colocar vários extratores e use <strong> R </strong> para girá-los.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Controles title: Controles
hint: >- hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continuar continue: Continuar
newGame: Novo Jogo newGame: Novo Jogo
madeBy: Criado por <author-link> madeBy: Criado por <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -396,6 +397,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Isto <strong>NÃO</strong> é um jogo idle! Constrói mais extratores e tapetes para atingir o objetivo mais rapidamente.<br><br>Dica: Pressiona <strong>SHIFT</strong> para colocar vários extratores, e usa <strong>R</strong> para os rodar. Isto <strong>NÃO</strong> é um jogo idle! Constrói mais extratores e tapetes para atingir o objetivo mais rapidamente.<br><br>Dica: Pressiona <strong>SHIFT</strong> para colocar vários extratores, e usa <strong>R</strong> para os rodar.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -708,6 +722,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Atalhos title: Atalhos
hint: >- hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -157,6 +157,7 @@ mainMenu:
continue: Продолжить continue: Продолжить
newGame: Новая Игра newGame: Новая Игра
madeBy: Создал <author-link> madeBy: Создал <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -289,10 +290,10 @@ ingame:
pasteLastBlueprint: Вставить последний чертеж pasteLastBlueprint: Вставить последний чертеж
lockBeltDirection: Включить конвейерный планировщик lockBeltDirection: Включить конвейерный планировщик
plannerSwitchSide: Поменять местами стороны планировщика plannerSwitchSide: Поменять местами стороны планировщика
cutSelection: Cut cutSelection: Вырезать
copySelection: Copy copySelection: Копировать
clearSelection: Clear Selection clearSelection: Отменить
pipette: Pipette pipette: Пипетка
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -399,6 +400,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
Это <strong>НЕ</strong> idle-игра! Постройте больше экстракторов и конвейеров, чтобы достичь цели быстрее.<br><br>Подсказка: Удерживайте <strong>SHIFT</strong> чтобы разместить несколько экстракторов, а <strong>R</strong> чтобы вращать их. Это <strong>НЕ</strong> idle-игра! Постройте больше экстракторов и конвейеров, чтобы достичь цели быстрее.<br><br>Подсказка: Удерживайте <strong>SHIFT</strong> чтобы разместить несколько экстракторов, а <strong>R</strong> чтобы вращать их.
colors:
red: Красный
green: Зеленый
blue: Синий
yellow: Желтый
purple: Фиолетовый
cyan: Бирюзовый
white: Белый
uncolored: Бесцветный
shapeViewer:
title: Слои
empty: Пусто
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -688,27 +702,31 @@ settings:
Включает виньетирование, которое затемняет углы экрана и облегчает чтение текста. Включает виньетирование, которое затемняет углы экрана и облегчает чтение текста.
autosaveInterval: autosaveInterval:
title: Autosave Interval title: Интервал авто-сохранения
description: >- description: >-
Controls how often the game saves automatically. You can also disable it Управляет тем, как часто игра автоматически сохраняется.
entirely here. А также здесь можно полностью отключить авто-сохранение.
intervals: intervals:
one_minute: 1 Minute one_minute: 1 Минута
two_minutes: 2 Minutes two_minutes: 2 Минуты
five_minutes: 5 Minutes five_minutes: 5 Минут
ten_minutes: 10 Minutes ten_minutes: 10 Минут
twenty_minutes: 20 Minutes twenty_minutes: 20 Минут
disabled: Disabled disabled: Отключено
compactBuildingInfo: compactBuildingInfo:
title: Compact Building Infos title: Компактная Информация о Зданиях
description: >- description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a Сокращает отображаемую информацию о зданиях, показывая только их множители.
description and image is shown. Иначе информация отображается с описанием и изображением.
disableCutDeleteWarnings: disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings title: Отключить Предупреждение о Вырезании\Удалении
description: >- description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 Отключает диалоговые окна с предупреждениями, появляющиеся при
entities. вырезании/удалении более 100 объектов.
enableColorBlindHelper:
title: Режим Дальтоника
description: Включает различные инструменты, которые позволяют играть в игру дальтоникам.
keybindings: keybindings:
title: Настройки управления title: Настройки управления
@ -775,7 +793,7 @@ keybindings:
mapMoveFaster: Ускорение передвижения mapMoveFaster: Ускорение передвижения
lockBeltDirection: Включает конвейерный планировщик lockBeltDirection: Включает конвейерный планировщик
switchDirectionLockSide: "Планировщик: Переключение сторон" switchDirectionLockSide: "Планировщик: Переключение сторон"
pipette: Pipette pipette: Пипетка
about: about:
title: Об игре title: Об игре

File diff suppressed because it is too large Load Diff

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-

View File

@ -187,6 +187,7 @@ mainMenu:
continue: 继续游戏 continue: 继续游戏
newGame: 新游戏 newGame: 新游戏
madeBy: 作者:<author-link> madeBy: 作者:<author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -283,12 +284,6 @@ dialogs:
<code class='keybinding'>CTRL</code> + 拖动:选择区域以复制或删除。<br> <code class='keybinding'>CTRL</code> + 拖动:选择区域以复制或删除。<br>
<code class='keybinding'>SHIFT</code>: 按住以放置多个。<br> <code class='keybinding'>SHIFT</code>: 按住以放置多个。<br>
<code class='keybinding'>ALT</code>: 反向放置传送带。<br> <code class='keybinding'>ALT</code>: 反向放置传送带。<br>
# desc: >-
# This game has a lot of keybindings which make it easier to build big factories.
# Here are a few, but be sure to <strong>check out the keybindings</strong>!<br><br>
# <code class='keybinding'>CTRL</code> + Drag: Select area to copy / delete.<br>
# <code class='keybinding'>SHIFT</code>: Hold to place multiple of one building.<br>
# <code class='keybinding'>ALT</code>: Invert orientation of placed belts.<br>
createMarker: createMarker:
title: 创建地图标记 title: 创建地图标记
@ -436,6 +431,19 @@ ingame:
这<strong>不是</strong>一个挂机游戏!建造更多的开采机和传送带来更快地完成目标。<br><br> 这<strong>不是</strong>一个挂机游戏!建造更多的开采机和传送带来更快地完成目标。<br><br>
提示:按住<strong>SHIFT</strong>键来放置多个开采机,用<strong>R</strong>键旋转它们。 提示:按住<strong>SHIFT</strong>键来放置多个开采机,用<strong>R</strong>键旋转它们。
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -754,6 +762,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: 按键设置 title: 按键设置
hint: >- hint: >-
@ -812,10 +824,8 @@ keybindings:
rotateInverseModifier: >- rotateInverseModifier: >-
修饰键: 改为逆时针旋转 修饰键: 改为逆时针旋转
cycleBuildingVariants: 选择建筑变体 cycleBuildingVariants: 选择建筑变体
# cycleBuildingVariants: Cycle Variants
confirmMassDelete: 确认批量删除 confirmMassDelete: 确认批量删除
cycleBuildings: 选择建筑 cycleBuildings: 选择建筑
# cycleBuildings: Cycle Buildings
massSelectStart: 开始批量选择 massSelectStart: 开始批量选择
massSelectSelectMultiple: 选择多个区域 massSelectSelectMultiple: 选择多个区域
massSelectCopy: 复制 massSelectCopy: 复制
@ -850,6 +860,7 @@ about:
最后,我想感谢我最好的朋友<a 最后,我想感谢我最好的朋友<a
href="https://github.com/niklas-dahl" target="_blank">Niklas</a>——如果没有与他的异星工厂factorio的游戏体验shapez.io将不会存在。 href="https://github.com/niklas-dahl" target="_blank">Niklas</a>——如果没有与他的异星工厂factorio的游戏体验shapez.io将不会存在。
changelog: changelog:
title: 版本日志 title: 版本日志

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue continue: Continue
newGame: New Game newGame: New Game
madeBy: Made by <author-link> madeBy: Made by <author-link>
subreddit: Reddit
dialogs: dialogs:
buttons: buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >- 1_3_expand: >-
This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them. This is <strong>NOT</strong> an idle game! Build more extractors and belts to finish the goal quicker.<br><br>Tip: Hold <strong>SHIFT</strong> to place multiple extractors, and use <strong>R</strong> to rotate them.
colors:
red: Red
green: Green
blue: Blue
yellow: Yellow
purple: Purple
cyan: Cyan
white: White
uncolored: No color
shapeViewer:
title: Layers
empty: Empty
# All shop upgrades # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100 Disable the warning dialogs brought up when cutting/deleting more than 100
entities. entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-