Merge pull request #1 from tobspr/master

update
This commit is contained in:
Gerdon Abbink 2020-06-22 12:37:22 +02:00 committed by GitHub
commit ce07211df8
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
79 changed files with 2961 additions and 1059 deletions

1
.gitignore vendored
View File

@ -115,3 +115,4 @@ tmp_standalone_files
# Local config
config.local.js
.DS_Store

Binary file not shown.

After

Width:  |  Height:  |  Size: 63 KiB

Binary file not shown.

Before

Width:  |  Height:  |  Size: 12 KiB

After

Width:  |  Height:  |  Size: 17 KiB

View File

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

BIN
artwork/steam/devlog.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 16 KiB

3
artwork/steam/devlog.psd Normal file
View File

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

BIN
artwork/wires/prefab.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 132 KiB

3
artwork/wires/prefab.psd Normal file
View File

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

View File

@ -269,7 +269,7 @@ gulp.task("build.prod", gulp.series("utils.cleanup", "step.prod.all", "step.post
// Builds everything (standalone-beta)
gulp.task(
"step.standalone-beta.code",
gulp.series("sounds.fullbuild", "translations.fullBuild", "js.standalone-beta")
gulp.series("sounds.fullbuildHQ", "translations.fullBuild", "js.standalone-beta")
);
gulp.task("step.standalone-beta.mainbuild", gulp.parallel("step.baseResources", "step.standalone-beta.code"));
gulp.task(
@ -284,7 +284,7 @@ gulp.task(
// Builds everything (standalone-prod)
gulp.task(
"step.standalone-prod.code",
gulp.series("sounds.fullbuild", "translations.fullBuild", "js.standalone-prod")
gulp.series("sounds.fullbuildHQ", "translations.fullBuild", "js.standalone-prod")
);
gulp.task("step.standalone-prod.mainbuild", gulp.parallel("step.baseResources", "step.standalone-prod.code"));
gulp.task(

View File

@ -29,7 +29,7 @@ function gulptasksSounds($, gulp, buildFolder) {
.audioChannels(1)
.audioFrequency(22050)
.audioCodec("libmp3lame")
.audioFilters(["volume=0.3"]);
.audioFilters(["volume=0.15"]);
}),
{
name: "music",
@ -40,6 +40,30 @@ function gulptasksSounds($, gulp, buildFolder) {
.pipe(gulp.dest(path.join(builtSoundsDir, "music")));
});
// Encodes the game music in high quality for the standalone
gulp.task("sounds.musicHQ", () => {
return gulp
.src([path.join(soundsDir, "music", "**", "*.wav"), path.join(soundsDir, "music", "**", "*.mp3")])
.pipe($.plumber())
.pipe(
$.cache(
$.fluentFfmpeg("mp3", function (cmd) {
return cmd
.audioBitrate(256)
.audioChannels(2)
.audioFrequency(44100)
.audioCodec("libmp3lame")
.audioFilters(["volume=0.15"]);
}),
{
name: "music-high-quality",
fileCache,
}
)
)
.pipe(gulp.dest(path.join(builtSoundsDir, "music")));
});
// Encodes the ui sounds
gulp.task("sounds.sfxGenerateSprites", () => {
return gulp
@ -91,8 +115,10 @@ function gulptasksSounds($, gulp, buildFolder) {
});
gulp.task("sounds.buildall", gulp.parallel("sounds.music", "sounds.sfx"));
gulp.task("sounds.buildallHQ", gulp.parallel("sounds.musicHQ", "sounds.sfx"));
gulp.task("sounds.fullbuild", gulp.series("sounds.clear", "sounds.buildall", "sounds.copy"));
gulp.task("sounds.fullbuildHQ", gulp.series("sounds.clear", "sounds.buildallHQ", "sounds.copy"));
gulp.task("sounds.dev", gulp.series("sounds.buildall", "sounds.copy"));
}

Binary file not shown.

Before

Width:  |  Height:  |  Size: 35 KiB

After

Width:  |  Height:  |  Size: 111 KiB

View File

@ -0,0 +1,42 @@
<?xml version="1.0" encoding="iso-8859-1"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" version="1.1" id="Layer_1" x="0px" y="0px" viewBox="0 0 512 512" style="enable-background:new 0 0 512 512;" xml:space="preserve">
<path style="fill:#FF4B55;" d="M400,0H112C50.144,0,0,50.144,0,112v288c0,61.856,50.144,112,112,112h288 c61.856,0,112-50.144,112-112V112C512,50.144,461.856,0,400,0z"/>
<g>
<path style="fill:#FFE15A;" d="M114.021,87.182l12.722,38.146l40.21,0.312c5.206,0.04,7.365,6.684,3.177,9.777l-32.348,23.887 l12.129,38.339c1.57,4.964-4.081,9.07-8.317,6.042l-32.714-23.383l-32.714,23.383c-4.235,3.027-9.887-1.079-8.317-6.042 l12.129-38.339L47.63,135.417c-4.188-3.093-2.029-9.736,3.177-9.777l40.21-0.312l12.722-38.146 C105.388,82.243,112.374,82.243,114.021,87.182z"/>
<path style="fill:#FFE15A;" d="M260.037,96.582l9.122,12.44l14.723-4.604c1.906-0.596,3.474,1.577,2.307,3.198l-9.012,12.52 l8.928,12.58c1.156,1.629-0.427,3.791-2.329,3.183l-14.692-4.702l-9.205,12.378c-1.192,1.603-3.738,0.766-3.746-1.231 l-0.068-15.426l-14.617-4.929c-1.893-0.638-1.883-3.318,0.013-3.944l14.65-4.831l0.171-15.425 C256.305,95.791,258.856,94.971,260.037,96.582z"/>
<path style="fill:#FFE15A;" d="M204.496,59.501l15.336,1.667l6.542-13.97c0.847-1.809,3.509-1.499,3.917,0.457l3.154,15.1 l15.308,1.905c1.982,0.247,2.509,2.874,0.776,3.866l-13.387,7.665l2.919,15.147c0.378,1.961-1.958,3.275-3.437,1.933 l-11.427-10.363l-13.504,7.457c-1.748,0.965-3.719-0.85-2.901-2.672l6.324-14.07l-11.265-10.539 C201.393,61.721,202.511,59.285,204.496,59.501z"/>
<path style="fill:#FFE15A;" d="M228.739,208.997l-9.122,12.44l-14.723-4.604c-1.906-0.596-3.474,1.577-2.307,3.198l9.012,12.52 l-8.928,12.58c-1.156,1.629,0.426,3.791,2.329,3.183l14.692-4.702l9.205,12.378c1.192,1.603,3.738,0.766,3.746-1.231l0.068-15.426 l14.617-4.929c1.892-0.638,1.883-3.318-0.013-3.943l-14.65-4.831l-0.171-15.425C232.472,208.206,229.92,207.386,228.739,208.997z"/>
<path style="fill:#FFE15A;" d="M284.281,174.151l-15.336,1.667l-6.542-13.97c-0.847-1.809-3.509-1.499-3.917,0.456l-3.154,15.1 l-15.308,1.905c-1.982,0.247-2.509,2.874-0.776,3.866l13.387,7.665l-2.919,15.147c-0.378,1.961,1.958,3.275,3.437,1.933 l11.427-10.363l13.504,7.457c1.748,0.965,3.719-0.85,2.901-2.672l-6.324-14.07l11.265-10.539 C287.384,176.371,286.266,173.935,284.281,174.151z"/>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
<g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 2.5 KiB

View File

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

View File

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

View File

@ -38,6 +38,10 @@ html {
right: 0;
background: #dee1ea;
@include DarkThemeOverride {
background: $darkModeGameBackground;
}
}
body {
@ -413,6 +417,10 @@ canvas {
display: inline-block;
vertical-align: middle;
}
@include DarkThemeOverride {
color: #fff;
}
}
.prefab_LoadingTextWithAnimDelayed {

View File

@ -27,7 +27,7 @@ $icons: notification_saved, notification_success, notification_upgrade;
}
}
$languages: en, de, cs, da, et, es-419, fr, it, pt-BR, sv, tr, el, ru, uk, zh-TW, nb, mt-MT, ar, nl, vi, th,
$languages: en, de, cs, da, et, es-419, fr, it, pt-BR, sv, tr, el, ru, uk, zh-TW, zh-CN, nb, mt-MT, ar, nl, vi, th,
hu, pl, ja, kor, no, pt-PT;
@each $language in $languages {

View File

@ -75,6 +75,15 @@
@include StyleBelowWidth(700px) {
display: none !important;
}
&.compact {
width: unset !important;
grid-template-columns: 1fr;
.buildingImage,
.description > .text {
display: none;
}
}
}
#ingame_HUD_PlacerVariants {
@ -86,6 +95,10 @@
flex-direction: column;
align-items: flex-end;
&.compact {
@include S(top, 150px);
}
.explanation {
text-transform: uppercase;
grid-row: 1 / 2;

View File

@ -21,15 +21,32 @@
}
}
$darkModeDialogBg: darken($darkModeGameBackground, 10);
@include DarkThemeOverride {
background: rgba(#33363d, 0.9);
background: rgba($darkModeDialogBg, 0.9);
@include InlineAnimation(0.12s ease-in-out) {
0% {
background-color: transparent;
opacity: 0.5;
}
100% {
background-color: rgba(#33363d, 0.9);
background-color: rgba($darkModeDialogBg, 0.9);
}
}
> .dialogInner.optionChooserDialog .optionParent {
.option {
background: #3d3f42;
&:hover {
background-color: #424348;
}
&.active {
background: $colorBlueBright;
color: #fff;
}
}
}
}

View File

@ -14,6 +14,10 @@
}
> .binding {
&:not(.visible) {
display: none !important;
}
display: inline-grid;
@include PlainText;
align-items: center;
@ -57,50 +61,6 @@
@include S(margin-left, 5px);
}
}
&:not(.placementActive) .binding.placementOnly,
&.mapOverviewActive .binding.placementOnly {
display: none;
}
&.placementActive:not(.mapOverviewActive) .noPlacementOnly {
display: none;
}
&:not(.mapOverviewActive) .binding.overviewOnly {
display: none;
}
&.mapOverviewActive .noOverviewOnly {
display: none;
}
&:not(.hasDirectionLock) .binding.directionLock {
display: none;
}
&.hasDirectionLock .noDirectionLock {
display: none;
}
.binding.placementOnly,
&:not(.placementActive) .binding.noPlacementOnly {
transform-origin: 0% 50%;
@include InlineAnimation(0.3s ease-in-out) {
0% {
color: $colorRedBright;
transform: scale(1.2);
}
}
}
.keybinding.builtinKey {
transition: all 0.1s ease-in-out;
transition-property: background-color, color, border-color;
background: $colorRedBright;
border-color: $colorRedBright;
color: #fff;
}
}
body.uiHidden #ingame_HUD_KeybindingOverlay .binding:not(.hudToggle) {

View File

@ -1,22 +0,0 @@
#ingame_HUD_MassSelector {
position: absolute;
@include S(top, 50px);
left: 50%;
transform: translateX(-50%);
background: $ingameHudBg;
@include S(padding, 6px, 10px);
@include SuperSmallText;
color: #fff;
// color: #f77;
.keybinding {
vertical-align: middle;
@include S(margin, 0, 1px);
position: relative;
top: unset;
left: unset;
right: unset;
bottom: unset;
@include S(margin-top, -2px);
}
}

View File

@ -29,7 +29,7 @@
#ingame_HUD_Waypoints {
position: absolute;
@include S(right, 10px);
@include S(top, 60px);
@include S(top, 45px);
display: flex;
flex-direction: column;
@include DarkThemeInvert();

View File

@ -37,7 +37,6 @@
@import "ingame_hud/shop";
@import "ingame_hud/game_menu";
@import "ingame_hud/dialogs";
@import "ingame_hud/mass_selector";
@import "ingame_hud/vignette_overlay";
@import "ingame_hud/statistics";
@import "ingame_hud/pinned_shapes";
@ -67,7 +66,6 @@ ingame_HUD_PinnedShapes,
ingame_HUD_GameMenu,
ingame_HUD_KeybindingOverlay,
ingame_HUD_Notifications,
ingame_HUD_MassSelector,
ingame_HUD_DebugInfo,
ingame_HUD_EntityDebugger,
ingame_HUD_InteractiveTutorial,
@ -101,7 +99,6 @@ body.uiHidden {
#ingame_HUD_buildings_toolbar,
#ingame_HUD_PlacementHints,
#ingame_HUD_GameMenu,
#ingame_HUD_MassSelector,
#ingame_HUD_PinnedShapes,
#ingame_HUD_Notifications,
#ingame_HUD_TutorialHints,
@ -115,6 +112,6 @@ body.modalDialogActive,
body.externalAdOpen,
body.ingameDialogOpen {
> *:not(.ingameDialog):not(.modalDialogParent):not(.loadingDialog):not(.gameLoadingOverlay):not(#ingame_HUD_ModalDialogs):not(.noBlur) {
filter: blur(5px) !important;
// filter: blur(5px) !important;
}
}

View File

@ -350,7 +350,7 @@ button,
}
@mixin DarkThemeOverride {
@at-root body[data-theme="dark"] &,
@at-root html[data-theme="dark"] &,
&[data-theme="dark"] {
@content;
}

View File

@ -28,4 +28,10 @@
right: 0;
bottom: 0;
}
@include DarkThemeOverride {
.gameLoadingOverlay {
background: $darkModeGameBackground;
}
}
}

View File

@ -51,4 +51,21 @@
}
}
}
@include DarkThemeOverride {
.content {
.hint {
background: #3b3d40;
}
.category .entry {
color: #c0c4c8;
border-bottom-color: #888;
button {
filter: invert(1);
}
}
}
}
}

View File

@ -401,4 +401,44 @@
}
}
}
@include DarkThemeOverride {
background: $darkModeGameBackground center center / cover !important;
.topButtons {
filter: invert(1);
.languageChoose {
filter: invert(1);
}
}
.mainContainer {
background: darken($darkModeGameBackground, 10);
.savegames .savegame {
background: darken($darkModeGameBackground, 15);
color: white;
}
}
.footer {
> a {
background: darken($darkModeGameBackground, 10);
color: #eee;
}
.author {
color: #bdbdbd;
> a {
color: white;
}
}
.thirdpartyLogo.githubLogo {
filter: invert(1);
}
}
}
}

View File

@ -88,4 +88,26 @@
}
}
}
@include DarkThemeOverride {
.content {
.setting {
background: darken($darkModeGameBackground, 10);
.value.enum {
// dirty but works
filter: invert(0.85);
color: #222;
}
.value.checkbox {
background-color: #74767b;
&.checked {
background-color: $colorBlueBright;
}
}
}
}
}
}

View File

@ -61,4 +61,21 @@
}
}
}
@include DarkThemeOverride {
.headerBar {
h1 {
color: #e2e0db;
}
.backButton {
filter: invert(1);
}
}
> .container > .content {
background: darken($darkModeGameBackground, 3);
color: #eee;
}
}
}

View File

