mirror of
https://github.com/tobspr/shapez.io.git
synced 2024-10-27 20:34:29 +00:00
Merge branch 'master' of https://github.com/tobspr/shapez.io
This commit is contained in:
commit
a55172339b
@ -158,7 +158,7 @@ function gulptasksStandalone($, gulp, buildFolder) {
|
||||
|
||||
fs.writeFileSync(path.join(appPath, ".itch.toml"), tomlFile);
|
||||
|
||||
if (platform === "linux" || platform === "darwin") {
|
||||
if (platform === "linux") {
|
||||
fs.writeFileSync(
|
||||
path.join(appPath, "play.sh"),
|
||||
'#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n'
|
||||
@ -178,6 +178,43 @@ function gulptasksStandalone($, gulp, buildFolder) {
|
||||
// "start shapezio --local --dev --disable-direct-composition --in-process-gpu\r\n"
|
||||
// );
|
||||
}
|
||||
|
||||
if (platform === "darwin") {
|
||||
// Clear up framework folders
|
||||
fs.writeFileSync(
|
||||
path.join(appPath, "play.sh"),
|
||||
'#!/usr/bin/env bash\n./shapez.io-standalone.app/Contents/MacOS/shapezio --no-sandbox "$@"\n'
|
||||
);
|
||||
fs.chmodSync(path.join(appPath, "play.sh"), 0o775);
|
||||
fs.chmodSync(
|
||||
path.join(appPath, "shapez.io-standalone.app", "Contents", "MacOS", "shapezio"),
|
||||
0o775
|
||||
);
|
||||
|
||||
const finalPath = path.join(appPath, "shapez.io-standalone.app");
|
||||
|
||||
const frameworksDir = path.join(finalPath, "Contents", "Frameworks");
|
||||
const frameworkFolders = fs
|
||||
.readdirSync(frameworksDir)
|
||||
.filter(fname => fname.endsWith(".framework"));
|
||||
|
||||
for (let i = 0; i < frameworkFolders.length; ++i) {
|
||||
const folderName = frameworkFolders[i];
|
||||
const frameworkFolder = path.join(frameworksDir, folderName);
|
||||
console.log(" -> ", frameworkFolder);
|
||||
|
||||
const filesToDelete = fs
|
||||
.readdirSync(frameworkFolder)
|
||||
.filter(fname => fname.toLowerCase() !== "versions");
|
||||
filesToDelete.forEach(fname => {
|
||||
console.log(" -> Deleting", fname);
|
||||
fs.unlinkSync(path.join(frameworkFolder, fname));
|
||||
});
|
||||
|
||||
const frameworkSourceDir = path.join(frameworkFolder, "Versions", "A");
|
||||
fse.copySync(frameworkSourceDir, frameworkFolder);
|
||||
}
|
||||
}
|
||||
});
|
||||
|
||||
cb();
|
||||
|
@ -5,8 +5,30 @@
|
||||
|
||||
text-align: right;
|
||||
font-size: 15px;
|
||||
display: flex;
|
||||
display: grid;
|
||||
line-height: 15px;
|
||||
flex-direction: column;
|
||||
color: #fff;
|
||||
grid-gap: 2px;
|
||||
text-shadow: 1px 1px 3px rgba(#000, 0.4);
|
||||
font-weight: bold;
|
||||
|
||||
&:not([data-mode="detailed"]) {
|
||||
.mousePosition,
|
||||
.cameraPosition {
|
||||
display: none;
|
||||
}
|
||||
}
|
||||
|
||||
code {
|
||||
background: #333;
|
||||
min-width: 30px;
|
||||
display: inline-flex;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
font-size: 14px;
|
||||
line-height: 15px;
|
||||
padding: 1px;
|
||||
font-family: "GameFont";
|
||||
border-radius: 3px;
|
||||
}
|
||||
}
|
||||
|
@ -147,6 +147,7 @@
|
||||
flex-grow: 1;
|
||||
align-items: center;
|
||||
justify-content: center;
|
||||
|
||||
flex-direction: column;
|
||||
@include S(padding-top, 20px);
|
||||
img {
|
||||
@ -160,6 +161,24 @@
|
||||
background: uiResource("demo_badge.png") center center / contain no-repeat;
|
||||
display: inline-block;
|
||||
}
|
||||
|
||||
position: relative;
|
||||
.updateLabel {
|
||||
position: absolute;
|
||||
transform: translateX(50%) rotate(-5deg);
|
||||
color: $colorRedBright;
|
||||
@include Heading;
|
||||
text-transform: uppercase;
|
||||
font-weight: bold;
|
||||
@include S(right, 40px);
|
||||
@include S(bottom, 20px);
|
||||
|
||||
@include InlineAnimation(1.3s ease-in-out infinite) {
|
||||
50% {
|
||||
transform: translateX(50%) rotate(-7deg) scale(1.1);
|
||||
}
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
.betaWarning {
|
||||
|
@ -9,11 +9,14 @@ export const CHANGELOG = [
|
||||
"Allow binding TAB (by swtw7466)",
|
||||
"Added keybinding to close menus (by isaisstillalive / Sandwichs-del)",
|
||||
"Fix rare crash regarding the buildings toolbar (by isaisstillalive)",
|
||||
"Fixed some phrases (By EnderDoom77)",
|
||||
"Fixed some phrases (by EnderDoom77)",
|
||||
"Zoom towards mouse cursor (by Dimava)",
|
||||
"Updated the soundtrack again, it is now 20 minutes in total!",
|
||||
"Updated and added new translations (Thanks to all contributors!)",
|
||||
"Show confirmation when cutting area which is too expensive to get pasted again (by isaisstillalive)",
|
||||
"Show mouse and camera tile on debug overlay (F4) (by dengr)",
|
||||
"Fix tunnels entrances connecting to exits sometimes when they shouldn't",
|
||||
"The initial belt planner direction is now based on the cursor movement (by MizardX)",
|
||||
],
|
||||
},
|
||||
{
|
||||
|
@ -92,6 +92,12 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
|
||||
*/
|
||||
this.currentDirectionLockSide = 0;
|
||||
|
||||
/**
|
||||
* Whether the side for direction lock has not yet been determined.
|
||||
* @type {boolean}
|
||||
*/
|
||||
this.currentDirectionLockSideIndeterminate = true;
|
||||
|
||||
this.initializeBindings();
|
||||
}
|
||||
|
||||
@ -204,6 +210,17 @@ export class HUDBuildingPlacerLogic extends BaseHUDPart {
|
||||
const worldPos = this.root.camera.screenToWorld(mousePosition);
|
||||
const mouseTile = worldPos.toTileSpace();
|
||||
|
||||
// Figure initial direction
|
||||
const dx = Math.abs(this.lastDragTile.x - mouseTile.x);
|
||||
const dy = Math.abs(this.lastDragTile.y - mouseTile.y);
|
||||
if (dx === 0 && dy === 0) {
|
||||
// Back at the start. Try a new direction.
|
||||
this.currentDirectionLockSideIndeterminate = true;
|
||||
} else if (this.currentDirectionLockSideIndeterminate) {
|
||||
this.currentDirectionLockSideIndeterminate = false;
|
||||
this.currentDirectionLockSide = dx <= dy ? 0 : 1;
|
||||
}
|
||||
|
||||
if (this.currentDirectionLockSide === 0) {
|
||||
return new Vector(this.lastDragTile.x, mouseTile.y);
|
||||
} else {
|
||||
|
@ -2,43 +2,121 @@ import { BaseHUDPart } from "../base_hud_part";
|
||||
import { makeDiv, round3Digits, round2Digits } from "../../../core/utils";
|
||||
import { DynamicDomAttach } from "../dynamic_dom_attach";
|
||||
import { KEYMAPPINGS } from "../../key_action_mapper";
|
||||
import { Vector } from "../../../core/vector";
|
||||
import { TrackedState } from "../../../core/tracked_state";
|
||||
|
||||
/** @enum {string} */
|
||||
const enumDebugOverlayMode = { disabled: "disabled", regular: "regular", detailed: "detailed" };
|
||||
|
||||
/**
|
||||
* Specifies which mode follows after which mode
|
||||
* @enum {enumDebugOverlayMode}
|
||||
*/
|
||||
const enumDebugOverlayModeNext = {
|
||||
[enumDebugOverlayMode.disabled]: enumDebugOverlayMode.regular,
|
||||
[enumDebugOverlayMode.regular]: enumDebugOverlayMode.detailed,
|
||||
[enumDebugOverlayMode.detailed]: enumDebugOverlayMode.disabled,
|
||||
};
|
||||
|
||||
const UPDATE_INTERVAL_SECONDS = 0.25;
|
||||
|
||||
export class HUDDebugInfo extends BaseHUDPart {
|
||||
createElements(parent) {
|
||||
this.element = makeDiv(parent, "ingame_HUD_DebugInfo", []);
|
||||
|
||||
this.tickRateElement = makeDiv(this.element, null, ["tickRate"], "Ticks /s: 120");
|
||||
this.fpsElement = makeDiv(this.element, null, ["fps"], "FPS: 60");
|
||||
this.tickDurationElement = makeDiv(this.element, null, ["tickDuration"], "Update time: 0.5ms");
|
||||
const tickRateElement = makeDiv(this.element, null, ["tickRate"]);
|
||||
this.trackedTickRate = new TrackedState(str => (tickRateElement.innerText = str));
|
||||
|
||||
const tickDurationElement = makeDiv(this.element, null, ["tickDuration"]);
|
||||
this.trackedTickDuration = new TrackedState(str => (tickDurationElement.innerText = str));
|
||||
|
||||
const fpsElement = makeDiv(this.element, null, ["fps"]);
|
||||
this.trackedFPS = new TrackedState(str => (fpsElement.innerText = str));
|
||||
|
||||
const mousePositionElement = makeDiv(this.element, null, ["mousePosition"]);
|
||||
this.trackedMousePosition = new TrackedState(str => (mousePositionElement.innerHTML = str));
|
||||
|
||||
const cameraPositionElement = makeDiv(this.element, null, ["cameraPosition"]);
|
||||
this.trackedCameraPosition = new TrackedState(str => (cameraPositionElement.innerHTML = str));
|
||||
|
||||
this.versionElement = makeDiv(this.element, null, ["version"], "version unknown");
|
||||
}
|
||||
|
||||
initialize() {
|
||||
this.lastTick = 0;
|
||||
|
||||
this.visible = false;
|
||||
this.trackedMode = new TrackedState(this.onModeChanged, this);
|
||||
this.domAttach = new DynamicDomAttach(this.root, this.element);
|
||||
|
||||
this.root.keyMapper.getBinding(KEYMAPPINGS.ingame.toggleFPSInfo).add(() => this.toggle());
|
||||
this.root.keyMapper.getBinding(KEYMAPPINGS.ingame.toggleFPSInfo).add(() => this.cycleModes());
|
||||
|
||||
// Set initial mode
|
||||
this.trackedMode.set(enumDebugOverlayMode.disabled);
|
||||
}
|
||||
|
||||
toggle() {
|
||||
this.visible = !this.visible;
|
||||
this.domAttach.update(this.visible);
|
||||
/**
|
||||
* Called when the mode changed
|
||||
* @param {enumDebugOverlayMode} mode
|
||||
*/
|
||||
onModeChanged(mode) {
|
||||
this.element.setAttribute("data-mode", mode);
|
||||
this.versionElement.innerText = `${G_BUILD_VERSION} @ ${G_APP_ENVIRONMENT} @ ${G_BUILD_COMMIT_HASH}`;
|
||||
}
|
||||
|
||||
update() {
|
||||
const now = this.root.time.realtimeNow();
|
||||
if (now - this.lastTick > 0.25 && this.visible) {
|
||||
this.lastTick = now;
|
||||
this.tickRateElement.innerText = "Tickrate: " + this.root.dynamicTickrate.currentTickRate;
|
||||
this.fpsElement.innerText =
|
||||
"FPS: " +
|
||||
/**
|
||||
* Updates the labels
|
||||
*/
|
||||
updateLabels() {
|
||||
this.trackedTickRate.set("Tickrate: " + this.root.dynamicTickrate.currentTickRate);
|
||||
this.trackedFPS.set(
|
||||
"FPS: " +
|
||||
Math.round(this.root.dynamicTickrate.averageFps) +
|
||||
" (" +
|
||||
round2Digits(1000 / this.root.dynamicTickrate.averageFps) +
|
||||
" ms)";
|
||||
this.tickDurationElement.innerText =
|
||||
"Tick Dur: " + round3Digits(this.root.dynamicTickrate.averageTickDuration) + "ms";
|
||||
" ms)"
|
||||
);
|
||||
this.trackedTickDuration.set(
|
||||
"Tick: " + round3Digits(this.root.dynamicTickrate.averageTickDuration) + "ms"
|
||||
);
|
||||
}
|
||||
|
||||
/**
|
||||
* Updates the detailed information
|
||||
*/
|
||||
updateDetailedInformation() {
|
||||
const mousePos = this.root.app.mousePosition || new Vector(0, 0);
|
||||
const mouseTile = this.root.camera.screenToWorld(mousePos).toTileSpace();
|
||||
const cameraTile = this.root.camera.center.toTileSpace();
|
||||
|
||||
this.trackedMousePosition.set(`Pos: <code>${mouseTile.x}</code> / <code>${mouseTile.y}</code>`);
|
||||
this.trackedCameraPosition.set(`Center: <code>${cameraTile.x}</code> / <code>${cameraTile.y}</code>`);
|
||||
}
|
||||
|
||||
/**
|
||||
* Cycles through the different modes
|
||||
*/
|
||||
cycleModes() {
|
||||
this.trackedMode.set(enumDebugOverlayModeNext[this.trackedMode.get()]);
|
||||
}
|
||||
|
||||
update() {
|
||||
const visible = this.trackedMode.get() !== enumDebugOverlayMode.disabled;
|
||||
this.domAttach.update(visible);
|
||||
|
||||
if (!visible) {
|
||||
return;
|
||||
}
|
||||
|
||||
// Periodically update the text
|
||||
const now = this.root.time.realtimeNow();
|
||||
if (now - this.lastTick > UPDATE_INTERVAL_SECONDS) {
|
||||
this.lastTick = now;
|
||||
this.updateLabels();
|
||||
}
|
||||
|
||||
// Also update detailed information if required
|
||||
if (this.trackedMode.get() === enumDebugOverlayMode.detailed) {
|
||||
this.updateDetailedInformation();
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -35,6 +35,7 @@ export class MapView extends BaseMap {
|
||||
|
||||
this.root.signals.entityAdded.add(this.onEntityChanged, this);
|
||||
this.root.signals.entityDestroyed.add(this.onEntityChanged, this);
|
||||
this.root.signals.entityChanged.add(this.onEntityChanged, this);
|
||||
}
|
||||
|
||||
cleanup() {
|
||||
@ -44,7 +45,7 @@ export class MapView extends BaseMap {
|
||||
}
|
||||
|
||||
/**
|
||||
* Called when an entity was added or removed
|
||||
* Called when an entity was added, removed or changed
|
||||
* @param {Entity} entity
|
||||
*/
|
||||
onEntityChanged(entity) {
|
||||
|
@ -141,6 +141,7 @@ export class GameRoot {
|
||||
// Entities
|
||||
entityManuallyPlaced: /** @type {TypedSignal<[Entity]>} */ (new Signal()),
|
||||
entityAdded: /** @type {TypedSignal<[Entity]>} */ (new Signal()),
|
||||
entityChanged: /** @type {TypedSignal<[Entity]>} */ (new Signal()),
|
||||
entityGotNewComponent: /** @type {TypedSignal<[Entity]>} */ (new Signal()),
|
||||
entityComponentRemoved: /** @type {TypedSignal<[Entity]>} */ (new Signal()),
|
||||
entityQueuedForDestroy: /** @type {TypedSignal<[Entity]>} */ (new Signal()),
|
||||
|
@ -185,6 +185,9 @@ export class BeltSystem extends GameSystemWithFilter {
|
||||
if (G_IS_DEV && globalConfig.debug.checkBeltPaths) {
|
||||
this.debug_verifyBeltPaths();
|
||||
}
|
||||
|
||||
// Make sure the chunks know about the update
|
||||
this.root.signals.entityChanged.dispatch(targetEntity);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
@ -309,17 +309,17 @@ export class UndergroundBeltSystem extends GameSystemWithFilter {
|
||||
continue;
|
||||
}
|
||||
|
||||
if (receiverUndergroundComp.mode !== enumUndergroundBeltMode.receiver) {
|
||||
// Not a receiver
|
||||
continue;
|
||||
}
|
||||
|
||||
const receiverStaticComp = potentialReceiver.components.StaticMapEntity;
|
||||
if (receiverStaticComp.rotation !== targetRotation) {
|
||||
// Wrong rotation
|
||||
continue;
|
||||
}
|
||||
|
||||
if (receiverUndergroundComp.mode !== enumUndergroundBeltMode.receiver) {
|
||||
// Not a receiver, but a sender -> Abort to make sure we don't deliver double
|
||||
break;
|
||||
}
|
||||
|
||||
return { entity: potentialReceiver, distance: searchOffset };
|
||||
}
|
||||
|
||||
|
@ -46,18 +46,15 @@ export class MainMenuState extends GameState {
|
||||
: ""
|
||||
}
|
||||
</div>
|
||||
|
||||
${
|
||||
G_IS_STANDALONE
|
||||
? ""
|
||||
: `<video autoplay muted loop class="fullscreenBackgroundVideo">
|
||||
|
||||
<video autoplay muted loop class="fullscreenBackgroundVideo">
|
||||
<source src="${cachebust("res/bg_render.webm")}" type="video/webm">
|
||||
</video>`
|
||||
}
|
||||
</video>
|
||||
|
||||
|
||||
<div class="logo">
|
||||
<img src="${cachebust("res/logo.png")}" alt="shapez.io Logo">
|
||||
<span class="updateLabel">Wires update!</span>
|
||||
</div>
|
||||
|
||||
|
||||
@ -208,14 +205,12 @@ export class MainMenuState extends GameState {
|
||||
|
||||
// Initialize video
|
||||
this.videoElement = this.htmlElement.querySelector("video");
|
||||
if (this.videoElement) {
|
||||
this.videoElement.playbackRate = 0.9;
|
||||
this.videoElement.addEventListener("canplay", () => {
|
||||
if (this.videoElement) {
|
||||
this.videoElement.classList.add("loaded");
|
||||
}
|
||||
});
|
||||
}
|
||||
this.videoElement.playbackRate = 0.9;
|
||||
this.videoElement.addEventListener("canplay", () => {
|
||||
if (this.videoElement) {
|
||||
this.videoElement.classList.add("loaded");
|
||||
}
|
||||
});
|
||||
|
||||
this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked);
|
||||
this.trackClicks(qs(".changelog"), this.onChangelogClicked);
|
||||
|
@ -30,6 +30,7 @@ The base translation is `base-en.yaml`. It will always contain the latest phrase
|
||||
- [Danish](base-da.yaml)
|
||||
- [Finnish](base-fi.yaml)
|
||||
- [Catalan](base-cat.yaml)
|
||||
- [Slovenian](base-sl.yaml)
|
||||
|
||||
(If you want to translate into a new language, see below!)
|
||||
|
||||
|
@ -61,7 +61,7 @@ steamPage:
|
||||
[*] Aangepaste mappen aanmaken (Het kiezen van de hoeveelheid en de grootte van de grondstofbronnen, seeds, en meer)
|
||||
[*] Meer soorten vormen
|
||||
[*] Meer prestatieverbeteringen (Hoewel het spel al vrij goed loopt!)
|
||||
[*] Kleurenblind-modus
|
||||
[*] Kleurenblindmodus
|
||||
[*] En nog veel meer!
|
||||
[/list]
|
||||
|
||||
@ -486,7 +486,7 @@ buildings:
|
||||
mixer:
|
||||
default:
|
||||
name: &mixer Kleurenmenger
|
||||
description: Mengt twee kleuren.
|
||||
description: Mengt twee kleuren met behulp van additieve kleurmenging.
|
||||
|
||||
painter:
|
||||
default:
|
||||
@ -529,11 +529,11 @@ storyRewards:
|
||||
reward_painter:
|
||||
title: Verven
|
||||
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, there is a <strong>color blind mode</strong> in the settings!
|
||||
De <strong>verver</strong> is ontgrendeld - Onttrek wat kleur (op dezelfde manier hoe je vormen onttrekt) en combineer het met een vorm in de verver om ze te kleuren!<br><br>PS: Als je kleurenblind bent, is er een <strong>kleurenblindmodus</strong> in de instellingen!
|
||||
|
||||
reward_mixer:
|
||||
title: Kleuren mengen
|
||||
desc: De <strong>menger</strong> is ontgrendeld - gebruik dit gebouw om twee kleuren te mengen via <strong>'additive blending'</strong>!
|
||||
desc: De <strong>menger</strong> is ontgrendeld - Gebruik dit gebouw om twee kleuren te mengen met behulp van <strong>additieve kleurmenging</strong>!
|
||||
|
||||
reward_stacker:
|
||||
title: Stapelaar
|
||||
@ -725,11 +725,11 @@ settings:
|
||||
title: Kleurenblindmodus
|
||||
description: Schakelt verschillende hulpmiddelen in zodat je het spel alsnog kunt spelen wanneer je kleurenblind bent.
|
||||
rotationByBuilding:
|
||||
title: Rotatie per type gebouw
|
||||
description: >-
|
||||
Elk type gebouw onthoud apart de rotatie waarin je het voor het laatst geplaatst hebt.
|
||||
Dit kan handig zijn wanneer je vaak tussen verschillende
|
||||
soorten gebouwen wisselt.
|
||||
title: Rotatie per type gebouw
|
||||
description: >-
|
||||
Elk type gebouw onthoud apart de rotatie waarin je het voor het laatst geplaatst hebt.
|
||||
Dit kan handig zijn wanneer je vaak tussen verschillende
|
||||
soorten gebouwen wisselt.
|
||||
|
||||
keybindings:
|
||||
title: Sneltoetsen
|
||||
|
887
translations/base-sl.yaml
Normal file
887
translations/base-sl.yaml
Normal file
@ -0,0 +1,887 @@
|
||||
#
|
||||
# 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 processing of increasingly complex shapes across an infinitely expanding map.
|
||||
|
||||
# This is the text shown above the discord link
|
||||
discordLink: Official Discord - Chat with me!
|
||||
|
||||
# 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 processing of increasingly complex shapes across an infinitely expanding map.
|
||||
Upon delivering the requested shapes you will progress within the game and unlock upgrades to speed up your factory.
|
||||
|
||||
As the demand for shapes increases, you will have to scale up your factory to meet the demand - Don't forget about resources though, you will have to expand across the [b]infinite map[/b]!
|
||||
|
||||
Soon you will have to mix colors and paint your shapes with them - Combine red, green and blue color resources to produce different colors and paint shapes with it to satisfy the demand.
|
||||
|
||||
This game features 18 progressive levels (Which should keep you busy for hours already!) but I'm constantly adding new content - There is a lot planned!
|
||||
|
||||
Purchasing the game gives you access to the standalone version which has additional features and you'll also receive access to newly developed features.
|
||||
|
||||
[img]{STEAM_APP_IMAGE}/extras/header_standalone_advantages.png[/img]
|
||||
|
||||
[list]
|
||||
[*] Dark Mode
|
||||
[*] Unlimited Waypoints
|
||||
[*] Unlimited Savegames
|
||||
[*] Additional settings
|
||||
[*] Coming soon: Wires & Energy! Aiming for (roughly) end of July 2020.
|
||||
[*] Coming soon: More Levels
|
||||
[*] Allows me to further develop shapez.io ❤️
|
||||
[/list]
|
||||
|
||||
[img]{STEAM_APP_IMAGE}/extras/header_future_updates.png[/img]
|
||||
|
||||
I am updating the game very often and trying to push an update at least every week!
|
||||
|
||||
[list]
|
||||
[*] Different maps and challenges (e.g. maps with obstacles)
|
||||
[*] Puzzles (Deliver the requested shape with a restricted area / set of buildings)
|
||||
[*] A story mode where buildings have a cost
|
||||
[*] Configurable map generator (Configure resource/shape size/density, seed and more)
|
||||
[*] Additional types of shapes
|
||||
[*] Performance improvements (The game already runs pretty well!)
|
||||
[*] And much more!
|
||||
[/list]
|
||||
|
||||
[img]{STEAM_APP_IMAGE}/extras/header_open_source.png[/img]
|
||||
|
||||
Anybody can contribute, I'm actively involved in the community and attempt to review all suggestions and take feedback into consideration where possible.
|
||||
Be sure to check out my trello board for the full roadmap!
|
||||
|
||||
[img]{STEAM_APP_IMAGE}/extras/header_links.png[/img]
|
||||
|
||||
[list]
|
||||
[*] [url=https://discord.com/invite/HN7EVzV]Official Discord[/url]
|
||||
[*] [url=https://trello.com/b/ISQncpJP/shapezio]Roadmap[/url]
|
||||
[*] [url=https://www.reddit.com/r/shapezio]Subreddit[/url]
|
||||
[*] [url=https://github.com/tobspr/shapez.io]Source code (GitHub)[/url]
|
||||
[*] [url=https://github.com/tobspr/shapez.io/blob/master/translations/README.md]Help translate[/url]
|
||||
[/list]
|
||||
|
||||
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
|
||||
subreddit: Reddit
|
||||
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 week's 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 showcase them 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 am doing
|
||||
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 getting the standalone version 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 version!
|
||||
|
||||
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?
|
||||
|
||||
massCutInsufficientConfirm:
|
||||
title: Confirm cut
|
||||
desc: >-
|
||||
You can not afford to paste this area! Are you sure you want to cut it?
|
||||
|
||||
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: Delete
|
||||
pasteLastBlueprint: Paste last blueprint
|
||||
lockBeltDirection: Enable belt planner
|
||||
plannerSwitchSide: Flip planner side
|
||||
cutSelection: Cut
|
||||
copySelection: Copy
|
||||
clearSelection: Clear selection
|
||||
pipette: Pipette
|
||||
switchLayers: Switch layers
|
||||
|
||||
# Names of the colors, used for the color blind mode
|
||||
colors:
|
||||
red: Red
|
||||
green: Green
|
||||
blue: Blue
|
||||
yellow: Yellow
|
||||
purple: Purple
|
||||
cyan: Cyan
|
||||
white: White
|
||||
black: Black
|
||||
uncolored: No color
|
||||
|
||||
# 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.
|
||||
|
||||
# Shape viewer
|
||||
shapeViewer:
|
||||
title: Layers
|
||||
empty: Empty
|
||||
copyKey: Copy Key
|
||||
|
||||
# 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.
|
||||
|
||||
wire:
|
||||
default:
|
||||
name: &wire Wire
|
||||
description: Allows you to transport energy
|
||||
|
||||
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 you to tunnel resources under buildings and belts.
|
||||
|
||||
tier2:
|
||||
name: Tunnel Tier II
|
||||
description: Allows you 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 halves. <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>
|
||||
|
||||
advanced_processor:
|
||||
default:
|
||||
name: &advanced_processor Advanced Processor
|
||||
description: Advanced shape processing
|
||||
|
||||
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 you 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.
|
||||
|
||||
energy_generator:
|
||||
deliver: Deliver
|
||||
|
||||
# This will be shown before the amount, so for example 'For 123 Energy'
|
||||
toGenerateEnergy: For
|
||||
|
||||
default:
|
||||
name: &energy_generator Energy Generator
|
||||
description: Generates energy by consuming shapes. Each energy generator requires a different shape.
|
||||
|
||||
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, there is a <strong>colorblind mode</strong> in the settings!
|
||||
|
||||
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 you to rotate shapes counter-clockwise! To build it, select the rotater and <strong>press 'T' to cycle through 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 belt!
|
||||
|
||||
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 you 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 you 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>!
|
||||
|
||||
reward_wires:
|
||||
title: Wires
|
||||
desc: TODO
|
||||
|
||||
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's resolution, but this setting controls the amount of scaling.
|
||||
scales:
|
||||
super_small: Super small
|
||||
small: Small
|
||||
regular: Regular
|
||||
large: Large
|
||||
huge: Huge
|
||||
|
||||
autosaveInterval:
|
||||
title: Autosave Interval
|
||||
description: >-
|
||||
Controls how often the game saves automatically. You can also disable it entirely here.
|
||||
|
||||
intervals:
|
||||
one_minute: 1 Minute
|
||||
two_minutes: 2 Minutes
|
||||
five_minutes: 5 Minutes
|
||||
ten_minutes: 10 Minutes
|
||||
twenty_minutes: 20 Minutes
|
||||
disabled: Disabled
|
||||
|
||||
scrollWheelSensitivity:
|
||||
title: Zoom sensitivity
|
||||
description: >-
|
||||
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!
|
||||
|
||||
enableColorBlindHelper:
|
||||
title: Color Blind Mode
|
||||
description: >-
|
||||
Enables various tools which allow you to play the game if you are color blind.
|
||||
|
||||
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 up to 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 you 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.
|
||||
|
||||
rotationByBuilding:
|
||||
title: Rotation by building type
|
||||
description: >-
|
||||
Each building type remembers the rotation you last set it to individually. This may be more comfortable if you frequently switch between placing different building types.
|
||||
|
||||
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: >-
|
||||
Disables 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
|
||||
menuClose: Close Menu
|
||||
|
||||
toggleHud: Toggle HUD
|
||||
toggleFPSInfo: Toggle FPS and Debug Info
|
||||
switchLayers: Switch layers
|
||||
exportScreenshot: Export whole Base as Image
|
||||
belt: *belt
|
||||
splitter: *splitter
|
||||
underground_belt: *underground_belt
|
||||
miner: *miner
|
||||
cutter: *cutter
|
||||
advanced_processor: *advanced_processor
|
||||
rotater: *rotater
|
||||
stacker: *stacker
|
||||
mixer: *mixer
|
||||
energy_generator: *energy_generator
|
||||
painter: *painter
|
||||
trash: *trash
|
||||
wire: *wire
|
||||
|
||||
pipette: Pipette
|
||||
rotateWhilePlacing: Rotate
|
||||
rotateInverseModifier: >-
|
||||
Modifier: Rotate CCW instead
|
||||
cycleBuildingVariants: Cycle Variants
|
||||
confirmMassDelete: Delete area
|
||||
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
|
||||
|
||||
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.
|
Loading…
Reference in New Issue
Block a user