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 # Local config
config.local.js 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 version https://git-lfs.github.com/spec/v1
oid sha256:3c91adcd4e00006ffa4aed4db19d1530bf8c58935b1624d1640fc8e9465a2824 oid sha256:ebde52e75e54d2f4add0cf498c85f059082a0745212a23c4de7328a7d78b00a5
size 176993 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) // Builds everything (standalone-beta)
gulp.task( gulp.task(
"step.standalone-beta.code", "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("step.standalone-beta.mainbuild", gulp.parallel("step.baseResources", "step.standalone-beta.code"));
gulp.task( gulp.task(
@ -284,7 +284,7 @@ gulp.task(
// Builds everything (standalone-prod) // Builds everything (standalone-prod)
gulp.task( gulp.task(
"step.standalone-prod.code", "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("step.standalone-prod.mainbuild", gulp.parallel("step.baseResources", "step.standalone-prod.code"));
gulp.task( gulp.task(

View File

@ -29,7 +29,7 @@ function gulptasksSounds($, gulp, buildFolder) {
.audioChannels(1) .audioChannels(1)
.audioFrequency(22050) .audioFrequency(22050)
.audioCodec("libmp3lame") .audioCodec("libmp3lame")
.audioFilters(["volume=0.3"]); .audioFilters(["volume=0.15"]);
}), }),
{ {
name: "music", name: "music",
@ -40,6 +40,30 @@ function gulptasksSounds($, gulp, buildFolder) {
.pipe(gulp.dest(path.join(builtSoundsDir, "music"))); .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 // Encodes the ui sounds
gulp.task("sounds.sfxGenerateSprites", () => { gulp.task("sounds.sfxGenerateSprites", () => {
return gulp return gulp
@ -91,8 +115,10 @@ function gulptasksSounds($, gulp, buildFolder) {
}); });
gulp.task("sounds.buildall", gulp.parallel("sounds.music", "sounds.sfx")); 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.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")); 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; right: 0;
background: #dee1ea; background: #dee1ea;
@include DarkThemeOverride {
background: $darkModeGameBackground;
}
} }
body { body {
@ -413,6 +417,10 @@ canvas {
display: inline-block; display: inline-block;
vertical-align: middle; vertical-align: middle;
} }
@include DarkThemeOverride {
color: #fff;
}
} }
.prefab_LoadingTextWithAnimDelayed { .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; hu, pl, ja, kor, no, pt-PT;
@each $language in $languages { @each $language in $languages {

View File

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

View File

@ -21,15 +21,32 @@
} }
} }
$darkModeDialogBg: darken($darkModeGameBackground, 10);
@include DarkThemeOverride { @include DarkThemeOverride {
background: rgba(#33363d, 0.9); background: rgba($darkModeDialogBg, 0.9);
@include InlineAnimation(0.12s ease-in-out) { @include InlineAnimation(0.12s ease-in-out) {
0% { 0% {
background-color: transparent; background-color: transparent;
opacity: 0.5; opacity: 0.5;
} }
100% { 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 { > .binding {
&:not(.visible) {
display: none !important;
}
display: inline-grid; display: inline-grid;
@include PlainText; @include PlainText;
align-items: center; align-items: center;
@ -57,50 +61,6 @@
@include S(margin-left, 5px); @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) { 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 { #ingame_HUD_Waypoints {
position: absolute; position: absolute;
@include S(right, 10px); @include S(right, 10px);
@include S(top, 60px); @include S(top, 45px);
display: flex; display: flex;
flex-direction: column; flex-direction: column;
@include DarkThemeInvert(); @include DarkThemeInvert();

View File

@ -37,7 +37,6 @@
@import "ingame_hud/shop"; @import "ingame_hud/shop";
@import "ingame_hud/game_menu"; @import "ingame_hud/game_menu";
@import "ingame_hud/dialogs"; @import "ingame_hud/dialogs";
@import "ingame_hud/mass_selector";
@import "ingame_hud/vignette_overlay"; @import "ingame_hud/vignette_overlay";
@import "ingame_hud/statistics"; @import "ingame_hud/statistics";
@import "ingame_hud/pinned_shapes"; @import "ingame_hud/pinned_shapes";
@ -67,7 +66,6 @@ ingame_HUD_PinnedShapes,
ingame_HUD_GameMenu, ingame_HUD_GameMenu,
ingame_HUD_KeybindingOverlay, ingame_HUD_KeybindingOverlay,
ingame_HUD_Notifications, ingame_HUD_Notifications,
ingame_HUD_MassSelector,
ingame_HUD_DebugInfo, ingame_HUD_DebugInfo,
ingame_HUD_EntityDebugger, ingame_HUD_EntityDebugger,
ingame_HUD_InteractiveTutorial, ingame_HUD_InteractiveTutorial,
@ -101,7 +99,6 @@ body.uiHidden {
#ingame_HUD_buildings_toolbar, #ingame_HUD_buildings_toolbar,
#ingame_HUD_PlacementHints, #ingame_HUD_PlacementHints,
#ingame_HUD_GameMenu, #ingame_HUD_GameMenu,
#ingame_HUD_MassSelector,
#ingame_HUD_PinnedShapes, #ingame_HUD_PinnedShapes,
#ingame_HUD_Notifications, #ingame_HUD_Notifications,
#ingame_HUD_TutorialHints, #ingame_HUD_TutorialHints,
@ -115,6 +112,6 @@ body.modalDialogActive,
body.externalAdOpen, body.externalAdOpen,
body.ingameDialogOpen { body.ingameDialogOpen {
> *:not(.ingameDialog):not(.modalDialogParent):not(.loadingDialog):not(.gameLoadingOverlay):not(#ingame_HUD_ModalDialogs):not(.noBlur) { > *: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 { @mixin DarkThemeOverride {
@at-root body[data-theme="dark"] &, @at-root html[data-theme="dark"] &,
&[data-theme="dark"] { &[data-theme="dark"] {
@content; @content;
} }

View File

@ -28,4 +28,10 @@
right: 0; right: 0;
bottom: 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; $text3dColor: #f4ffff;
$darkModeGameBackground: #5c606c;
// Dialog properties // Dialog properties
$modalDialogBg: rgba(160, 165, 180, 0.8); $modalDialogBg: rgba(160, 165, 180, 0.8);
$dialogBgColor: lighten($mainBgColor, 10); $dialogBgColor: lighten($mainBgColor, 10);

View File

@ -1,8 +1,39 @@
export const CHANGELOG = [ export const CHANGELOG = [
{ {
version: "1.1.16", version: "1.1.17",
date: "unreleased", 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", version: "1.1.15",

View File

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

View File

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

View File

@ -47,10 +47,16 @@ export class AutomaticSave {
return; 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 // 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()); 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; let shouldSave = false;
switch (this.saveImportance) { switch (this.saveImportance) {
@ -61,7 +67,7 @@ export class AutomaticSave {
case enumSavePriority.regular: case enumSavePriority.regular:
// Could determine if there is a good / bad point here // Could determine if there is a good / bad point here
shouldSave = secondsSinceLastSave > MIN_INTERVAL_SECS; shouldSave = secondsSinceLastSave > saveInterval;
break; break;
default: default:

View File

@ -28,6 +28,7 @@ const velocitySmoothing = 0.5;
const velocityFade = 0.98; const velocityFade = 0.98;
const velocityStrength = 0.4; const velocityStrength = 0.4;
const velocityMax = 20; const velocityMax = 20;
const ticksBeforeErasingVelocity = 10;
/** /**
* @enum {string} * @enum {string}
@ -58,6 +59,8 @@ export class Camera extends BasicSerializableObject {
// Input handling // Input handling
this.currentlyMoving = false; this.currentlyMoving = false;
this.lastMovingPosition = null; this.lastMovingPosition = null;
this.lastMovingPositionLastTick = null;
this.numTicksStandingStill = null;
this.cameraUpdateTimeBucket = 0.0; this.cameraUpdateTimeBucket = 0.0;
this.didMoveSinceTouchStart = false; this.didMoveSinceTouchStart = false;
this.currentlyPinching = false; this.currentlyPinching = false;
@ -667,6 +670,8 @@ export class Camera extends BasicSerializableObject {
this.touchPostMoveVelocity = new Vector(0, 0); this.touchPostMoveVelocity = new Vector(0, 0);
this.currentlyMoving = true; this.currentlyMoving = true;
this.lastMovingPosition = pos; this.lastMovingPosition = pos;
this.lastMovingPositionLastTick = null;
this.numTicksStandingStill = 0;
this.didMoveSinceTouchStart = false; this.didMoveSinceTouchStart = false;
} }
@ -716,6 +721,8 @@ export class Camera extends BasicSerializableObject {
this.currentlyMoving = false; this.currentlyMoving = false;
this.currentlyPinching = false; this.currentlyPinching = false;
this.lastMovingPosition = null; this.lastMovingPosition = null;
this.lastMovingPositionLastTick = null;
this.numTicksStandingStill = 0;
this.lastPinchPositions = null; this.lastPinchPositions = null;
this.userInteraction.dispatch(USER_INTERACT_TOUCHEND); this.userInteraction.dispatch(USER_INTERACT_TOUCHEND);
this.didMoveSinceTouchStart = false; this.didMoveSinceTouchStart = false;
@ -813,6 +820,23 @@ export class Camera extends BasicSerializableObject {
this.touchPostMoveVelocity = this.touchPostMoveVelocity.multiplyScalar(velocityFade); 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 // Check influence of past points
if (!this.currentlyMoving && !this.currentlyPinching) { if (!this.currentlyMoving && !this.currentlyPinching) {
const len = this.touchPostMoveVelocity.length(); 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() { static getSchema() {
// cachedMinedItem is not serialized.
return { return {
lastMiningTime: types.ufloat, lastMiningTime: types.ufloat,
chainable: types.bool, chainable: types.bool,
@ -25,8 +26,6 @@ export class MinerComponent extends Component {
}); });
} }
/**
*/
constructor({ chainable = false }) { constructor({ chainable = false }) {
super(); super();
this.lastMiningTime = 0; this.lastMiningTime = 0;
@ -38,6 +37,11 @@ export class MinerComponent extends Component {
* @type {Array<BaseItem>} * @type {Array<BaseItem>}
*/ */
this.itemChainBuffer = []; 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 { AutomaticSave } from "./automatic_save";
import { MetaHubBuilding } from "./buildings/hub"; import { MetaHubBuilding } from "./buildings/hub";
import { Camera } from "./camera"; import { Camera } from "./camera";
import { CanvasClickInterceptor } from "./canvas_click_interceptor";
import { EntityManager } from "./entity_manager"; import { EntityManager } from "./entity_manager";
import { GameSystemManager } from "./game_system_manager"; import { GameSystemManager } from "./game_system_manager";
import { HubGoals } from "./hub_goals"; import { HubGoals } from "./hub_goals";
@ -98,7 +97,6 @@ export class GameCore {
root.logic = new GameLogic(root); root.logic = new GameLogic(root);
root.hud = new GameHUD(root); root.hud = new GameHUD(root);
root.time = new GameTime(root); root.time = new GameTime(root);
root.canvasClickInterceptor = new CanvasClickInterceptor(root);
root.automaticSave = new AutomaticSave(root); root.automaticSave = new AutomaticSave(root);
root.soundProxy = new SoundProxy(root); root.soundProxy = new SoundProxy(root);

View File

@ -34,6 +34,7 @@ import { HUDPartTutorialHints } from "./parts/tutorial_hints";
import { HUDWaypoints } from "./parts/waypoints"; import { HUDWaypoints } from "./parts/waypoints";
import { HUDInteractiveTutorial } from "./parts/interactive_tutorial"; import { HUDInteractiveTutorial } from "./parts/interactive_tutorial";
import { HUDScreenshotExporter } from "./parts/screenshot_exporter"; import { HUDScreenshotExporter } from "./parts/screenshot_exporter";
import { Entity } from "../entity";
export class GameHUD { export class GameHUD {
/** /**

View File

@ -176,6 +176,7 @@ export class Blueprint {
tryPlace(root, tile) { tryPlace(root, tile) {
return root.logic.performBulkOperation(() => { return root.logic.performBulkOperation(() => {
let anyPlaced = false; let anyPlaced = false;
const beltsToRegisterLater = [];
for (let i = 0; i < this.entities.length; ++i) { for (let i = 0; i < this.entities.length; ++i) {
let placeable = true; let placeable = true;
const entity = this.entities[i]; const entity = this.entities[i];
@ -202,10 +203,10 @@ export class Blueprint {
"Can not delete entity for blueprint" "Can not delete entity for blueprint"
); );
if (!root.logic.tryDeleteBuilding(contents)) { if (!root.logic.tryDeleteBuilding(contents)) {
logger.error( assertAlways(
false,
"Building has replaceable component but is also unremovable in blueprint" "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); clone.components.StaticMapEntity.origin.addInplace(tile);
root.map.placeStaticEntity(clone); 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; anyPlaced = true;
} }
} }
for (let i = 0; i < beltsToRegisterLater.length; i++) {
root.entityMgr.registerEntity(beltsToRegisterLater[i]);
}
return anyPlaced; return anyPlaced;
}); });
} }

View File

@ -1,15 +1,15 @@
import { DrawParameters } from "../../../core/draw_parameters"; import { DrawParameters } from "../../../core/draw_parameters";
import { STOP_PROPAGATION } from "../../../core/signal"; import { STOP_PROPAGATION } from "../../../core/signal";
import { TrackedState } from "../../../core/tracked_state"; import { TrackedState } from "../../../core/tracked_state";
import { makeDiv } from "../../../core/utils";
import { Vector } from "../../../core/vector"; import { Vector } from "../../../core/vector";
import { T } from "../../../translations";
import { enumMouseButton } from "../../camera"; import { enumMouseButton } from "../../camera";
import { KEYMAPPINGS } from "../../key_action_mapper"; 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 { 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 { export class HUDBlueprintPlacer extends BaseHUDPart {
createElements(parent) { createElements(parent) {
@ -34,9 +34,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
const keyActionMapper = this.root.keyMapper; const keyActionMapper = this.root.keyMapper;
keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this); keyActionMapper.getBinding(KEYMAPPINGS.general.back).add(this.abortPlacement, this);
keyActionMapper keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.abortPlacement, this);
.getBinding(KEYMAPPINGS.placement.abortBuildingPlacement)
.add(this.abortPlacement, this);
keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.placement.rotateWhilePlacing).add(this.rotateBlueprint, this);
keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this); keyActionMapper.getBinding(KEYMAPPINGS.massSelect.pasteLastBlueprint).add(this.pasteBlueprint, this);
@ -62,10 +60,9 @@ export class HUDBlueprintPlacer extends BaseHUDPart {
} }
update() { update() {
this.domAttach.update(this.currentBlueprint.get()); const currentBlueprint = this.currentBlueprint.get();
this.trackedCanAfford.set( this.domAttach.update(currentBlueprint && currentBlueprint.getCost() > 0);
this.currentBlueprint.get() && this.currentBlueprint.get().canAfford(this.root) 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.buildingInfoElements.tutorialImage = makeDiv(this.element, null, ["buildingImage"]);
this.variantsElement = makeDiv(parent, "ingame_HUD_PlacerVariants"); 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() { initialize() {

View File

@ -1,5 +1,6 @@
import { Math_abs, Math_degrees, Math_round } from "../../../core/builtins"; import { Math_abs, Math_degrees, Math_round } from "../../../core/builtins";
import { globalConfig } from "../../../core/config"; import { globalConfig } from "../../../core/config";
import { gMetaBuildingRegistry } from "../../../core/global_registries";
import { Signal, STOP_PROPAGATION } from "../../../core/signal"; import { Signal, STOP_PROPAGATION } from "../../../core/signal";
import { TrackedState } from "../../../core/tracked_state"; import { TrackedState } from "../../../core/tracked_state";
import { Vector } from "../../../core/vector"; import { Vector } from "../../../core/vector";
@ -9,7 +10,6 @@ import { Entity } from "../../entity";
import { KEYMAPPINGS } from "../../key_action_mapper"; import { KEYMAPPINGS } from "../../key_action_mapper";
import { defaultBuildingVariant, MetaBuilding } from "../../meta_building"; import { defaultBuildingVariant, MetaBuilding } from "../../meta_building";
import { BaseHUDPart } from "../base_hud_part"; import { BaseHUDPart } from "../base_hud_part";
import { lerp } from "../../../core/utils";
/** /**
* Contains all logic for the building placer - this doesn't include the rendering * Contains all logic for the building placer - this doesn't include the rendering
@ -97,10 +97,8 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
keyActionMapper keyActionMapper
.getBinding(KEYMAPPINGS.placement.switchDirectionLockSide) .getBinding(KEYMAPPINGS.placement.switchDirectionLockSide)
.add(this.switchDirectionLockSide, this); .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.general.back).add(this.abortPlacement, this);
keyActionMapper.getBinding(KEYMAPPINGS.placement.pipette).add(this.startPipette, this);
this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this); this.root.gameState.inputReciever.keyup.add(this.checkForDirectionLockSwitch, this);
// BINDINGS TO GAME EVENTS // 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() { switchDirectionLockSide() {
this.currentDirectionLockSide = 1 - this.currentDirectionLockSide; 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 * Tries to place the current building at the given tile
* @param {Vector} tile * @param {Vector} tile
@ -479,13 +574,18 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
} }
// Deletion // Deletion
if (button === enumMouseButton.right && !this.currentMetaBuilding.get()) { if (button === enumMouseButton.right && !metaBuilding) {
this.currentlyDragging = true; this.currentlyDragging = true;
this.currentlyDeleting = true; this.currentlyDeleting = true;
this.lastDragTile = this.root.camera.screenToWorld(pos).toTileSpace(); this.lastDragTile = this.root.camera.screenToWorld(pos).toTileSpace();
this.currentMetaBuilding.set(null); this.deleteBelowCursor();
return STOP_PROPAGATION; 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 { makeDiv } from "../../../core/utils";
import { T } from "../../../translations"; 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 { BaseHUDPart } from "../base_hud_part";
import { TrackedState } from "../../../core/tracked_state"; import { DynamicDomAttach } from "../dynamic_dom_attach";
import { MetaBuilding } from "../../meta_building";
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 { export class HUDKeybindingOverlay extends BaseHUDPart {
initialize() { initialize() {}
this.root.hud.signals.selectedPlacementBuildingChanged.add(
this.onSelectedBuildingForPlacementChanged,
this
);
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; * HELPER / Returns if there is a building selected for placement and
* it supports the belt planner
const getKeycode = id => { * @returns {boolean}
return getStringForKeyCode(mapper.getBinding(id).keyCode); */
}; get buildingPlacementSupportsBeltPlanner() {
const placer = this.root.hud.parts.buildingPlacer;
this.element = makeDiv( return (
parent, !this.mapOverviewActive &&
"ingame_HUD_KeybindingOverlay", placer &&
[], placer.currentMetaBuilding.get() &&
` placer.currentMetaBuilding.get().getHasDirectionLockAvailable()
<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
* @param {MetaBuilding} selectedMetaBuilding * it has multiplace enabled by default
* @returns {boolean}
*/ */
onSelectedBuildingForPlacementChanged(selectedMetaBuilding) { get buildingPlacementStaysInPlacement() {
this.element.classList.toggle("placementActive", !!selectedMetaBuilding); const placer = this.root.hud.parts.buildingPlacer;
this.element.classList.toggle( return (
"hasDirectionLock", !this.mapOverviewActive &&
selectedMetaBuilding && selectedMetaBuilding.getHasDirectionLockAvailable() 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() { 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"); const logger = createLogger("hud/mass_selector");
export class HUDMassSelector extends BaseHUDPart { export class HUDMassSelector extends BaseHUDPart {
createElements(parent) { 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>`)
);
}
initialize() { initialize() {
this.deletionMarker = Loader.getSprite("sprites/misc/deletion_marker.png"); this.deletionMarker = Loader.getSprite("sprites/misc/deletion_marker.png");
@ -49,6 +27,7 @@ export class HUDMassSelector extends BaseHUDPart {
this.selectedUids = new Set(); this.selectedUids = new Set();
this.root.signals.entityQueuedForDestroy.add(this.onEntityDestroyed, this); 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.downPreHandler.add(this.onMouseDown, this);
this.root.camera.movePreHandler.add(this.onMouseMove, 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.massSelectCut).add(this.confirmCut, this);
this.root.keyMapper.getBinding(KEYMAPPINGS.massSelect.massSelectCopy).add(this.startCopy, 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() { 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( const { ok } = this.root.hud.parts.dialogs.showWarning(
T.dialogs.massDeleteConfirm.title, T.dialogs.massDeleteConfirm.title,
T.dialogs.massDeleteConfirm.desc.replace( T.dialogs.massDeleteConfirm.desc.replace(
"<count>", "<count>",
"" + formatBigNumberFull(this.selectedUids.size) "" + formatBigNumberFull(this.selectedUids.size)
), ),
["cancel:good", "ok:bad"] ["cancel:good:escape", "ok:bad:enter"]
); );
ok.add(() => this.doDelete()); ok.add(() => this.doDelete());
} else { } else {
@ -134,14 +123,17 @@ export class HUDMassSelector extends BaseHUDPart {
T.dialogs.blueprintsNotUnlocked.title, T.dialogs.blueprintsNotUnlocked.title,
T.dialogs.blueprintsNotUnlocked.desc 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( const { ok } = this.root.hud.parts.dialogs.showWarning(
T.dialogs.massCutConfirm.title, T.dialogs.massCutConfirm.title,
T.dialogs.massCutConfirm.desc.replace( T.dialogs.massCutConfirm.desc.replace(
"<count>", "<count>",
"" + formatBigNumberFull(this.selectedUids.size) "" + formatBigNumberFull(this.selectedUids.size)
), ),
["cancel:good", "ok:bad"] ["cancel:good:escape", "ok:bad:enter"]
); );
ok.add(() => this.doCut()); ok.add(() => this.doCut());
} else { } else {
@ -230,10 +222,6 @@ export class HUDMassSelector extends BaseHUDPart {
} }
} }
update() {
this.domAttach.update(this.selectedUids.size > 0);
}
/** /**
* *
* @param {DrawParameters} parameters * @param {DrawParameters} parameters

View File

@ -5,7 +5,7 @@ import { T } from "../../../translations";
import { createLogger } from "../../../core/logging"; import { createLogger } from "../../../core/logging";
import { StaticMapEntityComponent } from "../../components/static_map_entity"; import { StaticMapEntityComponent } from "../../components/static_map_entity";
import { Vector } from "../../../core/vector"; 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 { makeOffscreenBuffer } from "../../../core/buffer_utils";
import { DrawParameters } from "../../../core/draw_parameters"; import { DrawParameters } from "../../../core/draw_parameters";
import { Rectangle } from "../../../core/rectangle"; import { Rectangle } from "../../../core/rectangle";
@ -56,7 +56,14 @@ export class HUDScreenshotExporter extends BaseHUDPart {
const dimensions = maxChunk.sub(minChunk); const dimensions = maxChunk.sub(minChunk);
logger.log("Dimensions:", dimensions); 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); const chunkScale = chunkSizePixels / (globalConfig.mapChunkSize * globalConfig.tileSize);
logger.log("Scale:", chunkScale); logger.log("Scale:", chunkScale);

View File

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

View File

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

View File

@ -147,10 +147,32 @@ export class MetaBuilding {
* @param {string} param0.variant * @param {string} param0.variant
*/ */
createAndPlaceEntity({ root, origin, rotation, originalRotation, rotationVariant, 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 entity = new Entity(root);
const blueprintSprite = this.getBlueprintSprite(rotationVariant, variant); const blueprintSprite = this.getBlueprintSprite(rotationVariant, variant);
entity.addComponent( entity.addComponent(
new StaticMapEntityComponent({ new StaticMapEntityComponent({
spriteKey: spriteKey:
@ -166,12 +188,8 @@ export class MetaBuilding {
blueprintSpriteKey: blueprintSprite ? blueprintSprite.spriteName : "", blueprintSpriteKey: blueprintSprite ? blueprintSprite.spriteName : "",
}) })
); );
this.setupEntityComponents(entity, root); this.setupEntityComponents(entity, root);
this.updateVariants(entity, rotationVariant, variant); this.updateVariants(entity, rotationVariant, variant);
root.map.placeStaticEntity(entity);
root.entityMgr.registerEntity(entity);
return entity; return entity;
} }

View File

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

View File

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

View File

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

View File

@ -80,4 +80,10 @@ export const LANGUAGES = {
code: "no", code: "no",
region: "", 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>} */ /** @type {Array<BaseSetting>} */
export const allApplicationSettings = [ export const allApplicationSettings = [
new EnumSetting("language", { new EnumSetting("language", {
@ -160,11 +187,24 @@ export const allApplicationSettings = [
*/ */
(app, id) => { (app, id) => {
applyGameTheme(id); applyGameTheme(id);
document.body.setAttribute("data-theme", id); document.documentElement.setAttribute("data-theme", id);
}, },
enabled: !IS_DEMO, 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", { new EnumSetting("refreshRate", {
options: ["60", "100", "144", "165", "250", "500"], options: ["60", "100", "144", "165", "250", "500"],
valueGetter: rate => rate, valueGetter: rate => rate,
@ -200,6 +240,8 @@ export const allApplicationSettings = [
new BoolSetting("alwaysMultiplace", categoryGame, (app, value) => {}), new BoolSetting("alwaysMultiplace", categoryGame, (app, value) => {}),
new BoolSetting("enableTunnelSmartplace", categoryGame, (app, value) => {}), new BoolSetting("enableTunnelSmartplace", categoryGame, (app, value) => {}),
new BoolSetting("vignette", 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) { export function getApplicationSettingById(id) {
@ -218,11 +260,14 @@ class SettingsStorage {
this.scrollWheelSensitivity = "regular"; this.scrollWheelSensitivity = "regular";
this.movementSpeed = "regular"; this.movementSpeed = "regular";
this.language = "auto-detect"; this.language = "auto-detect";
this.autosaveInterval = "two_minutes";
this.alwaysMultiplace = false; this.alwaysMultiplace = false;
this.offerHints = true; this.offerHints = true;
this.enableTunnelSmartplace = true; this.enableTunnelSmartplace = true;
this.vignette = true; this.vignette = true;
this.compactBuildingInfo = false;
this.disableCutDeleteWarnings = false;
/** /**
* @type {Object.<string, number>} * @type {Object.<string, number>}
@ -317,6 +362,17 @@ export class ApplicationSettings extends ReadWriteProxy {
return 1; 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() { getIsFullScreen() {
return this.getAllSettings().fullscreen; return this.getAllSettings().fullscreen;
} }
@ -412,7 +468,7 @@ export class ApplicationSettings extends ReadWriteProxy {
} }
getCurrentVersion() { getCurrentVersion() {
return 12; return 15;
} }
/** @param {{settings: SettingsStorage, version: number}} data */ /** @param {{settings: SettingsStorage, version: number}} data */
@ -459,6 +515,21 @@ export class ApplicationSettings extends ReadWriteProxy {
data.version = 12; 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(); 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) - [Lithuanian](base-lt.yaml)
- [Arabic](base-ar.yaml) - [Arabic](base-ar.yaml)
- [Norwegian](base-no.yaml) - [Norwegian](base-no.yaml)
- [Kroatian](base-hr.yaml)
(If you want to translate into a new language, see below!) (If you want to translate into a new language, see below!)

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -686,6 +685,32 @@ settings:
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -731,7 +756,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -751,7 +775,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game title: About this Game

View File

@ -268,6 +268,10 @@ ingame:
pasteLastBlueprint: Vložit poslední plán pasteLastBlueprint: Vložit poslední plán
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -303,11 +307,6 @@ ingame:
newUpgrade: Nová aktualizace je k dispozici! newUpgrade: Nová aktualizace je k dispozici!
gameSaved: Hra byla uložena. 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 # The "Upgrades" window
shop: shop:
title: Vylepšení title: Vylepšení
@ -669,6 +668,31 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Klávesové zkratky title: Klávesové zkratky
hint: >- hint: >-
@ -715,7 +739,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Zrušit stavbu
rotateWhilePlacing: Otočit rotateWhilePlacing: Otočit
rotateInverseModifier: >- rotateInverseModifier: >-
Modifikátor: Otočit proti směru hodinových ručiček Modifikátor: Otočit proti směru hodinových ručiček
@ -734,7 +757,8 @@ keybindings:
massSelectCut: Vyjmout oblast massSelectCut: Vyjmout oblast
exportScreenshot: Exportovat celou základnu jako obrázek exportScreenshot: Exportovat celou základnu jako obrázek
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: O hře title: O hře

View File

@ -239,7 +239,7 @@ dialogs:
blueprintsNotUnlocked: blueprintsNotUnlocked:
title: Noch nicht freigeschaltet title: Noch nicht freigeschaltet
desc: >- desc: >-
Blueprints werden erst in Level 12 freigeschalten! Blueprints werden erst in Level 12 freigeschaltet!
keybindingsIntroduction: keybindingsIntroduction:
title: Nützliche Hotkeys title: Nützliche Hotkeys
@ -282,15 +282,19 @@ ingame:
createMarker: Marker erstellen createMarker: Marker erstellen
delete: Löschen delete: Löschen
pasteLastBlueprint: Letzte Blaupause einfügen pasteLastBlueprint: Letzte Blaupause einfügen
lockBeltDirection: Enable belt planner lockBeltDirection: Bandplaner aktivieren
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
buildingPlacement: buildingPlacement:
# Buildings can have different variants which are unlocked at later levels, # Buildings can have different variants which are unlocked at later levels,
# and this is the hint shown when there are multiple variants available. # and this is the hint shown when there are multiple variants available.
cycleBuildingVariants: Drücke <key> um zwischen den Varianten zu wählen. cycleBuildingVariants: Drücke <key>, um zwischen den Varianten zu wählen.
# Shows the hotkey in the ui, e.g. "Hotkey: Q" # Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >- hotkeyLabel: >-
@ -319,11 +323,6 @@ ingame:
newUpgrade: Ein neues Upgrade ist verfügbar! newUpgrade: Ein neues Upgrade ist verfügbar!
gameSaved: Dein Spiel wurde gespeichert. 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 # The "Upgrades" window
shop: shop:
title: Upgrades 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! desc: Der <strong>Tunnel</strong> wurde freigeschaltet! Du kannst Items nun unter Gebäuden oder Förderbändern hindurchleiten!
reward_rotater_ccw: 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>! 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: reward_miner_chainable:
@ -678,20 +677,45 @@ settings:
super_fast: Sehr schnell super_fast: Sehr schnell
extremely_fast: Extrem schnell extremely_fast: Extrem schnell
enableTunnelSmartplace: enableTunnelSmartplace:
title: Smart Tunnels title: Intelligente Tunnel
description: >- description: >-
When enabled, placing tunnels will automatically remove unnecessary belts. Aktiviert das automatische Entfernen von überflüssigen Förderbändern bei der Platzierung von Tunneln.
This also enables to drag tunnels and excess tunnels will get removed. Außerdem funktioniert das Ziehen von Tunneln und überschüssige werden ebenfalls entfernt.
vignette: vignette:
title: Vignette title: Vignette
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier Aktiviert den Vignetteneffekt, der den Rand des Bildschirms zunehmend verdunkelt
to read. 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: keybindings:
title: Tastenbelegung title: Tastenbelegung
hint: >- 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. resetKeybindings: Tastenbelegung zurücksetzen.
@ -733,7 +757,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Platzieren abbrechen
rotateWhilePlacing: Rotieren rotateWhilePlacing: Rotieren
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: stattdessen gegen UZS rotieren Modifier: stattdessen gegen UZS rotieren
@ -741,7 +764,7 @@ keybindings:
confirmMassDelete: Massenlöschung bestätigen confirmMassDelete: Massenlöschung bestätigen
cycleBuildings: Gebäude rotieren cycleBuildings: Gebäude rotieren
massSelectStart: Halten und ziehen zum beginnen massSelectStart: Halten und ziehen zum Beginnen
massSelectSelectMultiple: Mehrere Areale markieren massSelectSelectMultiple: Mehrere Areale markieren
massSelectCopy: Areal kopieren massSelectCopy: Areal kopieren
@ -752,8 +775,9 @@ keybindings:
massSelectCut: Areal ausschneiden massSelectCut: Areal ausschneiden
exportScreenshot: Ganze Fabrik als Foto exportieren exportScreenshot: Ganze Fabrik als Foto exportieren
mapMoveFaster: Schneller bewegen mapMoveFaster: Schneller bewegen
lockBeltDirection: Enable belt planner lockBeltDirection: Bandplaner aktivieren
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planer: Seite wechseln"
pipette: Pipette
about: about:
title: Über dieses Spiel title: Über dieses Spiel

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -688,6 +687,31 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -733,7 +757,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -753,7 +776,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game title: About this Game

View File

@ -281,10 +281,14 @@ ingame:
toggleHud: Toggle HUD toggleHud: Toggle HUD
placeBuilding: Place building placeBuilding: Place building
createMarker: Create Marker createMarker: Create Marker
delete: Destroy delete: Delete
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -320,11 +324,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -612,6 +611,19 @@ settings:
large: Large large: Large
huge: Huge 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: scrollWheelSensitivity:
title: Zoom sensitivity title: Zoom sensitivity
description: >- description: >-
@ -688,6 +700,16 @@ settings:
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -735,12 +757,12 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement pipette: Pipette
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
cycleBuildingVariants: Cycle Variants cycleBuildingVariants: Cycle Variants
confirmMassDelete: Confirm Mass Delete confirmMassDelete: Delete area
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
cycleBuildings: Cycle Buildings cycleBuildings: Cycle Buildings
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner

View File

@ -285,6 +285,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -320,11 +324,6 @@ ingame:
newUpgrade: ¡Una nueva mejora está disponible! newUpgrade: ¡Una nueva mejora está disponible!
gameSaved: Tu partida ha sido guardada. 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 # The "Upgrades" window
shop: shop:
title: Mejoras title: Mejoras
@ -680,6 +679,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Atajos de Teclado title: Atajos de Teclado
hint: >- hint: >-
@ -724,7 +746,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Cancelar Colocación
rotateWhilePlacing: Rotar rotateWhilePlacing: Rotar
rotateInverseModifier: >- rotateInverseModifier: >-
Modificador: Rotar inversamente en su lugar Modificador: Rotar inversamente en su lugar
@ -744,7 +765,8 @@ keybindings:
massSelectCut: Cortar área massSelectCut: Cortar área
exportScreenshot: Exportar toda la base como imagen exportScreenshot: Exportar toda la base como imagen
mapMoveFaster: Mover más rápido mapMoveFaster: Mover más rápido
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: Sobre el Juego title: Sobre el Juego

View File

@ -275,7 +275,7 @@ ingame:
# every situation # every situation
keybindingsOverlay: keybindingsOverlay:
moveMap: Déplacer moveMap: Déplacer
selectBuildings: Sélection de la zone selectBuildings: Sélection d'une zone
stopPlacement: Arrêter le placement stopPlacement: Arrêter le placement
rotateBuilding: Tourner le bâtiment rotateBuilding: Tourner le bâtiment
placeMultiple: Placement multiple placeMultiple: Placement multiple
@ -286,8 +286,12 @@ ingame:
createMarker: Créer une balise createMarker: Créer une balise
delete: Supprimer delete: Supprimer
pasteLastBlueprint: Copier le dernier patron pasteLastBlueprint: Copier le dernier patron
lockBeltDirection: Enable belt planner lockBeltDirection: Utiliser le plannificateur de convoyeurs
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -323,11 +327,6 @@ ingame:
newUpgrade: Une nouvelle amélioration est disponible ! newUpgrade: Une nouvelle amélioration est disponible !
gameSaved: Votre partie a été sauvegardée. 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 # The "Upgrades" window
shop: shop:
title: Améliorations title: Améliorations
@ -682,15 +681,37 @@ settings:
super_fast: Très rapide super_fast: Très rapide
extremely_fast: Extrêmement rapide extremely_fast: Extrêmement rapide
enableTunnelSmartplace: enableTunnelSmartplace:
title: Smart Tunnels title: Tunnels intelligents
description: >- description: >-
When enabled, placing tunnels will automatically remove unnecessary belts. Si cette option est sélectionnée, placer des tunnels effacera automatiquement les convoyeurs inutiles.
This also enables to drag tunnels and excess tunnels will get removed. Cela permet aussi d'étirer les tunnels et les tunnels en surnombre seront effacés.
vignette: vignette:
title: Vignette title: Effet de vignette
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier Permet l'affichage de l'effet de vignette qui assombrit les coins de l'écran afin de rendre le texte plus facile à lire.
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: keybindings:
title: Contrôles title: Contrôles
@ -737,7 +758,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Annuler le placement
rotateWhilePlacing: Pivoter rotateWhilePlacing: Pivoter
rotateInverseModifier: >- rotateInverseModifier: >-
Variante: Pivote à gauche Variante: Pivote à gauche
@ -756,8 +776,9 @@ keybindings:
massSelectCut: Couper la sélection massSelectCut: Couper la sélection
exportScreenshot: Exporter toute la base en tant qu'image. exportScreenshot: Exporter toute la base en tant qu'image.
mapMoveFaster: Se déplacer plus vite mapMoveFaster: Se déplacer plus vite
lockBeltDirection: Enable belt planner lockBeltDirection: Utiliser le plannificateur de convoyeurs
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Plannificateur: changer de côté"
pipette: Pipette
about: about:
title: À propos de ce jeu 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 pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: Egy új fejlesztés elérhető! newUpgrade: Egy új fejlesztés elérhető!
gameSaved: A játékod el lett mentve. 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 # The "Upgrades" window
shop: shop:
title: Fejlesztések title: Fejlesztések
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: A játékról title: A játékról

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -688,6 +687,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -733,7 +755,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -753,7 +774,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game title: About this Game

View File

@ -286,6 +286,10 @@ ingame:
pasteLastBlueprint: ブループリントの内容を設置 pasteLastBlueprint: ブループリントの内容を設置
lockBeltDirection: ベルトプランナーを有効化 lockBeltDirection: ベルトプランナーを有効化
plannerSwitchSide: プランナーが通る側を反転 plannerSwitchSide: プランナーが通る側を反転
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -321,11 +325,6 @@ ingame:
newUpgrade: 新しいアップグレードが利用可能です! newUpgrade: 新しいアップグレードが利用可能です!
gameSaved: ゲームをセーブしました。 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 # The "Upgrades" window
shop: shop:
title: アップグレード title: アップグレード
@ -686,6 +685,29 @@ settings:
description: >- 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: keybindings:
title: キー設定 title: キー設定
hint: >- hint: >-
@ -731,7 +753,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: 配置の中止
rotateWhilePlacing: 回転 rotateWhilePlacing: 回転
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: 逆時計回りにする Modifier: 逆時計回りにする
@ -751,7 +772,8 @@ keybindings:
exportScreenshot: 工場の全体像を画像出力 exportScreenshot: 工場の全体像を画像出力
mapMoveFaster: より速く移動 mapMoveFaster: より速く移動
lockBeltDirection: ベルトプランナーを有効化 lockBeltDirection: ベルトプランナーを有効化
switchDirectionLockSide: 'プランナー: 通る側を切り替え' switchDirectionLockSide: "プランナー: 通る側を切り替え"
pipette: Pipette
about: about:
title: このゲームについて title: このゲームについて

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: 새로운 업그레이드를 할 수 있습니다! newUpgrade: 새로운 업그레이드를 할 수 있습니다!
gameSaved: 게임이 저장되었습니다. 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 # The "Upgrades" window
shop: shop:
title: 업그레이드 title: 업그레이드
@ -689,6 +688,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: 키바인딩 title: 키바인딩
hint: >- hint: >-
@ -734,7 +756,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: 건물 배치 취소
rotateWhilePlacing: 회전 rotateWhilePlacing: 회전
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: 대신 반시계방향으로 회전 Modifier: 대신 반시계방향으로 회전
@ -754,7 +775,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: 이 게임의 정보 title: 이 게임의 정보

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game 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. 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. 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. # The suffix for large numbers, e.g. 1.3k, 400.2M, etc.
suffix: suffix:
thousands: d thousands: k
millions: M millions: M
billions: MJ billions: B
trillions: B trillions: T
# Shown for infinitely big numbers # Shown for infinitely big numbers
infinite: inf infinite: inf
@ -154,7 +154,7 @@ mainMenu:
showInfo: Laat zien showInfo: Laat zien
contestOver: Deze competitie is voorbij - word lid van de discord (engelstalig) om berichten te krijgen van nieuwe competities! contestOver: Deze competitie is voorbij - word lid van de discord (engelstalig) om berichten te krijgen van nieuwe competities!
continue: Verder continue: Verder
newGame: Niew Spel newGame: Nieuw Spel
madeBy: Gemaakt door <author-link> madeBy: Gemaakt door <author-link>
dialogs: dialogs:
@ -249,11 +249,11 @@ dialogs:
Hier zijn er een aantal, maar zorg dat je <strong>kijkt naar de sneltoetsen</strong>!<br><br> 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'>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'>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: createMarker:
title: Nieuwe markering 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: markerDemoLimit:
desc: Je kunt maar twee markeringen plaatsen in de demo. Koop de standalone voor een ongelimiteerde hoeveelheid markeringen! 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? Je bent veel gebouwen aan het knippen (<count> om precies te zijn)! Weet je zeker dat je dit wil doen?
exportScreenshotWarning: exportScreenshotWarning:
title: Export screenshot title: Exporteer screenshot
desc: >- desc: >-
You requested to export your base as a screenshot. Please note that this can 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!
be quite slow for a big base and even crash your game!
ingame: ingame:
# This is shown in the top left corner and displays useful keybindings in # This is shown in the top left corner and displays useful keybindings in
@ -275,7 +274,7 @@ ingame:
moveMap: Beweeg speelveld moveMap: Beweeg speelveld
selectBuildings: Selecteer gebied selectBuildings: Selecteer gebied
stopPlacement: Stop met plaatsen stopPlacement: Stop met plaatsen
rotateBuilding: Draai een gebouw rotateBuilding: Draai gebouw
placeMultiple: Plaats meerdere placeMultiple: Plaats meerdere
reverseOrientation: Omgekeerde oriëntatie reverseOrientation: Omgekeerde oriëntatie
disableAutoOrientation: Schakel auto-oriëntatie uit disableAutoOrientation: Schakel auto-oriëntatie uit
@ -286,6 +285,10 @@ ingame:
pasteLastBlueprint: Plak de laatst gekopiëerde blauwdruk pasteLastBlueprint: Plak de laatst gekopiëerde blauwdruk
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -302,8 +305,8 @@ ingame:
speed: Snelheid speed: Snelheid
range: Bereik range: Bereik
storage: Opslag storage: Opslag
oneItemPerSecond: 1 item / seconde oneItemPerSecond: 1 voorwerp / s
itemsPerSecond: <x> items / s itemsPerSecond: <x> voorwerpen / s
itemsPerSecondDouble: (x2) itemsPerSecondDouble: (x2)
tiles: <x> tegels tiles: <x> tegels
@ -321,11 +324,6 @@ ingame:
newUpgrade: Er is een nieuwe upgrade beschikbaar! newUpgrade: Er is een nieuwe upgrade beschikbaar!
gameSaved: Je spel is opgeslagen. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -337,7 +335,7 @@ ingame:
# The roman number for each tier # The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X] 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 # The "Statistics" window
statistics: statistics:
@ -390,12 +388,12 @@ ingame:
interactiveTutorial: interactiveTutorial:
title: Tutorial title: Tutorial
hints: 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: >- 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: >- 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 # All shop upgrades
shopUpgrades: shopUpgrades:
@ -422,11 +420,11 @@ buildings:
miner: # Internal name for the Extractor miner: # Internal name for the Extractor
default: default:
name: &miner Ontginner 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: chainable:
name: Ontginner (Ketting) 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 underground_belt: # Internal name for the Tunnel
default: default:
@ -512,12 +510,12 @@ storyRewards:
reward_rotater: reward_rotater:
title: Roteren 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: reward_painter:
title: Verven title: Verven
desc: >- 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: reward_mixer:
title: Kleuren mengen title: Kleuren mengen
@ -537,11 +535,11 @@ storyRewards:
reward_rotater_ccw: reward_rotater_ccw:
title: Roteren (andersom) 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: reward_miner_chainable:
title: Ketting Extractor title: Ketting-ontginner
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! 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: reward_underground_belt_tier_2:
title: Tunnel Niveau II title: Tunnel Niveau II
@ -585,7 +583,7 @@ storyRewards:
no_reward_freeplay: no_reward_freeplay:
title: Volgende level title: Volgende level
desc: >- 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: settings:
title: Opties title: Opties
@ -677,15 +675,37 @@ settings:
super_fast: Super snel super_fast: Super snel
extremely_fast: Extreem snel extremely_fast: Extreem snel
enableTunnelSmartplace: enableTunnelSmartplace:
title: Smart Tunnels title: Slimme Tunnels
description: >- description: >-
When enabled, placing tunnels will automatically remove unnecessary belts. Wanneer dit aan staat zullen tunnels automatisch onnodige lopende banden verwijderen.
This also enables to drag tunnels and excess tunnels will get removed. Ook kun je dan tunnels slepen en onnodige tunnels worden ook verwijderd.
vignette: vignette:
title: Vignette title: Vignette
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier Schakelt de vignet in, wat de hoeken van het scherm donkerder maakt zodat de tekst makkelijker te lezen is.
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: keybindings:
title: Sneltoetsen title: Sneltoetsen
@ -732,7 +752,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Cancel plaatsen
rotateWhilePlacing: Roteren rotateWhilePlacing: Roteren
rotateInverseModifier: >- rotateInverseModifier: >-
Aanpassing: Roteer tegen de klok in Aanpassing: Roteer tegen de klok in
@ -749,30 +768,31 @@ keybindings:
placeInverse: Omkeren richting lopende band placeInverse: Omkeren richting lopende band
pasteLastBlueprint: Plak laatst gekopiëerde blauwdruk pasteLastBlueprint: Plak laatst gekopiëerde blauwdruk
massSelectCut: Knip geselecteerd gebied massSelectCut: Knip geselecteerd gebied
exportScreenshot: Export whole Base as Image exportScreenshot: Exporteer volledige basis als afbeelding
mapMoveFaster: Move Faster mapMoveFaster: Beweeg sneller
lockBeltDirection: Enable belt planner lockBeltDirection: Schakel lopende band-planner in
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Wissel van kant"
pipette: Pipette
about: about:
title: Over dit spel title: Over dit spel
body: >- body: >-
This game is open source and developed by <a href="https://github.com/tobspr" Dit spel is open source en ontwikkeld door <a href="https://github.com/tobspr"
target="_blank">Tobias Springer</a> (this is me).<br><br> target="_blank">Tobias Springer</a> (dit ben ik).<br><br>
If you want to contribute, check out <a href="<githublink>" Als je ook bij wil dragen, ga dan naar <a href="<githublink>"
target="_blank">shapez.io on github</a>.<br><br> target="_blank">shapez.io op github</a>.<br><br>
This game wouldn't have been possible without the great discord community Dit spel was niet mogelijk geweest zonder de geweldige discord community
around my games - You should really join the <a href="<discordlink>" rondom mijn spellen - Je zou eens lid moeten worden van de <a href="<discordlink>"
target="_blank">discord server</a>!<br><br> target="_blank">discord server</a> (engelstalig)!<br><br>
The soundtrack was made by <a href="https://soundcloud.com/pettersumelius" De muziek is gemaakt door <a href="https://soundcloud.com/pettersumelius"
target="_blank">Peppsen</a> - He's awesome.<br><br> target="_blank">Peppsen</a> - Hij is geweldig.<br><br>
Finally, huge thanks to my best friend <a Tot slot wil ik mijn beste vriend <a
href="https://github.com/niklas-dahl" target="_blank">Niklas</a> - Without our href="https://github.com/niklas-dahl" target="_blank">Niklas</a> bedanken - Zonder onze
factorio sessions this game would never have existed. factorio-sessies zou dit spel nooit bestaan hebben.
changelog: changelog:
title: Changelog title: Changelog
@ -783,6 +803,6 @@ demo:
importingGames: Savegames importeren importingGames: Savegames importeren
oneGameLimit: Gelimiteerd tot één savegame oneGameLimit: Gelimiteerd tot één savegame
customizeKeybindings: Custom sneltoetsen customizeKeybindings: Custom sneltoetsen
exportingBase: Exporting whole Base as Image exportingBase: Exporteer volledige basis als afbeelding
settingNotAvailable: Niet beschikbaar in de demo. settingNotAvailable: Niet beschikbaar in de demo.

View File

@ -285,6 +285,10 @@ ingame:
pasteLastBlueprint: Lim inn forrige blåkopi pasteLastBlueprint: Lim inn forrige blåkopi
lockBeltDirection: Aktiver båndplanleggeren lockBeltDirection: Aktiver båndplanleggeren
plannerSwitchSide: Flipp båndplanleggeren plannerSwitchSide: Flipp båndplanleggeren
cutSelection: Cut
copySelection: Copy
clearSelection: Clear Selection
pipette: Pipette
# Everything related to placing buildings (I.e. as soon as you selected a building # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -320,11 +324,6 @@ ingame:
newUpgrade: En ny oppgradering er tilgjengelig! newUpgrade: En ny oppgradering er tilgjengelig!
gameSaved: Spillet ditt er lagret. 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 # The "Upgrades" window
shop: shop:
title: Oppgraderinger title: Oppgraderinger
@ -687,6 +686,29 @@ settings:
Aktiverer vignett som gjør hjørnene på skjermen mørkere og teksten lettere Aktiverer vignett som gjør hjørnene på skjermen mørkere og teksten lettere
å lese. å 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: keybindings:
title: Hurtigtaster title: Hurtigtaster
hint: >- hint: >-
@ -734,7 +756,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Avbryt Plassering
rotateWhilePlacing: Roter rotateWhilePlacing: Roter
rotateInverseModifier: >- rotateInverseModifier: >-
Alternativ: Roter mot klokken isteden Alternativ: Roter mot klokken isteden
@ -752,7 +773,8 @@ keybindings:
placeMultiple: Forbli i plasseringsmodus placeMultiple: Forbli i plasseringsmodus
placeInverse: Inverter automatisk transportbånd orientering placeInverse: Inverter automatisk transportbånd orientering
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: Om dette spillet title: Om dette spillet

View File

@ -21,7 +21,7 @@
steamPage: steamPage:
# This is the short text appearing on the steam page # 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. # 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: # NOTICE:
@ -30,13 +30,13 @@ steamPage:
longText: >- longText: >-
[img]{STEAM_APP_IMAGE}/extras/store_page_gif.gif[/img] [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] [b]Zalety pełnej wersji[/b]
@ -46,21 +46,21 @@ steamPage:
[*] Nielimitowana ilość zapisanych gier [*] Nielimitowana ilość zapisanych gier
[*] Ciemny motyw gry [*] Ciemny motyw gry
[*] Więcej ustawień [*] Więcej ustawień
[*] Pomóż mi w dalszym rozwijaniu shapez.io ❤️ [*] Pomożesz mi w dalszym rozwijaniu shapez.io ❤️
[*] Więcej zawartości niedługo! [*] Więcej zawartości niedługo!
[/list] [/list]
[b]Zaplanowana zawartość & Sugestie społeczności[/b] [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] [list]
[*] Kampania, gdzie do budowy potrzeba kształtów [*] Kampania, gdzie do budowy potrzeba kształtów
[*] Więcej poziomów i budynków (tylko w pełnej wersji) [*] Więcej poziomów i budynków (tylko w pełnej wersji)
[*] Inne mapy, może z przeszkodami [*] 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 [*] 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 [*] Tryb dla ślepoty barw
[*] I wiele więcej! [*] I wiele więcej!
[/list] [/list]
@ -117,7 +117,7 @@ demoBanners:
# This is the "advertisement" shown in the main menu and other various places # This is the "advertisement" shown in the main menu and other various places
title: Wersja demo title: Wersja demo
intro: >- intro: >-
Kup pełną wersję gry, by odblokować więcej funckji! Kup pełną wersję gry, by odblokować więcej funkcji!
mainMenu: mainMenu:
play: Rozpocznij play: Rozpocznij
@ -207,11 +207,11 @@ dialogs:
editKeybinding: editKeybinding:
title: Zmień klawiszologię 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: resetKeybindingsConfirmation:
title: Zresetuj klawiszologię 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: keybindingsResetOk:
title: Reset Klawiszologii title: Reset Klawiszologii
@ -233,7 +233,7 @@ dialogs:
upgradesIntroduction: upgradesIntroduction:
title: Ulepszenia title: Ulepszenia
desc: >- 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. Zakładka "Ulepszenia" dostępna jest w prawym górnym rogu.
massDeleteConfirm: 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> 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'>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'>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: createMarker:
title: Nowy Znacznik title: Nowy Znacznik
@ -271,7 +271,7 @@ dialogs:
title: Tworzenie zrzutu fabryki title: Tworzenie zrzutu fabryki
desc: >- desc: >-
Zamierzasz wyeksportować swoją fabrykę jako zrzut ekranu. W przypadku dużej 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ć? Czy na pewno chcesz kontynuować?
ingame: ingame:
@ -283,15 +283,19 @@ ingame:
stopPlacement: Przestań stawiać stopPlacement: Przestań stawiać
rotateBuilding: Obróć budynek rotateBuilding: Obróć budynek
placeMultiple: Postaw więcej placeMultiple: Postaw więcej
reverseOrientation: Odwróć orientacje reverseOrientation: Odwróć orientację
disableAutoOrientation: Wyłącz orientacje automatyczną disableAutoOrientation: Wyłącz orientację automatyczną
toggleHud: Przełącz widoczność interfejsu toggleHud: Przełącz widoczność interfejsu
placeBuilding: Postaw budynek placeBuilding: Postaw budynek
createMarker: Stwórz znacznik createMarker: Stwórz znacznik
delete: Usuń delete: Usuń
pasteLastBlueprint: Wklej ostatnio skopiowany obszar pasteLastBlueprint: Wklej ostatnio skopiowany obszar
lockBeltDirection: Enable belt planner lockBeltDirection: Tryb planowania taśmociągu
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -327,11 +331,6 @@ ingame:
newUpgrade: Nowe ulepszenie dostępne! newUpgrade: Nowe ulepszenie dostępne!
gameSaved: Postęp gry został zapisany. 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 # The "Upgrades" window
shop: shop:
title: Ulepszenia title: Ulepszenia
@ -392,18 +391,18 @@ ingame:
waypoints: waypoints:
waypoints: Znaczniki waypoints: Znaczniki
hub: Budynek Główny 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. creationSuccessNotification: Utworzono znacznik.
# Interactive tutorial # Interactive tutorial
interactiveTutorial: interactiveTutorial:
title: Tutorial title: Tutorial
hints: 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: >- 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ą! 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: >- 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 # All shop upgrades
shopUpgrades: shopUpgrades:
belt: belt:
@ -429,7 +428,7 @@ buildings:
belt: belt:
default: default:
name: &belt Taśmociąg 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 miner: # Internal name for the Extractor
default: default:
@ -497,10 +496,10 @@ buildings:
description: &painter_desc Koloruje kształt za pomocą koloru dostarczonego od boku. description: &painter_desc Koloruje kształt za pomocą koloru dostarczonego od boku.
double: double:
name: Malarz (Podwójny) 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: quad:
name: Malarz (Poczwórny) 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: mirrored:
name: *painter name: *painter
description: *painter_desc description: *painter_desc
@ -519,18 +518,18 @@ storyRewards:
reward_cutter_and_trash: reward_cutter_and_trash:
title: Przecinanie Kształtów title: Przecinanie Kształtów
desc: >- 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: reward_rotater:
title: Obracanie title: Obracanie
desc: >- 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" #2nd translator's note: "Color objects" should be translated as "dye"
reward_painter: reward_painter:
title: Malowanie title: Malowanie
desc: >- 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: reward_mixer:
title: Mieszanie title: Mieszanie
@ -544,7 +543,7 @@ storyRewards:
reward_splitter: reward_splitter:
title: Rozdzielacz/Łącznik 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: reward_tunnel:
title: Tunel title: Tunel
@ -552,11 +551,11 @@ storyRewards:
reward_rotater_ccw: reward_rotater_ccw:
title: Obracanie odwrotne 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: reward_miner_chainable:
title: Wydobycie Łańcuchowe 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: reward_underground_belt_tier_2:
title: Tunel Poziomu II title: Tunel Poziomu II
@ -574,11 +573,11 @@ storyRewards:
reward_painter_double: reward_painter_double:
title: Podwójne Malowanie 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: reward_painter_quad:
title: Poczwórne malowanie 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: reward_storage:
title: Magazyn title: Magazyn
@ -601,7 +600,7 @@ storyRewards:
no_reward: no_reward:
title: Następny Poziom title: Następny Poziom
desc: >- 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: no_reward_freeplay:
title: Następny Poziom title: Następny Poziom
@ -686,7 +685,7 @@ settings:
refreshRate: refreshRate:
title: Częstość Odświeżania title: Częstość Odświeżania
description: >- 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: alwaysMultiplace:
title: Wielokrotne budowanie title: Wielokrotne budowanie
@ -696,18 +695,40 @@ settings:
offerHints: offerHints:
title: Porady i Tutoriale title: Porady i Tutoriale
description: >- 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: enableTunnelSmartplace:
title: Smart Tunnels title: Smart Tunnels
description: >- description: >-
When enabled, placing tunnels will automatically remove unnecessary belts. Gdy włączone, umieszczenie tunelu automatycznie usuwa zbędny taśmociąg.
This also enables to drag tunnels and excess tunnels will get removed. Pozwala również budować tunele przez przeciąganie i nadmiarowe tunele zostają usunięte.
vignette: vignette:
title: Vignette title: Vignette
description: >- description: >-
Enables the vignette which darkens the screen corners and makes text easier Włącza winietowanie, które przyciemnia rogi ekranu i poprawia czytelność tekstu.
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: keybindings:
title: Klawiszologia title: Klawiszologia
@ -742,7 +763,7 @@ keybindings:
menuOpenStats: Statystyki menuOpenStats: Statystyki
toggleHud: Przełącz widoczność interfejsu toggleHud: Przełącz widoczność interfejsu
toggleFPSInfo: Pokaż Licznik FPS i infomacje do debugowania toggleFPSInfo: Pokaż Licznik FPS i informacje do debugowania
belt: *belt belt: *belt
splitter: *splitter splitter: *splitter
underground_belt: *underground_belt underground_belt: *underground_belt
@ -754,26 +775,26 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Anuluj Stawianie
rotateWhilePlacing: Obróć rotateWhilePlacing: Obróć
rotateInverseModifier: >- rotateInverseModifier: >-
Modyfikator: Obróć Odrwotnie Modyfikator: Obróć Odwrotnie
cycleBuildingVariants: Zmień Wariant cycleBuildingVariants: Zmień Wariant
confirmMassDelete: Potwierdź usuwanie confirmMassDelete: Potwierdź usuwanie
cycleBuildings: Zmień Budynek cycleBuildings: Zmień Budynek
massSelectStart: Przytrzymaj i przeciągnij by zaznaczyć massSelectStart: Przytrzymaj i przeciągnij, by zaznaczyć
massSelectSelectMultiple: Zaznacz kilka obszarów massSelectSelectMultiple: Zaznacz kilka obszarów
massSelectCopy: Skopiuj obszar massSelectCopy: Skopiuj obszar
placementDisableAutoOrientation: Wyłącz automatyczną orientacje placementDisableAutoOrientation: Wyłącz automatyczną orientację
placeMultiple: Pozostań w trybie stawiania placeMultiple: Pozostań w trybie stawiania
placeInverse: Odwróć automatyczną orientacje pasów placeInverse: Odwróć automatyczną orientację pasów
pasteLastBlueprint: Wklej ostatnio skopiowany obszar pasteLastBlueprint: Wklej ostatnio skopiowany obszar
massSelectCut: Wytnij obszar massSelectCut: Wytnij obszar
exportScreenshot: Wyeksportuj całą fabrykę jako zrzut ekranu exportScreenshot: Wyeksportuj całą fabrykę jako zrzut ekranu
lockBeltDirection: Enable belt planner lockBeltDirection: Tryb planowania taśmociągu
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planowanie taśmociągu: Zmień stronę"
pipette: Pipette
about: about:
title: O Grze 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> 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> 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> Ś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: changelog:
title: Dziennik zmian title: Dziennik zmian

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Colar último projeto pasteLastBlueprint: Colar último projeto
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: Nova melhoria disponível! newUpgrade: Nova melhoria disponível!
gameSaved: Seu jogo foi salvo. 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 # The "Upgrades" window
shop: shop:
title: Melhorias title: Melhorias
@ -688,6 +687,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Controles title: Controles
hint: >- hint: >-
@ -733,7 +755,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Cancelar
rotateWhilePlacing: Rotacionar rotateWhilePlacing: Rotacionar
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotação anti-horária Modifier: Rotação anti-horária
@ -753,7 +774,8 @@ keybindings:
exportScreenshot: Exportar base inteira como imagem exportScreenshot: Exportar base inteira como imagem
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: Sobre o jogo title: Sobre o jogo

View File

@ -286,6 +286,10 @@ ingame:
pasteLastBlueprint: Colar o último blueprint pasteLastBlueprint: Colar o último blueprint
lockBeltDirection: Ativa o planeamento de tapetes lockBeltDirection: Ativa o planeamento de tapetes
plannerSwitchSide: Lado de rotação do planeamento 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -321,11 +325,6 @@ ingame:
newUpgrade: Está disponível um novo upgrade! newUpgrade: Está disponível um novo upgrade!
gameSaved: O teu jogo foi gravado. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -686,6 +685,29 @@ settings:
Ativa a vinheta, que escurece os cantos do ecrã e torna a leitura do texto Ativa a vinheta, que escurece os cantos do ecrã e torna a leitura do texto
mais fácil. 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: keybindings:
title: Atalhos title: Atalhos
hint: >- hint: >-
@ -731,7 +753,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Cancelar posicionamento
rotateWhilePlacing: Rotação rotateWhilePlacing: Rotação
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotação CCW Modifier: Rotação CCW
@ -751,7 +772,8 @@ keybindings:
exportScreenshot: Exportar a base como uma imagem exportScreenshot: Exportar a base como uma imagem
mapMoveFaster: Mover rapidamente mapMoveFaster: Mover rapidamente
lockBeltDirection: Ativa o planeamento de tapetes lockBeltDirection: Ativa o planeamento de tapetes
switchDirectionLockSide: 'Planeador: Troca o lado' switchDirectionLockSide: "Planeador: Troca o lado"
pipette: Pipette
about: about:
title: Sobre o jogo title: Sobre o jogo
body: >- body: >-

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game title: About this Game

View File

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

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game title: About this Game

View File

@ -287,6 +287,10 @@ ingame:
pasteLastBlueprint: Paste last blueprint pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -688,6 +687,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -733,7 +755,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -753,7 +774,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game 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 pasteLastBlueprint: Paste last blueprint
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
plannerSwitchSide: Flip planner side 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 # Everything related to placing buildings (I.e. as soon as you selected a building
# from the toolbar) # from the toolbar)
@ -322,11 +326,6 @@ ingame:
newUpgrade: A new upgrade is available! newUpgrade: A new upgrade is available!
gameSaved: Your game has been saved. 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 # The "Upgrades" window
shop: shop:
title: Upgrades title: Upgrades
@ -687,6 +686,29 @@ settings:
Enables the vignette which darkens the screen corners and makes text easier Enables the vignette which darkens the screen corners and makes text easier
to read. 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: keybindings:
title: Keybindings title: Keybindings
hint: >- hint: >-
@ -732,7 +754,6 @@ keybindings:
painter: *painter painter: *painter
trash: *trash trash: *trash
abortBuildingPlacement: Abort Placement
rotateWhilePlacing: Rotate rotateWhilePlacing: Rotate
rotateInverseModifier: >- rotateInverseModifier: >-
Modifier: Rotate CCW instead Modifier: Rotate CCW instead
@ -752,7 +773,8 @@ keybindings:
exportScreenshot: Export whole Base as Image exportScreenshot: Export whole Base as Image
mapMoveFaster: Move Faster mapMoveFaster: Move Faster
lockBeltDirection: Enable belt planner lockBeltDirection: Enable belt planner
switchDirectionLockSide: 'Planner: Switch side' switchDirectionLockSide: "Planner: Switch side"
pipette: Pipette
about: about:
title: About this Game title: About this Game

View File

@ -1 +1 @@
1.1.16 1.1.17