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
oid sha256:ebde52e75e54d2f4add0cf498c85f059082a0745212a23c4de7328a7d78b00a5
size 238170
oid sha256:ae83b8805191eeba13016e40216fc4781ac3958e6886769ce8677ea28370d13e
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;
}
> .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,
&.blueprint {
.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 {
@include S(width, 40px);
@include S(height, 40px);
@ -241,7 +260,7 @@
&.complete {
background-color: $colorGreenBright;
@include DarkThemeOverride {
background-color: $colorGreenBright;
}

View File

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

View File

@ -224,6 +224,12 @@
width: 100%;
box-sizing: border-box;
.buttons {
display: flex;
flex-direction: column;
align-items: center;
}
.browserWarning {
@include S(margin-bottom, 10px);
background-color: $colorRedBright;
@ -337,33 +343,42 @@
}
.footer {
display: flex;
display: grid;
flex-grow: 1;
justify-content: center;
align-items: flex-end;
width: 100%;
grid-template-columns: auto auto auto 1fr;
@include S(padding, 10px);
box-sizing: border-box;
@include S(grid-gap, 5px);
.author {
flex-grow: 1;
text-align: right;
@include S(padding-right, 10px);
@include PlainText;
color: #888a8f;
a {
color: #333438;
}
}
@include S(padding, 15px);
> a {
> .boxLink {
display: grid;
align-items: center;
grid-template-columns: 1fr auto;
justify-content: center;
background: #fafafa;
background: #fdfdfd;
@include S(padding, 5px);
@include S(padding-left, 10px);
@include S(border-radius, $globalBorderRadius);
@include S(margin-left, 10px);
@include SuperSmallText();
font-weight: bold;
box-sizing: border-box;
text-transform: uppercase;
color: #616266;
@ -371,19 +386,11 @@
transition-property: background-color, transform;
pointer-events: all;
@include S(width, 120px);
@include S(height, 50px);
@include S(height, 60px);
cursor: pointer;
&:hover {
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 {
@ -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 {
@ -423,9 +473,14 @@
}
.footer {
> a {
background: darken($darkModeGameBackground, 10);
> a,
.sidelinks > a {
background-color: darken($darkModeGameBackground, 10);
color: #eee;
&:hover {
background-color: darken($darkModeGameBackground, 8);
}
}
.author {

View File

@ -1,15 +1,21 @@
export const CHANGELOG = [
{
version: "1.1.17",
date: "unreleased",
date: "22.06.2020",
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",
"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",
"Add setting to disable cut/delete warnings (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 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)",
"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 = {
discord: "https://discord.gg/HN7EVzV",
github: "https://github.com/tobspr/shapez.io",
reddit: "https://www.reddit.com/r/shapezio",
standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/",
};

View File

@ -191,7 +191,17 @@ export class InputDistributor {
*/
handleKeyMouseDown(event) {
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);
this.keysDown.add(keyCode);

View File

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

View File

@ -34,7 +34,8 @@ import { HUDPartTutorialHints } from "./parts/tutorial_hints";
import { HUDWaypoints } from "./parts/waypoints";
import { HUDInteractiveTutorial } from "./parts/interactive_tutorial";
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 {
/**
@ -68,6 +69,7 @@ export class GameHUD {
debugInfo: new HUDDebugInfo(this.root),
dialogs: new HUDModalDialogs(this.root),
screenshotExporter: new HUDScreenshotExporter(this.root),
shapeViewer: new HUDShapeViewer(this.root),
};
this.signals = {
@ -76,7 +78,8 @@ export class GameHUD {
shapeUnpinRequested: /** @type {TypedSignal<[string]>} */ (new Signal()),
notification: /** @type {TypedSignal<[string, enumNotificationType]>} */ (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) {
@ -100,6 +103,10 @@ export class GameHUD {
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();
for (const key in this.parts) {
this.parts[key].createElements(frag);
@ -208,7 +215,13 @@ export class GameHUD {
* @param {DrawParameters} parameters
*/
draw(parameters) {
const partsOrder = ["waypoints", "massSelector", "buildingPlacer", "blueprintPlacer"];
const partsOrder = [
"waypoints",
"massSelector",
"buildingPlacer",
"blueprintPlacer",
"colorBlindHelper",
];
for (let i = 0; i < partsOrder.length; ++i) {
if (this.parts[partsOrder[i]]) {

View File

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

View File

@ -10,6 +10,7 @@ import { Entity } from "../../entity";
import { KEYMAPPINGS } from "../../key_action_mapper";
import { defaultBuildingVariant, MetaBuilding } from "../../meta_building";
import { BaseHUDPart } from "../base_hud_part";
import { SOUNDS } from "../../../platform/sound";
/**
* Contains all logic for the building placer - this doesn't include the rendering
@ -183,6 +184,13 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
if (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);
if (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);
if (contents && !contents.queuedForDestroy && !contents.destroyed) {
this.root.logic.tryDeleteBuilding(contents);
this.root.soundProxy.playUi(SOUNDS.destroyBuilding);
}
} else {
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
label: T.ingame.keybindingsOverlay.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,
* lastRenderedValue: string,
* element: HTMLElement,
* detector?: ClickDetector
* detector?: ClickDetector,
* infoDetector?: ClickDetector
* }>}
*/
this.handles = [];
@ -155,6 +156,10 @@ export class HUDPinnedShapes extends BaseHUDPart {
if (detector) {
detector.cleanup();
}
const infoDetector = this.handles[i].infoDetector;
if (infoDetector) {
infoDetector.cleanup();
}
}
this.handles = [];
@ -198,12 +203,24 @@ export class HUDPinnedShapes extends BaseHUDPart {
detector = new ClickDetector(element, {
consumeEvents: true,
preventDefault: true,
targetOnly: true,
});
detector.click.add(() => this.unpinShape(key));
} else {
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 goal = this.findGoalValueForShape(key);
@ -216,6 +233,8 @@ export class HUDPinnedShapes extends BaseHUDPart {
element,
amountLabel,
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];
requiredHandle.container.remove();
requiredHandle.pinDetector.cleanup();
requiredHandle.infoDetector.cleanup();
}
// Cleanup
@ -122,6 +123,10 @@ export class HUDShop extends BaseHUDPart {
pinButton.classList.add("pin");
container.appendChild(pinButton);
const viewInfoButton = document.createElement("button");
viewInfoButton.classList.add("showInfo");
container.appendChild(viewInfoButton);
const currentGoalShape = this.root.hubGoals.currentGoal.definition.getHash();
if (shape === currentGoalShape) {
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({
container,
progressLabel,
@ -152,6 +165,7 @@ export class HUDShop extends BaseHUDPart {
definition: shapeDef,
required: amount,
pinDetector,
infoDetector,
});
});
}
@ -202,6 +216,7 @@ export class HUDShop extends BaseHUDPart {
const requiredHandle = handle.requireIndexToElement[i];
requiredHandle.container.remove();
requiredHandle.pinDetector.cleanup();
requiredHandle.infoDetector.cleanup();
}
handle.requireIndexToElement = [];
}
@ -231,6 +246,6 @@ export class HUDShop extends BaseHUDPart {
tryUnlockNextTier(upgradeId) {
// 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 quadrantHalfSize = quadrantSize / 2;
context.fillStyle = "rgba(40, 50, 65, 0.1)";
context.fillStyle = THEME.items.circleBackground;
context.beginCircle(0, 0, quadrantSize * 1.15);
context.fill();

View File

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

View File

@ -77,6 +77,7 @@ export class UndergroundBeltSystem extends GameSystemWithFilter {
const tier = undergroundComp.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)
let matchingEntrance = null;
for (let i = 0; i < range; ++i) {
@ -104,31 +105,49 @@ export class UndergroundBeltSystem extends GameSystemWithFilter {
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();
let allBeltsMatch = true;
for (let i = 0; i < matchingEntrance.range; ++i) {
currentPos.addInplace(offset);
const contents = this.root.map.getTileContent(currentPos);
if (!contents) {
continue;
allBeltsMatch = false;
break;
}
const contentsStaticComp = contents.components.StaticMapEntity;
const contentsBeltComp = contents.components.Belt;
if (!contentsBeltComp) {
allBeltsMatch = false;
break;
}
if (contentsBeltComp) {
// It's a belt
if (
contentsBeltComp.direction === enumDirection.top &&
enumAngleToDirection[contentsStaticComp.rotation] === direction
) {
// It's same rotation, drop it
this.root.logic.tryDeleteBuilding(contents);
}
// It's a belt
if (
contentsBeltComp.direction !== enumDirection.top ||
enumAngleToDirection[contentsStaticComp.rotation] !== direction
) {
allBeltsMatch = false;
break;
}
}
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
currentPos = tile.copy().add(offset);
for (let i = 0; i < matchingEntrance.range - 1; ++i) {

View File

@ -12,6 +12,8 @@
"directionLock": "rgb(74, 237, 134)",
"directionLockTrack": "rgba(74, 237, 134, 0.2)",
"colorBlindPickerTile": "rgba(255, 255, 255, 0.5)",
"resources": {
"shape": "#3d3f4a",
"red": "#4a3d3f",
@ -26,6 +28,7 @@
"items": {
"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)",
"directionLockTrack": "rgba(74, 237, 134, 0.2)",
"colorBlindPickerTile": "rgba(50, 50, 50, 0.4)",
"resources": {
"shape": "#eaebec",
"red": "#ffbfc1",
@ -27,6 +29,7 @@
"items": {
"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",
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",
destroyBuilding: "destroy_building",
placeBuilding: "place_building",
placeBelt: "place_belt",
};

View File

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

View File

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

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -711,6 +725,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

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

View File

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

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -712,6 +726,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

@ -121,6 +121,7 @@ mainMenu:
continue: Continue
newGame: New Game
changelog: Changelog
subreddit: Reddit
importSavegame: Import
openSourceHint: This game is open source!
discordLink: Official Discord Server
@ -290,6 +291,17 @@ ingame:
clearSelection: Clear Selection
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
# from the toolbar)
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.
creationSuccessNotification: Marker has been created.
# Shape viewer
shapeViewer:
title: Layers
empty: Empty
# Interactive tutorial
interactiveTutorial:
title: Tutorial
@ -652,6 +669,11 @@ settings:
description: >-
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:
title: Fullscreen
description: >-

View File

@ -57,7 +57,7 @@ steamPage:
[*] Modo historia en el que los edificios cuesten figuras
[*] Más niveles y edificios (exclusivos del juego completo)
[*] 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
[*] Mejoras de rendimiento (Aunque el juego ya funciona muy bien!)
[*] Modo para daltónicos
@ -155,6 +155,7 @@ mainMenu:
showInfo: Ver
contestOver: El concurso ha terminado - Únete al discord para enterarte sobre nuevos concursos!
subreddit: Reddit
dialogs:
buttons:
@ -282,12 +283,12 @@ ingame:
placeBuilding: Colocar edificio
createMarker: Crear marca
delete: Destruir
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pasteLastBlueprint: Pegar último plano
lockBeltDirection: Activar planificador de cintas transportadoras
plannerSwitchSide: Invertir giro del planificador
cutSelection: Cortar
copySelection: Copiar
clearSelection: Limpiar Selección
pipette: Pipette
# 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!
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.
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
shopUpgrades:
belt:
@ -439,7 +454,7 @@ buildings:
description: Multifuncional - Distribuye equitativamente todas las entradas a todas las salidas.
compact:
name: fusionador (compacto)
name: Fusionador (compacto)
description: Junta dos cintas transportadoras en una.
compact-inverse:
@ -605,7 +620,7 @@ settings:
huge: Enorme
scrollWheelSensitivity:
title: Sensitividad del zoom
title: Sensibilidad del zoom
description: >-
Cambia como de sensible es el zoom (Tanto la ruedo del ratón como el trackpad)
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.
vignette:
title: Vignette
title: Viñeta
description: >-
Enables the vignette which darkens the screen corners and makes text easier
to read.
Activa el efecto viñeta que oscurece loas esquinas de la pantalla y hace el texto mas fácil de leer.
autosaveInterval:
title: Autosave Interval
title: Intervalo de Autoguardado
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
Controla cada cuanto tiempo se guarda el juego automaticamente. Aquí tambien puedes deshabilitarlo por completo.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
one_minute: 1 Minuto
two_minutes: 2 Minutos
five_minutes: 5 Minutos
ten_minutes: 10 Minutos
twenty_minutes: 20 Minutos
disabled: Deshabilitado
compactBuildingInfo:
title: Compact Building Infos
title: Información Compacta de Edificios
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
Acorta la caja de información mostrando solo sus ratios. Si no, se mostrara una descripción y una imagen.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
title: Deshabilitar las advertencias de Cortar/Eliminar
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
Deshabilita los dialogos de advertencia que se muestran cuando se cortan/eliminan mas de 100 elementos.
enableColorBlindHelper:
title: Modo para Daltonicos
description: Activa varias herramientas que permiten jugar si eres daltonico.
keybindings:
title: Atajos de Teclado

View File

@ -157,6 +157,7 @@ mainMenu:
continue: Continuer
newGame: Nouvelle partie
madeBy: Créé par <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -212,7 +213,7 @@ dialogs:
keybindingsResetOk:
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:
title: Version démo
@ -236,7 +237,7 @@ dialogs:
massDeleteConfirm:
title: Confirmation de suppression
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:
title: Confirmer la coupure
@ -247,7 +248,7 @@ dialogs:
blueprintsNotUnlocked:
title: Pas encore débloqué
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:
title: Raccourcis utiles
@ -288,9 +289,9 @@ ingame:
pasteLastBlueprint: Copier le dernier patron
lockBeltDirection: Utiliser le plannificateur de convoyeurs
plannerSwitchSide: Échanger la direction du plannificateur
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
cutSelection: Couper
copySelection: Copier
clearSelection: Effacer la sélection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
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.
autosaveInterval:
title: Autosave Interval
title: Fréquence des sauvegardes automatiques
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
Contrôle avec quelle fréquence le jeu sera sauvegardé automatiquement. Vous pouvez aussi entièrement désactiver cette fonctionnalité ici.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
disabled: Désactivé
compactBuildingInfo:
title: Compact Building Infos
title: Informations réduites sur les bâtiments
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
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.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
title: Désactive les avertissement pour Couper/Effacer
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
Désactive la boîte de dialogue qui s'affiche lorsque vous vous apprêtez à couper/effacer plus de 100 entités.
enableColorBlindHelper:
title: Mode Daltonien
description: Active divers outils qui permettent de jouer à ce jeu si vous êtes daltonien.
keybindings:
title: Contrôles

View File

@ -156,6 +156,7 @@ mainMenu:
showInfo: View
contestOver: This contest has ended - Join the discord to get noticed about new contests!
subreddit: Reddit
dialogs:
buttons:
@ -395,6 +396,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

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

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
1_3_expand: >-
이것은 방치형 게임이 <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
shopUpgrades:
belt:
@ -711,6 +725,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: 키바인딩
hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Verder
newGame: Nieuw Spel
madeBy: Gemaakt door <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -283,12 +284,12 @@ ingame:
createMarker: Plaats markering
delete: Vernietig
pasteLastBlueprint: Plak de laatst gekopiëerde blauwdruk
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
lockBeltDirection: Maak gebruik van de lopende band planner
plannerSwitchSide: Draai de richting van de planner
cutSelection: Knip
copySelection: Kopieer
clearSelection: Cancel selectie
pipette: Pipet
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -395,6 +396,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -519,7 +533,7 @@ storyRewards:
reward_mixer:
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:
title: Stapelaar
@ -687,25 +701,29 @@ settings:
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
Bepaalt hoe vaak het spel automatisch opslaat. Je kan het hier ook volledig
mee uitschakelen.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
one_minute: 1 Minuut
two_minutes: 2 Minuten
five_minutes: 5 Minuten
ten_minutes: 10 Minuten
twenty_minutes: 20 Minuten
disabled: Uitgeschakeld
compactBuildingInfo:
title: Compact Building Infos
title: Combacte gebouwinformatie
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
Informatie weergeven bij gebouwen wordt beperkt tot alleen hun 'ratios'. Anders
zie je een beschrijving en een afbeelding.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
title: Schakel knip/delete waarschuwingen uit.
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
Schakelt de waarschuwing uit die wordt weergegeven wanneer je meer dan 100 dingen probeert te
knippen/deleten.
enableColorBlindHelper:
title: Kleurenblindmodus
description: Schakelt verschillende hulpmiddelen in zodat je het spel alsnog kunt spelen wanneer je kleurenblind bent.
keybindings:
title: Sneltoetsen
@ -771,8 +789,8 @@ keybindings:
exportScreenshot: Exporteer volledige basis als afbeelding
mapMoveFaster: Beweeg sneller
lockBeltDirection: Schakel lopende band-planner in
switchDirectionLockSide: "Planner: Wissel van kant"
pipette: Pipette
switchDirectionLockSide: "Planner: Wissel van richting"
pipette: Pipet
about:
title: Over dit spel

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Fortsett
newGame: Nytt Spill
madeBy: Laget av <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -285,9 +286,9 @@ ingame:
pasteLastBlueprint: Lim inn forrige blåkopi
lockBeltDirection: Aktiver båndplanleggeren
plannerSwitchSide: Flipp båndplanleggeren
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
cutSelection: Klipp Ut
copySelection: Kopier
clearSelection: Fjern Valgte
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
@ -395,6 +396,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -572,7 +586,7 @@ storyRewards:
reward_blueprints:
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
no_reward:
@ -687,27 +701,31 @@ settings:
å lese.
autosaveInterval:
title: Autosave Interval
title: Autolagringsintervall
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
Jsuter hvor ofte spillet lagres automatisk. Du kan også
deaktivere det fullstendig.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
one_minute: 1 Minutt
two_minutes: 2 Minutter
five_minutes: 5 Minutter
ten_minutes: 10 Minutter
twenty_minutes: 20 Minutter
disabled: Deaktivert
compactBuildingInfo:
title: Compact Building Infos
title: Kompakt Bygningsinformasjon
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
Forkorter informasjonsboksen for bygninger ved å bare vise dems forhold. Ellers
vises en beskrivelse og bilde er vist.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
title: Deaktiverer Kutt/Slette Advarsler
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
Deaktiverer advarselsdialogen som kommer frem når du kutter/sletter mer enn 100
bygninger.
enableColorBlindHelper:
title: Fargeblind Modus
description: Aktiverer forskjellige verktøy som lar deg spille spillet om du er fargeblind.
keybindings:
title: Hurtigtaster
@ -773,7 +791,7 @@ keybindings:
placeMultiple: Forbli i plasseringsmodus
placeInverse: Inverter automatisk transportbånd orientering
lockBeltDirection: Enable belt planner
switchDirectionLockSide: "Planner: Switch side"
switchDirectionLockSide: "Planlegger: Bytt side"
pipette: Pipette
about:

View File

@ -159,7 +159,8 @@ mainMenu:
showInfo: Wyświetl
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:
buttons:
@ -292,10 +293,21 @@ ingame:
pasteLastBlueprint: Wklej ostatnio skopiowany obszar
lockBeltDirection: Tryb planowania taśmociągu
plannerSwitchSide: Obróć planowany taśmociąg
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
cutSelection: Wytnij
copySelection: Skopiuj
clearSelection: Wyczyść zaznaczenie
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
# 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.
creationSuccessNotification: Utworzono znacznik.
# Shape viewer
shapeViewer:
title: Poziomy
empty: Puste
# Interactive tutorial
interactiveTutorial:
title: Tutorial
@ -698,37 +715,43 @@ settings:
Oferuje porady i tutoriale podczas gry. Dodatkowo chowa pewne elementy interfejsu, by ułatwić poznanie gry.
enableTunnelSmartplace:
title: Smart Tunnels
title: Inteligentne taśmociągi i tunele
description: >-
Gdy włączone, umieszczenie tunelu automatycznie usuwa zbędny taśmociąg.
Pozwala również budować tunele przez przeciąganie i nadmiarowe tunele zostają usunięte.
Pozwala również budować tunele przez przeciąganie, gdyż niepotrzebne tunele zostają usunięte.
vignette:
title: Vignette
title: Winieta
description: >-
Włącza winietowanie, które przyciemnia rogi ekranu i poprawia czytelność tekstu.
Włącza winietę - przyciemnia rogi ekranu, poprawiając czytelność tekstu.
autosaveInterval:
title: Autosave Interval
title: Częstość auto-zapisu
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
Zmienia, jak często gra automatycznie zapisuje fabrykę.
Można tą funkcję również całkowicie wyłączyć.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
one_minute: Co minutę
two_minutes: Co 2 minuty
five_minutes: Co 5 minut
ten_minutes: Co 10 minut
twenty_minutes: Co 20 minut
disabled: Wyłączone
compactBuildingInfo:
title: Compact Building Infos
title: Wyłącz opis budynków
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
Ukrywa opis i zdjęcie budynków w obszarze informacyjnym, pokazując jedynie
ich tytuł i specyfikacje techniczne.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
title: Wyłącz ostrzeżenia usuwania/wycinania
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
Wyłącza ostrzeżenia wyświetlające się przy usuwaniu lub wycinaniu więcej niż
100 budynków.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Klawiszologia
@ -793,8 +816,9 @@ keybindings:
massSelectCut: Wytnij obszar
exportScreenshot: Wyeksportuj całą fabrykę jako zrzut ekranu
lockBeltDirection: Tryb planowania taśmociągu
switchDirectionLockSide: "Planowanie taśmociągu: Zmień stronę"
pipette: Pipette
switchDirectionLockSide: >-
Planowanie taśmociągu: Zmień stronę
pipette: Wybieranie obiektów z mapy
about:
title: O Grze

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -396,6 +397,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Controles
hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continuar
newGame: Novo Jogo
madeBy: Criado por <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -396,6 +397,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -708,6 +722,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Atalhos
hint: >-

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

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

File diff suppressed because it is too large Load Diff

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -710,6 +724,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-

View File

@ -187,6 +187,7 @@ mainMenu:
continue: 继续游戏
newGame: 新游戏
madeBy: 作者:<author-link>
subreddit: Reddit
dialogs:
buttons:
@ -283,12 +284,6 @@ dialogs:
<code class='keybinding'>CTRL</code> + 拖动:选择区域以复制或删除。<br>
<code class='keybinding'>SHIFT</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:
title: 创建地图标记
@ -436,6 +431,19 @@ ingame:
这<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
shopUpgrades:
belt:
@ -754,6 +762,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: 按键设置
hint: >-
@ -812,10 +824,8 @@ keybindings:
rotateInverseModifier: >-
修饰键: 改为逆时针旋转
cycleBuildingVariants: 选择建筑变体
# cycleBuildingVariants: Cycle Variants
confirmMassDelete: 确认批量删除
cycleBuildings: 选择建筑
# cycleBuildings: Cycle Buildings
massSelectStart: 开始批量选择
massSelectSelectMultiple: 选择多个区域
massSelectCopy: 复制
@ -850,6 +860,7 @@ about:
最后,我想感谢我最好的朋友<a
href="https://github.com/niklas-dahl" target="_blank">Niklas</a>——如果没有与他的异星工厂factorio的游戏体验shapez.io将不会存在。
changelog:
title: 版本日志

View File

@ -156,6 +156,7 @@ mainMenu:
continue: Continue
newGame: New Game
madeBy: Made by <author-link>
subreddit: Reddit
dialogs:
buttons:
@ -397,6 +398,19 @@ ingame:
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.
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
shopUpgrades:
belt:
@ -709,6 +723,10 @@ settings:
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
enableColorBlindHelper:
title: Color Blind Mode
description: Enables various tools which allow to play the game if you are color blind.
keybindings:
title: Keybindings
hint: >-