@ -38,6 +38,8 @@ $ingameHudBg: rgba(#333438, 0.9);
$text3dColor: #f4ffff;
$darkModeGameBackground: #5c606c;
// Dialog properties
$modalDialogBg: rgba(160, 165, 180, 0.8);
$dialogBgColor: lighten($mainBgColor, 10);

View File

@ -1,8 +1,39 @@
export const CHANGELOG = [
{
version: "1.1.16",
version: "1.1.17",
date: "unreleased",
entries: ["Fix belt planner not placing the last belt"],
entries: [
"Allow configuring autosave interval and disabling it in the settings",
"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)",
"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",
],
},
{
version: "1.1.16",
date: "21.06.2020",
entries: [
"You can now pickup buildings below your cursor with 'Q'!",
"The game soundtrack has been extended! There are now 4 songs with over 13 minutes of playtime from <a href='https://soundcloud.com/pettersumelius' target='blank'>Peppsen</a>!",
"Refactor keybindings overlay to show more appropriate keybindings",
"Show keybindings for area-select in the upper left instead",
"Automatically deselect area when selecting a new building",
"Raise markers limit from 14 characters to 71 (by Joker-vD)",
"Optimize performance by caching extractor items (by Phlosioneer)",
"Added setting to enable compact building infos, which only show ratios and hide the image / description",
"Apply dark theme to menu as well (by dengr1065)",
"Fix belt planner not placing the last belt",
"Fix buildings getting deleted when right clicking while placing a blueprint",
"Fix for exporting screenshots for huge bases (It was showing an empty file) (by xSparfuchs)",
"Fix buttons not responding when using right click directly after left click (by davidburhans)",
"Fix hub marker being hidden by building info panel",
"Disable dialog background blur since it can cause performance issues",
"Added simplified chinese translations",
"Update translations (Thanks to all translators!)",
],
},
{
version: "1.1.15",

View File

@ -325,6 +325,7 @@ export class ClickDetector {
// Ignore right clicks
this.rightClick.dispatch(position, event);
this.cancelled = true;
this.clickDownPosition = null;
return;
}
}

View File

@ -191,17 +191,7 @@ export class InputDistributor {
*/
handleKeyMouseDown(event) {
const keyCode = event instanceof MouseEvent ? event.button + 1 : event.keyCode;
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();
}
event.preventDefault();
const isInitial = !this.keysDown.has(keyCode);
this.keysDown.add(keyCode);

View File

@ -47,10 +47,16 @@ export class AutomaticSave {
return;
}
const saveInterval = this.root.app.settings.getAutosaveIntervalSeconds();
if (!saveInterval) {
// Disabled
return;
}
// Check when the last save was, but make sure that if it fails, we don't spam
const lastSaveTime = Math_max(this.lastSaveAttempt, this.root.savegame.getRealLastUpdate());
let secondsSinceLastSave = (Date.now() - lastSaveTime) / 1000.0;
const secondsSinceLastSave = (Date.now() - lastSaveTime) / 1000.0;
let shouldSave = false;
switch (this.saveImportance) {
@ -61,7 +67,7 @@ export class AutomaticSave {
case enumSavePriority.regular:
// Could determine if there is a good / bad point here
shouldSave = secondsSinceLastSave > MIN_INTERVAL_SECS;
shouldSave = secondsSinceLastSave > saveInterval;
break;
default:

View File

@ -28,6 +28,7 @@ const velocitySmoothing = 0.5;
const velocityFade = 0.98;
const velocityStrength = 0.4;
const velocityMax = 20;
const ticksBeforeErasingVelocity = 10;
/**
* @enum {string}
@ -58,6 +59,8 @@ export class Camera extends BasicSerializableObject {
// Input handling
this.currentlyMoving = false;
this.lastMovingPosition = null;
this.lastMovingPositionLastTick = null;
this.numTicksStandingStill = null;
this.cameraUpdateTimeBucket = 0.0;
this.didMoveSinceTouchStart = false;
this.currentlyPinching = false;
@ -667,6 +670,8 @@ export class Camera extends BasicSerializableObject {
this.touchPostMoveVelocity = new Vector(0, 0);
this.currentlyMoving = true;
this.lastMovingPosition = pos;
this.lastMovingPositionLastTick = null;
this.numTicksStandingStill = 0;
this.didMoveSinceTouchStart = false;
}
@ -716,6 +721,8 @@ export class Camera extends BasicSerializableObject {
this.currentlyMoving = false;
this.currentlyPinching = false;
this.lastMovingPosition = null;
this.lastMovingPositionLastTick = null;
this.numTicksStandingStill = 0;
this.lastPinchPositions = null;
this.userInteraction.dispatch(USER_INTERACT_TOUCHEND);
this.didMoveSinceTouchStart = false;
@ -813,6 +820,23 @@ export class Camera extends BasicSerializableObject {
this.touchPostMoveVelocity = this.touchPostMoveVelocity.multiplyScalar(velocityFade);
// Check if the camera is being dragged but standing still: if not, zero out `touchPostMoveVelocity`.
if (this.currentlyMoving && this.desiredCenter === null) {
if (
this.lastMovingPositionLastTick !== null &&
this.lastMovingPositionLastTick.equalsEpsilon(this.lastMovingPosition)
) {
this.numTicksStandingStill++;
} else {
this.numTicksStandingStill = 0;
}
this.lastMovingPositionLastTick = this.lastMovingPosition.copy();
if (this.numTicksStandingStill >= ticksBeforeErasingVelocity) {
this.touchPostMoveVelocity.x = 0;
this.touchPostMoveVelocity.y = 0;
}
}
// Check influence of past points
if (!this.currentlyMoving && !this.currentlyPinching) {
const len = this.touchPostMoveVelocity.length();

View File

@ -1,70 +0,0 @@
import { STOP_PROPAGATION } from "../core/signal";
import { GameRoot } from "./root";
import { ClickDetector } from "../core/click_detector";
import { createLogger } from "../core/logging";
const logger = createLogger("canvas_click_interceptor");
export class CanvasClickInterceptor {
/**
* @param {GameRoot} root
*/
constructor(root) {
this.root = root;
this.root.signals.postLoadHook.add(this.initialize, this);
this.root.signals.aboutToDestruct.add(this.cleanup, this);
/** @type {Array<object>} */
this.interceptors = [];
}
initialize() {
this.clickDetector = new ClickDetector(this.root.canvas, {
applyCssClass: null,
captureTouchmove: false,
targetOnly: true,
preventDefault: true,
maxDistance: 13,
clickSound: null,
});
this.clickDetector.click.add(this.onCanvasClick, this);
this.clickDetector.rightClick.add(this.onCanvasRightClick, this);
if (this.root.hud.parts.buildingPlacer) {
this.interceptors.push(this.root.hud.parts.buildingPlacer);
}
logger.log("Registered", this.interceptors.length, "interceptors");
}
cleanup() {
if (this.clickDetector) {
this.clickDetector.cleanup();
}
this.interceptors = [];
}
onCanvasClick(position, event, cancelAction = false) {
if (!this.root.gameInitialized) {
logger.warn("Skipping click outside of game initiaization!");
return;
}
if (this.root.hud.hasBlockingOverlayOpen()) {
return;
}
for (let i = 0; i < this.interceptors.length; ++i) {
const interceptor = this.interceptors[i];
if (interceptor.onCanvasClick(position, cancelAction) === STOP_PROPAGATION) {
// log(this, "Interceptor", interceptor.constructor.name, "catched click");
break;
}
}
}
onCanvasRightClick(position, event) {
this.onCanvasClick(position, event, true);
}
}

View File

@ -12,6 +12,7 @@ export class MinerComponent extends Component {
}
static getSchema() {
// cachedMinedItem is not serialized.
return {
lastMiningTime: types.ufloat,
chainable: types.bool,
@ -25,8 +26,6 @@ export class MinerComponent extends Component {
});
}
/**
*/
constructor({ chainable = false }) {
super();
this.lastMiningTime = 0;
@ -38,6 +37,11 @@ export class MinerComponent extends Component {
* @type {Array<BaseItem>}
*/
this.itemChainBuffer = [];
/**
* @type {BaseItem}
*/
this.cachedMinedItem = null;
}
/**

View File

@ -17,7 +17,6 @@ import { SavegameSerializer } from "../savegame/savegame_serializer";
import { AutomaticSave } from "./automatic_save";
import { MetaHubBuilding } from "./buildings/hub";
import { Camera } from "./camera";
import { CanvasClickInterceptor } from "./canvas_click_interceptor";
import { EntityManager } from "./entity_manager";
import { GameSystemManager } from "./game_system_manager";
import { HubGoals } from "./hub_goals";
@ -98,7 +97,6 @@ export class GameCore {
root.logic = new GameLogic(root);
root.hud = new GameHUD(root);
root.time = new GameTime(root);
root.canvasClickInterceptor = new CanvasClickInterceptor(root);
root.automaticSave = new AutomaticSave(root);
root.soundProxy = new SoundProxy(root);

View File

@ -34,6 +34,7 @@ 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";
export class GameHUD {
/**

View File

@ -176,6 +176,7 @@ export class Blueprint {
tryPlace(root, tile) {
return root.logic.performBulkOperation(() => {
let anyPlaced = false;
const beltsToRegisterLater = [];
for (let i = 0; i < this.entities.length; ++i) {
let placeable = true;
const entity = this.entities[i];
@ -202,10 +203,10 @@ export class Blueprint {
"Can not delete entity for blueprint"
);
if (!root.logic.tryDeleteBuilding(contents)) {
logger.error(
assertAlways(
false,
"Building has replaceable component but is also unremovable in blueprint"
);
return false;
}
}
}
@ -215,10 +216,22 @@ export class Blueprint {
clone.components.StaticMapEntity.origin.addInplace(tile);
root.map.placeStaticEntity(clone);
root.entityMgr.registerEntity(clone);
// Registering a belt immediately triggers a recalculation of surrounding belt
// directions, which is no good when not all belts have been placed. To resolve
// this, only register belts after all entities have been placed.
if (!clone.components.Belt) {
root.entityMgr.registerEntity(clone);
} else {
beltsToRegisterLater.push(clone);
}
anyPlaced = true;
}
}
for (let i = 0; i < beltsToRegisterLater.length; i++) {
root.entityMgr.registerEntity(beltsToRegisterLater[i]);
}
return anyPlaced;
});
}

View File

@ -1,15 +1,15 @@
import { DrawParameters } from "../../../core/draw_parameters";
import { STOP_PROPAGATION } from "../../../core/signal";
import { TrackedState } from "../../../core/tracked_state";
import { makeDiv } from "../../../core/utils";
import { Vector } from "../../../core/vector";
import { T } from "../../../translations";
import { enumMouseButton } from "../../camera";
import { KEYMAPPINGS } from "../../key_action_mapper";
import { BaseHUDPart } from "../base_hud_part";
import { Blueprint } from "./blueprint";
import { makeDiv } from "../../../core/utils";
import { DynamicDomAttach } from "../dynamic_dom_attach";
import { blueprintShape } from "../../upgrades";
import { T } from "../../../translations";
import { BaseHUDPart } from "../base_hud_part";
import { DynamicDomAttach } from "../dynamic_dom_attach";
import { Blueprint } from "./blueprint";
export class HUDBlueprintPlacer extends BaseHUDPart {
createElements(parent) {
@ -34,9 +34,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
const keyActionMapper = this.root.keyMapper;
keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this);
keyActionMapper
.getBinding(KEYMAPPINGS.placement.abortBuildingPlacement)
.add(this.abortPlacement, this);
keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.abortPlacement, this);
keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this);
keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this);
@ -62,10 +60,9 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
}
update() {
this.domAttach.update(this.currentBlueprint.get());
this.trackedCanAfford.set(
this.currentBlueprint.get() && this.currentBlueprint.get().canAfford(this.root)
);
const currentBlueprint = this.currentBlueprint.get();
this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0);
this.trackedCanAfford.set(currentBlueprint && currentBlueprint.canAfford(this.root));
}
/**

View File

@ -38,6 +38,10 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic {
this.buildingInfoElements.tutorialImage = makeDiv(this.element, null, ["buildingImage"]);
this.variantsElement = makeDiv(parent, "ingame_HUD_PlacerVariants");
const compact = this.root.app.settings.getAllSettings().compactBuildingInfo;
this.element.classList.toggle("compact", compact);
this.variantsElement.classList.toggle("compact", compact);
}
initialize() {

View File

@ -1,5 +1,6 @@
import { Math_abs, Math_degrees, Math_round } from "../../../core/builtins";
import { globalConfig } from "../../../core/config";
import { gMetaBuildingRegistry } from "../../../core/global_registries";
import { Signal, STOP_PROPAGATION } from "../../../core/signal";
import { TrackedState } from "../../../core/tracked_state";
import { Vector } from "../../../core/vector";
@ -9,7 +10,6 @@ import { Entity } from "../../entity";
import { KEYMAPPINGS } from "../../key_action_mapper";
import { defaultBuildingVariant, MetaBuilding } from "../../meta_building";
import { BaseHUDPart } from "../base_hud_part";
import { lerp } from "../../../core/utils";
/**
* Contains all logic for the building placer - this doesn't include the rendering
@ -97,10 +97,8 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
keyActionMapper
.getBinding(KEYMAPPINGS.placement.switchDirectionLockSide)
.add(this.switchDirectionLockSide, this);
keyActionMapper
.getBinding(KEYMAPPINGS.placement.abortBuildingPlacement)
.add(this.abortPlacement, this);
keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this);
keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this);
this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this);
// BINDINGS TO GAME EVENTS
@ -220,6 +218,125 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
}
}
/**
* Starts the pipette function
*/
startPipette() {
// Disable in overview
if (this.root.camera.getIsMapOverlayActive()) {
return;
}
const mousePosition = this.root.app.mousePosition;
if (!mousePosition) {
// Not on screen
return;
}
const worldPos = this.root.camera.screenToWorld(mousePosition);
const tile = worldPos.toTileSpace();
const contents = this.root.map.getTileContent(tile);
if (!contents) {
this.currentMetaBuilding.set(null);
return;
}
// Try to extract the building
const extracted = this.hack_reconstructMetaBuildingAndVariantFromBuilding(contents);
if (!extracted) {
this.currentMetaBuilding.set(null);
return;
}
this.currentMetaBuilding.set(extracted.metaBuilding);
this.currentVariant.set(extracted.variant);
this.currentBaseRotation = contents.components.StaticMapEntity.rotation;
// Make sure we selected something, and also make sure it's not a special entity
// if (contents && !contents.components.Unremovable) {
// }
}
/**
* HACK!
*
* This attempts to reconstruct the meta building and its variant from a given entity
* @param {Entity} entity
* @returns {{ metaBuilding: MetaBuilding, variant: string }}
*/
hack_reconstructMetaBuildingAndVariantFromBuilding(entity) {
if (entity.components.Hub) {
// Hub is not copyable
return null;
}
const matches = [];
const metaBuildings = gMetaBuildingRegistry.entries;
for (let i = 0; i < metaBuildings.length; ++i) {
const metaBuilding = metaBuildings[i];
const availableVariants = metaBuilding.getAvailableVariants(this.root);
checkVariant: for (let k = 0; k < availableVariants.length; ++k) {
const variant = availableVariants[k];
let unplaced = metaBuilding.createEntity({
root: this.root,
variant,
origin: new Vector(0, 0),
rotation: 0,
originalRotation: 0,
rotationVariant: 0,
});
// Compare if both entities share the same components
for (let component in entity.components) {
if ((entity.components[component] == null) !== (unplaced.components[component] == null)) {
continue checkVariant;
}
}
// Check for same item processor
if (
entity.components.ItemProcessor &&
entity.components.ItemProcessor.type != unplaced.components.ItemProcessor.type
) {
continue checkVariant;
}
// Check for underground belt
if (
entity.components.UndergroundBelt &&
entity.components.UndergroundBelt.tier != unplaced.components.UndergroundBelt.tier
) {
continue checkVariant;
}
// Check for same sprite key - except for underground belts
// since the sprite may vary here
if (
!entity.components.UndergroundBelt &&
entity.components.StaticMapEntity.spriteKey !=
unplaced.components.StaticMapEntity.spriteKey
) {
continue checkVariant;
}
matches.push({ metaBuilding, variant });
}
}
if (matches.length == 1) {
const staticEntity = entity.components.StaticMapEntity;
const key = staticEntity.spriteKey || staticEntity.blueprintSpriteKey;
assert(
key &&
key.includes(matches[0].metaBuilding.id) &&
(matches[0].variant === defaultBuildingVariant || key.includes(matches[0].variant))
);
return matches[0];
}
return null;
}
switchDirectionLockSide() {
this.currentDirectionLockSide = 1 - this.currentDirectionLockSide;
}
@ -237,28 +354,6 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
}
}
/**
* Canvas click handler
* @param {Vector} mousePos
* @param {boolean} cancelAction
*/
onCanvasClick(mousePos, cancelAction = false) {
if (cancelAction) {
if (this.currentMetaBuilding.get()) {
this.currentMetaBuilding.set(null);
} else {
this.deleteBelowCursor();
}
return STOP_PROPAGATION;
}
if (!this.currentMetaBuilding.get()) {
return;
}
return STOP_PROPAGATION;
}
/**
* Tries to place the current building at the given tile
* @param {Vector} tile
@ -479,13 +574,18 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
}
// Deletion
if (button === enumMouseButton.right && !this.currentMetaBuilding.get()) {
if (button === enumMouseButton.right && !metaBuilding) {
this.currentlyDragging = true;
this.currentlyDeleting = true;
this.lastDragTile = this.root.camera.screenToWorld(pos).toTileSpace();
this.currentMetaBuilding.set(null);
this.deleteBelowCursor();
return STOP_PROPAGATION;
}
// Cancel placement
if (button === enumMouseButton.right && metaBuilding) {
this.currentMetaBuilding.set(null);
}
}
/**

View File

@ -1,123 +1,316 @@
import { makeDiv } from "../../../core/utils";
import { T } from "../../../translations";
import { getStringForKeyCode, KEYMAPPINGS } from "../../key_action_mapper";
import {
getStringForKeyCode,
KEYCODE_LMB,
KEYCODE_MMB,
KEYCODE_RMB,
KEYMAPPINGS,
} from "../../key_action_mapper";
import { BaseHUDPart } from "../base_hud_part";
import { TrackedState } from "../../../core/tracked_state";
import { MetaBuilding } from "../../meta_building";
import { DynamicDomAttach } from "../dynamic_dom_attach";
const DIVIDER_TOKEN = "/";
const ADDER_TOKEN = "+";
/**
* @typedef {{ keyCode: number }} KeyCode
*/
/**
* @typedef {{
* condition: () => boolean,
* keys: Array<KeyCode|number|string>,
* label: string,
* cachedElement?: HTMLElement,
* cachedVisibility?: boolean
* }} KeyBinding
*/
export class HUDKeybindingOverlay extends BaseHUDPart {
initialize() {
this.root.hud.signals.selectedPlacementBuildingChanged.add(
this.onSelectedBuildingForPlacementChanged,
this
);
initialize() {}
this.trackedMapOverviewActive = new TrackedState(this.applyCssClasses, this);
/**
* HELPER / Returns if there is a building selected for placement
* @returns {boolean}
*/
get buildingPlacementActive() {
const placer = this.root.hud.parts.buildingPlacer;
return !this.mapOverviewActive && placer && !!placer.currentMetaBuilding.get();
}
createElements(parent) {
const mapper = this.root.keyMapper;
const getKeycode = id => {
return getStringForKeyCode(mapper.getBinding(id).keyCode);
};
this.element = makeDiv(
parent,
"ingame_HUD_KeybindingOverlay",
[],
`
<div class="binding">
<code class="keybinding leftMouse noPlacementOnly"></code><i class="noPlacementOnly"></i>
<code class="keybinding">${getKeycode(KEYMAPPINGS.navigation.mapMoveUp)}</code>
<code class="keybinding">${getKeycode(KEYMAPPINGS.navigation.mapMoveLeft)}</code>
<code class="keybinding">${getKeycode(KEYMAPPINGS.navigation.mapMoveDown)}</code>
<code class="keybinding">${getKeycode(KEYMAPPINGS.navigation.mapMoveRight)}</code>
<label>${T.ingame.keybindingsOverlay.moveMap}</label>
</div>
<div class="binding noPlacementOnly noOverviewOnly">
<code class="keybinding rightMouse"></code>
<label>${T.ingame.keybindingsOverlay.delete}</label>
</div>
<div class="binding noPlacementOnly overviewOnly">
<code class="keybinding rightMouse"></code>
<label>${T.ingame.keybindingsOverlay.createMarker}</label>
</div>
<div class="binding noPlacementOnly">
<code class="keybinding builtinKey">${getKeycode(
KEYMAPPINGS.massSelect.massSelectStart
)}</code>+
<code class="keybinding leftMouse"></code>
<label>${T.ingame.keybindingsOverlay.selectBuildings}</label>
</div>
<div class="binding placementOnly">
<code class="keybinding leftMouse"></code>
<label>${T.ingame.keybindingsOverlay.placeBuilding}</label>
</div>
<div class="binding placementOnly">
<code class="keybinding rightMouse"></code><i></i>
<code class="keybinding">${getKeycode(KEYMAPPINGS.placement.abortBuildingPlacement)}</code>
<label>${T.ingame.keybindingsOverlay.stopPlacement}</label>
</div>
<div class="binding placementOnly">
<code class="keybinding">${getKeycode(KEYMAPPINGS.placement.rotateWhilePlacing)}</code>
<label>${T.ingame.keybindingsOverlay.rotateBuilding}</label>
</div>
` +
(this.root.app.settings.getAllSettings().alwaysMultiplace
? ""
: `
<div class="binding placementOnly noDirectionLock">
<code class="keybinding builtinKey shift">${getKeycode(
KEYMAPPINGS.placementModifiers.placeMultiple
)}</code>
<label>${T.ingame.keybindingsOverlay.placeMultiple}</label>
</div>`) +
`
<div class="binding placementOnly directionLock">
<code class="keybinding builtinKey shift">${getKeycode(
KEYMAPPINGS.placementModifiers.lockBeltDirection
)}</code>
<label>${T.ingame.keybindingsOverlay.lockBeltDirection}</label>
</div>
<div class="binding placementOnly directionLock">
<code class="keybinding">${getKeycode(KEYMAPPINGS.placement.switchDirectionLockSide)}</code>
<label>${T.ingame.keybindingsOverlay.plannerSwitchSide}</label>
</div>
`
/**
* HELPER / Returns if there is a building selected for placement and
* it supports the belt planner
* @returns {boolean}
*/
get buildingPlacementSupportsBeltPlanner() {
const placer = this.root.hud.parts.buildingPlacer;
return (
!this.mapOverviewActive &&
placer &&
placer.currentMetaBuilding.get() &&
placer.currentMetaBuilding.get().getHasDirectionLockAvailable()
);
}
/**
*
* @param {MetaBuilding} selectedMetaBuilding
* HELPER / Returns if there is a building selected for placement and
* it has multiplace enabled by default
* @returns {boolean}
*/
onSelectedBuildingForPlacementChanged(selectedMetaBuilding) {
this.element.classList.toggle("placementActive", !!selectedMetaBuilding);
this.element.classList.toggle(
"hasDirectionLock",
selectedMetaBuilding && selectedMetaBuilding.getHasDirectionLockAvailable()
get buildingPlacementStaysInPlacement() {
const placer = this.root.hud.parts.buildingPlacer;
return (
!this.mapOverviewActive &&
placer &&
placer.currentMetaBuilding.get() &&
placer.currentMetaBuilding.get().getStayInPlacementMode()
);
}
applyCssClasses() {
this.element.classList.toggle("mapOverviewActive", this.root.camera.getIsMapOverlayActive());
/**
* HELPER / Returns if there is a blueprint selected for placement
* @returns {boolean}
*/
get blueprintPlacementActive() {
const placer = this.root.hud.parts.blueprintPlacer;
return placer && !!placer.currentBlueprint.get();
}
/**
* HELPER / Returns if the belt planner is currently active
* @returns {boolean}
*/
get beltPlannerActive() {
const placer = this.root.hud.parts.buildingPlacer;
return !this.mapOverviewActive && placer && placer.isDirectionLockActive;
}
/**
* HELPER / Returns if there is a last blueprint available
* @returns {boolean}
*/
get lastBlueprintAvailable() {
const placer = this.root.hud.parts.blueprintPlacer;
return placer && !!placer.lastBlueprintUsed;
}
/**
* HELPER / Returns if there is anything selected on the map
* @returns {boolean}
*/
get anythingSelectedOnMap() {
const selector = this.root.hud.parts.massSelector;
return selector && selector.selectedUids.size > 0;
}
/**
* HELPER / Returns if there is a building or blueprint selected for placement
* @returns {boolean}
*/
get anyPlacementActive() {
return this.buildingPlacementActive || this.blueprintPlacementActive;
}
/**
* HELPER / Returns if the map overview is active
* @returns {boolean}
*/
get mapOverviewActive() {
return this.root.camera.getIsMapOverlayActive();
}
/**
* Initializes the element
* @param {HTMLElement} parent
*/
createElements(parent) {
const mapper = this.root.keyMapper;
const k = KEYMAPPINGS;
/** @type {Array<KeyBinding>} */
this.keybindings = [
{
// Move map - Including mouse
label: T.ingame.keybindingsOverlay.moveMap,
keys: [
KEYCODE_LMB,
DIVIDER_TOKEN,
k.navigation.mapMoveUp,
k.navigation.mapMoveLeft,
k.navigation.mapMoveDown,
k.navigation.mapMoveRight,
],
condition: () => !this.anyPlacementActive,
},
{
// Move map - No mouse
label: T.ingame.keybindingsOverlay.moveMap,
keys: [
k.navigation.mapMoveUp,
k.navigation.mapMoveLeft,
k.navigation.mapMoveDown,
k.navigation.mapMoveRight,
],
condition: () => this.anyPlacementActive,
},
{
// [OVERVIEW] Create marker with right click
label: T.ingame.keybindingsOverlay.createMarker,
keys: [KEYCODE_RMB],
condition: () => this.mapOverviewActive && !this.blueprintPlacementActive,
},
{
// Pipette
label: T.ingame.keybindingsOverlay.pipette,
keys: [k.placement.pipette],
condition: () => !this.mapOverviewActive,
},
{
// Cancel placement
label: T.ingame.keybindingsOverlay.stopPlacement,
keys: [KEYCODE_RMB],
condition: () => this.anyPlacementActive,
},
{
// Delete with right click
label: T.ingame.keybindingsOverlay.delete,
keys: [KEYCODE_RMB],
condition: () =>
!this.anyPlacementActive && !this.mapOverviewActive && !this.anythingSelectedOnMap,
},
{
// Area select
label: T.ingame.keybindingsOverlay.selectBuildings,
keys: [k.massSelect.massSelectStart, ADDER_TOKEN, KEYCODE_LMB],
condition: () => !this.anyPlacementActive && !this.anythingSelectedOnMap,
},
{
// Place building
label: T.ingame.keybindingsOverlay.placeBuilding,
keys: [KEYCODE_LMB],
condition: () => this.anyPlacementActive,
},
{
// Rotate
label: T.ingame.keybindingsOverlay.rotateBuilding,
keys: [k.placement.rotateWhilePlacing],
condition: () => this.anyPlacementActive && !this.beltPlannerActive,
},
{
// [BELT PLANNER] Flip Side
label: T.ingame.keybindingsOverlay.plannerSwitchSide,
keys: [k.placement.switchDirectionLockSide],
condition: () => this.beltPlannerActive,
},
{
// Place last blueprint
label: T.ingame.keybindingsOverlay.pasteLastBlueprint,
keys: [k.massSelect.pasteLastBlueprint],
condition: () => !this.blueprintPlacementActive && this.lastBlueprintAvailable,
},
{
// Belt planner
label: T.ingame.keybindingsOverlay.lockBeltDirection,
keys: [k.placementModifiers.lockBeltDirection],
condition: () => this.buildingPlacementSupportsBeltPlanner && !this.beltPlannerActive,
},
{
// [SELECTION] Destroy
label: T.ingame.keybindingsOverlay.delete,
keys: [k.massSelect.confirmMassDelete],
condition: () => this.anythingSelectedOnMap,
},
{
// [SELECTION] Cancel
label: T.ingame.keybindingsOverlay.clearSelection,
keys: [k.general.back],
condition: () => this.anythingSelectedOnMap,
},
{
// [SELECTION] Cut
label: T.ingame.keybindingsOverlay.cutSelection,
keys: [k.massSelect.massSelectCut],
condition: () => this.anythingSelectedOnMap,
},
{
// [SELECTION] Copy
label: T.ingame.keybindingsOverlay.copySelection,
keys: [k.massSelect.massSelectCopy],
condition: () => this.anythingSelectedOnMap,
},
];
if (!this.root.app.settings.getAllSettings().alwaysMultiplace) {
this.keybindings.push({
// Multiplace
label: T.ingame.keybindingsOverlay.placeMultiple,
keys: [k.placementModifiers.placeMultiple],
condition: () => this.anyPlacementActive && !this.buildingPlacementStaysInPlacement,
});
}
this.element = makeDiv(parent, "ingame_HUD_KeybindingOverlay", []);
for (let i = 0; i < this.keybindings.length; ++i) {
let html = "";
const handle = this.keybindings[i];
for (let k = 0; k < handle.keys.length; ++k) {
const key = handle.keys[k];
switch (key) {
case KEYCODE_LMB:
html += `<code class="keybinding leftMouse"></code>`;
break;
case KEYCODE_RMB:
html += `<code class="keybinding rightMouse"></code>`;
break;
case KEYCODE_MMB:
html += `<code class="keybinding middleMouse"></code>`;
break;
case DIVIDER_TOKEN:
html += `<i></i>`;
break;
case ADDER_TOKEN:
html += `+`;
break;
default:
html += `<code class="keybinding">${getStringForKeyCode(
mapper.getBinding(/** @type {KeyCode} */ (key)).keyCode
)}</code>`;
}
}
html += `<label>${handle.label}</label>`;
handle.cachedElement = makeDiv(this.element, null, ["binding"], html);
handle.cachedVisibility = false;
}
}
update() {
this.trackedMapOverviewActive.set(this.root.camera.getIsMapOverlayActive());
for (let i = 0; i < this.keybindings.length; ++i) {
const handle = this.keybindings[i];
const visibility = handle.condition();
if (visibility !== handle.cachedVisibility) {
handle.cachedVisibility = visibility;
handle.cachedElement.classList.toggle("visible", visibility);
}
}
}
}

View File

@ -17,29 +17,7 @@ import { enumHubGoalRewards } from "../../tutorial_goals";
const logger = createLogger("hud/mass_selector");
export class HUDMassSelector extends BaseHUDPart {
createElements(parent) {
const removalKeybinding = this.root.keyMapper
.getBinding(KEYMAPPINGS.massSelect.confirmMassDelete)
.getKeyCodeString();
const abortKeybinding = this.root.keyMapper.getBinding(KEYMAPPINGS.general.back).getKeyCodeString();
const cutKeybinding = this.root.keyMapper
.getBinding(KEYMAPPINGS.massSelect.massSelectCut)
.getKeyCodeString();
const copyKeybinding = this.root.keyMapper
.getBinding(KEYMAPPINGS.massSelect.massSelectCopy)
.getKeyCodeString();
this.element = makeDiv(
parent,
"ingame_HUD_MassSelector",
[],
T.ingame.massSelect.infoText
.replace("<keyDelete>", `<code class='keybinding'>${removalKeybinding}</code>`)
.replace("<keyCut>", `<code class='keybinding'>${cutKeybinding}</code>`)
.replace("<keyCopy>", `<code class='keybinding'>${copyKeybinding}</code>`)
.replace("<keyCancel>", `<code class='keybinding'>${abortKeybinding}</code>`)
);
}
createElements(parent) {}
initialize() {
this.deletionMarker = Loader.getSprite("sprites/misc/deletion_marker.png");
@ -49,6 +27,7 @@ export class HUDMassSelector extends BaseHUDPart {
this.selectedUids = new Set();
this.root.signals.entityQueuedForDestroy.add(this.onEntityDestroyed, this);
this.root.hud.signals.pasteBlueprintRequested.add(this.clearSelection, this);
this.root.camera.downPreHandler.add(this.onMouseDown, this);
this.root.camera.movePreHandler.add(this.onMouseMove, this);
@ -61,7 +40,7 @@ export class HUDMassSelector extends BaseHUDPart {
this.root.keyMapper.getBinding(KEYMAPPINGS.massSelect.massSelectCut).add(this.confirmCut, this);
this.root.keyMapper.getBinding(KEYMAPPINGS.massSelect.massSelectCopy).add(this.startCopy, this);
this.domAttach = new DynamicDomAttach(this.root, this.element);
this.root.hud.signals.selectedPlacementBuildingChanged.add(this.clearSelection, this);
}
/**
@ -83,15 +62,25 @@ export class HUDMassSelector extends BaseHUDPart {
}
}
/**
* Clears the entire selection
*/
clearSelection() {
this.selectedUids = new Set();
}
confirmDelete() {
if (this.selectedUids.size > 100) {
if (
!this.root.app.settings.getAllSettings().disableCutDeleteWarnings &&
this.selectedUids.size > 100
) {
const { ok } = this.root.hud.parts.dialogs.showWarning(
T.dialogs.massDeleteConfirm.title,
T.dialogs.massDeleteConfirm.desc.replace(
"<count>",
"" + formatBigNumberFull(this.selectedUids.size)
),
["cancel:good", "ok:bad"]
["cancel:good:escape", "ok:bad:enter"]
);
ok.add(() => this.doDelete());
} else {
@ -134,14 +123,17 @@ export class HUDMassSelector extends BaseHUDPart {
T.dialogs.blueprintsNotUnlocked.title,
T.dialogs.blueprintsNotUnlocked.desc
);
} else if (this.selectedUids.size > 100) {
} else if (
!this.root.app.settings.getAllSettings().disableCutDeleteWarnings &&
this.selectedUids.size > 100
) {
const { ok } = this.root.hud.parts.dialogs.showWarning(
T.dialogs.massCutConfirm.title,
T.dialogs.massCutConfirm.desc.replace(
"<count>",
"" + formatBigNumberFull(this.selectedUids.size)
),
["cancel:good", "ok:bad"]
["cancel:good:escape", "ok:bad:enter"]
);
ok.add(() => this.doCut());
} else {
@ -230,10 +222,6 @@ export class HUDMassSelector extends BaseHUDPart {
}
}
update() {
this.domAttach.update(this.selectedUids.size > 0);
}
/**
*
* @param {DrawParameters} parameters

View File

@ -5,7 +5,7 @@ import { T } from "../../../translations";
import { createLogger } from "../../../core/logging";
import { StaticMapEntityComponent } from "../../components/static_map_entity";
import { Vector } from "../../../core/vector";
import { Math_max, Math_min } from "../../../core/builtins";
import { Math_max, Math_min, Math_floor } from "../../../core/builtins";
import { makeOffscreenBuffer } from "../../../core/buffer_utils";
import { DrawParameters } from "../../../core/draw_parameters";
import { Rectangle } from "../../../core/rectangle";
@ -56,7 +56,14 @@ export class HUDScreenshotExporter extends BaseHUDPart {
const dimensions = maxChunk.sub(minChunk);
logger.log("Dimensions:", dimensions);
const chunkSizePixels = 128;
let chunkSizePixels = 128;
const maxDimensions = Math_max(dimensions.x, dimensions.y);
if (maxDimensions > 128) {
chunkSizePixels = Math_max(1, Math_floor(128 * (128 / maxDimensions)));
}
logger.log("ChunkSizePixels:", chunkSizePixels);
const chunkScale = chunkSizePixels / (globalConfig.mapChunkSize * globalConfig.tileSize);
logger.log("Scale:", chunkScale);

View File

@ -28,6 +28,8 @@ import { ShapeDefinition } from "../../shape_definition";
*/
const SHAPE_LABEL_PLACEHOLDER = " ";
const MAX_LABEL_LENGTH = 71;
export class HUDWaypoints extends BaseHUDPart {
/**
* Creates the overview of waypoints
@ -220,7 +222,8 @@ export class HUDWaypoints extends BaseHUDPart {
id: "markerName",
label: null,
placeholder: "",
validator: val => val.length > 0 && (val.length < 15 || ShapeDefinition.isValidShortKey(val)),
validator: val =>
val.length > 0 && (val.length < MAX_LABEL_LENGTH || ShapeDefinition.isValidShortKey(val)),
});
const dialog = new DialogWithForm({
app: this.root.app,
@ -270,8 +273,8 @@ export class HUDWaypoints extends BaseHUDPart {
return 1;
}
return this.getWaypointLabel(a)
.padEnd(20, "0")
.localeCompare(this.getWaypointLabel(b).padEnd(20, "0"));
.padEnd(MAX_LABEL_LENGTH, "0")
.localeCompare(this.getWaypointLabel(b).padEnd(MAX_LABEL_LENGTH, "0"));
});
// Show notification about creation

View File

@ -24,7 +24,7 @@ export const KEYMAPPINGS = {
menuOpenStats: { keyCode: key("G") },
toggleHud: { keyCode: 113 }, // F2
exportScreenshot: { keyCode: 114 }, // F3
exportScreenshot: { keyCode: 114 }, // F3PS
toggleFPSInfo: { keyCode: 115 }, // F4
},
@ -56,7 +56,7 @@ export const KEYMAPPINGS = {
},
placement: {
abortBuildingPlacement: { keyCode: key("Q") },
pipette: { keyCode: key("Q") },
rotateWhilePlacing: { keyCode: key("R") },
rotateInverseModifier: { keyCode: 16 }, // SHIFT
cycleBuildingVariants: { keyCode: key("T") },
@ -88,6 +88,10 @@ for (const categoryId in KEYMAPPINGS) {
}
}
export const KEYCODE_LMB = 1;
export const KEYCODE_MMB = 2;
export const KEYCODE_RMB = 3;
/**
* Returns a keycode -> string
* @param {number} code
@ -95,11 +99,11 @@ for (const categoryId in KEYMAPPINGS) {
*/
export function getStringForKeyCode(code) {
switch (code) {
case 1:
case KEYCODE_LMB:
return "LMB";
case 2:
case KEYCODE_MMB:
return "MMB";
case 3:
case KEYCODE_RMB:
return "RMB";
case 4:
return "MB4";

View File

@ -147,10 +147,32 @@ export class MetaBuilding {
* @param {string} param0.variant
*/
createAndPlaceEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) {
const entity = this.createEntity({
root,
origin,
rotation,
originalRotation,
rotationVariant,
variant,
});
root.map.placeStaticEntity(entity);
root.entityMgr.registerEntity(entity);
return entity;
}
/**
* Creates the entity without placing it
* @param {object} param0
* @param {GameRoot} param0.root
* @param {Vector} param0.origin Origin tile
* @param {number=} param0.rotation Rotation
* @param {number} param0.originalRotation Original Rotation
* @param {number} param0.rotationVariant Rotation variant
* @param {string} param0.variant
*/
createEntity({ root, origin, rotation, originalRotation, rotationVariant, variant }) {
const entity = new Entity(root);
const blueprintSprite = this.getBlueprintSprite(rotationVariant, variant);
entity.addComponent(
new StaticMapEntityComponent({
spriteKey:
@ -166,12 +188,8 @@ export class MetaBuilding {
blueprintSpriteKey: blueprintSprite ? blueprintSprite.spriteName : "",
})
);
this.setupEntityComponents(entity, root);
this.updateVariants(entity, rotationVariant, variant);
root.map.placeStaticEntity(entity);
root.entityMgr.registerEntity(entity);
return entity;
}

View File

@ -19,7 +19,6 @@ import { SoundProxy } from "./sound_proxy";
import { Savegame } from "../savegame/savegame";
import { GameLogic } from "./logic";
import { ShapeDefinitionManager } from "./shape_definition_manager";
import { CanvasClickInterceptor } from "./canvas_click_interceptor";
import { HubGoals } from "./hub_goals";
import { BufferMaintainer } from "../core/buffer_maintainer";
import { ProductionAnalytics } from "./production_analytics";
@ -110,9 +109,6 @@ export class GameRoot {
/** @type {BufferMaintainer} */
this.buffers = null;
/** @type {CanvasClickInterceptor} */
this.canvasClickInterceptor = null;
/** @type {AutomaticSave} */
this.automaticSave = null;

View File

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

View File

@ -24,11 +24,17 @@ export class MinerSystem extends GameSystemWithFilter {
// Check if miner is above an actual tile
const minerComp = entity.components.Miner;
const staticComp = entity.components.StaticMapEntity;
const tileBelow = this.root.map.getLowerLayerContentXY(staticComp.origin.x, staticComp.origin.y);
if (!tileBelow) {
continue;
if (!minerComp.cachedMinedItem) {
const staticComp = entity.components.StaticMapEntity;
const tileBelow = this.root.map.getLowerLayerContentXY(
staticComp.origin.x,
staticComp.origin.y
);
if (!tileBelow) {
continue;
}
minerComp.cachedMinedItem = tileBelow;
}
// First, try to get rid of chained items
@ -40,20 +46,9 @@ export class MinerSystem extends GameSystemWithFilter {
}
if (this.root.time.isIngameTimerExpired(minerComp.lastMiningTime, 1 / miningSpeed)) {
const lowerLayerItem = this.root.map.getLowerLayerContentXY(
staticComp.origin.x,
staticComp.origin.y
);
// TODO: Should not be required actually
if (!lowerLayerItem) {
// Nothing below;
continue;
}
if (this.tryPerformMinerEject(entity, lowerLayerItem)) {
if (this.tryPerformMinerEject(entity, minerComp.cachedMinedItem)) {
// Analytics hook
this.root.signals.itemProduced.dispatch(lowerLayerItem);
this.root.signals.itemProduced.dispatch(minerComp.cachedMinedItem);
// Actually mine
minerComp.lastMiningTime = this.root.time.now();
@ -114,18 +109,17 @@ export class MinerSystem extends GameSystemWithFilter {
if (entity && entity.components.Miner) {
const staticComp = entity.components.StaticMapEntity;
const minerComp = entity.components.Miner;
if (!staticComp.shouldBeDrawn(parameters)) {
continue;
}
if (!minerComp.cachedMinedItem) {
continue;
}
const lowerLayerItem = this.root.map.getLowerLayerContentXY(
staticComp.origin.x,
staticComp.origin.y
);
if (lowerLayerItem) {
if (minerComp.cachedMinedItem) {
const padding = 3;
parameters.context.fillStyle = lowerLayerItem.getBackgroundColorAsResource();
parameters.context.fillStyle = minerComp.cachedMinedItem.getBackgroundColorAsResource();
parameters.context.fillRect(
staticComp.origin.x * globalConfig.tileSize + padding,
staticComp.origin.y * globalConfig.tileSize + padding,
@ -134,8 +128,8 @@ export class MinerSystem extends GameSystemWithFilter {
);
}
if (lowerLayerItem) {
lowerLayerItem.draw(
if (minerComp.cachedMinedItem) {
minerComp.cachedMinedItem.draw(
(0.5 + staticComp.origin.x) * globalConfig.tileSize,
(0.5 + staticComp.origin.y) * globalConfig.tileSize,
parameters

View File

@ -80,4 +80,10 @@ export const LANGUAGES = {
code: "no",
region: "",
},
"zh-CN": {
name: "简体中文",
data: require("./built-temp/base-zh-CN.json"),
code: "zh",
region: "CN",
},
};

View File

@ -89,6 +89,33 @@ export const movementSpeeds = [
},
];
export const autosaveIntervals = [
{
id: "one_minute",
seconds: 60,
},
{
id: "two_minutes",
seconds: 120,
},
{
id: "five_minutes",
seconds: 5 * 60,
},
{
id: "ten_minutes",
seconds: 10 * 60,
},
{
id: "twenty_minutes",
seconds: 20 * 60,
},
{
id: "disabled",
seconds: null,
},
];
/** @type {Array<BaseSetting>} */
export const allApplicationSettings = [
new EnumSetting("language", {
@ -160,11 +187,24 @@ export const allApplicationSettings = [
*/
(app, id) => {
applyGameTheme(id);
document.body.setAttribute("data-theme", id);
document.documentElement.setAttribute("data-theme", id);
},
enabled: !IS_DEMO,
}),
new EnumSetting("autosaveInterval", {
options: autosaveIntervals,
valueGetter: interval => interval.id,
textGetter: interval => T.settings.labels.autosaveInterval.intervals[interval.id],
category: categoryGame,
restartRequired: false,
changeCb:
/**
* @param {Application} app
*/
(app, id) => null,
}),
new EnumSetting("refreshRate", {
options: ["60", "100", "144", "165", "250", "500"],
valueGetter: rate => rate,
@ -200,6 +240,8 @@ export const allApplicationSettings = [
new BoolSetting("alwaysMultiplace", categoryGame, (app, value) => {}),
new BoolSetting("enableTunnelSmartplace", categoryGame, (app, value) => {}),
new BoolSetting("vignette", categoryGame, (app, value) => {}),
new BoolSetting("compactBuildingInfo", categoryGame, (app, value) => {}),
new BoolSetting("disableCutDeleteWarnings", categoryGame, (app, value) => {}),
];
export function getApplicationSettingById(id) {
@ -218,11 +260,14 @@ class SettingsStorage {
this.scrollWheelSensitivity = "regular";
this.movementSpeed = "regular";
this.language = "auto-detect";
this.autosaveInterval = "two_minutes";
this.alwaysMultiplace = false;
this.offerHints = true;
this.enableTunnelSmartplace = true;
this.vignette = true;
this.compactBuildingInfo = false;
this.disableCutDeleteWarnings = false;
/**
* @type {Object.<string, number>}
@ -317,6 +362,17 @@ export class ApplicationSettings extends ReadWriteProxy {
return 1;
}
getAutosaveIntervalSeconds() {
const id = this.getAllSettings().autosaveInterval;
for (let i = 0; i < autosaveIntervals.length; ++i) {
if (autosaveIntervals[i].id === id) {
return autosaveIntervals[i].seconds;
}
}
logger.error("Unknown autosave interval id:", id);
return 120;
}
getIsFullScreen() {
return this.getAllSettings().fullscreen;
}
@ -412,7 +468,7 @@ export class ApplicationSettings extends ReadWriteProxy {
}
getCurrentVersion() {
return 12;
return 15;
}
/** @param {{settings: SettingsStorage, version: number}} data */
@ -459,6 +515,21 @@ export class ApplicationSettings extends ReadWriteProxy {
data.version = 12;
}
if (data.version < 13) {
data.settings.compactBuildingInfo = false;
data.version = 13;
}
if (data.version < 14) {
data.settings.disableCutDeleteWarnings = false;
data.version = 14;
}
if (data.version < 15) {
data.settings.autosaveInterval = "two_minutes";
data.version = 15;
}
return ExplainedResult.good();
}
}

View File

@ -26,6 +26,7 @@ The base translation is `base-en.yaml`. It will always contain the latest phrase
- [Lithuanian](base-lt.yaml)
- [Arabic](base-ar.yaml)
- [Norwegian](base-no.yaml)
- [Kroatian](base-hr.yaml)
(If you want to translate into a new language, see below!)

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -686,6 +685,32 @@ settings:
description: >-
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -731,7 +756,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -751,7 +775,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

View File

@ -268,6 +268,10 @@ ingame:
pasteLastBlueprint: Vložit poslední plán
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -303,11 +307,6 @@ ingame:
newUpgrade: Nová aktualizace je k dispozici!
gameSaved: Hra byla uložena.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Stiskni <keyCut> pro vyjmutí, <keyCopy> pro kopírování a <keyDelete> pro zbourání. <keyCancel> ruší výběr.
# The "Upgrades" window
shop:
title: Vylepšení
@ -669,6 +668,31 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Klávesové zkratky
hint: >-
@ -715,7 +739,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Zrušit stavbu
rotateWhilePlacing: Otočit
rotateInverseModifier: >-
Modifikátor: Otočit proti směru hodinových ručiček
@ -734,7 +757,8 @@ keybindings:
massSelectCut: Vyjmout oblast
exportScreenshot: Exportovat celou základnu jako obrázek
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: O hře

View File

@ -239,7 +239,7 @@ dialogs:
blueprintsNotUnlocked:
title: Noch nicht freigeschaltet
desc: >-
Blueprints werden erst in Level 12 freigeschalten!
Blueprints werden erst in Level 12 freigeschaltet!
keybindingsIntroduction:
title: Nützliche Hotkeys
@ -282,15 +282,19 @@ ingame:
createMarker: Marker erstellen
delete: Löschen
pasteLastBlueprint: Letzte Blaupause einfügen
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
lockBeltDirection: Bandplaner aktivieren
plannerSwitchSide: "Planer: Seite wechseln"
cutSelection: Ausschneiden
copySelection: Kopieren
clearSelection: Leere Selektion
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
buildingPlacement:
# Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available.
cycleBuildingVariants: Drücke <key> um zwischen den Varianten zu wählen.
cycleBuildingVariants: Drücke <key>, um zwischen den Varianten zu wählen.
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
@ -319,11 +323,6 @@ ingame:
newUpgrade: Ein neues Upgrade ist verfügbar!
gameSaved: Dein Spiel wurde gespeichert.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Drücke <keyCut> zum Ausschneiden, <keyCopy> zum Kopieren, <keyDelete> zum Entfernen und <keyCancel> um Abzubrechen.
# The "Upgrades" window
shop:
title: Upgrades
@ -538,7 +537,7 @@ storyRewards:
desc: Der <strong>Tunnel</strong> wurde freigeschaltet! Du kannst Items nun unter Gebäuden oder Förderbändern hindurchleiten!
reward_rotater_ccw:
title: gUZS Rotieren
title: Gegen UZS Rotieren
desc: Du hast eine zweite Variante des <strong>Rotierers</strong> freigeschaltet! Damit können Items gegen den Uhrzeigensinn gedreht werden. Wähle den Rotierer aus und <strong>drücke 'T', um auf verschiedene Varianten zuzugreifen</strong>!
reward_miner_chainable:
@ -678,20 +677,45 @@ settings:
super_fast: Sehr schnell
extremely_fast: Extrem schnell
enableTunnelSmartplace:
title: Smart Tunnels
title: Intelligente Tunnel
description: >-
When enabled, placing tunnels will automatically remove unnecessary belts.
This also enables to drag tunnels and excess tunnels will get removed.
Aktiviert das automatische Entfernen von überflüssigen Förderbändern bei der Platzierung von Tunneln.
Außerdem funktioniert das Ziehen von Tunneln und überschüssige werden ebenfalls entfernt.
vignette:
title: Vignette
description: >-
Enables the vignette which darkens the screen corners and makes text easier
to read.
Aktiviert den Vignetteneffekt, der den Rand des Bildschirms zunehmend verdunkelt
und das Lesen der Textfelder vereinfacht.
autosaveInterval:
title: Autosave Interval
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Tastenbelegung
hint: >-
Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene Platzierungsoptionen!
Tipp: Benutze STRG, UMSCH and ALT! Sie aktivieren verschiedene Platzierungsoptionen.
resetKeybindings: Tastenbelegung zurücksetzen.
@ -733,7 +757,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Platzieren abbrechen
rotateWhilePlacing: Rotieren
rotateInverseModifier: >-
Modifier: stattdessen gegen UZS rotieren
@ -741,7 +764,7 @@ keybindings:
confirmMassDelete: Massenlöschung bestätigen
cycleBuildings: Gebäude rotieren
massSelectStart: Halten und ziehen zum beginnen
massSelectStart: Halten und ziehen zum Beginnen
massSelectSelectMultiple: Mehrere Areale markieren
massSelectCopy: Areal kopieren
@ -752,8 +775,9 @@ keybindings:
massSelectCut: Areal ausschneiden
exportScreenshot: Ganze Fabrik als Foto exportieren
mapMoveFaster: Schneller bewegen
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
lockBeltDirection: Bandplaner aktivieren
switchDirectionLockSide: "Planer: Seite wechseln"
pipette: Pipette
about:
title: Über dieses Spiel

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -688,6 +687,31 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -733,7 +757,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -753,7 +776,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

View File

@ -281,10 +281,14 @@ ingame:
toggleHud: Toggle HUD
placeBuilding: Place building
createMarker: Create Marker
delete: Destroy
delete: Delete
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -320,11 +324,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -612,6 +611,19 @@ settings:
large: Large
huge: Huge
autosaveInterval:
title: Autosave Interval
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
scrollWheelSensitivity:
title: Zoom sensitivity
description: >-
@ -688,6 +700,16 @@ settings:
description: >-
Enables the vignette which darkens the screen corners and makes text easier to read.
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100 entities.
keybindings:
title: Keybindings
hint: >-
@ -735,12 +757,12 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
pipette: Pipette
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
cycleBuildingVariants: Cycle Variants
confirmMassDelete: Confirm Mass Delete
confirmMassDelete: Delete area
pasteLastBlueprint: Paste last blueprint
cycleBuildings: Cycle Buildings
lockBeltDirection: Enable belt planner

View File

@ -285,6 +285,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -320,11 +324,6 @@ ingame:
newUpgrade: ¡Una nueva mejora está disponible!
gameSaved: Tu partida ha sido guardada.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Presiona <keyCut> para cortar, <keyCopy> para copiar, <keyDelete> para eliminar y <keyCancel> para cancelar.
# The "Upgrades" window
shop:
title: Mejoras
@ -680,6 +679,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Atajos de Teclado
hint: >-
@ -724,7 +746,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Cancelar Colocación
rotateWhilePlacing: Rotar
rotateInverseModifier: >-
Modificador: Rotar inversamente en su lugar
@ -744,7 +765,8 @@ keybindings:
massSelectCut: Cortar área
exportScreenshot: Exportar toda la base como imagen
mapMoveFaster: Mover más rápido
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: Sobre el Juego

View File

@ -275,7 +275,7 @@ ingame:
# every situation
keybindingsOverlay:
moveMap: Déplacer
selectBuildings: Sélection de la zone
selectBuildings: Sélection d'une zone
stopPlacement: Arrêter le placement
rotateBuilding: Tourner le bâtiment
placeMultiple: Placement multiple
@ -286,8 +286,12 @@ ingame:
createMarker: Créer une balise
delete: Supprimer
pasteLastBlueprint: Copier le dernier patron
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
lockBeltDirection: Utiliser le plannificateur de convoyeurs
plannerSwitchSide: Échanger la direction du plannificateur
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -323,11 +327,6 @@ ingame:
newUpgrade: Une nouvelle amélioration est disponible !
gameSaved: Votre partie a été sauvegardée.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Apuyez sur <keyCut> pour couper, <keyCopy> pour copier, <keyDelete> pour effacer et <keyCancel> pour annuler.
# The "Upgrades" window
shop:
title: Améliorations
@ -682,15 +681,37 @@ settings:
super_fast: Très rapide
extremely_fast: Extrêmement rapide
enableTunnelSmartplace:
title: Smart Tunnels
title: Tunnels intelligents
description: >-
When enabled, placing tunnels will automatically remove unnecessary belts.
This also enables to drag tunnels and excess tunnels will get removed.
Si cette option est sélectionnée, placer des tunnels effacera automatiquement les convoyeurs inutiles.
Cela permet aussi d'étirer les tunnels et les tunnels en surnombre seront effacés.
vignette:
title: Vignette
title: Effet de vignette
description: >-
Enables the vignette which darkens the screen corners and makes text easier
to read.
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
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Contrôles
@ -737,7 +758,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Annuler le placement
rotateWhilePlacing: Pivoter
rotateInverseModifier: >-
Variante: Pivote à gauche
@ -756,8 +776,9 @@ keybindings:
massSelectCut: Couper la sélection
exportScreenshot: Exporter toute la base en tant qu'image.
mapMoveFaster: Se déplacer plus vite
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
lockBeltDirection: Utiliser le plannificateur de convoyeurs
switchDirectionLockSide: "Plannificateur: changer de côté"
pipette: Pipette
about:
title: À propos de ce jeu

805
translations/base-hr.yaml Normal file
View File

@ -0,0 +1,805 @@
#
# GAME TRANSLATIONS
#
# Contributing:
#
# If you want to contribute, please make a pull request on this respository
# and I will have a look.
#
# Placeholders:
#
# Do *not* replace placeholders! Placeholders have a special syntax like
# `Hotkey: <key>`. They are encapsulated within angle brackets. The correct
# translation for this one in German for example would be: `Taste: <key>` (notice
# how the placeholder stayed '<key>' and was not replaced!)
#
# Adding a new language:
#
# If you want to add a new language, ask me in the discord and I will setup
# the basic structure so the game also detects it.
#
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io is a game about building factories to automate the creation and combination of increasingly complex shapes within an infinite map.
# This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page.
# NOTICE:
# - Do not translate the first line (This is the gif image at the start of the store)
# - Please keep the markup (Stuff like [b], [list] etc) in the same format
longText: >-
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
shapez.io is a game about building factories to automate the creation and combination of shapes. Deliver the requested, increasingly complex shapes to progress within the game and unlock upgrades to speed up your factory.
Since the demand raises you will have to scale up your factory to fit the needs - Don't forget about resources though, you will have to expand in the [b]infinite map[/b]!
Since shapes can get boring soon you need to mix colors and paint your shapes with it - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
This game features 18 levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
[b]Standalone Advantages[/b]
[list]
[*] Waypoints
[*] Unlimited Savegames
[*] Dark Mode
[*] More settings
[*] Allow me to further develop shapez.io ❤️
[*] More features in the future!
[/list]
[b]Planned features & Community suggestions[/b]
This game is open source - Anybody can contribute! Besides of that, I listen [b]a lot[/b] to the community! I try to read all suggestions and take as much feedback into account as possible.
[list]
[*] Story mode where buildings cost shapes
[*] More levels & buildings (standalone exclusive)
[*] Different maps, and maybe map obstacles
[*] Configurable map creation (Edit number and size of patches, seed, and more)
[*] More types of shapes
[*] More performance improvements (Although the game already runs pretty good!)
[*] Color blind mode
[*] And much more!
[/list]
Be sure to check out my trello board for the full roadmap! https://trello.com/b/ISQncpJP/shapezio
global:
loading: Loading
error: Error
# How big numbers are rendered, e.g. "10,000"
thousandsDivider: ","
# The suffix for large numbers, e.g. 1.3k, 400.2M, etc.
suffix:
thousands: k
millions: M
billions: B
trillions: T
# Shown for infinitely big numbers
infinite: inf
time:
# Used for formatting past time dates
oneSecondAgo: one second ago
xSecondsAgo: <x> seconds ago
oneMinuteAgo: one minute ago
xMinutesAgo: <x> minutes ago
oneHourAgo: one hour ago
xHoursAgo: <x> hours ago
oneDayAgo: one day ago
xDaysAgo: <x> days ago
# Short formats for times, e.g. '5h 23m'
secondsShort: <seconds>s
minutesAndSecondsShort: <minutes>m <seconds>s
hoursAndMinutesShort: <hours>h <minutes>m
xMinutes: <x> minutes
keys:
tab: TAB
control: CTRL
alt: ALT
escape: ESC
shift: SHIFT
space: SPACE
demoBanners:
# This is the "advertisement" shown in the main menu and other various places
title: Demo Version
intro: >-
Get the standalone to unlock all features!
mainMenu:
play: Play
continue: Continue
newGame: New Game
changelog: Changelog
importSavegame: Import
openSourceHint: This game is open source!
discordLink: Official Discord Server
helpTranslate: Help translate!
madeBy: Made by <author-link>
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
Sorry, but the game is known to run slow on your browser! Get the standalone version or download chrome for the full experience.
savegameLevel: Level <x>
savegameLevelUnknown: Unknown Level
contests:
contest_01_03062020:
title: "Contest #01"
desc: Win <strong>$25</strong> for the coolest base!
longDesc: >-
To give something back to you, I thought it would be cool to make weekly contests!
<br><br>
<strong>This weeks topic:</strong> Build the coolest base!
<br><br>
Here's the deal:<br>
<ul class="bucketList">
<li>Submit a screenshot of your base to <strong>contest@shapez.io</strong></li>
<li>Bonus points if you share it on social media!</li>
<li>I will choose 5 screenshots and propose it to the <strong>discord</strong> community to vote.</li>
<li>The winner gets <strong>$25</strong> (Paypal, Amazon Gift Card, whatever you prefer)</li>
<li>Deadline: 07.06.2020 12:00 AM CEST</li>
</ul>
<br>
I'm looking forward to seeing your awesome creations!
showInfo: View
contestOver: This contest has ended - Join the discord to get noticed about new contests!
dialogs:
buttons:
ok: OK
delete: Delete
cancel: Cancel
later: Later
restart: Restart
reset: Reset
getStandalone: Get Standalone
deleteGame: I know what I do
viewUpdate: View Update
showUpgrades: Show Upgrades
showKeybindings: Show Keybindings
importSavegameError:
title: Import Error
text: >-
Failed to import your savegame:
importSavegameSuccess:
title: Savegame Imported
text: >-
Your savegame has been successfully imported.
gameLoadFailure:
title: Game is broken
text: >-
Failed to load your savegame:
confirmSavegameDelete:
title: Confirm deletion
text: >-
Are you sure you want to delete the game?
savegameDeletionError:
title: Failed to delete
text: >-
Failed to delete the savegame:
restartRequired:
title: Restart required
text: >-
You need to restart the game to apply the settings.
editKeybinding:
title: Change Keybinding
desc: Press the key or mouse button you want to assign, or escape to cancel.
resetKeybindingsConfirmation:
title: Reset keybindings
desc: This will reset all keybindings to their default values. Please confirm.
keybindingsResetOk:
title: Keybindings reset
desc: The keybindings have been reset to their respective defaults!
featureRestriction:
title: Demo Version
desc: You tried to access a feature (<feature>) which is not available in the demo. Consider to get the standalone for the full experience!
oneSavegameLimit:
title: Limited savegames
desc: You can only have one savegame at a time in the demo version. Please remove the existing one or get the standalone!
updateSummary:
title: New update!
desc: >-
Here are the changes since you last played:
upgradesIntroduction:
title: Unlock Upgrades
desc: >-
All shapes you produce can be used to unlock upgrades - <strong>Don't destroy your old factories!</strong>
The upgrades tab can be found on the top right corner of the screen.
massDeleteConfirm:
title: Confirm delete
desc: >-
You are deleting a lot of buildings (<count> to be exact)! Are you sure you want to do this?
massCutConfirm:
title: Confirm cut
desc: >-
You are cutting a lot of buildings (<count> to be exact)! Are you sure you want to do this?
blueprintsNotUnlocked:
title: Not unlocked yet
desc: >-
Complete level 12 to unlock Blueprints!
keybindingsIntroduction:
title: Useful keybindings
desc: >-
This game has a lot of keybindings which make it easier to build big factories.
Here are a few, but be sure to <strong>check out the keybindings</strong>!<br><br>
<code class='keybinding'>CTRL</code> + Drag: Select an area.<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: New Marker
desc: Give it a meaningful name, you can also include a <strong>short key</strong> of a shape (Which you can generate <a href="https://viewer.shapez.io" target="_blank">here</a>)
markerDemoLimit:
desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers!
exportScreenshotWarning:
title: Export screenshot
desc: You requested to export your base as a screenshot. Please note that this can be quite slow for a big base and even crash your game!
ingame:
# This is shown in the top left corner and displays useful keybindings in
# every situation
keybindingsOverlay:
moveMap: Move
selectBuildings: Select area
stopPlacement: Stop placement
rotateBuilding: Rotate building
placeMultiple: Place multiple
reverseOrientation: Reverse orientation
disableAutoOrientation: Disable auto orientation
toggleHud: Toggle HUD
placeBuilding: Place building
createMarker: Create Marker
delete: Destroy
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
buildingPlacement:
# Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available.
cycleBuildingVariants: Press <key> to cycle variants.
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
Hotkey: <key>
infoTexts:
speed: Speed
range: Range
storage: Storage
oneItemPerSecond: 1 item / second
itemsPerSecond: <x> items / s
itemsPerSecondDouble: (x2)
tiles: <x> tiles
# The notification when completing a level
levelCompleteNotification:
# <level> is replaced by the actual level, so this gets 'Level 03' for example.
levelTitle: Level <level>
completed: Completed
unlockText: Unlocked <reward>!
buttonNextLevel: Next Level
# Notifications on the lower right
notifications:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# The "Upgrades" window
shop:
title: Upgrades
buttonUnlock: Upgrade
# Gets replaced to e.g. "Tier IX"
tier: Tier <x>
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
maximumLevel: MAXIMUM LEVEL (Speed x<currentMult>)
# The "Statistics" window
statistics:
title: Statistics
dataSources:
stored:
title: Stored
description: Displaying amount of stored shapes in your central building.
produced:
title: Produced
description: Displaying all shapes your whole factory produces, including intermediate products.
delivered:
title: Delivered
description: Displaying shapes which are delivered to your central building.
noShapesProduced: No shapes have been produced so far.
# Displays the shapes per minute, e.g. '523 / m'
shapesPerMinute: <shapes> / m
# Settings menu, when you press "ESC"
settingsMenu:
playtime: Playtime
buildingsPlaced: Buildings
beltsPlaced: Belts
buttons:
continue: Continue
settings: Settings
menu: Return to menu
# Bottom left tutorial hints
tutorialHints:
title: Need help?
showHint: Show hint
hideHint: Close
# When placing a blueprint
blueprintPlacer:
cost: Cost
# Map markers
waypoints:
waypoints: Markers
hub: HUB
description: Left-click a marker to jump to it, right-click to delete it.<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.
# Interactive tutorial
interactiveTutorial:
title: Tutorial
hints:
1_1_extractor: Place an <strong>extractor</strong> on top of a <strong>circle shape</strong> to extract it!
1_2_conveyor: >-
Connect the extractor with a <strong>conveyor belt</strong> to your hub!<br><br>Tip: <strong>Click and drag</strong> the belt with your mouse!
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.
# All shop upgrades
shopUpgrades:
belt:
name: Belts, Distributor & Tunnels
description: Speed x<currentMult> → x<newMult>
miner:
name: Extraction
description: Speed x<currentMult> → x<newMult>
processors:
name: Cutting, Rotating & Stacking
description: Speed x<currentMult> → x<newMult>
painting:
name: Mixing & Painting
description: Speed x<currentMult> → x<newMult>
# Buildings and their name / description
buildings:
hub:
deliver: Deliver
toUnlock: to unlock
levelShortcut: LVL
belt:
default:
name: &belt Conveyor Belt
description: Transports items, hold and drag to place multiple.
miner: # Internal name for the Extractor
default:
name: &miner Extractor
description: Place over a shape or color to extract it.
chainable:
name: Extractor (Chain)
description: Place over a shape or color to extract it. Can be chained.
underground_belt: # Internal name for the Tunnel
default:
name: &underground_belt Tunnel
description: Allows to tunnel resources under buildings and belts.
tier2:
name: Tunnel Tier II
description: Allows to tunnel resources under buildings and belts.
splitter: # Internal name for the Balancer
default:
name: &splitter Balancer
description: Multifunctional - Evenly distributes all inputs onto all outputs.
compact:
name: Merger (compact)
description: Merges two conveyor belts into one.
compact-inverse:
name: Merger (compact)
description: Merges two conveyor belts into one.
cutter:
default:
name: &cutter Cutter
description: Cuts shapes from top to bottom and outputs both halfs. <strong>If you use only one part, be sure to destroy the other part or it will stall!</strong>
quad:
name: Cutter (Quad)
description: Cuts shapes into four parts. <strong>If you use only one part, be sure to destroy the other parts or it will stall!</strong>
rotater:
default:
name: &rotater Rotate
description: Rotates shapes clockwise by 90 degrees.
ccw:
name: Rotate (CCW)
description: Rotates shapes counter clockwise by 90 degrees.
stacker:
default:
name: &stacker Stacker
description: Stacks both items. If they can not be merged, the right item is placed above the left item.
mixer:
default:
name: &mixer Color Mixer
description: Mixes two colors using additive blending.
painter:
default:
name: &painter Painter
description: &painter_desc Colors the whole shape on the left input with the color from the top input.
mirrored:
name: *painter
description: *painter_desc
double:
name: Painter (Double)
description: Colors the shapes on the left inputs with the color from the top input.
quad:
name: Painter (Quad)
description: Allows to color each quadrant of the shape with a different color.
trash:
default:
name: &trash Trash
description: Accepts inputs from all sides and destroys them. Forever.
storage:
name: Storage
description: Stores excess items, up to a given capacity. Can be used as an overflow gate.
storyRewards:
# Those are the rewards gained from completing the store
reward_cutter_and_trash:
title: Cutting Shapes
desc: You just unlocked the <strong>cutter</strong> - it cuts shapes half from <strong>top to bottom</strong> regardless of its orientation!<br><br>Be sure to get rid of the waste, or otherwise <strong>it will stall</strong> - For this purpose I gave you a trash, which destroys everything you put into it!
reward_rotater:
title: Rotating
desc: The <strong>rotater</strong> has been unlocked! It rotates shapes clockwise by 90 degrees.
reward_painter:
title: Painting
desc: >-
The <strong>painter</strong> has been unlocked - Extract some color veins (just as you do with shapes) and combine it with a shape in the painter to color them!<br><br>PS: If you are colorblind, I'm working on a solution already!
reward_mixer:
title: Color Mixing
desc: The <strong>mixer</strong> has been unlocked - Combine two colors using <strong>additive blending</strong> with this building!
reward_stacker:
title: Combiner
desc: You can now combine shapes with the <strong>combiner</strong>! Both inputs are combined, and if they can be put next to each other, they will be <strong>fused</strong>. If not, the right input is <strong>stacked on top</strong> of the left input!
reward_splitter:
title: Splitter/Merger
desc: The multifunctional <strong>balancer</strong> has been unlocked - It can be used to build bigger factories by <strong>splitting and merging items</strong> onto multiple belts!<br><br>
reward_tunnel:
title: Tunnel
desc: The <strong>tunnel</strong> has been unlocked - You can now tunnel items through belts and buildings with it!
reward_rotater_ccw:
title: CCW Rotating
desc: You have unlocked a variant of the <strong>rotater</strong> - It allows to rotate counter clockwise! To build it, select the rotater and <strong>press 'T' to cycle its variants</strong>!
reward_miner_chainable:
title: Chaining Extractor
desc: You have unlocked the <strong>chaining extractor</strong>! It can <strong>forward its resources</strong> to other extractors so you can more efficiently extract resources!
reward_underground_belt_tier_2:
title: Tunnel Tier II
desc: You have unlocked a new variant of the <strong>tunnel</strong> - It has a <strong>bigger range</strong>, and you can also mix-n-match those tunnels now!
reward_splitter_compact:
title: Compact Balancer
desc: >-
You have unlocked a compact variant of the <strong>balancer</strong> - It accepts two inputs and merges them into one!
reward_cutter_quad:
title: Quad Cutting
desc: You have unlocked a variant of the <strong>cutter</strong> - It allows you to cut shapes in <strong>four parts</strong> instead of just two!
reward_painter_double:
title: Double Painting
desc: You have unlocked a variant of the <strong>painter</strong> - It works as the regular painter but processes <strong>two shapes at once</strong> consuming just one color instead of two!
reward_painter_quad:
title: Quad Painting
desc: You have unlocked a variant of the <strong>painter</strong> - It allows to paint each part of the shape individually!
reward_storage:
title: Storage Buffer
desc: You have unlocked a variant of the <strong>trash</strong> - It allows to store items up to a given capacity!
reward_freeplay:
title: Freeplay
desc: You did it! You unlocked the <strong>free-play mode</strong>! This means that shapes are now randomly generated! (No worries, more content is planned for the standalone!)
reward_blueprints:
title: Blueprints
desc: You can now <strong>copy and paste</strong> parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.<br><br>Pasting it is <strong>not free</strong>, you need to produce <strong>blueprint shapes</strong> to afford it! (Those you just delivered).
# Special reward, which is shown when there is no reward actually
no_reward:
title: Next level
desc: >-
This level gave you no reward, but the next one will! <br><br> PS: Better don't destroy your existing factory - You need <strong>all</strong> those shapes later again to <strong>unlock upgrades</strong>!
no_reward_freeplay:
title: Next level
desc: >-
Congratulations! By the way, more content is planned for the standalone!
settings:
title: Settings
categories:
game: Game
app: Application
versionBadges:
dev: Development
staging: Staging
prod: Production
buildDate: Built <at-date>
labels:
uiScale:
title: Interface scale
description: >-
Changes the size of the user interface. The interface will still scale based on your device resolution, but this setting controls the amount of scale.
scales:
super_small: Super small
small: Small
regular: Regular
large: Large
huge: Huge
scrollWheelSensitivity:
title: Zoom sensitivity
description: >-
Changes how sensitive the zoom is (Either mouse wheel or trackpad).
sensitivity:
super_slow: Super slow
slow: Slow
regular: Regular
fast: Fast
super_fast: Super fast
movementSpeed:
title: Movement speed
description: >-
Changes how fast the view moves when using the keyboard.
speeds:
super_slow: Super slow
slow: Slow
regular: Regular
fast: Fast
super_fast: Super Fast
extremely_fast: Extremely Fast
language:
title: Language
description: >-
Change the language. All translations are user contributed and might be incomplete!
fullscreen:
title: Fullscreen
description: >-
It is recommended to play the game in fullscreen to get the best experience. Only available in the standalone.
soundsMuted:
title: Mute Sounds
description: >-
If enabled, mutes all sound effects.
musicMuted:
title: Mute Music
description: >-
If enabled, mutes all music.
theme:
title: Game theme
description: >-
Choose the game theme (light / dark).
themes:
dark: Dark
light: Light
refreshRate:
title: Simulation Target
description: >-
If you have a 144hz monitor, change the refresh rate here so the game will properly simulate at higher refresh rates. This might actually decrease the FPS if your computer is too slow.
alwaysMultiplace:
title: Multiplace
description: >-
If enabled, all buildings will stay selected after placement until you cancel it. This is equivalent to holding SHIFT permanently.
offerHints:
title: Hints & Tutorials
description: >-
Whether to offer hints and tutorials while playing. Also hides certain UI elements onto a given level to make it easier to get into the game.
enableTunnelSmartplace:
title: Smart Tunnels
description: >-
When enabled, placing tunnels will automatically remove unnecessary belts. This also enables to drag tunnels and excess tunnels will get removed.
vignette:
title: Vignette
description: >-
Enables the vignette which darkens the screen corners and makes text easier to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different placement options.
resetKeybindings: Reset Keybindings
categoryLabels:
general: Application
ingame: Game
navigation: Navigating
placement: Placement
massSelect: Mass Select
buildings: Building Shortcuts
placementModifiers: Placement Modifiers
mappings:
confirm: Confirm
back: Back
mapMoveUp: Move Up
mapMoveRight: Move Right
mapMoveDown: Move Down
mapMoveLeft: Move Left
mapMoveFaster: Move Faster
centerMap: Center Map
mapZoomIn: Zoom in
mapZoomOut: Zoom out
createMarker: Create Marker
menuOpenShop: Upgrades
menuOpenStats: Statistics
toggleHud: Toggle HUD
toggleFPSInfo: Toggle FPS and Debug Info
exportScreenshot: Export whole Base as Image
belt: *belt
splitter: *splitter
underground_belt: *underground_belt
miner: *miner
cutter: *cutter
rotater: *rotater
stacker: *stacker
mixer: *mixer
painter: *painter
trash: *trash
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
cycleBuildingVariants: Cycle Variants
confirmMassDelete: Confirm Mass Delete
pasteLastBlueprint: Paste last blueprint
cycleBuildings: Cycle Buildings
lockBeltDirection: Enable belt planner
switchDirectionLockSide: >-
Planner: Switch side
massSelectStart: Hold and drag to start
massSelectSelectMultiple: Select multiple areas
massSelectCopy: Copy area
massSelectCut: Cut area
placementDisableAutoOrientation: Disable automatic orientation
placeMultiple: Stay in placement mode
placeInverse: Invert automatic belt orientation
pipette: Pipette
about:
title: About this Game
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>
If you want to contribute, check out <a href="<githublink>" target="_blank">shapez.io on github</a>.<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>
The soundtrack was made by <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsen</a> - He's awesome.<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.
changelog:
title: Changelog
demo:
features:
restoringGames: Restoring savegames
importingGames: Importing savegames
oneGameLimit: Limited to one savegame
customizeKeybindings: Customizing Keybindings
exportingBase: Exporting whole Base as Image
settingNotAvailable: Not available in the demo.

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: Egy új fejlesztés elérhető!
gameSaved: A játékod el lett mentve.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Fejlesztések
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: A játékról

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -688,6 +687,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -733,7 +755,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -753,7 +774,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

View File

@ -286,6 +286,10 @@ ingame:
pasteLastBlueprint: ブループリントの内容を設置
lockBeltDirection: ベルトプランナーを有効化
plannerSwitchSide: プランナーが通る側を反転
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -321,11 +325,6 @@ ingame:
newUpgrade: 新しいアップグレードが利用可能です!
gameSaved: ゲームをセーブしました。
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: <keyCut> キーでカット <keyCopy> キーでコピー <keyDelete> キーで削除 <keyCancel> キーでキャンセル
# The "Upgrades" window
shop:
title: アップグレード
@ -686,6 +685,29 @@ settings:
description: >-
画面の隅を暗くして文字を読みやすくするビネットを有効化します。
autosaveInterval:
title: Autosave Interval
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: キー設定
hint: >-
@ -731,7 +753,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: 配置の中止
rotateWhilePlacing: 回転
rotateInverseModifier: >-
Modifier: 逆時計回りにする
@ -751,7 +772,8 @@ keybindings:
exportScreenshot: 工場の全体像を画像出力
mapMoveFaster: より速く移動
lockBeltDirection: ベルトプランナーを有効化
switchDirectionLockSide: 'プランナー: 通る側を切り替え'
switchDirectionLockSide: "プランナー: 通る側を切り替え"
pipette: Pipette
about:
title: このゲームについて

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: 새로운 업그레이드를 할 수 있습니다!
gameSaved: 게임이 저장되었습니다.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: 업그레이드
@ -689,6 +688,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: 키바인딩
hint: >-
@ -734,7 +756,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: 건물 배치 취소
rotateWhilePlacing: 회전
rotateInverseModifier: >-
Modifier: 대신 반시계방향으로 회전
@ -754,7 +775,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: 이 게임의 정보

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

View File

@ -32,7 +32,7 @@ steamPage:
shapez.io is een spel dat draait om het bouwen van fabrieken om steeds complexere vormen te produceren en deze productie te automatiseren. Lever de gevraagde, steeds complexere vormen, om verder te komen in het spel en om upgrades voor je fabrieken te ontgrendelen.
De vraag naar vormen wordt steeds hoger, wat betekent dat je fabriek moet blijven uitbreiden om dit tegemoet te komen. Om de juiste grondstoffen te delven zul je steeds verder in het [b]oneindig grote speelveld[/b] moeten gaan werken!
De vraag naar vormen wordt steeds groter, wat betekent dat je fabriek moet blijven uitbreiden om dit tegemoet te komen. Om de juiste grondstoffen te delven zul je steeds verder in het [b]oneindig grote speelveld[/b] moeten gaan werken!
Omdat simpele vormen snel saai worden, moet je kleuren mengen om de vormen te verven - combineer rode, groene en blauwe grondstoffen om verschillende kleuren te produceren en gebruik deze om de vormen te verven, zodat je de vraag hiernaar tegemoet kan komen.
@ -76,10 +76,10 @@ global:
# The suffix for large numbers, e.g. 1.3k, 400.2M, etc.
suffix:
thousands: d
thousands: k
millions: M
billions: MJ
trillions: B
billions: B
trillions: T
# Shown for infinitely big numbers
infinite: inf
@ -154,7 +154,7 @@ mainMenu:
showInfo: Laat zien
contestOver: Deze competitie is voorbij - word lid van de discord (engelstalig) om berichten te krijgen van nieuwe competities!
continue: Verder
newGame: Niew Spel
newGame: Nieuw Spel
madeBy: Gemaakt door <author-link>
dialogs:
@ -249,11 +249,11 @@ dialogs:
Hier zijn er een aantal, maar zorg dat je <strong>kijkt naar de sneltoetsen</strong>!<br><br>
<code class='keybinding'>CTRL</code> + slepen: selecteer een gebied om te kopiëren / verwijderen.<br>
<code class='keybinding'>SHIFT</code>: Houd ingedrukt om meerdere van het zelfde gebouw te plaatsen.<br>
<code class='keybinding'>ALT</code>: Draai de richting van geplaatste lopende banden om.<br>
<code class='keybinding'>ALT</code>: Houd ingedrukt om de richting van lopende banden om te draaien wanneer je ze plaatst.<br>
createMarker:
title: Nieuwe markering
desc: Give it a meaningful name, you can also include a <strong>short key</strong> of a shape (Which you can generate <a href="https://viewer.shapez.io" target="_blank">here</a>)
desc: Geef het een betekenisvolle naam. Je kunt ook een <strong>icoontje</strong> van een vorm toevoegen (die je <a href="https://viewer.shapez.io" target="_blank">hier</a> kunt maken)
markerDemoLimit:
desc: Je kunt maar twee markeringen plaatsen in de demo. Koop de standalone voor een ongelimiteerde hoeveelheid markeringen!
@ -263,10 +263,9 @@ dialogs:
Je bent veel gebouwen aan het knippen (<count> om precies te zijn)! Weet je zeker dat je dit wil doen?
exportScreenshotWarning:
title: Export screenshot
title: Exporteer screenshot
desc: >-
You requested to export your base as a screenshot. Please note that this can
be quite slow for a big base and even crash your game!
Je hebt aangegeven dat je jouw basis wil exporteren als screenshot. Als je een grote basis hebt kan dit proces langzaam zijn en er zelfs voor zorgen dat je spel crasht!
ingame:
# This is shown in the top left corner and displays useful keybindings in
@ -275,7 +274,7 @@ ingame:
moveMap: Beweeg speelveld
selectBuildings: Selecteer gebied
stopPlacement: Stop met plaatsen
rotateBuilding: Draai een gebouw
rotateBuilding: Draai gebouw
placeMultiple: Plaats meerdere
reverseOrientation: Omgekeerde oriëntatie
disableAutoOrientation: Schakel auto-oriëntatie uit
@ -286,6 +285,10 @@ ingame:
pasteLastBlueprint: Plak de laatst gekopiëerde blauwdruk
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -302,8 +305,8 @@ ingame:
speed: Snelheid
range: Bereik
storage: Opslag
oneItemPerSecond: 1 item / seconde
itemsPerSecond: <x> items / s
oneItemPerSecond: 1 voorwerp / s
itemsPerSecond: <x> voorwerpen / s
itemsPerSecondDouble: (x2)
tiles: <x> tegels
@ -321,11 +324,6 @@ ingame:
newUpgrade: Er is een nieuwe upgrade beschikbaar!
gameSaved: Je spel is opgeslagen.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Druk op <keyCut> om te knippen, <keyCopy> om te kopiëren, <keyDelete> om te verwijderen en <keyCancel> om de selectie te annuleren.
# The "Upgrades" window
shop:
title: Upgrades
@ -337,7 +335,7 @@ ingame:
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
maximumLevel: MAXIMUM LEVEL (Snelheid x<currentMult>)
maximumLevel: MAXIMAAL NIVEAU (Snelheid x<currentMult>)
# The "Statistics" window
statistics:
@ -390,12 +388,12 @@ ingame:
interactiveTutorial:
title: Tutorial
hints:
1_1_extractor: Plaats een <strong>ontginner</strong> op een <strong>cirkelvorm</strong> om deze te ontginnen!
1_1_extractor: Plaats een <strong>ontginner</strong> op een <strong>cirkelvorm</strong> om deze te onttrekken!
1_2_conveyor: >-
Verbind de extractor met een <strong>lopende band</strong> aan je hub!<br><br>Tip: <strong>Klik en sleep</strong> de lopende band met je muis!
Verbind de ontginner met een <strong>lopende band</strong> aan je hub!<br><br>Tip: <strong>Klik en sleep</strong> de lopende band met je muis!
1_3_expand: >-
Dit is <strong>GEEN</strong> nietsdoen-spel! bouw meer extractors en lopende banden om het doel sneller te behalen.<br><br>Tip: Houd <strong>SHIFT</strong> ingedrukt om meerdere extractors 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.
# All shop upgrades
shopUpgrades:
@ -422,11 +420,11 @@ buildings:
miner: # Internal name for the Extractor
default:
name: &miner Ontginner
description: Plaats op een vorm of kleur om deze te ontginnen.
description: Plaats op een vorm of kleur om deze te onttrekken.
chainable:
name: Ontginner (Ketting)
description: Plaats op een vorm of kleur om deze te ontginnen. Kan achter elkaar worden geplaatst.
description: Plaats op een vorm of kleur om deze te onttrekken. Kan achter elkaar worden geplaatst.
underground_belt: # Internal name for the Tunnel
default:
@ -512,12 +510,12 @@ storyRewards:
reward_rotater:
title: Roteren
desc: De <strong>roteerder</strong> is ontgrendeld - ! Het draait vormen 90 graden met de klok mee.
desc: De <strong>roteerder</strong> is ontgrendeld - Het draait vormen 90 graden met de klok mee.
reward_painter:
title: Verven
desc: >-
De <strong>verver</strong> is ontgrendeld - Onttrek wat kleurstoffen (net als met vormen) en combineer deze met een vorm in de verver om ze een kleur te geven!<br><br>PS: Ik werk aan een oplossing voor kleurenblinden!
De <strong>verver</strong> is ontgrendeld - Onttrek wat kleurstoffen (net als met vormen) en combineer deze met een vorm in de verver om de vorm een kleur te geven!<br><br>PS: Ik werk aan een oplossing voor kleurenblinden!
reward_mixer:
title: Kleuren mengen
@ -537,11 +535,11 @@ storyRewards:
reward_rotater_ccw:
title: Roteren (andersom)
desc: Je hebt een variant van de <strong>rotater</strong> ontgrendeld - Het roteert voorwerpen tegen de klok in! Om het te bouwen selecteer je de roteerder en <strong>druk je op 'T' om tussen varianten te wisselen</strong>!
desc: Je hebt een variant van de <strong>roteerder</strong> ontgrendeld - Het roteert voorwerpen tegen de klok in! Om het te bouwen selecteer je de roteerder en <strong>druk je op 'T' om tussen varianten te wisselen</strong>!
reward_miner_chainable:
title: Ketting Extractor
desc: Je hebt de <strong>Ketting extractor</strong> ontgrendeld! Deze kan <strong>grondstoffen doorsturen</strong> naar andere extractors, waardoor je efficiënter grondstoffen kan onttrekken!
title: Ketting-ontginner
desc: Je hebt de <strong>Ketting-ontginner</strong> ontgrendeld! Deze kan <strong>grondstoffen doorsturen</strong> naar andere ontginners, waardoor je efficiënter grondstoffen kan onttrekken!
reward_underground_belt_tier_2:
title: Tunnel Niveau II
@ -585,7 +583,7 @@ storyRewards:
no_reward_freeplay:
title: Volgende level
desc: >-
Gefeliciteerd! By the way, het spel wordt in de toekomst nog verder uitgebereid in de standalone!
Gefeliciteerd! Even tussendoor, het spel wordt in de toekomst nog verder uitgebereid in de standalone!
settings:
title: Opties
@ -677,15 +675,37 @@ settings:
super_fast: Super snel
extremely_fast: Extreem snel
enableTunnelSmartplace:
title: Smart Tunnels
title: Slimme Tunnels
description: >-
When enabled, placing tunnels will automatically remove unnecessary belts.
This also enables to drag tunnels and excess tunnels will get removed.
Wanneer dit aan staat zullen tunnels automatisch onnodige lopende banden verwijderen.
Ook kun je dan tunnels slepen en onnodige tunnels worden ook verwijderd.
vignette:
title: Vignette
description: >-
Enables the vignette which darkens the screen corners and makes text easier
to read.
Schakelt de vignet in, wat de hoeken van het scherm donkerder maakt zodat de tekst makkelijker te lezen is.
autosaveInterval:
title: Autosave Interval
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Sneltoetsen
@ -732,7 +752,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Cancel plaatsen
rotateWhilePlacing: Roteren
rotateInverseModifier: >-
Aanpassing: Roteer tegen de klok in
@ -749,30 +768,31 @@ keybindings:
placeInverse: Omkeren richting lopende band
pasteLastBlueprint: Plak laatst gekopiëerde blauwdruk
massSelectCut: Knip geselecteerd gebied
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
exportScreenshot: Exporteer volledige basis als afbeelding
mapMoveFaster: Beweeg sneller
lockBeltDirection: Schakel lopende band-planner in
switchDirectionLockSide: "Planner: Wissel van kant"
pipette: Pipette
about:
title: Over dit spel
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>
Dit spel is open source en ontwikkeld door <a href="https://github.com/tobspr"
target="_blank">Tobias Springer</a> (dit ben ik).<br><br>
If you want to contribute, check out <a href="<githublink>"
target="_blank">shapez.io on github</a>.<br><br>
Als je ook bij wil dragen, ga dan naar <a href="<githublink>"
target="_blank">shapez.io op github</a>.<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>
Dit spel was niet mogelijk geweest zonder de geweldige discord community
rondom mijn spellen - Je zou eens lid moeten worden van de <a href="<discordlink>"
target="_blank">discord server</a> (engelstalig)!<br><br>
The soundtrack was made by <a href="https://soundcloud.com/pettersumelius"
target="_blank">Peppsen</a> - He's awesome.<br><br>
De muziek is gemaakt door <a href="https://soundcloud.com/pettersumelius"
target="_blank">Peppsen</a> - Hij is geweldig.<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.
Tot slot wil ik mijn beste vriend <a
href="https://github.com/niklas-dahl" target="_blank">Niklas</a> bedanken - Zonder onze
factorio-sessies zou dit spel nooit bestaan hebben.
changelog:
title: Changelog
@ -783,6 +803,6 @@ demo:
importingGames: Savegames importeren
oneGameLimit: Gelimiteerd tot één savegame
customizeKeybindings: Custom sneltoetsen
exportingBase: Exporting whole Base as Image
exportingBase: Exporteer volledige basis als afbeelding
settingNotAvailable: Niet beschikbaar in de demo.

View File

@ -285,6 +285,10 @@ ingame:
pasteLastBlueprint: Lim inn forrige blåkopi
lockBeltDirection: Aktiver båndplanleggeren
plannerSwitchSide: Flipp båndplanleggeren
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -320,11 +324,6 @@ ingame:
newUpgrade: En ny oppgradering er tilgjengelig!
gameSaved: Spillet ditt er lagret.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Trykk <keyCut> for å klippe, <keyCopy> for å kopiere, <keyDelete> for å slette, og <keyCancel> for å avbryte.
# The "Upgrades" window
shop:
title: Oppgraderinger
@ -687,6 +686,29 @@ settings:
Aktiverer vignett som gjør hjørnene på skjermen mørkere og teksten lettere
å lese.
autosaveInterval:
title: Autosave Interval
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Hurtigtaster
hint: >-
@ -734,7 +756,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Avbryt Plassering
rotateWhilePlacing: Roter
rotateInverseModifier: >-
Alternativ: Roter mot klokken isteden
@ -752,7 +773,8 @@ keybindings:
placeMultiple: Forbli i plasseringsmodus
placeInverse: Inverter automatisk transportbånd orientering
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: Om dette spillet

View File

@ -21,7 +21,7 @@
steamPage:
# This is the short text appearing on the steam page
shortText: shapez.io to gra polegająca na budowaniu automatycznej fabryki różnych, z każdym poziomem bardziej skomplikowanych kształtów, na mapie która nie ma końca.
shortText: shapez.io to gra polegająca na budowaniu fabryki automatyzującej tworzenie i łączenie ze sobą coraz bardziej skomplikowanych kształtów na mapie, która nie ma końca.
# This is the long description for the steam page - It is contained here so you can help to translate it, and I will regulary update the store page.
# NOTICE:
@ -30,13 +30,13 @@ steamPage:
longText: >-
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img]
shapez.io jest grą o budowaniu i automatyzacji fabryki różnych kształtów. Dostarczaj coraz bardziej skomplikowane kształty, żeby odblokować nowe ulepszenia żeby przyspieszyć produkcję w twojej fabryce.
shapez.io jest grą o budowaniu i automatyzacji fabryki różnych kształtów. Dostarczaj coraz bardziej skomplikowane kształty, żeby odblokować nowe ulepszenia i przyspieszyć produkcję w twojej fabryce.
Będziesz potrzebował produkować coraz więcej elementów, więc potrzebujesz również sporo miejsca na powiększanie fabryki. [b]Nieskończona mapa[/b] to coś co ułatwi Ci ten proces!
Będziesz potrzebował coraz więcej elementów, więc również sporo miejsca na powiększanie fabryki. [b]Nieskończona mapa[/b] to coś co ułatwi Ci ten proces!
Same kształty mogą z czasem być nudne, dlatego gra będzie wymagała od Ciebie malowania kształtów różnymi kolorami - Połącz czerwoną, zieloną i niebieską farbę, a powstanie farba o innym kolorze. Korzystaj z farb by postępować z kolejnymi poziomami.
Same kształty mogą z czasem być nudne, dlatego gra będzie wymagała od Ciebie malowania ich różnymi kolorami - połącz czerwoną, zieloną i niebieską farbę, a powstanie nowa o innym kolorze. Korzystaj z farb, by móc ukończyć kolejne poziomy.
Na tą chwilę gra oferuje 18 poziomów (które powinny zagwarantować rozrywkę na conajmniej kilka godzin!) ale bez przerwy dodaję nowe - Jest naprawdę wiele do dodania!
Na tę chwilę gra oferuje 18 poziomów (które powinny zagwarantować rozrywkę na co najmniej kilka godzin!), ale bez przerwy dodaję nowe - jest naprawdę wiele do dodania!
[b]Zalety pełnej wersji[/b]
@ -46,21 +46,21 @@ steamPage:
[*] Nielimitowana ilość zapisanych gier
[*] Ciemny motyw gry
[*] Więcej ustawień
[*] Pomóż mi w dalszym rozwijaniu shapez.io ❤️
[*] Pomożesz mi w dalszym rozwijaniu shapez.io ❤️
[*] Więcej zawartości niedługo!
[/list]
[b]Zaplanowana zawartość & Sugestie społeczności[/b]
Ta gra jest open-source - Kaźdy może pomóc w rozwoju! Poza tym, słucham tego co społeczność ma do powiedenia w kwestii gry! Staram się czytać wszystkie sugestie i odbierać jak najwięcej informacji zwrotnych na temat gry.
Ta gra jest open-source - Każdy może pomóc w rozwoju! Poza tym słucham tego, co społeczność ma do powiedzenia w kwestii gry! Staram się czytać wszystkie sugestie i odbierać jak najwięcej informacji zwrotnych na temat gry.
[list]
[*] Kampania, gdzie do budowy potrzeba kształtów
[*] Więcej poziomów i budynków (tylko w pełnej wersji)
[*] Inne mapy, może z przeszkodami
[*] Możliwość modyfikowania parametrów generowanjej mapy (Ilość i rozmiar surowców, ziarno świata, itd.)
[*] Możliwość modyfikowania parametrów generowanej mapy (ilość i rozmiar surowców, ziarno świata, itd.)
[*] Więcej rodzajów kształtów
[*] Optymalizacja (Mimo wszystko gra już działa dośc płynnie!)
[*] Optymalizacja (mimo wszystko gra już działa dość płynnie!)
[*] Tryb dla ślepoty barw
[*] I wiele więcej!
[/list]
@ -117,7 +117,7 @@ demoBanners:
# This is the "advertisement" shown in the main menu and other various places
title: Wersja demo
intro: >-
Kup pełną wersję gry, by odblokować więcej funckji!
Kup pełną wersję gry, by odblokować więcej funkcji!
mainMenu:
play: Rozpocznij
@ -207,11 +207,11 @@ dialogs:
editKeybinding:
title: Zmień klawiszologię
desc: Naciśnij klawisz bądź przycisk myszy który chcesz przypisać, lub wciśnij Escape aby anulować.
desc: Naciśnij klawisz bądź przycisk myszy, który chcesz przypisać lub wciśnij Escape, aby anulować.
resetKeybindingsConfirmation:
title: Zresetuj klawiszologię
desc: Ta akcja zresetuje wszystkie ustawienia klawiszologii do domyśnych wartości. Proszę potwierdzić.
desc: Ta akcja zresetuje wszystkie ustawienia klawiszologii do domyślnych wartości. Proszę potwierdzić.
keybindingsResetOk:
title: Reset Klawiszologii
@ -233,7 +233,7 @@ dialogs:
upgradesIntroduction:
title: Ulepszenia
desc: >-
Wszystkie kształty które produkujesz mogą zostać użyte do ulepszeń - <strong>Nie niszcz starych fabryk!</strong>
Wszystkie kształty, które produkujesz, mogą zostać użyte do ulepszeń - <strong>Nie niszcz starych fabryk!</strong>
Zakładka "Ulepszenia" dostępna jest w prawym górnym rogu.
massDeleteConfirm:
@ -253,7 +253,7 @@ dialogs:
Oto kilka z nich, lecz nie zmienia to faktu iż <strong>warto sprawdzić dostępne kombinacje</strong>!<br><br>
<code class='keybinding'>CTRL</code> + Przeciąganie: Zaznacz obszar do kopiowania/usuwania.<br>
<code class='keybinding'>SHIFT</code>: Przytrzymaj, by wstawić więcej niż jeden budynek.<br>
<code class='keybinding'>ALT</code>: Odwróć orientacje stawianych taśmociągów.<br>
<code class='keybinding'>ALT</code>: Odwróć orientację stawianych taśmociągów.<br>
createMarker:
title: Nowy Znacznik
@ -271,7 +271,7 @@ dialogs:
title: Tworzenie zrzutu fabryki
desc: >-
Zamierzasz wyeksportować swoją fabrykę jako zrzut ekranu. W przypadku dużej
fabryki ta akja może być bardzo wolna, a nawet może spowodować zawieszenie się lub awarię gry!
fabryki ta akcja może być bardzo wolna, a nawet może spowodować zawieszenie się lub awarię gry!
Czy na pewno chcesz kontynuować?
ingame:
@ -283,15 +283,19 @@ ingame:
stopPlacement: Przestań stawiać
rotateBuilding: Obróć budynek
placeMultiple: Postaw więcej
reverseOrientation: Odwróć orientacje
disableAutoOrientation: Wyłącz orientacje automatyczną
reverseOrientation: Odwróć orientację
disableAutoOrientation: Wyłącz orientację automatyczną
toggleHud: Przełącz widoczność interfejsu
placeBuilding: Postaw budynek
createMarker: Stwórz znacznik
delete: Usuń
pasteLastBlueprint: Wklej ostatnio skopiowany obszar
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
lockBeltDirection: Tryb planowania taśmociągu
plannerSwitchSide: Obróć planowany taśmociąg
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -327,11 +331,6 @@ ingame:
newUpgrade: Nowe ulepszenie dostępne!
gameSaved: Postęp gry został zapisany.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Naciśnij <keyCut> by wyciąć, <keyCopy> by skopiować, <keyDelete> by usunąć lub <keyCancel> by anulować.
# The "Upgrades" window
shop:
title: Ulepszenia
@ -392,18 +391,18 @@ ingame:
waypoints:
waypoints: Znaczniki
hub: Budynek Główny
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.
# Interactive tutorial
interactiveTutorial:
title: Tutorial
hints:
1_1_extractor: Postaw <strong>ekstraktor</strong> na źródle <strong>kształtu koła</strong> aby go wydobyć!
1_1_extractor: Postaw <strong>ekstraktor</strong> na źródle <strong>kształtu koła</strong>, aby go wydobyć!
1_2_conveyor: >-
Połącz ekstraktor <strong>taśmociągiem</strong> do głównego budynku!<br><br>Porada: <strong>Kliknij i przeciągnij</strong> taśmociąg myszką!
1_3_expand: >-
To <strong>NIE JEST</strong> gra "do poczekania"! Buduj więcej taśmociągów i ekstraktorów by wydobywać szybciej.<br><br>Porada: Przytrzymaj <strong>SHIFT</strong> by postawić wiele ekstratkorów. Naciśnij <strong>R</strong>, by je obracać.
To <strong>NIE JEST</strong> gra "do poczekania"! Buduj więcej taśmociągów i ekstraktorów, by wydobywać szybciej.<br><br>Porada: Przytrzymaj <strong>SHIFT</strong>, by postawić wiele ekstraktorów. Naciśnij <strong>R</strong>, by je obracać.
# All shop upgrades
shopUpgrades:
belt:
@ -429,7 +428,7 @@ buildings:
belt:
default:
name: &belt Taśmociąg
description: Transportuje obiekty, przytrzymaj by postawić kilka.
description: Transportuje obiekty, przytrzymaj i przeciągnij, by postawić kilka.
miner: # Internal name for the Extractor
default:
@ -497,10 +496,10 @@ buildings:
description: &painter_desc Koloruje kształt za pomocą koloru dostarczonego od boku.
double:
name: Malarz (Podwójny)
description: Koloruje kształt za pomocą koloru dostarczonych od boku. Koloruje 2 kształty używając 1 barwnika.
description: Koloruje kształt za pomocą koloru dostarczonego od boku. Koloruje 2 kształty używając 1 barwnika.
quad:
name: Malarz (Poczwórny)
description: Koloruje każdą ćwiarkę kształtu na inny kolor, używając dostarczonych kolorów.
description: Koloruje każdą ćwiartkę kształtu na inny kolor, używając dostarczonych kolorów.
mirrored:
name: *painter
description: *painter_desc
@ -519,18 +518,18 @@ storyRewards:
reward_cutter_and_trash:
title: Przecinanie Kształtów
desc: >-
Odblokowano nową maszynę: <strong>przecinak</strong> - tnie kształt na pół <strong>pionowo - od góry do dołu</strong>, niezależnie od orientacji!<br><br>Upewnij się że zniszczysz nichciane kawałki, ponieważ <strong>może się zatkać</strong> - Na potrzeby tego otrzymujesz też kosz - niszczy wszystko co do niego przekierujesz!
Odblokowano nową maszynę: <strong>Przecinak</strong> - tnie kształt na pół <strong>pionowo - od góry do dołu</strong>, niezależnie od orientacji!<br><br>Upewnij się, że zniszczysz niechciane kawałki, ponieważ <strong>może się zatkać</strong> - Na potrzeby tego otrzymujesz też kosz - niszczy wszystko co do niego przekierujesz!
reward_rotater:
title: Obracanie
desc: >-
Odblokowano nową maszynę: <strong>Obracacz</strong>! Obraca wejście o 90 stopni zgodnie z wskazówkami zegara.
Odblokowano nową maszynę: <strong>Obracacz</strong>! Obraca wejście o 90 stopni zgodnie ze wskazówkami zegara.
#2nd translator's note: "Color objects" should be translated as "dye"
reward_painter:
title: Malowanie
desc: >-
Odblokowano nową maszynę: <strong>Malarz</strong> - Wydobądź barwniki (tak jak w przypadku kształtów) i połącz z kształtem by go pomalować!<br><br>PS: Jeśli cierpisz na ślepotę barw, pracuje nad tym!
Odblokowano nową maszynę: <strong>Malarz</strong> - Wydobądź barwniki (tak jak w przypadku kształtów) i połącz z kształtem, by go pomalować!<br><br>PS: Jeśli cierpisz na ślepotę barw, pracuję nad tym!
reward_mixer:
title: Mieszanie
@ -544,7 +543,7 @@ storyRewards:
reward_splitter:
title: Rozdzielacz/Łącznik
desc: Wielofunkcyjne urządzenie <strong>balansujące</strong> zostało odblokowane - Może zostać wykorzystane do tworzenia większych fabryk poprzez <strong>rozdzielanie i łaczenie taśmociągów</strong>!<br><br>
desc: Wielofunkcyjne urządzenie <strong>balansujące</strong> zostało odblokowane - Może zostać wykorzystane do tworzenia większych fabryk poprzez <strong>rozdzielanie i łączenie taśmociągów</strong>!<br><br>
reward_tunnel:
title: Tunel
@ -552,11 +551,11 @@ storyRewards:
reward_rotater_ccw:
title: Obracanie odwrotne
desc: Odblokowano nowy wariant <strong>Obracacza</strong> - Pozwala odwracać przeciwnie do wskazówek zegara! Aby zbudować, zaznacz Obracacz i <strong>naciśnij 'T' by zmieniać warianty</strong>!
desc: Odblokowano nowy wariant <strong>Obracacza</strong> - Pozwala odwracać przeciwnie do wskazówek zegara! Aby zbudować, zaznacz Obracacz i <strong>naciśnij 'T', by zmieniać warianty</strong>!
reward_miner_chainable:
title: Wydobycie Łańcuchowe
desc: Odblokowano nowy wariant <strong>ekstraktora</strong>! Może <strong>przekierować obiekty</strong> do ekstraktorów przed nim zwiększając efektywność wydbobycia!
desc: Odblokowano nowy wariant <strong>ekstraktora</strong>! Może <strong>przekierować obiekty</strong> do ekstraktorów przed nim, zwiększając efektywność wydobycia!
reward_underground_belt_tier_2:
title: Tunel Poziomu II
@ -574,11 +573,11 @@ storyRewards:
reward_painter_double:
title: Podwójne Malowanie
desc: Odblokowano nowy wariant <strong>Malarza</strong> - Działa jak zwykły malarz, z tą różnicą że maluje <strong>dwa kształty na raz</strong> pobierając wyłącznie jeden barwnik!
desc: Odblokowano nowy wariant <strong>Malarza</strong> - Działa jak zwykły malarz, z tą różnicą, że maluje <strong>dwa kształty na raz</strong>, pobierając wyłącznie jeden barwnik!
reward_painter_quad:
title: Poczwórne malowanie
desc: Odblokowano nowy wariant <strong>Malarza</strong> - Pozwala malować każdą ćwiarkę kształtu na inny kolor!
desc: Odblokowano nowy wariant <strong>Malarza</strong> - Pozwala malować każdą ćwiartkę kształtu na inny kolor!
reward_storage:
title: Magazyn
@ -601,7 +600,7 @@ storyRewards:
no_reward:
title: Następny Poziom
desc: >-
Ten poziom nie daje nagrody, lecz kolejny już tak! <br><br> PS: Lepiej nie niszczyć istniejących fabryk - Potrzebujesz <strong>wszystkich</strong> kształtów w późniejszych etapach by <strong>odblokować ulepszenia</strong>!
Ten poziom nie daje nagrody, lecz kolejny już tak! <br><br> PS: Lepiej nie niszczyć istniejących fabryk - Potrzebujesz <strong>wszystkich</strong> kształtów w późniejszych etapach, by <strong>odblokować ulepszenia</strong>!
no_reward_freeplay:
title: Następny Poziom
@ -686,7 +685,7 @@ settings:
refreshRate:
title: Częstość Odświeżania
description: >-
Jeśli posiadasz monitor z częstotliwością odświeżania 144hz, zmień tę opcje na poprawną częstotliwość odświeżania ekranu. To może wpłynąć na FPS jeśli masz za wolny komputer.
Jeśli posiadasz monitor z częstotliwością odświeżania 144hz, zmień tę opcje na poprawną częstotliwość odświeżania ekranu. Może to wpłynąć na FPS jeśli masz za wolny komputer.
alwaysMultiplace:
title: Wielokrotne budowanie
@ -696,18 +695,40 @@ settings:
offerHints:
title: Porady i Tutoriale
description: >-
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:
title: Smart Tunnels
description: >-
When enabled, placing tunnels will automatically remove unnecessary belts.
This also enables to drag tunnels and excess tunnels will get removed.
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.
vignette:
title: Vignette
description: >-
Enables the vignette which darkens the screen corners and makes text easier
to read.
Włącza winietowanie, które przyciemnia rogi ekranu i poprawia czytelność tekstu.
autosaveInterval:
title: Autosave Interval
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Klawiszologia
@ -742,7 +763,7 @@ keybindings:
menuOpenStats: Statystyki
toggleHud: Przełącz widoczność interfejsu
toggleFPSInfo: Pokaż Licznik FPS i infomacje do debugowania
toggleFPSInfo: Pokaż Licznik FPS i informacje do debugowania
belt: *belt
splitter: *splitter
underground_belt: *underground_belt
@ -754,26 +775,26 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Anuluj Stawianie
rotateWhilePlacing: Obróć
rotateInverseModifier: >-
Modyfikator: Obróć Odrwotnie
Modyfikator: Obróć Odwrotnie
cycleBuildingVariants: Zmień Wariant
confirmMassDelete: Potwierdź usuwanie
cycleBuildings: Zmień Budynek
massSelectStart: Przytrzymaj i przeciągnij by zaznaczyć
massSelectStart: Przytrzymaj i przeciągnij, by zaznaczyć
massSelectSelectMultiple: Zaznacz kilka obszarów
massSelectCopy: Skopiuj obszar
placementDisableAutoOrientation: Wyłącz automatyczną orientacje
placementDisableAutoOrientation: Wyłącz automatyczną orientację
placeMultiple: Pozostań w trybie stawiania
placeInverse: Odwróć automatyczną orientacje pasów
placeInverse: Odwróć automatyczną orientację pasów
pasteLastBlueprint: Wklej ostatnio skopiowany obszar
massSelectCut: Wytnij obszar
exportScreenshot: Wyeksportuj całą fabrykę jako zrzut ekranu
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
lockBeltDirection: Tryb planowania taśmociągu
switchDirectionLockSide: "Planowanie taśmociągu: Zmień stronę"
pipette: Pipette
about:
title: O Grze
@ -782,7 +803,7 @@ about:
Jeżeli chcesz pomóc w rozwoju gry, sprawdź <a href="<githublink>" target="_blank">repozytorium shapez.io na Githubie</a>.<br><br>
Ta gra nie byłaby możliwa bez wspaniałej społeczności Discord skupionej na moich grach - Naprawdę powinieneś dołączyć do <a href="<discordlink>" target="_blank">mojego serwera Discord</a>!<br><br>
Ścieżka dźwiękowa tej gry została stworzona przez <a href="https://soundcloud.com/pettersumelius" target="_blank">Peppsena</a> - Jest niesamowity.<br><br>
Na koniec, wielkie dzięki mojemu najlepszemu przyjacielowi: <a href="https://github.com/niklas-dahl" target="_blank">Niklas</a> - Bez naszego wspólnego grania w Factorio, ta gra nigdy by nie powstała.
Na koniec, wielkie dzięki mojemu najlepszemu przyjacielowi: <a href="https://github.com/niklas-dahl" target="_blank">Niklas</a> - Bez naszego wspólnego grania w Factorio ta gra nigdy by nie powstała.
changelog:
title: Dziennik zmian

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Colar último projeto
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: Nova melhoria disponível!
gameSaved: Seu jogo foi salvo.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Pressione <keyCut> para cortar, <keyCopy> para copiar, <keyDelete> para destruir e <keyCancel> para cancelar.
# The "Upgrades" window
shop:
title: Melhorias
@ -688,6 +687,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Controles
hint: >-
@ -733,7 +755,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Cancelar
rotateWhilePlacing: Rotacionar
rotateInverseModifier: >-
Modifier: Rotação anti-horária
@ -753,7 +774,8 @@ keybindings:
exportScreenshot: Exportar base inteira como imagem
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: Sobre o jogo

View File

@ -286,6 +286,10 @@ ingame:
pasteLastBlueprint: Colar o último blueprint
lockBeltDirection: Ativa o planeamento de tapetes
plannerSwitchSide: Lado de rotação do planeamento
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -321,11 +325,6 @@ ingame:
newUpgrade: Está disponível um novo upgrade!
gameSaved: O teu jogo foi gravado.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Clica <keyCut> para cortar, <keyCopy> para copiar, <keyDelete> para remover e <keyCancel> para cancelar.
# The "Upgrades" window
shop:
title: Upgrades
@ -686,6 +685,29 @@ settings:
Ativa a vinheta, que escurece os cantos do ecrã e torna a leitura do texto
mais fácil.
autosaveInterval:
title: Autosave Interval
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Atalhos
hint: >-
@ -731,7 +753,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Cancelar posicionamento
rotateWhilePlacing: Rotação
rotateInverseModifier: >-
Modifier: Rotação CCW
@ -751,7 +772,8 @@ keybindings:
exportScreenshot: Exportar a base como uma imagem
mapMoveFaster: Mover rapidamente
lockBeltDirection: Ativa o planeamento de tapetes
switchDirectionLockSide: 'Planeador: Troca o lado'
switchDirectionLockSide: "Planeador: Troca o lado"
pipette: Pipette
about:
title: Sobre o jogo
body: >-

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

View File

@ -76,10 +76,10 @@ global:
# The suffix for large numbers, e.g. 1.3k, 400.2M, etc.
suffix:
thousands: тыс.
millions: млн
billions: млрд
trillions: трлн
thousands: k
millions: M
billions: B
trillions: T
# Shown for infinitely big numbers
infinite:
@ -120,7 +120,7 @@ demoBanners:
mainMenu:
play: Играть
changelog: Список изменений
importSavegame: Импортировать сохраненную игру
importSavegame: Импорт
openSourceHint: Это игра с открытым исходным кодом!
discordLink: Оффициальный Дискорд Сервер
helpTranslate: Помоги с переводом!
@ -156,7 +156,7 @@ mainMenu:
contestOver: Этот конкурс закончился - присоединяйтесь в дискорде, чтобы получать уведомления о новых конкурсах!
continue: Продолжить
newGame: Новая Игра
madeBy: Создано <author-link>
madeBy: Создал <author-link>
dialogs:
buttons:
@ -289,6 +289,10 @@ ingame:
pasteLastBlueprint: Вставить последний чертеж
lockBeltDirection: Включить конвейерный планировщик
plannerSwitchSide: Поменять местами стороны планировщика
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -324,11 +328,6 @@ ingame:
newUpgrade: Новое улучшение доступно!
gameSaved: Игра сохранена.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: <keyCut> - Вырезать; <keyCopy> - Копировать; <keyDelete> - Удалить; <keyCancel> - Отменить.
# The "Upgrades" window
shop:
title: Улучшения
@ -340,7 +339,7 @@ ingame:
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
maximumLevel: МАКСИМАЛЬНЫЙ УРОВЕНЬ (Скорость x<currentMult>)
maximumLevel: Скорость x<currentMult> (макс.)
# The "Statistics" window
statistics:
@ -476,8 +475,8 @@ buildings:
mixer:
default:
name: &mixer Смеситель
description: Смешивает два цвета с помощью аддитивного смешивания.
name: &mixer Смешиватель
description: Аддитивно смешивает цвета двух красителей.
painter:
default:
@ -523,7 +522,7 @@ storyRewards:
reward_mixer:
title: Смешивание Цветов
desc: Разблокирован <strong>смеситель</strong>! Объедините два цвета в этом здании, используя <strong>аддитивное смешивание</strong>!
desc: Разблокирован <strong>смешиватель</strong>! Объедините два цвета в этом здании, используя <strong>аддитивное смешивание</strong>!
reward_stacker:
title: Объединитель
@ -688,6 +687,29 @@ settings:
description: >-
Включает виньетирование, которое затемняет углы экрана и облегчает чтение текста.
autosaveInterval:
title: Autosave Interval
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
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Настройки управления
hint: >-
@ -733,7 +755,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Прекратить размещение
rotateWhilePlacing: Вращать
rotateInverseModifier: >-
Модификатор: Вращать против часовой стрелки
@ -753,7 +774,8 @@ keybindings:
exportScreenshot: Экспорт всей Базы в виде Изображения
mapMoveFaster: Ускорение передвижения
lockBeltDirection: Включает конвейерный планировщик
switchDirectionLockSide: 'Планировщик: Переключение сторон'
switchDirectionLockSide: "Планировщик: Переключение сторон"
pipette: Pipette
about:
title: Об игре

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -688,6 +687,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -733,7 +755,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -753,7 +774,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

File diff suppressed because it is too large Load Diff

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Press <keyCut> to cut, <keyCopy> to copy, <keyDelete> to remove and <keyCancel> to cancel.
# The "Upgrades" window
shop:
title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier
to read.
autosaveInterval:
title: Autosave Interval
description: >-
Controls how often the game saves automatically. You can also disable it
entirely here.
intervals:
one_minute: 1 Minute
two_minutes: 2 Minutes
five_minutes: 5 Minutes
ten_minutes: 10 Minutes
twenty_minutes: 20 Minutes
disabled: Disabled
compactBuildingInfo:
title: Compact Building Infos
description: >-
Shortens info boxes for buildings by only showing their ratios. Otherwise a
description and image is shown.
disableCutDeleteWarnings:
title: Disable Cut/Delete Warnings
description: >-
Disable the warning dialogs brought up when cutting/deleting more than 100
entities.
keybindings:
title: Keybindings
hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter
trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate
rotateInverseModifier: >-
Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side'
switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about:
title: About this Game

View File

@ -1 +1 @@
1.1.16
1.1.17