Merge pull request #1 from tobspr/master

update from original
This commit is contained in:
TheCorsaireBe 2020-06-08 08:42:45 +02:00 committed by GitHub
commit 3f4c7cb275
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
21 changed files with 773 additions and 44 deletions

Binary file not shown.

Before

Width:  |  Height:  |  Size: 906 KiB

After

Width:  |  Height:  |  Size: 1.6 MiB

BIN
artwork/itch.io/bg.png Normal file

Binary file not shown.

After

Width:  |  Height:  |  Size: 3.1 MiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 12 KiB

View File

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

Binary file not shown.

After

Width:  |  Height:  |  Size: 707 KiB

View File

@ -237,7 +237,7 @@ module.exports = ({
pattern: /globalConfig\.beltSpeedItemsPerSecond/g, pattern: /globalConfig\.beltSpeedItemsPerSecond/g,
replacement: () => "2.0", replacement: () => "2.0",
}, },
{ pattern: /globalConfig\.itemSpacingOnBelts/g, replacement: () => "0.8" }, { pattern: /globalConfig\.itemSpacingOnBelts/g, replacement: () => "0.63" },
{ pattern: /globalConfig\.debug/g, replacement: () => "''" }, { pattern: /globalConfig\.debug/g, replacement: () => "''" },
], ],
}), }),

View File

@ -1,6 +1,6 @@
#ingame_HUD_Watermark { #ingame_HUD_Watermark {
position: absolute; position: absolute;
background: uiResource("get_on_itch_io.svg") center center / contain no-repeat; background: uiResource("get_on_steam.png") center center / contain no-repeat;
@include S(width, 110px); @include S(width, 110px);
@include S(height, 40px); @include S(height, 40px);
@include S(top, 10px); @include S(top, 10px);

View File

@ -103,9 +103,9 @@
.steamLink { .steamLink {
width: 100%; width: 100%;
@include S(height, 50px); @include S(height, 40px);
background: uiResource("get_on_itch_io.svg") center center / contain no-repeat; background: uiResource("get_on_steam.png") center center / contain no-repeat;
overflow: hidden; overflow: hidden;
display: block; display: block;
text-indent: -999em; text-indent: -999em;

View File

@ -30,7 +30,7 @@
width: 200px; width: 200px;
height: 80px; height: 80px;
min-height: 40px; min-height: 40px;
background: uiResource("get_on_itch_io.svg") center center / contain no-repeat; background: uiResource("get_on_steam.png") center center / contain no-repeat;
overflow: hidden; overflow: hidden;
display: block; display: block;
text-indent: -999em; text-indent: -999em;

View File

@ -121,7 +121,7 @@ export class Application {
* Initializes all platform instances * Initializes all platform instances
*/ */
initPlatformDependentInstances() { initPlatformDependentInstances() {
logger.log("Creating platform dependent instances"); logger.log("Creating platform dependent instances (standalone=", G_IS_STANDALONE, ")");
if (G_IS_STANDALONE) { if (G_IS_STANDALONE) {
this.platformWrapper = new PlatformWrapperImplElectron(this); this.platformWrapper = new PlatformWrapperImplElectron(this);
@ -256,11 +256,15 @@ export class Application {
onAppRenderableStateChanged(renderable) { onAppRenderableStateChanged(renderable) {
logger.log("Application renderable:", renderable); logger.log("Application renderable:", renderable);
window.focus(); window.focus();
const currentState = this.stateMgr.getCurrentState();
if (!renderable) { if (!renderable) {
this.stateMgr.getCurrentState().onAppPause(); if (currentState) {
currentState.onAppPause();
}
} else { } else {
// Got resume if (currentState) {
this.stateMgr.getCurrentState().onAppResume(); currentState.onAppResume();
}
this.checkResize(); this.checkResize();
} }
@ -274,7 +278,10 @@ export class Application {
if (!this.unloaded) { if (!this.unloaded) {
logSection("UNLOAD HANDLER", "#f77"); logSection("UNLOAD HANDLER", "#f77");
this.unloaded = true; this.unloaded = true;
this.stateMgr.getCurrentState().onBeforeExit(); const currentState = this.stateMgr.getCurrentState();
if (currentState) {
currentState.onBeforeExit();
}
this.deinitialize(); this.deinitialize();
} }
} }
@ -284,8 +291,9 @@ export class Application {
*/ */
onBeforeUnload(event) { onBeforeUnload(event) {
logSection("BEFORE UNLOAD HANDLER", "#f77"); logSection("BEFORE UNLOAD HANDLER", "#f77");
const currentState = this.stateMgr.getCurrentState();
if (!G_IS_DEV && this.stateMgr.getCurrentState().getHasUnloadConfirmation()) { if (!G_IS_DEV && currentState && currentState.getHasUnloadConfirmation()) {
if (!G_IS_STANDALONE) { if (!G_IS_STANDALONE) {
// Need to show a "Are you sure you want to exit" // Need to show a "Are you sure you want to exit"
event.preventDefault(); event.preventDefault();
@ -335,7 +343,10 @@ export class Application {
return; return;
} }
this.stateMgr.getCurrentState().onBackgroundTick(dt); const currentState = this.stateMgr.getCurrentState();
if (currentState) {
currentState.onBackgroundTick(dt);
}
} }
/** /**
@ -355,7 +366,10 @@ export class Application {
this.lastResizeCheck = time; this.lastResizeCheck = time;
} }
this.stateMgr.getCurrentState().onRender(dt); const currentState = this.stateMgr.getCurrentState();
if (currentState) {
currentState.onRender(dt);
}
} }
/** /**
@ -368,7 +382,10 @@ export class Application {
if (this.screenWidth !== w || this.screenHeight !== h || forceUpdate) { if (this.screenWidth !== w || this.screenHeight !== h || forceUpdate) {
this.screenWidth = w; this.screenWidth = w;
this.screenHeight = h; this.screenHeight = h;
this.stateMgr.getCurrentState().onResized(this.screenWidth, this.screenHeight); const currentState = this.stateMgr.getCurrentState();
if (currentState) {
currentState.onResized(this.screenWidth, this.screenHeight);
}
const scale = this.getEffectiveUiScale(); const scale = this.getEffectiveUiScale();
waitNextFrame().then(() => document.documentElement.style.setProperty("--ui-scale", scale)); waitNextFrame().then(() => document.documentElement.style.setProperty("--ui-scale", scale));

View File

@ -1,7 +1,21 @@
export const CHANGELOG = [ export const CHANGELOG = [
{
version: "1.1.8",
date: "07.06.2020",
entries: [
"You can now purchase the standalone on steam! <a href='https://steam.shapez.io' target='blank'>View steam page</a>",
"Added ability to create markers in the demo, but only two.",
"Contest #01 has ended! I'll now work through the entries, select the 5 I like most and present them to the community to vote for!",
],
},
{
version: "1.1.7",
date: "04.06.2020",
entries: ["HOTFIX: Fix savegames not showing up on the standalone version"],
},
{ {
version: "1.1.6", version: "1.1.6",
date: "unreleased", date: "04.06.2020",
entries: [ entries: [
"The steam release will happen on the <strong>7th of June</strong> - Be sure to add it to your wishlist! <a href='https://steam.shapez.io' target='blank'>View on steam</a>", "The steam release will happen on the <strong>7th of June</strong> - Be sure to add it to your wishlist! <a href='https://steam.shapez.io' target='blank'>View on steam</a>",
"Fixed level complete dialog being blurred when the shop was opened before", "Fixed level complete dialog being blurred when the shop was opened before",

View File

@ -15,8 +15,7 @@ export const THIRDPARTY_URLS = {
discord: "https://discord.gg/HN7EVzV", discord: "https://discord.gg/HN7EVzV",
github: "https://github.com/tobspr/shapez.io", github: "https://github.com/tobspr/shapez.io",
// standaloneStorePage: "https://steam.shapez.io", standaloneStorePage: "https://store.steampowered.com/app/1318690/shapezio/",
standaloneStorePage: "https://tobspr.itch.io/shapez.io",
}; };
export const globalConfig = { export const globalConfig = {
@ -46,7 +45,7 @@ export const globalConfig = {
// Belt speeds // Belt speeds
// NOTICE: Update webpack.production.config too! // NOTICE: Update webpack.production.config too!
beltSpeedItemsPerSecond: 2, beltSpeedItemsPerSecond: 2,
itemSpacingOnBelts: 0.63, itemSpacingOnBelts: 0.8,
minerSpeedItemsPerSecond: 0, // COMPUTED minerSpeedItemsPerSecond: 0, // COMPUTED
undergroundBeltMaxTilesByTier: [5, 8], undergroundBeltMaxTilesByTier: [5, 8],
@ -83,7 +82,7 @@ export const globalConfig = {
debug: { debug: {
/* dev:start */ /* dev:start */
// fastGameEnter: true, fastGameEnter: true,
// noArtificialDelays: true, // noArtificialDelays: true,
// disableSavegameWrite: true, // disableSavegameWrite: true,
// showEntityBounds: true, // showEntityBounds: true,
@ -93,9 +92,9 @@ export const globalConfig = {
// disableZoomLimits: true, // disableZoomLimits: true,
// showChunkBorders: true, // showChunkBorders: true,
// rewardsInstant: true, // rewardsInstant: true,
// allBuildingsUnlocked: true, allBuildingsUnlocked: true,
// blueprintsNoCost: true, blueprintsNoCost: true,
// upgradesNoCost: true, upgradesNoCost: true,
// disableUnlockDialog: true, // disableUnlockDialog: true,
// disableLogicTicks: true, // disableLogicTicks: true,
// testClipping: true, // testClipping: true,

View File

@ -13,7 +13,7 @@ export class HUDWatermark extends BaseHUDPart {
} }
onWatermarkClick() { onWatermarkClick() {
this.root.app.analytics.trackUiClick("watermark_click"); this.root.app.analytics.trackUiClick("watermark_click_2");
this.root.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage); this.root.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage);
} }

View File

@ -133,11 +133,6 @@ export class HUDWaypoints extends BaseHUDPart {
* @param {Vector=} worldPos Override the world pos, otherwise it is the camera position * @param {Vector=} worldPos Override the world pos, otherwise it is the camera position
*/ */
requestCreateMarker(worldPos = null) { requestCreateMarker(worldPos = null) {
if (IS_DEMO) {
this.root.hud.parts.dialogs.showFeatureRestrictionInfo(T.demo.features.creatingMarkers);
return;
}
const markerNameInput = new FormElementInput({ const markerNameInput = new FormElementInput({
id: "markerName", id: "markerName",
label: null, label: null,
@ -157,6 +152,11 @@ export class HUDWaypoints extends BaseHUDPart {
const center = worldPos || this.root.camera.center; const center = worldPos || this.root.camera.center;
dialog.buttonSignals.ok.add(() => { dialog.buttonSignals.ok.add(() => {
if (IS_DEMO && this.waypoints.length > 2) {
this.root.hud.parts.dialogs.showFeatureRestrictionInfo("", T.dialogs.markerDemoLimit.desc);
return;
}
this.waypoints.push({ this.waypoints.push({
label: markerNameInput.getValue(), label: markerNameInput.getValue(),
center: { x: center.x, y: center.y }, center: { x: center.x, y: center.y },

View File

@ -91,7 +91,14 @@ export class PlatformWrapperImplBrowser extends PlatformWrapperInterface {
} }
// Try accessing the indexedb // Try accessing the indexedb
const request = window.indexedDB.open("indexeddb_feature_detection", 1); let request;
try {
request = window.indexedDB.open("indexeddb_feature_detection", 1);
} catch (ex) {
logger.warn("Error while opening indexed db:", ex);
resolve();
return;
}
request.onerror = err => { request.onerror = err => {
logger.log("Indexed DB can *not* be accessed: ", err); logger.log("Indexed DB can *not* be accessed: ", err);
logger.log("Using fallback to local storage"); logger.log("Using fallback to local storage");

View File

@ -2,13 +2,14 @@ import { PlatformWrapperImplBrowser } from "../browser/wrapper";
import { getIPCRenderer } from "../../core/utils"; import { getIPCRenderer } from "../../core/utils";
import { createLogger } from "../../core/logging"; import { createLogger } from "../../core/logging";
import { StorageImplElectron } from "./storage"; import { StorageImplElectron } from "./storage";
import { PlatformWrapperInterface } from "../wrapper";
const logger = createLogger("electron-wrapper"); const logger = createLogger("electron-wrapper");
export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser { export class PlatformWrapperImplElectron extends PlatformWrapperImplBrowser {
initialize() { initialize() {
this.app.storage = new StorageImplElectron(this); this.app.storage = new StorageImplElectron(this);
return super.initialize(); return PlatformWrapperInterface.prototype.initialize.call(this);
} }
getId() { getId() {

View File

@ -27,7 +27,8 @@ export class MainMenuState extends GameState {
<a href="#" class="steamLink" target="_blank">Get the shapez.io standalone!</a> <a href="#" class="steamLink" target="_blank">Get the shapez.io standalone!</a>
`; `;
return ` return (
`
<button class="settingsButton"></button> <button class="settingsButton"></button>
@ -57,13 +58,20 @@ export class MainMenuState extends GameState {
<div class="sideContainer"> <div class="sideContainer">
${IS_DEMO ? `<div class="standaloneBanner">${bannerHtml}</div>` : ""} ${IS_DEMO ? `<div class="standaloneBanner">${bannerHtml}</div>` : ""}
<div class="contest"> <div class="contest">
<h3>${T.mainMenu.contests.contest_01_03062020.title}</h3> <h3>${T.mainMenu.contests.contest_01_03062020.title}</h3>
<p>${T.mainMenu.contests.contest_01_03062020.desc}</p> ` +
/*<p>${T.mainMenu.contests.contest_01_03062020.desc}</p>
<button class="styledButton participateContest">${ <button class="styledButton participateContest">${
T.mainMenu.contests.showInfo T.mainMenu.contests.showInfo
}</button> }</button>*/
`
<p>${T.mainMenu.contests.contestOver}</p>
</div> </div>
</div> </div>
<div class="mainContainer"> <div class="mainContainer">
@ -104,7 +112,8 @@ export class MainMenuState extends GameState {
<div class="author">Made by <a class="producerLink" target="_blank">Tobias Springer</a></div> <div class="author">Made by <a class="producerLink" target="_blank">Tobias Springer</a></div>
</div> </div>
`; `
);
} }
requestImportSavegame() { requestImportSavegame() {
@ -220,7 +229,10 @@ export class MainMenuState extends GameState {
this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked); this.trackClicks(qs(".settingsButton"), this.onSettingsButtonClicked);
this.trackClicks(qs(".changelog"), this.onChangelogClicked); this.trackClicks(qs(".changelog"), this.onChangelogClicked);
this.trackClicks(qs(".participateContest"), this.onContestClicked); const contestButton = qs(".participateContest");
if (contestButton) {
this.trackClicks(contestButton, this.onContestClicked);
}
if (G_IS_STANDALONE) { if (G_IS_STANDALONE) {
this.trackClicks(qs(".exitAppButton"), this.onExitAppButtonClicked); this.trackClicks(qs(".exitAppButton"), this.onExitAppButtonClicked);
@ -256,7 +268,7 @@ export class MainMenuState extends GameState {
} }
onSteamLinkClicked() { onSteamLinkClicked() {
this.app.analytics.trackUiClick("main_menu_steam_link"); this.app.analytics.trackUiClick("main_menu_steam_link_2");
this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage); this.app.platformWrapper.openExternalLink(THIRDPARTY_URLS.standaloneStorePage);
return false; return false;
} }

View File

@ -13,11 +13,11 @@ export class MobileWarningState extends GameState {
<img class="logo" src="${cachebust("res/logo.png")}" alt="shapez.io Logo"> <img class="logo" src="${cachebust("res/logo.png")}" alt="shapez.io Logo">
<p> <p>
I'm sorry, but shapez.io is not yet available on mobile devices! I'm sorry, but shapez.io is not available on mobile devices yet!
(There is also no estimate when this will change, but feel to make a contribution! It's There is also no estimate when this will change, but feel to make a contribution! It's
&nbsp;<a href="https://github.com/tobspr/shapez.io" target="_blank">open source</a>!)</p> &nbsp;<a href="https://github.com/tobspr/shapez.io" target="_blank">open source</a>!</p>
<p>If you want to play on your computer, you can also get the standalone on itch.io:</p> <p>If you want to play on your computer, you can also get the standalone on steam:</p>
<a href="${ <a href="${

View File

@ -97,12 +97,13 @@ mainMenu:
<li>Bonus points if you share it on social media!</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>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>The winner gets <strong>$25</strong> (Paypal, Amazon Gift Card, whatever you prefer)</li>
<li>Deadline: 07.06.2020 12:00 CEST</li> <li>Deadline: 07.06.2020 12:00 AM CEST</li>
</ul> </ul>
<br> <br>
I'm looking forward to seeing your awesome creations! I'm looking forward to seeing your awesome creations!
showInfo: Participate showInfo: View
contestOver: This contest has ended - Join the discord to get noticed about new contests!
dialogs: dialogs:
buttons: buttons:
@ -218,6 +219,9 @@ dialogs:
title: New Marker title: New Marker
desc: Give it a meaningful name desc: Give it a meaningful name
markerDemoLimit:
desc: You can only create two custom markers in the demo. Get the standalone for unlimited markers!
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
# every situation # every situation
@ -669,6 +673,5 @@ demo:
importingGames: Importing savegames importingGames: Importing savegames
oneGameLimit: Limited to one savegame oneGameLimit: Limited to one savegame
customizeKeybindings: Customizing Keybindings customizeKeybindings: Customizing Keybindings
creatingMarkers: Create custom markers
settingNotAvailable: Not available in the demo. settingNotAvailable: Not available in the demo.

View File

@ -0,0 +1,673 @@
#
# 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.
#
global:
loading: Carregando
error: Erro
# 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: um segundo atrás
xSecondsAgo: <x> segundos atrás
oneMinuteAgo: um minuto atrás
xMinutesAgo: <x> minutos atrás
oneHourAgo: uma hora atrás
xHoursAgo: <x> horas atrás
oneDayAgo: um dia atrás
xDaysAgo: <x> dias atrás
# Short formats for times, e.g. '5h 23m'
secondsShort: <seconds>s
minutesAndSecondsShort: <minutes>m <seconds>s
hoursAndMinutesShort: <hours>h <minutes>s
xMinutes: <x> minutos
keys:
tab: TAB
control: CTRL
alt: ALT
escape: ESC
shift: SHIFT
space: ESPAÇO
demoBanners:
# This is the "advertisement" shown in the main menu and other various places
title: Versão Demo
intro: >-
Pegue a versão completa para desbloquear todas os recursos
mainMenu:
play: Jogar
changelog: Changelog
importSavegame: Importar
openSourceHint: Esse jogo tem código aberto!
discordLink: Discord oficial
# This is shown when using firefox and other browsers which are not supported.
browserWarning: >-
Desculpe, o jogo fica lento em seu navegador! Compre a versão completa ou baixe o Chrome para obter uma experiência completa.
savegameLevel: Level <x>
savegameLevelUnknown: Level desconhecido
contests:
contest_01_03062020:
title: "Concurso #01"
desc: Ganhe <strong> $ 25 </strong> pela melhor base!
longDesc: >-
Para retribuir, pensei que seria legal fazer concursos semanais!
<br><br>
<strong> Tópico dessa semana:</strong> Cronstua a base mais legal!
<br><br>
Here's the deal:<br>
<ul class="bucketList">
<li>Envie uma captura de tela da sua base para <strong>contest@shapez.io</strong></li>
<li>Pontos bônus se você o compartilhar nas mídias sociais!</li>
<li>Vou escolher 5 capturas de tela e propor à votação a comunidade <strong>discord</strong>.</li>
<li>o vencedor recebe <strong> $ 25 </strong> (Paypal, Amazon Gift Card, o que você preferir)</li>
<li>Até 07.06.2020 12:00 CEST</li>
</ul>
<br>
Estou ansioso para ver suas criações incríveis!
showInfo: Participate
dialogs:
buttons:
ok: OK
delete: Deletar
cancel: Cancelar
later: Voltar
restart: Reiniciar
reset: Reset
getStandalone: Obter versão completa
deleteGame: Eu sei o que eu faço
viewUpdate: Atualizações
showUpgrades: Mostrar atualizações
showKeybindings: Controles
importSavegameError:
title: Erro importante
text: >-
Falha ao carregar seu savegame:
importSavegameSuccess:
title: Sucesso
text: >-
Seu savegame foi importado.
gameLoadFailure:
title: Jogo esta quebrado
text: >-
Falha ao carregar seu savegame
confirmSavegameDelete:
title: Confirmar exclusão
text: >-
Tem certeza que quer excluir esse jogo?
savegameDeletionError:
title: Falha para deletar
text: >-
Falha ao deletar seu savegame:
restartRequired:
title: Reiniciar
text: >-
Voce precisa reiniciar o jogo para aplicar as mudanças.
editKeybinding:
title: Change Keybinding
desc: Press the key you want to assign, or escape to cancel.
resetKeybindingsConfirmation:
title: Resetar controles
desc: Essa opção deixa os controles no modo padrão.
keybindingsResetOk:
title: Resetar controles
desc: Os controles foram resetados para o modo padrão.
featureRestriction:
title: Versão Demo
desc: Você tentou acessar um recurso (<feature>) que não está disponível na demo. Considere obter a versão completa para a proceder!
saveNotPossibleInDemo:
desc: Seu jogo foi salvo, mas a restauração só é possível na versão completa. Considere obter a versão completa!
leaveNotPossibleInDemo:
title: Demo version
desc: Seu jogo foi salvo, mas você não poderá restaurá-lo na demo. Restaurar seus savegames só é possível na versão completa. Você tem certeza?
newUpdate:
title: Atualização disponível
desc: Uma atualização para esse jogo esta disponível!
oneSavegameLimit:
title: Save limitado
desc: Você pode ter apenas um savegame por vez na versão demo. Remova o existente ou obtenha a versão completa!
updateSummary:
title: Nova Atualização!
desc: >-
Aqui estão as alterações desde a última vez que você jogou:
hintDescription:
title: Tutorial
desc: >-
Sempre que precisar de ajuda ou estiver parado, confira o botão 'Mostrar dica' no canto inferior esquerdo e darei o meu melhor para ajudá-lo!
upgradesIntroduction:
title: Desbloquear updates
desc: >-
Todas as formas que você produz podem ser usadas para desbloquear atualizações - <strong> Não destrua suas antigas fábricas!!</strong>
O guia de atualizações pode ser encontrada no canto superior direito da tela.
massDeleteConfirm:
title: Deletar
desc: >-
Voce esta deletando vários itens (<count> para ser exato)! Voce quer continuar?
blueprintsNotUnlocked:
title: Não desbloqueado ainda
desc: >-
Os projetos ainda não foram desbloqueados! Complete mais níveis para desbloqueá-los.
keybindingsIntroduction:
title: Teclas úteis
desc: >-
Este jogo possui muitas combinações de teclas que facilitam a construção de grandes fábricas
Aqui estão alguns mas certifique-se de <strong> verificar as combinações de teclas </strong>!<br><br>
<code class='keybinding'>CTRL</code> + Drag: Selecione a área para copiar / delete.<br>
<code class='keybinding'>SHIFT</code>: Mantenha pressionado para colocar vários.<br>
<code class='keybinding'>ALT</code>: Inverter as posições.<br>
createMarker:
title: Nova Marcação
desc: De um nome
ingame:
# This is shown in the top left corner and displays useful keybindings in
# every situation
keybindingsOverlay:
moveMap: Mover
removeBuildings: Deletar
stopPlacement: Parar
rotateBuilding: Rotação
placeMultiple: Colocar vários
reverseOrientation: reverso
disableAutoOrientation: desligar orientações
toggleHud: Base
placeBuilding: Colocar construção
createMarker: Criar marcador
delete: Destruir
# 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: Aperte <key> para variações.
# Shows the hotkey in the ui, e.g. "Hotkey: Q"
hotkeyLabel: >-
Hotkey: <key>
infoTexts:
speed: velocidade
range: distancia
storage: Estoque
oneItemPerSecond: 1 item / segundo
itemsPerSecond: <x> itens / 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: Completado
unlockText: Desbloqueado <reward>!
buttonNextLevel: Próximo Level
# Notifications on the lower right
notifications:
newUpgrade: Nova Atualização disponível!
gameSaved: Seu jogo foi Salvo.
# Mass select information, this is when you hold CTRL and then drag with your mouse
# to select multiple buildings
massSelect:
infoText: Aperte <keyCopy> para copiar, <keyDelete> para excluir e <keyCancel> para cancelar.
# The "Upgrades" window
shop:
title: Atualizações
buttonUnlock: Atualizações
# Gets replaced to e.g. "Tier IX"
tier: Nível <x>
# The roman number for each tier
tierLabels: [I, II, III, IV, V, VI, VII, VIII, IX, X]
maximumLevel: Level Máximo
# The "Statistics" window
statistics:
title: Estatísticas
dataSources:
stored:
title: Estoque
description: Exibindo a quantidade de formas armazenadas em seu edifício central.
produced:
title: Produção
description: Exibindo todas as formas que toda a sua fábrica produz, incluindo produtos intermediários..
delivered:
title: Entregue
description: Exibindo formas entregues ao seu edifício central..
noShapesProduced: Nenhuma forma foi produzida até o momento.
# Displays the shapes per minute, e.g. '523 / m'
shapesPerMinute: <formas> / m
# Settings menu, when you press "ESC"
settingsMenu:
playtime: Tempo de Jogo
buildingsPlaced: Construções
beltsPlaced: Belts
buttons:
continue: Continue
settings: Definições
menu: Voltar ao menu
# Bottom left tutorial hints
tutorialHints:
title: Precisa de ajuda?
showHint: Mostrar dica
hideHint: Fechar
# When placing a blueprint
blueprintPlacer:
cost: Custo
# Map markers
waypoints:
waypoints: Marcadores
hub: HUB
description: Clique com o botão esquerdo do mouse em um marcador para pular, clique com o botão direito do mouse para excluí-lo. <br> <br> Pressione <keybinding> para criar um marcador a partir da exibição atual ou <strong> clique com o botão direito do mouse </strong> para criar um marcador no local selecionado.
creationSuccessNotification: Marcador criado.
# Interactive tutorial
interactiveTutorial:
title: Tutorial
hints:
1_1_extractor: Coloque um <strong> extrator </strong> em cima de uma <strong> fonte de círculo </strong> para extraí-lo!
1_2_conveyor: >-
Conecte o extrator com uma <strong> esteira transportadora </strong> até a sua base! <br><br> Dica, <strong>clique e arraste</strong> a esteira com o mouse!
1_3_expand: >-
Este <strong> NÃO </strong> é um jogo inativo! Construa mais extratores e esteiras para concluir o objetivo mais rapidamente.<br><br>Dica, segure <strong> SHIFT </strong> para colocar vários extratores e use <strong> R </strong> para girá-los.
# All shop upgrades
shopUpgrades:
belt:
name: Esteiras, Distribuidores e Túneis
description: Velocidade +<gain>%
miner:
name: Extração
description: Velocidade +<gain>%
processors:
name: Cortar, Rotacionar e Empilhamento
description: Velocidade +<gain>%
painting:
name: Misturador e pintura
description: Velocidade +<gain>%
# Buildings and their name / description
buildings:
belt:
default:
name: &belt Conveyor Belt
description: Transporta itens, mantenha pressionado e arraste para colocar vários.
miner: # Internal name for the Extractor
default:
name: &miner Extractor
description: Coloque sobre uma forma ou cor para extraí-la.
chainable:
name: Extractor (Chain)
description: Coloque sobre uma forma ou cor para extraí-la. Pode ser acorrentado.
underground_belt: # Internal name for the Tunnel
default:
name: &underground_belt Tunnel
description: Permite transportar recursos sob construções.
tier2:
name: Tunnel Tier II
description: Permite transportar recursos sob construções.
splitter: # Internal name for the Balancer
default:
name: &splitter Balancer
description: Multifunctional - Distribui uniformemente todas as entradas em todas as saídas.
compact:
name: Merger (compact)
description: Mescla duas correias transportadoras em uma.
compact-inverse:
name: Merger (compact)
description: Mescla duas correias transportadoras em uma.
cutter:
default:
name: &cutter Cutter
description: Corta as formas de cima para baixo e produz as duas metades. <strong> Se você usar apenas uma parte, não se esqueça de destruir a outra parte, ou ela irá parar a produção! </strong>
quad:
name: Cutter (Quad)
description: Corta as formas em quatro partes. <strong> Se você usar apenas uma parte, não se esqueça de destruir as outras, ou ela irá parar a produção! </strong>
rotater:
default:
name: &rotater Rotate
description: Gira as formas no sentido horário em 90 graus.
ccw:
name: Rotate (CCW)
description: RGira as formas no sentido anti-horário em 90 graus.
stacker:
default:
name: &stacker Stacker
description: Empilha os dois itens. Se eles não puderem ser mesclados, o item certo será colocado acima do item esquerdo.
mixer:
default:
name: &mixer Color Mixer
description: Mistura duas cores usando mistura aditiva.
painter:
default:
name: &painter Painter
description: Colore a forma inteira na entrada esquerda com a cor da entrada direita.
double:
name: Painter (Double)
description: Colore as duas formas na entrada esquerda com a cor da entrada direita.
quad:
name: Painter (Quad)
description: Permite colorir cada quadrante da forma com uma cor diferente.
trash:
default:
name: &trash Lixo
description: Aceita qualquer item e os destrói. PARA SEMPRE
storage:
name: Estoque
description: Armazena itens em excesso, até uma determinada capacidade. Pode ser usado como uma porta de transbordamento.
storyRewards:
# Those are the rewards gained from completing the store
reward_cutter_and_trash:
title: Formas de corte
desc: Voce desbloqueou <strong>cutter</strong> - corte de formas pela metade de <strong>cima para baixo </strong> independentemente de sua orientação!<br><br> Certifique-se de se livrar do lixo, ou então <strong> ele irá parar a produção </strong> - Para esse propósito, eu lhe dei uma lixo, que destrói tudo o que você coloca nele
reward_rotater:
title: Rodando
desc: O <strong> rotator </strong> foi desbloqueado! Gira as formas no sentido horário em 90 graus
reward_painter:
title: Pintando
desc: >-
O <strong> pintor </strong> foi desbloqueado - Extraia algumas veias coloridas (como você faz com formas) e combine-as com uma forma no pintor para colori-las! <br> <br> PS: Se você é daltônico , Já estou trabalhando em uma solução!
reward_mixer:
title: Mistura de cores
desc: O <strong> misturador </strong> foi desbloqueado - combine duas cores usando <strong> mistura aditiva </strong> com esta construção!
reward_stacker:
title: Combinador
desc: Agora você pode combinar formas com o <strong> combinador </strong>! Ambas as entradas são combinadas e, se puderem ser colocadas próximas uma da outra, serão <strong> fundidas </strong>. Caso contrário, a entrada direita é <strong> empilhada em cima </strong> da entrada esquerda!
reward_splitter:
title: Divisor/fusão
desc: O balanceador multifuncional <strong> </strong> foi desbloqueado - ele pode ser usado para construir fábricas maiores dividindo e mesclando itens </strong>! <br> <br>
reward_tunnel:
title: Túnel
desc: O <strong> túnel </strong> foi desbloqueado - Agora você pode canalizar itens através de construções!
reward_rotater_ccw:
title: CCW Rotação
desc: Você desbloqueou uma variante do <strong> rotater </strong> - permite girar no sentido anti-horário! Para construí-lo, selecione o rotador e <strong> pressione 'T' para alternar suas variantes </strong>!
reward_miner_chainable:
title: Extrator de encadeamento
desc: Você desbloqueou o <strong> extrator de correntes </strong>! Ele pode <strong> encaminhar seus recursos </strong> para outros extratores, para que você possa extrair recursos com mais eficiência!
reward_underground_belt_tier_2:
title: Túnel Tier II
desc: Você desbloqueou uma nova variante do <strong> túnel </strong> - ele tem um <strong> maior alcance </strong>, e também pode misturar e combinar esses túneis agora!
reward_splitter_compact:
title: Balanceador compacto
desc: >-
Você desbloqueou uma variante compacta do <strong> balanceador </strong> - ele aceita duas entradas e as mescla em uma!
reward_cutter_quad:
title: Cortador quádruplo
desc: Você desbloqueou uma variante do <strong> cortador </strong> - permite cortar formas em <strong> quatro partes </strong> em vez de apenas duas!
reward_painter_double:
title: Pintura dupla
desc: Você desbloqueou uma variante do <strong> pintor </strong> - funciona como o pintor regular, mas processa <strong> duas formas ao mesmo tempo </strong>, consumindo apenas uma cor em vez de duas!
reward_painter_quad:
title: Pintura quádupla
desc: Você desbloqueou uma variante do <strong> pintor </strong> - permite pintar cada parte da forma individualmente!
reward_storage:
title: buffer de armazenamento
desc: Você desbloqueou uma variante do <strong> lixo </strong> - Permite armazenar itens até uma determinada capacidade!
reward_freeplay:
title: Modo Livre
desc: Você fez isso! Você desbloqueou o <strong> modo de jogo livre </strong>! Isso significa que as formas agora são geradas aleatoriamente! (Não se preocupe, mais conteúdo está planejado para o jogo completo!)
reward_blueprints:
title: Projetos
desc: Agora você pode <strong> copiar e colar </strong> partes de sua fábrica! Selecione uma área (mantenha pressionada a tecla CTRL e arraste com o mouse) e pressione 'C' para copiá-la. <br> <br> Colar <strong> não é de graça </strong>, é necessário produzir <strong> projetos e formas </strong> para pagar! (Aqueles que você acabou de entregar).
# Special reward, which is shown when there is no reward actually
no_reward:
title: Próximo level
desc: >-
Este nível não lhe deu nenhuma recompensa, mas em breve?! <br> <br> PS: Melhor não destruir sua fábrica existente - Você precisa de <strong> todas </strong> todas essas formas posteriormente mais tarde para <strong> desbloquear atualizações </strong>!
no_reward_freeplay:
title: Next level
desc: >-
Parabens, não se esqueça existe muita coisa planejada para essa versão.
settings:
title: opções
categories:
game: Jogo
app: Aplicação
versionBadges:
dev: Desenvolvedor
staging: Staging
prod: Produção
buildDate: Built <at-date>
labels:
uiScale:
title: Fonte
description: >-
Altera o tamanho da fonte do usuário. A interface ainda será dimensionada com base na resolução do dispositivo, mas essa configuração controla a quantidade de escala.
scales:
super_small: Super pequeno
small: Pequeno
regular: Normal
large: Grande
huge: Gigante
scrollWheelSensitivity:
title: Sensibilidade do zoom
description: >-
Altera a sensibilidade do zoom (scrol do mouse ou touchpad).
sensitivity:
super_slow: Super lento
slow: Lento
regular: Normal
fast: Rápido
super_fast: Super Rápido
fullscreen:
title: Tecla Cheia
description: >-
É recomendável jogar o jogo em tela cheia para obter a melhor experiência. Disponível apenas na versão completa.
soundsMuted:
title: Som
description: >-
Se ligado o jogo fica Mudo.
musicMuted:
title: Musica
description: >-
Se ligado a musica é desligada.
theme:
title: Tema
description: >-
Escolha o tema entre (Branco / Preto).
refreshRate:
title: Frequencia
description: >-
Se você possui um monitor de 144 hz, altere a taxa de atualização aqui para que o jogo seja simulado corretamente com taxas de atualização mais altas. Isso pode realmente diminuir o FPS se o computador estiver muito lento.
alwaysMultiplace:
title: Multiplicidade
description: >-
Se ativado, todos os edifícios permanecerão selecionados após o posicionamento até que você o cancele. Isso é equivalente a manter SHIFT permanentemente.
offerHints:
title: Dicas e tutoriais
description: >-
Se deve oferecer dicas e tutoriais enquanto estiver jogando.v.
keybindings:
title: Comandos
hint: >-
Tip: Certifique-se de usar CTRL, SHIFT e ALT! Eles permitem diferentes opções de veiculação.
resetKeybindings: Reset Keyinbindings
categoryLabels:
general: Geral
ingame: Jogo
navigation: Navegação
placement: Posicionamento
massSelect: Seleção
buildings: Construções
placementModifiers: Modificações
mappings:
confirm: Confirmar
back: Voltar
mapMoveUp: Mover para cima
mapMoveRight: Mover para direita
mapMoveDown: Mover para baixo
mapMoveLeft: Mover para a esquerda
centerMap: Centralizar
mapZoomIn: Aproximar
mapZoomOut: Distanciar
createMarker: Criar marcação
menuOpenShop: Atualizações
menuOpenStats: Estatísticas
toggleHud: Ocultar Menu
toggleFPSInfo: Mostar FPS
belt: *belt
splitter: *splitter
underground_belt: *underground_belt
miner: *miner
cutter: *cutter
rotater: *rotater
stacker: *stacker
mixer: *mixer
painter: *painter
trash: *trash
abortBuildingPlacement: Cancelar
rotateWhilePlacing: Rotacionar
rotateInverseModifier: >-
Modifier: Rotação instantanea
cycleBuildingVariants: Variações
confirmMassDelete: Confirmar exclusão em massa
cycleBuildings: Trocar de construção
massSelectStart: Segure e arraste para começar
massSelectSelectMultiple: Selecionar área
massSelectCopy: Copiar área
placementDisableAutoOrientation: Desligar orientações automaticas
placeMultiple: Permanecer no modo de produção
placeInverse: Inverter orientação de esteira
about:
title: Sobre o jogo
changelog:
title: Changelog
demo:
features:
restoringGames: Restaurando jogos salvos
importingGames: Carregando jogos salvos
oneGameLimit: Limitado para um savegamne
customizeKeybindings: Modificando Teclas
creatingMarkers: Criando marcações
settingNotAvailable: Não disponível na versão demo.

View File

@ -1 +1 @@
1.1.6 1.1.8