From 868f9bc06a3317719bb80374064c6626b7fa2b20 Mon Sep 17 00:00:00 2001 From: EmeraldBlock <69981203+EmeraldBlock@users.noreply.github.com> Date: Sat, 10 Oct 2020 12:36:08 -0500 Subject: [PATCH 001/127] Fix reader cap (#810) --- src/js/game/systems/belt_reader.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/game/systems/belt_reader.js b/src/js/game/systems/belt_reader.js index 4ce75af4..fbd00b6c 100644 --- a/src/js/game/systems/belt_reader.js +++ b/src/js/game/systems/belt_reader.js @@ -48,7 +48,7 @@ export class BeltReaderSystem extends GameSystemWithFilter { throughput = 1 / (averageSpacing / averageSpacingNum); } - readerComp.lastThroughput = Math.min(30, throughput); + readerComp.lastThroughput = Math.min(globalConfig.beltSpeedItemsPerSecond * 23.9, throughput); } } } From 5ac2fb82fc962284edca6e0d0d8493a2c3f2e3a5 Mon Sep 17 00:00:00 2001 From: RevosCZ <72229413+RevosCZ@users.noreply.github.com> Date: Sun, 11 Oct 2020 08:12:33 +0200 Subject: [PATCH 002/127] Update base-cz.yaml (#802) * Update base-cz.yaml Reopened the translations of the new settings, also added translations for the new tutorial. * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml * Delete base-cz.yaml * Revert "Delete base-cz.yaml" This reverts commit 80fc83112a2122b65aab0d7612b475e64fc898c6. * Update base-cz.yaml * Update base-cz.yaml * Update base-cz.yaml --- translations/base-cz.yaml | 126 +++++++++++++++++++------------------- 1 file changed, 63 insertions(+), 63 deletions(-) diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index c360f675..147237d6 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -28,14 +28,14 @@ steamPage: - Minimapa - Módy - Sandbox mód - - ... a mnohem víc! + - ... a mnohem více! title_open_source: Tato hra je open source! text_open_source: >- Kdokoli může přispět, jsem aktivně zapojený do komunity, pokouším se zkontrolovat všechny návrhy a vzít v úvahu zpětnou vazbu všude, kde je to možné. - Nezapomeňte se podívat na můj trello board pro kompletní plán! + Nezapomeňte se podívat na můj trello board pro kompletní plán! title_links: Odkazy links: discord: Oficiální Discord @@ -89,7 +89,7 @@ mainMenu: helpTranslate: Pomozte přeložit hru! madeBy: Vytvořil browserWarning: Promiňte, ale víme, že hra poběží pomalu ve vašem prohlížeči! - Pořiďte si samostatnou verzi nebo si stíhněte Google Chrome pro + Pořiďte si samostatnou verzi nebo si stáhněte Google Chrome pro plnohodnotný zážitek. savegameLevel: Úroveň savegameLevelUnknown: Neznámá úroveň @@ -148,7 +148,7 @@ dialogs: uloženou hru nebo si pořiďte plnou verzi! updateSummary: title: Nová aktualizace! - desc: "Tady jsou změny od posledního hraní:" + desc: "Zde jsou změny od doby, kdy jste naposledy hráli:" upgradesIntroduction: title: Odemknout vylepšení desc: Všechny tvary, které vytvoříte, lze použít k odemčení vylepšení - @@ -173,7 +173,7 @@ dialogs: ostatní klávesové zkratky!

CTRL + Táhnout: Vybrání oblasti.
SHIFT: Podržením můžete umístit více budov - za sebout.
ALT: Změnit orientaci + za sebou.
ALT: Změnit orientaci umístěných pásů.
" createMarker: title: Nová značka @@ -197,13 +197,13 @@ dialogs: title: Přejmenovat uloženou hru desc: Zde můžete přejmenovat svoji uloženou hru. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Dostupný tutoriál + desc: Pro tuto úroveň je k dispozici tutoriál! Chtěli byste se na + něj podívat? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Dostupný tutoriál + desc: Pro tuto úroveň je k dispozici tutoriál, ale je dostupný + pouze v angličtině. Chtěli byste se na něj podívat? ingame: keybindingsOverlay: moveMap: Posun mapy @@ -242,7 +242,7 @@ ingame: unlockText: "Odemčeno: !" buttonNextLevel: Další úroveň notifications: - newUpgrade: Nová aktualizace je k dispozici! + newUpgrade: Nové vylepšení je k dispozici! gameSaved: Hra byla uložena. freeplayLevelComplete: Level byl dokončen! shop: @@ -258,10 +258,10 @@ ingame: description: Tvary uložené ve vaší centrální budově. produced: title: Vyprodukováno - description: Tvary která vaše továrna produkuje, včetně meziproduktů. + description: Tvary, která vaše továrna produkuje, včetně meziproduktů. delivered: title: Dodáno - description: Tvary které jsou dodávány do vaší centrální budovy. + description: Tvary, které jsou dodávány do vaší centrální budovy. noShapesProduced: Žádné tvary zatím nebyly vyprodukovány. shapesDisplayUnits: second: / s @@ -294,34 +294,34 @@ ingame: 1_2_conveyor: "Připojte extraktor pomocí dopravníkového pásu k vašemu HUBu!

Tip: Klikněte a táhněte myší pro položení více pásů!" - 1_3_expand: "Toto NENÍ hra o čekání! Sestavte další extraktory + 1_3_expand: "Toto NENÍ hra o čekání! Postavte další extraktory a pásy, abyste dosáhli cíle rychleji.

Tip: Chcete-li umístit více extraktorů, podržte SHIFT. Pomocí R je můžete otočit." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Teď umístěte pilu k rozřezání kruhového tvaru na dvě + poloviny!

PS: Pila řeže tvary vždy svisle na + poloviny bez ohledu na její orientaci." + 2_2_place_trash: Pila se může zaseknout a zastavit vaši produkci!

Použijte + koš ke smazání (!) nepotřebných + částí tvarů. + 2_3_more_cutters: "Dobrá práce! Teď postavte více pil pro zrychlení + tohoto pomalého procesu!

PS: Použijte 0-9 + na klávesnici pro rychlejší přístup k budovám!" + 3_1_rectangles: "Teď vytěžte nějaké obdelníkové tvary! Postavte 4 + extraktory a připojte je k HUBu.

PS: + Podržením klávesy SHIFT a tažením pásu aktivujete + plánovač pásů!" + 21_1_place_quad_painter: Postavte čtyřnásobný barvič a získejte nějaké + kruhové tvary, bílou a + červenou barvu! + 21_2_switch_to_wires: Změňte vrstvy na vrstvu kabelů stisknutím klávesy + E!

Pak připojte všechny čtyři + vstupy barviče s pomocí kabelů! + 21_3_place_button: Úžasné! Teď postavte přepínač a připojte ho + pomocí kabelů! + 21_4_press_button: "Stiskněte přepínač pro změnu vysílaného logického + signálu a tím aktivujte barvič.

PS: Nemusíte + připojit veškeré vstupy! Zkuste spojit pouze dva." colors: red: Červená green: Zelená @@ -335,7 +335,7 @@ ingame: shapeViewer: title: Vrstvy empty: Prázdné - copyKey: Copy Key + copyKey: Zkopírovat klíč connectedMiners: one_miner: 1 Extraktor n_miners: Extraktorů @@ -374,7 +374,7 @@ ingame: desc: Vyvíjím to ve svém volném čase! shopUpgrades: belt: - name: Pásy, distribuce & tunely + name: Pásy, distribuce a tunely description: Rychlost x → x miner: name: Extrakce @@ -598,7 +598,7 @@ storyRewards: jde, oba tvary se slepí k sobě. Pokud ne, tvar vpravo se nalepí na tvar vlevo! reward_splitter: - title: Rozřazování/Spojování pásu + title: Kompaktní rozdělovač desc: Právě jste odemkli rozdělovací variantu vyvažovače - Přijímá jeden vstup a rozdělí ho na dva! @@ -662,9 +662,9 @@ storyRewards: desc: Gratuluji! Mimochodem, více obsahu najdete v plné verzi! reward_balancer: title: Vyvažovač - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: Multifunkční vyvažovač byl odemknut - Může + být použit ke zvětšení vašich továren rozdělováním a spojováním + předmětů na několik pásu! reward_merger: title: Kompaktní spojovač desc: Právě jste odemkli spojovací variantu @@ -710,14 +710,14 @@ storyRewards: kabelů.

- Pokračovat ve hře pravidelně.

Bez ohledu na tvou volbu, nezapomeň si svou hru užít! reward_wires_painter_and_levers: - title: Kabely a čtyřnásobný barvič - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + title: Kabely a 4x-barvič + desc: "Právě jste odemkli vrstvu kabelů: Je to samostatná + vrstva navíc oproti běžné vrstvě a představuje spoustu nových + možností!

Do začátku jsem zpřístupnil čtyřnásobný + barvič - Připojte vstupy, které byste chtěli obarvit + na vrstvě kabelů!

Pro přepnutí mezi vrstvami stiskněte klávesu + E.

PS: Aktivujte nápovědy v + nastavení pro spuštění tutoriálu o kabelech!" reward_filter: title: Filtr předmětů desc: Právě jste odemkli filtr předmětů! Nasměruje předměty buď @@ -787,7 +787,7 @@ settings: alwaysMultiplace: title: Několikanásobné pokládání description: Pokud bude zapnuté, zůstanou budovy vybrané i po postavení do té - doby než je zrušíte. Má to stejný efekt jako držení klávesy + doby, než je zrušíte. Má to stejný efekt jako držení klávesy SHIFT. offerHints: title: Tipy & Nápovědy @@ -834,7 +834,7 @@ settings: než 100 entit. enableColorBlindHelper: title: Režim pro barvoslepé - description: Zapné různé nástroje, které vám umožní hrát hru i pokud jste + description: Zapne různé nástroje, které vám umožní hrát hru i pokud jste barvoslepí. rotationByBuilding: title: Rotace dle typu budov @@ -884,13 +884,13 @@ settings: description: Umožnuje posouvání po mapě, pokud myší přejedete na okraj obrazovky. Rychlost žáleží na nastavení rychlosti pohybu. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Přiblížení ke kurzoru + description: Při zapnutí dojde k přibližování ve směru polohy + kurzoru, jinak ve středu obrazovky. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Velikost zdrojů na mapě + description: Určuje velikost ikon tvarů na náhledu mapy (při + oddálení). rangeSliderPercentage: % keybindings: title: Klávesové zkratky @@ -968,9 +968,9 @@ keybindings: about: title: O hře body: >- - Tato hra je open source a je vyvíjená Tobiasem Springerem - (česky neumí, ale je to fakt frajer :) ).

+ (česky neumí, ale je fakt frajer :) ).

Pokud se chceš na hře podílet, podívej se na shapez.io na githubu.

From 29673106abf55eb75592046a987e8d0989bc5336 Mon Sep 17 00:00:00 2001 From: sindaehyeon <56984093+sindaehyeon@users.noreply.github.com> Date: Sun, 11 Oct 2020 15:12:51 +0900 Subject: [PATCH 003/127] Update base-kor.yaml (#803) --- translations/base-kor.yaml | 74 ++++++++++++++++++-------------------- 1 file changed, 35 insertions(+), 39 deletions(-) diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml index fe7666f2..1ea855c5 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -182,13 +182,12 @@ dialogs: title: 세이브 파일 이름 설정 desc: 여기에서 세이브 파일의 이름을 바꿀 수 있습니다. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: 활성화된 튜토리얼 + desc: 현재 레벨에서 사용할 수 있는 튜토리얼 비디오가 있습니다! 보시겠습니까? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: 활성화된 튜토리얼 + desc: 현재 레벨에서 사용할 수 있는 튜토리얼 비디오가 있습니다! 허나 영어로만 + 제공될 것입니다. 보시겠습니까? ingame: keybindingsOverlay: moveMap: 이동 @@ -279,30 +278,28 @@ ingame: 1_3_expand: "이 게임은 방치형 게임이 아닙니다! 더 많은 추출기와 벨트를 만들어 지정된 목표를 빨리 달성하세요.

팁: SHIFT 키를 누른 상태에서는 빠르게 배치할 수 있고, R 키를 눌러 회전할 수 있습니다." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "이제 절단기를 배치하여 원형 도형을 둘로 자르세요!

+ 추신: 절단기는 방향에 관계 없이 항상 수직으로 자릅니다." + 2_2_place_trash: 절단기가 막히거나 멈출 수 있습니다!

+ 휴지통을 사용하여 현재 필요없는 쓰레기 도형 (!)을 + 제거하세요. + 2_3_more_cutters: "잘하셨습니다! 느린 처리 속도를 보완하기 위해 절단기를 두 개 + 이상 배치해보세요!

추신: 상단 숫자 단축키 (0~9)를 사용하여 + 건물을 빠르게 선택할 수 있습니다! + 3_1_rectangles: "이제 사각형 도형을 추출해 볼까요! 추출기 네 개를 + 배치하고 허브와 연결하세요.

추신: 긴 벨트 한 줄을 + 간단히 만들려면 SHIFT 키를 누른 채 드래그하세요!" + 21_1_place_quad_painter: 4단 색칠기를 배치하여 흰색과 + 빨간색이 칠해진 원형 + 도형을 만들어보세요! + 21_2_switch_to_wires: E 키를 눌러 전선 레이어 + 로 전환하세요!

그 후 색칠기의 네 입력 부분을 + 모두 케이블로 연결하세요! + 21_3_place_button: 훌륭해요! 이제 스위치를 배치하고 전선으로 + 연결하세요! + 21_4_press_button: "스위치를 눌러 참 신호를 내보내 + 색칠기를 활성화하세요. 추신: 모든 입력을 연결할 필요는 없습니다! + 지금은 두 개만 연결하세요." colors: red: 빨간색 green: 초록색 @@ -314,13 +311,13 @@ ingame: black: 검은색 uncolored: 회색 shapeViewer: - title: 층 + title: 레이어 empty: 비었음 copyKey: 키 복사하기 connectedMiners: one_miner: 추출기 1 개 n_miners: 추출기 개 - limited_items: 개로 제한됨 + limited_items: 까지가 한계임 watermark: title: 체험판 버전 desc: 정식 버전의 장점을 보려면 여기를 클릭하세요! @@ -652,13 +649,12 @@ storyRewards: - 평소처럼 게임을 진행합니다.

어떤 방식으로든, 재미있게 게임을 플레이해주시길 바랍니다! reward_wires_painter_and_levers: title: 전선과 4단 색칠기 - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "전선 레이어가 잠금 해제되었습니다! 전선 레이어는 + 일반 레이어 위에 존재하는 별도의 레이어로, 이를 통한 다양하고 새로운 + 메커니즘을 소개하겠습니다!

우선 4단 색칠기가 + 잠금 해제되었습니다. 전선 레이어에서 색칠하고 싶은 슬롯에 전선을 연결하세요! + 전선 레이어로 전환하려면 E 키를 누르세요.

+ 추신: 설정에서 힌트를 활성화하여 전선 튜토리얼을 활성화하세요!" reward_filter: title: 아이템 선별기 desc: 아이템 선별기가 잠금 해제되었습니다! 전선 레이어의 신호와 일치하는지에 대한 여부로 아이템을 위쪽 From 329a770c0561433e5662cb48a5c9a6de0067b384 Mon Sep 17 00:00:00 2001 From: Gumball73 <66757746+Gumball73@users.noreply.github.com> Date: Sun, 11 Oct 2020 07:13:09 +0100 Subject: [PATCH 004/127] Update Base-pt-PT (#804) Update Base-pt-PT to the latest version and correcting some typos. Gumball73 --- translations/base-pt-PT.yaml | 112 +++++++++++++++++------------------ 1 file changed, 56 insertions(+), 56 deletions(-) diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index 78a57281..c641f8d8 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -207,13 +207,13 @@ dialogs: title: Renomear Savegame desc: Podes renomear o teu savegame aqui. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorial Disponível + desc: Existe um vídeo de tutorial disponível para este nível! Gostarias de + o ver? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutorial Disponível + desc: Existe um vídeo de tutorial disponível para este nível, mas apenas + está disponível em Inglês. Gostarias de o ver? ingame: keybindingsOverlay: moveMap: Mover @@ -308,30 +308,30 @@ ingame: e tapetes para atingir o objetivo mais rapidamente.

Dica: Pressiona SHIFT para colocar vários extratores, e usa R para os rodar." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Agora coloca um Cortador para cortares os circulos + em duas metades!

PS: O cortador corta sempre de cima para + baixo independentemente da sua orientação" + 2_2_place_trash: O cortador pode encravar e parar!

Usa + um lixo para de livrares do atual (!) não + é necessário desperdício. + 2_3_more_cutters: "Bom trabalho! Agora colocamais 2 cortadores para acelerades + este progresso lento!

PS: Usa os atalhos + 0-9 para acederes às contruções mais rapidamente! + 3_1_rectangles: "Agora vamos extrair alguns retângulos! Constrói 4 + extratores e conecta-os ao edifício central.

PS: + Pressiona SHIFT enquanto arrastas um tapete rolante + para ativares o planeador de tapetes!" + 21_1_place_quad_painter: Coloca o pintor quádruplo e arranja alguns + círculos, cores branca e + vermelha! + 21_2_switch_to_wires: Troca para a camada de fios pressionando + E!

A seguir conecta todas as quatro + entradas do pintor com fios! + 21_3_place_button: Fantástico! Agora coloca o Interruptor e conecta-o + com os fios! + 21_4_press_button: "Pressiona o interruptor para que ele emita um + sinal verdadeiro, isso irá ativar o pintor.

PS: Tu + não tens de conectar todas as entradas! Tenta conectar apenas duas." colors: red: Vermelho green: Verde @@ -748,13 +748,13 @@ storyRewards: Independentemente da tua escolha, lembra-te de te divertires! reward_wires_painter_and_levers: title: Fios & Pintor Quádruplo - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Desbloquaste a Camada de Fios: É uma camada separada no + topo da camada normal e introduz um monte de novas + mecânicas!

Para o inicio eu dei-te o Pintor + Quádruplo - Conecta as entradas que queres pintar na camada + de fios!

Para trocares para a camada de fios, pressiona a + tecla E.

PS: Ativa as dicas nas + definições para ativares o tutorial de fios!" reward_filter: title: Filtro de Itens desc: Desbloquaste o Filtro de Itens! Vai mandar itens ou para @@ -1033,22 +1033,22 @@ demo: exportingBase: Exportar base como uma imagem settingNotAvailable: Não disponível no Demo. tips: - - O edifício central aceita qualquer entrada, não apenas a forma atual! + - O edifício central aceita qualquer entrada, não apenas a da forma atual! - Tem a certeza que as tuas fábricas são modulares - vai valer a pena! - - Não construas demasiado perto do edifício, ou vai ser um grande caos! + - Não construas demasiado perto do edifício, ou será um grande caos! - Se empilhar não funciona, tenta trocar as entradas. - Podes alternar a direção do planeador de tapete rolante ao pressionar R. - - Ao segurar CTRL podes arrastar tapetes rolantes sem auto-orientação. + - Ao pressionares CTRL podes arrastar tapetes rolantes sem auto-orientação. - Os rácios continuam os mesmos, desde que todos os upgrades estejam no mesmo Nível. - Execução em série é mais eficiente que em paralelo. - - Vais desbloquear mais variações de edifícios mais tarde no jogo! - - Podes usar T para trocar entre as diferentes variantes. + - Vais desbloquear mais variações de edifícios, mais tarde no jogo! + - Podes usar T para trocares entre as diferentes variantes. - Simetria é a solução! - - Podes entrelaçar diferentes níveis de túneis. + - Podes entrelaçar diferentes tipos de túneis. - Tenta construir fábricas compactas - vai valer a pena! - - O pintor tem uma variante espelhada que podes selectionar com T + - O pintor tem uma variante espelhada que podes selecionar com T - Ter os rácios de edifícios corretos vai maximizar a eficiência. - No nível máximo, 5 extratores vão encher um tapete. - Não te esqueças dos túneis! @@ -1066,31 +1066,31 @@ tips: - As formas que estão mais longes do edifício central são mais complexas. - As Máquinas têm uma velocidade limitada, divide-as para eficiência máxima. - Usa balanceadores para maximizar a tua eficiência. - - Organização é importante. Tenta não cruzar tapetes demasiado. - - Planeja antecipadamente, ou vai ser um grande caos! - - Não removas as tuas fábricas antigas! Vais precisar delas para desbloquear + - Organização é importante. Tenta não cruzar demasiados tapetes. + - Planeia antecipadamente, ou vai ser um grande caos! + - Não removas as tuas fábricas antigas! Vais precisar delas para desbloqueares upgrades. - - Tenta superar o nível 18 sozinho sem procurar ajuda! + - Tenta superar o nível 20 sozinho sem procurar ajuda! - Não complicas as coisas, tenta continuar simples e irás muito longe. - - Talvez precises de reusar fábricas mais tarde no jogo. Planeia as tuas + - Talvez precises de reutilizar fábricas, mais tarde no jogo. Planeia as tuas fábricas para serem reutilizáveis. - Às vezes, podes encontrar uma forma necessária no mapa sem criar-la com empilhadoras. - Moinhos de vento e cataventos completos nunca aparecem naturalmente. - - Pinta as tuas formas antes de cortar-las para eficiência máxima. - - Com módulos, o espaço é apenas uma percepção; uma preocupação para pessoas + - Pinta as tuas formas antes de as cortares para eficiência máxima. + - Com módulos, o espaço é apenas uma perceção; uma preocupação para pessoas mortais. - Faz uma fábrica de diagramas separada. São importantes para módulos. - Dá uma olhada ao misturador de cores, e as tuas questões serão respondidas. - - Use CTRL + Clique para selecionar uma área. + - Usa CTRL + Clique para selecionar uma área. - Construir demasiado perto do edifício central pode ficar no caminho de projetos futuros. - - O ícone de alfinete perto duma forma na lista de upgrades vai afixar-la ao + - O ícone de alfinete perto duma forma na lista de upgrades vai afixa-la ao ecrã. - - Junta todas as cores primárias juntas para fazer branco! + - Junta todas as cores primárias para fazeres branco! - Tu tens um mapa infinito, não limites a tua fábrica, expande! - Tenta também Factorio! É o meu jogo favorito. - - O cortador quádruplo corta no sentido dos ponteiros começando no canto + - O cortador quádruplo corta no sentido dos ponteiros do relógio começando no canto superior direito! - Podes fazer download dos teus savegames no menu principal! - Este jogo tem muitos atalhos de teclado úteis! Não te esqueças de @@ -1101,4 +1101,4 @@ tips: - Para limpar tapetes, corta a área e cola-a na mesma localização. - Pressiona F4 para mostrar os teus FPS e Tick Rate. - Pressiona F4 duas vezes para mostrar a tile do teu rato e câmara. - - Podes clicar numa forma afixada no lado direito para desafixar-la. + - Podes clicar numa forma afixada no lado direito para desafixa-la. From f595eecd37e5d264e00f37131fef86df313c2982 Mon Sep 17 00:00:00 2001 From: presdm <72538204+presdm@users.noreply.github.com> Date: Sun, 11 Oct 2020 13:13:32 +0700 Subject: [PATCH 005/127] Update base-ind.yaml (#805) * Update base-ind.yaml Finished the translation entirely! Also corrected some things, will review it a couple more times again tomorrow. Hope this helps! - PresS#9257 * Update base-ind.yaml Changed 'you' (formal) to 'you' (informal) making it more enjoyable. Also corrected some more things. * Update base-ind.yaml * Update base-ind.yaml --- translations/base-ind.yaml | 804 ++++++++++++++++++------------------- 1 file changed, 394 insertions(+), 410 deletions(-) diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 2c396dd1..49670b48 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -1,39 +1,39 @@ steamPage: - shortText: Shapez.io adalah game tentang membangun pabrik untuk mengotomatiskan - pembuatan dan pemrosesan bentuk-bentuk yang semakin kompleks di peta - yang meluas tanpa batas. - discordLinkShort: Discord Resmi + shortText: shapez.io adalah game tentang membangun pabrik untuk mengotomatiskan + pembuatan dan pemrosesan bentuk-bentuk yang semakin lama semakin kompleks + di dalam peta yang meluas tanpa batas. + discordLinkShort: Server Discord Resmi intro: >- - Anda suka game otomasi? Maka anda berada di tempat yang tepat! + Kamu suka game otomasi? Maka kamu berada di tempat yang tepat! - Shapez.io adalah game santai dimana anda harus membuat pabrik untuk mengotomatiskan produksi bentuk-bentuk geometris. Semakin meningkatnya level, bentuk-bentuknya menjadi lebih kompleks, dan anda perlu meluas di peta yang tak terbatas. + shapez.io adalah game santai dimana kamu harus membuat pabrik untuk mengotomatiskan produksi bentuk-bentuk geometris. Semakin meningkatnya level, bentuk-bentuknya menjadi lebih kompleks, dan kamu perlu meluaskan pabrikmu semakin jauh lagi. - Dan jita itu tidak cukup, anda juga perlu untuk memproduksi secara ekxponensial untuk memenuhkan kebutuhan - hal yang membantu hanyalah memperbesar pabrik! Walaupun anda hanya memproses bentuk di awal, nantinya anda harus memberinya warna - dengan mengekstrak dan mencampur warna! + Dan jita itu tidak cukup, kamu juga perlu memproduksi bentuk secara eksponensial untuk memenuhkan kebutuhan - hal yang membantu hanyalah memperbesar pabrik! Walaupun kamu hanya perlu memproses bentuk di awal, nantinya kamu harus memberinya warna - dengan mengekstrak dan mencampur warna! - Membeli game ini di Steam memberikan anda akses ke versi lengkap, namun anda juga dapat mencoba demo dan memutuskan nanti! - title_advantages: Keuntungan versi lengkap + Membeli game ini di Steam memberikan kamu akses ke versi lengkap, namun kamu juga dapat mencoba demo dan memutuskan nanti! + title_advantages: Keuntungan Versi Lengkap advantages: - 12 Level Baru dengan total 26 level - 18 Bangunan Baru untuk membuat pabrik yang otomatis sepenuhnya! - - 20 Tingkat Upgrade untuk keseruan berjam-jam! - - Update Kabel untuk dimensi yang benar-benar berbeda! + - 20 Tingkatan Upgrade untuk keseruan berjam-jam! + - Update Kabel untuk dimensi yang benar-benar baru! - Mode Gelap! - Data Simpanan Tidak Terbatas - Penanda Tidak Terbatas - Dukung saya! ❤️ title_future: Konten Terencana planned: - - Perpustakaan Cetak Biru (Eksklusif Versi Lengkap) - - Steam Achievements + - Penyimpanan Cetak Biru (Eksklusif Versi Lengkap) + - Achievement Steam - Mode Puzzle - Peta Kecil - - Mods + - Modifikasi - Mode Sandbox - ... dan masih banyak lagi! title_open_source: Game ini open source! - title_links: Links + title_links: Tautan (Links) links: - discord: Discord Resmi + discord: Server Discord Resmi roadmap: Peta Jalan subreddit: Subreddit source_code: Source code (GitHub) @@ -43,12 +43,12 @@ steamPage: mencoba untuk meninjau semua saran dan mempertimbangkan segala umpan balik jika memungkinkan. - Pastikan untuk memeriksa papan trello saya untuk peta jalan lengkapnya! + Pastikan untuk memeriksa papan trello saya untuk peta jalan selengkapnya! global: - loading: Sedang memuat + loading: Memuat error: Terjadi kesalahan - thousandsDivider: "," - decimalSeparator: . + thousandsDivider: "." + decimalSeparator: "," suffix: thousands: rb millions: Jt @@ -85,16 +85,16 @@ mainMenu: changelog: Catatan Perubahan subreddit: Reddit importSavegame: Impor Data Simpanan - openSourceHint: Permainan ini bekerja secara open source! + openSourceHint: Game ini open source! discordLink: Server Discord Resmi helpTranslate: Bantu Terjemahkan! madeBy: Dibuat oleh - browserWarning: Maaf, tetapi permainan ini biasanya lambat pada perambah - (browser) Anda! Dapatkan versi lengkap atau unduh Chrome untuk + browserWarning: Maaf, tetapi permainan ini biasanya lambat pada + browser kamu! Dapatkan versi lengkap atau unduh Chrome untuk pengalaman sepenuhnya. savegameLevel: Level savegameLevelUnknown: Level tidak diketahui - savegameUnnamed: Unnamed + savegameUnnamed: Tidak Dinamai dialogs: buttons: ok: OK @@ -104,35 +104,35 @@ dialogs: restart: Mulai Ulang reset: Setel Ulang getStandalone: Dapatkan Versi Lengkap - deleteGame: Saya tahu apa yang saya lakukan - viewUpdate: Tampilkan Pembaruan + deleteGame: Aku tahu apa yang aku lakukan + viewUpdate: Tampilkan Update showUpgrades: Tunjukkan Tingkatan - showKeybindings: Tunjukan Tombol Pintas + showKeybindings: Tunjukkan Tombol Pintas importSavegameError: title: Kesalahan pada Impor - text: "Gagal memasukkan data simpanan Anda:" + text: "Gagal memasukkan data simpanan kamu:" importSavegameSuccess: title: Impor Berhasil - text: Data simpanan Anda berhasil dimasukkan. + text: Data simpanan kamu berhasil dimasukkan. gameLoadFailure: title: Permainan Rusak - text: "Gagal memuat data simpanan Anda:" + text: "Gagal memuat data simpanan kamu:" confirmSavegameDelete: title: Konfirmasi Penghapusan - text: Apakah anda yakin ingin menghapus game berikut?

'' + text: Apakah kamu yakin ingin menghapus game berikut?

'' pada level

Hal ini tak dapat diulang! savegameDeletionError: title: Gagal Menghapus text: "Gagal untuk menghapus data simpanan:" restartRequired: - title: Diperlukan untuk Memulai Kembali - text: Anda harus memulai kembali permainan untuk menerapkan pengaturan. + title: Diperlukan untuk Restart + text: kamu harus memulai kembali permainan untuk menerapkan pengaturan. editKeybinding: - title: Ganti Tombol Pintas - desc: Tekan tombol pada papan ketik atau tetikus yang ingin anda tetapkan, atau + title: Ganti Tombol Pintas (Keybinding) + desc: Tekan tombol pada keyboard atau mouse yang ingin kamu ganti, atau tekan escape untuk membatalkan. resetKeybindingsConfirmation: - title: Setel Ulang Tombol-tombol Pintas + title: Setel Ulang Tombol-tombol Pintas (Keybinding) desc: Ini akan menyetel ulang semua tombol pintas kepada pengaturan awalnya. Harap konfirmasi. keybindingsResetOk: @@ -140,96 +140,95 @@ dialogs: desc: Tombol-tombol pintas sudah disetel ulang ke pengaturan awalnya! featureRestriction: title: Versi Demo - desc: Anda mencoba untuk mengakses fitur () yang tidak tersedia pada + desc: Kamu mencoba untuk mengakses fitur () yang tidak tersedia pada versi demo. Pertimbangkan untuk mendapatkan versi lengkap untuk pengalaman sepenuhnya! oneSavegameLimit: title: Penyimpanan Permainan Terbatas - desc: Anda hanya dapat memiliki satu simpanan permainan dalam versi demo. Harap + desc: Kamu hanya dapat memiliki satu data simpanan dalam versi demo. Harap hapus yang telah ada atau dapatkan versi lengkap! updateSummary: - title: Pembaruan Baru! - desc: "Berikut perubahan-perubahan yang telah dibuat sejak Anda main terakhir + title: Update Baru! + desc: "Berikut perubahan-perubahan yang telah dibuat sejak kamu main terakhir kali:" upgradesIntroduction: title: Buka Tingkatan-tingkatan - desc: Semua bentuk yang anda produksi dapat digunakan untuk membuka tingkatan - baru - Jangan hancurkan pabrik-pabrik lama Anda! - Tab tingkatan dapat ditemukan di sudut atas kanan layar Anda. + desc: Semua bentuk yang kamu produksi dapat digunakan untuk membuka tingkatan + baru - Jangan hancurkan pabrik-pabrik lama kamu! + Tab tingkatan dapat ditemukan di sudut kanan atas layar kamu. massDeleteConfirm: title: Konfirmasi Penghapusan - desc: Anda akan menghapus banyak bangunan (tepatnya )! Apakah Anda yakin + desc: Kamu akan menghapus banyak bangunan (tepatnya )! Apakah kamu yakin untuk melakukannya? massCutConfirm: - title: Pastikan Pemindahan - desc: Anda akan memindahkan banyak bangunan (tepatnya )! Apakah Anda + title: Konfirmasi Pemindahan (Cut) + desc: Kamu akan memindahkan (cut) banyak bangunan (tepatnya )! Apakah kamu yakin untuk melakukannya? massCutInsufficientConfirm: title: Tidak Mampu Memindahkan - desc: Anda tidak mampu menanggung biaya pemindahan area ini! Apakah Anda yakin + desc: Kamu tidak mampu menanggung biaya pemindahan area ini! Apakah kamu yakin untuk memindahkannya? blueprintsNotUnlocked: title: Belum Terbuka - desc: Selesaikan level 12 untuk membuka cetak biru! + desc: Selesaikan level 12 untuk membuka Cetak Biru! keybindingsIntroduction: - title: Tombol Pintas Berguna + title: Tombol Pintas (Keybindings) Berguna desc: "Permainan ini memiliki banyak tombol pintas yang membuatnya lebih mudah untuk membangun pabrik-pabrik besar. Berikut adalah beberapa, namun - pastikan Anda perhatikan tombol-tombol + pastikan kamu perhatikan tombol-tombol pintasnya!

CTRL + Tarik: Pilih sebuah area.
SHIFT: - Tahan untuk meletakkan beberapa kali bangunan yang.
ALT: Ganti orientasi sabuk konveyor yang telah diletakkan.
" createMarker: title: Penanda Baru titleEdit: Sunting Penanda - desc: Berikan nama yang berguna, anda juga bisa memasukkan kunci - pintas dari sebuah bentuk (Yang bisa anda buat sendiri + desc: Berikan nama yang berguna, kamu juga bisa memasukkan short key + dari sebuah bentuk (Yang bisa kamu buat sendiri disini) markerDemoLimit: - desc: Anda hanya dapat memuat dua penanda pada versi demo. Dapatkan versi + desc: Kamu hanya dapat membuat dua penanda pada versi demo. Dapatkan versi lengkap untuk penanda-penanda tak terhingga! exportScreenshotWarning: - title: Ekspor Tangkapan Layar - desc: Anda meminta untuk mengekspor pangkalan pusat Anda sebagai tangkapan - layar. Harap ketahui bahwa ini bisa menjadi lambat untuk pangkalan - pusat yang besar dan bahkan dapat membuat permainan Anda mogok! + title: Ekspor Screenshot + desc: Kamu meminta untuk mengekspor pabrikmu sebagai screenshot. + Harap ketahui bahwa ini bisa menjadi lambat untuk pabrik + yang besar dan bahkan dapat membuat permainanmu berhenti! editSignal: title: Atur Tanda descItems: "Pilih item yang telah ditentukan sebelumnya:" - descShortKey: ... atau masukkan kunci pintas dari bentuk (Yang - bisa anda buat sendiri disini) + descShortKey: ... atau masukkan shortkey dari bentuk (Yang + bisa Kamu buat sendiri disini) renameSavegame: title: Ganti Nama Data Simpanan - desc: Anda bisa mengganti nama data simpanan di sini. + desc: Kamu bisa mengganti nama data simpanan di sini. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorial Tersedia + desc: Ada video tutorial yang tersedia untuk level ini! Apakah kamu ingin menontonnya? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutorial Tersedia + desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam Bahasa Inggris. + Apakaha kamu ingin menontonnya? ingame: keybindingsOverlay: - moveMap: Pindahkan + moveMap: Geser selectBuildings: Pilih area stopPlacement: Hentikan peletakan rotateBuilding: Putar bangunan placeMultiple: Letakkan beberapa - reverseOrientation: Balik orientasi + reverseOrientation: Balikkan orientasi disableAutoOrientation: Nonaktifkan orientasi otomatis. toggleHud: Ganti HUD placeBuilding: Letakan bangunan - createMarker: Ciptakan penanda + createMarker: Buat penanda delete: Hapus - pasteLastBlueprint: Sisipkan cetak biru terakhir + pasteLastBlueprint: Tempel (paste) cetak biru terakhir lockBeltDirection: Aktifkan perencana sabuk konveyor - plannerSwitchSide: Balik sisi perencana - cutSelection: Pindahkan - copySelection: Gandakan - clearSelection: Hapus seleksi + plannerSwitchSide: Balikkan sisi perencana + cutSelection: Pindahkan (Cut) + copySelection: Salin (Copy) + clearSelection: Hapus pilihan pipette: Pipet switchLayers: Ganti lapisan colors: @@ -247,20 +246,20 @@ ingame: hotkeyLabel: "Hotkey: " infoTexts: speed: Kecepatan - range: Rentang + range: Jangkauan storage: Penyimpanan - oneItemPerSecond: satu item / detik - itemsPerSecond: item / detik + oneItemPerSecond: 1 item/dtk + itemsPerSecond: item/dtk itemsPerSecondDouble: (x2) tiles: ubin levelCompleteNotification: levelTitle: Level completed: Selesai - unlockText: Membuka ! + unlockText: terbuka! buttonNextLevel: Level Selanjutnya notifications: newUpgrade: Tingkatan baru tersedia! - gameSaved: Permainan Anda telah disimpan. + gameSaved: Permainan kamu telah disimpan. freeplayLevelComplete: Level telah selesai! shop: title: Tingkatan-tingkatan @@ -268,25 +267,23 @@ ingame: tier: Tingkat maximumLevel: LEVEL MAKSIMUM (Kecepatan x) statistics: - title: Statistika + title: Statistik dataSources: stored: title: Tersimpan - description: Menunjukan jumlah bentuk-bentuk yang tersimpan pada bangunan pusat - Anda. + description: Menunjukan semua bentuk yang tersimpan pada bangunan pusatmu. produced: title: Terproduksi - description: Menunjukkan semua bentuk yang diproduksi seluruh pabrik Anda, + description: Menunjukkan semua bentuk yang diproduksi pabrikmu, termasuk produk-produk antara. delivered: title: Terkirim - description: Menunjukkan bentuk-bentuk yang telah terkirim ke bangunan pusat - Anda. + description: Menunjukkan bentuk-bentuk yang sedang dikirim ke bangunan pusatmu. noShapesProduced: Sejauh ini belum diproduksi. shapesDisplayUnits: - second: / dtk - minute: / m - hour: / j + second: /dtk + minute: /m + hour: /j settingsMenu: playtime: Waktu bermain buildingsPlaced: Bangunan @@ -300,7 +297,7 @@ ingame: waypoints: waypoints: Penanda hub: PUSAT - description: Klik tombol kiri mouse pada penanda untuk melompat kepadanya, klik + description: Klik tombol kiri mouse pada penanda untuk melompat ke penanda, klik tombol kanan untuk menghapusnya.

Tekan untuk membuat penanda dari sudut pandang saat ini, atau klik tombol kanan untuk membuat penanda pada lokasi yang @@ -309,44 +306,43 @@ ingame: shapeViewer: title: Lapisan-lapisan empty: Kosong - copyKey: Gandakan tombol + copyKey: Tombol Salin (Copy) interactiveTutorial: - title: Penuntun + title: Tutorial hints: 1_1_extractor: Letakkan ekstraktor diatas bentuk lingkaran untuk mengekstrak bentuk tersebut! 1_2_conveyor: "Hubungkan ekstraktor dengan sabuk konveyor ke - pusat pangkalan Anda!

Kiat: Klik dan + bangunan pusatmu!

Tip: Klik dan seret sabuk konveyor dengan mouse!" 1_3_expand: "Ini BUKAN permainan menganggur! Bangun lebih banyak ekstraktor dan sabuk konveyor untuk menyelesaikan - obyektif dengan lebih cepat.

Kiat: Tahan tombol - SHIFT untuk meletakkan beberapa ekstraktor, dan + objektif dengan lebih cepat.

Tip: Tahan tombol + SHIFT untuk meletakkan beberapa ekstraktor sekaligus, dan gunakan tombol R untuk memutar." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Sekarang letakkan Pemotong untuk memotong lingkaran + menjadi 2 bagian!

NB: Pemotong akan selalu memotong dari atas ke + bawah apapun orientasinya." + 2_2_place_trash: Pemotong dapat tersumbat dan macet!

Gunakan + tong sampah untuk membuang sisa (!) yang saat ini tidak diperlukan. + 2_3_more_cutters: "Kerja yang bagus! Sekarang letakkan 2 pemotong lagi untuk mempercepat + proses ini!

NB: Gunakan tombol 0-9 + untuk mengakses bangunan lebih cepat!" + 3_1_rectangles: "Sekarang ekstrak beberapa persegi! Bangun 4 + ekstraktor dan hubungkan mereka ke bangunan pusat.

NB: + Tahan SHIFT saat meletakkan konveyor untuk mengaktifkan + perencana sabuk konveyor!" + 21_1_place_quad_painter: Letakkan pemotong empat bagian dan ekstrak beberapa + lingkaran, warna putih dan + merah! + 21_2_switch_to_wires: Pindah ke lapisan kabel dengan menekan tombol + E!

Lalu hubungkan keempat + input dari pengecat dengan menggunakan kabel! + 21_3_place_button: Mantap! Sekarang letakkan saklar dan hubungkan + dengan menggunakan kabel! + 21_4_press_button: "Tekan saklar untuk memancarkan sinyal yang + benar dan mengaktifkan pengecat.

NB: Kamu + tidak perlu menghubungkan semua input! Cobalah hanya menghubungkan dua." connectedMiners: one_miner: 1 Ekstraktor n_miners: Ekstraktor @@ -367,13 +363,13 @@ ingame: desc: Untuk membuat pabrik yang otomatis sepenuhnya! savegames: title: ∞ Data Simpanan - desc: Sebanyak yang anda mau! + desc: Sebanyak yang kamu mau! upgrades: title: 20 Tingkatan Upgrade desc: Versi demo ini hanya punya 5! markers: title: ∞ Penanda - desc: Anda tidak akan tersesat di pabrik anda! + desc: Kamu tidak akan tersesat di pabrikmu sendiri! wires: title: Kabel desc: Sebuah dimensi yang benar-benar berbeda! @@ -382,7 +378,7 @@ ingame: desc: Berhenti merusak matamu! support: title: Dukung saya - desc: Saya membuat ini di waktu luang! + desc: Saya membuat game ini di waktu luang! shopUpgrades: belt: name: Sabuk konveyor, Pembagi Arus & Terowongan @@ -391,7 +387,7 @@ shopUpgrades: name: Ekstraksi description: Kecepatan x → x processors: - name: Memotong, Memutar & Menyusun + name: Memotong, Memutar & Menumpuk description: Kecepatan x → x painting: name: Mencampur & Mengecat @@ -405,11 +401,12 @@ buildings: belt: default: name: Sabuk Konveyor - description: Mengangkut sumber daya, tahan dan seret untuk meletakkan beberapa. + description: Mengangkut sumber daya, tahan dan seret untuk meletakkan beberapa sekaligus. wire: default: name: Kabel - description: Memungkinkan anda untuk mengangkut Energi. + description: Mentransfer sinyal, dapat berupa bentuk, warna, atau boolean (1 + atau 0). Kabel dengan warna berbeda tidak akan menyambung. second: name: Kabel description: Mentransfer sinyal, dapat berupa bentuk, warna, atau boolean (1 @@ -426,24 +423,24 @@ buildings: underground_belt: default: name: Terowongan - description: Memungkinkan Anda untuk mengangkut sumber-sumber daya dibawah + description: Memungkinkan kamu untuk mengangkut sumber-sumber daya dibawah bangunan-bangunan atau sabuk konveyor. tier2: name: Terowongan Tingkat II - description: Memungkinkan Anda untuk mengangkut sumber-sumber daya dibawah + description: Memungkinkan kamu untuk mengangkut sumber-sumber daya dibawah bangunan-bangunan atau sabuk konveyor. cutter: default: name: Pemotong description: Memotong bentuk-bentuk secara vertikal dan mengeluarkan kedua - bagian. Apabila Anda hanya menggunakan satu bagian, - pastikan Anda lenyapkan bagian lain atau mesin akan + bagian. Apabila kamu hanya menggunakan satu bagian, + pastikan kamu lenyapkan bagian lain atau mesin akan tersumbat macet! quad: name: Pemotong (Empat Bagian) - description: Memotong bentuk-bentuk menjadi empat bagian. Apabila Anda - hanya menggunakan satu bagian, pastikan Anda lenyapkan - bagian-bagian lain atau mesin akan macet! + description: Memotong bentuk-bentuk menjadi empat bagian. Apabila kamu + hanya menggunakan satu bagian, pastikan kamu lenyapkan + bagian-bagian lain atau mesin akan tersumbat dan macet! rotater: default: name: Pemutar @@ -457,12 +454,12 @@ buildings: stacker: default: name: Penumpuk - description: Menumpukkan kedua bentuk. Apabila mereka tidak dapat digabungkan, + description: Menggabungkan kedua input. Apabila mereka tidak dapat digabungkan, bentuk kanan akan diletakkan diatas bentuk kiri. mixer: default: name: Pencampur Warna - description: Mencampurkan dua warna menggunakan campuran aditif. + description: Mencampurkan dua warna. painter: default: name: Pengecat @@ -471,57 +468,57 @@ buildings: mirrored: name: Pengecat description: Mengecat keseluruhan bentuk dari input kiri dengan warna dari input - atas. + bawah. double: name: Pengecat (Ganda) description: Mengecat bentuk-bentuk dari input kiri dengan warna dari input atas. quad: name: Pengecat (Empat Bagian) - description: Memungkinkan anda untuk mengecat tiap kuadrannya masing - masing + description: Memungkinkan kamu untuk mengecat tiap kuadrannya masing - masing pada bentuk. Hanya menyambung dengan sinyal yang benar pada lapisan kabel yang akan dicat! trash: default: name: Tong Sampah - description: Menerima input dari semua sisi dan menghancurkannya. Selamanya. + description: Menerima input dari segala sisi dan menghancurkannya. Selamanya. balancer: default: name: Penyeimbang description: Multifungsional - Mendistribusikan seluruh input secara merata ke seluruh output. merger: - name: Penggabung Sederhana + name: Penggabung Kompak description: Menggabungkan dua sabuk konveyor menjadi satu. merger-inverse: - name: Penggabung Sederhana + name: Penggabung Kompak description: Menggabungkan dua sabuk konveyor menjadi satu. splitter: - name: Pemisah Sederhana + name: Pemisah Kompak description: Memisahkan satu sabuk konveyor menjadi dua. splitter-inverse: - name: Pemisah Sederhana + name: Pemisah Kompak description: Memisahkan satu sabuk konveyor menjadi dua. storage: default: name: Tempat Penyimpanan - description: Menyumpan bentuk yang berlebihan, hingga kapasitas yang tertentu. - Memprioritaskan output dari kiri + description: Menyimpan bentuk yang berlebihan, hingga kapasitas tertentu. + Memprioritaskan output dari kiri dan dapat digunakan sebagai gerbang luapan. wire_tunnel: default: - name: Penyebrangan Kabel + name: Terowongan Kabel description: Memungkinkan untuk menyebrangkan 2 kabel tanpa menyambungkannya. constant_signal: default: name: Sinyal Konstan - description: Mengeluarkan sinyal yang konstan, dapat berupa bentuk, warna atau + description: Memancarkan sinyal yang konstan, dapat berupa bentuk, warna atau boolean (1 atau 0). lever: default: name: Saklar - description: Dapat diubah untuk mengeluarkan sinyal boolean (1 atau 0) pada - lapisan kabel, yang bisa digunakan untuk mengontrol seperti - penyaring. + description: Dapat digunakan untuk mengeluarkan sinyal boolean (1 atau 0) pada + lapisan kabel, yang bisa digunakan untuk mengontrol komponen, seperti + filter item. logic_gate: default: name: Gerbang AND @@ -533,7 +530,7 @@ buildings: berarti sebuah bentuk, warna atau boolean "1") xor: name: Gerbang XOR - description: Mengeluarkan boolean "1" jika kedua input adalah benar, namun bukan + description: Mengeluarkan boolean "1" jika salah satu input adalah benar, namun bukan keduanya. (Benar berarti sebuah bentuk, warna atau boolean "1") or: name: Gerbang OR @@ -553,11 +550,11 @@ buildings: name: Filter description: Hubungkan sebuah sinyal untuk merutekan semua benda yang cocok ke atas dan sisanya ke kanan. Dapat juga dikontrol dengan sinyal - boolean + boolean. display: default: name: Layar - description: Hubungkan dengan sebuah sinyal untuk ditunjukkan pada layar - Dapat + description: Hubungkan sebuah sinyal untuk ditunjukkan pada layar - Dapat berupa bentuk, warna atau boolean. reader: default: @@ -568,35 +565,34 @@ buildings: analyzer: default: name: Penganalisa bentuk - description: Menganalisa perempat bentuk pada kanan atas dan lapisan terbawah + description: Menganalisa bentuk bagian kanan atas pada lapisan paling bawah lalu mengeluarkan bentuk dan warnanya. comparator: default: name: Pembanding - description: Mengeluarkan boolean "1" jika kedua sinya adalah sama. Dapat - membandingkan Bentuk, warna dan boolean. + description: Mengeluarkan boolean "1" jika kedua sinyalnya adalah sama. Dapat + membandingkan bentuk, warna dan boolean. virtual_processor: default: name: Pemotong Virtual - description: Memotong bentuk secara virtual menjadi dua bagian. + description: Memotong bentuk menjadi dua bagian secara virtual. rotater: name: Pemutar Virtual - description: Memutar bentuk secara virtual, searah jarum jam dan tidak searah - jarum jam. + description: Memutar bentuk searah jarum jam secara virtual. unstacker: name: Pemisah Tumpukan Virtual - description: Memisahkan lapisan teratas secara virtual ke output kanan dan - sisanya ke output kiri. + description: Memisahkan lapisan paling atas ke output kanan dan + sisanya ke output kiri secara virtual. stacker: name: Penumpuk Virtual description: Menumpuk bentuk kanan ke bentuk kiri secara virtual. painter: name: Pengecat Virtual - description: Mengecat bentuk dari input bawah dengan warna dari input kanan. + description: Mengecat bentuk dari input bawah dengan warna dari input kanan secara virtual. item_producer: default: name: Pembuat Bentuk - description: Hanya tersedia di dalam mode sandbox , Mengeluarkan sinyal yang + description: Hanya tersedia di dalam mode sandbox, mengeluarkan sinyal yang diberikan dari lapisan kabel ke lapisan biasa. storyRewards: reward_cutter_and_trash: @@ -604,189 +600,188 @@ storyRewards: desc: Pemotong telah dibuka, yang dapat memotong bentuk menjadi dua secara vertikal apapun orientasinya!

Pastikan untuk membuang sisanya, jika - tidak ini dapat menghambat dan memperlambat - - karena ini anda diberikan Tong sampah, yang - menghapus semua yang anda masukkan! + tidak ini dapat tersumbat dan macet - + Oleh karena itu kamu diberikan tong sampah, yang + menghapus semua yang kamu masukkan! reward_rotater: title: Memutar desc: Pemutar telah dibuka! Ia memutar bentuk-bentuk searah jarum jam sebesar 90 derajat. reward_painter: title: Mengecat - desc: "Pengecat telah dibuka – Ekstraksi beberapa warna - (seperti yang Anda lakukan dengan bentuk) dan kemudian kombinasikan + desc: "Pengecat telah dibuka – Ekstrak beberapa warna + (seperti yang kamu lakukan dengan bentuk) dan kemudian kombinasikan dengan bentuk di dalam pengecat untuk mewarnai mereka!

- Catatan: Apabila Anda buta warna, terdapat mode buta + NB: Apabila kamu buta warna, terdapat mode buta warna di dalam pengaturan!" reward_mixer: title: Mencampur Warna - desc: Pencampur telah dibuka – Kombinasikan dua warna - menggunakan pencampuran aditif dengan bangunan ini! + desc: Pencampur Warna telah dibuka – Ia mencampur dua warna menjadi satu! reward_stacker: - title: Menyusun - desc: Anda sekarang dapat mengombinasikan bentuk-bentuk dengan - penyusun! Kedua input akan dikombinasikan, dan + title: Penumpuk + desc: Kamu sekarang dapat mengombinasikan bentuk-bentuk dengan + penumpuk! Kedua input akan dikombinasikan, dan apabila mereka dapat diletakan disebelah satu sama lain, mereka - akan terpadukan. Apabila tidak dapat, input kanan + akan terpadukan. Apabila tidak bisa, maka input kanan akan diletakkan diatas input kiri! reward_splitter: - title: Membagi - desc: Anda telah membuka varian pembagi dari + title: Pembagi Sederhana + desc: Kamu telah membuka varian pembagi dari penyeimbang - Menerima satu input dan membaginya - menjadi 2! + menjadi dua! reward_tunnel: title: Terowongan - desc: Terowongan telah dibuka – Sekarang Anda dapat memindahkan + desc: Terowongan telah dibuka – Sekarang kamu dapat memindahkan bentuk-bentuk melalui terowongan di bawah sabuk-sabuk konveyor dan bangungan-bangunan dengannya! reward_rotater_ccw: title: Memutar Berlawanan Arah Jarum Jam - desc: Anda telah membuka varian dari Pemutar - Ia memungkinkan - Anda untuk memutar bentuk-bentuk berlawanan arah jarum jam! Untuk + desc: Kamu telah membuka varian dari Pemutar - Bangunan ini memungkinkan + kamu untuk memutar bentuk-bentuk berlawanan arah jarum jam! Untuk membangunnya, pilih pemutar dan tekan 'T' to memilih varian! reward_miner_chainable: title: Ekstraktor Merantai - desc: "Anda telah membuka Ekstraktor (Berantai)! Ia dapat + desc: "Kamu telah membuka Ekstraktor (Berantai)! Bangunan ini dapat mengoper sumber daya ke ekstraktor depannya - sehingga anda dapat mengekstrak sumber daya denga lebih + sehingga kamu dapat mengekstrak sumber daya dengan lebih efisien!

NB: Ekstraktor yang lama sudah diganti pada toolbar - anda sekarang!" + kamu sekarang!" reward_underground_belt_tier_2: title: Terowongan Tingkat II - desc: Anda telah membuka varian baru terowongan - Ia memiliki - jangkauan yang lebih panjang, dan sekarang Anda + desc: Kamu telah membuka varian baru terowongan - Bangunan ini memiliki + jangkauan yang lebih panjang, dan sekarang kamu juga dapat memadukan terowongan-terowongan tersebut! reward_cutter_quad: title: Pemotongan Empat Bagian - desc: Anda telah membuka varian dari pemotong - Ia memungkinkan - Anda memotong bentuk-bentuk ke dalam empat bagian + desc: Kamu telah membuka varian dari pemotong - Bangunan ini memungkinkan + kamu untuk memotong bentuk-bentuk menjadi empat bagian daripada hanya dua bagian! reward_painter_double: title: Pengecatan Ganda - desc: Anda telah membuka varian dari pengecat - Ia bekerja + desc: Kamu telah membuka varian dari pengecat - Bangunan ini bekerja seperti pengecat biasa namun dapat memproses dua bentuk - sekaligus mengonsumsi hanya satu warna daripada dua! + sekaligus
, dan mengonsumsi hanya satu warna daripada dua! reward_storage: title: Tempat Penyimpanan - desc: Anda telah membuka Tempat Penyimpanan - Ia memungkinkan - anda untuk menyimpan item hingga kapasitas tertentu!

Ia - mengutamakan output kiri, sehingga anda dapat menggunakannya sebagai - gerbang luapan! + desc: Kamu telah membuka Tempat Penyimpanan - Bangunan ini memungkinkan + kamu untuk menyimpan item hingga kapasitas tertentu!

Bangunan ini + mengutamakan output kiri, sehingga kamu dapat menggunakannya sebagai + gerbang luapan (overflow gate)! reward_freeplay: title: Permainan Bebas - desc: Anda berhasil! Anda telah membuka mode permainan bebas! + desc: Kamu berhasil! Kamu telah membuka mode permainan bebas! Ini artinya bentuk-bentuk akan dibuat secara - acak!

Karena pusat pangkalan akan + acak!

Karena bangunan pusat akan membutuhkan penghasilan dari sekarang, Saya sangat menyarankan untuk membangun mesin yang secara otomatis mengirim - bentuk yang diminta!

Pusat pangkalan mengeluarkan bentuk - yang diminta pada lapisan kabel, jadi yang harus anda lakukan adalah + bentuk yang diminta!

Bangunan pusat mengeluarkan bentuk + yang diminta pada lapisan kabel, jadi yang harus kamu lakukan adalah menganalisa dan membangun pabrik secara otomatis berdasarkan itu. reward_blueprints: title: Cetak Biru - desc: Anda sekarang dapat menyalin dan meletakkan bagian dari - pabrik Anda! Pilih sebuah area (tahan CTRL, lalu seret dengan - tetikus), dan tekan 'C' untuk menggandakannya.

Untuk - meletakannya tidak gratis, Anda harus memproduksi + desc: Kamu sekarang dapat menyalin (copy) dan menempel (paste) bagian dari + pabrikmu! Pilih sebuah area (tahan CTRL, lalu seret dengan + mouse), dan tekan 'C' untuk menyalinnya.

Untuk + menempelnya tidak gratis, Kamu harus memproduksi bentuk cetak biru untuk dapat melakukannya! (Bentuk - yang baru saja anda kirim). + yang baru saja kamu kirim). no_reward: title: Level Selanjutnya desc: "Level ini tidak memiliki hadiah, namun yang selanjutnya akan!

- Catatan: Sebaiknya Anda jangan hancurkan pabrik yang telah ada – - Anda membutuhkan semua bentuk-bentuk tersebut lagi + NB: Sebaiknya kamu jangan hancurkan pabrik yang telah ada – + Kamu akan membutuhkan semua bentuk-bentuk tersebut lagi nanti untuk membuka tingkatan-tingkatan selanjutnya!" no_reward_freeplay: title: Level Selanjutnya desc: Selamat! Omong-omong, lebih banyak konten telah direncanakan untuk versi - penuh! + lengkap! reward_balancer: title: Penyeimbang - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: Penyeimbang multifungsional telah terbuka - Bangunan ini dapat + digunakan untuk membuat pabrik yang lebih besar lagi dengan memisahkan + dan menggabungkan item ke beberapa sabuk konveyor! reward_merger: title: Penggabung Sederhana - desc: Anda telah membuka varianpenggabung dari - penyeimbang - Ia menerima dua input dan + desc: Kamu telah membuka varianpenggabung dari + penyeimbang - Bangunan ini menerima dua input dan menggabungkannya dalam satu sabuk konveyor! reward_belt_reader: title: Pembaca Sabuk Konveyor - desc: Anda telah membuka pembaca sabuk konveyor! Ini - memungkinkan anda untuk mengukur penghasilan dalam sebuah sabuk - konveyor.

Dan tunggu sampai anda membuka kabel - maka ini + desc: Kamu telah membuka pembaca sabuk konveyor! Bangunan ini + memungkinkan kamu untuk mengukur penghasilan dalam sebuah sabuk + konveyor.

Dan tunggu sampai kamu membuka kabel - maka bangunan ini akan sangat berguna! reward_rotater_180: title: Pemutar (180 derajat) - desc: Anda telah membuka pemutar 180 derajat! - Ini - memungkinkan anda untuk memutar bentuk dalam 180 derajat (Kejutan! + desc: Kamu telah membuka pemutar 180 derajat! - Bangunan ini + memungkinkan kamu untuk memutar bentuk dalam 180 derajat (Kejutan! :D) reward_display: title: Layar - desc: "Anda baru saja membuka Layar - Hubungkan sebuah sinyal + desc: "Kamu baru saja membuka Layar - Hubungkan sebuah sinyal dalam lapisan kabel untuk memvisualisasikannya!

NB: Apakah - anda memperhatikan pembaca sabuk dan penyimpanan mengeluarkan item + kamu memperhatikan pembaca sabuk dan penyimpanan mengeluarkan item bacaan terakhir? Coba tampilkan pada layar!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Sinyal Konstan + desc: Kamu telah membuka bangunan sinyal konstan pada lapisan + kabel! Bangunan ini berguna untuk menyambungkannya ke filter item + contohnya.

Sinyal konstannya dapat memancarkan + bentuk, warna atau + boolean (1 atau 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Gerbang Logis + desc: Kamu telah membuka gerbang logis! Kamu tidak perlu bersemangat + tentang ini, tetapi sebenarnya ini sangat keren!

Dengan gerbang-gerbang tersebut + kamu sekarang dapat mengkalkulasi operasi AND, OR, XOR dan NOT.

Sebagai bonus + kamu juga telah mendapatkan transistor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Prosesi Virtual + desc: Kamu baru saja mendapatkan banyak bangunan yang memungkinkan kamu untuk + menstimulasi prosesi pembuatan bentuk!

Kamu sekarang + dapat menstimulasi pemotongan, pemutaran, penumpukan dan masih banyak lagi pada lapisan kabel! + Dengan ini kamu sekarang memiliki tiga opsi untuk melanjutkan permainan:

- + Membuat sebuah mesin otomatis untuk membuat segala bentuk + yang diminta oleh PUSAT (Saya sarankan kamu untuk mencobanya!).

- Membuat + sesuatu yang keren dengan kabel.

- Melanjutkan permainan seperti + biasa.

Apapun yang kamu pilih, ingatlah untuk bersenang-senang! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + title: Kabel & Pengecat (Empat Bagian) + desc: "Kamu baru saja membuka Lapisan Kabel: Ini adalah sebuah + lapisan terpisah diatas lapisan biasa dan memperkenalkan banyak mekanisme + baru!

Untuk permulaan kamu telah membuka Pengecat (Empat + Bagian) - Hubungkan slot yang ingin kamu cat pada + lapisan kabel!

Untuk mengubah ke lapisan kabel, tekan tombol + E.

NB: Nyalakan petunjuk di + pengaturan untuk mengaktifkan tutorial kabel!" reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filter Item + desc: Kamu telah membuka Filter! Bangunan ini akan mengarahkan item baik + ke output atas atau output kanan tergantung apakah mereka cocok dengan + sinyal dari lapisan kabel atau tidak.

Kamu juga bisa memasukkan + sinyal boolean (1 atau 0) untuk mengaktifkan atau menonaktifkannya. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Akhir dari Demo + desc: Kamu telah mencapai akhir dari versi demo! settings: title: Pengaturan categories: general: Umum userInterface: Antarmuka Pengguna - advanced: Tingkat Tinggi - performance: Performance + advanced: Terdepan + performance: Performa versionBadges: dev: Pengembangan - staging: Pementasan + staging: Tahapan prod: Produksi buildDate: Dibangun labels: uiScale: - title: Skala Antarmuka + title: Skala Antarmuka (User Interface) description: Ganti ukuran antarmuka pengguna. Antarmuka tetap akan berskalakan - berdasar resolusi peralatan Anda, tetapi pengaturan ini + berdasar resolusi perangkatmu, tetapi pengaturan ini mengontrol besar skala. scales: super_small: Sangat kecil @@ -796,8 +791,8 @@ settings: huge: Sangat besar autosaveInterval: title: Jeda Penyimpanan Otomatis - description: Mengatur seberapa sering permainan menyimpan secara otomatis. Anda - juga dapat menonaktifkannya sama sekali disini. + description: Mengatur seberapa sering permainan menyimpan secara otomatis. Kamu + juga dapat menonaktifkannya secara total disini. intervals: one_minute: 1 Menit two_minutes: 2 Menit @@ -806,9 +801,9 @@ settings: twenty_minutes: 20 Menit disabled: Dinonaktifkan scrollWheelSensitivity: - title: Kepekaan perbesaran - description: Mengubah seberapa peka perbesaran yang dilakukan (baik dengan roda - tetikus atau trackpad). + title: Kepekaan Zoom + description: Mengubah seberapa peka zoom yang dilakukan (baik dengan roda + mouse atau trackpad). sensitivity: super_slow: Sangat lambat slow: Lambat @@ -817,8 +812,7 @@ settings: super_fast: Sangat cepat movementSpeed: title: Kecepatan gerakan - description: Mengubah seberapa cepat pandangan bergerak ketika menggunakan papan - ketik. + description: Mengubah seberapa cepat pandangan bergerak ketika menggunakan keyboard atau mouse. speeds: super_slow: Sangat lambat slow: Lambat @@ -828,12 +822,12 @@ settings: extremely_fast: Luar biasa cepat language: title: Bahasa - description: Ganti bahasa. Semua terjemahan adalah contribusi pengguna dan + description: Ganti bahasa. Semua terjemahan adalah kontribusi pengguna dan mungkin saja tidak lengkap! enableColorBlindHelper: title: Mode buta warna - description: Mengaktifkan berbagai peralatan yang memungkinkan Anda bermain - apabila Anda buta warna. + description: Mengaktifkan berbagai peralatan yang memungkinkan kamu bermain + apabila kamu buta warna. fullscreen: title: Layar penuh description: Direkomendasikan untuk bermain dengan layar penuh untuk mendapatkan @@ -851,100 +845,94 @@ settings: dark: Gelap light: Terang refreshRate: - title: Target Simulasi - description: Apabila Anda memiliki monitor 144hz, ganti laju penyegaran sehingga + title: Laju Penyegaran (Tick Rate) + description: Apabila kamu memiliki monitor 144hz, ganti laju penyegaran sehingga permainan dapat disimulasikan dengan benar pada laju yang lebih tinggi. Ini mungkin saja mengurangi laju bingkai per detik - (frames per second) apabila computer anda terlalu lambat. + (frames per second) apabila komputer kamu terlalu lambat. alwaysMultiplace: - title: Peletakkan berganda + title: Peletakkan Ganda description: Apabila diaktifkan, semua bangunan akan tetap terpilih setelah - penempatan sampai Anda membatalkannya. Ini sama saja dengan + penempatan sampai kamu membatalkannya. Ini sama saja dengan menahan tombol SHIFT secara permanen. offerHints: - title: Petunjuk & penuntun - description: Apakah akan menawarkan petunjuk dan penuntun ketika bermain. Juga + title: Petunjuk & Tutorial + description: Akan menawarkan petunjuk dan tutorial ketika bermain. Juga menyembunyikan elemen-elemen antarmuka pengguna (user interface) tertentu sampai level tertentu untuk membuat lebih mudah untuk bermain. enableTunnelSmartplace: - title: Terowongan cerdas + title: Terowongan Cerdas description: Ketika diaktifkan, proses penempatan terowongan akan menghapus konveyor yang tidak berguna secara otomatis. Ini juga - memungkinkan Anda untuk menyeret terowongan dan kelebihan + memungkinkan kamu untuk menyeret terowongan dan kelebihan terowongan akan dihilangkan. vignette: - title: Vinyet - description: Mengaktifkan vinyet, yang menggelapkan sudut-sudut layar dan + title: Vignette + description: Mengaktifkan vignette, yang menggelapkan sudut-sudut layar dan membuat teks lebih mudah dibaca. rotationByBuilding: title: Pemutaran masing-masing tipe bangunan - description: Setiap tipe bangunan mengingat putaran yang Anda tetapkan - kepadanya. Ini mungkin lebih nyaman apabila Anda sering berganti + description: Setiap tipe bangunan mengingat putaran atau rotasi yang kamu tetapkan + kepadanya. Ini mungkin lebih nyaman apabila kamu sering berganti untuk menempatkan berbagai tipe bangunan. compactBuildingInfo: - title: Pemadatan informasi banguna + title: Pemadatan Informasi Bangunan description: Memendekkan kotak-kotak informasi bangunan-bangunan dengan hanya menampilkan rasionya. Jika tidak, deskripsi dan gambar ditampilkan. disableCutDeleteWarnings: - title: Nonaktifkan peringatan pemindahan/penghapusan + title: Nonaktifkan Peringatan Pemindahan/Penghapusan description: Menonaktifkan peringatan yang muncul ketikan pemindahkan/menghapus lebih dari 100 entitas. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Volume Suara + description: Mengatur volume untuk efek suara musicVolume: - title: Music Volume - description: Set the volume for music + title: Volume Musik + description: Mengatur volume untuk musik lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Kualitas Peta Sumber Daya Rendah + description: Menyederhanakan rendering sumber daya pada peta saat diperbesar untuk meningkatkan performa. + Bahkan terlihat lebih rapi, jadi pastikan untuk mencobanya! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Nonaktifkan Grid + description: Menonaktifkan ubin grid dapat membantu performa. + Ini juga membuat game menjadi lebih rapi! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Menghapus Kursor dengan Klik Kanan + description: Diaktifkan secara default, menghapus kursor setiap kali kamu mengklik kanan saat kamu memiliki bangunan yang dipilih untuk penempatan. Jika dinonaktifkan, kamu dapat menghapus bangunan dengan mengklik kanan saat meletakkan bangunan. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Tekstur kualitas rendah (Jelek) + description: Menggunakan kualitas rendah untuk menyelamatkan performa. + Ini akan membuat penampilan game menjadi jelek! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Tampilkan Batasan Chunk + description: Game ini dibagi-bagi menjadi ubin 16x16 bagian, jika pengaturan ini + diaktifkan maka batas dari tiap chunk akan diperlihatkan. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Memilih ekstraktor pada tampungan sumber daya + description: Diaktifkan secara default, memilih ekstraktor apabila kamu menggunakan pipet ketika + mengarahkan pada tampungan sumber daya. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Sabuk Sederhana (Jelek) + description: Tidak merender item pada sabuk konveyor kecuali ketika mengarahkan ke konveyor + untuk menyelamatkan performa. Saya tidak merekomendasikan untuk bermain dengan pengaturan ini + jika kamu tidak benar-benar perlu performanya. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Bergeser pada Layar Tepi + description: Memungkinkan untuk memindahkan peta dengan menggerakkan kursor ke tepi layar. Kecepatannya tergantung pada pengaturan Kecepatan Gerakan. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zoom ke arah Kursor + description: Jika dinyalakan maka zoom akan terjadi pada arah dan posisi kursor, + sebaliknya zoom kana mengarah pada tengah layar. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Ukuran Sumber Daya Peta + description: Mengontrol ukuran bentuk-bentuk pada gambaran peta (ketika zoom out). rangeSliderPercentage: % keybindings: - title: Tombol pintas - hint: "Petunjuk: Pastikan Anda menggunakan CTRL, SHIFT and ALT! Mereka + title: Tombol Pintas + hint: "Petunjuk: Pastikan kamu menggunakan CTRL, SHIFT and ALT! Mereka memungkinkan berbagai opsi penempatan." resetKeybindings: Setel Ulang Tombol Pintas categoryLabels: @@ -952,9 +940,9 @@ keybindings: ingame: Permainan navigation: Navigasi placement: Penempatan - massSelect: Pemilihan massal - buildings: Tombol pintas bangunan - placementModifiers: Pengubah penempatan + massSelect: Pemilihan Massal + buildings: Tombol Pintas Bangunan + placementModifiers: Pengubah Penempatan mappings: confirm: Konfirmasi back: Kembali @@ -964,57 +952,57 @@ keybindings: mapMoveLeft: Geser ke kiri mapMoveFaster: Geser lebih cepat centerMap: Pusat peta - mapZoomIn: Perbesar - mapZoomOut: Perkecil + mapZoomIn: Zoom in + mapZoomOut: Zoom out createMarker: Buat penanda menuOpenShop: Tingkatan-tingkatan menuOpenStats: Statistik menuClose: Tutup menu - toggleHud: Alihkan HUD - toggleFPSInfo: Alihkan laju bingkan per detik (frame per second) dan informasi debug + toggleHud: Aktifkan HUD + toggleFPSInfo: Aktifkan FPS dan Informasi Debug switchLayers: Ganti lapisan - exportScreenshot: Ekspor keseluruhan pangkalan pusat sebagai gambar + exportScreenshot: Ekspor keseluruhan pabrik sebagai Screenshot belt: Sabuk Konveyor underground_belt: Terowongan miner: Ekstraktor cutter: Pemotong rotater: Pemutar - stacker: Penyusun + stacker: Penumpuk mixer: Pencampur Warna painter: Pengecat trash: Tong Sampah - wire: Kawat Energi + wire: Kabel pipette: Pipet rotateWhilePlacing: Putar rotateInverseModifier: "Modifier: Putar berlawanan arah jarum jam sebagai gantinya" cycleBuildingVariants: Ganti varian confirmMassDelete: Hapus area - pasteLastBlueprint: Gandakan cetak biru terakhir + pasteLastBlueprint: Tempel (paste) cetak biru terakhir cycleBuildings: Ganti bangunan lockBeltDirection: Aktifkan perencana konveyor switchDirectionLockSide: "Planner: Alih sisi" massSelectStart: Tahan dan seret untuk memulai massSelectSelectMultiple: Pilih berbagai area - massSelectCopy: Gandakan area - massSelectCut: Pindahkan area + massSelectCopy: Salin (copy) area + massSelectCut: Pindahkan (cut) area placementDisableAutoOrientation: Nonaktifkan orientasi otomatis placeMultiple: Tinggal di mode penempatan placeInverse: Balikkan orientasi otomatis konveyor - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) + balancer: Penyeimbang + storage: Tempat Penyimpanan + constant_signal: Sinyal Konstan + logic_gate: Gerbang Logis + lever: Saklar filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + wire_tunnel: Terowongan Kabel + display: Layar + reader: Pembaca Sabuk Konveyor + virtual_processor: Pemotong Virtual transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Penganalisa Bentuk + comparator: Pembanding + item_producer: Pembuat Item + copyWireValue: "Kabel: Salin nilai di bawah kursor" about: title: Tentang permainan ini body: >- @@ -1022,13 +1010,13 @@ about: href="https://github.com/tobspr" target="_blank">Tobias Springer (ini adalah saya).

- Apabila Anda ingin berkontribusi, periksa shapez.io di github.

+ Apabila kamu ingin berkontribusi, periksa shapez.io di github.

- Permainan ini tidak mungkin ada tanpa komunitas Discord di sekitar permainan saya – Anda hendaknya bergabung server Discord!

+ Permainan ini tidak mungkin ada tanpa komunitas Discord di sekitar game saya – Kamu hendaknya bergabung server Discord!

Lagunya dibuat oleh Peppsen - Dia mengagumkan.

- Akhirnya, banyak terima kasih kepada teman baik saya Niklas - Tanpa sesi-sesi factorio kami, permainan ini tidak mungkin tercipta. + Akhir kata, banyak terima kasih kepada teman baik saya Niklas - Tanpa sesi-sesi factorio kami, permainan ini tidak mungkin tercipta. changelog: title: Catatan Perubahan demo: @@ -1040,63 +1028,59 @@ demo: exportingBase: Mengekspor keseluruhan pangkalan pusat sebagai gambar settingNotAvailable: Tidak tersedia dalam versi demo. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Bangunan pusat menerima segala input, tidak hanya bentuk sekarang! + - Pastikan pabrikmu berbentuk modul - akan membantu! + - Jangan membangun terlalu dekat PUSAT, atau akan terjadi kericuhan yang besar! + - Apabila penumpukkan tidak bekerja, cobalah tukar kedua input. + - Kamu bisa mengaktifkan Perencana Sabuk Konveyor dengan menekan tombol R. + - Menahan CTRL memungkinkan untuk menyeret sabuk konveyor tanpa rotasi otomatis. + - Rasio akan tetap sama, selama semua upgrade berada pada Tingkatan yang sama. + - Eksekusi atau pembuatan secara serial lebih efisian daripada paralel. + - Kamu akan membuka lebih banyak variasi bangunan nanti dalam game! + - Kamu bisa menggunakan tombol T untuk berganti antara varian. + - Simetri adalah kunci! + - Kamu dapat memadukan dua varian terowongan dalam satu baris ubin. + - Cobalah untuk membuat pabrik yang kompak dan padat - akan membantu! + - Pengecat memiliki varian lain yang bisa kamu pilih dengan menekan tombol T + - Memiliki rasio bangunan yang tepat dapat memaksimalkan efektivitas. + - Pada level maksimum, 5 ekstraktor akan memenuhi 1 sabuk konveyor. + - Jangan lupa tentang terowongan! + - Kamu tidak perlu membagi item secara merata untuk meraih efisiensi maksimal. + - Menahan SHIFT akan mengaktifkan Perencana Sabuk Konveyor, memungkinkan kamu untuk meletakkan sabuk konveyor yang panjang dengan mudah + - Pemotong selalu memotong secara vertikal, bagaimanapun orientasinya. + - Untuk mendapatkan warna putih, campurkan ketiga warna. + - Tempat penyimpanan memprioritaskan output pertama. + - Gunakan waktu untuk menciptakan desain yang dapat diulang - itu sangat berharga! + - Menahan CTRL memungkinkan untuk meletakkan beberapa bangunan. + - Kamu dapat menahan ALT untuk memutar arah pada sabuk konveyor yang sudah diletakkan. + - Efisiensi adalah kunci! + - Tampungan bentuk yang semakin jauh dari pusat maka akan semakin kompleks. + - Mesin-mesin memiliki kecepatan maksimum, bagilah mereka untuk mendapatkan efisiensi maksimal. + - Gunakan penyeimbang untuk memaksimalkan efisiensi pabrikmu. + - Pabrik yang terorganisir itu penting. Cobalah untuk tidak banyak menyebrangi konveyor. + - Rencanakan terlebih dahulu, atau akan menjadi kericuhan yang besar! + - Jangan hapus pabrik-pabrik lama kamu! Kamu akan memerlukannya untuk membuka tingkatan. + - Cobalah untuk menyelesaikan level 20 sebelum mencari bantuan! + - Jangan mempersulit hal-hal, cobalah untuk tetap simpel dan kamu akan maju. + - Kamu mungkin perlu menggunakan ulang pabrik-pabrik yang telah kamu buat. Rencanakan pabrik kamu supaya dapat digunakan kembali. + - Terkadang, kamu dapat menemukan bentuk yang diperlukan pada peta tanpa harus menumpuknya. + - Bentuk penuh windmills dan pinwheels tidak akan pernah muncul secara natural. + - Warnai bentuk sebelum memotongnya untuk meningkatkan efisiensi. + - Dengan modul-modul, ruang hanyalah persepsi; sebuah kekhawatiran untuk seorang yang hidup. + - Buatlah pabrik Cetak Biru yang terpisah. Mereka sangat penting untuk membuat modul. + - Perhatikan lebih dekat pencampur warnanya, dan pertanyaanmu akan terjawab. + - Gunakan CTRL + Klik untuk memilih sebuah area. + - Bangunan yang terlau dekat dengan pusat dapat menghalangi projek yang akan datang. + - Ikon pin di samping tiap bentuk pada tab upgrade akan mem-pin bentuknya ke layar. + - Campur semua warna utama untuk menciptakan warna putih! + - Kamu punya peta yang tak terbatas, jadi jangan memadatkan pabrikmu di pusat, luaskan! + - Cobalah Factorio juga! Itu game favorit saya. + - Pemotong (Empat Bagian) memotong searah jarum jam mulai dari bagian kanan atas! + - Kamu bisa mengunduh data simpananmu di menu utama (main menu)! + - Game ini memiliki banyak tombol pintas yag sangat berguna! Pastikan untuk mengeceknya di pengaturan. + - Game ini memiliki banyak pengaturan, Pastikan untuk mengeceknya! + - Penanda ke bangunan pusatmu memiliki kompas yang menunjukkan lokasinya! + - Untuk membersihkan sabuk konveyor, pindahkan bagian dan tempel di lokasi yang sama. + - Tekan F4 untuk menunjukkan FPS dan Tick Rate kamu. + - Tekan F4 dua kali untuk menunjukkan ubin mouse dan kameramu. + - Kamu bisa mengklik bentuk yang di-pin di sebelah kiri untuk tidak mem-pinnya lagi. From b1c822d63025dc66955063090a451c79410cb5f1 Mon Sep 17 00:00:00 2001 From: dobidon <35607008+dobidon@users.noreply.github.com> Date: Sun, 11 Oct 2020 09:14:02 +0300 Subject: [PATCH 006/127] Update base-tr.yaml (#807) * Update base-tr.yaml - Translating additional keys - Replacing reverted translations at lines: 688-690 712-716 736-742 * Update base-tr.yaml * Update base-tr.yaml - Translating time abbreviations in statistics --- translations/base-tr.yaml | 98 +++++++++++++++++++-------------------- 1 file changed, 49 insertions(+), 49 deletions(-) diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index 1c8040df..7cc78d33 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -202,13 +202,13 @@ dialogs: title: Oyun Kaydının Yeniden Adlandır desc: Oyun kaydını buradan adlandırabilirsiniz. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Eğitim Mevcut + desc: Bu seviye için eğitim vidyosu mevcut! İzlemek + ister misin? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Eğitim Mevcut + desc: Bu seviye için eğitim vidyosu mevcut, ama İngilizce dilinde. + İzlemek ister misin? ingame: keybindingsOverlay: moveMap: Hareket Et @@ -269,9 +269,9 @@ ingame: description: Merkez binanıza giden bütün şekilleri gösterir. noShapesProduced: Henüz hiçbir şekil üretilmedi. shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / sn + minute: / dk + hour: / sa settingsMenu: playtime: Oynama zamanı buildingsPlaced: Yapılar @@ -302,30 +302,30 @@ ingame: yerleştir.

İpucu: Birden fazla üretici yerleştirmek için SHIFT tuşuna basılı tut, ve R tuşuyla taşıma bandının yönünü döndür." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Şimdi daireleri yarıya bölmek için bir Kesici yerleştir!

+ Not: Kesici şekilleri yönünden bağımsız olarak her zaman yukarıdan aşağıya + keser." + 2_2_place_trash: Kesicinin çıkış hatları doluysa durabilir!

+ Bunun için kullanılmayan çıktılara çöp + yerleştirin. + 2_3_more_cutters: "İyi iş çıkardın! Şimdi işleri hızlandırmak için iki kesici daha + yerleştir.

Not: 0-9 tuşlarını kullanarak yapılara + daha hızlı ulaşabilirsin!" + 3_1_rectangles: "Şimdi biraz dikdörtgen üretelim! 4 Üretici yerleştir ve + bunları merkeze bağla.

Not: SHIFT tuşuna + basılı tutarak bant planlayıcıyı + etkinleştir!" + 21_1_place_quad_painter: Dörtlü boyayıcıyı yerleştirin ve daireyi, + beyaz ve kırmızı renkleri + elde edin! + 21_2_switch_to_wires: Kablo katmanına E tuşuna basarak geçiş yapın!

+ Sonra boyayıcının dört girişini kablolara + bağlayın! + 21_3_place_button: Harika! Şimdi bir Anahtar yerleştirin ve onu + kablolarla bağlayın! + 21_4_press_button: "Anahtara basarak gerçekçi sinyal(1) gönderin ve bununla + boyayıcıyı aktifleştirin.

Not: Bütün girişleri bağlamanıza gerek yok! + Sadece iki tanesini kabloyla bağlamayı deneyin." colors: red: Kırmızı green: Yeşil @@ -594,7 +594,7 @@ storyRewards: eden çöpü de verdim! reward_rotater: title: Döndürme - desc: Döndürücü açıldı! Döndürücü şekilleri saat yönüne 90 + desc: Döndürücü açıldı! Döndürücü şekilleri saat yönünde 90 derece döndürür. reward_painter: title: Boyama @@ -685,9 +685,9 @@ storyRewards: desc: Deneme sürümünün sonuna geldin! reward_balancer: title: Dengeleyici - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: Çok fonksiyonlu dengeleyici açıldı. - Eşyaları + bantlara ayırarak ve bantları birleştirerek daha büyük + fabrikalar kurmak için kullanılabilir! reward_merger: title: Tekil Birleştirici desc: Birleştiriciyi açtın ! dengeleyecinin @@ -709,11 +709,11 @@ storyRewards: dene!" reward_constant_signal: title: Sabit Sinyal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 or 0). + desc: Kablo katmanında inşa edilebilen sabit sinyal'i açtın! + Bu yapı örneğin eşya filtrelerine bağlanabilir.

+ Sabit sinyal şekil, renk veya + ikili değer (1 veya 0) + gönderelebilir. reward_logic_gates: title: Mantık Kapıları desc: Mantık kapıları açıldı! Çok heyecanlanmana gerek yok, ama @@ -733,13 +733,13 @@ storyRewards: et.

Ne seçersen seç eğlenmeyi unutma! reward_wires_painter_and_levers: title: Kablolar ve Dörtlü Boyayıcı - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Az önce Kablo Katmanını açtın: Normal oyunun bulunduğu + katmanın üzerinde ayrı bir katmandır ve bir sürü yeni özelliği + vardır!

Başlangıç olarak senin için Dörtlü + Boyayıcıyı açıyorum. - Kablo katmanında boyamak için + istediğin hatları bağla!

Kablo katmanına geçiş yapmak için + E tuşunu kullan.

Not: İpuçlarını kablo eğitimlerini + görmek için ayarlarda aktifleştirmeyi unutma." reward_filter: title: Eşya Filtresi desc: Eşya filtresini açtın! Kablo katmanından gelen sinyalle From 97db304b6fdef14e525863dbf72fa0ee27fd05cb Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Sun, 11 Oct 2020 08:14:47 +0200 Subject: [PATCH 007/127] translate hints to French (#808) --- translations/base-fr.yaml | 139 +++++++++++++++++++------------------- 1 file changed, 71 insertions(+), 68 deletions(-) diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index fc111b34..21499e68 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -183,8 +183,9 @@ dialogs: createMarker: title: Nouvelle balise titleEdit: Modifier cette balise - desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) + desc: Donnez-lui un nom. Vous pouvez aussi inclure le raccourci + d’une forme (que vous pouvez générer ici). editSignal: title: Définir le signal descItems: "Choisissez un objet prédéfini :" @@ -202,13 +203,12 @@ dialogs: title: Renommer la sauvegarde desc: Vous pouvez renommer la sauvegarde ici. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutoriel disponible + desc: Il y a un tutoriel vidéo pour ce niveau. Voulez-vous le regarder ? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutoriel disponible + desc: Il y a un tutoriel vidéo pour ce niveau, mais il n’est disponible qu’en + anglais. Voulez-vous le regarder ? ingame: keybindingsOverlay: moveMap: Déplacer @@ -318,30 +318,32 @@ ingame: plus vite votre but.

Astuce : Gardez MAJ enfoncé pour placer plusieurs extracteurs, et utilisez R pour les faire pivoter." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Maintenant, placez un découpeur pour + couper les cercles en deux.

PS : Le découpeur coupe toujours + de haut en bas quelle que soit son orientation." + 2_2_place_trash: Le découpeur peut se bloquer !

+ Utilisez la poubelle pour vous débarrasser des déchets + dont vous n’avez pas (encore) besoin. + 2_3_more_cutters: "Bravo ! Maintenant ajoutez deux découpeurs de + plus pour accélérer le processus !

+ PS : Utilisez les raccourcis clavier 0–9 pour accéder + plus rapidement aux bâtiments." + 3_1_rectangles: "Maintenant, extrayez des rectangles.Construisez + quatre extracteurs et connectez-les au centre.

+ PS : Gardez MAJ enfoncé en plaçant un convoyeur pour + activer le planificateur." + 21_1_place_quad_painter: Placez un quadruple peintre et + connectez des cercles et des couleurs + blanche et rouge ! + 21_2_switch_to_wires: Basculez sur le calque de câblage en appuyant sur + E.

Puis connectez les quatre + entrées du peintre avec des câbles ! + 21_3_place_button: Génial ! Maintenant, placez un + interrupteur et connectez-le avec des câbles ! + 21_4_press_button: "Appuyez sur le bouton pour qu’il émette un + signal vrai et active le peintre.

PS : Vous + n’êtes pas obligé de connecter toutes les entrées ! Essayez d’en brancher + seulement deux." connectedMiners: one_miner: 1 extracteur n_miners:  extracteurs @@ -598,12 +600,11 @@ buildings: storyRewards: reward_cutter_and_trash: title: Découpage de formes - desc: You just unlocked the cutter, which cuts shapes in half - from top to bottom regardless of its - orientation!

Be sure to get rid of the waste, or - otherwise it will clog and stall - For this purpose - I have given you the trash, which destroys - everything you put into it! + desc: Vous avez débloqué le découpeur. Il coupe des formes en + deux de haut en bas quelle que soit son + orientation !

Assurez-vous de vous débarrasser des déchets, + sinon gare au blocage. À cet effet, je mets à votre + disposition la poubelle, qui détruit tout ce que vous y mettez ! reward_rotater: title: Rotation desc: Le pivoteur a été débloqué ! Il pivote les formes de 90 @@ -629,9 +630,10 @@ storyRewards: placée au-dessus de la forme de gauche. reward_balancer: title: Répartiteur - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: Le répartiteur multifonctionnel a été débloqué. Il peut + être utilisé pour construire de plus grandes usines en + distribuant équitablement et rassemblant les formes + entre plusieurs convoyeurs !

reward_tunnel: title: Tunnel desc: Le tunnel a été débloqué. Vous pouvez maintenant faire @@ -655,14 +657,13 @@ storyRewards: les deux variantes de tunnels ! reward_merger: title: Fusionneur compact - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + desc: Vous avez débloqué le fusionneur, une variante du + répartiteur. Il accepte deux entrées et les fusionne en un + seul convoyeur ! reward_splitter: title: Répartiteur compact - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + desc: Vous avez débloqué une variante compacte du répartiteur — + Il accepte une seule entrée et la divise en deux sorties ! reward_belt_reader: title: Lecteur de débit desc: Vous avez débloqué le lecteur de débit ! Il vous permet @@ -699,13 +700,14 @@ storyRewards: pivoter une forme de 180 degrés (Surprise ! :D) reward_wires_painter_and_levers: title: Câbles & quadruple peintre - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Vous avez débloqué le calque de câblage : C’est un + calque au-dessus du calque normal, qui introduit beaucoup de + nouvelles mécaniques de jeu !

Pour commencer, je vous + débloque le quadruple peintre. Connectez les + entrées à peindre sur le calque de câblage.

Pour voir le + calque de câblage, appuyez sur E.

PS : Activez + les indices dans les paramètres pour voir un tutoriel + sur le câblage." reward_filter: title: Filtre à objets desc: Vous avez débloqué le filtre à objets ! Il dirige les @@ -737,14 +739,17 @@ storyRewards: transistor !" reward_virtual_processing: title: Traitement virtuel - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + desc: Je viens de vous donner tout un tas de nouveaux bâtiments qui vous + permettent de simuler le traitement des + formes !

Vous pouvez maintenant simuler un + découpeur, un pivoteur, un combineur et plus encore sur le calque de + câblage !

Avec ça, vous avez trois possibilités pour + continuer le jeu :

- Construire une machine + automatisée pour fabriquer n’importe quelle forme demandée + par le centre (je conseille d’essayer !).

- Construire + quelque chose de cool avec des câbles.

- Continuer à jouer + normalement.

Dans tous les cas, l’important c’est de + s’amuser ! no_reward: title: Niveau suivant desc: "Ce niveau n’a pas de récompense mais le prochain, si !

PS : Ne @@ -936,13 +941,11 @@ settings: de l’écran. La vitesse dépend du réglage de la vitesse de déplacement. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zoomer vers le curseur + description: Si activé, zoome vers la position de la souris ; sinon, vers le centre de l’écran. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Taille des ressources sur la carte + description: Contrôle la taille des formes sur la vue d’ensemble de la carte visible en dézoomant. keybindings: title: Contrôles hint: "Astuce : N’oubliez pas d’utiliser CTRL, MAJ et ALT ! Ces touches activent From 1ac0fe5387fef5ee6840b9c76880c112e12e8d58 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 11 Oct 2020 08:15:44 +0200 Subject: [PATCH 008/127] Fix french translation --- translations/base-fr.yaml | 5 ++--- 1 file changed, 2 insertions(+), 3 deletions(-) diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index 21499e68..bb2ada7c 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -47,7 +47,7 @@ steamPage: global: loading: Chargement error: Erreur - thousandsDivider:   + thousandsDivider: decimalSeparator: "," suffix: thousands: k @@ -184,8 +184,7 @@ dialogs: title: Nouvelle balise titleEdit: Modifier cette balise desc: Donnez-lui un nom. Vous pouvez aussi inclure le raccourci - d’une forme (que vous pouvez générer ici). + d’une forme (que vous pouvez générer ici). editSignal: title: Définir le signal descItems: "Choisissez un objet prédéfini :" From 923a78910ec26328add55bfb17582f5a6d52892c Mon Sep 17 00:00:00 2001 From: ItzSpiro <45737819+ItzSpiro@users.noreply.github.com> Date: Sun, 11 Oct 2020 08:16:58 +0200 Subject: [PATCH 009/127] base-nl.yaml (#812) * base-nl.yaml I changed a couple translations so they fit better and I made every translation that wasn't done yet. I hope this helped a lot since I put a lot of time in it. * base-nl.yaml updated 870-875 because i forgot those * Update base-nl.yaml * base-nl.yaml Changed the spaces in some words like m / s so they all stay on the same line. Co-authored-by: MisterPengu <45737819+MisterPengu@users.noreply.github.com> --- translations/base-nl.yaml | 272 +++++++++++++++++++------------------- 1 file changed, 136 insertions(+), 136 deletions(-) diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index 5e6de497..719eeee0 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -2,27 +2,28 @@ steamPage: shortText: shapez.io is een spel dat draait om het bouwen van fabrieken voor het produceren en automatiseren van steeds complexere vormen in een oneindig groot speelveld. - discordLinkShort: Officiële Discord + discordLinkShort: Officiële Discord server intro: >- Shapez.io is een spel waarin je fabrieken moet bouwen voor de automatische productie van geometrische vormen. Naarmate het spel vordert, worden de vormen complexer, en moet je uitbreiden in het oneindige speelveld. - En als dat nog niet genoeg is moet je ook nog eens steeds me produceren om aan de vraag te kunnen voldoen. Het enige dat helpt is uitbreiden! + En als dat nog niet genoeg is moet je ook nog eens steeds meer produceren om aan de vraag te kunnen voldoen. Het enige dat helpt is uitbreiden! Ondanks het feit dat je in het begin alleen vormen maakt, komt er het punt waarop je ze moet kleuren. Deze kleuren moet je vinden en mengen! - Door het spel op Steam te kopen kun je de volledige versie spelen. Je kunt echter ook een demo versie spelen op shapez.io en later beslissen. + Door het spel op Steam te kopen kun je de volledige versie spelen. Je kunt echter ook een demo versie spelen op shapez.io en later beslissen + om over te schakelen zonder voortgang te verliezen. title_advantages: Standalone Voordelen advantages: - 12 Nieuwe Levels met een totaal van 26 levels - 18 Nieuwe Gebouwen voor een volledig geautomatiseerde fabriek! - 20 Upgrade Levels voor vele speeluren! - Draden Update voor een volledig nieuwe dimensie! - - Dark Mode! - - Ongelimiteerde Saves - - Ongelimiteerde Markers + - Dark Mode Donkere modus! + - Oneindig veel werelden. + - Oneindig veel Markers - Help mij! ❤️ title_future: Geplande Content planned: @@ -40,7 +41,7 @@ steamPage: roadmap: Roadmap subreddit: Subreddit source_code: Source code (GitHub) - translate: Help vertalen + translate: Hulp met vertalen text_open_source: >- Iedereen mag meewerken. Ik ben actief betrokken in de community en probeer alle suggesties en feedback te beoordelen als dat nodig is. @@ -56,9 +57,9 @@ global: millions: M billions: B trillions: T - infinite: inf + infinite: ∞ time: - oneSecondAgo: één seconde geleden + oneSecondAgo: een seconde geleden xSecondsAgo: seconden geleden oneMinuteAgo: een minuut geleden xMinutesAgo: minuten geleden @@ -86,12 +87,12 @@ mainMenu: importSavegame: Importeren openSourceHint: Dit spel is open source! discordLink: Officiële Discord-server (Engelstalig) - helpTranslate: Help met vertalen! + helpTranslate: Help ons met vertalen! browserWarning: Sorry, maar dit spel draait langzaam in je huidige browser! Koop de standalone versie of download chrome voor de volledige ervaring. savegameLevel: Level savegameLevelUnknown: Onbekend Level - continue: Verder + continue: Ga verder newGame: Nieuw Spel madeBy: Gemaakt door subreddit: Reddit @@ -119,10 +120,10 @@ dialogs: title: Het spel is kapot text: "Het laden van je savegame is mislukt:" confirmSavegameDelete: - title: Bevestig verwijderen - text: Are you sure you want to delete the following game?

- '' at level

This can not be - undone! + title: Bevestig het verwijderen + text: Ben je zeker dat je het volgende spel wil verwijderen?

+ '' op niveau

Dit kan niet ongedaan worden + gemaakt! savegameDeletionError: title: Verwijderen mislukt text: "Het verwijderen van de savegame is mislukt:" @@ -177,9 +178,9 @@ dialogs: van lopende banden om te draaien wanneer je ze plaatst.
" createMarker: title: Nieuwe markering - desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) - titleEdit: Edit Marker + desc: Geef het een nuttige naam, Je kan ook een snel + toets van een vorm gebruiken (die je here kan genereren). + titleEdit: Bewerk markering markerDemoLimit: desc: Je kunt maar twee markeringen plaatsen in de demo. Koop de standalone voor een ongelimiteerde hoeveelheid markeringen! @@ -197,21 +198,20 @@ dialogs: desc: Je kunt het je niet veroorloven om de selectie te plakken! Weet je zeker dat je het wil knippen? editSignal: - title: Set Signal + title: Stel het signaal in. descItems: "Kies een ingesteld item:" - descShortKey: ... of voer de short key van een vorm (Die je - hier kunt vinden) in. + descShortKey: ... of voer de hotkey in van een vorm (Die je + hier kunt vinden). renameSavegame: title: Hernoem opgeslagen spel desc: Geef je opgeslagen spel een nieuwe naam. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorial Beschikbaar + desc: Er is een tutorial video beschikbaar voor dit level! Zou je het willen bekijken? tutorialVideoAvailableForeignLanguage: title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + desc: Er is een tutorial beschikbaar voor dit level, maar het is alleen + beschikbaar in het Engels. Zou je het toch graag kijken? ingame: keybindingsOverlay: moveMap: Beweeg speelveld @@ -240,8 +240,8 @@ ingame: speed: Snelheid range: Bereik storage: Opslag - oneItemPerSecond: 1 voorwerp / s - itemsPerSecond: voorwerpen / s + oneItemPerSecond: 1 voorwerp/s + itemsPerSecond: voorwerpen/s itemsPerSecondDouble: (x2) tiles: tegels levelCompleteNotification: @@ -273,9 +273,9 @@ ingame: description: Geeft alle vormen weer die in de HUB worden bezorgd. noShapesProduced: Er zijn nog geen vormen geproduceerd. shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: /s + minute: /m + hour: /h settingsMenu: playtime: Speeltijd buildingsPlaced: Gebouwen @@ -307,30 +307,30 @@ ingame: en lopende banden om het doel sneller te behalen.

Tip: Houd SHIFT ingedrukt om meerdere ontginners te plaatsen en gebruik R om ze te draaien." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Plaats nu een Knipper om de cirkels in twee te knippen + halves!

PS: De knipper knipt altijd van boven naar + onder ongeacht zijn oriëntatie." + 2_2_place_trash: De knipper kan vormen verstoppen en bijhouden!

Gebruik een + vuilbak om van het (!) niet + nodige afval vanaf te geraken. + 2_3_more_cutters: "Goed gedaan! Plaats nu 2 extra knippers om dit traag + process te versnellen!

PS: Gebruik de 0-9 + sneltoetsen om gebouwen sneller te selecteren." + 3_1_rectangles: "Laten we nu rechthoeken ontginnen! Bouw 4 + ontginners en verbind ze met de lever.

PS: + Houd SHIFT Ingedrukt terwijl je lopende banden plaats + om ze te plannen!" + 21_1_place_quad_painter: Plaats de quad painter en krijg een paar + cirkels in witte en + rode kleur! + 21_2_switch_to_wires: Schakel naar de draden laag door te duwen op + E!

verbind daarna alle + inputs van de verver met kabels! + 21_3_place_button: Mooi! Plaats nu een schakelaar en verbind het + met draden! + 21_4_press_button: "Druk op de schakelaar om het een Juist signaal door + te geven en de verver te activeren.

PS: Je + moet niet alle inputs verbinden! Probeer er eens 2." colors: red: Rood green: Groen @@ -352,7 +352,7 @@ ingame: watermark: title: Demo versie desc: Klik hier om het spel op Steam te bekijken! - get_on_steam: Get on steam + get_on_steam: Krijg het op Steam standaloneAdvantages: title: Koop de volledige versie! no_thanks: Nee, bedankt! @@ -430,10 +430,10 @@ buildings: name: Roteerder description: Draait vormen 90 graden met de klok mee. ccw: - name: Roteerder (andersom) + name: Roteerder (omgekeerd) description: Draait vormen 90 graden tegen de klok in. rotate180: - name: Roteerder (180) + name: Roteerder (180°) description: Draait vormen 180 graden. stacker: default: @@ -467,7 +467,7 @@ buildings: name: Vuilnisbak description: Accepteert input van alle kanten en vernietigt het. Voor altijd. hub: - deliver: Lever + deliver: Lever in toUnlock: om te ontgrendelen levelShortcut: LVL endOfDemo: End of Demo @@ -490,11 +490,11 @@ buildings: name: Samenvoeger description: Voeg 2 lopende banden samen. splitter: - name: Splitter (compact) - description: Split een lopende band in tweeën. + name: Splitser (compact) + description: Splits een lopende band in tweeën. splitter-inverse: - name: Splitter - description: Split een lopende band in tweeën. + name: Splitser + description: Splits een lopende band in tweeën. storage: default: name: Opslag @@ -517,18 +517,18 @@ buildings: default: name: AND poort description: Zend een 1 uit als beide invoeren hetzelfde zijn. (Kan een vorm, - kleur of boolean (1 / 0) zijn) + kleur of boolean (1/0) zijn) not: name: NOT poort description: Zend een 1 uit als de invoer een 0 is. xor: name: XOR poort description: Zend een 1 uit als de invoeren niet hetzelfde zijn. (Kan een vorm, - kleur of boolean (1 / 0) zijn) + kleur of boolean (1/0) zijn) or: - name: OR gate + name: OR poort description: Zend een 1 uit als de invoeren wel of niet hetzelfde zijn, maar - niet uit zijn. (Kan een vorm, kleur of boolean (1 / 0) zijn) + niet uit zijn. (Kan een vorm, kleur of boolean (1/0) zijn) transistor: default: name: Transistor @@ -545,7 +545,7 @@ buildings: default: name: Scherm description: Verbind een signaal met het scherm om de soort weer te geven. Kan - een vorm, kleur of boolean (1 / 0) zijn. + een vorm, kleur of boolean (1/0) zijn. reader: default: name: Lopende band lezer @@ -560,7 +560,7 @@ buildings: default: name: Vergelijker description: Zend 1 uit als beiden invoeren gelijk zijn, kunnen vormen, kleuren - of booleans (1 / 0) zijn + of booleans (1/0) zijn virtual_processor: default: name: Virtuele Snijder @@ -587,12 +587,12 @@ buildings: storyRewards: reward_cutter_and_trash: title: Vormen Knippen - desc: You just unlocked the cutter, which cuts shapes in half - from top to bottom regardless of its - orientation!

Be sure to get rid of the waste, or - otherwise it will clog and stall - For this purpose - I have given you the trash, which destroys - everything you put into it! + desc: Je hebt juist de knipper ontgrendeld, die vormen in de helft + kan knippen van boven naar onder ongeacht zijn rotatie + !

Wees zeker dat je het afval weggooit, want + anders zal het vastlopen - Voor deze reden + heb ik je de vuilbak gegeven, die alles + vernietigd wat je erin laat stromen! reward_rotater: title: Roteren desc: De roteerder is ontgrendeld - Het draait vormen 90 graden @@ -617,10 +617,10 @@ storyRewards: worden dan wordt het rechtervoorwerp boven op het linker geplaatst! reward_splitter: - title: Splitter/samenvoeger - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + title: Splitser/samenvoeger + desc: Je hebt de splitser ontgrendeld, een variant van de + samenvoeger - Het accepteert 1 input en verdeelt het + in 2! reward_tunnel: title: Tunnel desc: De tunnel is ontgrendeld - Je kunt nu voorwerpen onder @@ -633,15 +633,15 @@ storyRewards: wisselen
! reward_miner_chainable: title: Ketting-ontginner - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + desc: "Je hebt de Ketting-ontginner ontgrendeld! Het kan + zijn materialen ontginnen via andere ontginners zodat je + meer materialen tegelijkertijd kan ontginnen!

PS: De oude + ontginner is vervangen in je toolbar!" reward_underground_belt_tier_2: title: Tunnel Niveau II - desc: You have unlocked a new variant of the tunnel - It has a - bigger range, and you can also mix-n-match those - tunnels now! + desc: Je hebt een nieuwe variant van de tunnel ontgrendeld. - Het heeft een + groter bereik, en je kan nu ook die tunnels mixen + over en onder elkaar! reward_cutter_quad: title: Quad Knippen desc: Je hebt een variant van de knipper ontgrendeld - Dit @@ -653,18 +653,18 @@ storyRewards: tegelijk met één kleur in plaats van twee! reward_storage: title: Opslagbuffer - desc: You have unlocked the storage building - It allows you to - store items up to a given capacity!

It priorities the left - output, so you can also use it as an overflow gate! + desc: Je hebt een variant van de opslag ontgrendeld - Het laat je toe om + vormen op te slagen tot een bepaalde capaciteit!

Het verkiest de linkse + output, dus je kan het altijd gebruiken als een overloop poort! reward_freeplay: title: Vrij spel - desc: You did it! You unlocked the free-play mode! This means - that shapes are now randomly generated!

- Since the hub will require a throughput from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!

The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + desc: Je hebt het gedaan! Je hebt de free-play modus ontgrendeld! Dit betekend + dat vormen nu willekeurig gegenereerd worden!

+ Omdat de hub vanaf nu een bepaald aantal vormen per seconden nodig heeft, + Raad ik echt aan een machine te maken die automatisch + de juiste vormen genereert!

De HUB geeft de vorm die je nodig hebt + op de tweede laag met draden, dus alles wat je moet doen is dat analyseren + en je fabriek dat automatisch laten maken op basis van dat. reward_blueprints: title: Blauwdrukken desc: Je kunt nu delen van je fabriek kopiëren en plakken! @@ -685,9 +685,9 @@ storyRewards: uitgebereid in de standalone! reward_balancer: title: Verdeler - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: De multifunctionele verdeler is nu ontgrendeld - Het kan + gebruikt worden om grotere te knippen en plakken vormen op meerdere + lopende banden te zetten reward_merger: title: Compacte samenvoeger desc: Je hebt een variant op de samenvoeger van de @@ -704,17 +704,17 @@ storyRewards: je een item op de band 180 graden draaien! reward_display: title: Scherm - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + desc: "Je hebt het scherm ontgrendeld - Verbind een signaal met de + laag van draden om het te visualiseren!

PS: Heb je gezien dat de lopende band + lezer en opslag hun laatste vorm weergeven? Probeer het te tonen op + een scherm!" reward_constant_signal: title: Constante Signaal desc: Je hebt het constante signaal vrijgespeeld op de kabel dimensie! Dit gebouw is handig in samenwerking met item filters.

Het constante signaal kan een vorm, kleur of - boolean (1 / 0) zijn. + boolean (1/0) zijn. reward_logic_gates: title: Logische poorten desc: Je hebt de logische poorten vrijgespeeld! Misschien word @@ -723,29 +723,29 @@ storyRewards: uitvoeren.

Als bonus krijg je ook nog een transistor van mij! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: VIrtuele verwerking + desc: Ik heb juist een hele hoop nieuwe gebouwen toegevoegd die je toetstaan om + het process van vormen te stimuleren!

Je kan + nu de knipper, draaier, stapelaar en meer op de dradenlaag stimuleren! + Met dit heb je nu 3 opties om verder te gaan met het spel:

- + Bouw een automatische fabriek om eender welke mogelijke + vorm te maken gebraagd door de HUB (Ik raad aan dit te proberen!).

- Bouw + iets cool met draden.

- Ga verder met normaal + spelen.

Wat je ook kiest, onthoud dat je plezier hoort te hebben! reward_wires_painter_and_levers: title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Je hebt juist de draden laag ontgrendeld: Het is een aparte + laag boven op de huidige laag en introduceert heel veel nieuwe + manieren om te spelen!

Voor het begin heb ik voor jou de Quad + Painter ontgrendeld - Verbind de gleuf waarin je wilt verven op + de draden laag!

Om over te schakelen naar de draden laag, Duw op + E.

PS: Zet hints aan in + de instellingen om de draden tutorial te activeren!" reward_filter: title: Item Filter desc: Je hebt de Item Filter vrijgespeeld! Items worden naar rechts of naar boven gestuurd, afhankelijk van de invoer.

Er - kan ook een boolean (1 / 0) worden ingevoerd om de filter in en uit + kan ook een boolean (1/0) worden ingevoerd om de filter in en uit te schakelen. reward_demo_end: title: Einde van de Demo @@ -756,10 +756,10 @@ settings: general: Algemeen userInterface: Opmaak advanced: Geavanceerd - performance: Performance + performance: Prestatie versionBadges: dev: Ontwikkeling - staging: Staging + staging: Positie prod: Productie buildDate: gebouwd labels: @@ -799,12 +799,12 @@ settings: description: Wanneer dit aan staat wordt alle muziek uitgeschakeld. theme: title: Donkere modus - description: Kies de gewenste weergave (licht / donker). + description: Kies de gewenste weergave (licht/donker). themes: dark: Donker light: Licht refreshRate: - title: Simulation Target + title: Simulatie doel description: Wanneer je een 144 hz monitor hebt, verander de refresh rate hier zodat het spel naar behoren weer blijft geven. Dit verlaagt mogelijk de FPS als je computer te traag is. @@ -868,11 +868,11 @@ settings: laatst geplaatst hebt. Dit kan handig zijn wanneer je vaak tussen verschillende soorten gebouwen wisselt. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Geluidsvolume + description: Stel het volume voor geluidseffecten in. musicVolume: - title: Music Volume - description: Set the volume for music + title: Muziekvolume + description: Stel het volume voor muziek in. lowQualityMapResources: title: Lage kwaliteit van resources description: Versimpeldde resources op de wereld wanneer ingezoomd om de @@ -911,13 +911,13 @@ settings: Plaats de cursor boven, rechts, links of onder om daar naartoe te bewegen. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zoom naar de Muis + description: Wanneer geactiveert: de zoom zal gebeuren in de richting van je + muispositie, anders in het midden van het scherm. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Kaartbronnen schaal + description: Controleert de grote van de vormen op het map overzicht (wanneer je + uitzoomt). rangeSliderPercentage: % keybindings: title: Sneltoetsen @@ -1013,7 +1013,7 @@ demo: restoringGames: Savegames terughalen importingGames: Savegames importeren oneGameLimit: Gelimiteerd tot één savegame - customizeKeybindings: Custom sneltoetsen + customizeKeybindings: Aangepaste sneltoetsen exportingBase: Exporteer volledige basis als afbeelding settingNotAvailable: Niet beschikbaar in de demo. tips: From 1ab0fb7d9ce7db5e24007f80f25d0aec5adda9db Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 11 Oct 2020 08:18:55 +0200 Subject: [PATCH 010/127] Fix stacking bug and bump version, fixes #814 --- src/js/changelog.js | 8 ++++++++ src/js/game/shape_definition_manager.js | 18 +++++++++--------- version | 2 +- 3 files changed, 18 insertions(+), 10 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 95aca51d..bc73ad0f 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,4 +1,12 @@ export const CHANGELOG = [ + { + version: "1.2.1", + date: "unreleased", + entries: [ + "Fixed stacking bug for level 26 which required restarting the game", + "Updated translations", + ], + }, { version: "1.2.0", date: "09.10.2020", diff --git a/src/js/game/shape_definition_manager.js b/src/js/game/shape_definition_manager.js index 86723fcd..5bcfcc4b 100644 --- a/src/js/game/shape_definition_manager.js +++ b/src/js/game/shape_definition_manager.js @@ -31,7 +31,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { */ this.shapeKeyToItem = {}; - // Caches operations in the form of 'operation:def1[:def2]' + // Caches operations in the form of 'operation/def1[/def2]' /** @type {Object.|ShapeDefinition>} */ this.operationCache = {}; } @@ -89,7 +89,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {[ShapeDefinition, ShapeDefinition]} */ shapeActionCutHalf(definition) { - const key = "cut:" + definition.getHash(); + const key = "cut/" + definition.getHash(); if (this.operationCache[key]) { return /** @type {[ShapeDefinition, ShapeDefinition]} */ (this.operationCache[key]); } @@ -108,7 +108,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {[ShapeDefinition, ShapeDefinition, ShapeDefinition, ShapeDefinition]} */ shapeActionCutQuad(definition) { - const key = "cut-quad:" + definition.getHash(); + const key = "cut-quad/" + definition.getHash(); if (this.operationCache[key]) { return /** @type {[ShapeDefinition, ShapeDefinition, ShapeDefinition, ShapeDefinition]} */ (this .operationCache[key]); @@ -130,7 +130,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {ShapeDefinition} */ shapeActionRotateCW(definition) { - const key = "rotate-cw:" + definition.getHash(); + const key = "rotate-cw/" + definition.getHash(); if (this.operationCache[key]) { return /** @type {ShapeDefinition} */ (this.operationCache[key]); } @@ -148,7 +148,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {ShapeDefinition} */ shapeActionRotateCCW(definition) { - const key = "rotate-ccw:" + definition.getHash(); + const key = "rotate-ccw/" + definition.getHash(); if (this.operationCache[key]) { return /** @type {ShapeDefinition} */ (this.operationCache[key]); } @@ -166,7 +166,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {ShapeDefinition} */ shapeActionRotate180(definition) { - const key = "rotate-fl:" + definition.getHash(); + const key = "rotate-fl/" + definition.getHash(); if (this.operationCache[key]) { return /** @type {ShapeDefinition} */ (this.operationCache[key]); } @@ -185,7 +185,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {ShapeDefinition} */ shapeActionStack(lowerDefinition, upperDefinition) { - const key = "stack:" + lowerDefinition.getHash() + ":" + upperDefinition.getHash(); + const key = "stack/" + lowerDefinition.getHash() + "/" + upperDefinition.getHash(); if (this.operationCache[key]) { return /** @type {ShapeDefinition} */ (this.operationCache[key]); } @@ -202,7 +202,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {ShapeDefinition} */ shapeActionPaintWith(definition, color) { - const key = "paint:" + definition.getHash() + ":" + color; + const key = "paint/" + definition.getHash() + "/" + color; if (this.operationCache[key]) { return /** @type {ShapeDefinition} */ (this.operationCache[key]); } @@ -219,7 +219,7 @@ export class ShapeDefinitionManager extends BasicSerializableObject { * @returns {ShapeDefinition} */ shapeActionPaintWith4Colors(definition, colors) { - const key = "paint4:" + definition.getHash() + ":" + colors.join(","); + const key = "paint4/" + definition.getHash() + "/" + colors.join(","); if (this.operationCache[key]) { return /** @type {ShapeDefinition} */ (this.operationCache[key]); } diff --git a/version b/version index 867e5243..cb174d58 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.2.0 \ No newline at end of file +1.2.1 \ No newline at end of file From a1cc3176a3cc70fe160f8e9566f2575668513020 Mon Sep 17 00:00:00 2001 From: Hyperion-21 <69665635+Hyperion-21@users.noreply.github.com> Date: Sat, 10 Oct 2020 23:20:51 -0700 Subject: [PATCH 011/127] Improved base-en.yaml translations for tips (#817) * Update base-en.yaml Updated spelling, grammar, and to a lesser extent the information of some tips. * Update base-en.yaml * Update base-en.yaml * Update base-en.yaml Applied most of EmeraldBlock's suggestions --- translations/base-en.yaml | 19 +++++++++---------- 1 file changed, 9 insertions(+), 10 deletions(-) diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 7459e3f5..9d145999 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -1189,9 +1189,9 @@ demo: settingNotAvailable: Not available in the demo. tips: - - The hub accepts input of any kind, not just the current shape! + - The hub will accept any input, not just the current shape! - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! + - Don't build too close to the hub, or it will be a mess! - If stacking does not work, try switching the inputs. - You can toggle the belt planner direction by pressing R. - Holding CTRL allows dragging of belts without auto-orientation. @@ -1209,21 +1209,20 @@ tips: - You don't need to divide up items evenly for full efficiency. - Holding SHIFT will activate the belt planner, letting you place long lines of belts easily. - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - The storage buffer prioritises the left output. - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. + - Holding SHIFT lets you place multiple buildings in one click. - You can hold ALT to invert the direction of placed belts. - Efficiency is key! - Shape patches that are further away from the hub are more complex. - Machines have a limited speed, divide them up for maximum efficiency. - Use balancers to maximize your efficiency. - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! + - Plan in advance, or it will be a mess! - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! + - Try beating level 20 or 26 on your own before seeking for help! - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to be re-usable. + - You may need to reuse factories later in the game. Build your factories to be reusable. - Sometimes, you can find a needed shape in the map without creating it with stackers. - Full windmills/pinwheels can never spawn naturally. - Color your shapes before cutting for maximum efficiency. @@ -1234,13 +1233,13 @@ tips: - Building too close to the hub can get in the way of later projects. - The pin icon next to each shape in the upgrade list pins it to the screen. - Mix all three primary colors to make white! - - You have an infinite map, don't cramp your factory, expand! + - You have an infinite map. Don't cramp your factory, expand! - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! + - The quad cutter cuts clockwise, starting from the top right. - You can download your savegames in the main menu! - This game has a lot of useful keybindings! Be sure to check out the settings page. - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! + - Your hub marker has a small compass that shows which direction it is in! - To clear belts, cut the area and then paste it at the same location. - Press F4 to show your FPS and Tick Rate. - Press F4 twice to show the tile of your mouse and camera. From bec244d5c72ac98a83e1a66aeb26b64b763ce160 Mon Sep 17 00:00:00 2001 From: Ved-s <53968411+Ved-s@users.noreply.github.com> Date: Sun, 11 Oct 2020 17:24:42 +1100 Subject: [PATCH 012/127] Update base-ru.yaml (#822) * Update base-ru.yaml * Update base-ru.yaml Fixed check error at line 324 --- translations/base-ru.yaml | 127 +++++++++++++++++--------------------- 1 file changed, 57 insertions(+), 70 deletions(-) diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index bcada1d1..ffbe04e6 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -96,7 +96,7 @@ mainMenu: newGame: Новая Игра madeBy: Создал subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Без названия dialogs: buttons: ok: OK @@ -205,13 +205,11 @@ dialogs: title: Переименовать Сохранение desc: Здесь вы можете изменить название своего сохранения. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Доступно обучение + desc: Для этого уровня доступно видео-обучение! Посмотрите его? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Доступно обучение + desc: Для этого уровня доступно видео-обучение, но только на английском языке. Посмотрите его? ingame: keybindingsOverlay: moveMap: Передвижение @@ -252,7 +250,7 @@ ingame: notifications: newUpgrade: Новое улучшение доступно! gameSaved: Игра сохранена. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Уровень завершён! shop: title: Улучшения buttonUnlock: Улучшить @@ -273,9 +271,9 @@ ingame: description: Показывает фигуры, которые доставляются в хаб. noShapesProduced: Фигуры еще не произведены. shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / с + minute: / м + hour: / ч settingsMenu: playtime: Игровое время buildingsPlaced: Постройки @@ -306,30 +304,26 @@ ingame: конвейеров, чтобы достичь цели быстрее.

Подсказка: Удерживайте SHIFT чтобы разместить несколько экстракторов, а R чтобы вращать их." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Разместите Резак для разрезания кругов на две половины! +

PS: Резак всегда разрезает сверху вниз независимо от ориентации." + 2_2_place_trash: Резак может засориться и остановиться!

Используйте + мусорку что бы избавиться от в данный момент (!) ненужных частей. + 2_3_more_cutters: "Хорошая работа! Теперь разместите ещё 2 резака что бы ускорить + этот медленный процесс!

PS: Используйте клавиши 0-9 + для быстрого доступа к постройкам!" + 3_1_rectangles: "Теперь давайте извлечём немного прямоугольников! Постройте 4 + экстрактораи соедините их с хабом.

PS: + Удерживайте SHIFT во время удерживания конвейера для активации планировщика + конвейеров!" + 21_1_place_quad_painter: Разместите покрасчик для 4 предметов и получите + круги, белого и + красного цветов! + 21_2_switch_to_wires: Переключите слой проводов нажатием клавиши + E!

Потом соедините все входы покрасчика кабелями! + 21_3_place_button: Отлично! Теперь разместите Переключатель и присоедини его проводами! + 21_4_press_button: "Нажмите на переключатель что бы заставить его выдавать истинный сигнал + и активировать этим покрасчика.

PS: Не обязательно + соединять все входы! Достаточно двух." colors: red: Красный green: Зеленый @@ -585,13 +579,13 @@ buildings: проводами сигнал на обычном слое. transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Транзистор + description: Пропускает предметы только если вход сбоку имеет истинноре значение (фигура, + цвет или "1"). mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Транзистор + description: Пропускает предметы только если вход сбоку имеет истинноре значение (фигура, + цвет или "1"). storyRewards: reward_cutter_and_trash: title: Разрезание Фигур @@ -687,9 +681,8 @@ storyRewards: desc: Поздравляем! Кстати, больше контента планируется для полной версии! reward_balancer: title: Балансер - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: Многофункциональный банансер разблокирован - Он используется для разделения и обьединения + потора предметов на несколько конвейеров! reward_merger: title: Компактный Соединитель desc: Разблокирован соединитель - вариант @@ -702,7 +695,7 @@ storyRewards: когда вы разблокируете провода! reward_rotater_180: title: Вращатель (180 градусов) - desc: Разблокирован rotater на 180 градусов! - Он позволяет + desc: Разблокирован вращатель на 180 градусов! - Он позволяет вращать фигур на 180 градусов (Сюрприз! :D) reward_display: title: Экран @@ -737,13 +730,12 @@ storyRewards: выбрали, не забывайте хорошо проводить время! reward_wires_painter_and_levers: title: Провода & Покрасчик (4 входа) - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Вы разблокировали Слой проводов: Это отдельный + слой выше обычного слоя и он предоставляет много новых + механик!

Для начала я разблокировал тебе Покрасчик на 4 входа + - Соедини слоты которые нужно покрасить на слое проводов!

Для переключения видимости слоя проводов, нажми + E.

PS: Включи подсказки в + настройках что бы активировать обучение по проводам!" reward_filter: title: Фильтр desc: Разблокирован Фильтр! Он направит ресурсы наверх или @@ -916,13 +908,12 @@ settings: description: Позволяет двигать карту, перемещая курсор к краям экрана. Скорость зависит от настройки Скорости движения. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Приближение в точку курсора + description: Если включено, приближение будет в направлении курсора мыши, + иначе в центр экрана. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Размер ресурсов на карте + description: Устанавливает размер фигур на карте (когда вид достаточно отдалён). rangeSliderPercentage: % keybindings: title: Настройки управления @@ -1038,17 +1029,16 @@ tips: - Покрасчик имеет зеркальный вариант, который может быть выбран, нажав T. - Правильные соотношения построек позволяет улучшить эффективность фабрики. - - At maximum level, 5 extractors will fill a single belt. + - На максимальном уровне, 5 экстракторов заполняют один конвейер. - Резаки всегда разрезают пополам по вертикали вне зависимости от ориентации. - Чтобы получить белый цвет, смешайте все три цвета. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. + - Удерживание SHIFT активирует планировщик конвейеров, что упрощает простройку длинных конвейеров. - Вкладывайте время в строительство повторяемых механизмов - оно того стоит! - - To get white mix all three colors. - - The storage buffer prioritises the left output. + - Смешайте все три цвета для получения булого. + - Буффер хранилища с большим приоритетом выдаёт на левый выход. - Эффективность - ключ к успеху! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. + - Удерживание CTRL даёт возможность размещения нескольких построек. + - Можно зажать ALT для инвертирования направления размещаемых конвейеров. - Используйте балансеры, чтобы максимизировать эффективность. - Организация очень важна, старайтесь не пересекать конвейеры слишком часто. - Планируйте заранее, иначе начнется ужасный хаос! @@ -1070,7 +1060,7 @@ tips: - With modules, space is merely a perception; a concern for mortal men. - Строительство вблизи ХАБ-а может помешать будущим проектам. - Иконка булавки на каждой фигуре закрепляет ее на экране. - - Use CTRL + Click to select an area. + - Используйте CTRL + ЛКМ для выбора области. - В вашем распоряжении бесконечная карта! Не загромождайте вашу фабрику, расширяйтесь! - Также попробуйте Factorio. Это моя любимая игра. @@ -1084,7 +1074,4 @@ tips: - Нажмите F4, чтобы показать FPS и Частоту Обновления. - Нажмите F4 дважды, чтобы показать координаты курсора и камеры. - Вы можете нажать на закрепленную фигуру слева, чтобы открепить ее. - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Для очистки конвейеров, вырежьте область и вставьте её в то же место. From 2f56fc2cd4f676f59d0fd7ea4d2164f5b61a4370 Mon Sep 17 00:00:00 2001 From: Galo223344 <46462621+Galo223344@users.noreply.github.com> Date: Sun, 11 Oct 2020 03:25:06 -0300 Subject: [PATCH 013/127] Translated ~90% of the strings to spanish (#823) * Translated like half the strings to spanish * Translated ~90% of strings There are some strings left and the tips and hints are not translated. --- translations/base-es.yaml | 562 +++++++++++++++++++------------------- 1 file changed, 278 insertions(+), 284 deletions(-) diff --git a/translations/base-es.yaml b/translations/base-es.yaml index 1df9cb80..8354c684 100644 --- a/translations/base-es.yaml +++ b/translations/base-es.yaml @@ -23,30 +23,30 @@ steamPage: - Modo oscuro! - Partidad guardadas ilimitadas - Marcadores ilimitados - - Support me! ❤️ + - Me apoyarás! ❤️ title_future: Contenido futuro planned: - - Blueprint Library (Standalone Exclusive) - - Steam Achievements - - Puzzle Mode - - Minimap + - Librería de planos (Exclusivo de Standalone) + - Logros de Steam + - Modo Puzzle + - Minimapa - Mods - - Sandbox mode - - ... and a lot more! - title_open_source: This game is open source! + - Modo libre + - ... y mucho más! + title_open_source: Este juego es de código abierto! title_links: Links links: - discord: Official Discord + discord: Discord oficial roadmap: Roadmap subreddit: Subreddit - source_code: Source code (GitHub) - translate: Help translate + source_code: Código fuente (GitHub) + translate: Ayuda a traducír text_open_source: >- - Anybody can contribute, I'm actively involved in the community and - attempt to review all suggestions and take feedback into consideration - where possible. + Cualquiera puede contribuír, Estoy activamete involucrado en la comunidad y + trato de revisar todas las sugerencias además de tomar en cuenta los consejos + siempre que sea posible. - Be sure to check out my trello board for the full roadmap! + Asegurate de revisar mi página de Trello donde podrás encontrar el Roadmap! global: loading: Cargando error: Error @@ -96,7 +96,7 @@ mainMenu: Obtén el juego completo o descarga Chrome para la experiencia completa. savegameLevel: Nivel savegameLevelUnknown: Nivel desconocido - savegameUnnamed: Unnamed + savegameUnnamed: Sin nombre dialogs: buttons: ok: OK @@ -121,9 +121,8 @@ dialogs: text: "No se ha podido cargar la partida guardada:" confirmSavegameDelete: title: Confirmar borrado - text: Are you sure you want to delete the following game?

- '' at level

This can not be - undone! + text: Estás seguro de querér borrar el siguiente guardado?

+ '' que está en el nivel

Esto no se puede deshacer! savegameDeletionError: title: Fallo al borrar text: "Fallo al borrar la partida guardada:" @@ -186,8 +185,7 @@ dialogs: createMarker: title: Nuevo marcador titleEdit: Editar marcador - desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) + desc: Dale un nombre significativo, tambien puedes incluir la clave de una forma (La cual puedes generar aquí) markerDemoLimit: desc: Solo puedes crear dos marcadores en la versión de prueba. ¡Obtén el juego completo para marcadores ilimitados! @@ -197,21 +195,19 @@ dialogs: cuenta que puede tardar bastante en las bases grandes. ¡E incluso crashear tu juego! editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Establecer señal + descItems: "Elige un item pre-definido:" + descShortKey: ... o escribe la calve de una forma (La cual + puedes generar aquí) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Renombrar archivo de guardado + desc: Aquí puedes cambiarle el nombre a tu archivo de guardado. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorial disponible + desc: ¡Hay un video tutorial disponible para este nivel! ¿Te gustaría verlo? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutorial Disponible + desc: Hay un video tutorial disponible para este nivel, pero solo está disponible en inglés ¿Te gustaría verlo? ingame: keybindingsOverlay: moveMap: Mover @@ -322,66 +318,66 @@ ingame: más rápido.

Pista: Mantén pulsado SHIFT para colocar varios extractores y usa R para rotarlos.' - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "¡Ahora pon un Cortador para dividir los circulos en dos + mitades!

PD: El cortador siempre corta de de arriba a + abajo independientemente de su orientación." + 2_2_place_trash: ¡El cortador se puede tabar y atorar!

Usa un + basurero para deshacerse de la actualmente (!) no + necesitada basura. + 2_3_more_cutters: "¡Buen trabajo! ¡Ahora pon 2 cortadores más para acelerar + este lento proceso!

PD: Usa las teclas 0-9 + para acceder a los edificios más rápido!" + 3_1_rectangles: "¡Ahora consigamos unos rectangulos! construye 4 + extractores y conectalos a el edificio central.

PD: + Manten apretado SHIFT mientrás pones cintas transportadoras para activar + el planeador de cintas!" + 21_1_place_quad_painter: ¡Pon el pintaor cuadruple y consigue unos + circulos, el color blanco y el color + rojo! + 21_2_switch_to_wires: ¡Cambia a la capa de cables apretando la técla + E!

Luego conecta las cuatro + entradas de el pintador con cables! + 21_3_place_button: ¡Genial! ¡Ahora pon un Interruptor y conectalo + con cables! + 21_4_press_button: "Presioa el interruptor para hacer que emita una señal + verdadera lo cual activa el piintador.

PD: ¡No necesitas + conectar todas las entradas! Intenta conectando solo dos." connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 Minero + n_miners: Mineros + limited_items: Limitado a watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Versión demo + desc: Presiona aquí para ver que tiene la versión de Steam! + get_on_steam: Consiguelo en Steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: ¡Consigue la versión completa! + no_thanks: ¡No grácias! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 nuevos niveles + desc: ¡Para un total de 26 niveles! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 nuevos edificios + desc: ¡Automatiza completamente tu fabrica! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: Archivos de guardado infinitos + desc: ¡Tantos como desees! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 niveles de mejoras + desc: ¡Esta demo solo tiene 5! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: Marcadores infinitos + desc: ¡Nunca te pierdas en tu propia fabrica! wires: - title: Wires - desc: An entirely new dimension! + title: Cables + desc: ¡Una dimension completamente nueva! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Modo oscuro + desc: ¡Deja de lastimar tus ojos! support: - title: Support me - desc: I develop it in my spare time! + title: Apoyame + desc: ¡Desarrollo este juego en mi tiempo libre! shopUpgrades: belt: name: Cintas transportadoras, Distribuidores y Túneles @@ -411,9 +407,9 @@ buildings: name: Cable description: Te permite transportar energía second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Cable + description: Transfiere señales, que pueden ser items, colores o valores booleanos (1 / 0). + Cables de diferentes colores no se conectan. miner: default: name: Extractor @@ -449,8 +445,8 @@ buildings: name: Rotador (Inverso) description: Rota las figuras en sentido antihorario 90 grados. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Rotador (180) + description: Rota formas en 180 grados. stacker: default: name: Apilador @@ -475,132 +471,131 @@ buildings: la entrada de arriba. quad: name: Pintor (Cuádruple) - description: Allows you to color each quadrant of the shape individually. Only - slots with a truthy signal on the wires layer - will be painted! + description: Te permite colorear cada cuadrante de la forma individualemte. ¡Solo las + ranuras con una señal verdadera en la capa de cables + seran pintadas! trash: default: name: Basurero description: Acepta formas desde todos los lados y las destruye. Para siempre. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Balanceador + description: Multifuncional - Distribuye igualmente todas las entradas en las salidas. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Unión (compacta) + description: Junta dos cintas transportadoras en una. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Unión (compacta) + description: Junta dos cintas transportadoras en una. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Separador (compacto) + description: Separa una cinta trasportadora en dos. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Separador (compacto) + description: Separa una cinta trasportadora en dos. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Almacén + description: Guarda items en exceso, hasta una dada capacidad. Prioritiza la salida + de la izquierda y puede ser usada como una puerta de desbordamiento. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Cruze de cables + description: Permite que dos cables se cruzen sin conectarse. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Señal costante + description: Emite una señal constante, que puede ser una forma, color o valor booleano (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Interruptor + description: Puede ser activado para emitir una señal booleana (1 / 0) en la capa de cables, + la cual puede ser usada por ejemplo para un filtro de items. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Puerta AND + description: Emite el valor booleano "1" si ambas entradas son verdaderas. (Verdadeas significa una forma, + color o valor booleano "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Puerta NOT + description: Emite el valor booleano "1" si ambas entradas no son verdaderas. (Verdadeas significa una forma, + color o valor booleano "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Puerta XOR + description: Emite el valor booleano "1" si una de las entradas es verdadera, pero no si ambas lo son. + (Verdadeas significa una forma, + color o valor booleano "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Puerta OR + description: Emite el valor booleano "1" Si una de las entradas es verdadera. (Verdadeas significa una forma, + color o valor booleano "1") transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Envia la señal de abajo si la señal del costado es verdadera (Verdadeas significa una forma, + color o valor booleano "1"). mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: Envia la señal de abajo si la señal del costado es verdadera (Verdadeas significa una forma, + color o valor booleano "1"). filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Filtro + description: Conecta una señal para enviar todas las que coincidan hacia arriba y las demás + hacia la derecha. También puede ser controlada por señales booleanas. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Monitor + description: Conecta una señal para mostrarla en el monitor - Puede ser una forma, + color o valor booleano. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Lector de cinta + description: Te permite medir la cantidad media de items que pasan por la cinta. Emite el último + item leído en la capa de cables (una vez desbloquada). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Analizador de formas + description: analiza el cuadrante de arriba a la derecha de la capa más baja de la forma + y devuelve su figura y color. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Comparador + description: Devuelve el valor booleano "1" Si ambas señales son exactamente iguales. Puede comparar + formas, items y valores booleanos. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Cortador virtual + description: Corta virtualmente la forma en dos. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Rotador virtual + description: Rota virtualmente la forma, tanto en sentido del horario como sentido anti-horario. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Desapilador virtual + description: Extrae virtualmente la capa más alta en la salida a la derecha y + las que quedan en la izquierda. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Apilador virtual + description: Apila virtualmente la forma de la derecha en la de la izquierda. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Pintor virtual + description: Pinta virtualmente la forma de la entrada de abajo con la forma de + la entrada de la derecha. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Productor de items + description: Solo disponible en modo libre, envía la señal recivida de la + capa de cables en la capa regular. storyRewards: reward_cutter_and_trash: title: Cortador de figuras - desc: You just unlocked the cutter, which cuts shapes in half - from top to bottom regardless of its - orientation!

Be sure to get rid of the waste, or - otherwise it will clog and stall - For this purpose - I have given you the trash, which destroys - everything you put into it! + desc: ¡Acabas de desbloquear el cortador, el cual corta formas por la mitad + de arriba a abajo independientemente de su + orientacion!

Asegurate de deshacerte de la basura, o + sino se trabará y parará - Por este proposite + Te he dado el basurero, el cual destruye + todo lo que pongas dentro de él! reward_rotater: title: Rotador desc: ¡El rotador se ha desbloqueado! Rota figuras en sentido @@ -624,9 +619,9 @@ storyRewards: será apilada encima de la entrada izquierda! reward_splitter: title: Separador/Fusionador - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + desc: Has desbloqueado el separador , una variante de el + balanceador - Acepta una entrada y la separa + en dos! reward_tunnel: title: Túnel desc: El túnel se ha desbloqueado - ¡Ahora puedes transportar @@ -638,10 +633,10 @@ storyRewards: y pulsa 'T' para ciclar por sus variantes reward_miner_chainable: title: Extractor en cadena - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + desc: "¡Has desbloqueado el extractor en cadena! ¡Este puede + enviar sus recursos a otros extractores así puedes + extraer recursos más eficientemente!

PD: ¡El extractor + viejo ha sido reemplazado en tu barra de herramientas!" reward_underground_belt_tier_2: title: Túnel nivel II desc: Has desbloqueado una nueva variante del túnel - ¡Tiene un @@ -658,13 +653,13 @@ storyRewards: consumiendo solo un color en vez de dos! reward_storage: title: Almacenamiento intermedio - desc: You have unlocked the storage building - It allows you to - store items up to a given capacity!

It priorities the left - output, so you can also use it as an overflow gate! + desc: Haz desbloquado el edificio de almacenamiento - ¡Te permite + guardar items hasta una capacidad determinada!

Prioriza la salida + de la izquierda, por lo que tambien puedes suarlo como una puerta de desbordamiento! reward_freeplay: title: Juego libre - desc: You did it! You unlocked the free-play mode! This means - that shapes are now randomly generated!

+ desc: ¡Lo hiciste! Haz desbloqueado el modo de juego libre! ¡Esto significa + que las formas ahora son aleatoriamente generadas!

Since the hub will require a throughput from now on, I highly recommend to build a machine which automatically delivers the requested shape!

The HUB outputs the requested @@ -689,78 +684,78 @@ storyRewards: desc: ¡Felicidades! ¡Por cierto, hay más contenido planeado para el juego completo! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + title: Balanceador + desc: El balanceador multifuncional ha sido desbloqueado - ¡Este puede + ser usado para construir fabricas más grandes al separar y mezclar + items hacia múltiples cintas! reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Unión compacta + desc: Has desbloqueado la variante unión de el + balanceador - ¡Acepta dos entradas y las une en + una sola cinta! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Lector de cinta + desc: ¡Has desbloqueado el lector de cinta! Este te permite + medir la cantidad de items que pasan por esta.
rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Rotador (180 grados) + desc: ¡Has desbloqueado el rotador de 180 grados! - Te permite + rotar una forma en 180 grados (¡Sorpresa! :D) reward_display: - title: Display - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + title: Monitor + desc: "Has desbloqueado el Monitor - ¡Conecta una señal dentro de + la capa de cables para visualizarla!

PD: ¿Te has dado cuenta que el lector + de cinta y el almacenador emiten su último item leído? ¡Trata de conectarlo + al monitor!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Señal constante + desc: ¡Has desbloqueado la señal constante en la capa de + cables! Esto es muy útil para conectar a el filtro de items + por ejemplo.

La señal constante puede emitir + formas, colores o + valores booleanos (1 / 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Puertas lógicas + desc: ¡Has desbloqueado las puertas lógicas! No es necesario que te emociones + por esto ¡Pero en realidad es super geniall!

Con estas puertas + ahora puedes computar operaciones AND, OR, XOR y NOT.

Como bonus + también te he dado el transistor! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Procesamiento virtual + desc: ¡Acabo de darte un monton de nuevos edificios los cuales te permiten + simular el procesamiento de las formas!

¡Ahora puedes + simular un cortador, rotador, apilador y más dentro de la capa de cables! + Con esto ahora tienes tres opciones para continuar el juego:

- + Construir una maquina automatizada para crear cualquier + forma que te pida el HUB (¡Te recomiendo que lo intentes!).

- Construir + algo genial con los cables.

- Continuar jugando de + la manera regular.

¡Cualquiera que eligas, recuerda divertirte! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + title: Cables y pintor cuádruple + desc: "Has desbloqueado la Capa de cables: ¡Es una capa + separada a la capa regular e introduce un montón de mecanicas + nuevas!

Para empezar te he dado el Pintor + Cuádruple - ¡Conecta las ranuras que quieras pintar usando + la capa de cables!

Para cambiar a la capa de cables, presiona la tecla + E.

PD: ¡Activa las pistas en + las opciones para activar el tutorial de cables!" reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Filtro de items + desc: Has desbloqueado el Filtro de Items! Este enviará los items tanto + arriaba como a la derecha dependiendo en si coinciden con la + señal de la capa de cables o no.

Tambien puedes enviar una señal + booleana (1 / 0) para activarlo o desactivarlo completamente. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Fin de la demo + desc: ¡Has llegado al final de la demo! settings: title: Opciones categories: general: General - userInterface: User Interface + userInterface: Interfaz de Usuario advanced: Avanzado - performance: Performance + performance: Rendimiento versionBadges: dev: Desarrollo staging: Escenificación @@ -872,55 +867,54 @@ settings: description: Deshabilita los diálogos de advertencia que se muestran cuando se cortan/eliminan más de 100 elementos. soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Volumen de efectos + description: Establece el volumen para los efectos de sonido musicVolume: - title: Music Volume - description: Set the volume for music + title: Volumen de música + description: Establece el volumen para la música lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Recursos del mapa de baja calidad + description: Simplifica el renderizado de los recusos en el mapa al ser vistos desde cerca, + mejorando el rendimiento. ¡Incluso se ve más limpio, asi que asegurate de probarlo! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Deshabilitar grilla + description: Deshabilitar la grilla puede ayudar con el rendimiento. ¡También hace + que el juego se vea más limpio! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Limpiar el cursos al apretar click derecho + description: Activado por defecto, Limpia el cursor al hacer click derecho + mientras tengas un un edificio seleccionado. Si se deshabilita, + puedes eliminar edificios al hacer click derecho mientras pones + un edificio. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Texturas de baja calidad (Feo) + description: Usa texturas de baja calidad para mejorar el rendimiento. ¡Esto hará que el + juego se vea muy feo! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Mostrar bordes de chunk + description: Este juego está dividido en chunks de 16x16 cuadrados, si esta opción es + habilitada los bordes de cada chunk serán mostrados. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Elegír el minero en la veta de recursos + description: Activado pir defecto, selecciona el minero si usas el cuentagotas sobre + una veta de recursos. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Cintas trasportadoras simplificadas (Feo) + description: No rederiza los items en las cintas trasportadoras exceptuando al pasar el cursor sobre la cinta para mejorar + el rendimiento. No recomiendo jugar con esta opcion activada + a menos que necesites fuertemente mejorar el rendimiento. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Habilitar movimiento con mouse + description: Te permite mover el mapa moviendo el cursor hacia los bordes de la + pantalla. La velocidad depende de la opción de velocidad de movimiento. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Hacer zoom donde está el cursor + description: Si se activa, se hará zoom en al dirección donde esté tu cursor, + a diferencia de hacer zoom en el centro de la pantalla. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Tamaño de recursos en el mapa + description: Controla el tamaño de los recursos en la vista de aerea del mapa (Al hacer zoom + minimo). rangeSliderPercentage: % keybindings: title: Atajos de teclado @@ -980,21 +974,21 @@ keybindings: placementDisableAutoOrientation: Desactivar orientación automática placeMultiple: Permanecer en modo de construcción placeInverse: Invierte automáticamente la orientación de las cintas transportadoras - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter + balancer: Balanceador + storage: Almacenamiento + constant_signal: Señal constante + logic_gate: Puerta lógica + lever: Interruptor (regular) + filter: Filtro + wire_tunnel: Cruze de cables + display: Monitor + reader: Lector de cinta + virtual_processor: Cortador virtual transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + analyzer: Analizador de formas + comparator: Comparador + item_producer: Productor de items (Sandbox) + copyWireValue: "Cables: Copiar valor bajo el cursos" about: title: Sobre el juego body: >- From 523fd0e83323f10d4a92bb625abd4a9944aff2b0 Mon Sep 17 00:00:00 2001 From: Nisar Hassan Naqvi Date: Sun, 11 Oct 2020 11:29:26 +0500 Subject: [PATCH 014/127] simplify code contributions + reviews by fully automating the dev setup with Gitpod. (#824) --- .gitpod.Dockerfile | 4 ++++ .gitpod.yml | 10 ++++++++++ README.md | 10 ++++++++++ 3 files changed, 24 insertions(+) create mode 100644 .gitpod.Dockerfile create mode 100644 .gitpod.yml diff --git a/.gitpod.Dockerfile b/.gitpod.Dockerfile new file mode 100644 index 00000000..41956947 --- /dev/null +++ b/.gitpod.Dockerfile @@ -0,0 +1,4 @@ +FROM gitpod/workspace-full + +RUN sudo apt-get update \ + && sudo apt install ffmpeg -yq diff --git a/.gitpod.yml b/.gitpod.yml new file mode 100644 index 00000000..18373c95 --- /dev/null +++ b/.gitpod.yml @@ -0,0 +1,10 @@ +image: + file: .gitpod.Dockerfile +tasks: + - init: yarn && gp sync-done boot + - before: cd gulp + init: gp sync-await boot && yarn + command: yarn gulp +ports: + - port: 3005 + onOpen: open-preview diff --git a/README.md b/README.md index 00e57ecc..85b5d26b 100644 --- a/README.md +++ b/README.md @@ -31,6 +31,16 @@ Your goal is to produce shapes by cutting, rotating, merging and painting parts **Notice**: This will produce a debug build with several debugging flags enabled. If you want to disable them, modify [`src/js/core/config.js`](src/js/core/config.js). +## Build Online with one-click setup + +You can use [Gitpod](https://www.gitpod.io/) (an Online Open Source VS Code-like IDE which is free for Open Source) for working on issues and making PRs to this project. With a single click it will start a workspace and automatically: + +- clone the `shapez.io` repo. +- install all of the dependencies. +- start `gulp` in `gulp/` directory. + +[![Open in Gitpod](https://gitpod.io/button/open-in-gitpod.svg)](https://gitpod.io/from-referrer/) + ## Helping translate Please checkout the [Translations readme](translations/). From 6cf875fe6b5b04ce3a64413b0c2863096396fc91 Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Sun, 11 Oct 2020 08:31:07 +0200 Subject: [PATCH 015/127] make reward notification scrollable (#828) --- src/css/ingame_hud/unlock_notification.scss | 5 +---- 1 file changed, 1 insertion(+), 4 deletions(-) diff --git a/src/css/ingame_hud/unlock_notification.scss b/src/css/ingame_hud/unlock_notification.scss index 431259f0..828c55a9 100644 --- a/src/css/ingame_hud/unlock_notification.scss +++ b/src/css/ingame_hud/unlock_notification.scss @@ -4,9 +4,7 @@ left: 0; right: 0; bottom: 0; - display: flex; - justify-content: center; - align-items: center; + overflow: auto; pointer-events: all; & { @@ -33,7 +31,6 @@ display: flex; align-items: center; flex-direction: column; - max-height: 100vh; color: #fff; text-align: center; From 223918eab2b5354f39b5101749fa615cfeac42dc Mon Sep 17 00:00:00 2001 From: Colleabois <12426652+Colleabois@users.noreply.github.com> Date: Sun, 11 Oct 2020 08:31:36 +0200 Subject: [PATCH 016/127] Update base-zh-TW.yaml (#829) --- translations/base-zh-TW.yaml | 130 +++++++++++++++++------------------ 1 file changed, 63 insertions(+), 67 deletions(-) diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index d43dd414..d5b5fd3d 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -870,11 +870,11 @@ keybindings: pipette: Pipette menuClose: Close Menu switchLayers: 更換層 - wire: Energy Wire - balancer: Balancer + wire: 電線 + balancer: 平衡機 storage: Storage constant_signal: Constant Signal - logic_gate: Logic Gate + logic_gate: 邏輯閘 lever: Switch (regular) filter: Filter wire_tunnel: Wire Crossing @@ -882,9 +882,9 @@ keybindings: reader: Belt Reader virtual_processor: Virtual Cutter transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) + analyzer: 形狀分析機 + comparator: 比對機 + item_producer: 物品生產機(沙盒模式) copyWireValue: "Wires: Copy value below cursor" about: title: 關於遊戲 @@ -894,7 +894,7 @@ about: 如果你想參與開發,請查看shapez.io on github

- 這個遊戲的開發少不了熱情的Discord社區。請加入我們的Discord 服務器

+ 這個遊戲的開發少不了熱情的 Discord 社區。請加入我們的Discord 伺服器

本遊戲的音樂由Peppsen製作——他是個很棒的伙伴。

@@ -910,63 +910,59 @@ demo: exportingBase: 匯出工廠截圖 settingNotAvailable: 在演示版中不可用。 tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - 基地接受任何輸入,不只是當前要求的圖形! + - 盡量讓工廠模組化,會有回報的! + - 建築不要距離基地太近,否則容易混亂! + - 如果堆疊不如預期,嘗試將輸入端互換。 + - 輸送帶的方向可以按 R 更換。 + - 按住 CTRL 來防止輸送帶自動轉向。 + - 同等級的生產比例會是一樣的。 + - 串聯比並聯更有效率。 + - 遊戲後期可以解鎖更多建築變體! + - 玩家可以按 T 來選擇不同變體。 + - 對稱是關鍵! + - 不同等級的隧道可以相互交織。 + - 盡量讓工廠保持緊密,會有回報的! + - 上色機有對稱的變體。按 T 來選擇不同變體。 + - 正確的建築比例可以將效率最大化。 + - 最高級時,五個開採機可填滿一個輸送帶。 + - 別忘記使用隧道! + - 最高效率不一定來自均勻切割。 + - 按住 SHIFT 輕鬆規劃長距離輸送帶。 + - 不論擺放方向,切割機永遠做垂直切割。 + - 白 = 紅 + 綠 + 藍。 + - 倉庫優先從左側輸出。 + - 花點時間研究可以重複利用的設計,會有回報的! + - 按住 CTRL 可以一次放置多個建築。 + - 按住 ALT 以反轉輸送帶的放置方向。 + - 效率是關鍵! + - 離基地越遠得圖形叢越複雜。 + - 機器的運作速度有上限,多放幾個增加生產效率。 + - 用平衡機讓效率最大化。 + - 規劃很重要,盡量別讓輸送帶錯綜複雜。 + - 預先規劃,不然會混亂不堪! + - 不要刪除舊的工廠,解鎖更新能會需要它們。 + - 先試著靠自己破第20關再去尋求幫助。 + - 不要讓東西複雜化,保持簡單則行的遠。 + - 遊戲中有時需要重複利用工廠,設計時記得考量重複利用性。 + - 有些圖形地圖上就找的到,不必自行堆疊。 + - 地圖永遠部會自然生成完整的風車圖形。 + - 先上色再切割會比較有效率。 + - 有了模組,空間淪為假議題、凡夫俗子的憂思。 + - 創建一個藍圖工廠,這對模組化很有幫助。 + - 靠近一點看混色機,你會找到解答。 + - 按 CTRL + 點選想選取的區域。 + - 離基地太近的建築可能在未來會礙事。 + - 更新目錄的每個圖形旁都有圖釘,點選即可把圖形釘在螢幕上(目標圖形旁)。 + - 混合所有基本色就會得到白色! + - 地圖是無限延展的,別執著,擴張吧! + - Factorio 是我最喜歡的遊戲,非常推薦! + - 四分切割機從右上角順時鐘地輸出圖形的四個區塊。 + - 你可以從主畫面下載存檔。 + - 去設定頁看看,有很多有用的按鍵組合! + - 有很多東西都可以設定,有空的話去設定頁看看。 + - 看不見基地時,基地的標示左側有個小指南針會提醒你它的方位。 + - 清除輸送帶有個方法:複製它再原地貼上。 + - 按 F4 來顯示螢幕的幀數(FPS)與刷新率(Tick Rate)。 + - 按 F4 兩次來顯示相機和游標的絕對位置。 + - 在已標記的圖形上按左鍵去除標記。 From f621924a4e0551b4af6c49d6cf749aebdb0b527d Mon Sep 17 00:00:00 2001 From: Miro Rauhala <4082806+mirorauhala@users.noreply.github.com> Date: Sun, 11 Oct 2020 09:33:43 +0300 Subject: [PATCH 017/127] Update base-fi.yaml (#834) --- translations/base-fi.yaml | 470 +++++++++++++++++++------------------- 1 file changed, 232 insertions(+), 238 deletions(-) diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index 7272956d..6da1e0bf 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -2,51 +2,51 @@ steamPage: shortText: shapez.io on peli tehtaiden rakentamisesta, joiden avulla automatisoidaan yhä monimutkaisempien muotojen luonti and yhdisteleminen loputtomassa maailmassa. - discordLinkShort: Official Discord + discordLinkShort: Virallinen Discord intro: >- - Shapez.io is a relaxed game in which you have to build factories for the - automated production of geometric shapes. + Shapez.io on rento peli, jossa sinun täytyy rakentaa tehtaita geometristen muotojen + automatisoituun tuotantoon. - As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + Kun taso kasvaa, muodot tulevat entistä vaikeammaksi sekä sinun täytyy laajentua loputtomassa kartassa. - And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + Ja jos tämä ei ollut tarpeeksi, niin sinun täytyy tuottaa eksponentiaalisesti enemmän täyttääksesi tarpeet - ainut asia mikä auttaa on skaalautuminen! - While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + Vaikka alussa vain prosessoit muotoja, myöhemmin niitä pitää maalata - tätä varten täytyy sinun kaivaa ja sekoittaa värejä - Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! - title_advantages: Standalone Advantages + Pelin ostaminen Steamista antaa sinulle pääsyn pelin kokoversioon, mutta voit myös pelata kokeiluversiota esin sivuillamme shapez.io ja päättää myöhemmin! + title_advantages: Kokoversion hyödyt advantages: - - 12 New Level for a total of 26 levels - - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! - - Wires Update for an entirely new dimension! - - Dark Mode! - - Unlimited Savegames - - Unlimited Markers - - Support me! ❤️ - title_future: Planned Content + - 12 uutta tasoa nostaen tasojen määrän 26 tasoon! + - 18 uutta rakennusta täysin automatisoidulle tehtaalle! + - 20 päivitystasoa monelle hauskalle pelitunnille! + - Johdot -päivitys tuoden täyden uuden ulottuvuuden! + - Tumma teema! + - Rajattomat tallennukset + - Rajattomat merkit + - Tue minua! ❤️ + title_future: Suunniteltu sisältö planned: - - Blueprint Library (Standalone Exclusive) + - Pohjapiirustus kirjasto (Standalone Exclusive) - Steam Achievements - - Puzzle Mode - - Minimap - - Mods - - Sandbox mode - - ... and a lot more! - title_open_source: This game is open source! - title_links: Links + - Palapelitila + - Minikartta + - Modit + - Hiekkalaatikko -tila + - ... ja paljon muuta! + title_open_source: Tämä peli on avointa lähdekoodia! + title_links: Linkit links: - discord: Official Discord + discord: Virallinen Discord roadmap: Roadmap subreddit: Subreddit - source_code: Source code (GitHub) - translate: Help translate + source_code: Lähdekoodi (GitHub) + translate: Auta kääntämään text_open_source: >- - Anybody can contribute, I'm actively involved in the community and - attempt to review all suggestions and take feedback into consideration - where possible. + Kuka tahansa voi osallistua. Olen aktiivisesti mukana yhteisössä ja + yritän tarkistaa kaikki ehdotukset ja ottaa palautteen huomioon missä + mahdollista. - Be sure to check out my trello board for the full roadmap! + Muista tarkistaa Trello -lautani, jossa löytyy koko roadmap! global: loading: Ladataan error: Virhe @@ -60,7 +60,7 @@ global: infinite: ∞ time: oneSecondAgo: yksi sekunti sitten - xSecondsAgo: sekunttia sitten + xSecondsAgo: sekuntia sitten oneMinuteAgo: yksi minuutti sitten xMinutesAgo: minuuttia sitten oneHourAgo: yksi tunti sitten @@ -76,11 +76,11 @@ global: control: CTRL alt: ALT escape: ESC - shift: VAIHTO + shift: SHIFT space: VÄLILYÖNTI demoBanners: title: Demoversio - intro: Hanki itsenäinen peli avataksesi kaikki omunaisuudet! + intro: Hanki pelin kokoversio avataksesi kaikki ominaisuudet! mainMenu: play: Pelaa continue: Jatka @@ -89,13 +89,13 @@ mainMenu: subreddit: Reddit importSavegame: Tuo peli openSourceHint: Tämä on avoimen lähdekoodin peli! - discordLink: Virallinen Discord Palvelin + discordLink: Virallinen Discord -palvelin helpTranslate: Auta kääntämään! madeBy: Pelin on tehnyt browserWarning: Anteeksi, mutta pelin tiedetään toimivan huonosti selaimellasi! - Hanki itsenäinen versio tai lataa Chrome täyttä tukea varten. + Hanki pelin kokoversio tai lataa Google Chrome täyttä tukea varten. savegameLevel: Taso - savegameLevelUnknown: Tuntematon Taso + savegameLevelUnknown: Tuntematon taso savegameUnnamed: Unnamed dialogs: buttons: @@ -105,13 +105,13 @@ dialogs: later: Myöhemmin restart: Käynnistä uudelleen reset: Nollaa - getStandalone: Hanki itsenäinen peli + getStandalone: Hanki kokoversio deleteGame: Tiedän mitä olen tekemässä viewUpdate: Näytä päivitys - showUpgrades: Näytä Päivitykset + showUpgrades: Näytä päivitykset showKeybindings: Näytä pikanäppäimet importSavegameError: - title: Tuonti Virhe + title: Tuontivirhe text: "Tallennuksen tuonti epäonnistui:" importSavegameSuccess: title: Tallennus tuotiin @@ -121,9 +121,9 @@ dialogs: text: "Tallennuksen lataus epäonnistui:" confirmSavegameDelete: title: Varmista poisto - text: Are you sure you want to delete the following game?

- '' at level

This can not be - undone! + text: Oletko varma, että haluat poistaa valitun pelin?

+ '' tasossa

Tätä toimintoa ei + voida peruuttaa! savegameDeletionError: title: Poisto epäonnistui text: "Tallennuksen poisto epäonnistui:" @@ -132,8 +132,8 @@ dialogs: text: Käynnistä peli uudelleen ottaaksesi asetukset käyttöön. editKeybinding: title: Vaihda pikanäppäin - desc: Paina näppäintä tai hiiren nappia jonka haluat asettaa tai paina escape - peruuttaaksesi. + desc: Paina näppäintä tai hiiren nappia, jonka haluat asettaa tai paina + escape peruuttaaksesi. resetKeybindingsConfirmation: title: Nollaa pikanäppäimet desc: Tämä nollaa kaikki pikanäppäimet oletusarvoihin. Vahvista. @@ -142,32 +142,32 @@ dialogs: desc: Pikanäppäimet nollattiin oletusarvoihin! featureRestriction: title: Demoversio - desc: Yritit käyttää ominaisuutta () joka ei ole saatavilla - demoversiossa. Harkitse itsenäisen version hankkimista avataksesi + desc: Yritit käyttää ominaisuutta (), joka ei ole saatavilla + demoversiossa. Harkitse kokoversio avataksesi kaikki ominaisuudet! oneSavegameLimit: title: Rajoitetut tallennukset desc: Sinulla voi olla vain yksi tallennus kerrallaan demoversiossa. Poista - vanha tallennus tai hanki itsenäinen versio! + vanha tallennus tai hanki kokoversio pelistä! updateSummary: title: Uusi päivitys! - desc: "Tässä on tulleet muutokset sen jälkeen kun viimeksi pelasit:" + desc: "Tässä uudet muutokset sen jälkeen kun viimeksi pelasit:" upgradesIntroduction: - title: Avaa Päivitykset - desc: Kaikkia muodoja joita tuotat voi käyttää päivitysten avaamiseen - + title: Avaa päivitykset + desc: Kaikkia muotoja joita tuotat voidaan käyttää päivitysten avaamiseen - Älä tuhoa vanhoja tehtaitasi! Löydät päivitysikkunan näytön oikeasta yläkulmasta. massDeleteConfirm: title: Vahvista poisto - desc: Olet poistamassa paljon rakennuksia (tasan )! Oletko varma että + desc: Olet poistamassa paljon rakennuksia ( tarkalleen)! Oletko varma, että haluat jatkaa? massCutConfirm: - title: Vahtista leikkaus - desc: Olet leikkaamassa paljon rakennuksia (tasan )! Oletko varma että + title: Vahvista leikkaus + desc: Olet leikkaamassa paljon rakennuksia ( tarkalleen)! Oletko varma, että haluat jatkaa? blueprintsNotUnlocked: title: Ei vielä avattu - desc: Suorita taso 12 avataksesi Piirustukset! + desc: Suorita taso 12 avataksesi piirustukset! keybindingsIntroduction: title: Hyödyllisiä pikanäppäimiä desc: "Tässä pelissä on paljon pikanäppäimiä, jotka tekevät isojen tehtaiden @@ -178,13 +178,13 @@ dialogs: useita samoja rakennuksia.
ALT: Käännä sijoitettavien hihnojen suunta.
" createMarker: - title: Uusi Merkki - desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) + title: Uusi merkki + desc: Anna merkille merkitsevä nimi. Voit myös liittää lyhyen koodin + muodosta. (Jonka voit luoda täällä.) titleEdit: Muokkaa merkkiä markerDemoLimit: - desc: Voit tehdä vain kaksi mukautettua merkkiä demoversiossa. Hanki itsenäinen - versio saadaksesi loputtoman määrän merkkejä! + desc: Voit tehdä vain kaksi mukautettua merkkiä demoversiossa. Hanki kokoversio + saadaksesi loputtoman määrän merkkejä! exportScreenshotWarning: title: Vie kuvakaappaus desc: Pyysit tukikohtasi viemistä kuvakaappauksena. Huomaa, että tämä voi olla @@ -199,16 +199,14 @@ dialogs: descShortKey: ... or enter the short key of a shape (Which you can generate here) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Nimeä tallennus uudelleen + desc: Voit nimetä tallennuksesi uudelleen täällä. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Ohjevideo saatavilla + desc: Tästä tasosta on saatavilla ohjevideo! Haluaisitko katsoa sen? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Ohjevideo saatavilla + desc: Tästä tasosta on saatavilla ohjevideo! Haluaisitko katsoa sen? ingame: keybindingsOverlay: moveMap: Liiku @@ -227,9 +225,9 @@ ingame: plannerSwitchSide: Käännä suunnittelijan puoli cutSelection: Leikkaa copySelection: Kopioi - clearSelection: Tyhjennä Valinta + clearSelection: Tyhjennä valinta pipette: Pipetti - switchLayers: Vaihda Tasoa + switchLayers: Vaihda tasoa colors: red: Punainen green: Vihreä @@ -241,7 +239,7 @@ ingame: uncolored: Väritön black: Musta buildingPlacement: - cycleBuildingVariants: Paina kiertääksesi muunnoksia. + cycleBuildingVariants: Paina selataksesi vaihtoehtoja. hotkeyLabel: "Pikanäppäin: " infoTexts: speed: Nopeus @@ -259,7 +257,7 @@ ingame: notifications: newUpgrade: Uusi päivitys on saatavilla! gameSaved: Peli on tallennettu. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Taso on saavutettu! shop: title: Päivitykset buttonUnlock: Päivitä @@ -277,7 +275,7 @@ ingame: välituotteet. delivered: title: Toimitettu - description: Näyttää muodot jotka on toimitettu keskusrakennukseen. + description: Näyttää muodot, jotka on toimitettu keskusrakennukseen. noShapesProduced: Toistaiseksi ei muotoja tuotettu. shapesDisplayUnits: second: / s @@ -296,9 +294,9 @@ ingame: waypoints: waypoints: Merkit hub: Keskusrakennus - description: Paina merkkia hiiren vasemmalla mennäksesi siihen, paina oikeaa + description: Paina merkkiä hiiren vasemmalla mennäksesi siihen, paina oikeaa nappia poistaaksesi sen.

Paina luodaksesi merkin - nykyisestä näkymästä tai varen nappi luodaksesi + nykyisestä näkymästä tai vasen nappi luodaksesi merkin valittuun paikkaan. creationSuccessNotification: Merkki luotiin onnistuneesti. shapeViewer: @@ -318,9 +316,9 @@ ingame: valmiiksi.

Vihje: Pidä pohjassa VAIHTO laittaaksesi useampia kaivajia ja käytä R kääntääksesi niitä." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." + 2_1_place_cutter: "Nyt aseta Leikkuri leikataksesi ympyrä + puoliksi!

PS: Leikkuri aina leikkaa ylhäältä alaspäin + riippumatta sen asennosta." 2_2_place_trash: The cutter can clog and stall!

Use a trash to get rid of the currently (!) not needed waste. @@ -343,72 +341,72 @@ ingame: signal and thus activate the painter.

PS: You don't have to connect all inputs! Try wiring only two." connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 kaivaja + n_miners: kaivajaa + limited_items: Rajoitettu watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Kokeiluversio + desc: Napsauta tästä nähdäksesi Steam version edut! + get_on_steam: Hanki Steamista standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Hanki kokoversio! + no_thanks: Ei kiitos! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Uutta tasoa + desc: Yhteensä 26 tasoa! buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Uutta rakennusta + desc: Automatisoi tehtaasi täysin! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Tallennukset + desc: Niin paljon kuin sielusi kaipaa! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 päivitystasoa + desc: Kokeiluversiossa on vain viisi! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Merkit + desc: Älä koskaan eksy tehtaassasi! wires: - title: Wires - desc: An entirely new dimension! + title: Johdot + desc: Täysin uusi ulottuvuus! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Tumma teema + desc: Jotta silmiisi ei sattuisi! support: - title: Support me - desc: I develop it in my spare time! + title: Tue minua + desc: Kehitän peliä vapaa-ajallani! shopUpgrades: belt: - name: Hihnat, Jakelija & Tunneli + name: Hihnat, jakelija & tunneli description: Nopeus x → x miner: name: Kaivuu description: Nopeus x → x processors: - name: Leikkaus, Kääntö & Pinoaminen + name: Leikkaus, kääntö & pinoaminen description: Nopeus x → x painting: - name: Sekoitus & Värjäys + name: Sekoitus & värjäys description: Nopeus x → x buildings: hub: deliver: Toimita toUnlock: avataksesi levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: Kokeiluversion loppu! belt: default: name: Liukuhihna - description: Kuljettaa esineitä, pidä pohjassa ja raahaa laittaaksesi useampia. + description: Kuljettaa esineitä. Pidä pohjassa ja raahaa laittaaksesi useampia. wire: default: name: Johto - description: Sallii sähkön kuljetuksen + description: Sallii sähkönkuljetuksen second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Johto + description: Siirtää signaaleja, jotka voivat olla muotoja, värejä, taikka binääriarvoja (1 / 0). + Eriväriset johdot eivät yhdisty toisiinsa. miner: default: name: Kaivaja @@ -422,7 +420,7 @@ buildings: name: Tunneli description: Sallii resurssien kuljetuksen rakennuksien ja hihnojen alta. tier2: - name: Tunneli Taso II + name: Tunneli taso II description: Sallii resurssien kuljetuksen rakennuksien ja hihnojen alta pidemmältä kantamalta. cutter: @@ -441,11 +439,11 @@ buildings: name: Kääntäjä description: Kääntää muotoja 90 astetta myötäpäivään. ccw: - name: Kääntäjä (Vastapäivään) + name: Kääntäjä (vastapäivään) description: Kääntää muotoja 90 astetta vastapäivään. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Kääntäjä (180) + description: Kääntää muotoja 180 astetta. stacker: default: name: Pinoaja @@ -457,19 +455,19 @@ buildings: description: Sekoittaa kaksi väriä lisäaineiden avulla. painter: default: - name: Värjääjä - description: Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä + name: Maalari + description: Maalaa vasemmasta sisääntulosta tulevan muodon ylemmästä sisääntulosta tulevalla värillä. mirrored: - name: Värjääjä - description: Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä + name: Maalari + description: Maalaa vasemmasta sisääntulosta tulevan muodon alemmasta sisääntulosta tulevalla värillä. double: - name: Värjääjä (Kaksinkertainen) - description: Värjää vasemmasta sisääntulosta tulevan muodon ylemmästä + name: Maalari (kaksinkertainen) + description: Värjää vasemmasta sisääntulosta tulevat muodot ylemmästä sisääntulosta tulevalla värillä. quad: - name: Painter (Neljännes) + name: Maalari (neljännes) description: Allows you to color each quadrant of the shape individually. Only slots with a truthy signal on the wires layer will be painted! @@ -479,114 +477,111 @@ buildings: description: Sallii sisääntulot kaikilta sivuilta ja tuhoaa ne. Lopullisesti. balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: Tasaaja + description: Monikäyttöinen - Jaa sisääntulot tasaisesti kaikkiin ulostuloihin. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Yhdistäjä (compact) + description: Yhdistää kaksi hihnaa yhteen. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Yhdistäjä (compact) + description: Yhdistää kaksi hihnaa yhteen. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Erottaja (compact) + description: Erottaa hihnan kahteen hihnaan. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Erottaja (compact) + description: Erottaa hihnan kahteen hihnaan. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Varasto + description: Varasotoi ylijäämätavarat tiettyyn kapasiteettiin asti. Priorisoi vasemman ulostulon + ja voidaan käyttää ylivuotoporttina. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Johdon ylitys + description: Antaa johdon ylittää toisen liittämättä niitä. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Jatkuva signaali + description: Lähettää vakiosignaalin, joka voi olla muoto, väri, taikka binääriarvo (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Kytkin + description: Voidaan kytkeä lähettämään binääriarvoa (1 / 0) johtotasolla, + jota voidaan sitten käyttää esimerkiksi tavarasuodattimen ohjaukseen. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: AND portti + description: Lähettää totuusarvon "1", jos molemmat sisääntulot ovat totta. (Totuus tarkoittaa, + että muoto, väri tai totuusarvo "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NOT portti + description: Lähettää totuusarvon "1", jos sisääntulot eivät ole totta. + (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: XOR portti + description: Lähettää totuusarvon "1", jos yksi sisääntuloista on totta, mutta kaikki eivät. + (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: OR portti + description: Lähettää totuusarvon "1", jos yksi sisääntuloista on totta. + (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transistori + description: Lähettää pohjasignaalin eteenpäin, jos sivusisääntulo on totta. + (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Transistori + description: Lähettää pohjasignaalin eteenpäin, jos sivusisääntulo on totta. + (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Suodatin + description: Yhdistä signaali reitittääksesi kaikki vastaavat tavarat ylös, + ja jäljelle jäämät vasemmalle. Voidaan ohjata myös binääriarvoilla. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Näyttö + description: Yhdistö signaali näyttääksesi sen näytöllä. Voi olla muoto, + väri tai binääriarvo. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Hihnanlukija + description: Mittaa hihnan keskiarvosuorituskyky. Antaa viimeksi luetun + tavaran signaalin johtotasolla (kun saavutettu). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Tutkija + description: Analysoi ylä oikean neljänneksen alimmasta tavaran tasosta ja + palauttaa sen muodon ja värin. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Vertain + description: Palauttaa binääriarvon "1", jos molemmat signaalit ovat täysin samat. + Voi verrata värejä, tavaroita, ja binääriarvoja. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Virtuaalileikkuri + description: Virtuaalisesti leikkaa tavara kahteen puoliskoon. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Virtuaalikääntäjä Rotater + description: Virtuaalisesti käännä tavara, sekä myötäpäivään että vastapäivään. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Virtuaalierottaja + description: Virtuaalisesti erota ylin taso oikeaan ulostuloon ja jäljelle jäävät + vasempaan ulostuloon. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Virtuaaliyhdistäjä + description: Virtuaalisesti yhdistä oikea tavara vasempaan. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Virtuaalimaalaaja + description: Virtuaalisesti maalaa tavara alhaalta sisääntulosta oikean sisääntulon värillä. item_producer: default: name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + description: Saatavilla vain hiekkalaatikkotilassa. Palauttaa + johtotasolla annetun signaalin normaaliin tasoon. storyRewards: reward_cutter_and_trash: title: Muotojen Leikkaus @@ -744,26 +739,25 @@ storyRewards: signal from the wires layer or not.

You can also pass in a boolean signal (1 / 0) to entirely activate or disable it. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Kokeiluversion loppu! + desc: Olet läpäissyt kokeiluversion! settings: title: Asetukset categories: general: Yleinen - userInterface: Käyttöliittyma - advanced: Kehittynyt - performance: Performance + userInterface: Käyttöliittymä + advanced: Lisäasetukset + performance: Suorityskyky versionBadges: dev: Kehitys - staging: Näyttämö + staging: Testaus prod: Tuotanto - buildDate: Rakennettu + buildDate: Koottu labels: uiScale: - title: Käyttöliittymän Koko + title: Käyttöliittymän koko description: Muuttaa käyttöliittymän kokoa. Käyttöliittymä skaalataan silti - laitteen resoluution perusteella based on your device - resolution, mutta tämä asetus määrittää skaalauksen määrän. + laitteen resoluution perusteella, mutta tämä asetus määrittää skaalauksen määrän. scales: super_small: Erittäin pieni small: Pieni @@ -771,7 +765,7 @@ settings: large: Iso huge: Valtava autosaveInterval: - title: Automaattitallennuksen Aikaväli + title: Automaattitallennuksen aikaväli description: Määrittää kuinka usein peli tallentaa automaattisesti. Voit myös poistaa automaattisen tallennuksen kokonaan käytöstä täällä. intervals: @@ -782,8 +776,8 @@ settings: twenty_minutes: 20 Minuutin välein disabled: Pois käytöstä scrollWheelSensitivity: - title: Zoomausherkkyys - description: Vaihtaa kuinka herkkä zoomi on (Joko hiiren rulla tai ohjauslevy). + title: Suurennusherkkyys + description: Vaihtaa kuinka herkkä suurennus on (Joko hiiren rulla tai ohjauslevy). sensitivity: super_slow: Erittäin hidas slow: Hidas @@ -791,7 +785,7 @@ settings: fast: Nopea super_fast: Erittäin nopea movementSpeed: - title: Liikkumis nopeus + title: Liikkumisnopeus description: Muuttaa kuinka nopeasti näkymä liikkuu kun käytetään näppäimistöä. speeds: super_slow: Erittäin hidas @@ -799,7 +793,7 @@ settings: regular: Normaali fast: Nopea super_fast: Erittäin nopea - extremely_fast: Hyper nopea + extremely_fast: Supernopea language: title: Kieli description: Vaihda kieltä. Kaikki käännökset ovat käyttäjien tekemiä ja @@ -813,19 +807,19 @@ settings: description: On suositeltava pelata tätä peliä kokonäytön tilassa saadaksesi parhaan kokemuksen. Saatavilla vain itsenäisessä versiossa. soundsMuted: - title: Mykistä Äänet + title: Mykistä äänet description: Jos käytössä, mykistää kaikki ääniefektit. musicMuted: - title: Mykistä Musiikki + title: Mykistä musiikki description: Jos käytössä, mykistää musiikin. theme: - title: Pelin Teema + title: Pelin teema description: Valitse pelin teema (vaalea / tumma). themes: dark: Tumma - light: Kirkas + light: Vaalea refreshRate: - title: Simulaatiotavoite + title: Virkistystaajuus description: Jos sinulla on 144hz näyttö, muuta virkistystaajuus täällä jotta pelin simulaatio toimii oikein isommilla virkistystaajuuksilla. Tämä voi laskea FPS nopeutta, jos tietokoneesi on liian hidas. @@ -835,18 +829,18 @@ settings: jälkeen kunnes peruutat sen. Tämä vastaa SHIFT:in pitämistä pohjassa ikuisesti. offerHints: - title: Vihjeet & Oppaat + title: Vihjeet & oppaat description: Tarjoaa pelaamisen aikana vihjeitä ja oppaita. Myös piilottaa tietyt käyttöliittymäelementit tietyn tason mukaan, jotta alkuunpääseminen olisi helpompaa. enableTunnelSmartplace: - title: Älykkäät Tunnelit + title: Älykkäät tunnelit description: Kun käytössä, tunnelin sijoittaminen automaattisesti poistaa tarpeettomat liukuhihnat. Tämä myös ottaa käyttöön tunnelien raahaamisen ja ylimääräiset tunnelit poistetaan. vignette: - title: Vignetti - description: Ottaa käyttöön vignetin, joka tummentaa näytön kulmia ja tekee + title: Vinjetointi + description: Ottaa käyttöön vinjetoinnin, joka tummentaa näytön kulmia ja tekee tekstin lukemisesta helpompaa. rotationByBuilding: title: Kiertäminen rakennustyypin mukaan @@ -854,26 +848,26 @@ settings: yksilöllisesti. Tämä voi olla mukavampi vaihtoehto jos usein sijoitat eri rakennustyyppejä. compactBuildingInfo: - title: Kompaktit Rakennusten Tiedot + title: Kompaktit rakennusten tiedot description: Lyhentää rakennusten tietolaatikoita näyttämällä vain niiden suhteet. Muuten rakennuksen kuvaus ja kuva näytetään. disableCutDeleteWarnings: - title: Poista Leikkaus/Poisto Varoitukset + title: Poista leikkaus/poisto -varoitukset description: Poista varoitusikkunat jotka ilmestyy kun leikkaat/poistat enemmän kuin 100 entiteettiä soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: Efektien äänenvoimakkuus + description: Aseta äänenvoimakkuus efekteille musicVolume: - title: Music Volume - description: Set the volume for music + title: Musiikin äänenvoimakkuus + description: Aseta äänenvoimakkuus musiikille lowQualityMapResources: title: Low Quality Map Resources description: Simplifies the rendering of resources on the map when zoomed in to improve performance. It even looks cleaner, so be sure to try it out! disableTileGrid: - title: Disable Grid + title: Poista ruudukko description: Disabling the tile grid can help with the performance. This also makes the game look cleaner! clearCursorOnDeleteWhilePlacing: @@ -883,13 +877,13 @@ settings: you can delete buildings by right-clicking while placing a building. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Alhaisen tason tekstuurit (ruma) + description: Käyttää alhaisen tason tekstuureja tehojen säästämiseksi. Tämä + muutta pelin rumaksi! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Näytä kimpaleiden reunus Display Chunk Borders + description: Pel on jaettu 16x16 kimpaleisiin. Jos tämä asetus on käytössä, + reunat jokaiselle kimpaleelle näytetään. pickMinerOnPatch: title: Pick miner on resource patch description: Enabled by default, selects the miner if you use the pipette when @@ -914,15 +908,15 @@ settings: rangeSliderPercentage: % keybindings: title: Pikanäppäimet - hint: "Tip: Muista käyttää CTRL, VAIHTO ja ALT! Ne ottavat käyttöön erilaisia + hint: "Tip: Muista käyttää CTRL, SHIFT ja ALT! Ne ottavat käyttöön erilaisia sijoitteluvaihtoehtoja." - resetKeybindings: Nollaa Pikanäppäimet + resetKeybindings: Nollaa pikanäppäimet categoryLabels: general: Sovellus ingame: Peli navigation: Navigointi placement: Sijoitus - massSelect: Massa Valinta + massSelect: Massavalinta buildings: Rakennus Pikanäppäimet placementModifiers: Sijoittelu Muokkaajat mappings: @@ -992,9 +986,9 @@ about: href="https://github.com/tobspr" target="_blank">Tobias Springer (tämä on minä).

- Jos haluat osallistua, tarkista shapez.io githubissa.

+ Jos haluat osallistua, tarkista shapez.io GitHubissa.

- Tämä peli ei olisi ollut mahdollinen ilman suurta Discord yhteisöä pelini ympärillä - Sinun kannattaisi liittyä Discord palvelimelleni!

+ Tämä peli ei olisi ollut mahdollista ilman suurta Discord -yhteisöä pelini ympärillä - Sinun kannattaisi liittyä Discord palvelimelleni!

Ääniraidan on tehnyt Peppsen - Hän on mahtava.

@@ -1020,7 +1014,7 @@ tips: - Serial execution is more efficient than parallel. - You will unlock more variants of buildings later in the game! - You can use T to switch between different variants. - - Symmetry is key! + - Symmetria on keskeistä! - You can weave different tiers of tunnels. - Try to build compact factories - it will pay out! - The painter has a mirrored variant which you can select with T @@ -1031,12 +1025,12 @@ tips: - Holding SHIFT will activate the belt planner, letting you place long lines of belts easily. - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. + - Sekoita kolmea väriä saadaksesi valkoista. - The storage buffer priorities the first output. - Invest time to build repeatable designs - it's worth it! - Holding CTRL allows to place multiple buildings. - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! + - Tehokkuus on keskeistä! - Shape patches that are further away from the hub are more complex. - Machines have a limited speed, divide them up for maximum efficiency. - Use balancers to maximize your efficiency. @@ -1067,6 +1061,6 @@ tips: - This game has a lot of settings, be sure to check them out! - The marker to your hub has a small compass to indicate its direction! - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. + - Paina F4 nähdäksesi FPS laskurin ja virkistystaajuuden. - Press F4 twice to show the tile of your mouse and camera. - You can click a pinned shape on the left side to unpin it. From 09850954b1af8410b22c54e7b4999e5fe1ec17d2 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 11 Oct 2020 08:42:13 +0200 Subject: [PATCH 018/127] Update changelog --- src/js/changelog.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/changelog.js b/src/js/changelog.js index bc73ad0f..84f0bc07 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -4,6 +4,7 @@ export const CHANGELOG = [ date: "unreleased", entries: [ "Fixed stacking bug for level 26 which required restarting the game", + "Fix reward notification being too long sometimes (by LeopoldTal)", "Updated translations", ], }, From 0146aa91bb8c153f21d583daa9bf819ff126db8a Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Sun, 11 Oct 2020 18:45:49 +0200 Subject: [PATCH 019/127] fix syntax in translations (#846) --- translations/base-ind.yaml | 2 +- translations/base-kor.yaml | 2 +- translations/base-nl.yaml | 4 ++-- translations/base-pt-PT.yaml | 2 +- 4 files changed, 5 insertions(+), 5 deletions(-) diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 49670b48..0c041a6a 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -209,7 +209,7 @@ dialogs: tutorialVideoAvailableForeignLanguage: title: Tutorial Tersedia desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam Bahasa Inggris. - Apakaha kamu ingin menontonnya? + Apakaha kamu ingin menontonnya? ingame: keybindingsOverlay: moveMap: Geser diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml index 1ea855c5..34a14fbd 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -285,7 +285,7 @@ ingame: 제거하세요. 2_3_more_cutters: "잘하셨습니다! 느린 처리 속도를 보완하기 위해 절단기를 두 개 이상 배치해보세요!

추신: 상단 숫자 단축키 (0~9)를 사용하여 - 건물을 빠르게 선택할 수 있습니다! + 건물을 빠르게 선택할 수 있습니다!" 3_1_rectangles: "이제 사각형 도형을 추출해 볼까요! 추출기 네 개를 배치하고 허브와 연결하세요.

추신: 긴 벨트 한 줄을 간단히 만들려면 SHIFT 키를 누른 채 드래그하세요!" diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index 719eeee0..e43d6450 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -912,8 +912,8 @@ settings: te bewegen. zoomToCursor: title: Zoom naar de Muis - description: Wanneer geactiveert: de zoom zal gebeuren in de richting van je - muispositie, anders in het midden van het scherm. + description: "Wanneer geactiveert: de zoom zal gebeuren in de richting van je + muispositie, anders in het midden van het scherm." mapResourcesScale: title: Kaartbronnen schaal description: Controleert de grote van de vormen op het map overzicht (wanneer je diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index c641f8d8..c6c18b98 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -316,7 +316,7 @@ ingame: é necessário desperdício. 2_3_more_cutters: "Bom trabalho! Agora colocamais 2 cortadores para acelerades este progresso lento!

PS: Usa os atalhos - 0-9 para acederes às contruções mais rapidamente! + 0-9 para acederes às contruções mais rapidamente!" 3_1_rectangles: "Agora vamos extrair alguns retângulos! Constrói 4 extratores e conecta-os ao edifício central.

PS: Pressiona SHIFT enquanto arrastas um tapete rolante From 070245270f484cbfc28b41bc4c8ed6799a1c0544 Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Sat, 31 Oct 2020 10:15:45 +0100 Subject: [PATCH 020/127] Use locale decimal separator on belt reader display (#816) * use locale decimal separator on belt reader display * rename formatter method --- src/js/core/utils.js | 11 ++++++++++- src/js/game/systems/item_processor_overlays.js | 4 ++-- 2 files changed, 12 insertions(+), 3 deletions(-) diff --git a/src/js/core/utils.js b/src/js/core/utils.js index 98327378..50657841 100644 --- a/src/js/core/utils.js +++ b/src/js/core/utils.js @@ -558,7 +558,16 @@ export function formatSeconds(secs) { } /** - * Formats a number like 2.5 to "2.5 items / s" + * Formats a number like 2.51 to "2.5" + * @param {number} speed + * @param {string=} separator The decimal separator for numbers like 50.1 (separator='.') + */ +export function round1DigitLocalized(speed, separator = T.global.decimalSeparator) { + return round1Digit(speed).toString().replace(".", separator); +} + +/** + * Formats a number like 2.51 to "2.51 items / s" * @param {number} speed * @param {boolean=} double * @param {string=} separator The decimal separator for numbers like 50.1 (separator='.') diff --git a/src/js/game/systems/item_processor_overlays.js b/src/js/game/systems/item_processor_overlays.js index 3ba44c7b..0377f779 100644 --- a/src/js/game/systems/item_processor_overlays.js +++ b/src/js/game/systems/item_processor_overlays.js @@ -1,6 +1,6 @@ import { globalConfig } from "../../core/config"; import { Loader } from "../../core/loader"; -import { smoothPulse } from "../../core/utils"; +import { round1DigitLocalized, smoothPulse } from "../../core/utils"; import { enumItemProcessorRequirements, enumItemProcessorTypes } from "../components/item_processor"; import { Entity } from "../entity"; import { GameSystem } from "../game_system"; @@ -92,7 +92,7 @@ export class ItemProcessorOverlaysSystem extends GameSystem { parameters.context.textAlign = "center"; parameters.context.font = "bold 10px GameFont"; parameters.context.fillText( - "" + Math.round(readerComp.lastThroughput * 10) / 10, + round1DigitLocalized(readerComp.lastThroughput), (staticComp.origin.x + 0.5) * globalConfig.tileSize, (staticComp.origin.y + 0.62) * globalConfig.tileSize ); From b1faff31edd15a819f5ce99f1146f8343f3dfa76 Mon Sep 17 00:00:00 2001 From: presdm <72538204+presdm@users.noreply.github.com> Date: Sat, 31 Oct 2020 16:18:24 +0700 Subject: [PATCH 021/127] Update base-ind.yaml (#837) * Update base-ind.yaml Update on tips, matching it with the new improved version, and corrected some things. - PresS#9257 * Update base-ind.yaml * Update base-ind.yaml Fixed some things --- translations/base-ind.yaml | 76 +++++++++++++++++++------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 0c041a6a..3cffbc48 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -1,6 +1,6 @@ steamPage: shortText: shapez.io adalah game tentang membangun pabrik untuk mengotomatiskan - pembuatan dan pemrosesan bentuk-bentuk yang semakin lama semakin kompleks + pembuatan dan pemrosesan bentuk-bentuk yang semakin lama semakin kompleks di dalam peta yang meluas tanpa batas. discordLinkShort: Server Discord Resmi intro: >- @@ -23,7 +23,7 @@ steamPage: - Dukung saya! ❤️ title_future: Konten Terencana planned: - - Penyimpanan Cetak Biru (Eksklusif Versi Lengkap) + - Perpustakaan Cetak Biru (Eksklusif Versi Lengkap) - Achievement Steam - Mode Puzzle - Peta Kecil @@ -125,7 +125,7 @@ dialogs: title: Gagal Menghapus text: "Gagal untuk menghapus data simpanan:" restartRequired: - title: Diperlukan untuk Restart + title: Diperlukan untuk Memulai Kembali (Restart) text: kamu harus memulai kembali permainan untuk menerapkan pengaturan. editKeybinding: title: Ganti Tombol Pintas (Keybinding) @@ -189,17 +189,17 @@ dialogs: disini) markerDemoLimit: desc: Kamu hanya dapat membuat dua penanda pada versi demo. Dapatkan versi - lengkap untuk penanda-penanda tak terhingga! + lengkap untuk penanda-penanda tak terbatas! exportScreenshotWarning: title: Ekspor Screenshot - desc: Kamu meminta untuk mengekspor pabrikmu sebagai screenshot. - Harap ketahui bahwa ini bisa menjadi lambat untuk pabrik + desc: Kamu meminta untuk mengekspor pabrikmu sebagai screenshot. + Harap ketahui bahwa ini bisa menjadi lambat untuk pabrik yang besar dan bahkan dapat membuat permainanmu berhenti! editSignal: title: Atur Tanda descItems: "Pilih item yang telah ditentukan sebelumnya:" descShortKey: ... atau masukkan shortkey dari bentuk (Yang - bisa Kamu buat sendiri disini) + bisa kamu buat sendiri disini) renameSavegame: title: Ganti Nama Data Simpanan desc: Kamu bisa mengganti nama data simpanan di sini. @@ -208,8 +208,8 @@ dialogs: desc: Ada video tutorial yang tersedia untuk level ini! Apakah kamu ingin menontonnya? tutorialVideoAvailableForeignLanguage: title: Tutorial Tersedia - desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam Bahasa Inggris. - Apakaha kamu ingin menontonnya? + desc: Ada video tutorial yang tersedia untuk level ini, tetapi hanya dalam Bahasa Inggris. + Apakah kamu ingin menontonnya? ingame: keybindingsOverlay: moveMap: Geser @@ -285,9 +285,9 @@ ingame: minute: /m hour: /j settingsMenu: - playtime: Waktu bermain + playtime: Waktu Bermain buildingsPlaced: Bangunan - beltsPlaced: Sabuk konveyor + beltsPlaced: Sabuk Konveyor tutorialHints: title: Butuh bantuan? showHint: Tampilkan petunjuk @@ -616,7 +616,7 @@ storyRewards: warna di dalam pengaturan!" reward_mixer: title: Mencampur Warna - desc: Pencampur Warna telah dibuka – Ia mencampur dua warna menjadi satu! + desc: Pencampur Warna telah dibuka – Bangunan ini mencampur dua warna menjadi satu! reward_stacker: title: Penumpuk desc: Kamu sekarang dapat mengombinasikan bentuk-bentuk dengan @@ -625,7 +625,7 @@ storyRewards: akan terpadukan. Apabila tidak bisa, maka input kanan akan diletakkan diatas input kiri! reward_splitter: - title: Pembagi Sederhana + title: Pembagi Kompak desc: Kamu telah membuka varian pembagi dari penyeimbang - Menerima satu input dan membaginya menjadi dua! @@ -703,7 +703,7 @@ storyRewards: digunakan untuk membuat pabrik yang lebih besar lagi dengan memisahkan dan menggabungkan item ke beberapa sabuk konveyor! reward_merger: - title: Penggabung Sederhana + title: Penggabung Kompak desc: Kamu telah membuka varianpenggabung dari penyeimbang - Bangunan ini menerima dua input dan menggabungkannya dalam satu sabuk konveyor! @@ -872,7 +872,7 @@ settings: description: Mengaktifkan vignette, yang menggelapkan sudut-sudut layar dan membuat teks lebih mudah dibaca. rotationByBuilding: - title: Pemutaran masing-masing tipe bangunan + title: Pemutaran Masing-masing Tipe Bangunan description: Setiap tipe bangunan mengingat putaran atau rotasi yang kamu tetapkan kepadanya. Ini mungkin lebih nyaman apabila kamu sering berganti untuk menempatkan berbagai tipe bangunan. @@ -893,31 +893,31 @@ settings: description: Mengatur volume untuk musik lowQualityMapResources: title: Kualitas Peta Sumber Daya Rendah - description: Menyederhanakan rendering sumber daya pada peta saat diperbesar untuk meningkatkan performa. + description: Menyederhanakan rendering sumber daya pada peta saat diperbesar untuk meningkatkan performa. Bahkan terlihat lebih rapi, jadi pastikan untuk mencobanya! disableTileGrid: title: Nonaktifkan Grid - description: Menonaktifkan ubin grid dapat membantu performa. + description: Menonaktifkan ubin grid dapat membantu performa. Ini juga membuat game menjadi lebih rapi! clearCursorOnDeleteWhilePlacing: title: Menghapus Kursor dengan Klik Kanan description: Diaktifkan secara default, menghapus kursor setiap kali kamu mengklik kanan saat kamu memiliki bangunan yang dipilih untuk penempatan. Jika dinonaktifkan, kamu dapat menghapus bangunan dengan mengklik kanan saat meletakkan bangunan. lowQualityTextures: - title: Tekstur kualitas rendah (Jelek) - description: Menggunakan kualitas rendah untuk menyelamatkan performa. + title: Tekstur Kualitas Rendah (Jelek) + description: Menggunakan kualitas rendah untuk menyelamatkan performa. Ini akan membuat penampilan game menjadi jelek! displayChunkBorders: title: Tampilkan Batasan Chunk description: Game ini dibagi-bagi menjadi ubin 16x16 bagian, jika pengaturan ini diaktifkan maka batas dari tiap chunk akan diperlihatkan. pickMinerOnPatch: - title: Memilih ekstraktor pada tampungan sumber daya + title: Memilih Ekstraktor pada Tampungan Sumber Daya description: Diaktifkan secara default, memilih ekstraktor apabila kamu menggunakan pipet ketika mengarahkan pada tampungan sumber daya. simplifiedBelts: title: Sabuk Sederhana (Jelek) description: Tidak merender item pada sabuk konveyor kecuali ketika mengarahkan ke konveyor - untuk menyelamatkan performa. Saya tidak merekomendasikan untuk bermain dengan pengaturan ini + untuk menyelamatkan performa. Saya tidak merekomendasikan untuk bermain dengan pengaturan ini jika kamu tidak benar-benar perlu performanya. enableMousePan: title: Bergeser pada Layar Tepi @@ -980,7 +980,7 @@ keybindings: pasteLastBlueprint: Tempel (paste) cetak biru terakhir cycleBuildings: Ganti bangunan lockBeltDirection: Aktifkan perencana konveyor - switchDirectionLockSide: "Planner: Alih sisi" + switchDirectionLockSide: "Perencana: Alihkan sisi" massSelectStart: Tahan dan seret untuk memulai massSelectSelectMultiple: Pilih berbagai area massSelectCopy: Salin (copy) area @@ -1028,11 +1028,11 @@ demo: exportingBase: Mengekspor keseluruhan pangkalan pusat sebagai gambar settingNotAvailable: Tidak tersedia dalam versi demo. tips: - - Bangunan pusat menerima segala input, tidak hanya bentuk sekarang! + - Bangunan pusat akan menerima segala input, tidak hanya bentuk sekarang! - Pastikan pabrikmu berbentuk modul - akan membantu! - - Jangan membangun terlalu dekat PUSAT, atau akan terjadi kericuhan yang besar! + - Jangan membangun terlalu dekat PUSAT, atau akan menjadi berantakan! - Apabila penumpukkan tidak bekerja, cobalah tukar kedua input. - - Kamu bisa mengaktifkan Perencana Sabuk Konveyor dengan menekan tombol R. + - Kamu bisa mengubah arah Perencana Sabuk Konveyor dengan menekan tombol R. - Menahan CTRL memungkinkan untuk menyeret sabuk konveyor tanpa rotasi otomatis. - Rasio akan tetap sama, selama semua upgrade berada pada Tingkatan yang sama. - Eksekusi atau pembuatan secara serial lebih efisian daripada paralel. @@ -1044,25 +1044,25 @@ tips: - Pengecat memiliki varian lain yang bisa kamu pilih dengan menekan tombol T - Memiliki rasio bangunan yang tepat dapat memaksimalkan efektivitas. - Pada level maksimum, 5 ekstraktor akan memenuhi 1 sabuk konveyor. - - Jangan lupa tentang terowongan! + - Jangan lupa gunakan terowongan! - Kamu tidak perlu membagi item secara merata untuk meraih efisiensi maksimal. - Menahan SHIFT akan mengaktifkan Perencana Sabuk Konveyor, memungkinkan kamu untuk meletakkan sabuk konveyor yang panjang dengan mudah - Pemotong selalu memotong secara vertikal, bagaimanapun orientasinya. - Untuk mendapatkan warna putih, campurkan ketiga warna. - - Tempat penyimpanan memprioritaskan output pertama. - - Gunakan waktu untuk menciptakan desain yang dapat diulang - itu sangat berharga! - - Menahan CTRL memungkinkan untuk meletakkan beberapa bangunan. + - Tempat penyimpanan memprioritaskan output kiri. + - Gunakan waktu untuk menciptakan desain yang dapat diulang - sangat berharga! + - Menahan SHIFT memungkinkan kamu untuk meletakkan beberapa bangunan sekaligus. - Kamu dapat menahan ALT untuk memutar arah pada sabuk konveyor yang sudah diletakkan. - Efisiensi adalah kunci! - Tampungan bentuk yang semakin jauh dari pusat maka akan semakin kompleks. - Mesin-mesin memiliki kecepatan maksimum, bagilah mereka untuk mendapatkan efisiensi maksimal. - Gunakan penyeimbang untuk memaksimalkan efisiensi pabrikmu. - Pabrik yang terorganisir itu penting. Cobalah untuk tidak banyak menyebrangi konveyor. - - Rencanakan terlebih dahulu, atau akan menjadi kericuhan yang besar! - - Jangan hapus pabrik-pabrik lama kamu! Kamu akan memerlukannya untuk membuka tingkatan. - - Cobalah untuk menyelesaikan level 20 sebelum mencari bantuan! + - Rencanakan terlebih dahulu, supaya tidak menjadi berantakan! + - Jangan hapus pabrik-pabrik lama kamu! Kamu akan memerlukannya untuk mengupgrade Tingkatan selanjutnya. + - Cobalah untuk menyelesaikan level 20 atau 26 sendiri terlebih dahulu sebelum mencari bantuan! - Jangan mempersulit hal-hal, cobalah untuk tetap simpel dan kamu akan maju. - - Kamu mungkin perlu menggunakan ulang pabrik-pabrik yang telah kamu buat. Rencanakan pabrik kamu supaya dapat digunakan kembali. + - Kamu mungkin perlu menggunakan ulang pabrik-pabrik yang telah kamu buat. Buat pabrikmu supaya dapat digunakan kembali. - Terkadang, kamu dapat menemukan bentuk yang diperlukan pada peta tanpa harus menumpuknya. - Bentuk penuh windmills dan pinwheels tidak akan pernah muncul secara natural. - Warnai bentuk sebelum memotongnya untuk meningkatkan efisiensi. @@ -1073,14 +1073,14 @@ tips: - Bangunan yang terlau dekat dengan pusat dapat menghalangi projek yang akan datang. - Ikon pin di samping tiap bentuk pada tab upgrade akan mem-pin bentuknya ke layar. - Campur semua warna utama untuk menciptakan warna putih! - - Kamu punya peta yang tak terbatas, jadi jangan memadatkan pabrikmu di pusat, luaskan! + - Kamu punya peta yang tak terbatas. Jadi jangan memadatkan pabrikmu di pusat, luaskan! - Cobalah Factorio juga! Itu game favorit saya. - - Pemotong (Empat Bagian) memotong searah jarum jam mulai dari bagian kanan atas! + - Pemotong (Empat Bagian) memotong searah jarum jam mulai dari bagian kanan atas. - Kamu bisa mengunduh data simpananmu di menu utama (main menu)! - - Game ini memiliki banyak tombol pintas yag sangat berguna! Pastikan untuk mengeceknya di pengaturan. + - Game ini memiliki banyak tombol pintas (keybindings) yag sangat berguna! Pastikan untuk mengeceknya di pengaturan. - Game ini memiliki banyak pengaturan, Pastikan untuk mengeceknya! - - Penanda ke bangunan pusatmu memiliki kompas yang menunjukkan lokasinya! - - Untuk membersihkan sabuk konveyor, pindahkan bagian dan tempel di lokasi yang sama. + - Penanda bangunan pusatmu memiliki kompas yang menunjukkan lokasinya! + - Untuk membersihkan sabuk konveyor, pindahkan (cut) bagian dan tempel (paste) di lokasi yang sama. - Tekan F4 untuk menunjukkan FPS dan Tick Rate kamu. - Tekan F4 dua kali untuk menunjukkan ubin mouse dan kameramu. - Kamu bisa mengklik bentuk yang di-pin di sebelah kiri untuk tidak mem-pinnya lagi. From 9f985babcac8fd21e439fdc944050f7ff6630c06 Mon Sep 17 00:00:00 2001 From: AdJaGu Date: Sat, 31 Oct 2020 05:20:00 -0400 Subject: [PATCH 022/127] Merge base-*.yaml & fix YAML lint errors and warnings. (#918) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update base-en.yaml Updated spelling, grammar, and to a lesser extent the information of some tips. * Update base-en.yaml * Update base-en.yaml * Update base-en.yaml Applied most of EmeraldBlock's suggestions * Update base-ind.yaml Update on tips, matching it with the new improved version, and corrected some things. - PresS#9257 * Update base-cz.yaml Corrected one of the tips. * Update base-zh-TW.yaml * Update base-en.yaml Issue #849 * Few more spelling mistakes. * Update base-en.yaml Fixed inconsistencies and mispellations of Rotator (previously was Rotater, which is wrong) * Update base-en.yaml * Improving existing CZ translations and yaml check * Update base-en.yaml * Update base-zh-TW.yaml * Update base-ind.yaml * Update base-cz.yaml * Completed translation * Update base-en.yaml Changed "20 Upgrade Tiers" to "Unlimited" * Update base-zh-TW.yaml * Update base-pl.yaml Updated some polish translations. * Update base-uk.yaml * Update base-pl.yaml Fix linter * Update base-uk.yaml * Update base-fi.yaml Full translation. Fixed some bad grammar. Anything you need here? * Update base-zh-TW.yaml Finish translating. Still need to review it all over again. * fixing errors * fixed errors. found few paragraphs not translated * changed settings * edits * more edits * quote marks 129 * fixed last errors. should work now * ready now? * colon error fix, hopefully * 2 * new try. still error with colon * Fixed idents * fixed some syntax errors * fixed more idents * Fixed missing lines and stuff * update translation ja-jp * Update base-en.yaml Upgrade text should say ∞ instead of 20 upgrade tiers, for real this time * Update base-en.yaml Changed "it" to "the game" because there wasn't enough context to know what "it" means * Update base-ind.yaml Fixed some things * Update base-kor.yaml * Update base-zh-TW.yaml * A little more Polish * Update base-it.yaml Uploaded the new text relative to the wire layer and other small corrections, it's 100% done * Update base-sv.yaml Advantages, title_future, planned, title_open_source and title_links text translated * Update base-sv.yaml Trailing space fixed * Update base-sv.yaml * Update base-sv.yaml Fix trailing spaces and wierd syntax error * Update base-en.yaml Removed changes present in a future pr * Update for base-ro.yaml I found some words like Roadmap and Standalone to be better suited when they're in English, I think some neologisms are better kept in their language. * Update base-it.yaml * Fix YAML Lint errors and warnings Co-authored-by: Hyperion-21 <69665635+Hyperion-21@users.noreply.github.com> Co-authored-by: presdm <72538204+presdm@users.noreply.github.com> Co-authored-by: RevosCZ <72229413+RevosCZ@users.noreply.github.com> Co-authored-by: Colleabois <12426652+Colleabois@users.noreply.github.com> Co-authored-by: ZrubekLukas <39225468+ZrubekLukas@users.noreply.github.com> Co-authored-by: VL4DL3N <6233477+Vlad1slaw@users.noreply.github.com> Co-authored-by: Jędrzej Stolarz Co-authored-by: Hermanni Saresma Co-authored-by: Nucleareal Co-authored-by: sindaehyeon <56984093+sindaehyeon@users.noreply.github.com> Co-authored-by: BananoGamer <72351355+BananoGamer@users.noreply.github.com> Co-authored-by: Oscar Bäck Co-authored-by: Memel <30528044+MemelDanzig@users.noreply.github.com> Co-authored-by: tobspr --- .vscode/settings.json | 4 +- shapez.code-workspace | 3 +- translations/base-ar.yaml | 3 +- translations/base-cz.yaml | 87 +- translations/base-da.yaml | 3 +- translations/base-de.yaml | 6 +- translations/base-en.yaml | 71 +- translations/base-fi.yaml | 686 ++++++++-------- translations/base-fr.yaml | 9 +- translations/base-ind.yaml | 19 +- translations/base-it.yaml | 92 +-- translations/base-ja.yaml | 151 ++-- translations/base-kor.yaml | 34 +- translations/base-nl.yaml | 12 +- translations/base-pl.yaml | 140 ++-- translations/base-ro.yaml | 51 +- translations/base-ru.yaml | 6 +- translations/base-sv.yaml | 175 ++-- translations/base-uk.yaml | 1444 +++++++++++++++++++++------------- translations/base-zh-TW.yaml | 328 ++++---- 20 files changed, 1799 insertions(+), 1525 deletions(-) diff --git a/.vscode/settings.json b/.vscode/settings.json index 335f886a..e47654f3 100644 --- a/.vscode/settings.json +++ b/.vscode/settings.json @@ -1,3 +1,5 @@ { - "editor.defaultFormatter": "esbenp.prettier-vscode" + "editor.defaultFormatter": "esbenp.prettier-vscode", + "files.trimTrailingWhitespace": true, + "editor.formatOnSave": true } \ No newline at end of file diff --git a/shapez.code-workspace b/shapez.code-workspace index 29dae2a2..e8e7e5b3 100644 --- a/shapez.code-workspace +++ b/shapez.code-workspace @@ -14,6 +14,7 @@ "vetur.format.defaultFormatter.js": "vscode-typescript", "vetur.format.defaultFormatter.ts": "vscode-typescript", "editor.defaultFormatter": "esbenp.prettier-vscode", - "editor.formatOnSave": true + "editor.formatOnSave": true, + "files.trimTrailingWhitespace": true } } \ No newline at end of file diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml index 1ecee9c3..55327fdf 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -6,7 +6,8 @@ steamPage: لعبة شيبز (أشكال) هي لعبة مريحة تقوم فيها ببناء مصانع ووتشغيلها آليا لصناعة أشكال هندسية. - مع التقدم في المستوى، تزداد الأشكال تعقيداً، فيتوجب عليك التوسع في الخريطة اللانهائية، وذلك ليس كافياً للتقدم في مستوى اللعبة حيث عليك صناعة المزيد بأضعاف مضاعفة لتلبية الطلب، الشيء الوحيد الذي يمكنه مساعدتك هو التوسع. + مع التقدم في المستوى، تزداد الأشكال تعقيداً، فيتوجب عليك التوسع في الخريطة اللانهائية، وذلك ليس كافياً للتقدم في مستوى اللعبة حيث عليك صناعة المزيد بأضعاف مضاعفة لتلبية الطلب، الشيء + الوحيد الذي يمكنه مساعدتك هو التوسع. بينما في البداية تقوم بصناعة أشكال مختلفة، تتطلب منك المراحل المتقدمة تلوين هذه الأشكال، حيث يتوجب عليك استخراج وخلط الألوان. diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index 147237d6..add0e440 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -5,9 +5,11 @@ steamPage: intro: >- Máte rádi automatizaci? Tak to jste na správném místě! - shapez.io je relaxační hra, ve které musíte stavět továrny na automatizaci výroby geometrických tvarů. Jak se zvyšuje úroveň, tvary se stávají stále složitějšími a vy se musíte rozšířit po nekonečné mapě. + shapez.io je relaxační hra, ve které musíte stavět továrny na automatizaci výroby geometrických tvarů. Jak se zvyšuje úroveň, tvary se stávají + stále složitějšími a vy se musíte rozšířit po nekonečné mapě. - A jako by to nestačilo, musíte také produkovat exponenciálně více, abyste uspokojili požadavky - jediná věc, která pomáhá, je škálování! Zatímco na začátku tvary pouze zpracováváte, později je musíte obarvit - těžbou a mícháním barev! + A jako by to nestačilo, musíte také produkovat exponenciálně více, abyste uspokojili požadavky - jediná věc, která pomáhá, je škálování! Zatímco + na začátku tvary pouze zpracováváte, později je musíte obarvit - těžbou a mícháním barev! Koupením hry na platformě Steam získáte přístup k plné verzi hry, ale také můžete nejdříve hrát demo verzi na shapez.io a až potom se rozhodnout! title_advantages: Výhody samostatné verze hry @@ -232,8 +234,8 @@ ingame: speed: Rychlost range: Dosah storage: Úložný prostor - oneItemPerSecond: 1 tvar / sekundu - itemsPerSecond: tvarů / s + oneItemPerSecond: 1 kus / sekundu + itemsPerSecond: kusů / s itemsPerSecondDouble: (x2) tiles: dílků levelCompleteNotification: @@ -244,7 +246,7 @@ ingame: notifications: newUpgrade: Nové vylepšení je k dispozici! gameSaved: Hra byla uložena. - freeplayLevelComplete: Level byl dokončen! + freeplayLevelComplete: Úroveň dokončena! shop: title: Vylepšení buttonUnlock: Vylepšit @@ -307,7 +309,7 @@ ingame: 2_3_more_cutters: "Dobrá práce! Teď postavte více pil pro zrychlení tohoto pomalého procesu!

PS: Použijte 0-9 na klávesnici pro rychlejší přístup k budovám!" - 3_1_rectangles: "Teď vytěžte nějaké obdelníkové tvary! Postavte 4 + 3_1_rectangles: "Teď vytěžte nějaké obdélníkové tvary! Postavte 4 extraktory a připojte je k HUBu.

PS: Podržením klávesy SHIFT a tažením pásu aktivujete plánovač pásů!" @@ -367,7 +369,7 @@ ingame: title: Kabely desc: Zcela nový rozměr! darkmode: - title: Dark Mode + title: Tmavý mód desc: Přestanou vás bolet oči! support: title: Podpořte mě @@ -450,7 +452,7 @@ buildings: description: Obarví tvary z levých vstupů barvou z horního vstupu. quad: name: Barvič (čtyřnásobný) - description: Umožnuje obarvit každou čtvrtinu tvaru individuálně. Jen čtvrtiny + description: Umožňuje obarvit každou čtvrtinu tvaru individuálně. Jen čtvrtiny se vstupy barev s logickým signálem na vrstvě kabelů budou obarveny! mirrored: @@ -563,7 +565,7 @@ buildings: description: Virtuálně Spojí tvary dohromady. Pokud nemohou být spojeny, pravý tvar je položen na levý. painter: - name: Virtual barvič + name: Virtuální barvič description: Virtuálně obarví celý tvar v levém vstupu barvou z pravého vstupu. item_producer: default: @@ -575,7 +577,7 @@ storyRewards: title: Řezání tvarů desc: Právě jste odemkli pilu, která řeže tvary svisle na poloviny bez ohledu na její - orientaci!

Nezapoměňte se zbavit zbytku tvarů, jinak + orientaci
!

Nezapomeňte se zbavit zbytku tvarů, jinak se vám produkce zasekne - za tímto účelem jsem vám dal koš, který smaže vše, co do něj vložíte! reward_rotater: @@ -608,7 +610,7 @@ storyRewards: budovami a pásy. reward_rotater_ccw: title: Otáčení II - desc: Odemknuli jste variantu rotoru - Umožňuje vám otáčet + desc: Odemkli jste variantu rotoru - Umožňuje vám otáčet proti směru hodinových ručiček. Vyberte rotor a zmáčkněte 'T' pro přepnutí mezi variantami! reward_miner_chainable: @@ -619,27 +621,27 @@ storyRewards: teď nahrazen ve vašem panelu nástrojů!" reward_underground_belt_tier_2: title: Tunel II. úrovně - desc: Odemknuli jste tunel II. úrovně - Má delší + desc: Odemkli jste tunel II. úrovně - Má delší dosah a také můžete nyní míchat tunely dohromady! reward_cutter_quad: title: Řezání na čtvrtiny - desc: Odemknuli jste variantu pily - Rozebírač vám umožňuje + desc: Odemkli jste variantu pily - Rozebírač vám umožňuje rozdělit tvary na čtvrtiny místo na poloviny! reward_painter_double: title: Dvojité barvení - desc: Odemknuli jste variantu barviče - Funguje stejně jako + desc: Odemkli jste variantu barviče - Funguje stejně jako normální, ale nabarví dva tvary naráz pomocí jedné barvy! reward_storage: title: Sklad - desc: Právě jste odemkli sklad - Umožnuje skladovat přebytečné + desc: Právě jste odemkli sklad - Umožňuje skladovat přebytečné věci až do naplnění kapacity!

Dává prioritu levému výstupu, takže ho také můžete použít jako průtokovou bránu! reward_freeplay: title: Volná hra desc: Zvládli jste to! Odemkli jste mód volné hry! To znamená, - budou od teď náhodně generovány!

Vzhledem k - tomu, že Hub nadále potřebuje propustnost , + že od teď budou tvary náhodně generovány!

Vzhledem k + tomu, že Hub nadále potřebuje propustnost, především doporučuji postavit továrnu, která automaticky doručí požadovaný tvar!

Hub vysílá požadovaný tvar na vrstvu kabelů, takže jediné co musíte udělat, je analyzovat tvar a @@ -653,7 +655,7 @@ storyRewards: (Jsou to ty které jste právě dodali). no_reward: title: Další úroveň - desc: "Tato úroveň vám nic neodemknula, ale s další to přijde!

PS: + desc: "Tato úroveň vám nic neodemkla, ale s další to přijde!

PS: Radši neničte vaše stávající továrny - budete potřebovat všechny produkované tvary později na odemčení vylepšení!" @@ -672,7 +674,7 @@ storyRewards: jednoho! reward_belt_reader: title: Čtečka pásů - desc: Právě jste odemkli čtečku pásů! Umožnuje vám změřit + desc: Právě jste odemkli čtečku pásů! Umožňuje vám změřit propustnost pásu.

A počkejte na odemčení kabelů - později to bude velmi užitečné! reward_rotater_180: @@ -683,7 +685,7 @@ storyRewards: title: Display desc: "Právě jste odemkli Display - Připojte signál ve vrstvě kabelů pro vizualizaci!

PS: Všimli jste si, že čtečka pásů a - sklad vysílájí jejich poslední přečtěný předmět? Zkuste ho ukázat na + sklad vysílají jejich poslední přečtený předmět? Zkuste ho ukázat na displeji!" reward_constant_signal: title: Konstantní signál @@ -791,9 +793,8 @@ settings: SHIFT. offerHints: title: Tipy & Nápovědy - description: Pokud zapnuté, budou se ve hře zobrazovat tipy a nápovědy. Také - schová určité elementy na obrazovce pro jednodušší dostání se do - hry. + description: Pokud bude zapnuté, budou se ve hře zobrazovat tipy a nápovědy. Také + skryje určité elementy na obrazovce pro jednodušší osvojení hry. movementSpeed: title: Rychlost kamery description: Mění, jak rychle se kamera posouvá při použití klávesnice. @@ -806,7 +807,7 @@ settings: extremely_fast: Extrémně rychlá enableTunnelSmartplace: title: Chytré tunely - description: Pokládání tunelů po zapnutí bude samo odstraňovat nepotřebné pásy. + description: Po zapnutí bude vkládání tunelů samo odstraňovat nepotřebné pásy. Umožňuje také potahování tunelů a nadbytečné tunely budou odstraněny. vignette: @@ -857,10 +858,10 @@ settings: description: Vypnutí mřížky částic může pomoct s výkonem. Toto nastavení zlepšuje vzhled hry! clearCursorOnDeleteWhilePlacing: - title: Uvolní kurzor při kliknutím pravým tlačitkem + title: Uvolní kurzor při kliknutím pravým tlačítkem description: Povoleno dle výchozího nastavení, uvolní kurzor pokaždé co kliknete pravým tlačítkem, když máte budovu vybranou pro pokládání. Při - vypnutí, můžete smazat budovy při kliknutí pravým tlačikem spolu + vypnutí, můžete smazat budovy při kliknutí pravým tlačítkem spolu s položením dalších budov. lowQualityTextures: title: Nižší kvalita textur (Horší vzhled) @@ -871,9 +872,9 @@ settings: description: Hra je rozdělena na oblasti 16x16 částic. Pokud je toto nastavení povolené, zobrazí se hranice těchto oblastí. pickMinerOnPatch: - title: Vybrat extraktor na naležistě zdrojů + title: Vybrat extraktor na naleziště zdrojů description: Povoleno dle výchozího nastavení, vybere extraktor, pokud použijete - kapátko pro kliknutí na nalezistě zdrojů. + kapátko pro kliknutí na naleziště zdrojů. simplifiedBelts: title: Zjednodušené pásy (Horší vzhled) description: Nevykresluje předměty na pásech, pokud nad nimi nepřejíždíte @@ -881,8 +882,8 @@ settings: nastavením, pokud opravdu nepotřebujete ušetřit výkon. enableMousePan: title: Posouvání myší - description: Umožnuje posouvání po mapě, pokud myší přejedete na okraj - obrazovky. Rychlost žáleží na nastavení rychlosti pohybu. + description: Umožňuje posouvání po mapě, pokud myší přejedete na okraj + obrazovky. Rychlost záleží na nastavení rychlosti pohybu. zoomToCursor: title: Přiblížení ke kurzoru description: Při zapnutí dojde k přibližování ve směru polohy @@ -974,11 +975,13 @@ about: Pokud se chceš na hře podílet, podívej se na shapez.io na githubu.

- Tato hra by nebyla možná ani bez skvělé Discord komunity okolo Tobiasových her - Vážně by ses měl přijít mrknout na Discord server!

+ Tato hra by nebyla možná ani bez skvělé Discord komunity okolo Tobiasových her - Vážně by ses měl přijít mrknout na + Discord server!

Soundtrack udělal Peppsen - Je úžasnej.

- V neposlední řadě by Tobias (já jen tlumočím) rád poděkoval skvělému kamarádovi Niklasi - Bez hodin strávených u factoria by tato hra nikdy neexistovala. + V neposlední řadě by Tobias (já jen tlumočím) rád poděkoval skvělému kamarádovi + Niklasi - Bez hodin strávených u Factoria by tato hra nikdy neexistovala. changelog: title: Seznam změn demo: @@ -992,12 +995,12 @@ demo: tips: - Hub přijímá vstup jakéhokoliv tvaru, nejen právě požadovaný tvar! - Ujistěte se, že vaše továrny jsou rozšiřitelné - vyplatí se to! - - Nestavte přilíš blízko Hubu nebo vznikne velký chaos! + - Nestavte příliš blízko Hubu nebo vznikne velký chaos! - Pokud skládání nefunguje, zkuste prohodit vstupy. - Směr plánovače pásů můžete změnit stisknutím klávesy R. - - Držení klávesy CTRL umožnuje natažení pásů bez auto-orientace. + - Držení klávesy CTRL umožňuje natažení pásů bez auto-orientace. - Poměry zůstávají stejné, dokud jsou všechny vylepšení na stejné úrovní. - - Sériové zapojení je efektivnější nez paralelní. + - Sériové zapojení je efektivnější než paralelní. - V průběhu hry později odemknete další varianty mnoha budov! - Můžete použít klávesu T k přepnutí mezi různými variantami. - Symetrie je klíčová! @@ -1016,32 +1019,32 @@ tips: - Sklad preferuje levý výstup. - Investujte čas pro vytvoření opakovatelných designů - ulehčí vám to pozdější expanzy! - - Držení klávesy CTRL umožnuje postavit více budov stejného typu. + - Držení klávesy SHIFT umožňuje postavit více budov stejného typu. - Můžete podržet klávesu ALT k obrácení směru pokládaných pásů. - Efektivita je klíčová! - - Nalezistě zdrojů, které jsou více vzdálené od Hubu, jsou větší. + - Naleziště zdrojů, které jsou více vzdálené od Hubu, jsou větší. - Továrny mají omezenou rychlost, rozdělte předměty pro vyšší efektivitu. - Použijte vyvažovače pro maximalizaci efektivity. - Organizace je důležitá. Zkuste nekřížit příliš mnoho pásů. - Plánujte dopředu, abyste předešli vzniku velkého chaosu! - Neodstraňujte své staré továrny! Budete je potřebovat pro další vylepšení. - Před vyhledáním pomoci zkuste sami porazit úroveň 20! - - Snažte se věci nekomplikovat, zůstaňtě u jednoduchých designů a dostanete + - Snažte se věci nekomplikovat, zůstaňte u jednoduchých designů a dostanete se daleko. - Možná budete muset použít stejné továrny i v budoucnu. Vytvořte své továrny takovým stylem, abyste je mohli použít i v dalších případech. - - V nektěrých případech můžete najít celý požadovaný tvar bez nutnosti jeho + - V některých případech můžete najít celý požadovaný tvar bez nutnosti jeho výroby s pomocí kombinátorů. - Celý tvar typu mlýnu se na mapě nikdy nevyskytne. - Obarvěte své tvary před řezáním pro zvýšení efektivity. - S moduly, prostor je pouze vnímáním; starost pro smrtelníky. - - Vytvořtě si samostatnou továrnu jen na plány (blueprinty). Jsou důležité + - Vytvořte si samostatnou továrnu jen na plány (blueprinty). Jsou důležité pro moduly. - Podívejte se zblízka na míchač barev, a vaše otázky budou odpovězeny. - Použijte klávesu CTRL a myš pro označení oblasti. - Pokud stavíte příliš blízko Hubu, v budoucnu můžete narazit na problémy s dalšími projekty. - - Ikona připínáčku vedle každého tvaru vám umožnuje připnout tvar, čímž se + - Ikona připínáčku vedle každého tvaru vám umožňuje připnout tvar, čímž se vám bude neustále zobrazovat vlevo na obrazovce. - Smíchejte všechny základní barvy pro vytvoření bílé barvy! - Vaše mapa je nekonečná, nesnažte se postavit továrnu na malinkém prostoru, @@ -1057,5 +1060,5 @@ tips: - Pro vyčistění pásů, vyjměte budovy z prostoru a pak je zkopírujte zpět na stejné místo. - Stisknutím F4 zobrazíte FPS a rychlost ticků. - - Stisknutím F4 dvakrát zobrazíte častici myši a kamery. + - Stisknutím F4 dvakrát zobrazíte souřadnici myši a kamery. - Můžete kliknout na připínáček vlevo vedle připnutého tvaru k jeho odepnutí. diff --git a/translations/base-da.yaml b/translations/base-da.yaml index f0b5f4e3..68976184 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -992,7 +992,8 @@ about: Hvis du vil kontribuere, tjek shapez.io på github.

- Dette spil ville ikke have været muligt uden det fremragende Discord-fælleskab omkring mine spil - Du burde virkelig deltage på Discordserveren!

+ Dette spil ville ikke have været muligt uden det fremragende Discord-fælleskab omkring mine spil - Du burde virkelig deltage på + Discordserveren!

Lydsporet er lavet af Peppsen - Han er fantastisk.

diff --git a/translations/base-de.yaml b/translations/base-de.yaml index e2792e1b..0c4fa30f 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -7,9 +7,11 @@ steamPage: shapez.io ist ein entspanntes Spiel, in dem du Fabriken zur automatisierten Produktion von geometrischen Formen bauen musst. - Mit steigendem Level werden die Formen immer komplexer, und du musst dich auf der unendlich großen Karte ausbreiten. Das ist noch nicht alles, denn du musst exponentiell mehr produzieren, um die Anforderungen zu erfüllen - Da hilft nur skalieren! + Mit steigendem Level werden die Formen immer komplexer, und du musst dich auf der unendlich großen Karte ausbreiten. Das ist noch nicht alles, denn du musst exponentiell mehr produzieren, + um die Anforderungen zu erfüllen - Da hilft nur skalieren! - Während du am Anfang nur Formen verarbeitest, musst du diese später auch einfärben - Dafür musst du Farben extrahieren und mischen! Der Kauf des Spiels auf Steam gibt dir Zugriff auf die Vollversion, aber du kannst auch zuerst die Demo auf shapez.io spielen und dich später entscheiden! + Während du am Anfang nur Formen verarbeitest, musst du diese später auch einfärben - Dafür musst du Farben extrahieren und mischen! Der Kauf des Spiels auf Steam gibt dir Zugriff auf die + Vollversion, aber du kannst auch zuerst die Demo auf shapez.io spielen und dich später entscheiden! title_advantages: Vorteile der Vollversion advantages: - 12 Neue Level für insgesamt 26 Level diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 9d145999..639dca3a 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -3,7 +3,7 @@ # # Contributing: # -# If you want to contribute, please make a pull request on this respository +# If you want to contribute, please make a pull request on this repository # and I will have a look. # # Placeholders: @@ -30,9 +30,11 @@ steamPage: intro: >- Do you like automation games? Then you are in the right place! - shapez.io is a relaxed game in which you have to build factories for the automated production of geometric shapes. As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + shapez.io is a relaxed game in which you have to build factories for the automated production of geometric shapes. As the level increases, the shapes become more and more complex, and you + have to spread out on the infinite map. - And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! While you only have to process shapes at the beginning, you will later have to color them - by extracting and mixing colors! + And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! While you only have to process shapes at the + beginning, you will later have to color them - by extracting and mixing colors! Buying the game on Steam gives you access to the full version, but you can also play a demo at shapez.io first and decide later! @@ -79,7 +81,7 @@ global: # How big numbers are rendered, e.g. "10,000" thousandsDivider: "," - # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" + # What symbol to use to separate the integer part from the fractional part of a number, e.g. "0.4" decimalSeparator: "." # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. @@ -402,7 +404,9 @@ ingame: waypoints: waypoints: Markers hub: HUB - description: Left-click a marker to jump to it, right-click to delete it.

Press to create a marker from the current view, or right-click to create a marker at the selected location. + description: >- + Left-click a marker to jump to it, right-click to delete it.

Press to create a marker from the current view, or right-click to create a marker at the + selected location. creationSuccessNotification: Marker has been created. # Shape viewer @@ -420,7 +424,8 @@ ingame: Connect the extractor with a conveyor belt to your hub!

Tip: Click and drag the belt with your mouse! 1_3_expand: >- - This is NOT an idle game! Build more extractors and belts to finish the goal quicker.

Tip: Hold SHIFT to place multiple extractors, and use R to rotate them. + This is NOT an idle game! Build more extractors and belts to finish the goal quicker.

Tip: Hold SHIFT to place multiple extractors, and use + R to rotate them. 2_1_place_cutter: >- Now place a Cutter to cut the circles in two halves!

@@ -499,7 +504,7 @@ ingame: support: title: Support me - desc: I develop it in my spare time! + desc: I develop the game in my spare time! # All shop upgrades shopUpgrades: @@ -581,13 +586,13 @@ buildings: rotater: default: - name: &rotater Rotate + name: &rotater Rotator description: Rotates shapes clockwise by 90 degrees. ccw: - name: Rotate (CCW) + name: Rotator (CCW) description: Rotates shapes counter-clockwise by 90 degrees. rotate180: - name: Rotate (180°) + name: Rotator (180°) description: Rotates shapes by 180 degrees. stacker: @@ -705,7 +710,7 @@ buildings: description: Virtually cuts the shape into two halves. rotater: - name: Virtual Rotater + name: Virtual Rotator description: Virtually rotates the shape clockwise. unstacker: @@ -729,16 +734,19 @@ storyRewards: # Those are the rewards gained from completing the store reward_cutter_and_trash: title: Cutting Shapes - desc: You just unlocked the cutter, which cuts shapes in half from top to bottom regardless of its orientation!

Be sure to get rid of the waste, or otherwise it will clog and stall - For this purpose I have given you the trash, which destroys everything you put into it! + desc: >- + You just unlocked the cutter, which cuts shapes in half from top to bottom regardless of its orientation!

Be sure to get rid of the waste, or + otherwise it will clog and stall - For this purpose I have given you the trash, which destroys everything you put into it! reward_rotater: title: Rotating - desc: The rotater has been unlocked! It rotates shapes clockwise by 90 degrees. + desc: The rotator has been unlocked! It rotates shapes clockwise by 90 degrees. reward_painter: title: Painting desc: >- - The painter 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!

PS: If you are colorblind, there is a colorblind mode in the settings! + The painter 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!

PS: If you are + colorblind, there is a colorblind mode in the settings! reward_mixer: title: Color Mixing @@ -746,7 +754,9 @@ storyRewards: reward_stacker: title: Stacker - desc: You can now combine shapes with the stacker! Both inputs are combined, and if they can be put next to each other, they will be fused. If not, the right input is stacked on top of the left input! + desc: >- + You can now combine shapes with the stacker! Both inputs are combined, and if they can be put next to each other, they will be fused. If not, the right + input is stacked on top of the left input! reward_balancer: title: Balancer @@ -758,7 +768,9 @@ storyRewards: reward_rotater_ccw: title: CCW Rotating - desc: You have unlocked a variant of the rotater - It allows you to rotate shapes counter-clockwise! To build it, select the rotater and press 'T' to cycle through its variants! + desc: >- + You have unlocked a variant of the rotator - It allows you to rotate shapes counter-clockwise! To build it, select the rotator and + press 'T' to cycle through its variants! reward_miner_chainable: title: Chaining Extractor @@ -791,7 +803,9 @@ storyRewards: reward_painter_double: title: Double Painting - desc: You have unlocked a variant of the painter - It works similar to the regular painter but processes two shapes at once, consuming just one color instead of two! + desc: >- + You have unlocked a variant of the painter - It works similar to the regular painter but processes two shapes at once, consuming just one color + instead of two! reward_storage: title: Storage @@ -801,11 +815,13 @@ storyRewards: reward_blueprints: title: Blueprints - desc: You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is not free, you need to produce blueprint shapes to afford it! (Those you just delivered). + desc: >- + You can now copy and paste parts of your factory! Select an area (Hold CTRL, then drag with your mouse), and press 'C' to copy it.

Pasting it is + not free, you need to produce blueprint shapes to afford it! (Those you just delivered). reward_rotater_180: - title: Rotater (180°) - desc: You just unlocked the 180 degrees rotater! - It allows you to rotate a shape by 180 degress (Surprise! :D) + title: Rotator (180°) + desc: You just unlocked the 180 degrees rotator! - It allows you to rotate a shape by 180 degrees (Surprise! :D) reward_wires_painter_and_levers: title: >- @@ -846,18 +862,19 @@ storyRewards: title: Virtual Processing desc: >- I just gave a whole bunch of new buildings which allow you to simulate the processing of shapes!

- You can now simulate a cutter, rotater, stacker and more on the wires layer! + You can now simulate a cutter, rotator, stacker and more on the wires layer! With this you now have three options to continue the game:

- Build an automated machine to create any possible shape requested by the HUB (I recommend to try it!).

- Build something cool with wires.

- - Continue to play regulary.

+ - Continue to play normally.

Whatever you choose, remember to have fun! # 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!

PS: Better not destroy your existing factory - You'll need all those shapes later to unlock upgrades! + This level gave you no reward, but the next one will!

PS: Better not destroy your existing factory - You'll need all those shapes later to + unlock upgrades! no_reward_freeplay: title: Next level @@ -986,7 +1003,8 @@ settings: refreshRate: title: Tick Rate description: >- - This determines how many game ticks happen per second. In general, a higher tick rate means better precision but also worse performance. On lower tickrates, the throughput may not be exact. + This determines how many game ticks happen per second. In general, a higher tick rate means better precision but also worse performance. On lower tickrates, the throughput may not be + exact. alwaysMultiplace: title: Multiplace @@ -1037,7 +1055,8 @@ settings: clearCursorOnDeleteWhilePlacing: title: Clear Cursor on Right Click description: >- - Enabled by default, clears the cursor whenever you right click while you have a building selected for placement. If disabled, you can delete buildings by right-clicking while placing a building. + Enabled by default, clears the cursor whenever you right click while you have a building selected for placement. If disabled, you can delete buildings by right-clicking while placing + a building. lowQualityTextures: title: Low quality textures (Ugly) @@ -1211,7 +1230,7 @@ tips: - Cutters always cut vertically, regardless of their orientation. - The storage buffer prioritises the left output. - Invest time to build repeatable designs - it's worth it! - - Holding SHIFT lets you place multiple buildings in one click. + - Holding SHIFT lets you place multiple buildings at a time. - You can hold ALT to invert the direction of placed belts. - Efficiency is key! - Shape patches that are further away from the hub are more complex. diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index 6da1e0bf..56b52600 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -1,57 +1,56 @@ steamPage: shortText: shapez.io on peli tehtaiden rakentamisesta, joiden avulla - automatisoidaan yhä monimutkaisempien muotojen luonti and yhdisteleminen + automatisoidaan yhä monimutkaisempien muotojen luonti ja yhdisteleminen loputtomassa maailmassa. discordLinkShort: Virallinen Discord intro: >- Shapez.io on rento peli, jossa sinun täytyy rakentaa tehtaita geometristen muotojen automatisoituun tuotantoon. - Kun taso kasvaa, muodot tulevat entistä vaikeammaksi sekä sinun täytyy laajentua loputtomassa kartassa. + Kun taso nousee, muodot tulevat entistä vaikeammiksi ja sinun täytyy laajentua loputtomassa kartassa. - Ja jos tämä ei ollut tarpeeksi, niin sinun täytyy tuottaa eksponentiaalisesti enemmän täyttääksesi tarpeet - ainut asia mikä auttaa on skaalautuminen! + Ja jos tämä ei ollut tarpeeksi, niin sinun täytyy tuottaa eksponentiaalisesti enemmän täyttääksesi tarpeet + - ainut asia mikä auttaa on skaalautuminen! - Vaikka alussa vain prosessoit muotoja, myöhemmin niitä pitää maalata - tätä varten täytyy sinun kaivaa ja sekoittaa värejä + Vaikka alussa vain prosessoit muotoja, myöhemmin niitä pitää myös maalata - tätä varten sinun täytyy kerätä ja sekoittaa värejä - Pelin ostaminen Steamista antaa sinulle pääsyn pelin kokoversioon, mutta voit myös pelata kokeiluversiota esin sivuillamme shapez.io ja päättää myöhemmin! - title_advantages: Kokoversion hyödyt + Pelin ostaminen Steamista antaa sinulle pääsyn pelin täysversioon, mutta voit myös pelata kokeiluversiota ensin sivuillamme shapez.io ja päättää myöhemmin! + title_advantages: Täysversion hyödyt advantages: - 12 uutta tasoa nostaen tasojen määrän 26 tasoon! - - 18 uutta rakennusta täysin automatisoidulle tehtaalle! + - 18 uutta laitetta täysin automatisoidulle tehtaalle! - 20 päivitystasoa monelle hauskalle pelitunnille! - - Johdot -päivitys tuoden täyden uuden ulottuvuuden! + - Johdot -päivitys tuo täysin uuden ulottuvuuden! - Tumma teema! - Rajattomat tallennukset - Rajattomat merkit - Tue minua! ❤️ title_future: Suunniteltu sisältö planned: - - Pohjapiirustus kirjasto (Standalone Exclusive) + - Pohjapiirustuskirjasto (Vain täysversiossa) - Steam Achievements - Palapelitila - Minikartta - Modit - - Hiekkalaatikko -tila + - Hiekkalaatikkotila - ... ja paljon muuta! title_open_source: Tämä peli on avointa lähdekoodia! title_links: Linkit links: discord: Virallinen Discord - roadmap: Roadmap + roadmap: Tiekartta subreddit: Subreddit source_code: Lähdekoodi (GitHub) translate: Auta kääntämään text_open_source: >- Kuka tahansa voi osallistua. Olen aktiivisesti mukana yhteisössä ja - yritän tarkistaa kaikki ehdotukset ja ottaa palautteen huomioon missä - mahdollista. - - Muista tarkistaa Trello -lautani, jossa löytyy koko roadmap! + yritän tarkistaa kaikki ehdotukset ja ottaa palautteen huomioon missä mahdollista. + Muista tarkistaa Trello -lautani, jossa löytyy koko tiekartta! global: loading: Ladataan error: Virhe - thousandsDivider: "," - decimalSeparator: . + thousandsDivider: " " + decimalSeparator: "," suffix: thousands: k millions: M @@ -80,7 +79,7 @@ global: space: VÄLILYÖNTI demoBanners: title: Demoversio - intro: Hanki pelin kokoversio avataksesi kaikki ominaisuudet! + intro: Hanki pelin täysversio avataksesi kaikki ominaisuudet! mainMenu: play: Pelaa continue: Jatka @@ -93,10 +92,10 @@ mainMenu: helpTranslate: Auta kääntämään! madeBy: Pelin on tehnyt browserWarning: Anteeksi, mutta pelin tiedetään toimivan huonosti selaimellasi! - Hanki pelin kokoversio tai lataa Google Chrome täyttä tukea varten. + Hanki pelin täysversio tai lataa Google Chrome täyttä tukea varten. savegameLevel: Taso savegameLevelUnknown: Tuntematon taso - savegameUnnamed: Unnamed + savegameUnnamed: Nimetön dialogs: buttons: ok: OK @@ -105,7 +104,7 @@ dialogs: later: Myöhemmin restart: Käynnistä uudelleen reset: Nollaa - getStandalone: Hanki kokoversio + getStandalone: Hanki täysversio deleteGame: Tiedän mitä olen tekemässä viewUpdate: Näytä päivitys showUpgrades: Näytä päivitykset @@ -123,13 +122,13 @@ dialogs: title: Varmista poisto text: Oletko varma, että haluat poistaa valitun pelin?

'' tasossa

Tätä toimintoa ei - voida peruuttaa! + voi peruuttaa! savegameDeletionError: title: Poisto epäonnistui text: "Tallennuksen poisto epäonnistui:" restartRequired: title: Uudelleenkäynnistys vaaditaan - text: Käynnistä peli uudelleen ottaaksesi asetukset käyttöön. + text: "Käynnistä peli uudelleen ottaaksesi asetukset käyttöön." editKeybinding: title: Vaihda pikanäppäin desc: Paina näppäintä tai hiiren nappia, jonka haluat asettaa tai paina @@ -143,15 +142,14 @@ dialogs: featureRestriction: title: Demoversio desc: Yritit käyttää ominaisuutta (), joka ei ole saatavilla - demoversiossa. Harkitse kokoversio avataksesi - kaikki ominaisuudet! + demoversiossa. Hanki täysversio avataksesi kaikki ominaisuudet! oneSavegameLimit: title: Rajoitetut tallennukset - desc: Sinulla voi olla vain yksi tallennus kerrallaan demoversiossa. Poista - vanha tallennus tai hanki kokoversio pelistä! + desc: Sinulla voi olla demoversiossa vain yksi tallennus kerrallaan. Poista + vanha tallennus tai hanki täysversio pelistä! updateSummary: title: Uusi päivitys! - desc: "Tässä uudet muutokset sen jälkeen kun viimeksi pelasit:" + desc: "Tässä uudet muutokset edellisen pelikertasi jälkeen:" upgradesIntroduction: title: Avaa päivitykset desc: Kaikkia muotoja joita tuotat voidaan käyttää päivitysten avaamiseen - @@ -174,16 +172,16 @@ dialogs: rakentamisesta helpompaa. Tässä on muutama, mutta katso kaikki pikanäppäimet!

CTRL + Raahaus: Valitse alue.
VAIHTO: Pidä pohjassa sijoittaaksesi + class='keybinding'>SHIFT
: Pidä pohjassa sijoittaaksesi useita samoja rakennuksia.
ALT: - Käännä sijoitettavien hihnojen suunta.
" + Käännä sijoitettavien kuljettimien suunta.
" createMarker: title: Uusi merkki - desc: Anna merkille merkitsevä nimi. Voit myös liittää lyhyen koodin + desc: Anna merkille kuvaava nimi. Voit myös liittää lyhyen koodin muodosta. (Jonka voit luoda täällä.) titleEdit: Muokkaa merkkiä markerDemoLimit: - desc: Voit tehdä vain kaksi mukautettua merkkiä demoversiossa. Hanki kokoversio + desc: Voit tehdä vain kaksi mukautettua merkkiä demoversiossa. Hanki täysversio saadaksesi loputtoman määrän merkkejä! exportScreenshotWarning: title: Vie kuvakaappaus @@ -194,10 +192,10 @@ dialogs: desc: Sinulla ei ole varaa leikata tätä aluetta! Oletko varma että haluat leikata sen? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Aseta signaali + descItems: "Valitse esivalmisteltu muoto" + descShortKey: ... tai käytä muodon pikanäppäintä + (Jonka voit luoda täällä) renameSavegame: title: Nimeä tallennus uudelleen desc: Voit nimetä tallennuksesi uudelleen täällä. @@ -212,16 +210,16 @@ ingame: moveMap: Liiku selectBuildings: Valitse alue stopPlacement: Lopeta sijoittaminen - rotateBuilding: Käännä rakennusta + rotateBuilding: Käännä laitetta placeMultiple: Sijoita useita reverseOrientation: Käänteinen suunta disableAutoOrientation: Poista automaattinen suunta käytöstä toggleHud: Vaihda valikon näkyvyys - placeBuilding: Sijoita rakennus + placeBuilding: Sijoita laite createMarker: Luo merkki delete: Poista pasteLastBlueprint: Liitä viimeisin piirustus - lockBeltDirection: Ota hihnojen suunnittelija käyttöön + lockBeltDirection: Ota kuljettimen suunnittelija käyttöön plannerSwitchSide: Käännä suunnittelijan puoli cutSelection: Leikkaa copySelection: Kopioi @@ -271,12 +269,12 @@ ingame: description: Näyttää keskusrakennuksessa varastoitujen muotojen määrän. produced: title: Tuotettu - description: Näyttää kaikki muodot mitä tehtaasi tuottaa ja lisäksi myös + description: Näyttää kaikki tehtaidesi tuottamat muodot ja lisäksi myös välituotteet. delivered: title: Toimitettu description: Näyttää muodot, jotka on toimitettu keskusrakennukseen. - noShapesProduced: Toistaiseksi ei muotoja tuotettu. + noShapesProduced: Muotoja ei ole vielä tuotettu. shapesDisplayUnits: second: / s minute: / m @@ -284,7 +282,7 @@ ingame: settingsMenu: playtime: Peliaika buildingsPlaced: Rakennukset - beltsPlaced: Liukuhihnat + beltsPlaced: Kuljettimet tutorialHints: title: Tarvitsetko apua? showHint: Näytä vihje @@ -296,7 +294,7 @@ ingame: hub: Keskusrakennus description: Paina merkkiä hiiren vasemmalla mennäksesi siihen, paina oikeaa nappia poistaaksesi sen.

Paina luodaksesi merkin - nykyisestä näkymästä tai vasen nappi luodaksesi + nykyisestä näkymästä tai vasenta nappia luodaksesi merkin valittuun paikkaan. creationSuccessNotification: Merkki luotiin onnistuneesti. shapeViewer: @@ -306,57 +304,55 @@ ingame: interactiveTutorial: title: Tutoriaali hints: - 1_1_extractor: Laita Kaivaja ympyrämuodon - päälle kaivaaksesi sen! - 1_2_conveyor: "Yhdistä kaivaja liukuhihnalla + 1_1_extractor: Laita Poimija ympyrämuodon + päälle käyttääksesi sitä! + 1_2_conveyor: "Yhdistä poimija kuljettimella keskusrakennukseen!

Vihje: Paina ja - raahaa liukuhihnaa hiirellä!" + raahaa
kuljetinta hiirellä!" 1_3_expand: "Tämä EI OLE tyhjäkäyntipeli! Rakenna lisää - kaivajia ja hihnoja saadaksesi tavoitteen nopeammin - valmiiksi.

Vihje: Pidä pohjassa VAIHTO - laittaaksesi useampia kaivajia ja käytä R + poimijoita ja kuljettimia saavuttaaksesi tavoitteen nopeammin + valmiiksi.

Vihje: Pidä SHIFT pohjassa + laittaaksesi useampia poimijoita ja käytä R kääntääksesi niitä." 2_1_place_cutter: "Nyt aseta Leikkuri leikataksesi ympyrä - puoliksi!

PS: Leikkuri aina leikkaa ylhäältä alaspäin + puoliksi!

PS: Leikkuri aina leikkaa ylhäältä alaspäin riippumatta sen asennosta." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_2_place_trash: Leikkuri voi tukkeutua!

Käytä + roskakoria hävittääksesi (vielä!) tarpeeton jäte. + 2_3_more_cutters: "Hienoa! Lisää kaksi leikkuria nopeuttaaksesi + hidasta prosessia!

PS: Käytä pikanäppäimiä 0-9 + valitaksesi rakennuksen nopeammin!" + 3_1_rectangles: "Poimitaanpa nyt neliöitä! Rakenna 4 + poimijaa ja yhdistä ne keskusrakennukseen.

PS: + Pidä SHIFT painettuna, kun raahaat kuljetinta + aktivoidaksesi kuljetinsuunnittelijan!" + 21_1_place_quad_painter: Aseta nelimaalain ja hanki + ympyröitä, valkoista ja + punaista väriä! + 21_2_switch_to_wires: Vaihda Johdot -tasolle painamalla + E!

Sitten yhdistä kaikki neljä tuloa maalaimeen johdoilla! + 21_3_place_button: MahtaVATA! Aseta nyt kytkin ja yhdistä + se johdoilla! + 21_4_press_button: "Paina kytkintä lähettääksesi tosi- + signaalin ja aktivoidaksesi maalaimen.

PS: Kaikkia + tuloja ei tarvitse kytkeä! Kokeile vaikka vain kahta." connectedMiners: - one_miner: 1 kaivaja - n_miners: kaivajaa + one_miner: 1 poimija + n_miners: poimijaa limited_items: Rajoitettu watermark: title: Kokeiluversio desc: Napsauta tästä nähdäksesi Steam version edut! get_on_steam: Hanki Steamista standaloneAdvantages: - title: Hanki kokoversio! + title: Hanki täysversio! no_thanks: Ei kiitos! points: levels: title: 12 Uutta tasoa desc: Yhteensä 26 tasoa! buildings: - title: 18 Uutta rakennusta + title: 18 Uutta laitetta desc: Automatisoi tehtaasi täysin! savegames: title: ∞ Tallennukset @@ -378,10 +374,10 @@ ingame: desc: Kehitän peliä vapaa-ajallani! shopUpgrades: belt: - name: Hihnat, jakelija & tunneli + name: Kuljettimet, jakelijat & tunnelit description: Nopeus x → x miner: - name: Kaivuu + name: Poiminta description: Nopeus x → x processors: name: Leikkaus, kääntö & pinoaminen @@ -397,7 +393,7 @@ buildings: endOfDemo: Kokeiluversion loppu! belt: default: - name: Liukuhihna + name: Kuljetin description: Kuljettaa esineitä. Pidä pohjassa ja raahaa laittaaksesi useampia. wire: default: @@ -409,20 +405,18 @@ buildings: Eriväriset johdot eivät yhdisty toisiinsa. miner: default: - name: Kaivaja - description: Laita muodon tai värin päälle kaivaaksesi sen. + name: Poimija + description: Laita muodon tai värin päälle poimiaksesi sitä. chainable: - name: Kaivaja (Sarja) - description: Laita muodon tai värin päälle kaivaaksesi sen. Voidaan kytkeä - sarjaan. + name: Poimija (Sarja) + description: Laita muodon tai värin päälle poimiaksesi sitä. Voidaan kytkeä sarjaan. underground_belt: default: name: Tunneli - description: Sallii resurssien kuljetuksen rakennuksien ja hihnojen alta. + description: Sallii resurssien kuljetuksen laitteiden ja kuljetinten alta. tier2: name: Tunneli taso II - description: Sallii resurssien kuljetuksen rakennuksien ja hihnojen alta - pidemmältä kantamalta. + description: Sallii resurssien kuljetuksen laitteiden ja kuljetinten alta pidemmältä matkalta. cutter: default: name: Leikkuri @@ -442,7 +436,7 @@ buildings: name: Kääntäjä (vastapäivään) description: Kääntää muotoja 90 astetta vastapäivään. rotate180: - name: Kääntäjä (180) + name: Kääntäjä (180°) description: Kääntää muotoja 180 astetta. stacker: default: @@ -455,22 +449,21 @@ buildings: description: Sekoittaa kaksi väriä lisäaineiden avulla. painter: default: - name: Maalari + name: Maalain description: Maalaa vasemmasta sisääntulosta tulevan muodon ylemmästä sisääntulosta tulevalla värillä. mirrored: - name: Maalari + name: Maalain description: Maalaa vasemmasta sisääntulosta tulevan muodon alemmasta sisääntulosta tulevalla värillä. double: - name: Maalari (kaksinkertainen) - description: Värjää vasemmasta sisääntulosta tulevat muodot ylemmästä + name: Maalain (kaksinkertainen) + description: Maalaa vasemmasta sisääntulosta tulevat muodot ylemmästä sisääntulosta tulevalla värillä. quad: - name: Maalari (neljännes) - description: Allows you to color each quadrant of the shape individually. Only - slots with a truthy signal on the wires layer - will be painted! + name: Maalain (neljännes) + description: Maalaa jokaisen neljänneksen erikseen. Vain ruudut + joissa signaali on tosi johtotasolla maalataan. trash: default: name: Roskakori @@ -478,23 +471,23 @@ buildings: balancer: default: name: Tasaaja - description: Monikäyttöinen - Jaa sisääntulot tasaisesti kaikkiin ulostuloihin. + description: Monikäyttöinen - Jakaa sisääntulot tasaisesti kaikkiin ulostuloihin. merger: name: Yhdistäjä (compact) - description: Yhdistää kaksi hihnaa yhteen. + description: Yhdistää kaksi kuljetinta yhteen. merger-inverse: name: Yhdistäjä (compact) - description: Yhdistää kaksi hihnaa yhteen. + description: Yhdistää kaksi kuljetinta yhteen. splitter: name: Erottaja (compact) - description: Erottaa hihnan kahteen hihnaan. + description: Erottaa kuljettimen kahteen kuljettimeen. splitter-inverse: name: Erottaja (compact) - description: Erottaa hihnan kahteen hihnaan. + description: Erottaa kuljettimen kahteen kuljettimeen. storage: default: name: Varasto - description: Varasotoi ylijäämätavarat tiettyyn kapasiteettiin asti. Priorisoi vasemman ulostulon + description: Varastoi ylijäämätavarat tiettyyn kapasiteettiin asti. Priorisoi vasemman ulostulon ja voidaan käyttää ylivuotoporttina. wire_tunnel: default: @@ -513,92 +506,89 @@ buildings: default: name: AND portti description: Lähettää totuusarvon "1", jos molemmat sisääntulot ovat totta. (Totuus tarkoittaa, - että muoto, väri tai totuusarvo "1") + että muoto, väri tai binääriarvo on "1") not: name: NOT portti description: Lähettää totuusarvon "1", jos sisääntulot eivät ole totta. - (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") + (Totuus tarkoittaa, että muoto, väri tai binääriarvo on "1") xor: name: XOR portti description: Lähettää totuusarvon "1", jos yksi sisääntuloista on totta, mutta kaikki eivät. - (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") + (Totuus tarkoittaa, että muoto, väri tai binääriarvo on "1") or: name: OR portti description: Lähettää totuusarvon "1", jos yksi sisääntuloista on totta. - (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") + (Totuus tarkoittaa, että muoto, väri tai binääriarvo on "1") transistor: default: name: Transistori description: Lähettää pohjasignaalin eteenpäin, jos sivusisääntulo on totta. - (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") + (Totuus tarkoittaa, että muoto, väri tai binääriarvo on "1") mirrored: name: Transistori description: Lähettää pohjasignaalin eteenpäin, jos sivusisääntulo on totta. - (Totuus tarkoittaa, että muoto, väri tai totuusarvo "1") + (Totuus tarkoittaa, että muoto, väri tai binääriarvo on "1") filter: default: name: Suodatin description: Yhdistä signaali reitittääksesi kaikki vastaavat tavarat ylös, - ja jäljelle jäämät vasemmalle. Voidaan ohjata myös binääriarvoilla. + ja jäljelle jäävät vasemmalle. Voidaan ohjata myös binääriarvoilla. display: default: name: Näyttö - description: Yhdistö signaali näyttääksesi sen näytöllä. Voi olla muoto, + description: Yhdistä signaali näyttääksesi sen näytöllä. Voi olla muoto, väri tai binääriarvo. reader: default: - name: Hihnanlukija - description: Mittaa hihnan keskiarvosuorituskyky. Antaa viimeksi luetun - tavaran signaalin johtotasolla (kun saavutettu). + name: Kuljetinanturi + description: Mittaa kuljettimen keskiarvosuorituskykyä. Antaa viimeksi luetun + tavaran signaalin johtotasolla (kunhan se on avattu). analyzer: default: name: Tutkija - description: Analysoi ylä oikean neljänneksen alimmasta tavaran tasosta ja + description: Analysoi ylä-oikean neljänneksen alimmasta tavaran tasosta ja palauttaa sen muodon ja värin. comparator: default: name: Vertain - description: Palauttaa binääriarvon "1", jos molemmat signaalit ovat täysin samat. - Voi verrata värejä, tavaroita, ja binääriarvoja. + description: Palauttaa totuusarvon "1", jos molemmat signaalit ovat täysin samat. + Voi verrata värejä, tavaroita ja binääriarvoja. virtual_processor: default: name: Virtuaalileikkuri - description: Virtuaalisesti leikkaa tavara kahteen puoliskoon. + description: Leikkaa tavara virtuaalisesti kahteen puoliskoon. rotater: - name: Virtuaalikääntäjä Rotater - description: Virtuaalisesti käännä tavara, sekä myötäpäivään että vastapäivään. + name: Virtuaalikääntäjä + description: Käännä tavara virtuaalisesti, sekä myötäpäivään että vastapäivään. unstacker: name: Virtuaalierottaja - description: Virtuaalisesti erota ylin taso oikeaan ulostuloon ja jäljelle jäävät + description: Erota ylin taso virtuaalisesti oikeaan ulostuloon ja jäljelle jäävät vasempaan ulostuloon. stacker: name: Virtuaaliyhdistäjä - description: Virtuaalisesti yhdistä oikea tavara vasempaan. + description: Yhdistä oikea tavara virtuaalisesti vasempaan. painter: - name: Virtuaalimaalaaja - description: Virtuaalisesti maalaa tavara alhaalta sisääntulosta oikean sisääntulon värillä. + name: Virtuaalimaalain + description: Maalaa virtuaalisesti tavara alhaalta sisääntulosta oikean sisääntulon värillä. item_producer: default: - name: Item Producer - description: Saatavilla vain hiekkalaatikkotilassa. Palauttaa + name: Signaaligeneraattori + description: Saatavilla vain hiekkalaatikkotilassa. Lähettää johtotasolla annetun signaalin normaaliin tasoon. storyRewards: reward_cutter_and_trash: title: Muotojen Leikkaus - desc: You just unlocked the cutter, which cuts shapes in half - from top to bottom regardless of its - orientation!

Be sure to get rid of the waste, or - otherwise it will clog and stall - For this purpose - I have given you the trash, which destroys - everything you put into it! + desc: Avasit juuri leikkurin. Se leikkaa muotoja ylhäältä alaspäin + ja tuottaa muodon molemmat puoliskot. Jos käytät vain yhden puoliskon, tuhoa toinen + puolisko tai se jumittaa leikkurin! - Siksi sinulla on + roskakori, joka tuhoaa kaiken sinne laittamasi! reward_rotater: title: Kääntö - desc: Avasit Kääntäjän! Se kääntää muotoja myötäpäivään 90 - astetta. + desc: Avasit Kääntäjän! Se kääntää muotoja myötäpäivään 90 astetta. reward_painter: title: Värjäys - desc: "Avasit Värjääjän - Kaiva joitain värialueita - (Samanlailla kuin muotoja) ja yhdistä se muotoon värjääjän + desc: "Avasit Maalaimen - Poimi joitain värialueita + (Samoin kuin muotoja) ja yhdistä se muotoon maalaimen avulla!

PS: Jos olet värisokea, asetuksissa on tila värisokeille!" reward_mixer: @@ -607,53 +597,52 @@ storyRewards: lisäaineiden avulla tällä rakennuksella! reward_stacker: title: Yhdistäjä - desc: Nyt voit yhdistää muotoja Yhdistäjällä! Molemman + desc: Nyt voit yhdistää muotoja Yhdistäjällä! Molemmat sisääntulot yhdistetään, jos ne laitetaan vierekkäin, niistä tulee - sulatettu. Jos ne eivät ole vierekkäin, + sulautettu. Jos ne eivät ole vierekkäin, oikeanpuoleinen sisääntulo kasataan vasemman päälle! reward_splitter: - title: Tasaaja - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + title: Erottaja + desc: Avasit juuri Erottajan, version + Tasaajasta - Se jakaa yhden sisääntulon kahteen! reward_tunnel: title: Tunneli desc: Avasit Tunnelin - Nyt voit kuljettaa tavaroita - liukuhihnoilla rakennusten ja liukuhihnojen alta! + kuljettimilla laitteiden ja toisten kuljettimien alta! reward_rotater_ccw: - title: Vastapäivään Kääntö - desc: Avasit uuden muodon Kääntäjästä - Se sallii kääntämisen + title: Kääntö vastapäivään + desc: Avasit uuden version Kääntäjästä - Se sallii kääntämisen vastapäivään! Sen voi rakentaa valitsemalla kääntäjän ja - painamalla 'T' vaihtaaksesi sen muotoja! + painamalla 'T' vaihtaaksesi sen versioita! reward_miner_chainable: - title: Sarja Kaivaja - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + title: Sarjapoimija + desc: "Avasit juuri Sarjapoimijan! Se voi + siirtää resurssejaan muihin poimijoihin, joten + voit hankkia resursseja tehokkaammin!

PS: Vanha + poimija on nyt korvattu työkalupalkissa!" reward_underground_belt_tier_2: title: Tunneli Taso II - desc: Avasit uuden muodon Tunnelista - Siinä on pidempi - matka, ja voit myös yhdistellä ja sovitella tunneleita! + desc: Avasit uuden version Tunnelista - Siinä on pidempi + kantama, ja voit myös yhdistellä ja sovitella tunneleita! reward_cutter_quad: - title: Neljäsosa Leikkaus - desc: Avasit muodon Leikkurista - Se sallii muotojen - leikkaamisen neljään osaan kahden sijaan! + title: Neljännesleikkuri + desc: Avasit version Leikkurista - Se sallii muotojen + leikkaamisen neljään osaan kahden sijasta! reward_painter_double: - title: Kaksinkertainen Värjäys - desc: Avasit muodon Värjääjästä - Se toimii samanlailla kuin - normaali värjääjä, mutta käsittelee kaksi muotoa + title: Tuplamaalain + desc: Avasit version Maalaimesta - Se toimii samoin kuin + normaali maalain, mutta käsittelee kaksi muotoa kerrallaan käyttäen vain yhden värin kahden sijaan! reward_storage: - title: Varasto Puskuri - desc: You have unlocked the storage building - It allows you to - store items up to a given capacity!

It priorities the left - output, so you can also use it as an overflow gate! + title: Varastopuskuri + desc: Olet avannut Varaston - Voit varastoida + resursseja tiettyyn rajaan saakka!

Priorisoi vasemman ulostulon + ja voidaan käyttää ylivuotoporttina! reward_freeplay: title: Vapaapeli - desc: You did it! You unlocked the free-play mode! This means - that shapes are now randomly generated!

+ desc: Onnistuit! Avasit juuri vapaapelimuodon! + Muodot luodaan nyt satunnaisesti

Since the hub will require a throughput from now on, I highly recommend to build a machine which automatically delivers the requested shape!

The HUB outputs the requested @@ -662,82 +651,75 @@ storyRewards: reward_blueprints: title: Piirustukset desc: Nyt voit Kopioida ja Liittää paloja tehtaastasi! Valitse - alue (pidä pohjassa CTRL ja raahaa hiirellä), ja paina 'C' - kopioidaksesi.

Sen liittäminen ei ole - ilmaista, sinun täytyy tuottaa piirustus - muotoja jotta sinulla on varaa siihen! (Ne mitkä juuri - toimitit). + alue (pidä CTRL pohjassa ja raahaa hiirellä), ja paina 'C' + kopioidaksesi piirrustuksen.

Sen liittäminen ei ole + ilmaista. Sinun täytyy tuottaa piirustusmuotoja, + jotta sinulla on varaa siihen! (Ne mitkä juuri toimitit). no_reward: title: Seuraava taso - desc: "This level gave you no reward, but the next one will!

PS: Better - don't destroy your existing factory - You need all - those shapes later again to unlock upgrades!" + desc: "Et saanut palkintoa tältä tasolta, mutta seuraavalta tasolta saat!

PS: Parempi + olla tuhoamatta vanhoja tehtaita - Tarvitset kaikkia + muotoja myöhemmin avataksesi päivityksiä!" no_reward_freeplay: title: Seuraava taso - desc: Onnittelut! Muuten, lisää sisältöä on suunniteltu itsenäiseen versioon! + desc: Onnittelut! Muuten, lisää sisältöä on suunniteltu täysversioon! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + title: Tasaaja + desc: Monikäyttöinen tasaaja avattu - Voit rakentaa + sen avulla isompia tehtaita erottaen ja yhdistäen + tavaroita useille kuljettimille! reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Kompakti Yhdistäjä + desc: Avasit yhdistäjän, joka on versio + tasaajasta - Se yhdistää kaksi sisääntuloa yhdeksi reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Kuljetinanturi + desc: Olet avannut Kuljetinanturin! Voit mitata kuljettimen + tehokkuutta.

Ja odotahan vain, kunhan saat Johdot auki. Sitten tämä on kätevä! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Kääntäjä (180°) + desc: Avasit juuri 180-asteen Kääntäjän! - Sillä voit + kääntää muotoa 180 astetta (Ylläripylläri! :D) reward_display: - title: Display - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + title: Näyttö + desc: "Avasit juuri Näytön - Yhdistä signaali näyttöön + Johto-tasolla visualisoidaksesi sen

PS: Huomasitko, että kuljetinanturi ja varasto näyttävät viimeisimmän esineen? Yritäpä saada se näkyviin näytölle!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Jatkuva Signaali + desc: Avasit Jatkuvan Signaalin laitteen johtotasolla! + Tämä on hyödyllinen esimerkiksi yhdistettynä + tavarasuodattimeen.

Jatkuva signaali voi lähettää esim. + muodon, värin tai binääriarvon (1 / 0). reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Logiikkaportit + desc: Avasit Logiikkaportit (heh,heh)! Niistä ei tarvitse innostua, + mutta ne ovat oikeasti tosi päheitä!

Logiikkaporteilla + voit suorittaa AND, OR, XOR ja NOT operaatioita.

Kaupanpäällisiksi sait + myös transistorin! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Virtuaaliprosessointi + desc: Sait juuri hyvän setin uusia laitteita, joiden avulla + voit simuloida muotojen prosessointia!

Nyt voit + simuloida leikkuria, kääntäjää, pinoajaa ja muita johtotasolla! + Sinulla on nyt kolme vaihtoehtoa pelin jatkamiseen:

- + Rakenna automatisoitu kone luodaksesi mikä tahansa + keskusrakennuksen vaatima muoto (Suosittelen kokeilemaan!).

- Rakenna + jotakin hienoa johdoilla.

- Jatka pelaamista + tavallisesti.

Mitä valitsetkin, muista pitää hauskaa! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + title: Johdot & Nelimaalain + desc: "Avasit juuri Johtotason: Se on erillinen + taso tavallisen tason päällä ja sieltä löytyy useita uusia + mekaniikkoja!

Aluksi avasin sinulle Nelimaalaimen + - Yhdistä johtotasolla lokerot, joihin haluat maalia

+ Vaihtaaksesi johtotasolle, paina E.

+ PS: Aktivoi vinkit asetuksissa nähdäksesi Johdot-tutoriaalin!" reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Esinesuodatin + desc: Olet avannut Esinesuodattimen! Se lähettää esineet + joko ylös tai oikealle riippuen siitä vastaavatko ne + signaalia johtotasolla vai eivät.

Voit myös lähettää + binääriarvon (1 / 0) aktivoidaksesi tai sammuttaaksesi sen. reward_demo_end: title: Kokeiluversion loppu! desc: Olet läpäissyt kokeiluversion! @@ -777,7 +759,7 @@ settings: disabled: Pois käytöstä scrollWheelSensitivity: title: Suurennusherkkyys - description: Vaihtaa kuinka herkkä suurennus on (Joko hiiren rulla tai ohjauslevy). + description: Vaihtaa suurennuksen herkkyyttä (Joko hiiren rulla tai ohjauslevy). sensitivity: super_slow: Erittäin hidas slow: Hidas @@ -786,7 +768,7 @@ settings: super_fast: Erittäin nopea movementSpeed: title: Liikkumisnopeus - description: Muuttaa kuinka nopeasti näkymä liikkuu kun käytetään näppäimistöä. + description: Muuttaa näkymän liikkumisnopeutta kun käytetään näppäimistöä. speeds: super_slow: Erittäin hidas slow: Hidas @@ -796,16 +778,16 @@ settings: extremely_fast: Supernopea language: title: Kieli - description: Vaihda kieltä. Kaikki käännökset ovat käyttäjien tekemiä ja + description: Vaihtaa kieltä. Kaikki käännökset ovat käyttäjien tekemiä ja saattavat olla puutteellisia! enableColorBlindHelper: title: Värisokeatila - description: Ottaa käyttöön useita työkaluja, jotka sallivat pelin pelaamisen + description: Ottaa käyttöön useita työkaluja, jotka helpottavat pelaamista jos olet värisokea. fullscreen: title: Kokonäyttö - description: On suositeltava pelata tätä peliä kokonäytön tilassa saadaksesi - parhaan kokemuksen. Saatavilla vain itsenäisessä versiossa. + description: Peliä suositellaan pelattavaksi kokonäytön tilassa + parhaan kokemuksen saamiseksi. Saatavilla vain täysversiossa. soundsMuted: title: Mykistä äänet description: Jos käytössä, mykistää kaikki ääniefektit. @@ -822,7 +804,7 @@ settings: title: Virkistystaajuus description: Jos sinulla on 144hz näyttö, muuta virkistystaajuus täällä jotta pelin simulaatio toimii oikein isommilla virkistystaajuuksilla. - Tämä voi laskea FPS nopeutta, jos tietokoneesi on liian hidas. + Tämä voi laskea FPS-nopeutta, jos tietokoneesi on liian hidas. alwaysMultiplace: title: Monisijoitus description: Jos käytössä, kaikki rakennukset pysyvät valittuina sijoittamisen @@ -831,84 +813,72 @@ settings: offerHints: title: Vihjeet & oppaat description: Tarjoaa pelaamisen aikana vihjeitä ja oppaita. Myös piilottaa - tietyt käyttöliittymäelementit tietyn tason mukaan, jotta + tietyt käyttöliittymäelementit tason mukaan, jotta alkuunpääseminen olisi helpompaa. enableTunnelSmartplace: title: Älykkäät tunnelit description: Kun käytössä, tunnelin sijoittaminen automaattisesti poistaa - tarpeettomat liukuhihnat. Tämä myös ottaa käyttöön tunnelien - raahaamisen ja ylimääräiset tunnelit poistetaan. + tarpeettomat kuljettimet. Tämä myös ottaa käyttöön tunnelien + raahaamisen ja ylimääräisten tunnelien poiston. vignette: title: Vinjetointi description: Ottaa käyttöön vinjetoinnin, joka tummentaa näytön kulmia ja tekee tekstin lukemisesta helpompaa. rotationByBuilding: - title: Kiertäminen rakennustyypin mukaan - description: Jokainen rakennustyyppi muistaa kierron, jonka viimeksi asetit - yksilöllisesti. Tämä voi olla mukavampi vaihtoehto jos usein - sijoitat eri rakennustyyppejä. + title: Kiertäminen laitetyypin mukaan + description: Muistaa jokaisen laitetyypin viimeisimmän kiertoasetuksen. + Tämä voi olla mukavampi vaihtoehto jos sijoitat usein eri laitetyyppejä. compactBuildingInfo: - title: Kompaktit rakennusten tiedot - description: Lyhentää rakennusten tietolaatikoita näyttämällä vain niiden - suhteet. Muuten rakennuksen kuvaus ja kuva näytetään. + title: Kompaktit laitetiedot + description: Lyhentää laitteiden tietolaatikoita näyttämällä vain niiden + suhteet. Muuten laitteen kuvaus ja kuva näytetään. disableCutDeleteWarnings: title: Poista leikkaus/poisto -varoitukset - description: Poista varoitusikkunat jotka ilmestyy kun leikkaat/poistat enemmän - kuin 100 entiteettiä + description: Poista varoitusikkunat, jotka ilmestyvät kun leikkaat/poistat enemmän + kuin 100 entiteettiä. soundVolume: title: Efektien äänenvoimakkuus - description: Aseta äänenvoimakkuus efekteille + description: Aseta ääniefektien äänenvoimakkuus musicVolume: title: Musiikin äänenvoimakkuus - description: Aseta äänenvoimakkuus musiikille + description: Aseta musiikin äänenvoimakkuus lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Alhaisen tason resurssit + description: Yksinkertaistaa resurssikenttien ulkonäön suurennetussa näkymässä + suorituskyvyn parantamiseksi. Näyttää jopa siistimmältä, joten kannattaa kokeilla! disableTileGrid: title: Poista ruudukko - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + description: Poistaa ruudukon ja parantaa suorituskykyä. Pelialue näyttää myös siistimmältä! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Tyhjennä kursori oikalla klikillä + description: Oletuksena päällä. Tyhjentää kursorin klikattaessa oikealla kun laite on valittu asetettavaksi. lowQualityTextures: title: Alhaisen tason tekstuurit (ruma) description: Käyttää alhaisen tason tekstuureja tehojen säästämiseksi. Tämä muutta pelin rumaksi! displayChunkBorders: - title: Näytä kimpaleiden reunus Display Chunk Borders - description: Pel on jaettu 16x16 kimpaleisiin. Jos tämä asetus on käytössä, + title: Näytä kimpaleiden reunus + description: Peli on jaettu 16x16 kimpaleisiin. Jos tämä asetus on käytössä, reunat jokaiselle kimpaleelle näytetään. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Valitse poimija resurssikentässä + description: Oletuksena päällä. Valitsee poimijan jos käytät pipettiä resurssikentän päällä. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Yksinkertaiset kuljettimet (ruma) + description: Ei näytä tavaroita kuljettimella, ellei hiiren osoitin ole sen päällä. Asetusta ei suositella, ellet todella tarvitse lisätehoja. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Ruudun liikuttaminen hiirellä + description: Liikuttaa ruutua siirrettäessä hiiri reunaan. Nopeus määritellään liikenopeuden asetuksissa. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Suurenna kursoriin + description: Aktivoituna suurentaa näkymää hiiren osoittimen suuntaan. Muuten suurentaa ruudun keskelle. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Kartan resurssien koko + description: Määrittää muotojen koon kartalla (loitonnettaessa). rangeSliderPercentage: % keybindings: title: Pikanäppäimet - hint: "Tip: Muista käyttää CTRL, SHIFT ja ALT! Ne ottavat käyttöön erilaisia + hint: "Vinkki: Muista käyttää CTRL, SHIFT ja ALT! Ne ottavat käyttöön erilaisia sijoitteluvaihtoehtoja." resetKeybindings: Nollaa pikanäppäimet categoryLabels: @@ -934,51 +904,51 @@ keybindings: menuOpenShop: Päivitykset menuOpenStats: Tilastot toggleHud: Vaihda valikon näkyvyys - toggleFPSInfo: Vaihda FPS and Virheenkorjaus tiedot + toggleFPSInfo: Vaihda FPS- and virheenkorjaustiedot switchLayers: Vaihda tasoa exportScreenshot: Vie koko tukikohta kuvana - belt: Liukuhihna + belt: Kuljetin underground_belt: Tunneli - miner: Kaivaja + miner: Poimija cutter: Leikkuri rotater: Kääntäjä stacker: Pinoaja mixer: Värinsekoittaja - painter: Värjääjä + painter: Maalain trash: Roskakori wire: Johto pipette: Pipetti rotateWhilePlacing: Käännä - rotateInverseModifier: "Modifier: Käännä sen sijaan vastapäivään" + rotateInverseModifier: "Muutos: Käännä vastapäivään" cycleBuildingVariants: Valitse muotoja confirmMassDelete: Poista alue pasteLastBlueprint: Liitä viimeisin piirustus - cycleBuildings: Valitse Rakennuksia - lockBeltDirection: Ota liukuhihnasuunnittelija käyttöön - switchDirectionLockSide: "Planner: Muuta sivua" + cycleBuildings: Valitse rakennuksia + lockBeltDirection: Ota kuljetinsuunnittelija käyttöön + switchDirectionLockSide: "Suunnittelija: Muuta sivua" massSelectStart: Pidä pohjassa ja raahaa aloittaaksesi massSelectSelectMultiple: Valitse useita alueita massSelectCopy: Kopioi alue massSelectCut: Leikkaa alue placementDisableAutoOrientation: Poista automaattinen suunta käytöstä placeMultiple: Pysy sijoittamistilassa - placeInverse: Käännä automaattinen hihnan suunta päinvastoin + placeInverse: Käännä automaattinen kuljettimen suunta päinvastoin menuClose: Sulje valikko - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + balancer: Tasaaja + storage: Varasto + constant_signal: Jatkuva signaali + logic_gate: Logiikkaportti + lever: Kytkin (tavallinen) + filter: Suodatin + wire_tunnel: Johtojen risteys + display: Näyttö + reader: Kuljetinanturi + virtual_processor: Virtuaalileikkuri + transistor: Transistori + analyzer: Muotoanalysaattori + comparator: Vertaa + item_producer: Signaaligeneraattori (Hiekkalaattikko) + copyWireValue: "Johdot: Kopioi arvo kursorin kohdalta" about: title: Tietoja tästä pelistä body: >- @@ -986,13 +956,11 @@ about: href="https://github.com/tobspr" target="_blank">Tobias Springer (tämä on minä).

- Jos haluat osallistua, tarkista shapez.io GitHubissa.

- - Tämä peli ei olisi ollut mahdollista ilman suurta Discord -yhteisöä pelini ympärillä - Sinun kannattaisi liittyä Discord palvelimelleni!

+ Tämän pelin tekeminen ei olisi ollut mahdollista ilman suurta Discord-yhteisöä pelini ympärillä - Voisit liittyä Discord palvelimelleni!

Ääniraidan on tehnyt Peppsen - Hän on mahtava.

- Lopuksi, isot kiitokset minun parhaalle kaverilleni Niklas - Ilman meidän factorio istuntoja tätä peliä ei olisi koskaan ollut olemassa. + Lopuksi, isot kiitokset parhaalle kaverilleni Niklakselle - Ilman meidän factorio istuntoja tätä peliä ei olisi koskaan olemassa. changelog: title: Muutosloki demo: @@ -1004,63 +972,59 @@ demo: exportingBase: Viedään koko tukikohta kuvana settingNotAvailable: Ei saatavilla demoversiossa. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. + - Keskusrakennus huolii minkä tahansa muodon, ei ainoastaan tarvittua muotoa! + - Varmista tehtaittesi modulaarisuus - se kannattaa! + - Älä rakenna liian lähelle keskusrakennusta tai olet pian pulassa! + - Jos pinoaminen ei toimi, kokeile vaihtaa syöttöjä. + - Voit vaihtaa kuljetinsuunnittelijan suuntaa painamalla R. + - CTRL:n painaminen antaa vetää kuljettimia ilman automaattisuuntausta. + - Suhteet säilyvät samana, kunhan kaikki pivityset ovat samalla tasolla. + - Sarjassa tekeminen on tehokkaampaa, kuin rinnan. + - Rakennuksista avautuu lisää versioita myöhemmin pelissä! + - Paina T vaihtaaksesi versioiden välillä. - Symmetria on keskeistä! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. + - Voit yhdistellä eri tasojen tunneleita. + - Yritäö rakentaa kompakteja tehtaita - se kannattaa! + - Maalaimesta on peilikuvaversio, jonka saat painamalla T + - Rakennusten oikea suhde maksimoi tehokkuuden. + - Maksimitasolla 5 poimijaa täyttää yhden kuljettimen. + - Älä unohda tunneleita! + - Asioita ei tarvitse jakaa tasan parhaan tehokkuuden saavuttamiseksi. + - SHIFTinpainaminen aktivoi kuljetinsuunnittelijan, joka helpottaa pitkien linjojen rakentamista. + - Leikkurit leikkaavat aina pystysuunnassa riippumatta niiden asemoinnista. - Sekoita kolmea väriä saadaksesi valkoista. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. + - Varasto priorisoi ensimmäisen lähdön. + - Käytä aikaa toistettavien rakennelmien tekoon - se kannattaa! + - CTRLia painamalla voit asettaa useita rakennuksia. + - ALTia voit vaihtaa kuljetinten suuntaa. - Tehokkuus on keskeistä! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. + - Muotokentät ovat monimutkaisempia kauempana keskusrakennuksesta. + - Koneiden nopeus on rajoitettu. Jaa töitä useammalle koneelle tehokkuuden maksimoimiseksi + - Käytä tasaajia tehokkuuden maksimoimiseksi. + - Järjestys on tärkeää. Vältä liiallista kuljetinten risteämistä. + - Suunnittele etukäteen tai jodut keskelle kaaosta! + - Älä poista vanhoja tehtaitasi! Tarvitset niitä päivitysten avaamiseen. + - Yritä läpäistä taso 20 itseksesi, ennen kuin etsit apuja! + - Älä monimutkaista asioita. Yksinkertainen vie pitkälle. + - Saatat joutua käyttämään tehtaitasi uudelleen myöhemmin. Rakenna niistä kierrätettäviä. + - Joskus tarvitsemasi muoto löytyy suoraan kartalta, etkä tarvitse pinoajia. + - Kokonaiset tuulimyllyt ja piikkipyörät eivät synny luonnollisesti. + - Tehokkainta on maalata muodot ennen leikkausta. + - Moduleissa tila on vain havainto; kuolevaisten huoli. + - Tee erilliset mallitehtaat. Ne ovat tärkeitä modulaarisuudessa. + - Katso tarkkaan värinsekoitinta ja kysymyksiisi vastataan. + - CTRL + hiiren vasen nappi valitsee alueen. + - Liian lähelle keskusrakennusta rakennettu tehdas on tiellä myöhemmissä projekteissa. + - Nastaikoni päivityslistan muotojen vieressä kiinnittää muodon ruudulle. + - Sekoita kaikkia päävärejä saadaksesi valkoista! + - Kartta on ääretön. Älä rakenna tehtaitasi liian ahtaasti, laajenna! + - Kokeile myös Factoriota! Se on lempipelini. + - Nelileikkuri leikkaa myötäpäivään aloittaen yläoikealta! + - Voit ladata tallennuksesi päävalikosta! + - Tässä pelissä on monia käteviä pikanäppäimiä. Muista tutustua asetussivuihin. + - Tässä pelissä on useita asetuksia. Tutustu niihin! + - Keskusrakennuksen merkissä on pieni kompassi osoittamassa sen suuntaa! + - Poistaaksesti kuljettimia leikkaa alue ja liitä se samaan kohtaan - Paina F4 nähdäksesi FPS laskurin ja virkistystaajuuden. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Press F4 kahdesti nähdäksesi hiiren ja kameran ruudun. + - Klikkaa kiinnitetyn muodon vasemmalta puolelta irrottaaksesi sen. diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index bb2ada7c..65d962a2 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -6,9 +6,11 @@ steamPage: intro: >- Vous aimez les jeux d’automatisation ? Ce jeu est pour vous ! - shapez.io est un jeu calme où vous devrez construire des usines pour produire automatiquement des formes géométriques. À mesure que le niveau augmente, les formes deviennent de plus en plus complexes, et vous devrez vous étendre sur la carte infinie. + shapez.io est un jeu calme où vous devrez construire des usines pour produire automatiquement des formes géométriques. À mesure que le niveau augmente, les formes deviennent de plus en plus + complexes, et vous devrez vous étendre sur la carte infinie. - Et en plus, vous devrez aussi produire de plus en plus pour satisfaire la demande. La seule solution est de construire en plus grand ! Au début vous ne ferez que découper les formes, mais plus tard vous devrez les peindre — et pour ça vous devrez extraire et mélanger des couleurs ! + Et en plus, vous devrez aussi produire de plus en plus pour satisfaire la demande. La seule solution est de construire en plus grand ! Au début vous ne ferez que découper les formes, mais + plus tard vous devrez les peindre — et pour ça vous devrez extraire et mélanger des couleurs ! En achetant le jeu sur Steam, vous aurez accès à la version complète, mais vous pouvez aussi jouer à une démo sur shapez.io et vous décider ensuite ! title_advantages: Avantages de la version complète @@ -1028,7 +1030,8 @@ about: Si vous souhaitez contribuer, allez voir shapez.io sur GitHub.

- Ce jeu n’aurait pas pu être réalisé sans la précieuse communauté Discord autour de mes jeux — Vous devriez vraiment rejoindre le serveur Discord !

+ Ce jeu n’aurait pas pu être réalisé sans la précieuse communauté Discord autour de mes jeux — Vous devriez vraiment rejoindre le + serveur Discord !

La bande son a été créée par Peppsen — Il est génial !

diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 3cffbc48..2da9b377 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -6,9 +6,11 @@ steamPage: intro: >- Kamu suka game otomasi? Maka kamu berada di tempat yang tepat! - shapez.io adalah game santai dimana kamu harus membuat pabrik untuk mengotomatiskan produksi bentuk-bentuk geometris. Semakin meningkatnya level, bentuk-bentuknya menjadi lebih kompleks, dan kamu perlu meluaskan pabrikmu semakin jauh lagi. + shapez.io adalah game santai dimana kamu harus membuat pabrik untuk mengotomatiskan produksi bentuk-bentuk geometris. Semakin meningkatnya level, bentuk-bentuknya menjadi lebih kompleks, + dan kamu perlu meluaskan pabrikmu semakin jauh lagi. - Dan jita itu tidak cukup, kamu juga perlu memproduksi bentuk secara eksponensial untuk memenuhkan kebutuhan - hal yang membantu hanyalah memperbesar pabrik! Walaupun kamu hanya perlu memproses bentuk di awal, nantinya kamu harus memberinya warna - dengan mengekstrak dan mencampur warna! + Dan jita itu tidak cukup, kamu juga perlu memproduksi bentuk secara eksponensial untuk memenuhkan kebutuhan - hal yang membantu hanyalah memperbesar pabrik! Walaupun kamu hanya perlu + memproses bentuk di awal, nantinya kamu harus memberinya warna - dengan mengekstrak dan mencampur warna! Membeli game ini di Steam memberikan kamu akses ke versi lengkap, namun kamu juga dapat mencoba demo dan memutuskan nanti! title_advantages: Keuntungan Versi Lengkap @@ -325,7 +327,8 @@ ingame: bawah
apapun orientasinya." 2_2_place_trash: Pemotong dapat tersumbat dan macet!

Gunakan tong sampah untuk membuang sisa (!) yang saat ini tidak diperlukan. - 2_3_more_cutters: "Kerja yang bagus! Sekarang letakkan 2 pemotong lagi untuk mempercepat + 2_3_more_cutters: + "Kerja yang bagus! Sekarang letakkan 2 pemotong lagi untuk mempercepat proses ini!

NB: Gunakan tombol 0-9 untuk mengakses bangunan lebih cepat!" 3_1_rectangles: "Sekarang ekstrak beberapa persegi! Bangun 4 @@ -893,7 +896,8 @@ settings: description: Mengatur volume untuk musik lowQualityMapResources: title: Kualitas Peta Sumber Daya Rendah - description: Menyederhanakan rendering sumber daya pada peta saat diperbesar untuk meningkatkan performa. + description: + Menyederhanakan rendering sumber daya pada peta saat diperbesar untuk meningkatkan performa. Bahkan terlihat lebih rapi, jadi pastikan untuk mencobanya! disableTileGrid: title: Nonaktifkan Grid @@ -901,7 +905,9 @@ settings: Ini juga membuat game menjadi lebih rapi! clearCursorOnDeleteWhilePlacing: title: Menghapus Kursor dengan Klik Kanan - description: Diaktifkan secara default, menghapus kursor setiap kali kamu mengklik kanan saat kamu memiliki bangunan yang dipilih untuk penempatan. Jika dinonaktifkan, kamu dapat menghapus bangunan dengan mengklik kanan saat meletakkan bangunan. + description: >- + Diaktifkan secara default, menghapus kursor setiap kali kamu mengklik kanan saat kamu memiliki bangunan yang dipilih untuk penempatan. Jika dinonaktifkan, kamu dapat menghapus + bangunan dengan mengklik kanan saat meletakkan bangunan. lowQualityTextures: title: Tekstur Kualitas Rendah (Jelek) description: Menggunakan kualitas rendah untuk menyelamatkan performa. @@ -1016,7 +1022,8 @@ about: Lagunya dibuat oleh Peppsen - Dia mengagumkan.

- Akhir kata, banyak terima kasih kepada teman baik saya Niklas - Tanpa sesi-sesi factorio kami, permainan ini tidak mungkin tercipta. + Akhir kata, banyak terima kasih kepada teman baik saya Niklas - Tanpa sesi-sesi factorio kami, permainan ini tidak mungkin + tercipta. changelog: title: Catatan Perubahan demo: diff --git a/translations/base-it.yaml b/translations/base-it.yaml index f03072e1..f1ed9ba4 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -207,13 +207,12 @@ dialogs: title: Rinomina salvataggio. desc: Qui puoi cambiare il nome del salvataggio. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorial Disponibile + desc: C'è un video tutorial disponibile per questo livello! Vorresti dargli un'occhiata? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutorial Disponibile + desc: C'è un video tutorial per questo livello, ma è disponibile solo in + Inglese. Vorresti dargli un'occhiata? ingame: keybindingsOverlay: moveMap: Sposta @@ -309,30 +308,29 @@ ingame: velocemente.

Suggerimento: Tieni premuto MAIUSC per piazzare estrattori multipli, e usa R per ruotarli." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Ora posiziona un Taglierino per tagliare i cerchi in due + metà!

PS: Il taglierino taglia sempre dall'alto verso il + basso indipendentemente dal suo orientamento." + 2_2_place_trash: Il taglierino può intasarsi e bloccarsi!

Usa un + cestino per sbarazzarti delgli scarti (!) inutilizzati. + 2_3_more_cutters: "Ben fatto! Ora posiziona altri 2 taglierini per velocizzare + questo lento processo!

PS: Usa i numeri da 0 a 9 + per selezionare gli edifici più in fretta!" + 3_1_rectangles: "Ora estraiamo qualche rettangolo! Costruisci 4 + estrattori and connect them to the HUB.

PS: + Tieni premuto SHIFT mentre trascini un nastro per attivare il + pianificatore di nastri!" + 21_1_place_quad_painter: Posiziona il verniciatore quadruplo e prendi dei + cerchi e i colori bianco + rosso! + 21_2_switch_to_wires: Per passare al livello elettrico basta premere + E!

Poi connetti tutti e quattro gli + input del verniciatore con i cavi! + 21_3_place_button: Fantastico! Ora posiziona un Interruttore e connettilo + con i cavi! + 21_4_press_button: "Premi l'interruttore per fargli emettere un segnale di verità + e fargli quindi attivare il vernciatore.

PS: Non c'è bisogno + che tu connetta tutti gli imput! Prova a collegarne solo due." colors: red: Rosso green: Verde @@ -747,13 +745,13 @@ storyRewards: divertirti! reward_wires_painter_and_levers: title: Cavi e Verniciatrice quadrupla - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Hai appena sbloccato il Livello Elettrico: è un livello separato + dal livelo normale e introduce molte altre + meccaniche di gioco!

Per il momento ti ho sbloccato il Verniciatore + Quadruplo - Connetti con il piano elettrico gli spazi + che vorresti colorare!

Per passare al livello elettrico ti basta premere + E.

PS: Attiva gli aiuti nelle + impostazioni per attivare il tutorial dei cavi!" reward_filter: title: Filtro oggetti desc: Hai sbloccato il filtro oggetti! Smisterà gli oggetti @@ -927,13 +925,13 @@ settings: dello schermo. La velocità dipende dall'impostazione Velocità di movimento. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zoom verso il Cursore + description: Se attivato, lo zoom andrà verso la posizione del mouse, + altrimenti sarà verso il centro dello schermo. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Grandezza delle Risorse sulla Mappa + description: Controlla la grandezza delle forme visualizzate sulla mappa (quando si fa lo zoom + indietro). rangeSliderPercentage: % keybindings: title: Comandi @@ -1017,11 +1015,13 @@ about: Se vuoi contribuire visita la pagina github di shapez.io.

- Realizzare questo gioco non sarebbe stato possibile senza la grande community di Discord per i miei giochi - Unisciti al server di Discord!

+ Realizzare questo gioco non sarebbe stato possibile senza la grande community di Discord per i miei giochi - + Unisciti al server di Discord!

La colonna sonora è stata composta daPeppsen - È un grande.

- Per finire, grazie di cuore al mio migliore amico Niklas - Senza le nostre sessioni su factorio questo gioco non sarebbe mai esistito. + Per finire, grazie di cuore al mio migliore amico Niklas - + Senza le nostre sessioni su factorio questo gioco non sarebbe mai esistito. changelog: title: Registro modifiche demo: @@ -1103,6 +1103,6 @@ tips: - L'etichetta dell'hub ha una piccola bussola per indicarne la direzione! - Per svuotare i nastri, taglia e re-incolla l'area nello stesso punto. - Premi F4 per mostrare FPS e Tick al secondo. - - Press F4 due volte per mostrare la casella del cursore e della telecamera. + - Premi F4 due volte per mostrare la casella del cursore e della telecamera. - Puoi cliccare a sinistra di una forma fermata a schermo per rimuoverla dalla lista. diff --git a/translations/base-ja.yaml b/translations/base-ja.yaml index ed10eab3..a49611a2 100644 --- a/translations/base-ja.yaml +++ b/translations/base-ja.yaml @@ -177,13 +177,13 @@ dialogs: title: セーブデータの名前を変更 desc: セーブデータの名前を変更することができます tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: チュートリアル視聴可能 + desc: このレベルで利用できるチュートリアルの動画があります! + 見ますか? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: チュートリアル視聴可能 + desc: このレベルで利用できるチュートリアルの動画がありますが、それは + 英語です。見ますか? ingame: keybindingsOverlay: moveMap: マップ移動 @@ -222,10 +222,10 @@ ingame: speed: スピード range: レンジ storage: ストレージ - oneItemPerSecond: 1 アイテム / 秒 - itemsPerSecond: アイテム / 秒 + oneItemPerSecond: 1アイテム/秒 + itemsPerSecond: アイテム/秒 itemsPerSecondDouble: (x2) - tiles: タイル + tiles: タイル levelCompleteNotification: levelTitle: レベル completed: 完了 @@ -287,34 +287,32 @@ ingame: もっと早く要件を満たせるように、追加の抽出機とベルトを設置しましょう。

Tip: SHIFT キーを押し続けると抽出機を連続配置できます。Rキーで設置方向を回転できます。" - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "次に、切断機を設置し、円を + 2分割します!

追記: 切断機はそれの向きに関わらず、縦の線で切断します。" + 2_2_place_trash: 切断機は詰まる場合があります!

+ ゴミ箱を利用して、不必要な部品を廃棄することができます。 + 2_3_more_cutters: "いいですね!更に2つ以上の切断機を設置して + 処理をスピードアップさせましょう!

追記: 0から9 + のホットキーを使用すると素早く部品にアクセスできます。" + 3_1_rectangles: "それでは四角形を抽出しましょう!4つの抽出機を + 作成してそれをハブに接続します。

追記: + SHIFTを押しながらベルトを引くと + ベルトプランナーが有効になります!" + 21_1_place_quad_painter: 四色着色機を設置して、 + そして + を抽出します! + 21_2_switch_to_wires: Eを押すとワイヤレイヤに + 切り替えできます!

そして4つの入力全てを + ケーブルで接続します! + 21_3_place_button: いいね!次にスイッチを設置して + そのワイヤに接続します! + 21_4_press_button: "スイッチを押して真らしい信号を + 発するようにして、着色機を有効化します。

追記: 全ての + 入力を接続する必要はありません!2つだけ接続してみてください。" connectedMiners: one_miner: 1個の抽出機 n_miners: 個の抽出機 - limited_items: に制限されます + limited_items: に制限 watermark: title: デモバージョン desc: Steamバージョンの特典を確認するには、ここをクリックしてください! @@ -530,7 +528,8 @@ buildings: storyRewards: reward_cutter_and_trash: title: 形の切断 - desc: 切断機が利用可能になりました。これは入力された形を、向きを考慮せず上下の直線で半分に切断します。

利用しない側の出力に注意しましょう。破棄するなどをしない限り詰まって停止してしまいます + desc: + 切断機が利用可能になりました。これは入力された形を、向きを考慮せず上下の直線で半分に切断します。

利用しない側の出力に注意しましょう。破棄するなどをしない限り詰まって停止してしまいます - このためにゴミ箱も用意しました。入力アイテムをすべて破棄できます! reward_rotater: title: 回転 @@ -549,9 +548,9 @@ storyRewards: desc: 積層機で形を組み合わせ可能になりました。双方の入力を組み合わせ、もし連続した形になっていればそれらは融合してひとつになります! もしできなかった場合は、左の入力の上に右の入力が重なります。 reward_balancer: title: 分配機/合流機 - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: 多機能な分配機/合流機が利用可能になりました - より + 大規模な工場を構築するため、複数のベルト間でアイテムを合流、 + 分配できます! reward_tunnel: title: トンネル desc: トンネルが利用可能になりました。 - 他のベルトや建造物の地下を通してベルトが配置可能です! @@ -561,10 +560,10 @@ storyRewards: 反時計回りの回転ができるようになります! 回転機を選択し、'T'キーを押すことで方向の切り替えができます reward_miner_chainable: title: 連鎖抽出機 - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + desc: "連鎖抽出機が利用可能になりました!他の + 他の抽出機に出力を渡すことができるので、 + 資源の抽出がより効率的になります!

補足: ツールバーの + 旧い抽出機が置き換えられました!" reward_underground_belt_tier_2: title: トンネル レベルII desc: トンネルのバリエーションが利用可能になりました。 - @@ -590,44 +589,49 @@ storyRewards: 通常の着色機と同様に機能しますが、ひとつの色の消費で一度に2つの形を着色処理できます! reward_storage: title: 余剰の貯蓄 - desc: ゴミ箱のバリエーションが利用可能になりました。 - 容量上限までアイテムを格納することができます!

+ desc: + ゴミ箱のバリエーションが利用可能になりました。 - 容量上限までアイテムを格納することができます!

左側の出力を優先するため、オーバーフローゲートとしても使用できます! reward_blueprints: title: ブループリント - desc: 工場の建造物のコピー&ペーストが利用可能になりました! 範囲選択(CTRLキーを押したままマウスドラッグ)した状態で、'C'キーを押すことでコピーができます。

ペーストはタダではありません。ブループリントの形を生産することで可能になります!(たった今納品したものです) + desc: >- + 工場の建造物のコピー&ペーストが利用可能になりました! + 範囲選択(CTRLキーを押したままマウスドラッグ)した状態で、'C'キーを押すことでコピーができます。

ペーストはタダではありません。ブループリントの形を生産することで可能になります!(たった今納品したものです) reward_rotater_180: title: 180度の回転 desc: 回転機のバリエーションが利用可能になりました! 180度の回転ができるようになります!(サプライズ! :D) reward_wires_painter_and_levers: title: ワイヤ&着色機(四分割) - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "ワイヤレイヤが利用可能になりました: これは通常の + レイヤーの上にある別のレイヤであり、多くの新しい要素が + あります!

最初に、四色 + 着色機が利用可能になりました - 着色するスロットをワイヤレイヤで + 接続します!

ワイヤレイヤに切り替えるには、 + Eを押します。

補足: 設定でヒントを有効にすると、 + ワイヤのチュートリアルが有効になります。" reward_filter: title: アイテムフィルタ - desc: アイテムフィルタが利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、 + desc: + アイテムフィルタが利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、 アイテムを上部または右側の出力に分離します。

真偽値(0/1)信号を利用することで どんなアイテムでも通過させるか、または通過させないかを選ぶこともできます。 reward_display: title: ディスプレイ - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + desc: "ディスプレイが利用可能になりました - ワイヤレイヤで + 信号を接続することで、その内容を視認することができます!

補足: ベルトリーダーとストレージが + 最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに + 表示してみてください!" reward_constant_signal: title: 定数信号 - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 or 0). + desc: 定数信号がワイヤレイヤで + 利用可能になりました!これは例えばアイテムフィルタに接続する + 場合に便利です。

定数信号は + 形状または + 真偽値(1か0)を発信できます。 reward_logic_gates: title: 論理ゲート - desc: 論理ゲートが利用可能になりました! 興奮するほどでは ありませんが、これらは非常に優秀です!

+ desc: + 論理ゲートが利用可能になりました! 興奮するほどでは ありませんが、これらは非常に優秀です!

AND, OR, XOR and NOTを計算できます!

ボーナスとしてトランジスタも追加しました! reward_virtual_processing: @@ -639,7 +643,8 @@ storyRewards: - ワイヤでイカしたものを作る。

- 今までのように工場を建設する。

いずれにしても、楽しんでください! no_reward: title: 次のレベル - desc: "このレベルには報酬はありません。次にはあるでしょう!

補足: すでに作った生産ラインは削除しないようにしましょう。 - + desc: + "このレベルには報酬はありません。次にはあるでしょう!

補足: すでに作った生産ラインは削除しないようにしましょう。 - 生産された形はすべて、後にアップグレードの解除のために必要になりま\ す!" no_reward_freeplay: @@ -705,7 +710,7 @@ settings: regular: 普通 fast: 速い super_fast: 超速 - extremely_fast: ちょっぱや + extremely_fast: 極速 language: title: 言語 description: 言語を変更します。すべての翻訳はユーザーからの協力で成り立っており、まだ完全には完了していない可能性があります! @@ -766,7 +771,8 @@ settings: description: 配置用のグリッドを無効にして、パフォーマンスを向上させます。 これにより、ゲームの見た目もすっきりします。 clearCursorOnDeleteWhilePlacing: title: 右クリックで配置をキャンセル - description: デフォルトで有効です。建物を設置しているときに右クリックすると、選択中の建物がキャンセルされます。 + description: + デフォルトで有効です。建物を設置しているときに右クリックすると、選択中の建物がキャンセルされます。 無効にすると、建物の設置中に右クリックで建物を削除できます。 lowQualityTextures: title: 低品質のテクスチャ(視認性低下) @@ -785,13 +791,12 @@ settings: title: マウスで画面を移動 description: 画面の端にカーソルを合わせることで移動できます。移動速度を設定することで、速度を変更できます。 zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: カーソルに向かってズーム + description: 有効にすると、カーソルの方に向かってズームします。 + 無効にすると、画面の中央に向かってズームします。 mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: 資源アイコンのサイズ + description: ズームアウトしたときの図形のサイズを調節します。 keybindings: title: キー設定 hint: "Tip: CTRL, SHIFT, ALTを利用するようにしてください。これらはそれぞれ建造物配置の際の機能があります。" @@ -836,7 +841,7 @@ keybindings: storage: ストレージ wire: ワイヤ constant_signal: 定値信号 - logic_gate: Logic Gate + logic_gate: 論理ゲート lever: スイッチ filter: アイテムフィルタ wire_tunnel: 交差ワイヤ @@ -849,7 +854,7 @@ keybindings: item_producer: なんでも抽出機(サンドボックス) pipette: スポイト rotateWhilePlacing: 回転 - rotateInverseModifier: "Modifier: 逆時計回りにする" + rotateInverseModifier: "変更: 逆時計回りにする" cycleBuildingVariants: バリエーション変更 confirmMassDelete: 複数選択削除の確認 pasteLastBlueprint: 直前のブループリントをペーストする diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml index 34a14fbd..ca2f2cf3 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -265,7 +265,7 @@ ingame: waypoints: 마커 hub: 허브 description: 마커를 좌클릭하여 그곳으로 이동하고, 우클릭으로 삭제할 수 있습니다.

마커를 배치하기 위해 - 키로 지금 있는 위치에 혹은 우클릭하여 원하는 위치에 배치할 수 + 키로 지금 있는 위치에, 또는 우클릭하여 원하는 위치에 배치할 수 있습니다. creationSuccessNotification: 마커가 성공적으로 생성되었습니다. interactiveTutorial: @@ -436,10 +436,10 @@ buildings: wire: default: name: 전선 - description: 아이템, 색상, 또는 불 값 (0 혹은 1)이 될 수 있는 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. + description: 아이템, 색상, 또는 불 값 (0 또는 1) 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. second: name: 전선 - description: 아이템, 색상, 또는 불 값 (0 혹은 1)이 될 수 있는 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. + description: 아이템, 색상, 또는 불 값 (0 또는 1) 신호를 전송합니다. 색이 다른 전선은 서로 연결되지 않습니다. balancer: default: name: 밸런서 @@ -459,19 +459,19 @@ buildings: storage: default: name: 저장고 - description: 아이템을 지정된 용량까지 저장합니다. 왼쪽 출력이 가장 우선되므로 오버플로 회로로 사용할 수 있습니다. + description: 아이템을 지정된 용량까지 저장합니다. 왼쪽 출력이 가장 우선되므로 오버플로로 사용할 수 있습니다. wire_tunnel: default: - name: 전선 교차 장치 + name: 전선 교차기 description: 두 전선이 서로 연결되지 않고 교차할 수 있도록 합니다. constant_signal: default: - name: 일정 신호 - description: 모양, 색상, 또는 불 값 (1 혹은 0)이 될 수 있는 상수 신호를 방출합니다. + name: 일정 신호기 + description: 모양, 색상, 또는 불 값 (1 또는 0) 상수 신호를 방출합니다. lever: default: name: 스위치 - description: 전선 레이어에서 불 값 (1 또는 0)를 방출하도록 전환할 수 있으며, 그 후 아이템 선별같은 구성 요소를 제어하는 데 + description: 전선 레이어에서 불 값 (1 또는 0)을 방출하도록 전환할 수 있으며, 그 후 아이템 선별같은 구성 요소를 제어하는 데 사용될 수 있습니다. logic_gate: default: @@ -593,10 +593,10 @@ storyRewards: 출력이 우선되므로 오버플로 회로로도 활용될 수 있습니다! reward_freeplay: title: 자유플레이 - desc: 드디어 해내셨군요! 자유플레이 모드가 잠금 해제되었습니다! 이는 즉 앞으로 도형이 - 무작위로 생성됩니다.

이제부터 허브는 처리량이 + desc: 드디어 해내셨군요! 자유플레이 모드가 잠금 해제되었습니다! 이제 앞으로 도형이 + 무작위로 생성됩니다.

또한 허브는 처리량이 필요하므로 요청하는 도형을 자동으로 전달하는 공장을 구축하는 것이 좋습니다.

허브는 요청된 도형을 전선 - 레이어에서 출력하므로 이를 분석하고 기반으로 하여 공장을 자동으로 구성하기만 하면 됩니다. + 레이어를 통해 내보내므로 이를 분석하는 구조를 기반으로 하여 공장을 자동으로 구성하기만 하면 됩니다. reward_blueprints: title: 청사진 desc: 이제 공장의 일부를 복사하고 붙여넣는 기능을 사용할 수 있습니다! 영역을 선택 (CTRL 키를 누른 채 @@ -631,10 +631,10 @@ storyRewards: desc: "디스플레이가 잠금 해제되었습니다! 이제 신호를 전선 레이어에 연결해 시각화할 수 있습니다.

추신: 벨트 판독기와 저장고가 마지막으로 읽은 아이템을 출력했나요? 디스플레이로 한번 봐보세요!" reward_constant_signal: - title: 일정 신호 - desc: 전선 레이어에서 구축할 수 있는 일정 신호가 잠금 해제되었습니다! 간단한 예시로, 아이템 - 선별에 연결하여 사용하는 데 유용합니다.

일정 신호는 도형, - 색상, 혹은 불 값 (1 혹은 0)을 출력할 수 있습니다. + title: 일정 신호기 + desc: 전선 레이어에서 구축할 수 있는 일정 신호기가 잠금 해제되었습니다! 간단한 예시로, 아이템 + 선별에 연결하여 사용하는 데 유용합니다.

일정 신호기는 도형, + 색상, 또는 불 값 (1 또는 0)을 출력할 수 있습니다. reward_logic_gates: title: 논리 회로 desc: 논리 회로가 잠금 해제되었습니다! 굳이 흥분할 필요는 없지만, 진짜 멋진 기술입니다!

@@ -862,11 +862,11 @@ keybindings: wire: 전선 balancer: 밸런서 storage: 저장고 - constant_signal: 일정 신호 + constant_signal: 일정 신호기 logic_gate: 논리 회로 lever: 레버 filter: 선별기 - wire_tunnel: 전선 교차 장치 + wire_tunnel: 전선 교차기 display: 디스플레이 reader: 벨트 판독기 virtual_processor: 가상 절단기 diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index e43d6450..bebba218 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -310,13 +310,14 @@ ingame: 2_1_place_cutter: "Plaats nu een Knipper om de cirkels in twee te knippen halves!

PS: De knipper knipt altijd van boven naar onder ongeacht zijn oriëntatie." - 2_2_place_trash: De knipper kan vormen verstoppen en bijhouden!

Gebruik een + 2_2_place_trash: + De knipper kan vormen verstoppen en bijhouden!

Gebruik een vuilbak om van het (!) niet nodige afval vanaf te geraken. 2_3_more_cutters: "Goed gedaan! Plaats nu 2 extra knippers om dit traag process te versnellen!

PS: Gebruik de 0-9 sneltoetsen om gebouwen sneller te selecteren." - 3_1_rectangles: "Laten we nu rechthoeken ontginnen! Bouw 4 + 3_1_rectangles: "Laten we nu rechthoeken ontginnen! Bouw 4 ontginners en verbind ze met de lever.

PS: Houd SHIFT Ingedrukt terwijl je lopende banden plaats om ze te plannen!" @@ -686,8 +687,8 @@ storyRewards: reward_balancer: title: Verdeler desc: De multifunctionele verdeler is nu ontgrendeld - Het kan - gebruikt worden om grotere te knippen en plakken vormen op meerdere - lopende banden te zetten + gebruikt worden om grotere te knippen en plakken vormen op meerdere + lopende banden te zetten reward_merger: title: Compacte samenvoeger desc: Je hebt een variant op de samenvoeger van de @@ -1001,7 +1002,8 @@ about: Als je ook bij wil dragen, ga dan naar shapez.io op github.

- Dit spel was niet mogelijk geweest zonder de geweldige Discord community rondom mijn spellen - Je zou eens lid moeten worden van de Discord server (engelstalig)!

+ Dit spel was niet mogelijk geweest zonder de geweldige Discord community rondom mijn spellen - Je zou eens lid moeten worden van de + Discord server (engelstalig)!

De muziek is gemaakt door Peppsen - Hij is geweldig.

diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index 80b49d99..d42c80f2 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -7,7 +7,7 @@ steamPage: Shapez.io jest spokojną grą, której celem jest budowanie automatycznych fabryk produkujących różne kształty geometryczne. - W miarę zwiększania się poziomów, kształty będą stawać się coraz bardziej skomplikowane, a Twoja fabryka będzie musiała się rozpszetrzenić na mapie o nieskończonej wielkości. + W miarę zwiększania się poziomów, kształty będą stawać się coraz bardziej skomplikowane, a Twoja fabryka będzie musiała się rozprzestrzenić na mapie o nieskończonej wielkości. A jeżeli to było mało, będziesz również musiał produkować coraz więcej kształtów, by zaspokoić wymagania - jedynym rozwiązaniem jest skalowanie fabryki! @@ -207,13 +207,11 @@ dialogs: title: Zmień nazwę zapisu gry desc: Tutaj możesz zmienić nazwę zapisu gry. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Dostępny tutorial + desc: Dla tego poziomu dostępny jest video tutorial. Chcesz go obejrzeć? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Dostępny tutorial + desc: Dla tego poziomu dostępny jest video tutorial w języku angielskim. Chcesz go obejrzeć? ingame: keybindingsOverlay: moveMap: Ruch @@ -316,37 +314,35 @@ ingame: 1_1_extractor: Postaw ekstraktor na źródle kształtu koła, aby go wydobyć! 1_2_conveyor: "Połącz ekstraktor taśmociągiem do głównego - budynku!

Porada: Kliknij i przeciągnij + budynku!

PS: Kliknij i przeciągnij taśmociąg myszką!" 1_3_expand: 'To NIE JEST gra "do poczekania"! Buduj więcej taśmociągów i ekstraktorów, by wydobywać - szybciej.

Porada: Przytrzymaj SHIFT, by + szybciej.

PS: Przytrzymaj SHIFT, by postawić wiele ekstraktorów. Naciśnij R, by je obracać.' - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Teraz umieść przecinak aby przeciąć koła na dwie + połowy!

PS: Przecinak zawsze tnie pionowo + niezależnie od swojej orientacji." + 2_2_place_trash: Przecinak może się zapchać i zablokować!

Użyj + śmietnik aby usunąć obecnie (!) nie potrzebne elementy. + 2_3_more_cutters: "Dobra robota! Teraz umieść 2 kolejne przecinaki,aby przyspieszyć + ten wolny proces!

PS: Użyj klawiszy 0-9, + aby szybciej uzyskać dostęp do budynków!" + 3_1_rectangles: "Teraz wydobądź kilka kwadratów! Wybuduj + ekstraktory i połącz je do głównego budynku.

PS: + Przytrzymaj SHIFT i przeciągnij taśmociąg, aby uruchomić + planer taśmociągu!" + 21_1_place_quad_painter: Umieść malarz poczwórny i wykonaj kilka + biało-czerwonych kółek! + 21_2_switch_to_wires: Przełącz się na warstwę przewodów wciskając + E!

Następnie połącz wszystkie cztery + wejścia malarza przewodem! + 21_3_place_button: Świetnie! Teraz umieść Przełącznik i połącz go + z przewodem! + 21_4_press_button: "Wciśnij przełącznik aby emitował sygnał + Prawda i aktywował malarza.

PS: Nie + musisz łączyć wszystkich wejść! Spróbuj połączyć tylko dwa." connectedMiners: one_miner: 1 ekstraktor n_miners: ekstraktorów @@ -462,9 +458,9 @@ buildings: kształty używając 1 barwnika. quad: name: Malarz (Poczwórny) - description: Allows you to color each quadrant of the shape individually. Only - slots with a truthy signal on the wires layer - will be painted! + description: Pozwala pomalować każdą ćwiartkę osobno. Tylko + sloty z podłączonym sygnałem "Prawda" w warstwie przewodów + będą malowane! mirrored: name: Malarz description: Koloruje kształt za pomocą koloru dostarczonego od boku. @@ -603,7 +599,7 @@ buildings: storyRewards: reward_cutter_and_trash: title: Przecinanie Kształtów - desc: Właśnie odblokowałeś przecinaka, który przecina kstałty + desc: Właśnie odblokowałeś przecinaka, który przecina kształty na pół od góry na dół bez znaczenia na ich orientację!

Upewnij się, że usuwasz śmieci - w przeciwnym przypadku maszyna zapcha się i przestanie @@ -666,7 +662,7 @@ storyRewards: raz, pobierając wyłącznie jeden barwnik! reward_storage: title: Magazyn - desc: Właśnie odblokowałeś magazyn - Pozwala na przecowywanie + desc: Właśnie odblokowałeś magazyn - Pozwala na przechowywanie przedmiotów, do pewnej ilości!

Prawe wyjście posiada większy piorytet, więc może być on użyty jako brama przepełnieniowa! @@ -676,7 +672,7 @@ storyRewards: kształty są teraz losowo generowane!

Od teraz budynek główny będzie wymagał odpowiedniej przepustowości kształtów, zatem sugeruję budowę - maszyny, która będzie atuomatycznie dostarczała wymagany + maszyny, która będzie automatycznie dostarczała wymagany kształt!

Budynek główny emituje wymagany kształt na warstwie przewodów, więc wystarczy analizować ten sygnał i konfigurować fabrykę bazując na nim. @@ -699,9 +695,9 @@ storyRewards: pełnej! reward_balancer: title: Dystrybutor - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: Wielofunkcyjny dystrybutor został odblokowany - Może + być wykorzystany przy budowaniu większych fabryk do łączenia i dzielenia + przedmiotów na kilku taśmociągach! reward_merger: title: Kompaktowy łącznik desc: Właśnie odblokowałeś łącznik - typ @@ -715,7 +711,7 @@ storyRewards: użyteczny! reward_rotater_180: title: Obracacz (180°) - desc: Właśnie odblokowałeś kolejny wariant obraczacza! - + desc: Właśnie odblokowałeś kolejny wariant obrazacza! - Pozwala ci na obrócenie kształtu o 180 stopni! reward_display: title: Wyświetlacz @@ -743,23 +739,23 @@ storyRewards: przecinaka, obracacza, sklejacza i wiele więcej na warstwie przewodów! Teraz masz trzy opcje na kontynuację gry:

- Zbuduj zautomatyzowaną maszynę, która stworzy każdy - kstałt ządany przez budynek główny (Polecam tą opcję!).

- + kształt żądany przez budynek główny (Polecam tą opcję!).

- Zbuduj coś ciekawego za pomocą przewodów.

- Kontynuuj zwykłą rozgrywkę.

Cokolwiek wybierzesz, pamiętaj by się dobrze bawić! reward_wires_painter_and_levers: title: Przewody i poczwórny malarz - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Właśnie odblokowałeś Warstwę Przewodów: Jest to osobna + warstwa powyżej zwykłej warstwy i wprowadza wiele nowych możliwości.

+ Na początku odblokowałem dla Ciebie Poczwórnego Malarza + - Podłącz ćwiartki, które chcesz pomalować, na warstwie przewodów!!

+ Aby przełączyć się na warstwę przewodów, wciśnij + E.

PS: Włącz podpowiedzi w + ustawieniach, aby aktywować samouczek przewodów!" reward_filter: title: Filtr przedmiotów desc: Właśnie odblokowałeś Filtr Przedmiotów! Będzie on - przekirowywał przedmioty do górnego lub prawego wyjścia, zależnie od + przekierowywał przedmioty do górnego lub prawego wyjścia, zależnie od tego, czy pasują one do sygnału z warstwy przewodów.

Możesz również przekazać sygnał typu Prawda/Fałsz, by całkowicie go włączyć lub wyłączyć. @@ -901,12 +897,12 @@ settings: budynki podczas budowania używając tego samego przycisku. lowQualityTextures: title: Tekstury niskiej jakości (Brzydkie) - description: Używa niskej jakości tekstur, by zwiększyć wydajność. Spowoduje to, + description: Używa niskiej jakości tekstur, by zwiększyć wydajność. Spowoduje to, że gra będzie wyglądać bardzo brzydko! displayChunkBorders: - title: Wyświetl granice chunków - description: Gra jest podzielona na chunki o wielkości 16x15 kratek. Włączenie - tego ustawienia powoduje wyświetlenie granicy każdego chunku. + title: Wyświetl granice obszarów + description: Gra jest podzielona na obszary o wielkości 16x15 kratek. Włączenie + tego ustawienia powoduje wyświetlenie granicy każdego obszaru. pickMinerOnPatch: title: Wybierz ekstraktor zamiast źródła description: Domyślnie włączone, wybiera ekstraktor, jeżeli spróbujesz wybrać @@ -922,13 +918,11 @@ settings: granicy ekranu. Szybkość jest zależna od ustawienia Prędkość poruszania. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Powiększ w kierunku kursora + description: Powiększ w kierunku pozycji kursora myszylub do środka ekranu. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Rozmiar mapy zasobów + description: Steruje rozmiarem kształtów w przeglądzie mapy (podczas pomniejszenia). rangeSliderPercentage: % keybindings: title: Klawiszologia @@ -1035,7 +1029,7 @@ tips: - Nie buduj zbyt blisko budynku głównego, albo będziesz miał wielki chaos! - Jeżeli łączenie kształtów nie działa, spróbuj zamienić wejścia. - Możesz zmienić kierunek planera taśmociągów poprzez naciśnięcie R. - - Przytrymanie CTRL pozwala na przeciąganie taśmociągów bez + - Przytrzymanie CTRL pozwala na przeciąganie taśmociągów bez automatycznego zmieniania kierunków. - Stosunku pozostają takie same, dopóki wszystkie ulepszenia są na tym samym poziomie. @@ -1050,13 +1044,13 @@ tips: - Na najwyższym poziomie, 5 ekstraktorów zapełni pojedynczy taśmociąg. - Nie zapomnij o tunelach! - Nie musisz dzielić równo przedmiotów, by osiągnąć pełną wydajność. - - Przytrymanie SHIFT aktywuje planera taśmociągów, pozwalającego ci + - Przytrzymanie SHIFT aktywuje planera taśmociągów, pozwalającego ci na łatwe budowanie długich taśmociągów. - Przecinaki zawsze tną pionowo, nie zważając na ich orientację. - - Zmieszanie wszystich 3 barwników daje biały barwnik. + - Zmieszanie wszystkich 3 barwników daje biały barwnik. - Pierwsze wyjście z magazynu ma najwyższy piorytet. - Zainwestuj czas w budowanie powtarzalnych układów fabryk - warto! - - Przytrymanie CTRL pozwala na układanie wielu budynków tego samego + - Przytrzymanie CTRL pozwala na układanie wielu budynków tego samego typu. - Możesz przytrzymać ALT, by odwrócić kierunek układanych taśmociągów. - Wydajność to klucz do sukcesu! @@ -1073,31 +1067,31 @@ tips: - Możesz potrzebować ponownie używać swoich fabryk w późniejszej fazie rozgrywki. Planuj swoje fabryki, by były zdatne do ponownego użycia. - Czasami znajdziesz wymagany kształt na mapie, bez potrzeby tworzenia go za - pomoca sklejaczy. + pomocą sklejaczy. - Pełne "wiatraczki" nigdy nie pojawią się naturalnie na mapie. - - Maluj swoje kształty przed przecianiem dla maksymalnej wydajności. + - Maluj swoje kształty przed przecinaniem dla maksymalnej wydajności. - Z modułami, miejsce jest tylko tym, co postrzegamy; troska dla śmiertelników - Zbuduj osobną fabrykę schematów. Są one bardzo potrzebne do modułów. - - Obejrz dokładnie mikser kolorów, a wszystkie twoje pytania zostaną + - Obejrzyj dokładnie mikser kolorów, a wszystkie twoje pytania zostaną rozwiązane. - Przytrzymaj CTRL i przeciągnij, by zaznaczyć obszar - Budowanie zbyt blisko budynku głównego może przeszkodzić ci w późniejszych projektach. - Ikona pinezki przy każdym kształcie na liście ulepszeń przypina je na ekranie. - - Połącz wszystkie głowne kolory, by stworzyć biały! + - Połącz wszystkie główne kolory, by stworzyć biały! - Masz nieskończoną mapę, nie ściskaj swojej fabryki, rozszerzaj ją! - Spróbuj też Factorio! To moja ulubiona gra. - Poczwórny przecinak tnie zgodnie z ruchem wskazówek zegara, zaczynając do prawej górnej ćwiartki! - - Możesz pobrać swoje zapisy gry w głownym menu gry! + - Możesz pobrać swoje zapisy gry w głównym menu gry! - Ta gra posiada dużo użytecznych skrótów klawiszowych! Sprawdź stronę ustawień! - Ta gra posiada mnóstwo ustawień, sprawdź je! - - Znacznik do budynku główneko posiada mały kompas, wskazujący do niego + - Znacznik do budynku głównego posiada mały kompas, wskazujący do niego kierunek! - By wyczyścić taśmociągi, wytnij obszar i wklej go w tym samym miejscu. - Naciśnij F4, by zobaczyć ilość FPS i tempo ticków. - Naciśnij F4 dwa razy, by zobaczyć kratkę twojej myszy i kamery. - - Możesz klinąć przypięty kształt po lewej stronie, by go odpiąć. + - Możesz kliknąć przypięty kształt po lewej stronie, by go odpiąć. diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index e90ca308..3a6ca947 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -14,39 +14,39 @@ steamPage: While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! - title_advantages: Standalone Advantages + title_advantages: Avantaje Standalone advantages: - - 12 New Level for a total of 26 levels - - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! - - Wires Update for an entirely new dimension! - - Dark Mode! + - 12 Noi Nivele pentru un total de 26 niveluri + - 18 Noi Clădiri pentru o fabrică complet automatizată! + - 20 de Grade de Upgrade pentru multe ore de distracție! + - Actualizare cu Fire pentru o dimensiune cu totul nouă! + - Temă întunecată! - Unlimited Savegames - - Unlimited Markers - - Support me! ❤️ - title_future: Planned Content + - Marcaje nelimitate! + - Susține-mă! ❤️ + title_future: Conținut Planificat planned: - Blueprint Library (Standalone Exclusive) - - Steam Achievements - - Puzzle Mode - - Minimap - - Mods - - Sandbox mode - - ... and a lot more! - title_open_source: This game is open source! - title_links: Links + - Realizări Steam + - Mod Puzzle + - Hartă + - Mod-uri + - Mod Sandbox + - ... și multe altele! + title_open_source: Acest joc are sursă liberă! + title_links: Link-uri links: - discord: Official Discord + discord: Discord Oficial roadmap: Roadmap subreddit: Subreddit - source_code: Source code (GitHub) - translate: Help translate + source_code: Cod sursă (GitHub) + translate: Ajută la traducere text_open_source: >- - Anybody can contribute, I'm actively involved in the community and - attempt to review all suggestions and take feedback into consideration - where possible. + Oricine poate să contribuie, Sunt implicat activ în comunitate și + încerc să revizuiesc toate sugestiile și să iau păreri și răspunsuri în considerație + oriunde-i posibil. - Be sure to check out my trello board for the full roadmap! + Fii sigur să-mi vezi panoul Trello pentru roadmap-ul întreg! global: loading: Se Încarcă error: Eroare @@ -1004,7 +1004,8 @@ about: Dacă vrei să contribui, verifică shapez.io pe github.

- Acest joc nu ar fi fost posibil fără minunata comunitate de pe Discord pe lângă jocurile mele - Chiar ar trebui să te alături server-ului de Discord!

+ Acest joc nu ar fi fost posibil fără minunata comunitate de pe Discord pe lângă jocurile mele - Chiar ar trebui să te alături + server-ului de Discord!

Coloana sonoră a fost făcută de Peppsen - Este uimitor.

diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index ffbe04e6..23b635b7 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -681,7 +681,8 @@ storyRewards: desc: Поздравляем! Кстати, больше контента планируется для полной версии! reward_balancer: title: Балансер - desc: Многофункциональный банансер разблокирован - Он используется для разделения и обьединения + desc: + Многофункциональный банансер разблокирован - Он используется для разделения и обьединения потора предметов на несколько конвейеров! reward_merger: title: Компактный Соединитель @@ -997,7 +998,8 @@ about: Если вы хотите внести свой вклад игре - shapez.io в github.

- Эта игра не была бы возможна без большого сообщества в дискорде, которое собралось вокруг моих игр - Вам действительно стоит присоединиться к серверу Discord!!

+ Эта игра не была бы возможна без большого сообщества в дискорде, которое собралось вокруг моих игр - Вам действительно стоит присоединиться к + серверу Discord!!

Саундтрек сделал Peppsen - Он потрясающий.

diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index 5b2bcf53..9d4284de 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -15,37 +15,37 @@ steamPage: Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! title_advantages: Standalone Advantages advantages: - - 12 New Level for a total of 26 levels - - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! - - Wires Update for an entirely new dimension! - - Dark Mode! - - Unlimited Savegames - - Unlimited Markers - - Support me! ❤️ - title_future: Planned Content + - 12 Nya nivåer av totalt 26 nivåer! + - 18 Nya byggnader för en fullt automatiserad fabrik! + - 20 Upgraderingsnivåer för många roliga timmar! + - Kabelupdatering för en helt ny dimension! + - Mörkt Läge! + - Obegränsade sparningar! + - Obegränsade markeringar! + - Stötta mig! ❤️ + title_future: Planerat innehåll planned: - - Blueprint Library (Standalone Exclusive) - - Steam Achievements - - Puzzle Mode + - Planbibliotek (Standalone Exclusive) + - Steam prestationer + - Pusselläge - Minimap - Mods - - Sandbox mode - - ... and a lot more! - title_open_source: This game is open source! - title_links: Links + - Sandlådeläge + - ... och mycket mer! + title_open_source: Detta spel har öppen källkod! + title_links: Länkar links: discord: Official Discord roadmap: Roadmap subreddit: Subreddit - source_code: Source code (GitHub) - translate: Help translate + source_code: Källkod (GitHub) + translate: Översättningshjälp text_open_source: >- - Anybody can contribute, I'm actively involved in the community and - attempt to review all suggestions and take feedback into consideration - where possible. + Vem som helst kan bidra, jag är aktivt involverad i gruppen + och försöker granska alla förslag och ta förslag och feedback + i åtanke där det är möjligt. - Be sure to check out my trello board for the full roadmap! + Se till och kolla mitt trello board för hela roadmappen! global: loading: Laddar error: Error @@ -176,8 +176,8 @@ dialogs: rullband.
" createMarker: title: Ny Markör - desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) + desc: Ge det ett meningsfullt namn, du kan också inkludera en kort + nyckel av en form (Som du kan generera här) titleEdit: Ändra Markör markerDemoLimit: desc: Du kan endast ha två markörer i demoversionen. Skaffa den fristående @@ -196,21 +196,20 @@ dialogs: desc: Du har inte råd att placera detta område! Är du säker att du vill klippa det? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: Sätt singal + descItems: "Välj en förvald sak:" + descShortKey: ... eller skriv in kort nyckel av en form + (Som du kan generera här) renameSavegame: title: Byt namn på sparfil desc: Du kan byta namn på din sparfil här. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Handledning Tillgänglig + desc: Det finns en handledningsvideo tillgänglig för denna nivå! Vill du se den? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Handledning Tillgänglig + desc: Det finns en handledningsvideo tillgänglig för denna nivå, men den är bara + tillgänglig på engelska. Vill du se den? ingame: keybindingsOverlay: moveMap: Flytta @@ -479,99 +478,97 @@ buildings: balancer: default: name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + description: Multifunktionell - Distribuerar alla inflöden till alla utflöden. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Merger (Kompakt) + description: Sammansätter två rullband till ett. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Merger (Kompakt) + description: Sammansätter två rullband till ett. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Splitter (Kompakt) + description: Delar ett rullband till två. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Splitter (Kompakt) + description: Delar ett rullband till två. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Lagring + description: Lagra överflödiga saker, till en viss mängd. Prioriterar den vänstra + utflödet och kan användas som en överströmningsgrind. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Korsande sladdar + description: Tillåter två sladdar att korsa varandra utan att koppla samman. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Konstant Signal + description: Avger en konstant signal, som kan vara en form, färg eller boolean (1 / 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Signalknapp + description: Kan ställas om till att ge en booleansk singal (1 / 0) på sladdlagret, + vilket kan användas för att kontrollera till exempel ett sakfilter. logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: AND Grind + description: Avger en booleansk "1" om båda inflöden är positiva. (positiva menas med former, + färger eller booleansk "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NOT Grind + description: Avger en booleansk "1" om inflödet inte är positiv. (positiva menas med former, + färger eller booleansk "1") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: XOR Grind + description: Avger en booleansk "1" om ett av inflöderna är positiv, dock inte om båda är positiva. + (Positiva menas med former, färger eller booleansk "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: OR Grind + description: Avger en booleansk "1" om ett av inflöderna är positiv. (positiva menas med former, + färger eller booleansk "1") transistor: default: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: För fram det undre inflödet om sido inflödet är positivt (en form, + färg eller "1"). mirrored: name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + description: För fram det undre inflödet om sido inflödet är positivt (en form, + färg eller "1"). filter: default: name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + description: Koppla en signal för att dirigera alla matchande objekt till toppen och + dem kvarvarande till höger. Kan kontrolleras med booleanska singaler också. display: default: name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + description: Koppla en singal för att visa den på displayen - Det kan vara en form, + färg eller boolean. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Rullbandsläsare + description: Mäter den genomsnittliga rullbands genomströmningen. Läser ut det sist + lästa saken på sladdlagret (när det är upplåst). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Formanalysator + description: Analyserar den övre högra kvadranten av formens lägsta lager + och returnerar sin form och färg. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Jämför + description: Returnerar booleansk "1" om båda signalerna är exakt lika. Kan jämföra + former, saker och boolean. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Virtuell skärare + description: Skär virtuellt formen till två halvor. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Virtuell roterare + description: Roterar virtuellt formen, både medurs och moturs. unstacker: - name: Virtual Unstacker + name: Virtuell stapelupplösare description: Virtually extracts the topmost layer to the right output and the remaining ones to the left. stacker: diff --git a/translations/base-uk.yaml b/translations/base-uk.yaml index 79de8572..45765dd9 100644 --- a/translations/base-uk.yaml +++ b/translations/base-uk.yaml @@ -1,74 +1,118 @@ +# +# 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: `. They are encapsulated within angle brackets. The correct +# translation for this one in German for example would be: `Taste: ` (notice +# how the placeholder stayed '' 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 — це гра про будування фабрик для автоматизації створення - та обробки все більш складних форм на нескінченно розширюваній мапі. + та обробки все більш складних форм на нескінченно розширюваній карті. + + # This is the text shown above the Discord link discordLinkShort: Official Discord + intro: >- - Shapez.io is a relaxed game in which you have to build factories for the - automated production of geometric shapes. + Shapez.io - розслабляюча гра, в якій вам потрібно будувати фабрики для + автоматизованого виробництва геометричних фігур. - As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + З кожним рівнем зростає складність фігур, і вам доведеться розширювати виробництво на нескінченній карті. - And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + Якщо цього не достатньо, вам також необхідно виробляти експоненціально більше, аби задовільнити потреби що ростуть - може допомогти лише масштабування! - While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + Спочатку ви лише обробляєте фігури, пізніше їх потрібно буде ще й фарбувати - для цього необхідно буде видобувати та змішувати кольори! - Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! - title_advantages: Standalone Advantages + Купуючи гру в Steam ви отримаєте доступ до повної версії гри, але ви також можете спробувати демо-версію гри на shapez.io та вирішити пізніше! + + title_advantages: Переваги повної версії advantages: - - 12 New Level for a total of 26 levels - - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! - - Wires Update for an entirely new dimension! - - Dark Mode! - - Unlimited Savegames - - Unlimited Markers - - Support me! ❤️ - title_future: Planned Content - planned: - - Blueprint Library (Standalone Exclusive) - - Steam Achievements - - Puzzle Mode - - Minimap - - Mods - - Sandbox mode - - ... and a lot more! - title_open_source: This game is open source! - title_links: Links - links: - discord: Official Discord - roadmap: Roadmap - subreddit: Subreddit - source_code: Source code (GitHub) - translate: Help translate - text_open_source: >- - Anybody can contribute, I'm actively involved in the community and - attempt to review all suggestions and take feedback into consideration - where possible. + - 12 нових рівнів що в цілому 26 рівнів + - 18 нових будівель для повної автоматизації фабрики! + - 20 рівнів поліпшення для довготривалої та веселої гри! + - Оновлення "Wires"(Дроти) для цілого нового виміру! + - Нічний режим! + - Необмежена кільксть збережень + - Необмежена кільксть позначок + - Підтримка автора! ❤️ + + title_future: Запланований вміст + planned: + - Бібліотека креслень (лише в Повній версії) + - Досягнення в Steam + - Режим головоломок + - Мінікарта + - Модифікації + - Режим пісочниці + - ... та багато іншого! + + title_open_source: Гра з відкритим кодом! + text_open_source: >- + Будь-хто може зробити свій внесок. Я активно беру участь у спільноті та + намагаюсь переглянути всі пропозиції та враховувати відгуки. + + Не забудьте перевірити дошку trello, щоб отримати розгорнутий список планів! + + title_links: Посилання + + links: + discord: Офіційний Discord + roadmap: Плани + subreddit: Subreddit + source_code: Вихідний код (GitHub) + translate: Допомогти з перекладом - Be sure to check out my trello board for the full roadmap! global: loading: Завантаження error: Помилка + + # How big numbers are rendered, e.g. "10,000" thousandsDivider: " " + + # What symbol to use to seperate the integer part from the fractional part of a number, e.g. "0.4" decimalSeparator: "," + + # The suffix for large numbers, e.g. 1.3k, 400.2M, etc. suffix: thousands: тис. millions: млн billions: млрд trillions: трлн + + # Shown for infinitely big numbers infinite: неск. + time: + # Used for formatting past time dates oneSecondAgo: одну секунду тому xSecondsAgo: секунд тому - oneMinuteAgo: 1 хвилину тому + oneMinuteAgo: хвилину тому xMinutesAgo: хвилин тому oneHourAgo: одну годину тому xHoursAgo: годин тому oneDayAgo: один день тому xDaysAgo: днів тому + + # Short formats for times, e.g. '5h 23m' secondsShort: сек. minutesAndSecondsShort: хв. сек. hoursAndMinutesShort: год. хв. + xMinutes: хв. keys: tab: TAB @@ -77,26 +121,35 @@ global: escape: ESC shift: SHIFT space: SPACE + demoBanners: - title: Демоверсія - intro: Завантажте окрему версію, щоб розблокувати всі функції! + # This is the "advertisement" shown in the main menu and other various places + title: Демо-версія + intro: >- + Завантажте повну версію, щоб розблокувати всі можливості та вміст! + mainMenu: play: Грати continue: Продовжити newGame: Нова гра - changelog: Змінопис + changelog: Список змін subreddit: Reddit importSavegame: Імпортувати openSourceHint: Ця гра з відкритим вихідним кодом! discordLink: Офіційний Discord сервер helpTranslate: Допоможіть з перекладом! madeBy: Зробив - browserWarning: Вибачте, але гра, як відомо, працює повільно у вашому браузері! - Завантажте окрему версію чи хром, щоб отримати більше задоволення від + + # This is shown when using firefox and other browsers which are not supported. + browserWarning: >- + Вибачте, але гра, як відомо, працює повільно у вашому браузері! + Завантажте повну версію чи Google Chrome, щоб отримати більше задоволення від гри. + savegameLevel: Рівень savegameLevelUnknown: Невідомий рівень savegameUnnamed: Unnamed + dialogs: buttons: ok: Гаразд @@ -105,116 +158,156 @@ dialogs: later: Пізніше restart: Перезавантажити reset: Скинути - getStandalone: Завантажити гру + getStandalone: Купити гру deleteGame: Я знаю, що роблю viewUpdate: Переглянути оновлення showUpgrades: Показати поліпшення showKeybindings: Показати прив’язки клавіш + importSavegameError: title: Помилка при імпортуванні - text: "Не вдалося імпортувати вашу збережену гру:" + text: >- + Не вдалося імпортувати вашу збережену гру: + importSavegameSuccess: title: Збереження імпортовано - text: Вашу збережену гру успішно імпортовано. + text: >- + Вашу збережену гру успішно імпортовано. + gameLoadFailure: title: Гра поламана - text: Не вдалося завантажити вашу збережену гру. + text: >- + Не вдалося завантажити вашу збережену гру. + confirmSavegameDelete: - title: Підтвердження - text: Are you sure you want to delete the following game?

- '' at level

This can not be - undone! + title: Підтвердження видалення + text: >- + Ви дійсно бажаєте видалити цю збережену гру?

+ '' яка рівня

+ Цю дію неможливо буде відмінити! + savegameDeletionError: - title: Виникла помилка при видаленні - text: Не вдалося видалити збережену гру. + title: Не вдалось видалити + text: >- + Не вдалося видалити збережену гру: + restartRequired: title: Потрібне перезавантаження - text: Перезавантажте гру, щоб налаштування вступили в дію. + text: >- + Перезавантажте гру, щоб налаштування вступили в дію. + editKeybinding: title: Зміна гарячої клавіши - desc: Натисніть клавішу, яку ви хочете призначити, або escape для скасування. + desc: Натисніть клавішу, або кнопку миші, яку ви хочете призначити, або escape для скасування. + resetKeybindingsConfirmation: - title: Скинути гарячу клавіші + title: Скинути гарячі клавіші desc: Це скине всі прив'язки клавіш до їхніх значень за замовчуванням. Будь ласка, підтвердіть. + keybindingsResetOk: - title: Скинути гарячі клавіші - desc: Гарячі клавіши скинемуться до їхніх початкових значень! + title: Гарячі клавіші скинуто + desc: Гарячі клавіши скинуто до їхніх початкових значень! + featureRestriction: - title: Демоверсія - desc: Ви спробували отримати доступ до функції (), яка недоступна в - демонстраційній версії. Подумайте про отримання окремої версії, щоб + title: Демо-версія + desc: >- + Ви спробували отримати доступ до функції (), яка недоступна в + демонстраційній версії. Подумайте про отримання повної версії, щоб насолодитися грою сповна! + oneSavegameLimit: title: Обмежені збереження - desc: Ви можете мати лише одне збереження одночасно в демоверсії. Будь ласка, - видаліть збереження чи завантажте окрему версію гри! + desc: Ви можете мати лише одне збереження одночасно в демо-версії. Будь ласка, + видаліть існуюче збереження чи купіть повну версію гри! + updateSummary: title: Нове оновлення! - desc: "Ось зміни з вашої останньої гри:" + desc: >- + Ось зміни з вашої останньої гри: + upgradesIntroduction: title: Розблокування поліпшень - desc: Усі форми, що ви виробляєте, можуть використовуватися для розблокування - поліпшення - Не зруйнуйте свої старі фабрики! + desc: >- + Усі фігури, що ви виробляєте, можуть використовуватися для розблокування + поліпшень - радимо не видаляти старі фабрики! Вкладку з поліпшеннями можна знайти в правому верхньому куті екрана. + massDeleteConfirm: title: Підтвердження видалення - desc: Ви видаляєте багато будівль (, якщо бути точним)! Ви справді хочете + desc: >- + Ви видаляєте багато будівль (, якщо бути точним)! Ви справді хочете зробити це? + massCutConfirm: title: Підтвердження вирізання - desc: Ви вирізаєте багато будівль(, якщо бути точним)! Ви справді хочете + desc: >- + Ви вирізаєте багато будівль(, якщо бути точним)! Ви справді хочете зробити це? + massCutInsufficientConfirm: title: Підтвердити вирізання - desc: Ви не можете дозволити собі вставити цю область! Ви справді хочете - вирізати це? + desc: >- + Ви не можете дозволити собі вставити цю область! Ви справді хочете + вирізати її? + blueprintsNotUnlocked: title: Ще не розблоковано - desc: Досягніть 13-го рівня, щоб розблокувати креслення! + desc: >- + Досягніть 13-го рівня, щоб розблокувати креслення! + keybindingsIntroduction: title: Корисні гарячі клавіши - desc: "Гра має багато гарячих клавіш, що полегшують будівництво великих фабрик. - Ось декілька, але обов’язково ознайомтеся з прив’язками - клавіш!

CTRL + - тягніть: виділити зону.
SHIFT: - тримайте, щоб розмістити декілька одного будинку.
ALT: змінити сторону розміщеної конвеєрної - стрічки.
" + desc: >- + Гра має багато гарячих клавіш, що полегшують будівництво великих фабрик. + Ось декілька, але обов’язково ознайомтеся з прив’язками клавіш!

+ CTRL + тягніть: виділити зону.
+ SHIFT: тримайте, щоб розмістити декілька копій однієї будівлі.
+ ALT: змінити напрям розміщеної конвеєрної стрічки.
+ createMarker: title: Нова позначка titleEdit: Редагувати позначку - desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) + desc: Дайте їй інформативну назву, ви також можете використати код + фігури (Який ви можете створити тут) + + editSignal: + title: Встановити сигнал + descItems: >- + Виберіть попередньо визначений елемент: + descShortKey: ... або введіть код фігури (Який ви + можете створити тут) + markerDemoLimit: - desc: Ви можете створити тільки 2 позначки в демоверсії. Отримайте окрему версії + desc: Ви можете створити тільки 2 позначки в демо-версії. Отримайте повну версію гри для створення необмеженної кількості позначок. + exportScreenshotWarning: - title: Експортувати зняток - desc: Ви просили експортувати свою базу як знімок екрана. Зверніть увагу, що для + title: Експортувати знімок + desc: Ви запросили експорт бази в зображення. Зверніть увагу, що для великої бази це може бути досить повільним процесом і може навіть зруйнувати вашу гру! - editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Перейменувати збереження + desc: Тут ви можете перейменувати збереження гри. + tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Доступна інструкція + desc: Для цього рівня доступна відео-інструкція! Чи бажаєте переглянути її? + tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Доступна інструкція + desc: Для цього рівня доступна відео-інструкція, але вона доступна + лише на Англійській. Чи бажаєте переглянути її? + ingame: + # This is shown in the top left corner and displays useful keybindings in + # every situation keybindingsOverlay: moveMap: Рухатися - selectBuildings: Виділити будівлі - stopPlacement: Зупинити розміщення + selectBuildings: Виділити область + stopPlacement: Припинити розміщення rotateBuilding: Повернути будівлю placeMultiple: Розмістити декілька reverseOrientation: Змінити орієнтацію @@ -224,13 +317,15 @@ ingame: createMarker: Створити позначку delete: Видалити pasteLastBlueprint: Вставити останнє креслення - lockBeltDirection: Увімкнути стрічковий планувальник + lockBeltDirection: Увімкнути конвеєрний планувальник plannerSwitchSide: Змінити сторону планувальника cutSelection: Вирізати copySelection: Скопіювати clearSelection: Очистити виділене pipette: Піпетка - switchLayers: Змінити шари + switchLayers: Змінити шар + + # Names of the colors, used for the color blind mode colors: red: Червоний green: Зелений @@ -240,542 +335,699 @@ ingame: cyan: Блакитний white: Білий black: Чорний - uncolored: Без кольору + uncolored: Без кольору + + # Everything related to placing buildings (I.e. as soon as you selected a building + # from the toolbar) buildingPlacement: - cycleBuildingVariants: Натисніть для циклу варіантів. - hotkeyLabel: "Hotkey: " + cycleBuildingVariants: Натисніть для перебору варіантів. + + # Shows the hotkey in the ui, e.g. "Hotkey: Q" + hotkeyLabel: "Гаряча клавіша: " + infoTexts: speed: Швидкість range: Дальність storage: Сховище - oneItemPerSecond: 1 предмет за сек. - itemsPerSecond: предмет. за сек + oneItemPerSecond: 1 предмет/сек. + itemsPerSecond: предм./сек itemsPerSecondDouble: (x2) + tiles: плиток + + # The notification when completing a level levelCompleteNotification: + # is replaced by the actual level, so this gets 'Level 03' for example. levelTitle: Рівень completed: Завершено unlockText: Розблоковано «»! buttonNextLevel: Наступний рівень + + # Notifications on the lower right notifications: - newUpgrade: Нове оновлення розблоковано! + newUpgrade: Нове поліпшення розблоковано! gameSaved: Вашу гру збережено. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Рівень було завершено! + + # The "Upgrades" window shop: title: Поліпшення - buttonUnlock: Поліпшення + buttonUnlock: Відкрити + # Gets replaced to e.g. "Tier IX" tier: Ранг + maximumLevel: МАКСИМАЛЬНИЙ РІВЕНЬ (Швидкість x) + + # The "Statistics" window statistics: title: Статистика dataSources: stored: title: Зберігається - description: Відображає кількість збережених фігур у вашому центрі. + description: Відображає кількість збережених фігур у вашому Центрі. produced: title: Виробляється description: Відображає всі форми вашої цілої фабрики, що виробляються, включаючи проміжні продукти. delivered: - title: Доставлено - description: Відображає форми, що доставляються до центру. - noShapesProduced: Жодної форми поки не випускається. + title: Доставляється + description: Відображає форми, що доставляються до Центру. + noShapesProduced: Жодна фігура поки не випускається. + + # Displays the shapes per second, e.g. '523 / s' shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / с + minute: / хв + hour: / г + + # Settings menu, when you press "ESC" settingsMenu: playtime: У грі - buildingsPlaced: Будівлі - beltsPlaced: Стрічки + buildingsPlaced: Будівель + beltsPlaced: Конвеєрів + + # Bottom left tutorial hints tutorialHints: title: Потрібна допомога? showHint: Показати підказку hideHint: Закрити + + # When placing a blueprint blueprintPlacer: cost: Вартість + + # Map markers waypoints: waypoints: Позначки hub: Центр - description: ЛКМ на позначку, щоб перейти до неї, ПКМ для + description: ЛКМ на позначку, щоб перейти до неї, ПКМ для видалення

Натисніть для створення позначки з поточного виду або ПКМ, щоб створити позначку в обраному місці. creationSuccessNotification: Позначку створено. + + # Shape viewer shapeViewer: title: Шари empty: Пустий copyKey: Копіювати ключ + + # Interactive tutorial interactiveTutorial: title: Навчання hints: 1_1_extractor: Розмістіть екстрактор поверх фігури - кола, щоб отримати її! - 1_2_conveyor: "З’єднайте екстрактор з вашим центром за допомогою + кола
, щоб видобути її! + + 1_2_conveyor: >- + З’єднайте екстрактор з вашим центром за допомогою конвеєрної стрічки!

Підказка: - Натисніть і протягніть стрічку вашою мишею." - 1_3_expand: "У цій грі ВАМ НЕ ПОТРІБНО БЕЗДІЯТИ! Будуйте більше + Натисніть і протягніть стрічку вашою мишею. + + 1_3_expand: >- + У цій грі ВАМ НЕ ПОТРІБНО БЕЗДІЯТИ! Будуйте більше екстракторів і стрічок, щоб виконати свою мету швидше.

Підказка: Утримуйте SHIFT, щоб розмістити багато екстракторів, і використовуйте - R, щоб обертати їх." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + R, щоб обертати їх. + + 2_1_place_cutter: >- + Тепер розмістіть Різчик щоб розрізати коло на дві + половинки!

PS: Різчик завжди ділить фігуру по вертикалі + незалежного від його орієнтації. + + 2_2_place_trash: >- + Різчик може забиватись!

Використовуйте + Смітник аби позбутись поки що(!) не + потрібних залишків. + + 2_3_more_cutters: >- + Чудово! Тепер розмістіть ще 2 різчика щоб прискорити + цей повільний процес!

PS: Використовуте 0-9 + гарячі клавіші аби мати швидкий доступ до будівель! + + 3_1_rectangles: >- + Тепер давайте добудемо квадратів! Збудуйте 4 + Екстрактори і приєднайте їх до Центру.

PS: + Утримуйте SHIFT + тягнути для переходу в режим планувальника конвеєрів! + + 21_1_place_quad_painter: >- + Розмістіть Фарбувач (х4) та добудьте + коло, білий та + червоний кольори! + + 21_2_switch_to_wires: >- + Перейдіть в шар проводів натиснувши + E!

Та підключіть всі 4 + вводи фарбувальника за допомогою проводу! + + 21_3_place_button: >- + Неймовірно! Тепер розмістіть Вимикач Та з'єднайте їх + дротом! + + 21_4_press_button: >- + Натисніть вимикач, аби він почав видавати сигнал "Істина" + активувавши таким чином фарбувальник.

PS: Не обов'язково + підключати всі входи! Спробуйте підключити лише два. + + # Connected miners connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 Екстрактор + n_miners: Екстракторів + limited_items: Обмежено до + + # Pops up in the demo every few minutes watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Демо-версія + desc: Натисніть сюди аби переглянути переваги Steam версії! + get_on_steam: Отримати в Steam + standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Отримати повну версію! + no_thanks: Ні, дякую! + points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 нових Рівнів + desc: В цілому 26 рівнів! + buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 нових Будівель + desc: Для повної автоматизації вашої фабрики! + savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Збережень + desc: Стільки, скільки вашій душі завгодно! + upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 рівнів Поліпшень + desc: Демо-версія має лише 5! + markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Позначок + desc: Забудьте про блукання по фабриці! + wires: - title: Wires - desc: An entirely new dimension! + title: Дроти + desc: Цілий новий вимір! + darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Нічний режим + desc: Дайте очам відпочити! + support: - title: Support me - desc: I develop it in my spare time! + title: Підтримайте мене + desc: Я розробляю гру в свій вільний час! + +# All shop upgrades shopUpgrades: belt: name: Стрічки, розподілювачі і тунелі - description: Швидкість x → x + description: Шв. x → x miner: name: Видобуток - description: Швидкість x → x + description: Шв. x → x processors: name: Різання, обертання й укладання - description: Швидкість x → x + description: Шв. x → x painting: name: Змішування і малювання - description: Швидкість x → x + description: Шв. x → x + +# Buildings and their name / description buildings: hub: deliver: Доставте, toUnlock: щоб розблокувати levelShortcut: РІВ - endOfDemo: End of Demo + endOfDemo: Кінець Демки + belt: default: - name: Конвеєрна стрічка + name: &belt Конвеєрна стрічка description: Транспортує предмети, утримуйте і перетягуйте для розміщення декількох. - wire: - default: - name: Дріт - description: Дозволяє передавати енергію - second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + + # Internal name for the Extractor miner: default: - name: Екстрактор - description: Розмістіть над формою чи кольором, який хочете видобути. + name: &miner Екстрактор + description: Розмістіть над фігурою чи кольором, який хочете видобути. + chainable: name: Екстрактор (Ланц.) - description: Розмістіть над формою чи кольором, який хочете видобути. Можна + description: Розмістіть над фігурою чи кольором, який хочете видобути. Можна об’єднати в ланцюг. + + # Internal name for the Tunnel underground_belt: default: - name: Тунель - description: Дозволяє транспортувати ресурси під будівлями та стрічками. + name: &underground_belt Тунель + description: Дозволяє транспортувати ресурси під будівлями та іншими стрічками. + tier2: name: Тунель, ранг II - description: Дозволяє транспортувати ресурси під будівлями та стрічками. + description: Дозволяє транспортувати ресурси під будівлями та іншими стрічками. + + # Balancer + balancer: + default: + name: &balancer Балансир + description: Багатофункціональний - Рівномірно розподіляє всі входи між всіма виходами. + + merger: + name: З'єднувач + description: З'єднує дві конвеєрних стрічки в одну. + + merger-inverse: + name: З'єднувач + description: З'єднує дві конвеєрних стрічки в одну. + + splitter: + name: Розподілювач + description: Поділяє конвеєрну стрічку на дві. + + splitter-inverse: + name: Розподілювач + description: Поділяє конвеєрну стрічку на дві. + cutter: default: - name: Різчик - description: Розрізає форми зверху вниз і виводить обидві половинки. + name: &cutter Різчик + description: Розрізає фігури зверху вниз і виводить обидві половинки. Якщо ви використовуєте лише одну частину, не забудьте - знищити іншу частину, інакше вона застрягне в + знищити іншу, інакше вона застрягне в механізмі! quad: name: Різчик (4 вих.) - description: Розрізає форми на 4 частини. Якщо ви використовуєте лише - одну частину, не забудьте знищити інші, інакше вони застрягнуть + description: Розрізає фігури на 4 частини. Якщо ви використовуєте не всі + частини, не забудьте знищити решту, інакше вони застрягнуть в механізмі! + rotater: default: - name: Обертач - description: Обертає форми за годинниковою стрілкою на 90 градусів. + name: &rotater Обертач + description: Обертає фігури за годинниковою стрілкою на 90 градусів. ccw: name: Обертач (-90) - description: Обертає форми проти годинникової стрілки на 90 градусів. + description: Обертає фігури проти годинникової стрілки на 90 градусів. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Обертач (180) + description: Обертає фігури за годинниковою стрілкою на 180 градусів. + stacker: default: - name: Укладальник + name: &stacker Укладальник description: Складає обидва елементи. Якщо їх неможливо об’єднати, правий елемент розміщується над лівим елементом. + mixer: default: - name: Змішувач кольорів + name: &mixer Змішувач кольорів description: Змішує два кольори за допомогою добавки. + painter: default: - name: Фарбувач - description: Забирає форму з лівого входу, а колір з верхнього. + name: &painter Фарбувач + description: &painter_desc Фарбує всю фігуру з лівого входу в колір з верхнього входу. + mirrored: - name: Фарбувач - description: Забирає форму з лівого входу, а колір з верхнього. + name: *painter + description: Фарбує всю фігуру з лівого входу в колір з нижнього входу. + double: - name: Фарбувач (подв.) - description: Фарбує фігури, що надійшла з лівого входу, кольором, що надійшов з + name: Подвійний Фарбувач + description: Фарбує фігури, що надійшли з лівих входів, кольором, що надійшов з верхнього. + quad: - name: Фарбувач (чотири) - description: Allows you to color each quadrant of the shape individually. Only - slots with a truthy signal on the wires layer - will be painted! + name: Фарбувач (х4) + description: Дозволяє вам розфарбувати кожну частину окремо. Лише + частини з сигналом "Істина" на шарі Дротів + буде пофабровано! + trash: default: - name: Смітник - description: Приймає форми зі всіх сторін і руйнує їх. Назавжди. - balancer: - default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. - merger: - name: Merger (compact) - description: Merges two conveyor belts into one. - merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. - splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. - splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: &trash Смітник + description: Приймає фігури зі всіх сторін і знищує їх. Назавжди. + storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: &storage Сховище + description: Зберігає надлишкові предмети, до заданої ємності. Лівий вихід пріоритетний, + може бути використаний як переповнювальний затвор. + + wire: + default: + name: &wire Дріт + description: &wire_desc Передає сигнали, якими можуть бути фігури, кольори чи логічні сигнали (1 чи 0). Дроти різних кольорів не приєднуються один до одного. + + second: + name: *wire + description: *wire_desc + wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: &wire_tunnel Пересічення дроту + description: Дозволяє двом дротам пересіктись не підключаючись один до одного. + constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: &constant_signal Постійний Сигнал + description: Видає постійний сигнал, яким може бути фігура, колір чи + логічний сигнал (1 / 0). + lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: &lever Вимикач + description: Можна перемикати видачу логічного сигналу (1 / 0) на шар дротів, + цей сигнал може бути використаний для управління компонентами, наприклад Фільтром елементів. + logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: Логічне "І" + description: Видає логічну "1" якщо обидва вводи отримують сигнал "Істинний". (Під "Істинний" мається наувазі фігура, + колір чи логічна "1") not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: Логічне "НЕ" + description: Видає логічну "1" якщо вхід отримує сигнал "Хибний". ("Хибний" сигнал - протилежний "Істинному", і відповідає логічному "0") xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Виключне "АБО" + description: Видає логічну "1" якщо лише один з вводів "Істинний", но не обидва. + (Під "Істинний" мається наувазі фігура, колір чи логічна "1") or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: Логічне "АБО" + description: Видає логічну "1" якщо хоча б один з вводів "Істинний". + (Під "Істинний" мається наувазі фігура, колір чи логічна "1") + transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: &transistor Транзистор + description: &transistor_desc Пропускає нижній сигнал якщо боковий вхід "Істинний" (фігура, + колір чи логічна "1"). + mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: *transistor + description: *transistor_desc + filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: &filter Фільтр + description: Підключіть сигнал щоб направити всі відповідні елементи вгору, а решту вправо. + Також ним можна керувати за допомогою логічних сигналів (1 / 0). + display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: &display Дисплей + description: Підключіть сигнал, аби відобразити його на дисплеї - ним може бути фігура, + колір чи логічний сигнал + reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: &reader Зчитувач конвеєєра + description: Дозволяє вимірювати середню пропускну здатність конвеєрної стрічки. Видає сигнал останнього зчитаного елемента + на шар дротів (коли розблоковано). + analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: &analyzer Дослідник фігур + description: Аналізує верхню-праву частину самого нижнього слою фігури + та повертає її форму і колір. + comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: &comparator Компаратор + description: Видає логічну "1" якщо обидва сигнали абсолютно рівні. Може порівнювати + фігури, елементи та кольори. + virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: &virtual_processor Віртуальний Різчик + description: Віртуально розрізає фігуру на дві половинки. + rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Віртуальний Обертач + description: Віртуально обертає фігуру по часовій стрілці, та проти. + unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Віртуальний Розпаковувач + description: Віртуально видобуває верхній шар фігури на правий вихід, а решту на лівий вихід. + stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Віртуальний Укладальник + description: Віртуально складає праву фігуру на ліву. + painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Віртуальний Фарбувач + description: Віртуально фарбує фігуру з нижнього вводу, використовуючи колір з правого вводу. + item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Генератор елементів + description: Доступно лише в режимі Пісочниці, видає отриманий на шарі дроту сигнал в якості фігури на звичайний шар. + storyRewards: + # Those are the rewards gained from completing the story reward_cutter_and_trash: title: Різання фігур - desc: You just unlocked the cutter, which cuts shapes in half - from top to bottom regardless of its - orientation!

Be sure to get rid of the waste, or - otherwise it will clog and stall - For this purpose - I have given you the trash, which destroys - everything you put into it! + desc: Ви щойно відкрили Різчик, який ріже фігури навпіл + зверху вниз незалежно від його орієнтації!

+ Обов'язково позбудьтесь відходів, інакше + вони застрягнуть - Для цих цілей + я дав вам Смітник, який знищує все що ви туда направите! + reward_rotater: title: Обертання - desc: Обертач розблоковано! Він повертає форми за годинниковою + desc: Обертач розблоковано! Він повертає фігури за годинниковою стрілкою на 90 градусів. + reward_painter: title: Фарбування - desc: Фарбувач розблоковано. Видобудьте трохи кольорів з - відповідних жилок (як ви зробили це з формами) і об’єднуйте їх з - формами у фарбувачі, щоб розфарбувати форми!

До речі, якщо ви - дальтонік, то в увімкніть режим високої + desc: >- + Фарбувач розблоковано. Видобудьте трохи кольорів з + відповідних жилок (як ви зробили це з фігурами) і об’єднайте їх з + фігурами у фарбувачі, щоб розфарбувати фігури!

До речі, для + дальтоніків, доступний режим високої контрастності в налаштуваннях! + reward_mixer: title: Змішування кольорів - desc: The mixer has been unlocked - It mixes two colors using - additive blending! + desc: Змішувач кольорів було відкрито - Він змішує два кольори + шляхом добавки! + reward_stacker: - title: Поєднувач форм - desc: Тепер ви можете поєднувати фігури з поєднувачем форм! - Форми об’єднуються з двох сторін, і якщо їх можна поставити поруч, - вони будуть з’єднані. Якщо ні, то форма, що подана - з правого входу, застрягне на горі лівого входу. - reward_splitter: - title: Розподілювач (з’єднувач) - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + title: Поєднання фігур + desc: Тепер ви можете поєднувати фігури з Укладальником! + Фігури об’єднуються з двох сторін, і якщо їх можна поставити поруч, + вони будуть з’єднані. Якщо ні, то фігуру, що подана + з правого входу, буде накладено на фігуру з лівого входу. + + reward_balancer: + title: Балансир + desc: Багатофункціональний Балансир було відкрито - Він + використовується для будування більших фабрик шляхом розподілу чи змішування + елементів між кількома конвеєрними стрічками! + reward_tunnel: title: Тунель desc: Тунель розблоковано. Ви можете створювати тунелі для преметів через стрічки і будівлі. + reward_rotater_ccw: title: Обертання проти годинникової стрілки desc: Ви розблокували новий варіант обертача. Він дозволяє обертати проти годинникової стрілки! Щоб побудувати його виберіть обертач, натисніть «T», щоб переглянути всі варіанти, та оберіть потрібний! + reward_miner_chainable: title: Екстрактор (ланцюг.) - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + desc: >- + Ви відкрили Ланцюговий Екстрактор! Він може + направляти свої ресурси в інший екстрактор + так ви зможете добувати ресурси більш ефективно!

PS: Звичаний Екстрактор + було замінено на вашій панелі інструментів! + reward_underground_belt_tier_2: title: Тунель II desc: Ви розблокували новий варіант тунеля. Він має більшу дальність, і ви можете також змішувати і зіставляти ці тунелі! + + reward_merger: + title: З'єднувач + desc: >- + Ви відкрили З'єднувач - різновид + балансиру - Приймає два вводи, та з'єднує їх + в одину конвеєрну стрічку! + + reward_splitter: + title: Розподілювач + desc: >- + Ви відкрили Розподілювач - різновид + балансиру - Приймає один ввід, та розподілює їх на два! + + reward_belt_reader: + title: Зчитувач конвеєєра + desc: >- + Ви відкрили Зчитувач конвеєєра! Дає вам змогу + вимірювати пропускну здатність конвеєрної стрічки.

Зачекайте поки відкриєте шар + дротів - тоді він стане ще кориснішим! + reward_cutter_quad: title: Різчик (чотири) desc: Ви розблокували інший варіант різчика. Він може розрізати - форми на чотири частини замість двох. + фігури на чотири частини замість двох. + reward_painter_double: - title: Double Painting + title: Подвійний Фарбувач desc: Ви розблокували інший варіант фарбувача. Він працює як звичайний фарбувач, але обробляє дві фігури одночасно, споживаючи лише один колір замість двох! + reward_storage: - title: Storage Buffer - desc: You have unlocked the storage building - It allows you to - store items up to a given capacity!

It priorities the left - output, so you can also use it as an overflow gate! - reward_freeplay: - title: Пісочниця - desc: You did it! You unlocked the free-play mode! This means - that shapes are now randomly generated!

- Since the hub will require a throughput from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!

The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + title: Сховище + desc: >- + Ви відкрили Сховище - Воно дає вам змогу + зберігати елементи до заданої місткості!

Лівий вихід є пріоритетним, + ви також можете використовувати його як переповнювальний затвор! + reward_blueprints: title: Креслення desc: Ви вже можете копіювати і вставляти частини вашої фабрики. Виберіть зону (утримуйте CTRL, а тоді тягніть мишою), і натисніть «C», щоб скопіювати.

Вставляти креслення — річ не безкоштовна, спочатку вам потрібно створити - форми креслень, щоб собі це дозволити! (ті, що ви + фігури креслень, щоб собі це дозволити! (ті, що ви щойно доставили). + + reward_rotater_180: + title: Обертач (180 градусів) + desc: Ви щойно відкрили Обертач на 180! - Він повертає фігури за годинниковою стрілкою на 180 градусів. (Сюрприз! :D) + + reward_wires_painter_and_levers: + title: >- + Дроти & Фарбувач(х4) + desc: >- + Ви щойно відкрили шар Дротів: Це окремий + шар поверх звичайного, він впроваджує нові механіки! +

Для початку вам доступний Фарбувач + (х4) - Підключіть входи з яких ви хочете пофарбувати + через шар дротів!

Щоб перейти на шар дротів, натисніть + E.

PS: Включіть підказки в + налаштуваннях щоб активувати навчання по дротам! + + reward_filter: + title: >- + Фільтр + desc: >- + Ви відкрили Фільтр! Він направлятиме елементи + в верхній чи правий виходи в залежності чи відповідають вони + сигналу отриманому з шару дроту.

Ви також можете передати + логічний сигнал (1 / 0) аби повністю активувати чи деактивувати його. + + reward_display: + title: Дисплей + desc: >- + Ви відкрили Дисплей - Підключіть сигнал на + шар дротів щоб візуалізувати його!

PS: Чи помітили ви що Зчитувач конвеєєра + та Сховище виводять останній прочитаний елемент? Спробуйте показати їх на + дисплеї! + + reward_constant_signal: + title: Постійний Сигнал + desc: >- + Ви відкрили Постійний Сигнал на шарі дротів! + Пригодиться для приєднання до Фільтру елементів + наприклад.

Постійний сигнал може видавати + фігуру, колір або + логічний сигнал (1/0). + + reward_logic_gates: + title: Логічні вентилі + desc: >- + Ви відкрили Логічні вентилі! Вам не обов'язково відчувати захоплення, + але це й насправді круто!

З їх допомогою + ви можете обчислювати операції "І", "АБО", "НЕ-АБО" і "НЕ".

Як + бонус, я щойно дав вам Транзистор! + + reward_virtual_processing: + title: Віртуальна обробка + desc: >- + Я щойно дав цілу гору нових будівель, які дозволяють вам + імітувати обробку фігур!

Ви можете + тепер імітувати різак, обертач, укладач та решту на шарі дротів! + З цим у вас є три варіанти продовження гри:

- + Створіть автоматизовану машину, щоб створювати будь-яку можливу + фігуру за запитом Центру (рекомендую спробувати!).

- Побудуйте + щось круте з дротами.

- Продовжуйте грати як раніше. +

Що б ви не вибрали, не забувайте насолоджуватись грою! + + # Special reward, which is shown when there is no reward actually no_reward: title: Наступний рівень - desc: "This level gave you no reward, but the next one will!

PS: Better - not destroy your existing factory - You'll need all - those shapes later to unlock upgrades!" + desc: >- + Цей рівень не дає вам винагороди, але наступний дасть!

PS: Краще + не руйнувати існуючу фабрику - Вам знадобляться всі + ці фігури пізніше, щоб розблокувати поліпшення! + no_reward_freeplay: title: Наступний рівень - desc: Вітаємо! До речі, більше контенту планується в окремій версії! - reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! - reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! - reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! - reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) - reward_display: - title: Display - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" - reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). - reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! - reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! - reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" - reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + desc: >- + Вітаємо! + + reward_freeplay: + title: Вільна гра + desc: >- + Вам це вдалось! Ви відкрили режим Вільної гри! Це означає + що тепер фігури генеруються випадково!

+ Оскільки Центр вимагатиме забезпечення пропускної здатності, відтепер + я настійно рекомендую будувати машину, яка автоматично + створюватиме запитувану форму!

Центр виводить задану + фігуру на шарі дротів, і все, що вам потрібно буде зробити, це проаналізувати її та + автоматично налаштувати свою фабрику. + reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Кінець демо-версії + desc: >- + Ви досягнули кінець демо-версії! + settings: title: Налаштування categories: general: Загальне userInterface: Користувацький інтерфейс - advanced: Передове - performance: Performance + advanced: Розширені + performance: Продуктивність + versionBadges: dev: Розробка staging: Тестування prod: Виробництво buildDate: Створено + + rangeSliderPercentage: % + labels: uiScale: title: Масштаб інтерфейсу - description: Змінює розмір користувацього інтерфейсу. Інтерфейс усе ще буде + description: >- + Змінює розмір користувацього інтерфейсу. Інтерфейс усе ще буде масштабуватися залежно від роздільної здатності вашого пристрою, - але цей параметр контролює масштаб масштабування. + але цей параметр контролює ступінь масштабування. scales: super_small: Надзвичайно малий small: Малий regular: Звичайний large: Великий huge: Величезний + autosaveInterval: title: Проміжок між автозбереженнями - description: Контролює, як часто гра автоматично зберігатиметься. Ви також + description: >- + Контролює, як часто гра автоматично зберігатиметься. Ви також можете повністю вимкнути його тут. + intervals: one_minute: 1 хвилина two_minutes: 2 хвилини @@ -783,6 +1035,7 @@ settings: ten_minutes: 10 хвилин twenty_minutes: 20 хвилин disabled: Вимкнено + scrollWheelSensitivity: title: Чутливість масштабування description: Змінює наскільки чутливе масштабування (колесо миші або трекпад). @@ -792,9 +1045,10 @@ settings: regular: Звичайна fast: Швидка super_fast: Надзвичайно швидка + movementSpeed: title: Швидкість руху - description: Змінює Змінює швидкість руху бачення при використанні клавіатури. + description: Змінює швидкість руху камери при використанні клавіатури, або тягнучи мишу до країв екрану. speeds: super_slow: Надзвичайно повільна slow: Повільна @@ -802,193 +1056,249 @@ settings: fast: Швидка super_fast: Надзвичайно швидка extremely_fast: Екстремально швидка + language: title: Мова description: Зміна мови. Усі переклади зроблені користувачами і можуть бути незавершеними! + enableColorBlindHelper: title: Режим високої контрастності description: Дозволяє використовувати різні інструменти, які дозволяють грати в гру, якщо ви є дальтоніком. + fullscreen: title: Повноекранний режим description: Щоб повністю насолодитися грою, рекомендується грати у - повноекранному режимі. Не доступно тільки в демоверсії. + повноекранному режимі. Доступно лише в повній версії. + soundsMuted: title: Заглушити звуки - description: Якщо увімкнено, то вимикає всі звукові ефекти. + description: Якщо увімкнено, то приглушує всі звукові ефекти. + musicMuted: title: Заглушити музику - description: Якщо увімкнено, то вимикає всю музику. + description: Якщо увімкнено, то приглушує всю музику. + + soundVolume: + title: Гучність звуків + description: Встановити гучність для звукових ефектів + + musicVolume: + title: Гучність музики + description: Встановити гучність для музики + theme: title: Тема гри description: Оберіть тему гри (світлу чи темну). themes: dark: Темна light: Світла + refreshRate: title: Частота оновлення - description: Якщо ви маєте 144-герцовий монітор, то змініть частоту оновлення - тут, щоб гра правильно працювала при більшій швидкості - оновлення. Це може фактично знизити FPS, якщо ваш комп’ютер - занадто повільний. + description: >- + Визначає як багато ігрових циклів буде оброблено за секунду. + Загалом, висока частота циклів оновлення дає більшу точність розрахунків, але, також зменьшує продуктивність гри. + З низькою частотою пропускна здатність конвеєрних стрічок та машин може бути не точною. + alwaysMultiplace: title: Мультирозміщення - description: Якщо ввімкнено, всі будівлі залишатимуться вибраними після + description: >- + Якщо ввімкнено, всі будівлі залишатимуться вибраними після розміщення, доки ви не скасуєте це. Це еквівалентно постійному утримуванню SHIFT. + offerHints: title: Підказки & посібники - description: Якщо увімкнено, то пропонує підказки та посібники під час гри. + description: >- + Якщо увімкнено, то пропонує підказки та посібники під час гри. Також приховує певні елементи інтерфейсу до заданого рівня, щоб полегшити потрапляння в гру. + enableTunnelSmartplace: title: Розумні тунелі - description: Якщо увімкнено, то розміщення тунелів видалить непотрібні стрічки. - Це також дозволяє вам перетягувати тунелі і видаляти автоматично + description: >- + Якщо увімкнено, то розміщення тунелів видалить непотрібні стрічки. + Це також дозволяє вам перетягувати тунелі, що видалятими автоматично зайві тунелі. + vignette: title: Віньєтка - description: Вмикає віньєтку, яка затемнює кути екрану і робить текст легшим для + description: >- + Вмикає віньєтку, яка затемнює кути екрану і робить текст легшим для читання. + rotationByBuilding: title: Обертання за типом будівлі - description: Кожний тип будівлі запам’ятовує обертання, яке ви встановили. Це - може бути зручнішим, якщо ви часто перемикаєтесь між розміщенням + description: >- + Кожний тип будівлі запам’ятовує обертання, яке ви встановили. + Досить зручно, якщо ви часто перемикаєтесь між розміщенням різних типів будівель. + compactBuildingInfo: title: Компактна інформація про будівлі - description: Скорочує інформаційні поля для будівель, лише показуючи їх - співвідношення. В іншому випадку відображається опис та + description: >- + Скорочує інформаційні поля для будівель, лише показуючи їх + співвідношення. В іншому випадку відображається ще й опис та зображення. + disableCutDeleteWarnings: title: Вимкнути попердження про вирізання та видалення - description: Вимикає діалогові вікна попередження, що з’являються під час - вирізання/видалення більше 100 об’єктів. - soundVolume: - title: Sound Volume - description: Set the volume for sound effects - musicVolume: - title: Music Volume - description: Set the volume for music + description: >- + Вимикає діалогові вікна попередження, що з’являються під час + вирізання/видалення 100 та більше об’єктів. + lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Ресурси низької якості на карті + description: >- + Спрощує відображення ресурсів в режимі карти, щоб збільшити продуктивність. + Крім того, так навіть виглядає чуть чистіше, тож раджу спробувати! + disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Вимкнути сітку + description: >- + Вимкнення сітки може допомогти з продуктивністю. + Також робить гру чуть чистіше! + clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Очистити курсор кліком правої кнопки миші + description: >- + Увімкнено за замовчуванням, очищає курсор при кожному натисканні правої кнопки миші + поки у вас є будівля, обрана для розміщення. Якщо вимкнено, + ви можете видаляти будівлі, клацнувши правою кнопкою миші, в режимі розміщення + будівель. + lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Текстури низької якості (Потворне) + description: >- + Використовує текстури низької якості для збереження продуктивності. Але це зробить + гру дуже потворною! + displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Відображати рамки блоків + description: >- + Гра розділена на блоки 16х16 плиток, якщо ця опція включена + межі блоків будуть відображатись. + pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Підбирати екстрактор на родовищі ресурсів + description: >- + Активоване за замовчуванням, обирає майнер, якщо ви використовуєте + піпетку при наведенні на родовище ресурсів. + simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Спрощує конвеєри (Потворне) + description: >- + Відображає предмети на конвеєрі лише коли наведено на них, аби зберегти продуктивність. + Я не рекомендую грати з цією опцією, якщо є така можливість. + enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Ввімкнути панорамування мишею + description: >- + Дозволяє передвигатись по карті курсором миші передвигаючи його до країв екрану. + Швидкість залежить від обраної в налаштуваннях Швидкості Руху. + zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Приближати в напрямку курсора + description: >- + Якщо активовано, масштабування буде відбуватись в + напрямку курсору миші, в іншому випадку до ентру екрану. + mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). - rangeSliderPercentage: % + title: Розмір ресурсів на карті + description: >- + Регулює розмір фігур в режимі карти (при віддаленні). + keybindings: title: Гарячі клавіши - hint: "Tip: Упевніться, що ви можете використовувати CTRL, SHIFT і ALT! Вони - дозволяють різні варіанти розміщення." + hint: >- + "Підказка: Упевніться, що ви використовуєте CTRL, SHIFT і ALT! Вони + дозволяють застосовувати різні варіанти розміщення." + resetKeybindings: Скинути гарячі клавіші + categoryLabels: - general: Застосунок + general: Загальні ingame: Гра navigation: Навігація placement: Розміщення massSelect: Масовий вибір buildings: Гарячі клавіши будівництва placementModifiers: Модифікатори розміщення + mappings: confirm: Підтвердити back: Назад - mapMoveUp: Угору + mapMoveUp: Вгору mapMoveRight: Праворуч - mapMoveDown: Униз + mapMoveDown: Вниз mapMoveLeft: Ліворуч mapMoveFaster: Пришвидшитися centerMap: Центрувати мапу + mapZoomIn: Приблизити mapZoomOut: Віддалити createMarker: Створити позначку + menuOpenShop: Поліпшення menuOpenStats: Статистика menuClose: Закрити меню + toggleHud: Перемкнути користувацький інтерфейс - toggleFPSInfo: Перемкнути інформацію про FPS та зневадження + toggleFPSInfo: Перемкнути інформацію про FPS та налагоджувальну інформацію switchLayers: Перемкнути шари exportScreenshot: Експортувати цілу базу у вигляді зображення - belt: Конвеєрна стрічка - underground_belt: Тунель - miner: Екстрактор - cutter: Різчик - rotater: Обертач - stacker: Укладальник - mixer: Змішувач кольорів - painter: Фарбувач - trash: Смітник - wire: Дріт + + # --- Do not translate the values in this section + belt: *belt + balancer: *balancer + underground_belt: *underground_belt + miner: *miner + cutter: *cutter + rotater: *rotater + stacker: *stacker + mixer: *mixer + painter: *painter + trash: *trash + storage: *storage + wire: *wire + constant_signal: *constant_signal + logic_gate: Логічний вентиль + lever: *lever + filter: *filter + wire_tunnel: *wire_tunnel + display: *display + reader: *reader + virtual_processor: *virtual_processor + transistor: *transistor + analyzer: *analyzer + comparator: *comparator + item_producer: Матеріалізатор елементів (Пісочниця) + # --- + pipette: Піпетка rotateWhilePlacing: Повернути - rotateInverseModifier: "Modifier: Повернути проти годинникової стрілки натомість" + rotateInverseModifier: >- + "Модифікатор: Повернути проти годинникової стрілки натомість" cycleBuildingVariants: Повторювати варіанти циклічно confirmMassDelete: Видалити ділянку pasteLastBlueprint: Вставити останнє креслення cycleBuildings: Перемикання будівль lockBeltDirection: Увімкнути планувальник конвеєрних стрічок - switchDirectionLockSide: "Planner: Змінити сторону" + switchDirectionLockSide: >- + "Планувальник: Змінити сторону" + copyWireValue: >- + "Дроти: Копіювати значення зпід курсору" massSelectStart: Утримуйте і перетягуйте, щоб розпочати - massSelectSelectMultiple: Select multiple areas + massSelectSelectMultiple: Виділити кілька ділянок massSelectCopy: Копіювати ділянку massSelectCut: Вирізати ділянку + placementDisableAutoOrientation: Вимкнути автоматичну орієнтацію placeMultiple: Залишатися у режимі розміщення placeInverse: Перевернути автоматичну орієнтацію стрічки - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + about: title: Про гру body: >- @@ -996,15 +1306,17 @@ about: href="https://github.com/tobspr" target="_blank">Tobias Springer (це я).

- Якщо ви хочете зробити внесок, то йдіть на github shapez.io.

+ Якщо ви хочете зробити внесок, загляньте на GitHub Shapez.io.

- Ця гра не була б можливою без великої Discord спільноти навколо моїх ігор. Гадаю, вам дійсно слід долучитися до серверу в discord!

+ Ця гра не була б можливою без великої Discord спільноти навколо моїх ігор. Гадаю, вам дійсно слід долучитися до серверу в Discord!

- Звуковий трек був зроблений гравцем Peppsen — він просто приголомшливий.

+ Звуковий трек був зроблений Peppsen — він просто приголомшливий.

І нарешті, величезна подяка моєму найкращому другу Niklas, бо без наших сеансів у факторіо ця гра ніколи б не існувала. + changelog: - title: Змінопис + title: Журнал змін + demo: features: restoringGames: Відновлення збережень @@ -1012,65 +1324,63 @@ demo: oneGameLimit: Обмежено одним збереженням customizeKeybindings: Налаштування гарячих клавіш exportingBase: Експортування цілої бази у вигляді зображення + settingNotAvailable: Недоступно в демоверсії. + tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - Центр приймає фігури різного виду, не лише ті що наразі вимагаються! + - Переконайтесь що ваші фабрики модульні - це в майбутньому може знадобитись! + - Не будуйте близько до Центру, інакше це може перерости в великий хаос! + - Якщо укладальник працює не так як очікувалось, спробуйте поміняти місцями входи. + - Ви можете переключити напрямок планувальника конвеєрів натискаючи R. + - Утримуючи CTRL ви можете перетягувати конвеєри не змінюючи їх орієнтації. + - Співвідношення залишаються однаковими поки поліпшення на одному рівні. + - Послідовне виконання більш ефективне ніж паралельне. + - Ви відкриєте більше варіантів будівель пізніше в грі. + - Ви можете використовувати T між різними варіантами. + - Симетрія - ключ! + - Ви можете переплітати тунелі різніх рангів. + - Намагайтесь будувати компактні фабрики - це відплатить вам в майбутньому! + - Фарбувальник має дзеркальний варіант, який ви можете обрати натиснувши T + - Дотримування правильних співвідношень збільшить ефективність. + - На максимальному рівні 5 Екстракторів заповнять конвеєрну стрічку. + - Не забувайте про тунелі! + - Вам не обов'язково розділяти елементи рівномірно для повної ефективності. + - Утримуючи SHIFT активується планувальник конвеєрних стрічок, що дає вам змогу розміщувати конвеєри значно легче. + - Різчик завжди ділить фігуру вертикально, не залежно від його орієнтації. + - Для отримання білого кольору змішайте всі три основних кольори. + - Сховище має пріоритетний вихід, що знаходиться зліва. + - Приділіть час для будування компактного та повторюваного дизайну - воно того варте! + - Утримування SHIFT дозволяє ставити будівлю кілька раз. + - Ви можете утримувати ALT для зміни напряму конвеєрних стрічок. + - Ефективність - ключ! + - Родовища що знаходяться дальше від Центру мають більш складні фігури. + - Машини мають обмежену швидкість, розподіляйте елементи між ними для збільшення ефективності. + - Використовуйте балансири для збільшення ефективності. + - Організація важлива. Постарайтесь не пересікати конвеєри дуже часто. + - Плануйте заздалегідь, аби уникнути неймовірного хаосу! + - Не поспішайте видаляти старі фабрики! Вони знадобляться вам для відкриття поліпшень. + - Спробуйте подолати 20 рівень своїми силами, перед пошуком допомоги! + - Не ускладнюйте речі, намагайтесь тримати все якомога простим, і ви продвинетесь далеко. + - Ви можете повторно використовувати старі фабрики пізніше в грі. Плануйте фабрики універсальними. + - Інколи ви можете знайти необхідну фігуру на карті, без необхідності використання різчика та укладальника. + - Ціла фігура млин/вентилятор не появляється на карті. + - Фарбуйте ваші фігури перед розрізанням, для більшої ефективності. + - З модулями, простір - лише сприйняття; турбота для смертних. + - Зробіть окрему фабрику для фігур креслення. Вони дуже важливі для модулів. + - Гляньте уважніше на Змішувач кольорів, і на ваші питання найдеться відповідь. + - Використовуйте CTRL + Тягнути мишою для виділення області. + - Будування поруч з Центром може завадити подальшим проектам. + - Іконка "кнопки" поруч з фігурою в списку поліпшень закріплює фігуру на екрані. + - Змішайте всі три основних кольори аби отримати білий колір! + - У вас є безмежна карта, не кучкуйте фабрику, розширюйте! + - Також спробуйте Factorio! Це моя улюблена гра. + - Різчик (4 вих.) розділяє по часовій стрілці починаючи з верхнього правого кута! + - Ви можете завантажити свої збереження в основному меню гри! + - Ця гра має багато корисних гарячих клавіш! Вам варто глянути сторінку налаштувань. + - Ця гра має багато цікавих налаштувань, обов'язково перевірте їх! + - Позначка вашого Центру має невеликий компас, що завжди вказує напрямок до нього! + - Аби очистити конвеєрні стрічки, виріжте область та вставте її в те ж місце. + - Натисніть F4 аби відобразити вашу частоту кадрів та частоту циклів оновлень. + - Натисніть F4 двічі аби відобразити координати плитки що під курсором та координати камери. + - Ви можете натиснути на фігуру, зкаріплену в лівому краю екрану, аби відкріпити її. diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index d5b5fd3d..1de7b8ad 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -10,9 +10,9 @@ steamPage: 玩家可以在 Steam 購買本游戲的單機版,如果還在猶豫,也可以到 shapez.io 先免費試玩再決定! title_advantages: 單機版優點 advantages: - - 12 個新關卡 (總共有26關) - - 18 個新建築 幫助玩家自動化整個工廠! - - 20 個升級 讓遊玩時間更久! + - 12個新關卡 (總共有26關) + - 18個新建築 幫助玩家自動化整個工廠! + - 20個升級 讓遊玩時間更久! - 電路更新 帶給玩家新次元體驗! - 深色模式! - 無限存檔 @@ -33,7 +33,7 @@ steamPage: discord: 官方 Discord 伺服器 roadmap: Roadmap subreddit: Reddit - source_code: Source code (GitHub) + source_code: 原始碼(GitHub) translate: 幫助我們翻譯! text_open_source: |- 任何人都可以幫助我開發遊戲或提供建議,我很活躍於各個社群媒體,也會讀所有的建議與回饋、並嘗試改善。 @@ -70,7 +70,7 @@ global: shift: SHIFT space: 空格 demoBanners: - title: 演示版 + title: 試玩版 intro: 獲取單機版以解鎖所有功能! mainMenu: play: 開始遊戲 @@ -78,8 +78,8 @@ mainMenu: importSavegame: 導入 openSourceHint: 本遊戲已開源! discordLink: 官方 Discord 伺服器 - helpTranslate: 幫助我們翻譯! - browserWarning: 很抱歉, 本遊戲在當前瀏覽器上可能運行緩慢! 使用chrome或者獲取單機版以得到更好的體驗。 + helpTranslate: 協助我們翻譯! + browserWarning: 很抱歉, 本遊戲在當前瀏覽器上可能運行緩慢! 使用 chrome 或者獲取單機版以得到更好的體驗。 savegameLevel: 級 savegameLevelUnknown: 未知關卡 continue: 繼續 @@ -111,7 +111,7 @@ dialogs: text: 存檔載入失敗: confirmSavegameDelete: title: 確認刪除 - text: 你確定要刪除這個存檔?

'' 在第

級 不能反悔喔! + text: 你確定要刪除這個存檔?

'' 在第

不能反悔喔! savegameDeletionError: title: 刪除錯誤 text: 存檔刪除失敗 @@ -120,7 +120,7 @@ dialogs: text: 你需要重啟遊戲以套用變更的設置。 editKeybinding: title: 更改按鍵設置 - desc: 請按下你想要使用的按鍵,或者按下ESC鍵來取消設置。 + desc: 請按下你想要使用的按鍵,或者按下 ESC 鍵來取消設置。 resetKeybindingsConfirmation: title: 重置所有按鍵 desc: 這將會重置所有按鍵,請確認。 @@ -128,11 +128,11 @@ dialogs: title: 重置了所有按鍵 desc: 成功重置了所有按鍵! featureRestriction: - title: 演示版 - desc: 你嘗試使用了 功能。該功能在演示版中不可用。請考慮購買單機版以獲得更好的體驗。 + title: 試玩版 + desc: 你嘗試使用了 功能。該功能在試玩版中不可用。請考慮購買單機版以獲得更好的體驗。 oneSavegameLimit: title: 存檔數量限制 - desc: 演示版中只能保存一份存檔。請刪除舊存檔或者獲取單機版! + desc: 試玩版中只能保存一份存檔。請刪除舊存檔或者獲取單機版! updateSummary: title: 更新了! desc: "以下為自上次遊戲以來更新的內容:" @@ -157,7 +157,7 @@ dialogs: 生成短代碼。) titleEdit: 修改標記 markerDemoLimit: - desc: 在演示版中你只能創建兩個地圖標記。請獲取單機版以創建更多標記。 + desc: 在試玩版中你只能創建兩個地圖標記。請獲取單機版以創建更多標記。 massCutConfirm: title: 確認剪下 desc: 你將要剪下很多建築,準確來說有幢!你確定要這麼做嗎? @@ -168,21 +168,18 @@ dialogs: title: 確認剪下 desc: 你的複製圖形不夠貼上!你確定要剪下嗎? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: 訊號設定 + descItems: "選擇一個預先設定的物件" + descShortKey: ... 或輸入圖形的短代碼 (可以由 here 生成) renameSavegame: title: 重新命名存檔 desc: 你可以在這裡重新命名存檔 tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: 有教程 + desc: 這個等級有教學影片!你想觀看嗎? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: 有教程 + desc: 這個等級目前只有英文版教學影片,你想觀看嗎? ingame: keybindingsOverlay: moveMap: 移動 @@ -192,7 +189,7 @@ ingame: placeMultiple: 放置多個 reverseOrientation: 反向放置 disableAutoOrientation: 關閉自動定向 - toggleHud: 開關HUD + toggleHud: 開關基地 placeBuilding: 放置建築 createMarker: 創建地圖標記 delete: 銷毀 @@ -270,30 +267,21 @@ ingame:

提示:用你的游標按下並拖動傳送帶! 1_3_expand: 這不是一個放置型遊戲!建造更多的開採機和傳送帶來更快地完成目標。

提示:按住SHIFT鍵來放置多個開採機,用R鍵旋轉它們。 - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "現在放置一個切割機並利用它把圓圈切成兩半!

+ PS: 不論切割機的方向,它都會把圖形垂直地切成兩半。" + 2_2_place_trash: 切割機可能會堵塞並停止運作!

+ 用垃圾桶把「目前」不需要的部分處理掉。 + 2_3_more_cutters: "做得好! 現在,再放2個切割機來加速這個緩慢的生產線!

+ PS: 使用0-9快捷鍵可以更快選取建築 !" + 3_1_rectangles: "現在來開採一些方形吧!蓋4座開採機,把形狀收集到基地。

PS: + 選擇輸送帶,按住SHIFT並拖曳滑鼠可以計畫輸送帶位置!" + 21_1_place_quad_painter: 放置一個切割機(四分)並取得一些 + 圓形白色紅色! + 21_2_switch_to_wires: 按E切換到電路層

+ 然後將上色機的四個輸入端用電線連接。 + 21_3_place_button: 太棒了!現在放置一個開關並將之與電線連接。 + 21_4_press_button: "按下開關使之輸出真值並啟動上色機。

+ PS: 你不用連接所有的輸入端,試試只連接兩個。" colors: red: 紅 green: 綠 @@ -303,18 +291,18 @@ ingame: cyan: 青 white: 白 uncolored: 無顏色 - black: Black + black: 黑 shapeViewer: title: 層 empty: 空 - copyKey: Copy Key + copyKey: 複製鍵 connectedMiners: one_miner: 1 個開採機 n_miners: 個開採機 - limited_items: Limited to + limited_items: 上限 watermark: - title: Demo version - desc: Click here to see the Steam version advantages! + title: 試玩版 + desc: 按這裡看 Steam 版的優勢! get_on_steam: 在 Steam 上取得 standaloneAdvantages: title: 取得單機版! @@ -452,18 +440,16 @@ buildings: description: 儲存多餘的物品,有一定儲存上限。優先從左側輸出,可以被用來作為溢流門。 wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: 電線交叉 + description: 電線彼此交叉但不互相連接。 constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: 固定信號 + description: 輸出固定信號,可以是形狀、顏色或布林值(1或0)。 lever: default: name: 信號切換器 - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + description: 切換電路層的輸出布林值(1或0),舉例來說,它可以操控物件分類器。 logic_gate: default: name: AND 邏輯閘 @@ -488,30 +474,25 @@ buildings: (「真」值代表:形狀正確、顏色正確或布林值為1) filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: 物件分類器 + description: 它會依據電路層收到的訊號分類,符合的會到上方,不符合的到右方。 + 它也可以被布林值訊號控制。 display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: 顯示器 + description: 連接一個訊號到顯示器上顯示,訊號可以是形狀、物件或布林值。 reader: default: name: 傳送帶讀取機 - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + description: 它會讀取輸送帶的平均流量,(解鎖後)在電路層輸出最後讀取的物件。 analyzer: default: name: 形狀分析機 - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + description: 分析最底層右上角的圖形並輸出他的形狀跟顏色。 comparator: default: name: 比較機 - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + description: 當兩個輸入訊號完全相等時,輸出布林值「1」。它可以比較形狀、物件或布林值。 virtual_processor: default: name: 虛擬切割機 @@ -552,9 +533,8 @@ storyRewards: desc: 混合機已解鎖。如果沒有重疊的部分,混合機會嘗試把兩個輸入的圖形拼貼在一起。如果有重疊的部分,右邊的輸入會被到左邊的輸入上方! reward_splitter: title: 分流 - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + desc: 分流機平衡機的變體)已解鎖。 + - 它將單個傳送帶分流成兩個。 reward_tunnel: title: 隧道 desc: 隧道已解鎖。你現在可以從其他傳送帶或建築底下運送物品了! @@ -589,11 +569,9 @@ storyRewards: 基地會在電路層輸出他需要的形狀,你只需要分析這些訊號,然後依照需求自動調整你的工廠。 reward_blueprints: title: 藍圖 - desc: You can now copy and paste parts of your factory! Select - an area (Hold CTRL, then drag with your mouse), and press 'C' to - copy it.

Pasting it is not free, you need to - produce blueprint shapes to afford it! (Those you - just delivered). + desc: 你現在可以複製貼上你的工廠某些區域。 + 選擇一個區域(按住 CTRL 並拖曳滑鼠),再按「C」來複製。

+ 貼上不是免費的,你必須製造(剛才生成的)藍圖形狀來給付。 no_reward: title: 下一關 desc: "這一關沒有獎勵,但是下一關有!

PS: @@ -606,72 +584,66 @@ storyRewards: desc: 平衡機已解鎖。在大型工廠中,平衡機負責合流或分流多個傳送帶上的物品。 reward_merger: title: 合流 - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + desc: 合流機平衡機的變體)已解鎖。 + - 它會將兩個傳送帶整合成一個。 reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: 讀取輸送帶 + desc: 輸送帶讀取機已解鎖。 + 它會讀取輸送帶的流量。

+ 當你解鎖電路層時,它會變得超有用! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: 180度旋轉 + desc: 180度旋轉機已解鎖。 + - 它可以180度旋轉物件(驚喜!:D) reward_display: - title: Display - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + title: 顯示器 + desc: "顯示器 已解鎖。 + - 在電路層上連接一個訊號到顯示器上顯示!

+ PS: 你有注意到輸送帶讀取機跟倉庫都會輸出它們最後讀取的物件嗎? + 試試看在顯示器上顯示它吧!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: 固定信號 + desc: 電路層上的固定信號已解鎖。 + 舉例,將物件分類器連上固定信號會很有用。

+ 固定信號可以輸出形狀顏色或是 + 布林值(1或0)。 reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: 邏輯閘 + desc: 邏輯閘已解鎖。 + 你可以覺得無所謂,但其實邏輯閘其實超酷的!

+ 有了這些邏輯閘,你可以運算 AND, OR, XOR 與 NOT。

+ 錦上添花,我再送你電晶體! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: 虛擬操作 + desc: 虛擬操作!

已解鎖。很多新建築有虛擬版,你可以模擬切割機、旋轉機、推疊機還有更多電路層上的建築。 + 繼續遊玩的你現在有三個選項:

+ - 蓋一個自動生成任何基地要求圖形的自動機(推薦!)。

+ - 利用電路層蓋一些很酷建築

+ - 繼續用原本的方式破關。

+ 不論你的選擇是什麼,祝你玩得開心! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + title: 電路層 & 四角上色機 + desc: "You just unlocked the 電路層已解鎖。 + 它是一個獨立於一般層之外的存在,將帶給你更多玩法!

+ 首先,我為你解鎖四角上色機。 + 想要上色的角落記得在電路層通電!

+ 按E切換至電路層。

+ PS: 設定裡開啟提示來啟動教程!" reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: 物件分類器 + desc: 物件分類器已解鎖。 + 它會依據電路層收到的訊號決定輸出端(右方或上方)。

+ 你也可以送一個固定訊號(1或0)來徹底啟用或不啟用此機器。 reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: 試玩結束 + desc: 你已破關試玩版! settings: title: 設置 categories: - general: General - userInterface: User Interface - advanced: Advanced - performance: Performance + general: 一般 + userInterface: 使用者介面(UI) + advanced: 進階 + performance: 效能 versionBadges: dev: 開發版本 staging: 預覽版本 @@ -770,53 +742,41 @@ settings: title: 音樂 description: 音樂設定 lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: 低畫質地圖資源 + description: 地圖資源在放大時呈現低畫質,此舉可以提升效率。地圖看起來更乾淨了,不妨試試看! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: 取消網格 + description: 取消網格可以增加效能,畫面也會比較乾淨! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: 按右鍵淨空游標 + description: 預設是開啟的,按下右鍵時,清空游標上顯示的準備要蓋建築。 + 如果關閉此選項,你可以一邊蓋工廠一邊刪除不要的建築。 lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: 低畫質(醜) + description: 用低畫質節省效能。遊戲畫面會變的很醜! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: 顯示分區邊界 + description: 遊戲是由許多 16x16 的分區組成,啟用這個選項會顯示分區的邊界。 pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: 在資源叢上使用開採機 + description: 預設是開啟的,當滴管移動到資源叢上方時,選擇開採機。 simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: 簡化輸送帶(醜) + description: 為節省效能,不 render 輸送帶。 + 除非有必要節省效能,不然我是不建議使用。 enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: 允許用滑鼠移動畫面 + description: 當滑鼠靠近畫面邊緣時,會移動地圖。移動速度取決於「移動速度」設定。 zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: 聚焦游標 + description: 如果啟用的話,放大縮小地圖時會以游標位置為中心,不然會以畫面中央為中心。 mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: 地圖資源標示大小 + description: 控制地圖資源標示大小(縮小俯瞰時)。 rangeSliderPercentage: % keybindings: title: 按鍵設置 - hint: 提示:使用CTRL、SHIFT、ALT! 這些建在放置建築時有不同的效果。 + hint: 提示:使用 CTRL、SHIFT、ALT ! 這些建在放置建築時有不同的效果。 resetKeybindings: 重置按鍵設置 categoryLabels: general: 通用 @@ -839,7 +799,7 @@ keybindings: createMarker: 創建地圖標記 menuOpenShop: 升級選單 menuOpenStats: 統計選單 - toggleHud: 開關HUD + toggleHud: 開關基地 toggleFPSInfo: 開關幀數與調試信息 belt: 傳送帶 underground_belt: 隧道 @@ -867,25 +827,25 @@ keybindings: mapMoveFaster: 快速移動 lockBeltDirection: 啟用傳送帶規劃 switchDirectionLockSide: 規劃器:換邊 - pipette: Pipette - menuClose: Close Menu + pipette: 滴管 + menuClose: 關閉選單 switchLayers: 更換層 wire: 電線 balancer: 平衡機 - storage: Storage - constant_signal: Constant Signal + storage: 倉庫 + constant_signal: 固定信號 logic_gate: 邏輯閘 - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing + lever: 開關(一般) + filter: 過濾器 + wire_tunnel: 電線交叉 display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor + reader: 輸送帶讀取機 + virtual_processor: 虛擬切割機 + transistor: 電晶體 analyzer: 形狀分析機 comparator: 比對機 item_producer: 物品生產機(沙盒模式) - copyWireValue: "Wires: Copy value below cursor" + copyWireValue: "電路:複製數值於游標底下" about: title: 關於遊戲 body: >- @@ -908,7 +868,7 @@ demo: oneGameLimit: 最多一個存檔 customizeKeybindings: 按鍵設置 exportingBase: 匯出工廠截圖 - settingNotAvailable: 在演示版中不可用。 + settingNotAvailable: 在試玩版中不可用。 tips: - 基地接受任何輸入,不只是當前要求的圖形! - 盡量讓工廠模組化,會有回報的! @@ -933,7 +893,7 @@ tips: - 白 = 紅 + 綠 + 藍。 - 倉庫優先從左側輸出。 - 花點時間研究可以重複利用的設計,會有回報的! - - 按住 CTRL 可以一次放置多個建築。 + - 按住 SHIFT 可以一次放置多個建築。 - 按住 ALT 以反轉輸送帶的放置方向。 - 效率是關鍵! - 離基地越遠得圖形叢越複雜。 From 91cb53b6ce34cba0665512ae6eede3dd2cee1304 Mon Sep 17 00:00:00 2001 From: Polarbub <71790726+Polarbub@users.noreply.github.com> Date: Sat, 31 Oct 2020 06:07:25 -0500 Subject: [PATCH 023/127] Fix Dependency errors (#869) * Add files via upload * Fixed Dependence error * Fixed Dependence errors * Add files via upload * Add files via upload --- gulp/package.json | 2 + gulp/yarn.lock | 233 ++++++++++++++++++++++++++++++++++++++++++++-- package.json | 4 +- yarn.lock | 229 +++++++++++++++++++++++++++++++++++++++++++-- 4 files changed, 450 insertions(+), 18 deletions(-) diff --git a/gulp/package.json b/gulp/package.json index ec69f4ce..49118c32 100644 --- a/gulp/package.json +++ b/gulp/package.json @@ -18,6 +18,7 @@ "@types/node": "^12.7.5", "ajv": "^6.10.2", "audiosprite": "^0.7.2", + "babel-core": "^6.26.3", "babel-loader": "^8.1.0", "browser-sync": "^2.26.10", "circular-dependency-plugin": "^5.0.2", @@ -45,6 +46,7 @@ "query-string": "^6.8.1", "rusha": "^0.8.13", "serialize-error": "^3.0.0", + "stream-browserify": "^3.0.0", "strictdom": "^1.0.1", "string-replace-webpack-plugin": "^0.1.3", "strip-indent": "^3.0.0", diff --git a/gulp/yarn.lock b/gulp/yarn.lock index 0fbce524..61c19815 100644 --- a/gulp/yarn.lock +++ b/gulp/yarn.lock @@ -1923,6 +1923,62 @@ axios@0.19.0: follow-redirects "1.5.10" is-buffer "^2.0.2" +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0, babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-loader@^8.1.0: version "8.1.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" @@ -1934,6 +1990,13 @@ babel-loader@^8.1.0: pify "^4.0.1" schema-utils "^2.6.5" +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + babel-plugin-closure-elimination@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-closure-elimination/-/babel-plugin-closure-elimination-1.3.0.tgz#3217fbf6d416dfdf14ff41a8a34e4d0a6bfc22b2" @@ -1956,6 +2019,27 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + babel-runtime@^7.0.0-beta.3: version "7.0.0-beta.3" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz#7c750de5514452c27612172506b49085a4a630f2" @@ -1964,6 +2048,47 @@ babel-runtime@^7.0.0-beta.3: core-js "^2.4.0" regenerator-runtime "^0.11.0" +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + bach@^1.0.0: version "1.2.0" resolved "https://registry.yarnpkg.com/bach/-/bach-1.2.0.tgz#4b3ce96bf27134f79a1b414a51c14e34c3bd9880" @@ -2965,6 +3090,11 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + colors@1.0.x: version "1.0.3" resolved "https://registry.yarnpkg.com/colors/-/colors-1.0.3.tgz#0433f44d809680fdeb60ed260f1b0c262e82a40b" @@ -3135,7 +3265,7 @@ content-disposition@^0.5.2: dependencies: safe-buffer "5.1.2" -convert-source-map@^1.5.0, convert-source-map@^1.7.0: +convert-source-map@^1.5.0, convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -3190,6 +3320,11 @@ core-js@^2.4.0, core-js@^2.5.7: resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.9.tgz#6b4b214620c834152e179323727fc19741b084f2" integrity sha512-HOpZf6eXmnl7la+cUdMnLvUxKNqLUzJvgIziQ0DiF3JwSImNphIqdGqzj6hIKyX04MmV0poclQ7+wjWvxQyR2A== +core-js@^2.5.0: + version "2.6.11" + resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" + integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== + core-util-is@1.0.2, core-util-is@~1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" @@ -3581,7 +3716,7 @@ dateformat@^2.0.0: resolved "https://registry.yarnpkg.com/dateformat/-/dateformat-2.2.0.tgz#4065e2013cf9fb916ddfd82efb506ad4c6769062" integrity sha1-QGXiATz5+5Ft39gu+1Bq1MZ2kGI= -debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8: +debug@2.6.9, debug@^2.1.1, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -3808,6 +3943,13 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + detect-libc@^1.0.2: version "1.0.3" resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" @@ -5607,7 +5749,7 @@ globals@^11.1.0, globals@^11.7.0: resolved "https://registry.yarnpkg.com/globals/-/globals-11.12.0.tgz#ab8795338868a0babd8525758018c2a7eb95c42e" integrity sha512-WOBp/EEGUiIsJSp7wcv/y6MO+lV9UoncWqxuFfm8eBwzWNgyfBd6Gz+IeKQ9jCmyhoH99g15M3T+QaVHFjizVA== -globals@^9.2.0: +globals@^9.18.0, globals@^9.2.0: version "9.18.0" resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== @@ -6265,6 +6407,14 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -6602,7 +6752,7 @@ inherits@1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js= -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7172,6 +7322,11 @@ js-levenshtein@^1.1.3: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + js-yaml@^3.13.0, js-yaml@^3.13.1, js-yaml@^3.4.6, js-yaml@^3.5.1, js-yaml@^3.5.4: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -7216,6 +7371,11 @@ jsdom@12.2.0: ws "^6.1.0" xml-name-validator "^3.0.0" +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -7263,7 +7423,7 @@ json-stringify-safe@~5.0.1: resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" integrity sha1-Epai1Y/UXxmg9s4B1lcB4sc1tus= -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= @@ -7463,6 +7623,14 @@ limiter@^1.0.5: resolved "https://registry.yarnpkg.com/limiter/-/limiter-1.1.4.tgz#87c9c3972d389fdb0ba67a45aadbc5d2f8413bc1" integrity sha512-XCpr5bElgDI65vVgstP8TWjv6/QKWm9GU5UG0Pr5sLQ3QLo8NVKsioe+Jed5/3vFOe3IQuqE7DKwTvKQkjTHvg== +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + load-bmfont@^1.3.1, load-bmfont@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" @@ -7851,6 +8019,11 @@ lodash@^4.0.0, lodash@^4.15.0, lodash@^4.17.10, lodash@^4.17.11, lodash@^4.17.12 resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.4: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + lodash@~1.0.1: version "1.0.2" resolved "https://registry.yarnpkg.com/lodash/-/lodash-1.0.2.tgz#8f57560c83b59fc270bd3d561b690043430e2551" @@ -8404,6 +8577,11 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== +nanoid@^3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -8982,7 +9160,7 @@ os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: +os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -9304,7 +9482,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -10212,6 +10390,16 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.1.tgz#c3a287dd10e4f6c84cb3791052b96a5d859c9389" + integrity sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.12" + source-map "^0.6.1" + prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" @@ -10242,7 +10430,7 @@ pretty-hrtime@^1.0.0: resolved "https://registry.yarnpkg.com/pretty-hrtime/-/pretty-hrtime-1.0.3.tgz#b7e3ea42435a4c9b2759d99e0f201eb195802ee1" integrity sha1-t+PqQkNaTJsnWdmeDyAesZWALuE= -private@^0.1.6, private@~0.1.5: +private@^0.1.6, private@^0.1.8, private@~0.1.5: version "0.1.8" resolved "https://registry.yarnpkg.com/private/-/private-0.1.8.tgz#2381edb3689f7a53d653190060fcf822d2f368ff" integrity sha512-VvivMrbvd2nKkiG38qjULzlc+4Vx4wm/whI9pQD35YrARNnhxeiRktSOhSukRLFNlzg6Br/cJPet5J/u19r/mg== @@ -10573,7 +10761,7 @@ readable-stream@^1.0.27-1, readable-stream@~1.1.9: isarray "0.0.1" string_decoder "~0.10.x" -readable-stream@^3.0.2, readable-stream@^3.1.1: +readable-stream@^3.0.2, readable-stream@^3.1.1, readable-stream@^3.5.0: version "3.6.0" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.0.tgz#337bbda3adc0706bd3e024426a286d4b4b2c9198" integrity sha512-BViHy7LKeTz4oNnkcLJ+lVSL6vpiFeX6/d3oSH8zCW7UxP2onchk+vTGB143xuFjHS3deTgkKoXXymXqymiIdA== @@ -11372,6 +11560,11 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + slash@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" @@ -11533,6 +11726,13 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + source-map-support@~0.5.12: version "0.5.13" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.13.tgz#31b24a9c2e73c2de85066c0feb7d44767ed52932" @@ -11553,7 +11753,7 @@ source-map@^0.4.2: dependencies: amdefine ">=0.0.4" -source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@~0.5.0: +source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -11718,6 +11918,14 @@ stream-browserify@^2.0.1: inherits "~2.0.1" readable-stream "^2.0.2" +stream-browserify@^3.0.0: + version "3.0.0" + resolved "https://registry.yarnpkg.com/stream-browserify/-/stream-browserify-3.0.0.tgz#22b0a2850cdf6503e73085da1fc7b7d0c2122f2f" + integrity sha512-H73RAHsVBapbim0tU2JwwOiXUj+fikfiaoYAKHF3VJfA0pe2BCzkhAHBlLG6REzE+2WNZcxOXjK7lkso+9euLA== + dependencies: + inherits "~2.0.4" + readable-stream "^3.5.0" + stream-consume@~0.1.0: version "0.1.1" resolved "https://registry.yarnpkg.com/stream-consume/-/stream-consume-0.1.1.tgz#d3bdb598c2bd0ae82b8cac7ac50b1107a7996c48" @@ -12394,6 +12602,11 @@ to-buffer@^1.1.1: resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" diff --git a/package.json b/package.json index acd23c07..715bf26d 100644 --- a/package.json +++ b/package.json @@ -28,6 +28,7 @@ "@types/cordova": "^0.0.34", "@types/filesystem": "^0.0.29", "ajv": "^6.10.2", + "babel-core": "^6.26.3", "babel-loader": "^8.0.4", "circular-dependency-plugin": "^5.0.2", "circular-json": "^0.5.9", @@ -49,6 +50,7 @@ "markdown-loader": "^4.0.0", "match-all": "^1.2.5", "phonegap-plugin-mobile-accessibility": "^1.0.5", + "postcss": ">=5.0.0", "promise-polyfill": "^8.1.0", "query-string": "^6.8.1", "rusha": "^0.8.13", @@ -71,7 +73,7 @@ "yawn-yaml": "^1.5.0" }, "devDependencies": { - "@octokit/rest": "^18.0.6", + "@octokit/rest": "^18.0.6", "@typescript-eslint/eslint-plugin": "3.0.1", "@typescript-eslint/parser": "3.0.1", "autoprefixer": "^9.4.3", diff --git a/yarn.lock b/yarn.lock index da9d4625..4a7612d0 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1627,6 +1627,62 @@ autoprefixer@^9.4.3, autoprefixer@^9.4.7, autoprefixer@^9.6.1: postcss "^7.0.27" postcss-value-parser "^4.0.3" +babel-code-frame@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-code-frame/-/babel-code-frame-6.26.0.tgz#63fd43f7dc1e3bb7ce35947db8fe369a3f58c74b" + integrity sha1-Y/1D99weO7fONZR9uP42mj9Yx0s= + dependencies: + chalk "^1.1.3" + esutils "^2.0.2" + js-tokens "^3.0.2" + +babel-core@^6.26.0, babel-core@^6.26.3: + version "6.26.3" + resolved "https://registry.yarnpkg.com/babel-core/-/babel-core-6.26.3.tgz#b2e2f09e342d0f0c88e2f02e067794125e75c207" + integrity sha512-6jyFLuDmeidKmUEb3NM+/yawG0M2bDZ9Z1qbZP59cyHLz8kYGKYwpJP0UwUKKUiTRNvxfLesJnTedqczP7cTDA== + dependencies: + babel-code-frame "^6.26.0" + babel-generator "^6.26.0" + babel-helpers "^6.24.1" + babel-messages "^6.23.0" + babel-register "^6.26.0" + babel-runtime "^6.26.0" + babel-template "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + convert-source-map "^1.5.1" + debug "^2.6.9" + json5 "^0.5.1" + lodash "^4.17.4" + minimatch "^3.0.4" + path-is-absolute "^1.0.1" + private "^0.1.8" + slash "^1.0.0" + source-map "^0.5.7" + +babel-generator@^6.26.0: + version "6.26.1" + resolved "https://registry.yarnpkg.com/babel-generator/-/babel-generator-6.26.1.tgz#1844408d3b8f0d35a404ea7ac180f087a601bd90" + integrity sha512-HyfwY6ApZj7BYTcJURpM5tznulaBvyio7/0d4zFOeMPUmfxkCjHocCuoLa2SAGzBI8AREcH3eP3758F672DppA== + dependencies: + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + detect-indent "^4.0.0" + jsesc "^1.3.0" + lodash "^4.17.4" + source-map "^0.5.7" + trim-right "^1.0.1" + +babel-helpers@^6.24.1: + version "6.24.1" + resolved "https://registry.yarnpkg.com/babel-helpers/-/babel-helpers-6.24.1.tgz#3471de9caec388e5c850e597e58a26ddf37602b2" + integrity sha1-NHHenK7DiOXIUOWX5Yom3fN2ArI= + dependencies: + babel-runtime "^6.22.0" + babel-template "^6.24.1" + babel-loader@^8.0.4: version "8.1.0" resolved "https://registry.yarnpkg.com/babel-loader/-/babel-loader-8.1.0.tgz#c611d5112bd5209abe8b9fa84c3e4da25275f1c3" @@ -1638,6 +1694,13 @@ babel-loader@^8.0.4: pify "^4.0.1" schema-utils "^2.6.5" +babel-messages@^6.23.0: + version "6.23.0" + resolved "https://registry.yarnpkg.com/babel-messages/-/babel-messages-6.23.0.tgz#f3cdf4703858035b2a2951c6ec5edf6c62f2630e" + integrity sha1-8830cDhYA1sqKVHG7F7fbGLyYw4= + dependencies: + babel-runtime "^6.22.0" + babel-plugin-closure-elimination@^1.3.0: version "1.3.0" resolved "https://registry.yarnpkg.com/babel-plugin-closure-elimination/-/babel-plugin-closure-elimination-1.3.0.tgz#3217fbf6d416dfdf14ff41a8a34e4d0a6bfc22b2" @@ -1660,6 +1723,27 @@ babel-plugin-dynamic-import-node@^2.3.0: dependencies: object.assign "^4.1.0" +babel-register@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-register/-/babel-register-6.26.0.tgz#6ed021173e2fcb486d7acb45c6009a856f647071" + integrity sha1-btAhFz4vy0htestFxgCahW9kcHE= + dependencies: + babel-core "^6.26.0" + babel-runtime "^6.26.0" + core-js "^2.5.0" + home-or-tmp "^2.0.0" + lodash "^4.17.4" + mkdirp "^0.5.1" + source-map-support "^0.4.15" + +babel-runtime@^6.22.0, babel-runtime@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-6.26.0.tgz#965c7058668e82b55d7bfe04ff2337bc8b5647fe" + integrity sha1-llxwWGaOgrVde/4E/yM3vItWR/4= + dependencies: + core-js "^2.4.0" + regenerator-runtime "^0.11.0" + babel-runtime@^7.0.0-beta.3: version "7.0.0-beta.3" resolved "https://registry.yarnpkg.com/babel-runtime/-/babel-runtime-7.0.0-beta.3.tgz#7c750de5514452c27612172506b49085a4a630f2" @@ -1668,6 +1752,47 @@ babel-runtime@^7.0.0-beta.3: core-js "^2.4.0" regenerator-runtime "^0.11.0" +babel-template@^6.24.1, babel-template@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-template/-/babel-template-6.26.0.tgz#de03e2d16396b069f46dd9fff8521fb1a0e35e02" + integrity sha1-3gPi0WOWsGn0bdn/+FIfsaDjXgI= + dependencies: + babel-runtime "^6.26.0" + babel-traverse "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + lodash "^4.17.4" + +babel-traverse@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-traverse/-/babel-traverse-6.26.0.tgz#46a9cbd7edcc62c8e5c064e2d2d8d0f4035766ee" + integrity sha1-RqnL1+3MYsjlwGTi0tjQ9ANXZu4= + dependencies: + babel-code-frame "^6.26.0" + babel-messages "^6.23.0" + babel-runtime "^6.26.0" + babel-types "^6.26.0" + babylon "^6.18.0" + debug "^2.6.8" + globals "^9.18.0" + invariant "^2.2.2" + lodash "^4.17.4" + +babel-types@^6.26.0: + version "6.26.0" + resolved "https://registry.yarnpkg.com/babel-types/-/babel-types-6.26.0.tgz#a3b073f94ab49eb6fa55cd65227a334380632497" + integrity sha1-o7Bz+Uq0nrb6Vc1lInozQ4BjJJc= + dependencies: + babel-runtime "^6.26.0" + esutils "^2.0.2" + lodash "^4.17.4" + to-fast-properties "^1.0.3" + +babylon@^6.18.0: + version "6.18.0" + resolved "https://registry.yarnpkg.com/babylon/-/babylon-6.18.0.tgz#af2f3b88fa6f5c1e4c634d1a0f8eac4f55b395e3" + integrity sha512-q/UEjfGJ2Cm3oKV71DJz9d25TPnq5rhBVL2Q4fA5wcC3jcrdn7+SssEybFIxwAvvP+YCsCYNKughoF33GxgycQ== + balanced-match@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.0.tgz#89b4d199ab2bee49de164ea02b89ce462d71b767" @@ -2402,6 +2527,11 @@ color@^3.0.0: color-convert "^1.9.1" color-string "^1.5.2" +colorette@^1.2.1: + version "1.2.1" + resolved "https://registry.yarnpkg.com/colorette/-/colorette-1.2.1.tgz#4d0b921325c14faf92633086a536db6e89564b1b" + integrity sha512-puCDz0CzydiSYOrnXpz/PKd69zRrribezjtE9yd4zvytoRc8+RY/KJPvtPFKZS3E3wP6neGyMe0vOTlHO5L3Pw== + colors@^1.3.3: version "1.4.0" resolved "https://registry.yarnpkg.com/colors/-/colors-1.4.0.tgz#c50491479d4c1bdaed2c9ced32cf7c7dc2360f78" @@ -2489,7 +2619,7 @@ content-type@~1.0.4: resolved "https://registry.yarnpkg.com/content-type/-/content-type-1.0.4.tgz#e138cc75e040c727b1966fe5e5f8c9aee256fe3b" integrity sha512-hIP3EEPs8tB9AT1L+NUqtwOAps4mk2Zob89MWXMHjHWg9milF/j4osnnQLXBCBFBk/tvIG/tUc9mOUJiPBhPXA== -convert-source-map@^1.7.0: +convert-source-map@^1.5.1, convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" integrity sha512-4FJkXzKXEDB1snCFZlLP4gpC3JILicCpGbzG9f9G7tGqGCzETQ2hWPrcinA9oU4wtf2biUaEH5065UnMeR33oA== @@ -2536,7 +2666,7 @@ core-js@3: resolved "https://registry.yarnpkg.com/core-js/-/core-js-3.6.5.tgz#7395dc273af37fb2e50e9bd3d9fe841285231d1a" integrity sha512-vZVEEwZoIsI+vPEuoF9Iqf5H7/M3eeQqWlQnYa8FSKKePuYTf5MWnxb5SDAzCa60b3JBRS5g9b+Dq7b1y/RCrA== -core-js@^2.4.0, core-js@^2.5.7: +core-js@^2.4.0, core-js@^2.5.0, core-js@^2.5.7: version "2.6.11" resolved "https://registry.yarnpkg.com/core-js/-/core-js-2.6.11.tgz#38831469f9922bded8ee21c9dc46985e0399308c" integrity sha512-5wjnpaT/3dV+XB4borEsnAYQchn00XSgTAWKDkEqv+K8KevjbzmofK6hfJ9TZIlpj2N0xQpazy7PiRQiWHqzWg== @@ -2852,7 +2982,7 @@ debounce-promise@^3.1.2: resolved "https://registry.yarnpkg.com/debounce-promise/-/debounce-promise-3.1.2.tgz#320fb8c7d15a344455cd33cee5ab63530b6dc7c5" integrity sha512-rZHcgBkbYavBeD9ej6sP56XfG53d51CD4dnaw989YX/nZ/ZJfgRx/9ePKmTNiUiyQvh4mtrMoS3OAWW+yoYtpg== -debug@2.6.9, debug@^2.2.0, debug@^2.3.3: +debug@2.6.9, debug@^2.2.0, debug@^2.3.3, debug@^2.6.8, debug@^2.6.9: version "2.6.9" resolved "https://registry.yarnpkg.com/debug/-/debug-2.6.9.tgz#5d128515df134ff327e90a4c93f4e077a536341f" integrity sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA== @@ -3006,6 +3136,13 @@ detect-file@^1.0.0: resolved "https://registry.yarnpkg.com/detect-file/-/detect-file-1.0.0.tgz#f0d66d03672a825cb1b73bdb3fe62310c8e552b7" integrity sha1-8NZtA2cqglyxtzvbP+YjEMjlUrc= +detect-indent@^4.0.0: + version "4.0.0" + resolved "https://registry.yarnpkg.com/detect-indent/-/detect-indent-4.0.0.tgz#f76d064352cdf43a1cb6ce619c4ee3a9475de208" + integrity sha1-920GQ1LN9Docts5hnE7jqUdd4gg= + dependencies: + repeating "^2.0.0" + diffie-hellman@^5.0.0: version "5.0.3" resolved "https://registry.yarnpkg.com/diffie-hellman/-/diffie-hellman-5.0.3.tgz#40e8ee98f55a2149607146921c63e1ae5f3d2875" @@ -4037,6 +4174,11 @@ globals@^12.1.0: dependencies: type-fest "^0.8.1" +globals@^9.18.0: + version "9.18.0" + resolved "https://registry.yarnpkg.com/globals/-/globals-9.18.0.tgz#aa3896b3e69b487f17e31ed2143d69a8e30c2d8a" + integrity sha512-S0nG3CLEQiY/ILxqtztTWH/3iRRdyBLw6KMDxnKMchrtbj2OFmehVh0WUCfW3DUrIgx/qFrJPICrq4Z4sTR9UQ== + gonzales-pe@^4.2.3: version "4.3.0" resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" @@ -4223,6 +4365,14 @@ hmac-drbg@^1.0.0: minimalistic-assert "^1.0.0" minimalistic-crypto-utils "^1.0.1" +home-or-tmp@^2.0.0: + version "2.0.0" + resolved "https://registry.yarnpkg.com/home-or-tmp/-/home-or-tmp-2.0.0.tgz#e36c3f2d2cae7d746a857e38d18d5f32a7882db8" + integrity sha1-42w/LSyufXRqhX440Y1fMqeILbg= + dependencies: + os-homedir "^1.0.0" + os-tmpdir "^1.0.1" + homedir-polyfill@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/homedir-polyfill/-/homedir-polyfill-1.0.3.tgz#743298cef4e5af3e194161fbadcc2151d3a058e8" @@ -4815,6 +4965,11 @@ js-base64@^2.1.9: resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-4.0.0.tgz#19203fb59991df98e3a287050d4647cdeaf32499" integrity sha512-RdJUflcE3cUzKiMqQgsCu06FPu9UdIJO0beYbPhHN4k6apgJtifcoCtT9bcxOpYBtpD2kCM6Sbzg4CausW/PKQ== +js-tokens@^3.0.2: + version "3.0.2" + resolved "https://registry.yarnpkg.com/js-tokens/-/js-tokens-3.0.2.tgz#9866df395102130e38f7f996bceb65443209c25b" + integrity sha1-mGbfOVECEw449/mWvOtlRDIJwls= + js-yaml@^3.13.1: version "3.13.1" resolved "https://registry.yarnpkg.com/js-yaml/-/js-yaml-3.13.1.tgz#aff151b30bfdfa8e49e05da22e7415e9dfa37847" @@ -4831,6 +4986,11 @@ js-yaml@^3.4.2: argparse "^1.0.7" esprima "^4.0.0" +jsesc@^1.3.0: + version "1.3.0" + resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-1.3.0.tgz#46c3fec8c1892b12b0833db9bc7622176dbab34b" + integrity sha1-RsP+yMGJKxKwgz25vHYiF226s0s= + jsesc@^2.5.1: version "2.5.2" resolved "https://registry.yarnpkg.com/jsesc/-/jsesc-2.5.2.tgz#80564d2e483dacf6e8ef209650a67df3f0c283a4" @@ -4861,7 +5021,7 @@ json-stable-stringify-without-jsonify@^1.0.1: resolved "https://registry.yarnpkg.com/json-stable-stringify-without-jsonify/-/json-stable-stringify-without-jsonify-1.0.1.tgz#9db7b59496ad3f3cfef30a75142d2d930ad72651" integrity sha1-nbe1lJatPzz+8wp1FC0tkwrXJlE= -json5@^0.5.0: +json5@^0.5.0, json5@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/json5/-/json5-0.5.1.tgz#1eade7acc012034ad84e2396767ead9fa5495821" integrity sha1-Hq3nrMASA0rYTiOWdn6tn6VJWCE= @@ -4943,6 +5103,14 @@ levn@^0.4.1: prelude-ls "^1.2.1" type-check "~0.4.0" +line-column@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/line-column/-/line-column-1.0.2.tgz#d25af2936b6f4849172b312e4792d1d987bc34a2" + integrity sha1-0lryk2tvSEkXKzEuR5LR2Ye8NKI= + dependencies: + isarray "^1.0.0" + isobject "^2.0.0" + load-bmfont@^1.3.1, load-bmfont@^1.4.0: version "1.4.0" resolved "https://registry.yarnpkg.com/load-bmfont/-/load-bmfont-1.4.0.tgz#75f17070b14a8c785fe7f5bee2e6fd4f98093b6b" @@ -5059,6 +5227,11 @@ lodash@^4.15.0, lodash@^4.17.11, lodash@^4.17.13, lodash@^4.17.14, lodash@^4.17. resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.15.tgz#b447f6670a0455bbfeedd11392eff330ea097548" integrity sha512-8xOcRHvCjnocdS5cpwXQXVzmmh5e5+saE2QGoeQmbKmRS6J3VQppPOIt0MnmE+4xlZoumy0GPG0D0MVIQbNA1A== +lodash@^4.17.4: + version "4.17.20" + resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.20.tgz#b44a9b6297bcb698f1c51a3545a2b3b368d59c52" + integrity sha512-PlhdFcillOINfeV7Ni6oF1TAEayyZBoZ8bcshTHqOYJYlrqzRK5hagpagky5o4HfCzzd1TRkXPMFq6cKk9rGmA== + logalot@^2.0.0, logalot@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/logalot/-/logalot-2.1.0.tgz#5f8e8c90d304edf12530951a5554abb8c5e3f552" @@ -5446,6 +5619,11 @@ nan@^2.12.1: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.1.tgz#d7be34dfa3105b91494c3147089315eff8874b01" integrity sha512-isWHgVjnFjh2x2yuJ/tj3JbwoHu3UC2dX5G/88Cm24yB6YopVgxvBObDY7n5xW6ExmFhJpSEQqFPvq9zaXc8Jw== +nanoid@^3.1.12: + version "3.1.12" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" + integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== + nanomatch@^1.2.9: version "1.2.13" resolved "https://registry.yarnpkg.com/nanomatch/-/nanomatch-1.2.13.tgz#b87a8aa4fc0de8fe6be88895b38983ff265bd119" @@ -5718,6 +5896,11 @@ os-filter-obj@^2.0.0: dependencies: arch "^2.1.0" +os-homedir@^1.0.0: + version "1.0.2" + resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" + integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= + os-locale@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-3.1.0.tgz#a802a6ee17f24c10483ab9935719cef4ed16bf1a" @@ -5727,7 +5910,7 @@ os-locale@^3.1.0: lcid "^2.0.0" mem "^4.0.0" -os-tmpdir@~1.0.2: +os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: version "1.0.2" resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= @@ -5974,7 +6157,7 @@ path-exists@^4.0.0: resolved "https://registry.yarnpkg.com/path-exists/-/path-exists-4.0.0.tgz#513bdbe2d3b95d7762e8c1137efa195c6c61b5b3" integrity sha512-ak9Qy5Q7jYb2Wwcey5Fpvg2KoAc/ZIhLSLOSBmRmygPsGwkVVt0fZa0qrtMz+m6tJTAHfZQ8FnmB4MG4LWy7/w== -path-is-absolute@^1.0.0: +path-is-absolute@^1.0.0, path-is-absolute@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" integrity sha1-F0uSaHNVNP+8es5r9TpanhtcX18= @@ -6772,6 +6955,16 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" +postcss@^8.1.1: + version "8.1.1" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.1.tgz#c3a287dd10e4f6c84cb3791052b96a5d859c9389" + integrity sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.12" + source-map "^0.6.1" + prelude-ls@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.2.1.tgz#debc6489d7a6e6b0e7611888cec880337d316396" @@ -7486,6 +7679,11 @@ simple-swizzle@^0.2.2: dependencies: is-arrayish "^0.3.1" +slash@^1.0.0: + version "1.0.0" + resolved "https://registry.yarnpkg.com/slash/-/slash-1.0.0.tgz#c41f2f6c39fc16d1cd17ad4b5d896114ae470d55" + integrity sha1-xB8vbDn8FtHNF61LXYlhFK5HDVU= + slice-ansi@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-2.1.0.tgz#cacd7693461a637a5788d92a7dd4fba068e81636" @@ -7562,6 +7760,13 @@ source-map-resolve@^0.5.0: source-map-url "^0.4.0" urix "^0.1.0" +source-map-support@^0.4.15: + version "0.4.18" + resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.4.18.tgz#0286a6de8be42641338594e97ccea75f0a2c585f" + integrity sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA== + dependencies: + source-map "^0.5.6" + source-map-support@~0.5.12: version "0.5.19" resolved "https://registry.yarnpkg.com/source-map-support/-/source-map-support-0.5.19.tgz#a98b62f86dcaf4f67399648c085291ab9e8fed61" @@ -7575,7 +7780,7 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.5.0, source-map@^0.5.6, source-map@~0.5.0: +source-map@^0.5.0, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" integrity sha1-igOdLRAh0i0eoUyA2OpGi6LvP8w= @@ -8063,6 +8268,11 @@ to-buffer@^1.1.1: resolved "https://registry.yarnpkg.com/to-buffer/-/to-buffer-1.1.1.tgz#493bd48f62d7c43fcded313a03dcadb2e1213a80" integrity sha512-lx9B5iv7msuFYE3dytT+KE5tap+rNYw+K4jVkb9R/asAb+pbBSM17jtunHplhBe6RRJdZx3Pn2Jph24O32mOVg== +to-fast-properties@^1.0.3: + version "1.0.3" + resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-1.0.3.tgz#b83571fa4d8c25b82e231b06e3a3055de4ca1a47" + integrity sha1-uDVx+k2MJbguIxsG46MFXeTKGkc= + to-fast-properties@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/to-fast-properties/-/to-fast-properties-2.0.0.tgz#dc5e698cbd079265bc73e0377681a4e4e83f616e" @@ -8117,6 +8327,11 @@ trim-repeated@^1.0.0: dependencies: escape-string-regexp "^1.0.2" +trim-right@^1.0.1: + version "1.0.1" + resolved "https://registry.yarnpkg.com/trim-right/-/trim-right-1.0.1.tgz#cb2e1203067e0c8de1f614094b9fe45704ea6003" + integrity sha1-yy4SAwZ+DI3h9hQJS5/kVwTqYAM= + trim@^0.0.1: version "0.0.1" resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" From 61f3b1991f256b8fa368b5e28593942770dbfa06 Mon Sep 17 00:00:00 2001 From: Galo223344 <46462621+Galo223344@users.noreply.github.com> Date: Sat, 31 Oct 2020 08:09:12 -0300 Subject: [PATCH 024/127] Translated strings and improved translation (#875) * Translating the rest of the strings to spanish Don't merge yet! Only commiting to save progress * Update base-es.yaml * Translated strings and improved translation - Translated 99% of the strings, there's only one hint left that I didn't quite understand - Fixed some typos - Changed the translation of hub from "Central building" to "HUB" * Update base-es.yaml * More improvements, also changed 20 upgrades to infinite upgrades. --- translations/base-es.yaml | 173 +++++++++++++++++++------------------- 1 file changed, 85 insertions(+), 88 deletions(-) diff --git a/translations/base-es.yaml b/translations/base-es.yaml index 8354c684..66197195 100644 --- a/translations/base-es.yaml +++ b/translations/base-es.yaml @@ -9,21 +9,21 @@ steamPage: A medida que el nivel aumenta, las formas se vuelven más y más complejas, y tienes que extenderte en un mapa infinito. - Y por si fuera poco, también tienes que producir exponencialmente más para satisfacer las demandas - ¡lo único que ayuda es escalar! + Y por si fuera poco, también tienes que producir exponencialmente más para satisfacer las demandas - ¡lo único que ayuda es ampliar! - Mientras que sólo procesas formas al principio, tienes que colorearlas después - ¡para ello tienes que extraer y mezclar los colores! + Mientras que sólo procesas formas al principio, tienes que colorearlas después - ¡para ello tienes que extraer y mezclar colores! Comprando el juego en Steam tienes acceso a la versión completa, ¡pero también puedes jugar una demo en shapez.io primero y decidir después! title_advantages: Ventajas del juego advantages: - 12 nuevos niveles de un total de 26 niveles - - 18 nuevos edificios ¡para una fábrica totalmente automatizada! - - 20 Upgrade Tiers for many hours of fun! - - Wires Update for an entirely new dimension! - - Modo oscuro! + - 18 nuevos edificios ¡Para una fábrica totalmente automatizada! + - Nieveles infinitos de mejoras ¡Para horas de diversión! + - ¡Cables para una dimensión completamente nueva! + - ¡Modo oscuro! - Partidad guardadas ilimitadas - Marcadores ilimitados - - Me apoyarás! ❤️ + - ¡Me apoyarás! ❤️ title_future: Contenido futuro planned: - Librería de planos (Exclusivo de Standalone) @@ -46,7 +46,7 @@ steamPage: trato de revisar todas las sugerencias además de tomar en cuenta los consejos siempre que sea posible. - Asegurate de revisar mi página de Trello donde podrás encontrar el Roadmap! + ¡Asegurate de revisar mi página de Trello donde podrás encontrar el Roadmap! global: loading: Cargando error: Error @@ -92,7 +92,7 @@ mainMenu: discordLink: Servidor de Discord oficial helpTranslate: ¡Ayuda a traducirlo! madeBy: Desarrollado por - browserWarning: ¡Lo siento, pero el juego funcionará despacio en tu navegador! + browserWarning: ¡Lo siento, pero el juego funcionará lento en tu navegador! Obtén el juego completo o descarga Chrome para la experiencia completa. savegameLevel: Nivel savegameLevelUnknown: Nivel desconocido @@ -121,8 +121,8 @@ dialogs: text: "No se ha podido cargar la partida guardada:" confirmSavegameDelete: title: Confirmar borrado - text: Estás seguro de querér borrar el siguiente guardado?

- '' que está en el nivel

Esto no se puede deshacer! + text: ¿Estás seguro de querér borrar el siguiente guardado?

+ '' que está en el nivel

¡Esto no se puede deshacer! savegameDeletionError: title: Fallo al borrar text: "Fallo al borrar la partida guardada:" @@ -131,7 +131,7 @@ dialogs: text: Tienes que reinciar la partida para aplicar los cambios. editKeybinding: title: Cambiar atajos de teclado - desc: Pulsa la tecla o botón del ratón que quieras asignar, o escape para + desc: Pulsa la tecla o botón del ratón que quieras asignar, o presiona escape para cancelar. resetKeybindingsConfirmation: title: Reiniciar atajos de teclado @@ -166,7 +166,7 @@ dialogs: desc: ¡Estás cortando muchos edificios ( para ser exactos)! ¿Estas seguro de que quieres hacer esto? massCutInsufficientConfirm: - title: Confirm cut + title: Confirmar corte desc: ¡No puedes permitirte pegar este área! ¿Estás seguro de que quieres cortarlo? blueprintsNotUnlocked: @@ -197,7 +197,7 @@ dialogs: editSignal: title: Establecer señal descItems: "Elige un item pre-definido:" - descShortKey: ... o escribe la calve de una forma (La cual + descShortKey: ... o escribe la clave de una forma (La cual puedes generar aquí) renameSavegame: title: Renombrar archivo de guardado @@ -258,7 +258,7 @@ ingame: notifications: newUpgrade: ¡Una nueva mejora está disponible! gameSaved: Se ha guardado la partida. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: ¡El nivel ha sido completado! shop: title: Mejoras buttonUnlock: Mejorar @@ -269,14 +269,14 @@ ingame: dataSources: stored: title: Almacenado - description: Muestra la cantidad de figuras guardadas en tu edificio central. + description: Muestra la cantidad de figuras guardadas en tu HUB. produced: title: Producido description: Muestra todas las figuras que tu fábrica al completo produce, incluyendo productos intermedios. delivered: title: Entregados - description: Muestra las figuras que son entregadas a tu edificio central. + description: Muestra las figuras que son entregadas a tu HUB. noShapesProduced: Todavía no se han producido figuras. shapesDisplayUnits: second: / s @@ -294,7 +294,7 @@ ingame: cost: Coste waypoints: waypoints: Marcadores - hub: Edificio Central + hub: HUB description: Click izquierdo sobre un marcador para ir ahí, click derecho para borrarlo.

Pulsa para crear un marcador de la vista actual o click derecho para crear un marcador @@ -310,7 +310,7 @@ ingame: 1_1_extractor: ¡Coloca un extractor encima de un círculo para extraerlo! 1_2_conveyor: "¡Conecta el extractor con una cinta - transportadora a tu edificio central!

Pista: + transportadora
a tu HUB!

Pista: ¡Pulsa y arrastra la cinta transportadora con el ratón!" 1_3_expand: '¡Esto NO es un "juego de esperar"! Construye más @@ -321,14 +321,14 @@ ingame: 2_1_place_cutter: "¡Ahora pon un Cortador para dividir los circulos en dos mitades!

PD: El cortador siempre corta de de arriba a abajo independientemente de su orientación." - 2_2_place_trash: ¡El cortador se puede tabar y atorar!

Usa un + 2_2_place_trash: ¡El cortador se puede trabar y atorar!

Usa un basurero para deshacerse de la actualmente (!) no necesitada basura. 2_3_more_cutters: "¡Buen trabajo! ¡Ahora pon 2 cortadores más para acelerar este lento proceso!

PD: Usa las teclas 0-9 para acceder a los edificios más rápido!" 3_1_rectangles: "¡Ahora consigamos unos rectangulos! construye 4 - extractores y conectalos a el edificio central.

PD: + extractores
y conectalos a el HUB.

PD: Manten apretado SHIFT mientrás pones cintas transportadoras para activar el planeador de cintas!" 21_1_place_quad_painter: ¡Pon el pintaor cuadruple y consigue unos @@ -339,7 +339,7 @@ ingame: entradas de el pintador con cables! 21_3_place_button: ¡Genial! ¡Ahora pon un Interruptor y conectalo con cables! - 21_4_press_button: "Presioa el interruptor para hacer que emita una señal + 21_4_press_button: "Presiona el interruptor para hacer que emita una señal verdadera lo cual activa el piintador.

PD: ¡No necesitas conectar todas las entradas! Intenta conectando solo dos." connectedMiners: @@ -364,7 +364,7 @@ ingame: title: Archivos de guardado infinitos desc: ¡Tantos como desees! upgrades: - title: 20 niveles de mejoras + title: Niveles infinitos de mejoras desc: ¡Esta demo solo tiene 5! markers: title: Marcadores infinitos @@ -660,11 +660,11 @@ storyRewards: title: Juego libre desc: ¡Lo hiciste! Haz desbloqueado el modo de juego libre! ¡Esto significa que las formas ahora son aleatoriamente generadas!

- Since the hub will require a throughput from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!

The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + Debído a que desde ahora de adelante el HUB pedrirá una cantidad especifica de formas por segundo + ¡Te recomiendo encarecidamente que construyas una maquina que automáticamente + envíe la forma pedida!

El HUB emite la forma + pedida en la capa de cables, así que todo lo que tienes que hacer es analizarla y + automaticamente configurar tu fabrica basada en ello. reward_blueprints: title: Planos desc: ¡Ahora puedes copiar y pegar partes de tu fábrica! @@ -1014,63 +1014,60 @@ demo: exportingBase: Exportando la base completa como imagen settingNotAvailable: No disponible en la versión de prueba. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - El HUB acepta entradas de cualquier tipo ¡No solo la forma actual! + - Trata de que tus fábricas sean modulares - ¡Te servirá en el futuro! + - No construyas muy cerca del HUB ¡O se volverá todo un caos! + - Si apilar las formas no funciona, intenta intercambiar las entradas. + - Puedes activar la dirección del planeador de cintas apretando R. + - Mantener apretado CTRL te permite poner cintas sin auto-orientación. + - Las proporciones siempre serán las mismas. Siempre y cuando todas las mejoras estén al mismo nivel. + - La ejecución en serie es más eficiente que la paralela. + - ¡Desbloquearás más variantes de edificios más adelante en el juego! + - Puedes usar T para cambiar entre diferentes variantes. + - ¡La simetría es clave! + - Los túneles de diferentes niveles pueden cruzarse entre sí + - Intenta construir fábricas compactas - ¡Me lo agradecerás luego! + - El pintor tiene una variante en espejo que puedes seleccionar con la técla T + - Tener una buena proporción entre edificion maximizará su eficiencia + - A su máximo nivel, 5 extractores llenarán por completo una cinta trasnportadora. + - ¡No te olvides de utilizár túneles! + - No es necesario dividir los items de manera uniforme para conseguír la mayor eficiencia. + - Mantener apretado SHIFT activará el planeador de cintas, permitiendote poner + largas lineas de cintas fácilmente. + - Los cortadores siempre cortan verticalmente, sin importar su orientación. + - Para obtener blanco solo mexcla todos los colores. + - El buffer de almacenamiento prioriza la primera salida. + - Invierte tiempo en construir diseños repetibles, ¡vale la pena! + - Mantener apretado CTRL te permite poner varios edificios a la vez. + - Puedes apretar ALT para invertir la dirección a la que van las cintas. + - ¡La eficiencia es la clave! + - Mientras más lejos del HUB estés más complejas serán las formas que te encuentres. + - Las máquinas tienen una velocidad limitada, divídelas para una máxima eficiencia. + - Usa balanceadores para maximizar tu eficiencia. + - La organización es importante. Trate de no cruzar demasiado las cintas transportadoras. + - ¡Planea con anticipación, o será un gran caos! + - ¡No saques tus viejas fábricas! Las necesitararás para desbloquear nuevas mejoras. + - ¡Intenta superar el nivel 20 por tu cuenta antes de buscar ayuda! + - No compliques las cosas, intenta mantenerlo simple y llegarás lejos. + - Puede que tengas que reutilizar las fábricas más tarde en el juego. Planea tus fábricas para que sean reutilizables. + - A veces puedes encontrar la forma que necesitas en el mapa sin la necesidad de usar apiladores. + - Los molinillos no pueden aparecer enteros naturalmente. + - Colorear las formas antes de cortarlas para una máxima eficiencia. + - Con los módulos, el espacio es sólo una percepción; una preocupación para los mortales. + - Haz una fábrica para planos separada. Son importantes para los módulos. + - Echa un vistazo más de cerca al mezclador de colores, y tus preguntas serán respondidas. + - Usa CTRL + Click izquierdo para seleccionar un área. + - Construir demasiado cerca del HUB puede interponerse en el camino de proyectos a futuro. + - El icono del alfiler junto a cada forma de la lista de mejoras lo fija a la pantalla. + - ¡Mezcla todos los colores primarios para obtener blanco! + - Tienes un mapa infinito, no te agobies tu fábrica, ¡expande! + - ¡Prueba también Factorio! Es mi juego favorito. + - ¡El cortador cuádruple corta en el sentido de las agujas del reloj empezando por la parte superior derecha! + - ¡Puedes descargar tus archivos de guardado en el menú principal! + - ¡Este juego tiene un montón de atajos útiles! Asegúrate de revisar la página de ajustes. + - Este juego tiene muchos ajustes, ¡asegúrate de revisarlos! + - ¡El marcador de tu HUB tiene una pequeña brújula para indicar su dirección! + - Para despejar las cintas transportadoras, corta el área y luego pégala en el mismo lugar. + - Presiona F4 para mostrar tu FPS y Tick Rate. + - Presiona F4 dos veces para mostrar las coordenadas de tu ratón y de la cámara. + - Puedes hacer clic en una forma fijada en el lado izquierdo para desfijarla. From 785eb31c8d39b6ffbe1896455e487488486d8423 Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Sat, 31 Oct 2020 12:12:05 +0100 Subject: [PATCH 025/127] make save compressor faster (#888) Fixes #836 by using a Map instead of an array. The Map maps the values to their indices rather than the reverse, making finding the index constant-time rather than linear, and so building the full map linear rather than quadratic. Flipping it to build the final array is also linear. --- src/js/savegame/savegame_compressor.js | 34 ++++++++++++++++---------- 1 file changed, 21 insertions(+), 13 deletions(-) diff --git a/src/js/savegame/savegame_compressor.js b/src/js/savegame/savegame_compressor.js index bc14baf7..ac82ebda 100644 --- a/src/js/savegame/savegame_compressor.js +++ b/src/js/savegame/savegame_compressor.js @@ -59,7 +59,7 @@ if (G_IS_DEV) { } } -function compressObjectInternal(obj, keys = [], values = []) { +function compressObjectInternal(obj, keys, values) { if (Array.isArray(obj)) { let result = []; for (let i = 0; i < obj.length; ++i) { @@ -69,33 +69,41 @@ function compressObjectInternal(obj, keys = [], values = []) { } else if (typeof obj === "object" && obj !== null) { let result = {}; for (const key in obj) { - let index = keys.indexOf(key); - if (index < 0) { - keys.push(key); - index = keys.length - 1; + let index = keys.get(key); + if (index === undefined) { + index = keys.size; + keys.set(key, index); } const value = obj[key]; result[compressInt(index)] = compressObjectInternal(value, keys, values); } return result; } else if (typeof obj === "string") { - let index = values.indexOf(obj); - if (index < 0) { - values.push(obj); - index = values.length - 1; + let index = values.get(obj); + if (index === undefined) { + index = values.size; + values.set(obj, index); } return compressInt(index); } return obj; } +function indexMapToArray(hashMap) { + const result = []; + hashMap.forEach((index, key) => { + result[index] = key; + }); + return result; +} + export function compressObject(obj) { - const keys = []; - const values = []; + const keys = new Map(); + const values = new Map(); const data = compressObjectInternal(obj, keys, values); return { - keys, - values, + keys: indexMapToArray(keys), + values: indexMapToArray(values), data, }; } From b17cb6952b00ea135596691d7442e1ab8efb55f6 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sat, 31 Oct 2020 12:19:51 +0100 Subject: [PATCH 026/127] Update changelog and minor fixes --- src/js/changelog.js | 2 ++ src/js/core/config.js | 3 ++- src/js/savegame/savegame_compressor.js | 24 +++++++++++++++++++++++- 3 files changed, 27 insertions(+), 2 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 84f0bc07..3a93bb96 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -5,6 +5,8 @@ export const CHANGELOG = [ entries: [ "Fixed stacking bug for level 26 which required restarting the game", "Fix reward notification being too long sometimes (by LeopoldTal)", + "Use locale decimal separator on belt reader display (by LeopoldTal)", + "Vastly improved performance when saving games (by LeopoldTal)", "Updated translations", ], }, diff --git a/src/js/core/config.js b/src/js/core/config.js index a7df2a90..4169a0c2 100644 --- a/src/js/core/config.js +++ b/src/js/core/config.js @@ -26,7 +26,8 @@ export const THIRDPARTY_URLS = { }, }; -export const A_B_TESTING_LINK_TYPE = Math.random() > 0.5 ? "steam_1_pr" : "steam_2_npr"; +// export const A_B_TESTING_LINK_TYPE = Math.random() > 0.95 ? "steam_1_pr" : "steam_2_npr"; +export const A_B_TESTING_LINK_TYPE = "steam_2_npr"; export const globalConfig = { // Size of a single tile in Pixels. diff --git a/src/js/savegame/savegame_compressor.js b/src/js/savegame/savegame_compressor.js index ac82ebda..b0b92aa8 100644 --- a/src/js/savegame/savegame_compressor.js +++ b/src/js/savegame/savegame_compressor.js @@ -59,6 +59,12 @@ if (G_IS_DEV) { } } +/** + * @param {any} obj + * @param {Map} keys + * @param {Map} values + * @returns {any[]|object|number|string} + */ function compressObjectInternal(obj, keys, values) { if (Array.isArray(obj)) { let result = []; @@ -89,14 +95,21 @@ function compressObjectInternal(obj, keys, values) { return obj; } +/** + * @param {Map} hashMap + * @returns {Array} + */ function indexMapToArray(hashMap) { - const result = []; + const result = new Array(hashMap.size); hashMap.forEach((index, key) => { result[index] = key; }); return result; } +/** + * @param {object} obj + */ export function compressObject(obj) { const keys = new Map(); const values = new Map(); @@ -108,6 +121,12 @@ export function compressObject(obj) { }; } +/** + * @param {object} obj + * @param {string[]} keys + * @param {any[]} values + * @returns {object} + */ function decompressObjectInternal(obj, keys = [], values = []) { if (Array.isArray(obj)) { let result = []; @@ -130,6 +149,9 @@ function decompressObjectInternal(obj, keys = [], values = []) { return obj; } +/** + * @param {object} obj + */ export function decompressObject(obj) { if (obj.keys && obj.values && obj.data) { const keys = obj.keys; From 1cd26f74b24c5029e7d52f4d745f90cfacbf90dd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Roland=20Szab=C3=B3?= Date: Sat, 31 Oct 2020 12:20:29 +0100 Subject: [PATCH 027/127] Hungarian Translation 100% (#895) * Translate all to Hungarian * Hungarian added to language selector --- src/js/languages.js | 7 + translations/base-hu.yaml | 1267 ++++++++++++++++++------------------- 2 files changed, 640 insertions(+), 634 deletions(-) diff --git a/src/js/languages.js b/src/js/languages.js index 46ff8af9..4cc39f9b 100644 --- a/src/js/languages.js +++ b/src/js/languages.js @@ -117,4 +117,11 @@ export const LANGUAGES = { code: "da", region: "", }, + + "hu": { + name: "Magyar", + data: require("./built-temp/base-hu.json"), + code: "hu", + region: "", + }, }; diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml index 81e6d7ab..9f1cc854 100644 --- a/translations/base-hu.yaml +++ b/translations/base-hu.yaml @@ -2,55 +2,52 @@ steamPage: shortText: A shapez.io-ban gyárak építésével kell automatizálni az egyre összetettebb alakzatok gyártását és kombinálását egy végtelen méretű térképen. - discordLinkShort: Official Discord + discordLinkShort: Hivatalos Discord intro: >- - Shapez.io is a relaxed game in which you have to build factories for the - automated production of geometric shapes. + Szereted az automatizálós játékokat? Akkor jó helyen vagy! - As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + A Shapez.io egy nyugtató játék, amelyben gyárakat kell építened, hogy geometrikus alakzatokat gyárts és automatizálj. Ahogy szintet lépsz, az alakzatok egyre összetettebbek lesznek, és tovább kell terjeszkedned a végtelen pályán. - And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + És ha ez nem lenne elég, exponenciálisan többet kell termelned az igények kielégítése érdekében - az egyetlen dolog, ami segít, az a termelés mennyisége! Az alakzatokat a játék elején csak feldolgoznod kell, később azonban színezned is kell őket - ehhez bányászni és keverni kell a színeket! - While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! - - Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! - title_advantages: Standalone Advantages + A játék Steamen történő megvásárlása hozzáférést biztosít a teljes verzióhoz, de kipróbálhatod a játékot a shapez.io oldalon, és később dönthetsz! + title_advantages: Önálló Verzió Előnyei advantages: - - 12 New Level for a total of 26 levels - - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! - - Wires Update for an entirely new dimension! - - Dark Mode! - - Unlimited Savegames - - Unlimited Markers - - Support me! ❤️ - title_future: Planned Content + - 12 Új Szint, összesen 26 + - 18 Új Épület egy teljesen automatizált gyárhoz! + - 20 Fejlesztési szint sok órányi szórakozáshoz! + - Vezetékek Frissítés egy teljesen új dimenzióhoz! + - Sötét mód! + - Végtelen mentés + - Végtelen Jelölő + - Támogatod a Fejlesztőt ❤️ + title_future: Tervezett Tartalom planned: - - Blueprint Library (Standalone Exclusive) - - Steam Achievements - - Puzzle Mode - - Minimap - - Mods - - Sandbox mode - - ... and a lot more! - title_open_source: This game is open source! - title_links: Links - links: - discord: Official Discord - roadmap: Roadmap - subreddit: Subreddit - source_code: Source code (GitHub) - translate: Help translate + - Tervrajz Könyvtár + - Steam Eredmények + - Puzzle Mód + - Kistérkép + - Modok + - Homokozó játékmód + - ... és még sok más! + title_open_source: A játék nyílt forráskódú! text_open_source: >- - Anybody can contribute, I'm actively involved in the community and - attempt to review all suggestions and take feedback into consideration - where possible. + Bárki hozzájárulhat, aktívan részt veszek a közösségben és próbálok + áttekinteni minden javaslatot, és figyelembe veszem a visszajelzéseket, + ahol lehetséges. - Be sure to check out my trello board for the full roadmap! + Feltétlenül nézd meg a Trello táblámat a teljes ütemtervért! + title_links: Linkek + links: + discord: Hivatalos Discord + roadmap: Ütemterv + subreddit: Subreddit + source_code: Forráskód (GitHub) + translate: Segíts lefordítani global: loading: Betöltés error: Hiba - thousandsDivider: . + thousandsDivider: "." decimalSeparator: "," suffix: thousands: e @@ -59,14 +56,14 @@ global: trillions: Tr infinite: végtelen time: - oneSecondAgo: egy másodperccel ezelőtt - xSecondsAgo: másodperccel ezelőtt - oneMinuteAgo: egy perccel ezelőtt - xMinutesAgo: perccel ezelőtt - oneHourAgo: egy órával ezelőtt - xHoursAgo: órával ezelőtt - oneDayAgo: egy nappal ezelőtt - xDaysAgo: nappal ezelőtt + oneSecondAgo: egy másodperce + xSecondsAgo: másodperce + oneMinuteAgo: egy perce + xMinutesAgo: perce + oneHourAgo: egy órája + xHoursAgo: órája + oneDayAgo: egy napja + xDaysAgo: napja secondsShort: mp minutesAndSecondsShort: p mp hoursAndMinutesShort: ó p @@ -77,10 +74,10 @@ global: alt: ALT escape: ESC shift: SHIFT - space: SPACE + space: SZÓKÖZ demoBanners: title: Demó verzió - intro: Vásárold meg az önálló verziót a teljes játékélményért! + intro: Vásárold meg az Önálló Verziót a teljes játékélményért! mainMenu: play: Játék continue: Folytatás @@ -88,16 +85,15 @@ mainMenu: changelog: Változások subreddit: Reddit importSavegame: Importálás - openSourceHint: Ez a játék nyílt forráskódú! + openSourceHint: Nyílt forráskód discordLink: Hivatalos Discord Szerver helpTranslate: Segíts fordítani! madeBy: Készítette - browserWarning: Elnézést, de a játék ezen a böngészőn problémásan fut. Vásárold - meg az Önálló Verziót, vagy töltsd le a Chrome-ot a teljes - játékélményért. + browserWarning: A játék ezen a böngészőn problémásan futhat. Vásárold meg az + Önálló Verziót, vagy töltsd le a Chrome-ot a teljes játékélményért. savegameLevel: . szint savegameLevelUnknown: Ismeretlen szint - savegameUnnamed: Unnamed + savegameUnnamed: Névtelen dialogs: buttons: ok: OK @@ -113,7 +109,7 @@ dialogs: showKeybindings: Irányítás importSavegameError: title: Importálás Hiba - text: "Nem sikerült importálni a mentésed:" + text: "Nem sikerült importálni a mentésedet:" importSavegameSuccess: title: Mentés Importálva text: A mentésed sikeresen importálva lett. @@ -122,9 +118,9 @@ dialogs: text: "Nem sikerült betölteni a mentésed:" confirmSavegameDelete: title: Törlés megerősítése - text: Are you sure you want to delete the following game?

- '' at level

This can not be - undone! + text: Biztos hogy törölni akarod a következő mentésedet?

+ '' . szinten

Ezt nem lehet + visszacsinálni! savegameDeletionError: title: Sikertelen törlés text: "Nem sikerült törölni a mentésed:" @@ -163,16 +159,16 @@ dialogs: desc: Egy csomó épületet akarsz egyszerre törölni (egészen pontosan -t)! Biztos, hogy ezt szeretnéd? massCutConfirm: - title: Biztosan kivágod? + title: Kivágás megerősítése desc: Egy csomó épületet akarsz egyszerre kivágni (egészen pontosan -t)! Biztos, hogy ezt szeretnéd? massCutInsufficientConfirm: title: Kivágás megerősítése - desc: Nincs elég Tervrajzod ennek a beillsztéséhez! Egészen biztos, hogy + desc: Nincs elég Tervrajzod ennek a beillesztéséhez! Egészen biztos, hogy kivágod? blueprintsNotUnlocked: title: Még nincs feloldva - desc: A Tervrajzokat a 12-es szinten fogod feloldani. + desc: A Tervrajzokat a 12-es szinten tudod feloldani. keybindingsIntroduction: title: Hasznos billentyűk desc: "A játék sok hasznos gyorsbillentyűt tartalmaz, amelyek megkönnyítik a @@ -185,9 +181,14 @@ dialogs: lehelyezéskor.
" createMarker: title: Új Jelölő + titleEdit: Jelölő Szerkesztése desc: Give it a meaningful name, you can also include a short key of a shape (Which you can generate here) - titleEdit: Jelölő Szerkesztése + editSignal: + title: Jel Beállítása + descItems: "Válassz egy előre definiált elemet:" + descShortKey: ... vagy írd be egy alakzat gyorskódját, amit + itt generálhatsz le) markerDemoLimit: desc: A Demó verzióban csak két Jelölőd lehet. Vásárold meg az Önálló verziót, hogy feloldd ezt a korlátozást! @@ -196,22 +197,16 @@ dialogs: desc: A teljes bázisod képének lementését választottad. Vedd figyelembe, hogy ez nagy méretű bázisoknál igen lassú lehet, de akár a játék összeomlását is okozhatja! - editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) renameSavegame: - title: Rename Savegame - desc: You can rename your savegame here. + title: Mentés átnevezése + desc: Itt tudod átnevezni a mentésedet. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Oktatás Elérhető + desc: Elérhető egy oktatóvideó ehhez a szinthez! Szeretnéd megnézni? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Oktatás Elérhető + desc: Elérhető egy oktatóvideó ehhez a szinthez, de csak angol nyelven. + Szeretnéd megnézni? ingame: keybindingsOverlay: moveMap: Mozgatás @@ -242,9 +237,9 @@ ingame: cyan: Világoskék white: Fehér black: Fekete - uncolored: Színezetlen + uncolored: Szürke buildingPlacement: - cycleBuildingVariants: Nyomd meg a -t, a variációk váltogatásához. + cycleBuildingVariants: Nyomj -t a variációk váltogatásához. hotkeyLabel: "Gyorsbillentyű: " infoTexts: speed: Sebesség @@ -261,37 +256,37 @@ ingame: buttonNextLevel: Következő Szint notifications: newUpgrade: Egy új fejlesztés elérhető! - gameSaved: A játékállás mentve. - freeplayLevelComplete: Level has been completed! + gameSaved: Játékállás mentve. + freeplayLevelComplete: . Szint teljesítve! shop: title: Fejlesztések buttonUnlock: Fejlesztés tier: . Szint maximumLevel: LEGMAGASABB SZINT (x Sebesség) statistics: - title: Statisztikák + title: Statisztika dataSources: stored: title: Tárolva description: Az összes tárolt alakzatod a központi épületben. produced: - title: Gyártva + title: Legyártva description: Az összes eddig legyártott alakzatod, beleértve a köztes alakzatokat is. delivered: title: Beszállítva - description: Az összes alakzat, amely jelenleg kézbesítés alatt van a központba. - noShapesProduced: Még nem gyártottál egy alazkatot sem. + description: Az összes alakzat, amely jelenleg a Központba érkezik. + noShapesProduced: Még nem gyártottál egy alakzatot sem. shapesDisplayUnits: - second: / s - minute: / m - hour: / h + second: / mp + minute: / p + hour: / ó settingsMenu: playtime: Játékidő buildingsPlaced: Épületek száma - beltsPlaced: Futószalagok hossza + beltsPlaced: Futószalagok tutorialHints: - title: Segítségre van szükséged? + title: Elakadtál? showHint: Segítség mutatása hideHint: Bezárás blueprintPlacer: @@ -316,70 +311,72 @@ ingame: 1_2_conveyor: "Kösd össze a bányát egy futószalag segítségével a Központi épülettel!

Tipp: Kattints és húzd a futószalagot az egérrel!" - 1_3_expand: "Ez NEM egy tétlen játék! Építs több bányát és + 1_3_expand: "A shapez.io NEM tétlen játék! Építs több bányát és futószalagot, hogy hamarabb elérd a célt.

Tipp: Tartsd lenyomva a SHIFT-et, hogy egyszerre több bányát helyezz le, és nyomj R-t a forgatáshoz." - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 2_1_place_cutter: "Most építs egy Vágót a körök két részbe + vágásához!

Tipp: A Vágó mindig függőleges + irányban vágja félbe az alakzatot, függetlenül az + irányától." + 2_2_place_trash: A Vágó eldugulhat és megállhat!

+ Használd a Kukát, hogy megszabadulj a + (jelenleg) nem használt alakzattól. + 2_3_more_cutters: "Nagyszerű! Most helyezz le további 2 Vágót, + hogy felgyorsítsd az amúgy lassú folyamatot!

Tipp: + Használd a 0-9 gyorsbillentyűket az épületek + gyorsabb eléréséhez!" + 3_1_rectangles: "Most bányásszunk négyzeteket! Építs 4 Bányát + és kösd össze őket a Központtal.

Tipp: Tartsd lenyomva a + SHIFT gombot a Futószalag lehelyezésekor, hogy + aktiváld az iránytervezőt!" + 21_1_place_quad_painter: Helyezd le a Négyirányú Festőt és + szerezz köröket, illetve fehér + és piros színeket! + 21_2_switch_to_wires: Válts át a Vezeték rétegre az E + gombbal!

Kapcsold össze a Festő mind a négy + bemenetét kábelekkel! + 21_3_place_button: Nagyszerű! Most rakj le egy Kapcsolót és + kösd össze vezetékekkel! + 21_4_press_button: "Nyomd meg a Kapcsolót, hogy igaz jelet + bocsásson ki, ezzel aktiválva a Festőt.

Tipp: Nem muszáj + mindegyik bemenetet bekötni! Próbálj bekötni csak kettőt." connectedMiners: - one_miner: 1 Miner - n_miners: Miners - limited_items: Limited to + one_miner: 1 Bánya + n_miners: Bánya + limited_items: Maximum watermark: - title: Demo version - desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + title: Demó verzió + desc: Kattints ide, hogy megnézd az Önálló Verzió előnyeit! + get_on_steam: Megvásárlás Steamen standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Vásárold meg a Teljes Verziót! + no_thanks: Nem, köszönöm! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Új Szint + desc: Összesen 26 buildings: - title: 18 New Buildings - desc: Fully automate your factory! + title: 18 Új Épület + desc: Egy teljesen automatikus gyárhoz! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Mentés + desc: Amennyit csak szeretnél! upgrades: - title: 20 Upgrade Tiers - desc: This demo version has only 5! + title: 20 Fejlesztési Szint + desc: A Demó Verzió csak 5-öt tartalmaz! markers: - title: ∞ Markers - desc: Never get lost in your factory! + title: ∞ Jelölő + desc: Hogy mindig tudd, mi hol van! wires: - title: Wires - desc: An entirely new dimension! + title: Vezetékek + desc: Egy teljesen új dimenzióhoz! darkmode: - title: Dark Mode - desc: Stop hurting your eyes! + title: Sötét Mód + desc: Ha már fáj a szemed! support: - title: Support me - desc: I develop it in my spare time! + title: Támogass + desc: A játékot továbbfejlesztem szabadidőmben shopUpgrades: belt: name: Futószalagok, Elosztók & Alagutak @@ -391,33 +388,25 @@ shopUpgrades: name: Vágás, Forgatás & Összeillesztés description: x → x Sebesség painting: - name: Keverés & Festés + name: Színkeverés & Festés description: x → x Sebesség buildings: hub: - deliver: Deliver - toUnlock: to unlock - levelShortcut: LVL - endOfDemo: End of Demo + deliver: Szállíts + toUnlock: hogy feloldd + levelShortcut: Szint + endOfDemo: Demó Verzió vége belt: default: name: Futószalag description: Elemeket szállít, tartsd nyomva az egérgombot egyszerre több lerakásához. - wire: - default: - name: Energy Wire - description: Allows you to transport energy. - second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. miner: default: - name: Bányász + name: Bánya description: Tedd egy alakzatra vagy színre a kibányászásához. chainable: - name: Bányász (összekapcsolható) + name: Bánya (összeköthető) description: Tedd egy alakzatra vagy színre a kibányászásához. Több egymáshoz kapcsolható. underground_belt: @@ -427,647 +416,657 @@ buildings: tier2: name: Alagút II description: Segítségével futószalagok és épületek alatt átvezethetők az elemek. + balancer: + default: + name: Kiegyenlítő + description: Többfunkciós - Egyenlően elosztja az összes bemenetet az összes + kimenetre. + merger: + name: Összevonó (kompakt) + description: Egyesít két futószalagot. + merger-inverse: + name: Összevonó (kompakt) + description: Egyesít két futószalagot. + splitter: + name: Elosztó (kompakt) + description: Kettéoszt egy futószalagot. + splitter-inverse: + name: Elosztó (kompakt) + description: Kettéoszt egy futószalagot. cutter: default: name: Vágó description: Függőlegesen félbevágja az alakzatokat. Ha csak az egyik - felet akarod használni, ne felejtsd el a másikat kukába küldeni, - különben eldugítja! + részét akarod használni, ne felejtsd el a többit a Kukába + küldeni, különben eldugul!
quad: - name: Vágó (negyedelő) - description: Négyfelé vágja az alakzatokat. Cuts shapes into four parts. - Ha csak az egyik felet akarod használni, ne felejtsd el - a többit a kukába küldeni, különben eldugítja! + name: Vágó (Negyedelő) + description: Négyfelé vágja az alakzatokat. Ha csak az egyik részét + akarod használni, ne felejtsd el a többit a Kukába küldeni, + különben eldugul! rotater: default: name: Forgató - description: Elforgatja az alakzatot óramutató irányában 90 fokkal. + description: Elforgatja az alakzatot 90 fokkal, az óramutató irányában. ccw: - name: Forgató (fordított) - description: Elforgatja az alakzatot óramutatóval ellentétesen 90 fokkal. + name: Forgató (Balra) + description: Elforgatja az alakzatot 90 fokkal, az óramutatóval ellentétes + irányban. rotate180: - name: Rotate (180) - description: Rotates shapes by 180 degrees. + name: Forgató (180°) + description: Elforgatja az alakzatot 180 fokkal. stacker: default: name: Egyesítő - description: Egyesít két elemet. Ha nem lehet összeilleszteni őket, a jobboldali - elem a baloldali tetejére kerül. + description: Egyesít két elemet. Ha nem lehet összeilleszteni őket, a jobb + oldali elem a bal oldali tetejére kerül. mixer: default: name: Színkeverő - description: Összekever két színt összeadó színkeveréssel. + description: Összekever két színt additív (összeadó) színkeveréssel. painter: default: name: Festő - description: Beszínezi az alakzatot a baloldali bemeneten a jobboldali bemeneten + description: Beszínezi a bal oldali bemeneten érkező alakzatot a felső bemeneten érkező színnel. mirrored: name: Festő - description: Beszínezi az alakzatot a baloldali bemeneten a jobboldali bemeneten + description: Beszínezi a bal oldali bemeneten érkező alakzatot az alsó bemeneten érkező színnel. double: name: Festő (Dupla) - description: Beszínezi az alakzatokat a baloldali bemeneteken a fenti bemeneten + description: Beszínezi az alakzatokat a bal oldali bemeneteken a fenti bemeneten érkező színnel. quad: name: Festő (Négyszeres) - description: Allows you to color each quadrant of the shape individually. Only - slots with a truthy signal on the wires layer - will be painted! + description: Az alakzat négy negyedét különböző színekkel lehet vele színezni. + Csak azokat a negyedeket festi le, amik a Vezeték rétegen + igaz jelet kapnak! trash: default: name: Kuka - description: Bármelyik irányból lehet hozzá csatlakozni, és megsemmisíti a - beleküldött elemeket. Örökre. - balancer: - default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. - merger: - name: Merger (compact) - description: Merges two conveyor belts into one. - merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. - splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. - splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + description: Megsemmisíti a beleküldött elemeket. Örökre. Bármelyik irányból + lehet hozzá csatlakozni. storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: Raktár + description: Eltárolja a fölösleges elemeket, egy meghatározott kapacitásig. A + bal oldai kimenetet részesíti előnyben. Használható túlcsorduló + kapuként. + wire: + default: + name: Vezeték + description: Jelet hordoz, amely lehet alakzat, szín vagy logikai érték (1 vagy + 0). Különböző színű vezetékek nem kapcsolódnak egymáshoz. + second: + name: Vezeték + description: Jelet hordoz, amely lehet alakzat, szín vagy logikai érték (1 vagy + 0). Különböző színű vezetékek nem kapcsolódnak egymáshoz. wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: Vezeték Kereszteződés + description: Áthidal két vezetéket anélkül, hogy kapcsolódnának egymáshoz. constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: Állandó jel + description: Állandó jelet bocsát ki, amely lehet egy alakzat, szín vagy logikai + érték (1 vagy 0). lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: Kapcsoló + description: Logikai 1 vagy 0 értéket bocsát ki a Vezeték rétegen, amivel + épületeket lehet vezérelni (például alakzat szűrőket). logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: ÉS Kapu + description: Igaz (1) a kimenete, ha mindkét bemenet igaz. not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: NEM Kapu + description: Igaz (1) a kimenete, ha a bemenet Hamis (0), és fordítva. xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: Kizáró VAGY Kapu + description: Igaz (1) a kimenete, ha csak az egyik bemenet igaz. or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: VAGY Kapu + description: Igaz (1) a kimenete, ha legalább az egyik bemenet igaz. transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Tranzisztor + description: Továbbítja az alsó jelet, ha az oldalsó jel igaz. mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: Tranzisztor + description: Továbbítja az alsó jelet, ha az oldalsó jel igaz. filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: Szűrő + description: Minden, a bemenettel megyező alakzatot a fenti kimenetre irányít, + minden mást a jobb oldalira. Vezérelhető 1 vagy 0 jelekkel is. display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: Kijelző + description: Csatlakoztass egy jelet, és az megjelenik a Kijelzőn. Ez lehet + alakzat, szín, illetve logikai 1 vagy 0. reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: Futószalag-olvasó + description: Megméri egy Futószalag átmenő teljesítményét. A legutóbb beolvasott + alakzatot kiküldi a Vezeték rétegre (amint feloldottad). analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: Alakzatvizsgáló + description: Megvizsgálja a beküldött alakzat legalsó rétegének jobb felső + negyedét, és visszaadja ezt az alakzatot és a színét. comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: Összehasonlító + description: Igaz "1" jelet eredményez, ha mindkét bemenete egyforma. Össze tud + hasonlítani alakzatokat, színeket és logikai értékeket. virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: Virtuális Vágó + description: Virtuálisan félbevág egy alakzatot. rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: Virtuális Forgató + description: Virtuálisan elforgat egy alakzatot, az óramutató járásával + megegyező és ellenkező irányba is. unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: Virtuális Leválasztó + description: Virtuálisan leszedi a legfelső rétegét egy alakzatnak, és kiküldi a + jobb oldali kimenetre, a maradékot pedig a bal oldalira. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Virtuális Összevonó + description: Virtuálisan ráhelyezi a jobb oldali alakzatot a bal oldali + tetejére. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Virtuális Festő + description: Virtuálisan lefesti az alsó bemeneten érkező alakzatot a jobb + oldali bemeneten érkező színnel. item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: Létrehozó + description: Csak Homokozó módban elérhető. Létrehozza a Vezeték rétegen + beállított jelet a normál rétegen. storyRewards: reward_cutter_and_trash: - title: Cutting Shapes - desc: You just unlocked the cutter, which cuts shapes in half - from top to bottom regardless of its - orientation!

Be sure to get rid of the waste, or - otherwise it will clog and stall - For this purpose - I have given you the trash, which destroys - everything you put into it! + title: Alakzatok Vágása + desc: Feloldottad a Vágót, amely függőlegesen félbevág + alakzatokat, függetlenül a Vágó + irányától!

Szabadulj meg a feleslegtől, ellenkező + esetben eldugulhat a rendszer - Ezért kaptál egy + Kukát, amely elpusztít mindent, amit belevezetsz! reward_rotater: - title: Rotating - desc: The rotater has been unlocked! It rotates shapes - clockwise by 90 degrees. + title: Forgatás + desc: Feloldottad a Forgatót, amely az óramutató járásával 90 + fokban forgatja el az alakzatokat. reward_painter: - title: Painting - desc: "The painter 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!

PS: If you are colorblind, there is a - color blind mode in the settings!" + title: Festés + desc: "Feloldottad a Festőt - Bányássz ki színeket (úgy, ahogy + az alakzatokat eddig) és fesd le az alakzatokat a + Festőben!

Tipp: Ha színtévesztő vagy, a Beállításokban + bekapcsolhatod a Színtévesztő Módot!" reward_mixer: - title: Color Mixing - desc: The mixer has been unlocked - Combine two colors using - additive blending with this building! + title: Színkeverés + desc: Feloldottad a Színkeverőt, amely két színt kever össze + additív színkeveréssel! reward_stacker: - title: Combiner - desc: You can now combine shapes with the combiner! Both inputs - are combined, and if they can be put next to each other, they will - be fused. If not, the right input is - stacked on top of the left input! - reward_splitter: - title: Splitter/Merger - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + title: Egyesítő + desc: Kombinálj össze elemeket az Egyesítővel! Ha a két bemenet + egymás mellé helyezhető, akkor összeolvasztja őket. + Ha nem, a jobb oldali bemenetet ráhelyezi a bal + oldali bemeneten érkező alakzat tetejére! reward_tunnel: - title: Tunnel - desc: The tunnel has been unlocked - You can now pipe items - through belts and buildings with it! + title: Alagút + desc: Feloldottad az Alagutat - Átvihetsz egy futószalagot + másik futószalag, vagy akár épület alatt! reward_rotater_ccw: - title: CCW Rotating - desc: You have unlocked a variant of the rotater - It allows to - rotate counter clockwise! To build it, select the rotater and - press 'T' to cycle its variants! + title: Ellentétes Forgatás + desc: Feloldottad a Forgató ellentétes irányú variánsát, + amellyel az óramutató járásával ellentétes irányban forgathatsz + elemeket! Használatához válaszd ki a Forgatót és nyomj 'T'-t + az irány változtatásához! reward_miner_chainable: - title: Chaining Extractor - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + title: Összeköthető Bánya + desc: "Feloldottad az Összeköthető Bányát! Segítségével + továbbadhatod a kibányászott erőforrást egy másik + Bányának, így hatékonyabban bányászhatsz!

Tipp: A régi + Bányát lecseréltük az Eszköztáradon!" reward_underground_belt_tier_2: - title: Tunnel Tier II - desc: You have unlocked a new variant of the tunnel - It has a - bigger range, and you can also mix-n-match those - tunnels now! + title: Alagút, II. Szint + desc: Feoldottad az Alagút fejlesztett változatát - + Nagyobb távolságot képes lefedni, és mostmár + variálhatod az Alagutak típusait! + reward_splitter: + title: Kompakt Elosztó + desc: Feloldottad a Kiegyenlítő egy új variánsát, az + Elosztót, amely egy bemenetből csinál két + Futószalagot! reward_cutter_quad: - title: Quad Cutting - desc: You have unlocked a variant of the cutter - It allows you - to cut shapes in four parts instead of just two! + title: Négybevágó + desc: Feloldottad a Vágó egy új variánsát, a Negyedelőt, amely + négy részre vágja az alakzatokat kettő helyett! reward_painter_double: - title: Double Painting - desc: You have unlocked a variant of the painter - It works as - the regular painter but processes two shapes at - once consuming just one color instead of two! + title: Dupla Festés + desc: Feloldottad a Festő egy új variánsát - Ugyanúgy működik, + mint a sima Festő, de két alakzatot fest le + egyszerre, kettő helyett egyetlen festék felhasználásával! reward_storage: - title: Storage Buffer - desc: You have unlocked the storage building - It allows you to - store items up to a given capacity!

It priorities the left - output, so you can also use it as an overflow gate! - reward_freeplay: - title: Freeplay - desc: You did it! You unlocked the free-play mode! This means - that shapes are now randomly generated!

- Since the hub will require a throughput from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!

The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + title: Raktár + desc: Feloldottad a Raktárat, amelyben meghatározott számú + elemet tudsz eltárolni!

A bal oldali kimenetet részesíti + előnyben, így túlcsorduló kapuként is használható! reward_blueprints: - title: Blueprints - desc: You can now copy and paste parts of your factory! Select - an area (Hold CTRL, then drag with your mouse), and press 'C' to - copy it.

Pasting it is not free, you need to - produce blueprint shapes to afford it! (Those you - just delivered). + title: Tervrajzok + desc: Innentől lehetőséged van másolni/beilleszteni a gyárad + bizonyos részeit! Jelölj ki egy területet (Nyomd a CTRL-t, és húzd + az egeredet), majd nyomj 'Ctrl+C'-t a másoláshoz.

A + beillesztés nincs ingyen; tervrajz + alakzatokat kell gyártani hozzá! (Amiket az imént + szállítottál le). no_reward: - title: Next level - desc: "This level gave you no reward, but the next one will!

PS: Better - don't destroy your existing factory - You need all - those shapes later again to unlock upgrades!" + title: Következő Szint + desc: "Ez a szint most nem ad jutalmat, a következő viszont fog!

Tipp: + Ne rombold le a meglévő gyáraidat - Az összes + eddigi alakzatra szükséged lesz majd a fejlesztések + feloldásához!" no_reward_freeplay: - title: Next level - desc: Congratulations! By the way, more content is planned for the standalone! + title: Következő Szint + desc: Gratulálok! Hamarosan további funkciókkal bővül a Teljes Verzió! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + title: Kiegyenlítő + desc: Feloldottad a többfunkciós Kiegyenlítőt - Nagyobb, + hatékonyabb gyárat építhetsz bele oly módon, hogy elosztasz + vagy összevonsz elemeket több futószalagra! reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: Kompakt Összevonó + desc: Feloldottad a Kiegyenlítő egy új variánsát, az + Összevonót, amely két bemenetből csinál egy + Futószalagot! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: Futószalag-mérő + desc: Feloldottad a Futószalag-mérőt! Segítségével megmérheted + a Futószalag átmenő teljesítményét.

Várj csak, amíg feloldod + a Vezetékeket - utána lesz csak igazán hasznos! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: Forgató (180°) + desc: Feloldottad a 180 fokos Forgatót, amellyel megfordíthatsz + egy alakzatot 180 fokban (Meglepő, mi? :D) reward_display: - title: Display - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + title: Kijelző + desc: "Feloldottad a Kijelzőt - Csatlakoztass egy jelet a + Vezeték rétegen, annak megmutatásához!

Tipp: Észrevetted, + hogy a Futószalag-olvasó és a Raktár megmutatják a legutóbb + beolvasott elemet? A Kijelző segítségével megmutathatod ezt az + elemet a normál rétegen!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: Állandó Jel + desc: Feloldottad az Állandó Jel épületet a Vezeték rétegen! + Hasznos lehet például Szűrőkhöz + csatlakoztatni.

Az Állandó Jel értéke lehet egy + alakzat, szín illetve + logikai 1 vagy 0. reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: Logikai Kapuk + desc: Feloldottad a logikai kapukat! Nem baj, ha nem tudod, mik + ezek, de amúgy nagyon hasznosak!

Logikai kapuk segítségével + tudsz ÉS, VAGY, Kizáró VAGY és TAGADÁS műveleteket számolni.

+ Ráadásként kaptál egy Tranzisztort is! reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: Virtuális Eszközök + desc: Feloldottál egy csomó épületet, amelyek segítségével szimulálhatod + az alakzatok gyártását!

A Vágót, a Forgatót, az + Összevonót és a többi épületet a Vezeték rétegen tudod szimulálni! + Ezzel háromféle módon folytathatod a játékot:

- Építs egy + automatizált gyárat, amely bármely, a Központ által + kért alakzatot el tud készíteni (Javaslom, hogy próbáld ki!). +

- Építs valami nagyszerűt a Vezetékek segítségével.

+ - Folytasd a játékot, ahogy eddig.

Bárhogy is választasz, + érezd jól Magad! reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + title: Vezetékek & Négyszeres Festő + desc: "Feloldottad a Vezeték Réteget: Ez egy új réteg a normál + játéktér felett, amely egy csomó új játékmechanikát kínál!

+ Kezdésképpen feloldottad a Négyszeres Festőt - Kösd + be a Vezeték rétegen az épület azon részeit, amiket le szeretnél + festeni!

A Vezeték rétegre való váltáshoz nyomj + E-t.

Tipp: Engedélyezd a + tippeket a Beállítások menüben, hogy bekapcsold a + Vezetékekhez tartozó oktatást!" reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: Szűrő + desc: Feloldottad a Szűrőt! A bemeneten érkező alakzatokat a + felső kimenetre küldi, ha azok megegyeznek a Vezeték rétegen + beállított jellel, és a jobb oldali kimenetre, ha nem.

+ Vezérelhető logikai (1 / 0) jellel is, ami be- és kikapcsolja az + épületet. reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: Demó Vége + desc: Elérted a Demó verzió végét! + reward_freeplay: + title: Végtelen Játékmód + desc: Megcsináltad! Feloldottad a Végtelen Játékmódot! Innentől kezdve az alakzatok véleetlenszerűen generálódnak!

A Központ innentől nem darabszámot kér, hanem átmenő teljesítményt, így ajánlom, hogy építs egy olyan gépezetet, amely automatikusan eljuttatja a Központnak a kívánt alakzatot!

A Központ kiküldi a kívánt alakzatot a Vezeték rétegre, szóval annyi a dolgot, hogy megvizsgáld az Alakzatvizsgálóval és ez alapján beállítsd a gyáradat. settings: title: Beállítások categories: - general: General - userInterface: User Interface - advanced: Advanced - performance: Performance + general: Általános + userInterface: Felhasználói Felület + advanced: Haladó + performance: Teljesítmény versionBadges: - dev: Development - staging: Staging - prod: Production - buildDate: Built + dev: Fejlesztői + staging: Teszt + prod: Stabil + buildDate: Dátum labels: uiScale: - title: Interfész nagyság - 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. + title: Felület elemeinek átméretezése + description: A felhasználói felületen található elemek mérete változik a + képernyőfelbontásoddal, ez a beállítás ennek a felméretezésnek a + mértékét állítja. scales: - super_small: Szuper kicsi + super_small: Apró small: Kicsi - regular: Közepes + regular: Normál large: Nagy huge: Hatalmas + autosaveInterval: + title: Automatikus mentés gyakorisága + description: Az automatikus játékmentés gyakorisága, vagy annak kikapcsolása + intervals: + one_minute: 1 Perc + two_minutes: 2 Perc + five_minutes: 5 Perc + ten_minutes: 10 Perc + twenty_minutes: 20 Perc + disabled: Kikapcsolva scrollWheelSensitivity: - title: Zoom sensitivity - description: Changes how sensitive the zoom is (Either mouse wheel or trackpad). + title: Nagyítás érzékenysége + description: A nagyítás/kicsinyítés mértékét állítja (Egérgörgő vagy touchpad). sensitivity: - super_slow: Szuper lassú + super_slow: Szuperlassú slow: Lassú - regular: Közepes + regular: Normál fast: Gyors - super_fast: Szuper gyors + super_fast: Szupergyors + movementSpeed: + title: Kameramozgás + description: A kamera mozgásának gyorsaságát állítja, ha a kurzorbillentyűket + használod, vagy a képernyő szélére húzod az egeret. + speeds: + super_slow: Szuperlassú + slow: Lassú + regular: Normál + fast: Gyors + super_fast: Szupergyors + extremely_fast: Extrém Gyors language: title: Nyelv - description: Change the language. All translations are user contributed and - might be incomplete! + description: A játék megjelenítési nyelve. A fordításokat a rajongók végzik, + ezért lehet, hogy nem teljesek. + enableColorBlindHelper: + title: Színtévesztő Mód + description: Színtévesztő vagy színvak felhasználók számára is játszhatóvá teszi + a játékot. fullscreen: - title: Fullscreen - description: It is recommended to play the game in fullscreen to get the best - experience. Only available in the standalone. + title: Teljes képernyő + description: A legjobb élmény érdekében ajánlott a teljes képernyős módot + bekapcsolni. Csak az Önálló Verzióban elérhető. soundsMuted: title: Hangok Némítása - description: If enabled, mutes all sound effects. + description: Kkapcsol minden hangeffektet a játékban. musicMuted: title: Zene Némítása - description: If enabled, mutes all music. + description: Kikapcsolja a játék alatt futó zenét. + soundVolume: + title: Hangok Hangereje + description: A játék hangeffektjeinek az erősségét állítja. + musicVolume: + title: Zene Hangereje + description: A játék zenéjének a hangerejét állítja. theme: - title: Game theme - description: Choose the game theme (light / dark). + title: Téma + description: Sötét és Világos mód közötti váltás. themes: dark: Sötét light: Világos 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. + title: Tick / másodperc + description: Megszabja, hogy hány Tick történik másodpercenként. + Általánosságban, minél magasabb a Tick érték, annál pontosabb az + egérmozgás és a lehelyezés, viszont annál gyengébb a + teljesítmény. Alacsonyabb Tick érték esetén a Futószalagok + áteresztőképessége nem mindig számolódik pontosan. alwaysMultiplace: - title: Multiplace - description: If enabled, all buildings will stay selected after placement until - you cancel it. This is equivalent to holding SHIFT permanently. + title: Folyamatos Lehelyezés + description: Ha be van kapcsolva, akkor az épület lehelyezés után kiválasztva + marad, megszakításig. Ez egyenlő azzal, mintha nyomnád a + SHIFT-et lehelyezéskor. 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. - 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 + title: Tippek és Oktatás + description: Tippek és oktatóanyagok bekapcsolása játék közben. Elrejt bizonyos + haladó felhasználói felületi elemeket, hogy könnyítse a játék + megtanulását. 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. + title: Intelligens Alagutak + description: Ha engedélyezve van, akkor Alagutak lehelyezésekor az útban lévő + Futószalagok automatikusan törlődnek. Továbbá lehetővé teszi, + hogy az Alagutakat folyamatos húzással helyezd le. 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. - enableColorBlindHelper: - title: Color Blind Mode - description: Enables various tools which allow to play the game if you are color - blind. + title: Sarkok Elsötétítése + description: Elsötétíti a képernyő sarkait, így könnyebben olvashatók az ott + megjelenő szövegek. 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. - soundVolume: - title: Sound Volume - description: Set the volume for sound effects - musicVolume: - title: Music Volume - description: Set the volume for music + title: Épületek Irányának Megjegyzése + description: Minden épület megjegyzi a legutóbbi forgásirányát, amire + beállítottad. Ez nagyon hasznos lehet, ha gyakran váltogatsz + épülettípusokat, amiknek a legutóbb használt irányba kell + állniuk. + compactBuildingInfo: + title: Rövidített Épület Infók + description: A kiválasztott épületnek csak a termelési arányát mutatja, szöveges + leírást és képet nem. + disableCutDeleteWarnings: + title: Törlés/Kivágás Figyelmeztetések Kikapcsolása + description: Kikapcsolja a megerősítő ablakokat, ha 100-nál több épületet + szeretnél egyszerre törölni vagy kivágni. lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: Alacsony Minőségű Erőforrás Ikonok + description: Leegyszerűsíti az erőforrások kirajzolását a térképen bezoomolt + állapotban a teljesítmény javítása érdekében. Érdemes + kipróbálni! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: Rács kikapcsolása + description: A rácsvonalak kikapcsolásával javítható a teljesítmény, és + letisztultabbá tehető a játék felülete! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: Kijelölés Megszüntetése Jobbklikkre + description: Megszünteti a kijelölést az egér jobb gombra kattintva. Ha ki van + kapcsolva, akkor úgy tudsz épületeket törölni, ha építési módban + jobbklikkelsz. lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: Alacsony Minőségű Textúrák (Ronda) + description: Alacsony minőségű textúrák használata a teljesítmény javítása + érdekében. Vigyázat, a játék elég ronda lesz tőle! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: Térképdarabok Határainak Mutatása + description: A játék 16×16-os térképdarabokra van osztva. Ennek a funkciónak a + bekapcsolásával láthatóvá válnak ezek a határok. pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: Bánya Automatikus Kiválasztása + description: Ha egy erőforráson használod a Pipettát, akkor automatikusan a + kiválasztja a Bányát leépítéshez. simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: Egyszerűsített Futószalagok (Ronda) + description: Nem mutatja a Futószalagokon található elemeket, csak ha nagyon + közel mész, hogy javítsa a teljesítményt. Erősen ellenjavallott, + hacsak nincs szükséged minden utolsó csepp teljesítményre. enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: Kameramozgatás a Képernyő Szélén + description: Lehetővé teszi a kamera mozgatását, ha a képernyő szélére viszed az + egeret. A mozgatás sebessége a fenti Kameramozgás beállítással + állítható. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Nagyítás a Kurzor Felé + description: Ha be van kapcsolva, a Nagyítás és Kicsinyítés középpontja a kurzor + aktuális helyzete lesz. Kikapcsolt állapotban a képernyő közepe. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Erőforrások Mérete a Térképen + description: Kizoomolt állapotban a térképen megjelenő erőforrások (alakzatok és + színek) méretét állítja. rangeSliderPercentage: % keybindings: - title: Keybindings - hint: "Tip: Be sure to make use of CTRL, SHIFT and ALT! They enable different - placement options." - resetKeybindings: Reset Keyinbindings + title: Gyorsbillentyűk + hint: "Tipp: Használd ki a CTRL, SHIFT és ALT billentyűket, amelyek különféle + lehelyezési opciókat tesznek lehetővé." + resetKeybindings: Visszaállítás categoryLabels: - general: Application - ingame: Game - navigation: Navigating - placement: Placement - massSelect: Mass Select - buildings: Building Shortcuts - placementModifiers: Placement Modifiers + general: Általános + ingame: Játék + navigation: Kameramozgás + placement: Lehelyezés + massSelect: Több Kijelölése + buildings: Épület Gyorsgombok + placementModifiers: Lehelyezés Módosítók mappings: - confirm: Confirm + confirm: Elfogad back: Vissza - mapMoveUp: Move Up - mapMoveRight: Move Right - mapMoveDown: Move Down - mapMoveLeft: Move Left - centerMap: Center Map - mapZoomIn: Zoom in - mapZoomOut: Zoom out - createMarker: Create Marker + mapMoveUp: Fel + mapMoveRight: Jobbra + mapMoveDown: Le + mapMoveLeft: Balra + mapMoveFaster: Gyorsabb mozgás + centerMap: Ugrás a térkép közepére + mapZoomIn: Nagyítás + mapZoomOut: Kicsinytés + createMarker: Jelölő létrehozása menuOpenShop: Fejlesztések - menuOpenStats: Statisztikák - toggleHud: Toggle HUD - toggleFPSInfo: Toggle FPS and Debug Info + menuOpenStats: Statisztika + menuClose: Menü bezárása + toggleHud: Felület ki-/bekapcsolása + toggleFPSInfo: FPS és Debug információ megjelenítése + switchLayers: Váltás a rétegek között + exportScreenshot: Képernyőkép készítése a teljes bázisról belt: Futószalag + balancer: Kiegyenlítő underground_belt: Alagút - miner: Bányász + miner: Bánya cutter: Vágó rotater: Forgató stacker: Egyesítő mixer: Színkeverő painter: Festő trash: Kuka - rotateWhilePlacing: Rotate - rotateInverseModifier: "Modifier: Rotate CCW instead" - cycleBuildingVariants: Cycle Variants - confirmMassDelete: Confirm Mass Delete - cycleBuildings: Cycle Buildings - massSelectStart: Hold and drag to start - massSelectSelectMultiple: Select multiple areas - massSelectCopy: Copy area - placementDisableAutoOrientation: Disable automatic orientation - placeMultiple: Stay in placement mode - placeInverse: Invert automatic belt orientation - pasteLastBlueprint: Paste last blueprint - massSelectCut: Cut area - exportScreenshot: Export whole Base as Image - mapMoveFaster: Move Faster - lockBeltDirection: Enable belt planner - switchDirectionLockSide: "Planner: Switch side" - pipette: Pipette - menuClose: Close Menu - switchLayers: Switch layers - wire: Energy Wire - balancer: Balancer - storage: Storage - constant_signal: Constant Signal + storage: Raktár + wire: Vezeték + constant_signal: Állandó jel logic_gate: Logic Gate - lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare + lever: Kapcsoló + filter: Szűrő + wire_tunnel: Vezeték Kereszteződés + display: Kijelző + reader: Futószalag-olvasó + virtual_processor: Virtuális Vágó + transistor: Tranzisztor + analyzer: Alakzatvizsgáló + comparator: Összehasonlító item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + pipette: Pipetta + rotateWhilePlacing: Forgatás + rotateInverseModifier: "Módosító: Forgass ellenkező irányba" + cycleBuildingVariants: Váltás a változatok között + confirmMassDelete: Terület törlése + pasteLastBlueprint: Legutóbbi tervrajz beillesztése + cycleBuildings: Váltás az épületek között + lockBeltDirection: Futószalag iránykeresés engedélyezése + switchDirectionLockSide: "Iránykereső: Oldal váltása" + copyWireValue: "Vezetékek: Kurzor alatti érték másolása" + massSelectStart: Nyomd le és húzd a kezdéshez + massSelectSelectMultiple: Több terület kiválasztása + massSelectCopy: Terület másolása + massSelectCut: Terület kivágása + placementDisableAutoOrientation: Automatikus irány kikapcsolása + placeMultiple: Több lehelyezése + placeInverse: Futószalag irányának megfordítása about: - title: A játékról + title: A Játékról body: >- - This game is open source and developed by Tobias Springer - (this is me).

+ A játékot Tobias + Springer készíti, és nyílt forráskódú.

- If you want to contribute, check out shapez.io on github.

+ Ha szeretnél hozzájárulni, nézz fel a shapez.io GitHub oldalára.

- This game wouldn't have been possible without the great Discord community around my games - You should really join the Discord server!

+ Ez a játék nem jöhetett volna létre a játékaimat körülvevő nagyszerű Discord közösség nélkül - Csatlakozz Te is a Discord szerverünkhöz!

- The soundtrack was made by Peppsen - He's awesome.

+ A játék zenéjét Peppsen készítette - Ő egy remek srác.

- Finally, huge thanks to my best friend Niklas - Without our factorio sessions this game would never have existed. + Végezetül, hatalmas köszönet a legjobb barátomnak, Niklasnak - A közös Factorio-s játékaink nélkül ez a játék nem jöhetett volna létre. changelog: - title: Changelog + title: Változások demo: features: restoringGames: Mentések visszaállítása importingGames: Mentések importálása - oneGameLimit: Egy mentésre van limitálva - customizeKeybindings: Customizing Keybindings - exportingBase: Exporting whole Base as Image - settingNotAvailable: Nem elérhető a demóban. + oneGameLimit: Egyetlen játékmentés elérhető + customizeKeybindings: Gyorsbillentyűk beállítása + exportingBase: Képernyőkép készítése a teljes bázisról + settingNotAvailable: Nem elérhető a Demó Verzióban. tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - A Központ mindenféle bemenetet elfogad, nemcsak az éppen aktuálisan kívánt + alakzatot! + - Igyekezz moduláris gyárakat építeni - megéri! + - Igyekezz kompakt gyárakat építeni - megéri! + - Ne építs közvetlenül a Központ közelébe, mert óriási káoszt okozhat! + - A szalagtervező irányát az R billentyűvel állíthatod. + - Az arányok mindaddig állandók maradnak, amíg a Fejlesztéseid azonos + szinten vannak. + - A soros végrehajtás hatékonyabb, mint a párhuzamos. + - A T megnyomásával váltogathatsz a különböző épülettípusok között. + - A szimmetria kulcsfontosságú! + - A hatékonyság kulcsfontosságú! + - A Festőnek van egy tükrözött változata is, amit a T-vel hozhatsz elő. + - Az épületek megfelelő arányban való építésével maximalizálható a hatékonyság. + - A legmagasabb szinten 5 Bánya teljesen megtölt egy Futószalagot. + - Ne feledkezz meg az Alagutakról! + - A SHIFT lenyomva tartásával bekapcsolod a Futószalagok automatikus + iránykeresését, amellyel hosszú Futószalagokat helyezhetsz le könnyedén. + - A Vágók mindig függőleges irányban vágnak, mindegy, milyen irányban állnak. + - A fehér szín előállításához keverd össze mindhárom színt. + - A SHIFT lenyomva tartásával több épületet is lehelyezhetsz egymás után. + - Az ALT lenyomva tartásával megfordíthatod a lehelyezendú Futószalag irányát. + - A hatékonyság kulcsfontosságú! + - A Központtól távolabb eső bányászható alakzatok jóval összetettebbek. + - A gépeknek korlátozott sebességük van, csinálj belőlük többet a maximális + hatékonyságért. + - Használj Elosztókat a maximális hatékonyságért. + - A rendszerezettség fontos. Igyekezz a lehető legkevesebbszer keresztezni + Futószalagokat. + - Tervezz előre, mert óriási káosz lehet a vége! + - Ne rombold le a régi gyáraidat! Szükséged lesz rájuk a Fejlesztésekhez. + - Próbáld megdönteni a 20. Szintet, mielőtt segítséget kérnél! + - Ne bonyolítsd túl a dolgokat; csináld egyszerűen és sokra viheted. + - Bizonyos gyárakat újra kell használnod a játék során. Tervezd + újrahasználhatóra a gyáraidat. + - Bizonyos alakzatokat megtalálsz a pályán elszórva, így nem kell őket + összeraknod. + - Teljes szélmalom alakzatokat nem fogsz találni a pályán, csak + részlegeseket. + - Színezd be az alakzatodat vágás előtt a maximális hatékonyság érdekében. + - Ha modulárisan építkezel, akkor nem számít a hely. + - Csinálj egy különálló Tervrajz-gyárat. A modulokhoz később hasznos lesz. + - A CTRL + balklikkel jelölhetsz ki egy területet a pályán. + - Ha közel építesz a Központhoz, útban lesz a következő projektjeidnek. + - A Fejlesztések lapon a gombostű ikon megnyomásával kitűzheted a képernyőre + az aktuális alakzatot. + - Keverd össze mind a három alapszínt, hogy Fehéret csinálj! + - A pálya végtelen méretű; ne nyomorgasd sösze a gyáraidat, terjeszkedj! + - Próbáld ki a Factorio-t is! Az a kedvenc játékom. + - A Negyedelő az alakzat jobb felső negyedétől kezd vágni, az óramutató + járásával megegyező irányban! + - A játékmentéseidet a Főmenüben tudod lementeni! + - A játék nagyon sok hasznos gyorsbillentyűt tartalmaz! Nézd meg őket a + Beállítások menüben. + - A játék nagyon sok beállítást tartalmaz, mindenképpen nézd meg őket! + - A képernyőn lévő Irányítű a Központ irányát mutatja! + - A Futószalagok kiürítéséhez vágd ki a területet és illeszd be újra + ugyanarra a helyre. + - Az F4 megnyomásával láthatod az FPS-edet és a Tick/mp értéket. + - Nyomd meg az F4-et kétszer, hogy arra a csempére ugorj, ahol az egered van. From b6e6970e0edb4749c52004bba8f24057e3badcfe Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Sat, 31 Oct 2020 12:21:39 +0100 Subject: [PATCH 028/127] use electron builtin to open links (#897) When opening a link on standalone, use [shell.openExternal](https://github.com/electron/electron/blob/master/docs/api/shell.md#shellopenexternalurl-options). This works cross-platform, and looks less suspicious to antivirus than explicitly shelling out. --- electron/index.js | 8 ++------ 1 file changed, 2 insertions(+), 6 deletions(-) diff --git a/electron/index.js b/electron/index.js index 7b9377df..91ab8e9e 100644 --- a/electron/index.js +++ b/electron/index.js @@ -4,7 +4,7 @@ const { app, BrowserWindow, Menu, MenuItem, session } = require("electron"); const path = require("path"); const url = require("url"); const childProcess = require("child_process"); -const { ipcMain } = require("electron"); +const { ipcMain, shell } = require("electron"); const fs = require("fs"); const isDev = process.argv.indexOf("--dev") >= 0; const isLocal = process.argv.indexOf("--local") >= 0; @@ -67,11 +67,7 @@ function createWindow() { win.webContents.on("new-window", (event, pth) => { event.preventDefault(); - if (process.platform == "win32") { - childProcess.execSync("start " + pth); - } else if (process.platform == "linux") { - childProcess.execSync("xdg-open " + pth); - } + shell.openExternal(pth); }); win.on("closed", () => { From 400e3e0b08ed8a1f55150e3af72f4430282528d6 Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Sat, 31 Oct 2020 12:22:23 +0100 Subject: [PATCH 029/127] match tutorials to the correct painter variants (#901) --- .../building_tutorials/painter-mirrored.png | Bin 45606 -> 46254 bytes res/ui/building_tutorials/painter.png | Bin 46254 -> 45606 bytes 2 files changed, 0 insertions(+), 0 deletions(-) diff --git a/res/ui/building_tutorials/painter-mirrored.png b/res/ui/building_tutorials/painter-mirrored.png index 63cc6683232906c7485fe93e68ce337c698de1ee..bb1147d5da167f98e86cd1a363c0fe5e2bbb5d95 100644 GIT binary patch literal 46254 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 z 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 literal 45606 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 MxbZ)wFsJbU0pcEAZ~y=R diff --git a/res/ui/building_tutorials/painter.png b/res/ui/building_tutorials/painter.png index bb1147d5da167f98e86cd1a363c0fe5e2bbb5d95..63cc6683232906c7485fe93e68ce337c698de1ee 100644 GIT binary patch literal 45606 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 MxbZ)wFsJbU0pcEAZ~y=R literal 46254 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 z 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 From ff37013074eb9a7a21c8be59984690241d63f908 Mon Sep 17 00:00:00 2001 From: CEbbinghaus <31423391+CEbbinghaus@users.noreply.github.com> Date: Sat, 31 Oct 2020 22:23:13 +1100 Subject: [PATCH 030/127] Added Flooring the Required amount (#904) --- src/js/game/hub_goals.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/game/hub_goals.js b/src/js/game/hub_goals.js index c9d9494f..9a945128 100644 --- a/src/js/game/hub_goals.js +++ b/src/js/game/hub_goals.js @@ -238,7 +238,8 @@ export class HubGoals extends BasicSerializableObject { return; } - const required = Math.min(200, 4 + (this.level - 27) * 0.25); + //Floor Required amount to remove confusion + const required = Math.min(200, Math.floor(4 + (this.level - 27) * 0.25)); this.currentGoal = { definition: this.computeFreeplayShape(this.level), required, From 48c3db4a28618b81316476c8d7b7de0434914fca Mon Sep 17 00:00:00 2001 From: Katie Chan <72162917+KatieChan-IOM@users.noreply.github.com> Date: Sat, 31 Oct 2020 11:25:47 +0000 Subject: [PATCH 031/127] Update base-zh-TW.yaml (#921) --- translations/base-zh-TW.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index 1de7b8ad..06ebdd9b 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -5,7 +5,7 @@ steamPage: 你喜歡自動化生產的遊戲類型嗎?那你來對地方了! Shapez.io 是一款建造工廠、自動化生產與組合圖形的休閒遊戲。 每當玩家不斷晉級,形狀會越來越複雜,你的工廠將在一個無邊際的地圖上不斷擴展。 - 除此之外,你也必須不斷累加你的生產量來達到升級的需求,達成目標的方法無他,只有不段地擴張! + 除此之外,你也必須不斷累加你的生產量來達到升級的需求,達成目標的方法無他,只有不斷地擴張! 遊戲初期只需要組合特定圖形,接著玩家會被要求幫圖形上色,有時甚至需要先混色才能達到目標。 玩家可以在 Steam 購買本游戲的單機版,如果還在猶豫,也可以到 shapez.io 先免費試玩再決定! title_advantages: 單機版優點 From 6b0df96179147f864214c29e2898eb2640b75299 Mon Sep 17 00:00:00 2001 From: MineJulRBX <34965273+MineJulRBX@users.noreply.github.com> Date: Sat, 31 Oct 2020 12:28:33 +0100 Subject: [PATCH 032/127] Update base-da.yaml (#926) --- translations/base-da.yaml | 76 +++++++++++++++++++-------------------- 1 file changed, 38 insertions(+), 38 deletions(-) diff --git a/translations/base-da.yaml b/translations/base-da.yaml index 68976184..52af9b54 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -4,22 +4,22 @@ steamPage: mere komplicerede. discordLinkShort: Official Discord intro: >- - Shapez.io er et afslapet spil hvor du skal bygge fabrikker for at + Shapez.io er et afslappet spil hvor du skal bygge fabrikker for at automatisere productionen af geometriske figurer. Jo længer du når, jo mere kompliseret bliver figurene, og du bliver nød til at spræde dig ud på den grænseløse spilleflade. - og hvis det ikke var nok, så skal du også producere eksponentielt flere figurer for at måde behovene spillet giver dig - det eneste der virker er skalering! + og hvis det ikke var nok, så skal du også producere eksponentielt flere figurer for at møde behovene spillet giver dig - det eneste der virker er skalering! - Mens du i starten kun laver former, skal du senere farve lægge dem - for at gøre dette skal du udvinde og blande farver! + Mens du i starten kun laver former, skal du senere farvelægge dem - for at gøre dette skal du udvinde og blande farver! At købe spllet på Steam, giver dig adgang til det fulde spil, men du kan også spille en demo version på shapez.io og vælge senere! title_advantages: Steam version Fordele advantages: - 12 Nye Niveauer for i alt 26 niveauer - - 18 Nye Byginger for en fuldt autmaticeret fabrik! + - 18 Nye Bygninger for en fuldt autmaticeret fabrik! - 20 Upgraderings Niveauer for mange timers sjov! - - Wires Update for an entirely new dimension! + - Ledninger Opdatering for en helt ny dimension! - Dark Mode! - Unlimited Savegames - Uendelige Markører @@ -32,7 +32,7 @@ steamPage: - Minimap - Mods - Sandbox mode - - ... and a lot more! + - ... og meget mere! title_open_source: This game is open source! title_links: Links links: @@ -40,12 +40,12 @@ steamPage: roadmap: Roadmap subreddit: Subreddit source_code: Source code (GitHub) - translate: Help translate + translate: Hjælp med oversættelse text_open_source: >- - Anybody can contribute, I'm actively involved in the community and - attempt to review all suggestions and take feedback into consideration - where possible. - + Hvem som helst kan bidrage, jeg er aktivt involveret i fælleskabet og + forsøger at gennemgå alle ideer og tager feedback i overvejelse + hvor muligt. + Be sure to check out my trello board for the full roadmap! global: loading: Indlæser @@ -259,7 +259,7 @@ ingame: notifications: newUpgrade: En ny opgradering er tilgængelig! gameSaved: Dit spil er gemt. - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: Level er blevet fuldført! shop: title: Opgraderinger buttonUnlock: Opgrader @@ -282,7 +282,7 @@ ingame: shapesDisplayUnits: second: / s minute: / m - hour: / h + hour: / t settingsMenu: playtime: Spilletid buildingsPlaced: Bygninger @@ -348,20 +348,20 @@ ingame: watermark: title: Demo version desc: Click here to see the Steam version advantages! - get_on_steam: Get on steam + get_on_steam: Få på steam standaloneAdvantages: - title: Get the full version! - no_thanks: No, thanks! + title: Få den fulde version! + no_thanks: Nej tak! points: levels: - title: 12 New Levels - desc: For a total of 26 levels! + title: 12 Nye Levels + desc: For et total af 26 levels! buildings: - title: 18 New Buildings + title: 18 Nye Bygninger desc: Fully automate your factory! savegames: - title: ∞ Savegames - desc: As many as your heart desires! + title: ∞ Gemte spil + desc: Så mange dit hjerte begær! upgrades: title: 20 Upgrade Tiers desc: This demo version has only 5! @@ -369,14 +369,14 @@ ingame: title: ∞ Markers desc: Never get lost in your factory! wires: - title: Wires - desc: An entirely new dimension! + title: Ledninger + desc: En helt ny dimension! darkmode: title: Dark Mode desc: Stop hurting your eyes! support: - title: Support me - desc: I develop it in my spare time! + title: Støt mig + desc: Jeg arbejder på det i min fritid! shopUpgrades: belt: name: Bælter, Fordelere & Tuneller @@ -434,7 +434,7 @@ buildings: description: Drejer figurer 90 grader mod uret. rotate180: name: Rotate (180) - description: Rotates shapes by 180 degrees. + description: Drejer figurer 180 grader med uret. stacker: default: name: Stabler @@ -468,25 +468,25 @@ buildings: name: Energiledning description: Lader dig transportere energi. second: - name: Wire - description: Transfers signals, which can be items, colors or booleans (1 / 0). - Different colored wires do not connect. + name: Ledning + description: Overfør signaler, som kan være elementer, farver eller boolsk variabler (1 / 0). + Forskellig farvet ledninger kan ikke forbindes. balancer: default: name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + description: Multifunktionelt - Fordeler alle indgange jævnt til alle udgange. merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Forener (kompakt) + description: Forener to transportbånd til en. merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: Forener (kompakt) + description: Forener to transportbånd til en. splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Splitter (kompakt) + description: Splitter et transportbånd til to. splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: Splitter (kompakt) + description: Splitter et transportbånd til to. storage: default: name: Storage From 607650dae36103f259871c5d0de512580ac96776 Mon Sep 17 00:00:00 2001 From: Anykan Date: Sat, 31 Oct 2020 12:28:59 +0100 Subject: [PATCH 033/127] Update base-de.yaml (#931) N-Gate description is wrong. it makes from a 1 a zero and from a zero a 1 --- translations/base-de.yaml | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/translations/base-de.yaml b/translations/base-de.yaml index 0c4fa30f..ee3bc70f 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -521,8 +521,7 @@ buildings: sind. not: name: NICHT-Gatter - description: Gibt eine "1" aus, wenn beide Eingänge nicht wahr (kein Signal oder - "0") sind. + description: Kehrt den Wert um. Macht aus einer "1" eine "0" und eine "0" aus einer "1". xor: name: XODER-Gatter description: Gibt eine "1" aus, wenn genau einer der Eingänge wahr (Form, Farbe From d33a72202a2b9788f93908c6a8acf96f30053622 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sat, 31 Oct 2020 12:41:18 +0100 Subject: [PATCH 034/127] Update changelog and update translation regarding 20 upgrade tiers, closes #907 --- src/js/changelog.js | 5 ++++- translations/base-ar.yaml | 4 ++-- translations/base-cat.yaml | 2 +- translations/base-cz.yaml | 5 +++-- translations/base-da.yaml | 8 ++++---- translations/base-de.yaml | 2 +- translations/base-el.yaml | 4 ++-- translations/base-en.yaml | 4 ++-- translations/base-fi.yaml | 2 +- translations/base-fr.yaml | 2 +- translations/base-hr.yaml | 4 ++-- translations/base-hu.yaml | 2 +- translations/base-ind.yaml | 2 +- translations/base-it.yaml | 2 +- translations/base-lt.yaml | 4 ++-- translations/base-nl.yaml | 2 +- translations/base-no.yaml | 2 +- translations/base-pl.yaml | 5 +++-- translations/base-pt-BR.yaml | 2 +- translations/base-pt-PT.yaml | 2 +- translations/base-ro.yaml | 2 +- translations/base-ru.yaml | 2 +- translations/base-sl.yaml | 4 ++-- translations/base-sr.yaml | 4 ++-- translations/base-sv.yaml | 5 +++-- translations/base-tr.yaml | 11 +++++++---- translations/base-uk.yaml | 8 +++++--- 27 files changed, 56 insertions(+), 45 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 3a93bb96..fcafbe2b 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -7,7 +7,10 @@ export const CHANGELOG = [ "Fix reward notification being too long sometimes (by LeopoldTal)", "Use locale decimal separator on belt reader display (by LeopoldTal)", "Vastly improved performance when saving games (by LeopoldTal)", - "Updated translations", + "Prevent some antivirus programs blocking the opening of external links (by LeopoldTal)", + "Match tutorials to the correct painter variants (by LeopoldTal)", + "Prevent throughput goals containing fractional numbers (by CEbbinghaus)", + "Updated translations and added Hungarian", ], }, { diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml index 55327fdf..305c9b88 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -16,7 +16,7 @@ steamPage: advantages: - 12 New Level for a total of 26 levels - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! + - Unlimited Upgrade Tiers for many hours of fun! - Wires Update for an entirely new dimension! - Dark Mode! - Unlimited Savegames @@ -359,7 +359,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-cat.yaml b/translations/base-cat.yaml index 85e03e8f..4d4954b3 100644 --- a/translations/base-cat.yaml +++ b/translations/base-cat.yaml @@ -369,7 +369,7 @@ ingame: title: Guarda ∞ partides desc: Tantes com vulguis! upgrades: - title: 20 Nivells de millora + title: ∞ Nivells de millora desc: La versió demo només en té 5! markers: title: ∞ Marcadors diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index add0e440..2f2909f0 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -303,7 +303,8 @@ ingame: 2_1_place_cutter: "Teď umístěte pilu k rozřezání kruhového tvaru na dvě poloviny!

PS: Pila řeže tvary vždy svisle na poloviny bez ohledu na její orientaci." - 2_2_place_trash: Pila se může zaseknout a zastavit vaši produkci!

Použijte + 2_2_place_trash: + Pila se může zaseknout a zastavit vaši produkci!

Použijte koš ke smazání (!) nepotřebných částí tvarů. 2_3_more_cutters: "Dobrá práce! Teď postavte více pil pro zrychlení @@ -360,7 +361,7 @@ ingame: title: ∞ Uložených her desc: Tolik, kolik vaše srdce touží! upgrades: - title: 20 vylepšení + title: ∞ vylepšení desc: Tato demo verze má pouze 5! markers: title: ∞ Značek diff --git a/translations/base-da.yaml b/translations/base-da.yaml index 52af9b54..44293fdd 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -42,10 +42,10 @@ steamPage: source_code: Source code (GitHub) translate: Hjælp med oversættelse text_open_source: >- - Hvem som helst kan bidrage, jeg er aktivt involveret i fælleskabet og - forsøger at gennemgå alle ideer og tager feedback i overvejelse + Hvem som helst kan bidrage, jeg er aktivt involveret i fælleskabet og + forsøger at gennemgå alle ideer og tager feedback i overvejelse hvor muligt. - + Be sure to check out my trello board for the full roadmap! global: loading: Indlæser @@ -363,7 +363,7 @@ ingame: title: ∞ Gemte spil desc: Så mange dit hjerte begær! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-de.yaml b/translations/base-de.yaml index ee3bc70f..26e9dfc2 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -360,7 +360,7 @@ ingame: title: ∞ Speicherstände desc: So viele dein Herz begehrt! upgrades: - title: 20 Upgrade-Stufen + title: ∞ Upgrade-Stufen desc: Diese Demo hat nur 5! markers: title: ∞ Marker diff --git a/translations/base-el.yaml b/translations/base-el.yaml index 08edd918..ec0df592 100644 --- a/translations/base-el.yaml +++ b/translations/base-el.yaml @@ -18,7 +18,7 @@ steamPage: advantages: - 12 New Level for a total of 26 levels - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! + - Unlimited Upgrade Tiers for many hours of fun! - Wires Update for an entirely new dimension! - Dark Mode! - Unlimited Savegames @@ -374,7 +374,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-en.yaml b/translations/base-en.yaml index 639dca3a..62ed2808 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -42,7 +42,7 @@ steamPage: advantages: - 12 New Levels for a total of 26 levels - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! + - Unlimited Upgrade Tiers for many hours of fun! - Wires Update for an entirely new dimension! - Dark Mode! - Unlimited Savegames @@ -487,7 +487,7 @@ ingame: desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index 56b52600..42d73425 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -358,7 +358,7 @@ ingame: title: ∞ Tallennukset desc: Niin paljon kuin sielusi kaipaa! upgrades: - title: 20 päivitystasoa + title: ∞ päivitystasoa desc: Kokeiluversiossa on vain viisi! markers: title: ∞ Merkit diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index 65d962a2..6af2f86e 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -367,7 +367,7 @@ ingame: title: Sauvegardes ∞ desc: Autant que votre cœur le désire ! upgrades: - title: 20 niveaux d’amélioration + title: ∞ niveaux d’amélioration desc: Cette version de démonstration n’en a que 5 ! markers: title: Balises ∞ diff --git a/translations/base-hr.yaml b/translations/base-hr.yaml index 70f2bcb3..ae62d58c 100644 --- a/translations/base-hr.yaml +++ b/translations/base-hr.yaml @@ -17,7 +17,7 @@ steamPage: advantages: - 12 New Level for a total of 26 levels - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! + - Unlimited Upgrade Tiers for many hours of fun! - Wires Update for an entirely new dimension! - Dark Mode! - Unlimited Savegames @@ -360,7 +360,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml index 9f1cc854..cfbce76a 100644 --- a/translations/base-hu.yaml +++ b/translations/base-hu.yaml @@ -363,7 +363,7 @@ ingame: title: ∞ Mentés desc: Amennyit csak szeretnél! upgrades: - title: 20 Fejlesztési Szint + title: ∞ Fejlesztési Szint desc: A Demó Verzió csak 5-öt tartalmaz! markers: title: ∞ Jelölő diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index 2da9b377..8211a34f 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -368,7 +368,7 @@ ingame: title: ∞ Data Simpanan desc: Sebanyak yang kamu mau! upgrades: - title: 20 Tingkatan Upgrade + title: ∞ Tingkatan Upgrade desc: Versi demo ini hanya punya 5! markers: title: ∞ Penanda diff --git a/translations/base-it.yaml b/translations/base-it.yaml index f1ed9ba4..572bbc77 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -367,7 +367,7 @@ ingame: title: ∞ salvataggi desc: Quanti ne desideri! upgrades: - title: 20 gradi di miglioramenti + title: ∞ gradi di miglioramenti desc: Questa demo ne ha solo 5! markers: title: ∞ etichette diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml index 910cb9f2..f69bbc03 100644 --- a/translations/base-lt.yaml +++ b/translations/base-lt.yaml @@ -17,7 +17,7 @@ steamPage: advantages: - 12 New Level for a total of 26 levels - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! + - Unlimited Upgrade Tiers for many hours of fun! - Wires Update for an entirely new dimension! - Dark Mode! - Unlimited Savegames @@ -359,7 +359,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index bebba218..09192564 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -368,7 +368,7 @@ ingame: title: ∞ Savegames desc: Zo veel je maar wilt! upgrades: - title: 20 Upgrade Levels + title: ∞ Upgrade Levels desc: Deze demo heeft er enkel 5! markers: title: ∞ Markeringen diff --git a/translations/base-no.yaml b/translations/base-no.yaml index 1e8bf7b0..8ab3a2a7 100644 --- a/translations/base-no.yaml +++ b/translations/base-no.yaml @@ -365,7 +365,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index d42c80f2..360f3cad 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -326,7 +326,8 @@ ingame: niezależnie od swojej orientacji." 2_2_place_trash: Przecinak może się zapchać i zablokować!

Użyj śmietnik aby usunąć obecnie (!) nie potrzebne elementy. - 2_3_more_cutters: "Dobra robota! Teraz umieść 2 kolejne przecinaki,aby przyspieszyć + 2_3_more_cutters: + "Dobra robota! Teraz umieść 2 kolejne przecinaki,aby przyspieszyć ten wolny proces!

PS: Użyj klawiszy 0-9, aby szybciej uzyskać dostęp do budynków!" 3_1_rectangles: "Teraz wydobądź kilka kwadratów! Wybuduj @@ -365,7 +366,7 @@ ingame: title: ∞ Zapisów Gry desc: Twórz tyle, ile potrzebujesz! upgrades: - title: 20 Poziomów Ulepszeń + title: ∞ Poziomów Ulepszeń desc: To demo posiada tylko 5! markers: title: ∞ Znaczników diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index 8e8ea027..c52816d4 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -361,7 +361,7 @@ ingame: title: Saves ∞ desc: Quantos o seu coração mandar! upgrades: - title: 20 Níveis de Melhorias + title: ∞ Níveis de Melhorias desc: Essa demo tem apenas 5! markers: title: Marcadores ∞ diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index c6c18b98..a0d7901c 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -368,7 +368,7 @@ ingame: title: Savegames ∞ desc: Tantos quanto o teu corção desejar! upgrades: - title: 20 Níveis de melhoria + title: ∞ Níveis de melhoria desc: Nesta versão demo apenas tens 5! markers: title: Marcos ∞ diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index 3a6ca947..1dd87f08 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -367,7 +367,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 23b635b7..6c01272e 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -360,7 +360,7 @@ ingame: title: ∞ Сохранений desc: Сколько Вашей душе угодно! upgrades: - title: 20 стадий улучшений! + title: ∞ стадий улучшений! desc: В демоверсии всего 5! markers: title: ∞ Маркеров! diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml index 516aa9de..907aa1f5 100644 --- a/translations/base-sl.yaml +++ b/translations/base-sl.yaml @@ -18,7 +18,7 @@ steamPage: advantages: - 12 New Level for a total of 26 levels - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! + - Unlimited Upgrade Tiers for many hours of fun! - Wires Update for an entirely new dimension! - Dark Mode! - Unlimited Savegames @@ -361,7 +361,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml index 3a9d72ea..35f2c8ca 100644 --- a/translations/base-sr.yaml +++ b/translations/base-sr.yaml @@ -17,7 +17,7 @@ steamPage: advantages: - 12 New Level for a total of 26 levels - 18 New Buildings for a fully automated factory! - - 20 Upgrade Tiers for many hours of fun! + - Unlimited Upgrade Tiers for many hours of fun! - Wires Update for an entirely new dimension! - Dark Mode! - Unlimited Savegames @@ -361,7 +361,7 @@ ingame: title: ∞ Savegames desc: As many as your heart desires! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ Markers diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index 9d4284de..8083c8d1 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -364,7 +364,7 @@ ingame: title: ∞ med sparfiler desc: Så många som du bara vill! upgrades: - title: 20 Upgrade Tiers + title: ∞ Upgrade Tiers desc: This demo version has only 5! markers: title: ∞ med markeringar! @@ -520,7 +520,8 @@ buildings: färger eller booleansk "1") xor: name: XOR Grind - description: Avger en booleansk "1" om ett av inflöderna är positiv, dock inte om båda är positiva. + description: + Avger en booleansk "1" om ett av inflöderna är positiv, dock inte om båda är positiva. (Positiva menas med former, färger eller booleansk "1") or: name: OR Grind diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index 7cc78d33..389b01e8 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -302,20 +302,23 @@ ingame: yerleştir.

İpucu: Birden fazla üretici yerleştirmek için SHIFT tuşuna basılı tut, ve R tuşuyla taşıma bandının yönünü döndür." - 2_1_place_cutter: "Şimdi daireleri yarıya bölmek için bir Kesici yerleştir!

+ 2_1_place_cutter: + "Şimdi daireleri yarıya bölmek için bir Kesici yerleştir!

Not: Kesici şekilleri yönünden bağımsız olarak her zaman yukarıdan aşağıya keser." 2_2_place_trash: Kesicinin çıkış hatları doluysa durabilir!

Bunun için kullanılmayan çıktılara çöp yerleştirin. - 2_3_more_cutters: "İyi iş çıkardın! Şimdi işleri hızlandırmak için iki kesici daha + 2_3_more_cutters: + "İyi iş çıkardın! Şimdi işleri hızlandırmak için iki kesici daha yerleştir.

Not: 0-9 tuşlarını kullanarak yapılara daha hızlı ulaşabilirsin!" 3_1_rectangles: "Şimdi biraz dikdörtgen üretelim! 4 Üretici yerleştir ve bunları merkeze bağla.

Not: SHIFT tuşuna basılı tutarak bant planlayıcıyı etkinleştir!" - 21_1_place_quad_painter: Dörtlü boyayıcıyı yerleştirin ve daireyi, + 21_1_place_quad_painter: + Dörtlü boyayıcıyı yerleştirin ve daireyi, beyaz ve kırmızı renkleri elde edin! 21_2_switch_to_wires: Kablo katmanına E tuşuna basarak geçiş yapın!

@@ -362,7 +365,7 @@ ingame: title: ∞ Oyun Kayıtları desc: Canın ne kadar isterse! upgrades: - title: 20 Geliştirme Aşaması + title: ∞ Geliştirme Aşaması desc: Bu deneme sürümünde sadece 5 tane var! markers: title: ∞ Yer imleri diff --git a/translations/base-uk.yaml b/translations/base-uk.yaml index 45765dd9..eddd4210 100644 --- a/translations/base-uk.yaml +++ b/translations/base-uk.yaml @@ -520,7 +520,7 @@ ingame: desc: Стільки, скільки вашій душі завгодно! upgrades: - title: 20 рівнів Поліпшень + title: ∞ рівнів Поліпшень desc: Демо-версія має лише 5! markers: @@ -706,7 +706,8 @@ buildings: logic_gate: default: name: Логічне "І" - description: Видає логічну "1" якщо обидва вводи отримують сигнал "Істинний". (Під "Істинний" мається наувазі фігура, + description: + Видає логічну "1" якщо обидва вводи отримують сигнал "Істинний". (Під "Істинний" мається наувазі фігура, колір чи логічна "1") not: name: Логічне "НЕ" @@ -745,7 +746,8 @@ buildings: reader: default: name: &reader Зчитувач конвеєєра - description: Дозволяє вимірювати середню пропускну здатність конвеєрної стрічки. Видає сигнал останнього зчитаного елемента + description: + Дозволяє вимірювати середню пропускну здатність конвеєрної стрічки. Видає сигнал останнього зчитаного елемента на шар дротів (коли розблоковано). analyzer: From 4b088980f3272af1df440dc54980a08a1688f335 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sat, 31 Oct 2020 12:46:25 +0100 Subject: [PATCH 035/127] Set 1.2.1 release date --- src/js/changelog.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index fcafbe2b..a5b7e07e 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,7 +1,7 @@ export const CHANGELOG = [ { version: "1.2.1", - date: "unreleased", + date: "31.10.2020", entries: [ "Fixed stacking bug for level 26 which required restarting the game", "Fix reward notification being too long sometimes (by LeopoldTal)", From 82aaf7f037344bdadc0ae3b0cf2d861a093e161f Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 12:47:19 +0100 Subject: [PATCH 036/127] Add ability to edit constant signals, bump version --- src/js/changelog.js | 5 +++ src/js/game/hud/hud.js | 2 + src/js/game/hud/parts/constant_signal_edit.js | 33 ++++++++++++++ src/js/game/systems/constant_signal.js | 44 +++++++++++-------- version | 2 +- 5 files changed, 66 insertions(+), 20 deletions(-) create mode 100644 src/js/game/hud/parts/constant_signal_edit.js diff --git a/src/js/changelog.js b/src/js/changelog.js index a5b7e07e..6cc50993 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,4 +1,9 @@ export const CHANGELOG = [ + { + version: "1.2.2", + date: "07.12.2020", + entries: ["Added the ability to edit constant signals by left clicking them"], + }, { version: "1.2.1", date: "31.10.2020", diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 5f1bd226..d64f96a8 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -48,6 +48,7 @@ import { HUDBetaOverlay } from "./parts/beta_overlay"; import { HUDStandaloneAdvantages } from "./parts/standalone_advantages"; import { HUDCatMemes } from "./parts/cat_memes"; import { HUDTutorialVideoOffer } from "./parts/tutorial_video_offer"; +import { HUDConstantSignalEdit } from "./parts/constant_signal_edit"; export class GameHUD { /** @@ -86,6 +87,7 @@ export class GameHUD { waypoints: new HUDWaypoints(this.root), wireInfo: new HUDWireInfo(this.root), leverToggle: new HUDLeverToggle(this.root), + constantSignalEdit: new HUDConstantSignalEdit(this.root), // Must always exist pinnedShapes: new HUDPinnedShapes(this.root), diff --git a/src/js/game/hud/parts/constant_signal_edit.js b/src/js/game/hud/parts/constant_signal_edit.js new file mode 100644 index 00000000..b030ac52 --- /dev/null +++ b/src/js/game/hud/parts/constant_signal_edit.js @@ -0,0 +1,33 @@ +import { STOP_PROPAGATION } from "../../../core/signal"; +import { Vector } from "../../../core/vector"; +import { enumMouseButton } from "../../camera"; +import { BaseHUDPart } from "../base_hud_part"; + +export class HUDConstantSignalEdit extends BaseHUDPart { + initialize() { + this.root.camera.downPreHandler.add(this.downPreHandler, this); + } + + /** + * @param {Vector} pos + * @param {enumMouseButton} button + */ + downPreHandler(pos, button) { + const tile = this.root.camera.screenToWorld(pos).toTileSpace(); + const contents = this.root.map.getLayerContentXY(tile.x, tile.y, "wires"); + if (contents) { + const constantComp = contents.components.ConstantSignal; + if (constantComp) { + if (button === enumMouseButton.left) { + this.root.systemMgr.systems.constantSignal.editConstantSignal(contents, { + deleteOnCancel: false, + }); + return STOP_PROPAGATION; + } else if (button === enumMouseButton.right) { + this.root.logic.tryDeleteBuilding(contents); + return STOP_PROPAGATION; + } + } + } + } +} diff --git a/src/js/game/systems/constant_signal.js b/src/js/game/systems/constant_signal.js index aaf31a19..d698c1d5 100644 --- a/src/js/game/systems/constant_signal.js +++ b/src/js/game/systems/constant_signal.js @@ -17,7 +17,9 @@ export class ConstantSignalSystem extends GameSystemWithFilter { constructor(root) { super(root, [ConstantSignalComponent]); - this.root.signals.entityManuallyPlaced.add(this.querySigalValue, this); + this.root.signals.entityManuallyPlaced.add(entity => + this.editConstantSignal(entity, { deleteOnCancel: true }) + ); } update() { @@ -33,8 +35,10 @@ export class ConstantSignalSystem extends GameSystemWithFilter { /** * Asks the entity to enter a valid signal code * @param {Entity} entity + * @param {object} param0 + * @param {boolean=} param0.deleteOnCancel */ - querySigalValue(entity) { + editConstantSignal(entity, { deleteOnCancel = true }) { if (!entity.components.ConstantSignal) { return; } @@ -110,26 +114,28 @@ export class ConstantSignalSystem extends GameSystemWithFilter { dialog.valueChosen.add(closeHandler); // When cancelled, destroy the entity again - dialog.buttonSignals.cancel.add(() => { - if (!this.root || !this.root.entityMgr) { - // Game got stopped - return; - } + if (deleteOnCancel) { + dialog.buttonSignals.cancel.add(() => { + if (!this.root || !this.root.entityMgr) { + // Game got stopped + return; + } - const entityRef = this.root.entityMgr.findByUid(uid, false); - if (!entityRef) { - // outdated - return; - } + const entityRef = this.root.entityMgr.findByUid(uid, false); + if (!entityRef) { + // outdated + return; + } - const constantComp = entityRef.components.ConstantSignal; - if (!constantComp) { - // no longer interesting - return; - } + const constantComp = entityRef.components.ConstantSignal; + if (!constantComp) { + // no longer interesting + return; + } - this.root.logic.tryDeleteBuilding(entityRef); - }); + this.root.logic.tryDeleteBuilding(entityRef); + }); + } } /** diff --git a/version b/version index cb174d58..d2d61a7e 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.2.1 \ No newline at end of file +1.2.2 \ No newline at end of file From 944b3c011cca81e8b66fdc674c105c17526cf2a2 Mon Sep 17 00:00:00 2001 From: Daan Breur Date: Mon, 7 Dec 2020 12:48:30 +0100 Subject: [PATCH 037/127] Added layersupport to waypoints!! (#703) * Added layersupport to waypoints!! It will now save what layer its made on! * Added Migrator for 1006 to 1007 * Corrected Version Number * Updated Comment * Changed HUB Layer to be hardcoded --- src/js/game/hud/parts/waypoints.js | 9 ++++- src/js/savegame/savegame.js | 8 ++++- .../savegame/savegame_interface_registry.js | 2 ++ src/js/savegame/schemas/1007.js | 34 +++++++++++++++++++ src/js/savegame/schemas/1007.json | 5 +++ 5 files changed, 56 insertions(+), 2 deletions(-) create mode 100644 src/js/savegame/schemas/1007.js create mode 100644 src/js/savegame/schemas/1007.json diff --git a/src/js/game/hud/parts/waypoints.js b/src/js/game/hud/parts/waypoints.js index a6f37b93..c0f94271 100644 --- a/src/js/game/hud/parts/waypoints.js +++ b/src/js/game/hud/parts/waypoints.js @@ -1,6 +1,7 @@ import { makeOffscreenBuffer } from "../../../core/buffer_utils"; import { globalConfig, THIRDPARTY_URLS } from "../../../core/config"; import { DrawParameters } from "../../../core/draw_parameters"; +import { gMetaBuildingRegistry } from "../../../core/global_registries"; import { Loader } from "../../../core/loader"; import { DialogWithForm } from "../../../core/modal_dialog_elements"; import { FormElementInput } from "../../../core/modal_dialog_forms"; @@ -16,8 +17,10 @@ import { import { Vector } from "../../../core/vector"; import { T } from "../../../translations"; import { BaseItem } from "../../base_item"; +import { MetaHubBuilding } from "../../buildings/hub"; import { enumMouseButton } from "../../camera"; import { KEYMAPPINGS } from "../../key_action_mapper"; +import { layers } from "../../root"; import { ShapeDefinition } from "../../shape_definition"; import { BaseHUDPart } from "../base_hud_part"; import { DynamicDomAttach } from "../dynamic_dom_attach"; @@ -26,7 +29,8 @@ import { enumNotificationType } from "./notifications"; /** @typedef {{ * label: string | null, * center: { x: number, y: number }, - * zoomLevel: number + * zoomLevel: number, + * layer: Layer, * }} Waypoint */ /** @@ -98,6 +102,7 @@ export class HUDWaypoints extends BaseHUDPart { label: null, center: { x: 0, y: 0 }, zoomLevel: 3, + layer: gMetaBuildingRegistry.findByClass(MetaHubBuilding).getLayer(), }, ]; @@ -228,6 +233,7 @@ export class HUDWaypoints extends BaseHUDPart { * @param {Waypoint} waypoint */ moveToWaypoint(waypoint) { + this.root.currentLayer = waypoint.layer; this.root.camera.setDesiredCenter(new Vector(waypoint.center.x, waypoint.center.y)); this.root.camera.setDesiredZoom(waypoint.zoomLevel); } @@ -326,6 +332,7 @@ export class HUDWaypoints extends BaseHUDPart { label, center: { x: position.x, y: position.y }, zoomLevel: this.root.camera.zoomLevel, + layer: this.root.currentLayer, }); this.sortWaypoints(); diff --git a/src/js/savegame/savegame.js b/src/js/savegame/savegame.js index 0ad630f6..3fea2d5e 100644 --- a/src/js/savegame/savegame.js +++ b/src/js/savegame/savegame.js @@ -11,6 +11,7 @@ import { SavegameInterface_V1003 } from "./schemas/1003"; import { SavegameInterface_V1004 } from "./schemas/1004"; import { SavegameInterface_V1005 } from "./schemas/1005"; import { SavegameInterface_V1006 } from "./schemas/1006"; +import { SavegameInterface_V1007 } from "./schemas/1007"; const logger = createLogger("savegame"); @@ -51,7 +52,7 @@ export class Savegame extends ReadWriteProxy { * @returns {number} */ static getCurrentVersion() { - return 1006; + return 1007; } /** @@ -120,6 +121,11 @@ export class Savegame extends ReadWriteProxy { data.version = 1006; } + if (data.version === 1006) { + SavegameInterface_V1007.migrate1006to1007(data); + data.version = 1007; + } + return ExplainedResult.good(); } diff --git a/src/js/savegame/savegame_interface_registry.js b/src/js/savegame/savegame_interface_registry.js index 07b5353c..96389c50 100644 --- a/src/js/savegame/savegame_interface_registry.js +++ b/src/js/savegame/savegame_interface_registry.js @@ -7,6 +7,7 @@ import { SavegameInterface_V1003 } from "./schemas/1003"; import { SavegameInterface_V1004 } from "./schemas/1004"; import { SavegameInterface_V1005 } from "./schemas/1005"; import { SavegameInterface_V1006 } from "./schemas/1006"; +import { SavegameInterface_V1007 } from "./schemas/1007"; /** @type {Object.} */ export const savegameInterfaces = { @@ -17,6 +18,7 @@ export const savegameInterfaces = { 1004: SavegameInterface_V1004, 1005: SavegameInterface_V1005, 1006: SavegameInterface_V1006, + 1007: SavegameInterface_V1007, }; const logger = createLogger("savegame_interface_registry"); diff --git a/src/js/savegame/schemas/1007.js b/src/js/savegame/schemas/1007.js new file mode 100644 index 00000000..f6b1d194 --- /dev/null +++ b/src/js/savegame/schemas/1007.js @@ -0,0 +1,34 @@ +import { createLogger } from "../../core/logging.js"; +import { SavegameInterface_V1006 } from "./1006.js"; + +const schema = require("./1007.json"); +const logger = createLogger("savegame_interface/1007"); + +export class SavegameInterface_V1007 extends SavegameInterface_V1006 { + getVersion() { + return 1007; + } + + getSchemaUncached() { + return schema; + } + + /** + * @param {import("../savegame_typedefs.js").SavegameData} data + */ + static migrate1006to1007(data) { + logger.log("Migrating 1006 to 1007"); + const dump = data.dump; + if (!dump) { + return true; + } + + const waypoints = dump.waypoints.waypoints; + + // set waypoint layer to "regular" + for (let i = 0; i < waypoints.length; ++i) { + const waypoint = waypoints[i]; + waypoint.layer = "regular"; + } + } +} diff --git a/src/js/savegame/schemas/1007.json b/src/js/savegame/schemas/1007.json new file mode 100644 index 00000000..6682f615 --- /dev/null +++ b/src/js/savegame/schemas/1007.json @@ -0,0 +1,5 @@ +{ + "type": "object", + "required": [], + "additionalProperties": true +} From f5032a02ce4ebd05c2e57929226de2980f39cbe0 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 12:57:49 +0100 Subject: [PATCH 038/127] Add layersupport for waypoints --- res/ui/icons/waypoint_wires.png | Bin 0 -> 1312 bytes res_raw/sprites/misc/waypoint_wires.png | Bin 0 -> 1312 bytes src/css/ingame_hud/waypoints.scss | 6 ++++++ src/js/changelog.js | 5 ++++- src/js/game/hud/parts/waypoints.js | 19 +++++++++++++------ 5 files changed, 23 insertions(+), 7 deletions(-) create mode 100644 res/ui/icons/waypoint_wires.png create mode 100644 res_raw/sprites/misc/waypoint_wires.png diff --git a/res/ui/icons/waypoint_wires.png b/res/ui/icons/waypoint_wires.png new file mode 100644 index 0000000000000000000000000000000000000000..a6d3fd2833c8d60a235b1d43989a836ba2211745 GIT binary patch literal 1312 zcmV+*1>gFKP)rKiOA4h{QB$;TG=dAG zs8|&jf)quR(o$WBby2L{L~*Br6$OJk3st0GmK8yKC89M&7nP=Hn_5kpKw?uHdR*K| z7^ZXQ_0OI8o&STgxzBUY+w}ADjbt%aJkLA?xpnRQH zmm1~pyrXirib#K&3}qQ$v%|7)N|U%O12hfwESW^46Sz8S{s!_T;W`nyB__=YRhB|KT$wR%9A5#)W73QR z!>anX|LYGEZLuT3-9TFoOW`vybu}W})96wM@cx@mS*-OBum^ZYJ?*Q+(hwNJ{O^NY z1nyGRv7GCj1J>qTroZe|^kT+!Sa;g%$Q#^msjpF)0#>Eeg&mf{MuEB`1FXYLM0qxT z9@v>ympU+L=@|!9buoEIN{*`j0c;kLdw@G~C~^k)SXIxZ%_x}PS(poXtE&FksAkQM z0B3>jK==hFzfm- zwic;KS=2BNP#7ES{pD%`TKQw$TaXK&=KjGhPbM$frCxZfIJPcJFx+LhS*KD zc8CuGs}mc*GeU>gjjCdZF#?;q%adRfB2otifCqs-%)w|6ZVx%ruoAc`VcJiDN0&Bu z6B*$DfQVcRYyoZuo+J8vV~?u70TnWU9}(#V-UsftB$)&HRQ1nFUXW1L)2jLa@S-J2 z8}KSrvb{8rqlmgoVhItNUIM0K}>0Yqd4a7{?mY)cpbxDm5l4ss^zMad4#HJ7C8?bnH= zrY+3XJ%0s`J7|1A@UNx55!LkX1zaAO=2o^Cb^%`kD?*Ye@Cr1~hDI)U3!Z*pA7%r` z#z*R1{#d#u*9B}R{vktOqe@25E+WGj^R5JL1~wA^2I3cBmp@ z!aVblxV3`+aI_t`A;zK)0k6fR$;uRPZ^pcfz+}`{wz0epQ1gl^@?vCy*I13Ps3ly? zY!!FdN?HT_>_iL0xWlroq%we-cLTN!#zr~dsN6`h41p(sw=tWHc`yn*gE_P;oc{p% WOnDQHqQ9&F0000gFKP)rKiOA4h{QB$;TG=dAG zs8|&jf)quR(o$WBby2L{L~*Br6$OJk3st0GmK8yKC89M&7nP=Hn_5kpKw?uHdR*K| z7^ZXQ_0OI8o&STgxzBUY+w}ADjbt%aJkLA?xpnRQH zmm1~pyrXirib#K&3}qQ$v%|7)N|U%O12hfwESW^46Sz8S{s!_T;W`nyB__=YRhB|KT$wR%9A5#)W73QR z!>anX|LYGEZLuT3-9TFoOW`vybu}W})96wM@cx@mS*-OBum^ZYJ?*Q+(hwNJ{O^NY z1nyGRv7GCj1J>qTroZe|^kT+!Sa;g%$Q#^msjpF)0#>Eeg&mf{MuEB`1FXYLM0qxT z9@v>ympU+L=@|!9buoEIN{*`j0c;kLdw@G~C~^k)SXIxZ%_x}PS(poXtE&FksAkQM z0B3>jK==hFzfm- zwic;KS=2BNP#7ES{pD%`TKQw$TaXK&=KjGhPbM$frCxZfIJPcJFx+LhS*KD zc8CuGs}mc*GeU>gjjCdZF#?;q%adRfB2otifCqs-%)w|6ZVx%ruoAc`VcJiDN0&Bu z6B*$DfQVcRYyoZuo+J8vV~?u70TnWU9}(#V-UsftB$)&HRQ1nFUXW1L)2jLa@S-J2 z8}KSrvb{8rqlmgoVhItNUIM0K}>0Yqd4a7{?mY)cpbxDm5l4ss^zMad4#HJ7C8?bnH= zrY+3XJ%0s`J7|1A@UNx55!LkX1zaAO=2o^Cb^%`kD?*Ye@Cr1~hDI)U3!Z*pA7%r` z#z*R1{#d#u*9B}R{vktOqe@25E+WGj^R5JL1~wA^2I3cBmp@ z!aVblxV3`+aI_t`A;zK)0k6fR$;uRPZ^pcfz+}`{wz0epQ1gl^@?vCy*I13Ps3ly? zY!!FdN?HT_>_iL0xWlroq%we-cLTN!#zr~dsN6`h41p(sw=tWHc`yn*gE_P;oc{p% WOnDQHqQ9&F0000} @@ -192,7 +196,10 @@ export class HUDWaypoints extends BaseHUDPart { const waypoint = this.waypoints[i]; const label = this.getWaypointLabel(waypoint); - const element = makeDiv(this.waypointsListElement, null, ["waypoint"]); + const element = makeDiv(this.waypointsListElement, null, [ + "waypoint", + "layer--" + waypoint.layer, + ]); if (ShapeDefinition.isValidShortKey(label)) { const canvas = this.getWaypointCanvas(waypoint); @@ -544,7 +551,7 @@ export class HUDWaypoints extends BaseHUDPart { const iconOpacity = 1 - this.currentCompassOpacity; if (iconOpacity > 0.01) { context.globalAlpha = iconOpacity; - this.waypointSprite.drawCentered(context, dims / 2, dims / 2, dims * 0.7); + this.waypointSprites.regular.drawCentered(context, dims / 2, dims / 2, dims * 0.7); context.globalAlpha = 1; } } @@ -623,11 +630,11 @@ export class HUDWaypoints extends BaseHUDPart { } // Render the small icon on the left - this.waypointSprite.drawCentered( + this.waypointSprites[waypoint.layer].drawCentered( parameters.context, bounds.x + contentPaddingX, bounds.y + bounds.h / 2, - bounds.h * 0.7 + bounds.h * 0.6 ); } From ca1af5a5051428f3228f4aafae5c781adde78e51 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 13:04:58 +0100 Subject: [PATCH 039/127] Allow cycling backwards, closes #790 --- src/js/changelog.js | 1 + src/js/game/hud/parts/base_toolbar.js | 12 ++++++++---- 2 files changed, 9 insertions(+), 4 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index b13ccf31..76498a7c 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -5,6 +5,7 @@ export const CHANGELOG = [ entries: [ "Added the ability to edit constant signals by left clicking them", "You can now add markers in the wire layer (partially by daanbreur)", + "Allow to cycle backwards in the toolbar with SHIFT + Tab (idea by emeraldblock)", ], }, { diff --git a/src/js/game/hud/parts/base_toolbar.js b/src/js/game/hud/parts/base_toolbar.js index a0e2a49f..b3f5abfc 100644 --- a/src/js/game/hud/parts/base_toolbar.js +++ b/src/js/game/hud/parts/base_toolbar.js @@ -1,6 +1,6 @@ import { gMetaBuildingRegistry } from "../../../core/global_registries"; -import { Signal, STOP_PROPAGATION } from "../../../core/signal"; -import { makeDiv } from "../../../core/utils"; +import { STOP_PROPAGATION } from "../../../core/signal"; +import { makeDiv, safeModulo } from "../../../core/utils"; import { KEYMAPPINGS } from "../../key_action_mapper"; import { MetaBuilding } from "../../meta_building"; import { GameRoot } from "../../root"; @@ -161,8 +161,12 @@ export class HUDBaseToolbar extends BaseHUDPart { let newBuildingFound = false; let newIndex = this.lastSelectedIndex; - for (let i = 0; i < this.primaryBuildings.length; ++i, ++newIndex) { - newIndex %= this.primaryBuildings.length; + const direction = this.root.keyMapper.getBinding(KEYMAPPINGS.placement.rotateInverseModifier).pressed + ? -1 + : 1; + + for (let i = 0; i <= this.primaryBuildings.length; ++i) { + newIndex = safeModulo(newIndex + direction, this.primaryBuildings.length); const metaBuilding = gMetaBuildingRegistry.findByClass(this.primaryBuildings[newIndex]); const handle = this.buildingHandles[metaBuilding.id]; if (!handle.selected && handle.unlocked) { From f620706ed76488a1eafb5f1a04d8d036f2319c0d Mon Sep 17 00:00:00 2001 From: LeopoldTal Date: Mon, 7 Dec 2020 13:06:54 +0100 Subject: [PATCH 040/127] Format all upgrade tiers as Roman numerals (#830) * format all upgrade tiers as Roman numerals * show upgrade tiers 50+ as Arabic numerals --- src/js/core/utils.js | 75 +++++++++++++++++++++++++++++--------------- 1 file changed, 49 insertions(+), 26 deletions(-) diff --git a/src/js/core/utils.js b/src/js/core/utils.js index 50657841..6eed9c34 100644 --- a/src/js/core/utils.js +++ b/src/js/core/utils.js @@ -723,29 +723,8 @@ export function startFileChoose(acceptedType = ".bin") { }); } -const romanLiterals = [ - "0", // NULL - "I", - "II", - "III", - "IV", - "V", - "VI", - "VII", - "VIII", - "IX", - "X", - "XI", - "XII", - "XIII", - "XIV", - "XV", - "XVI", - "XVII", - "XVIII", - "XIX", - "XX", -]; +const MAX_ROMAN_NUMBER = 49; +const romanLiteralsCache = ["0"]; /** * @@ -754,8 +733,52 @@ const romanLiterals = [ */ export function getRomanNumber(number) { number = Math.max(0, Math.round(number)); - if (number < romanLiterals.length) { - return romanLiterals[number]; + if (romanLiteralsCache[number]) { + return romanLiteralsCache[number]; } - return String(number); + + if (number > MAX_ROMAN_NUMBER) { + return String(number); + } + + function formatDigit(digit, unit, quintuple, decuple) { + switch (digit) { + case 0: + return ""; + case 1: // I + return unit; + case 2: // II + return unit + unit; + case 3: // III + return unit + unit + unit; + case 4: // IV + return unit + quintuple; + case 9: // IX + return unit + decuple; + default: + // V, VI, VII, VIII + return quintuple + formatDigit(digit - 5, unit, quintuple, decuple); + } + } + + let thousands = Math.floor(number / 1000); + let thousandsPart = ""; + while (thousands > 0) { + thousandsPart += "M"; + thousands -= 1; + } + + const hundreds = Math.floor((number % 1000) / 100); + const hundredsPart = formatDigit(hundreds, "C", "D", "M"); + + const tens = Math.floor((number % 100) / 10); + const tensPart = formatDigit(tens, "X", "L", "C"); + + const units = number % 10; + const unitsPart = formatDigit(units, "I", "V", "X"); + + const formatted = thousandsPart + hundredsPart + tensPart + unitsPart; + + romanLiteralsCache[number] = formatted; + return formatted; } From bcaf24c49f22496e65d0d7661b2f5fd52137db7b Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 13:08:19 +0100 Subject: [PATCH 041/127] Update changelog --- src/js/changelog.js | 1 + 1 file changed, 1 insertion(+) diff --git a/src/js/changelog.js b/src/js/changelog.js index 76498a7c..0354ec27 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -6,6 +6,7 @@ export const CHANGELOG = [ "Added the ability to edit constant signals by left clicking them", "You can now add markers in the wire layer (partially by daanbreur)", "Allow to cycle backwards in the toolbar with SHIFT + Tab (idea by emeraldblock)", + "Upgrade numbers now use roman numerals until tier 50 (by LeopoldTal)", ], }, { From 503e643fd45bd242b0396ee7e87ccd3921a34064 Mon Sep 17 00:00:00 2001 From: artemisSystem <39034386+artemisSystem@users.noreply.github.com> Date: Mon, 7 Dec 2020 13:11:41 +0100 Subject: [PATCH 042/127] add separate unpin button to pinned shapes (#839) Co-authored-by: 3ddy <39034386+3ddyy@users.noreply.github.com> --- src/css/ingame_hud/pinned_shapes.scss | 23 ++++++++++++++++++++++- src/js/game/hud/parts/pinned_shapes.js | 7 +++++-- 2 files changed, 27 insertions(+), 3 deletions(-) diff --git a/src/css/ingame_hud/pinned_shapes.scss b/src/css/ingame_hud/pinned_shapes.scss index 671f5aa5..6f44522b 100644 --- a/src/css/ingame_hud/pinned_shapes.scss +++ b/src/css/ingame_hud/pinned_shapes.scss @@ -19,7 +19,6 @@ color: #333438; &.removable { - cursor: pointer; pointer-events: all; } @@ -86,6 +85,28 @@ } } + > .unpinButton { + @include S(width, 8px); + @include S(height, 8px); + position: absolute; + opacity: 0.7; + @include S(top, 3px); + @include S(left, -7px); + @include DarkThemeInvert; + @include IncreasedClickArea(2px); + transition: opacity 0.12s ease-in-out; + z-index: 100; + + &:hover { + opacity: 0.8; + } + + & { + /* @load-async */ + background: uiResource("icons/pin.png") center center / 95% no-repeat; + } + } + &.goal, &.blueprint { .amountLabel::after { diff --git a/src/js/game/hud/parts/pinned_shapes.js b/src/js/game/hud/parts/pinned_shapes.js index 542a38b2..bf1f7525 100644 --- a/src/js/game/hud/parts/pinned_shapes.js +++ b/src/js/game/hud/parts/pinned_shapes.js @@ -217,11 +217,14 @@ export class HUDPinnedShapes extends BaseHUDPart { let detector = null; if (canUnpin) { + const unpinButton = document.createElement("button"); + unpinButton.classList.add("unpinButton"); + element.appendChild(unpinButton); element.classList.add("removable"); - detector = new ClickDetector(element, { + detector = new ClickDetector(unpinButton, { consumeEvents: true, preventDefault: true, - targetOnly: false, + targetOnly: true, }); detector.click.add(() => this.unpinShape(key)); } else { From 2bbecb37fc2668410c00399b8fba67e84f995ed6 Mon Sep 17 00:00:00 2001 From: Chris Kruining Date: Mon, 7 Dec 2020 18:28:18 +0100 Subject: [PATCH 043/127] Update base-nl.yaml (#887) * Update base-nl.yaml global.suffix.thousands :: should be uppercase as is stands for Kilo, which is shortened to K global.infinite :: `oneindig` is the translation for infinite, not sure if keeping it as `inf` was on purpose. global.time.* :: consistency mainMenu.changelog :: - mainMenu.continue :: technically a more correct translation dialogs.buttons.restart :: consistency dialogs.gameLoadFailure.title :: seems better to me I will try to translate some more in the future, but my patience has run out at this moment :P * Update base-nl.yaml * Update base-nl.yaml --- translations/base-nl.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index 09192564..c8933389 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -53,7 +53,7 @@ global: thousandsDivider: . decimalSeparator: "," suffix: - thousands: k + thousands: K millions: M billions: B trillions: T @@ -61,11 +61,11 @@ global: time: oneSecondAgo: een seconde geleden xSecondsAgo: seconden geleden - oneMinuteAgo: een minuut geleden + oneMinuteAgo: één minuut geleden xMinutesAgo: minuten geleden - oneHourAgo: een uur geleden + oneHourAgo: één uur geleden xHoursAgo: uren geleden - oneDayAgo: een dag geleden + oneDayAgo: één dag geleden xDaysAgo: dagen geleden secondsShort: s minutesAndSecondsShort: m s @@ -83,7 +83,7 @@ demoBanners: intro: Koop de standalone om alle functies te ontgrendelen! mainMenu: play: Spelen - changelog: Changelog + changelog: Wijzigingenlijst importSavegame: Importeren openSourceHint: Dit spel is open source! discordLink: Officiële Discord-server (Engelstalig) @@ -103,7 +103,7 @@ dialogs: delete: Verwijder cancel: Annuleer later: Later - restart: Herstarten + restart: Herstart reset: Reset getStandalone: Koop de Standalone deleteGame: Ik weet wat ik doe @@ -117,7 +117,7 @@ dialogs: title: Savegame geïmporteerd text: Je savegame is succesvol geïmporteerd. gameLoadFailure: - title: Het spel is kapot + title: Corrupte savegame text: "Het laden van je savegame is mislukt:" confirmSavegameDelete: title: Bevestig het verwijderen From 3ada0d577449ab3ae68c49573d4260a09f3195df Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 18:30:33 +0100 Subject: [PATCH 044/127] Allow to cycle variants backwards with SHIFT + T, other fixes and misc stuff --- res/ui/icons/unpin_shape.png | Bin 0 -> 731 bytes shapez.code-workspace | 7 ++++++- src/css/ingame_hud/pinned_shapes.scss | 2 +- src/js/changelog.js | 3 +++ src/js/game/hud/parts/building_placer_logic.js | 8 +++++++- 5 files changed, 17 insertions(+), 3 deletions(-) create mode 100644 res/ui/icons/unpin_shape.png diff --git a/res/ui/icons/unpin_shape.png b/res/ui/icons/unpin_shape.png new file mode 100644 index 0000000000000000000000000000000000000000..b1918778bdd805b6267af7e43070f7dd3bbd1cb2 GIT binary patch literal 731 zcmV<10wn#3P)2Ue zs-%D}DU&YmfGC3yN)>)%JH_x7fPZFoXJ+r+BW>kb>~n03-Md~0yZ}A|XTWdZ7BA7jqVP zj<866LikE>vtW_O2r=>#;0oYp#6nLIV&x~m4}eWz6uE=-2r2R-U_(3Z0prLW?|@+q zn?#1h%Z~}pkJuqT!av}BNt;Ac-uW@`Vb&k=7$KXy@Dw4tyzmgAn7ptYp}4$Ajj-MH zi4v$LFDylS?Md)IHX(mFK z)7#D?SQuS*7QuqNs2;(Ryr>qzqP!>`!Lqz47QutO$R5FyyvP>8qr7Mx!Lz(*9N{g~ z@2i_7zgxqmA-lv!xCPz-e2?70y1Yn<@D0MPV||equ@U}4xNg@cc@Y!g65#Wk1zzRF zq6kL-YfQg=*1Noz72yI{)uLCxSK#_#@h{+A Date: Mon, 7 Dec 2020 18:32:35 +0100 Subject: [PATCH 045/127] Fixed french translation (#950) * very small fix * removed colons for steam text (line 14 and 24) * proofread by krop * final fix. If anyone else wants to proofread? * Update base-fr.yaml --- translations/base-fr.yaml | 134 +++++++++++++++++++------------------- 1 file changed, 67 insertions(+), 67 deletions(-) diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index 6af2f86e..a84820c3 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -15,7 +15,7 @@ steamPage: En achetant le jeu sur Steam, vous aurez accès à la version complète, mais vous pouvez aussi jouer à une démo sur shapez.io et vous décider ensuite ! title_advantages: Avantages de la version complète advantages: - - 12 nouveaux niveaux avec 26 niveaux en tout + - 12 nouveaux niveaux avec 26 niveaux en tout ! - 18 nouveaux bâtiments pour automatiser entièrement votre usine ! - 20 niveaux d’amélioration pour s’amuser pendant des heures ! - Les câbles ouvrent une toute nouvelle dimension ! @@ -25,7 +25,7 @@ steamPage: - Me soutenir ! ❤️ title_future: Prévu planned: - - Bibliothèque de patrons + - Bibliothèque de plans - Succès sur Steam - Mode réflexion - Mini-carte @@ -153,10 +153,10 @@ dialogs: desc: "Voici les changements depuis votre dernière session de jeu :" upgradesIntroduction: title: Débloquer les améliorations - desc: Toutes les formes que vous produisez peuvent être utilisées pour débloquer - des améliorations — Ne détruisez pas vos anciennes - usines ! L’onglet des améliorations se trouve dans le coin - supérieur droit de l’écran. + desc: Ne détruisez pas vos anciennes usines ! Toutes les + formes que vous produisez peuvent être utilisées pour débloquer des + améliorations. L’onglet des améliorations se trouve dans le coin supérieur + droit de l’écran. massDeleteConfirm: title: Confirmer la suppression desc: Vous allez supprimer beaucoup de bâtiments ( pour être précis) ! @@ -171,7 +171,7 @@ dialogs: la couper ? blueprintsNotUnlocked: title: Pas encore débloqué - desc: Terminez le niveau 12 pour avoir accès aux patrons ! + desc: Terminez le niveau 12 pour avoir accès aux plans ! keybindingsIntroduction: title: Raccourcis utiles desc: 'Le jeu a de nombreux raccourcis facilitant la construction de grandes @@ -223,7 +223,7 @@ ingame: placeBuilding: Placer un bâtiment createMarker: Créer une balise delete: Supprimer - pasteLastBlueprint: Copier le dernier patron + pasteLastBlueprint: Copier le dernier plan lockBeltDirection: Utiliser le planificateur de convoyeurs plannerSwitchSide: Inverser la direction du planificateur cutSelection: Couper @@ -248,8 +248,8 @@ ingame: speed: Vitesse range: Portée storage: Espace de stockage - oneItemPerSecond: 1 forme ⁄ s - itemsPerSecond:  formes ⁄ s + oneItemPerSecond: 1 objet ⁄ s + itemsPerSecond:  objets ⁄ s itemsPerSecondDouble: (×2) tiles: cases levelCompleteNotification: @@ -259,8 +259,8 @@ ingame: buttonNextLevel: Niveau suivant notifications: newUpgrade: Une nouvelle amélioration est disponible ! - gameSaved: Votre partie a été sauvegardée. - freeplayLevelComplete: Niveau  complet ! + gameSaved: Votre partie a bien été sauvegardée. + freeplayLevelComplete: Niveau  terminé ! shop: title: Améliorations buttonUnlock: Améliorer @@ -270,14 +270,14 @@ ingame: title: Statistiques dataSources: stored: - title: Stocké + title: Stock description: Affiche le nombre de formes stockées dans votre bâtiment central. produced: - title: Produit + title: Production description: Affiche toutes les formes que votre usine produit, y compris les formes intermédiaires. delivered: - title: Livré + title: Arrivage description: Affiche les formes qui ont été livrées dans votre bâtiment central. noShapesProduced: Aucune forme produite pour le moment. shapesDisplayUnits: @@ -333,16 +333,16 @@ ingame: quatre extracteurs
et connectez-les au centre.

PS : Gardez MAJ enfoncé en plaçant un convoyeur pour activer le planificateur." - 21_1_place_quad_painter: Placez un quadruple peintre et + 21_1_place_quad_painter: Placez une station de peinture quadruple et connectez des cercles et des couleurs blanche et rouge ! 21_2_switch_to_wires: Basculez sur le calque de câblage en appuyant sur E.

Puis connectez les quatre - entrées du peintre avec des câbles ! + entrées de la station de peinture quadruple avec des câbles ! 21_3_place_button: Génial ! Maintenant, placez un interrupteur et connectez-le avec des câbles ! 21_4_press_button: "Appuyez sur le bouton pour qu’il émette un - signal vrai et active le peintre.

PS : Vous + signal vrai et active la station de peinture quadruple.

PS : Vous n’êtes pas obligé de connecter toutes les entrées ! Essayez d’en brancher seulement deux." connectedMiners: @@ -398,7 +398,7 @@ buildings: hub: deliver: Livrez toUnlock: pour débloquer - levelShortcut: NV + levelShortcut: Niv endOfDemo: Fin de la démo belt: default: @@ -419,9 +419,9 @@ buildings: description: Permet de faire passer des ressources sous les bâtiments et les convoyeurs. tier2: - name: Tunnel niveau II + name: Tunnel Niv II description: Permet de faire passer des ressources sous les bâtiments et les - convoyeurs. + convoyeurs deux fois plus loin qu'un tunnel simple. balancer: default: name: Répartiteur @@ -462,9 +462,9 @@ buildings: description: Tourne une forme de 180 degrés. stacker: default: - name: Combineur - description: Combine deux formes. Si elles ne peuvent pas être combinées, la - forme de droite est placée sur la forme de gauche. + name: Assembleur + description: Assemble les formes à l'entrée, de préférence sur la même couche. + Sinon, la forme de droite sera placée sur la forme de gauche mixer: default: name: Mélangeur de couleur @@ -472,20 +472,20 @@ buildings: couleurs. painter: default: - name: Peintre - description: Colorie entièrement la forme venant de gauche avec la couleur + name: Station de peinture + description: Peint entièrement la forme venant de gauche avec la couleur entrant en haut. mirrored: - name: Peintre - description: Colorie entièrement la forme venant de gauche avec la couleur + name: Station de peinture + description: Peint entièrement la forme venant de gauche avec la couleur entrant en bas. double: - name: Peintre (double) - description: Colorie les deux formes venant de gauche avec la couleur entrant en - haut. + name: Station de peinture (double) + description: Peint entièrement les deux formes venant de gauche avec la + couleur entrant en haut. quad: - name: Peintre (quadruple) - description: Colorie chaque quadrant d’une forme avec une couleur différente. + name: Station de peinture (quadruple) + description: Peint chaque quadrant d’une forme avec une couleur différente. Seules les entrées recevant un signal vrai sur le calque de câblage seront peintes ! trash: @@ -515,7 +515,7 @@ buildings: description: Permet de croiser deux câbles sans les connecter entre eux. constant_signal: default: - name: Constante + name: Générateur constant description: Émet un signal constant, qui peut être une forme, une couleur ou un booléen (1 / 0). lever: @@ -530,7 +530,7 @@ buildings: description: Émet un “1” booléen si les deux entrées sont vraies (une forme, couleur ou “1”). not: - name: Porte INVERSEUR + name: Porte NON description: Émet un “1” booléen si l’entrée n’est pas vraie (une forme, couleur ou “1”). xor: @@ -574,8 +574,8 @@ buildings: comparator: default: name: Comparateur - description: Émet un “1” booléen si les deux entrées sont exactement les mêmes. - Peut comparer des formes, des couleurs, et des booléens. + description: Émet “1” si les deux entrées sont exactement les mêmes, sinon + émet “0”. Peut comparer des formes, des couleurs, et des booléens. virtual_processor: default: name: Découpeur virtuel @@ -588,10 +588,10 @@ buildings: description: Renvoie la couche supérieure à droite, et les couches restantes à gauche. stacker: - name: Combineur virtuel - description: Combine virtuellement la forme de droite sur celle de gauche. + name: Assembleur virtuel + description: Assemble virtuellement la forme de droite sur celle de gauche. painter: - name: Peintre virtuel + name: Station de peinture virtuelle description: Peint virtuellement la forme du bas avec la couleur de droite. item_producer: default: @@ -611,23 +611,23 @@ storyRewards: desc: Le pivoteur a été débloqué ! Il pivote les formes de 90 degrés vers la droite. reward_painter: - title: Peintre - desc: "Le peintre a été débloqué. Extrayez des pigments de - couleur (comme vous le faites avec les formes) et combinez-les avec - une forme dans un peintre pour les colorier !

PS : Si vous - êtes daltonien, il y a un mode daltonien - paramétrable dans les préférences !" + title: Peinture + desc: "La station de peinture a été débloquée. Extrayez + des pigments de couleur (comme vous le faites avec les formes) et + combinez-les avec une forme dans une station pour les peindre ! +

PS : Si vous êtes daltonien, il y a un mode + daltonien paramétrable dans les préférences !" reward_mixer: title: Mélangeur de couleurs desc: Le mélangeur a été débloqué. Combinez deux couleurs en utilisant la synthèse additive des couleurs avec ce bâtiment ! reward_stacker: - title: Combineur - desc: Vous pouvez maintenant combiner deux formes avec le - combineur ! Les deux entrées sont combinées et si + title: Assembleur + desc: Vous pouvez maintenant assemblées deux formes avec le + combineur ! Les deux entrées sont assemblées,si elles peuvent être mises l’une à côté de l’autre, elles sont - fusionnées. Sinon, la forme de droite est + fusionnées, sinon, la forme de droite est placée au-dessus de la forme de gauche. reward_balancer: title: Répartiteur @@ -676,35 +676,35 @@ storyRewards: permet de découper les formes en quatre parties plutôt que seulement deux ! reward_painter_double: - title: Double peintre - desc: Vous avez débloqué une variante du peintre — Elle - fonctionne comme le peintre de base, mais elle permet de traiter - deux formes à la fois en ne consommant qu’une + title: Station de peinture double + desc: Vous avez débloqué une variante de la station de peinture + — Elle fonctionne comme la station de peinture de base, mais elle permet de + traiter deux formes à la fois en ne consommant qu’une couleur au lieu de deux ! reward_storage: - title: Tampon de stockage + title: Stockage desc: Vous avez débloqué le bâtiment de stockage. Il permet de stocker des objets jusqu’à une certaine limite !

Il priorise la sortie gauche, vous pouvez donc aussi l’utiliser comme drain de débordement ! reward_blueprints: - title: Patrons + title: Plans desc: Vous pouvez maintenant copier et coller des parties de votre usine ! Sélectionnez une zone (Appuyez sur CTRL, et sélectionnez avec votre souris), et appuyez sur “C” pour la copier.

Coller n’est pas gratuit, vous - devez produire des formes de patrons pour vous le + devez produire des formes de plans pour vous le payer (les mêmes que celles que vous venez de livrer). reward_rotater_180: title: Retourneur desc: Vous avez débloqué le retourneur ! Il permet de faire pivoter une forme de 180 degrés (Surprise ! :D) reward_wires_painter_and_levers: - title: Câbles & quadruple peintre + title: Câbles & station de peinture quadruple desc: "Vous avez débloqué le calque de câblage : C’est un calque au-dessus du calque normal, qui introduit beaucoup de nouvelles mécaniques de jeu !

Pour commencer, je vous - débloque le quadruple peintre. Connectez les + débloque la station de peinture quadruple. Connectez les entrées à peindre sur le calque de câblage.

Pour voir le calque de câblage, appuyez sur E.

PS : Activez les indices dans les paramètres pour voir un tutoriel @@ -724,7 +724,7 @@ storyRewards: le stockage émettent le dernier objet vu ? Essayez de le montrer sur un écran !" reward_constant_signal: - title: Constante + title: Générateur constant desc: Vous avez débloqué l’émetteur de constante sur le calque de câblage ! Vous pouvez par exemple la connecter à des filtres à objets.

La constante peut émettre @@ -735,7 +735,7 @@ storyRewards: desc: "Vous avez débloqué les portes logiques ! Vous n’êtes pas obligé de trouver ça génial, mais en fait c’est super cool !

Avec ces portes, vous pouvez maintenant faire les opérations - booléennes ET, OU, OU-EXCLUSIF et INVERSEUR !

Et la cerise + booléennes ET, OU, OU-EXCLUSIF et NON !

Et la cerise sur le gâteau : je vous donne aussi le transistor !" reward_virtual_processing: @@ -986,9 +986,9 @@ keybindings: miner: Extracteur cutter: Découpeur rotater: Pivoteur - stacker: Combineur + stacker: Assembleur mixer: Mélangeur de couleur - painter: Peintre + painter: Station de peinture trash: Poubelle storage: Stockage wire: Câble @@ -1009,7 +1009,7 @@ keybindings: rotateInverseModifier: "Variante : Pivote à gauche" cycleBuildingVariants: Alterner entre les variantes confirmMassDelete: Confirmer la suppression de la sélection - pasteLastBlueprint: Copier le dernier patron + pasteLastBlueprint: Copier le dernier plan cycleBuildings: Alterner entre les bâtiments lockBeltDirection: Utiliser le planificateur de convoyeurs switchDirectionLockSide: "Planificateur : changer de côté" @@ -1063,7 +1063,7 @@ tips: - La symétrie est la clé ! - Vous pouvez entrelacer différents niveaux de tunnels. - Essayez de construire des usines compactes, cela paiera ! - - Le peintre a une variante en miroir que vous pouvez sélectionner avec + - La station de peinture a une variante en miroir que vous pouvez sélectionner avec T - Avoir les bons ratios de construction maximisera l’efficacité. - Au niveau maximum, 5 extracteurs rempliront un seul convoyeur. @@ -1076,7 +1076,7 @@ tips: orientation. - Pour obtenir du blanc, mélangez les trois couleurs. - Le stockage priorise la première sortie. - - Investissez du temps pour créer des patrons reproductibles, ça vaut le + - Investissez du temps pour créer des plans reproductibles, ça vaut le coup ! - Maintenir CTRL permet de placer plusieurs bâtiments. - Vous pouvez maintenir ALT pour inverser la direction des convoyeurs @@ -1101,7 +1101,7 @@ tips: - Colorez vos formes avant de les découper pour une efficacité maximale. - Avec les modules, l’espace n’est qu’une perception ; une préoccupation pour les hommes mortels. - - Créez une usine de patrons à part. Ils sont importants pour les modules. + - Créez une usine de plans à part. Ils sont importants pour les modules. - Regardez de plus près le mélangeur de couleur et vous aurez la réponse à vos questions. - Utilisez CTRL + clic pour sélectionner une zone. From 6ad8fa5fd409ef0d2c8e099f15d26e2f80706562 Mon Sep 17 00:00:00 2001 From: Emil Date: Mon, 7 Dec 2020 18:33:22 +0100 Subject: [PATCH 046/127] Update base-sv.yaml (#958) More translations and grammar fixes --- translations/base-sv.yaml | 135 +++++++++++++++++++------------------- 1 file changed, 66 insertions(+), 69 deletions(-) diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index 8083c8d1..2b7c651d 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -1,19 +1,18 @@ steamPage: shortText: shapez.io är ett spel som går ut på att automatisera skapandet av former med ökande komplexitet inom den oändligt stora världen. - discordLinkShort: Officiel Discord + discordLinkShort: Officiell Discord intro: >- - Shapez.io is a relaxed game in which you have to build factories for the - automated production of geometric shapes. + Shapez.io är att avslappnat spel där man ska bygga fabriker för att automatisera produktionen av geometriska former. - As the level increases, the shapes become more and more complex, and you have to spread out on the infinite map. + Formerna blir svårare och mer komplexa vartefter nivån ökar och du blir tvungen att sprida ut dig över den oändliga kartan. - And as if that wasn't enough, you also have to produce exponentially more to satisfy the demands - the only thing that helps is scaling! + Och som om det inte vore nog så som behöver du samtidigt producera exponentiellt mer för att mätta efterfrågan - den enda lösningar är att skala upp produktionen! - While you only process shapes at the beginning, you have to color them later - for this you have to extract and mix colors! + I början skapar man bara former, men senare behöver du även färga dem - för att uppnå detta behöver du samla och blanda färger! - Buying the game on Steam gives you access to the full version, but you can also play a demo on shapez.io first and decide later! - title_advantages: Standalone Advantages + På Steam kan du köpa den fulla versionen av spelet, men du kan även spela demot på shapez.io först och bestämma dig senare! + title_advantages: Fördelar med fullversionen advantages: - 12 Nya nivåer av totalt 26 nivåer! - 18 Nya byggnader för en fullt automatiserad fabrik! @@ -35,7 +34,7 @@ steamPage: title_open_source: Detta spel har öppen källkod! title_links: Länkar links: - discord: Official Discord + discord: Officiell Discord roadmap: Roadmap subreddit: Subreddit source_code: Källkod (GitHub) @@ -48,8 +47,8 @@ steamPage: Se till och kolla mitt trello board för hela roadmappen! global: loading: Laddar - error: Error - thousandsDivider: . + error: Fel + thousandsDivider: " " decimalSeparator: "," suffix: thousands: k @@ -71,14 +70,14 @@ global: hoursAndMinutesShort: t m xMinutes: minuter keys: - tab: TAB + tab: TABB control: CTRL alt: ALT escape: ESC shift: SKIFT space: MELLANSLAG demoBanners: - title: Demo Version + title: Demo-version intro: Skaffa den fristående versionen för att låsa upp alla funktioner! mainMenu: play: Spela @@ -87,8 +86,8 @@ mainMenu: openSourceHint: Detta spelet har öppen kod! discordLink: Officiell Discord Server helpTranslate: Hjälp till att översätta! - browserWarning: Förlåt, men det är känt att spelet spelar långsamt på din - browser! Skaffa den fristående versionen eller ladda ner Chrome för en + browserWarning: Förlåt, men det är känt att spelet spelar långsamt i din + webbläsare! Skaffa den fristående versionen eller ladda ned Chrome för en bättre upplevelse. savegameLevel: Nivå savegameLevelUnknown: Okänd Nivå @@ -96,7 +95,7 @@ mainMenu: newGame: Nytt spel madeBy: Skapad av subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Namnlöst dialogs: buttons: ok: OK @@ -176,8 +175,8 @@ dialogs: rullband.
" createMarker: title: Ny Markör - desc: Ge det ett meningsfullt namn, du kan också inkludera en kort - nyckel av en form (Som du kan generera här) + desc: Ge det ett meningsfullt namn, du kan också inkludera ett + kortkommando av en form (som du kan generera här) titleEdit: Ändra Markör markerDemoLimit: desc: Du kan endast ha två markörer i demoversionen. Skaffa den fristående @@ -198,7 +197,7 @@ dialogs: editSignal: title: Sätt singal descItems: "Välj en förvald sak:" - descShortKey: ... eller skriv in kort nyckel av en form + descShortKey: ... eller skriv in kortkommando av en form (Som du kan generera här) renameSavegame: title: Byt namn på sparfil @@ -364,7 +363,7 @@ ingame: title: ∞ med sparfiler desc: Så många som du bara vill! upgrades: - title: ∞ Upgrade Tiers + title: 1000 uppgraderingsnivåer desc: This demo version has only 5! markers: title: ∞ med markeringar! @@ -480,87 +479,86 @@ buildings: name: Balancer description: Multifunktionell - Distribuerar alla inflöden till alla utflöden. merger: - name: Merger (Kompakt) - description: Sammansätter två rullband till ett. + name: Merger (kompakt) + description: Sammanfogar två rullband till ett. merger-inverse: - name: Merger (Kompakt) - description: Sammansätter två rullband till ett. + name: Merger (kompakt) + description: Sammanfogar två rullband till ett. splitter: - name: Splitter (Kompakt) - description: Delar ett rullband till två. + name: Splitter (kompakt) + description: Delar upp ett rullband till två. splitter-inverse: - name: Splitter (Kompakt) - description: Delar ett rullband till två. + name: Splitter (kompakt) + description: Delar upp ett rullband till två. storage: default: name: Lagring - description: Lagra överflödiga saker, till en viss mängd. Prioriterar den vänstra - utflödet och kan användas som en överströmningsgrind. + description: Lagra överflödiga saker, till en viss mängd. Prioriterar det vänstra + utflödet och kan användas som en översvämningsgrind. wire_tunnel: default: name: Korsande sladdar description: Tillåter två sladdar att korsa varandra utan att koppla samman. constant_signal: default: - name: Konstant Signal - description: Avger en konstant signal, som kan vara en form, färg eller boolean (1 / 0). + name: Konstant signal + description: Avger en konstant signal, som kan vara en form, färg eller boolesk (1 / 0). lever: default: - name: Signalknapp - description: Kan ställas om till att ge en booleansk singal (1 / 0) på sladdlagret, - vilket kan användas för att kontrollera till exempel ett sakfilter. + name: Brytare + description: Kan ställas att ge en boolesk signal (1 / 0) på kabellagret, + vilket till exempel kan användas för att kontrollera ett sakfilter. logic_gate: default: - name: AND Grind - description: Avger en booleansk "1" om båda inflöden är positiva. (positiva menas med former, - färger eller booleansk "1") + name: AND-grind + description: Avger en boolesk "1" om båda inflödena är positiva. (positiva menas med former, + färger eller boolesk "1") not: - name: NOT Grind - description: Avger en booleansk "1" om inflödet inte är positiv. (positiva menas med former, - färger eller booleansk "1") + name: NOT-grind + description: Avger en boolesk "1" om inflödet inte är positivt. (positivt menas med former, + färger eller boolesk "1") xor: - name: XOR Grind - description: - Avger en booleansk "1" om ett av inflöderna är positiv, dock inte om båda är positiva. - (Positiva menas med former, färger eller booleansk "1") + name: XOR-grind + description: Avger en boolesk "1" om bara ett av inflödena är positivt. + (med positivt menas former, färger eller boolesk "1") or: - name: OR Grind - description: Avger en booleansk "1" om ett av inflöderna är positiv. (positiva menas med former, - färger eller booleansk "1") + name: OR-grind + description: Avger en boolesk "1" om minst ett av inflödena är positivt. + (med positivt menas former, färger eller boolesk "1") transistor: default: name: Transistor - description: För fram det undre inflödet om sido inflödet är positivt (en form, - färg eller "1"). + description: Sänder vidare det undre inflödet om sido inflödet är positivt. + (med positivt menas former, färger eller boolesk "1") mirrored: name: Transistor - description: För fram det undre inflödet om sido inflödet är positivt (en form, - färg eller "1"). + description: Sänder vidare det undre inflödet om sido inflödet är positivt. + (med positivt menas former, färger eller boolesk "1") filter: default: name: Filter - description: Koppla en signal för att dirigera alla matchande objekt till toppen och - dem kvarvarande till höger. Kan kontrolleras med booleanska singaler också. + description: Anslut en signal för att dirigera alla matchande objekt till toppen och + resterande åt höger. Kan även styras med booleska signaler. display: default: name: Display - description: Koppla en singal för att visa den på displayen - Det kan vara en form, - färg eller boolean. + description: Anslut en singal för att visa den på displayen - Det kan vara en form, + färg eller boolesk. reader: default: name: Rullbandsläsare - description: Mäter den genomsnittliga rullbands genomströmningen. Läser ut det sist + description: Mäter den genomsnittliga rullbands genomströmningen. Sänder ut den sista lästa saken på sladdlagret (när det är upplåst). analyzer: default: name: Formanalysator description: Analyserar den övre högra kvadranten av formens lägsta lager - och returnerar sin form och färg. + och returnerar dess form och färg. comparator: default: name: Jämför - description: Returnerar booleansk "1" om båda signalerna är exakt lika. Kan jämföra - former, saker och boolean. + description: Returnerar boolesk "1" om båda signalerna är exakt lika. Kan jämföra + former, saker och booleska. virtual_processor: default: name: Virtuell skärare @@ -570,20 +568,19 @@ buildings: description: Roterar virtuellt formen, både medurs och moturs. unstacker: name: Virtuell stapelupplösare - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + description: Lösgör virtuellt det översta lagret och sänder ut åt höger medan resten + sänds åt till vänster. stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: Virtuell staplare + description: Staplar virtuellt den högra formen ovanpå den vänstra. painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: Virtuell målare + description: Målar virtuellt formen underifrån med formen från höger. item_producer: default: name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + description: Endast tillgänglig i sandlådeläge, avger en given signal från kabellagret + till det vanliga lagret. storyRewards: reward_cutter_and_trash: title: Att klippa former From 5cc70c7f51a3405aec015aa8e78a2ce604239d20 Mon Sep 17 00:00:00 2001 From: BananoGamer <72351355+BananoGamer@users.noreply.github.com> Date: Mon, 7 Dec 2020 18:33:46 +0100 Subject: [PATCH 047/127] Update base-it.yaml (#962) some minor fixes, it's ready to be implemented --- translations/base-it.yaml | 29 +++++++++++++++-------------- 1 file changed, 15 insertions(+), 14 deletions(-) diff --git a/translations/base-it.yaml b/translations/base-it.yaml index 572bbc77..e57a4ccd 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -317,7 +317,7 @@ ingame: questo lento processo!

PS: Usa i numeri da 0 a 9 per selezionare gli edifici più in fretta!" 3_1_rectangles: "Ora estraiamo qualche rettangolo! Costruisci 4 - estrattori and connect them to the HUB.

PS: + estrattori e connettili alla HUB.

PS: Tieni premuto SHIFT mentre trascini un nastro per attivare il pianificatore di nastri!" 21_1_place_quad_painter: Posiziona il verniciatore quadruplo e prendi dei @@ -479,7 +479,7 @@ buildings: second: name: Cavo description: Trasmette segnali, che possono essere oggetti, colori o booleani (1 - / 0). Cavi di colore diverso non si connettono. + / 0). I cavi di colore diverso non si connettono. balancer: default: name: Bilanciatore @@ -609,7 +609,7 @@ storyRewards: gradi in senso orario. reward_painter: title: Verniciatura - desc: "Il verniciatore è stato sbloccato! Estrai dalle vene + desc: "Il verniciatore è stato sbloccato! Estrai dai giacimenti colorate (esattamente come fai con le forme) e combina il colore con una forma nella veniciatrice per colorarla!

PS: Se sei daltonico, c'è la modalità daltonici nelle @@ -684,7 +684,7 @@ storyRewards: per sbloccare i miglioramenti!" no_reward_freeplay: title: Prossimo livello - desc: Congratulazioni! Ci sono altri contenuti in prgramma per la versione + desc: Congratulazioni! Ci sono altri contenuti in programma per la versione completa! reward_stacker: title: Impilatrice @@ -694,9 +694,9 @@ storyRewards: destro è impilato sopra il sinistro! reward_balancer: title: Bilanciatore - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: Il bilanciatore multifunzione è stato sbloccato - Può essere + usato per costruire fabbriche più grandi unendo e dividendo gli + oggetti su diversi nastri! reward_merger: title: Aggregatore compatto desc: Hai sbloccato un aggregatore, variante del @@ -903,7 +903,7 @@ settings: edifici. lowQualityTextures: title: Texture in bassa qualità (Brutto) - description: Usa texture a bassa qualità per migliorare le prestazioni. Quesro + description: Usa texture a bassa qualità per migliorare le prestazioni. Questo renderà il gioco molto brutto! displayChunkBorders: title: Mostra confini dei Chunk @@ -912,7 +912,7 @@ settings: pickMinerOnPatch: title: Scegli estrattore sui giacimenti di risorse description: Attivato di default, seleziona l'estrattore se usi il contagocce - quando il cursore è su un giacimento risorse. + quando il cursore è su una vena di risorse. simplifiedBelts: title: Nastri semplificati (Brutto) description: Non renderizza gli oggetti sui nastri a meno che il cursore non sia @@ -1018,7 +1018,8 @@ about: Realizzare questo gioco non sarebbe stato possibile senza la grande community di Discord per i miei giochi - Unisciti al server di Discord!

- La colonna sonora è stata composta daPeppsen - È un grande.

+ La colonna sonora è stata composta da + Peppsen - È un grande.

Per finire, grazie di cuore al mio migliore amico Niklas - Senza le nostre sessioni su factorio questo gioco non sarebbe mai esistito. @@ -1029,7 +1030,7 @@ demo: restoringGames: Recupero salvataggi importingGames: Importazione salvataggi oneGameLimit: Limite di un salvataggio - customizeKeybindings: Scorciatoie personalizabili + customizeKeybindings: Scorciatoie personalizzabili exportingBase: Esportazione dell'intera base come immagine settingNotAvailable: Non disponibile nella demo. tips: @@ -1057,7 +1058,7 @@ tips: - Tenere premuto SHIFT attiva il pianificatore nastri, facilitando il posizionamento dei nastri più lunghi - I taglierini tagliano sempre in verticale, indipendentemente - dall'orientamento. + dal loro orientamento. - Mischia tutti i tre colori per fare il bianco. - Il magazzino prioritizza la prima uscita. - Impiega tempo per costruire design replicabili, ne vale la pena! @@ -1076,7 +1077,7 @@ tips: - Cerca di risolvere il livello 20 da solo prima di chiedere aiuto! - Non complicare le cose, cerca di mantenere la semplicità e farai strada. - Dovrai riusare le tue fabbriche più avanti nel gioco. Pianifica le tue - fabbriche in modo che siano reutilizzabili. + fabbriche in modo che siano riutilizzabili. - A volte, puoi trovare la forma che ti serve nella mappa senza crearla con le impilatrici. - Non troverai mai giacimenti di girandole complete. @@ -1099,7 +1100,7 @@ tips: - Puoi scaricare i salvataggi dal menù principale! - Questo gioco ha molti tasti di scelta rapida! Dai un'occhiata alla pagina delle impostazioni - - Questo gioco ha molte impostazioni, dai un'occhiata! + - Questo gioco ha molte impostazioni, dagli un'occhiata! - L'etichetta dell'hub ha una piccola bussola per indicarne la direzione! - Per svuotare i nastri, taglia e re-incolla l'area nello stesso punto. - Premi F4 per mostrare FPS e Tick al secondo. From 119d7c60ca5bb4ece5c2bbcc27956bcfaef8b022 Mon Sep 17 00:00:00 2001 From: Cervon Wong Date: Tue, 8 Dec 2020 01:33:58 +0800 Subject: [PATCH 048/127] Update base-zh-CN.yaml (#968) Fix hoursAndMinutesShort --- translations/base-zh-CN.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 9be641ea..0c0adc7f 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -59,7 +59,7 @@ global: xDaysAgo: 天前 secondsShort: 秒 minutesAndSecondsShort: 秒 - hoursAndMinutesShort: 秒 + hoursAndMinutesShort: 分 xMinutes: 分钟 keys: tab: TAB From dd1d1ffe786fcee5521e6006f90159762cdaf1e5 Mon Sep 17 00:00:00 2001 From: Cervon Wong Date: Tue, 8 Dec 2020 01:34:20 +0800 Subject: [PATCH 049/127] Update base-zh-CN.yaml (#969) --- translations/base-zh-CN.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 0c0adc7f..6cd179a8 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -2,11 +2,11 @@ steamPage: shortText: shapez.io 是一款在无边际的地图上建造工厂、自动化生产与组合愈加复杂的图形的游戏。 discordLinkShort: 官方 Discord 服务器 intro: |- - Shapez.io 是一个休闲游戏,在其中,您将建造工厂以生产各种各样的几何图形。 - 随着等级提升,您需要生产的图形将会越来越复杂,您需要在无尽的地图中不断的扩建您的工厂。 - 如果这些还不够的话,您的生产目标是指数性增长的 - 您需要持续的增大工厂的规模! - 虽然您刚开始只需要生产图形,但您之后还可以给这些图形上色 - 您需要开采并混合颜料! - 您可以在 Steam 游戏商城购买此游戏的完整版, 但您可以先游玩试玩版并体验游戏! + Shapez.io 是一个休闲游戏,在其中,你将建造工厂以生产各种各样的几何图形。 + 随着等级提升,你需要生产的图形将会越来越复杂,你需要在无尽的地图中不断的扩建你的工厂。 + 如果这些还不够的话,你的生产目标是指数性增长的 - 你需要持续的增大工厂的规模! + 虽然你刚开始只需要生产图形,但你之后还可以给这些图形上色 - 你需要开采并混合颜料! + 你可以在 Steam 游戏商城购买此游戏的完整版, 但你可以先游玩试玩版并体验游戏! title_advantages: 完整版内容 advantages: - 12 个全新关卡 总共 26 个不同关卡 @@ -175,7 +175,7 @@ dialogs: can generate here) renameSavegame: title: 重命名存档 - desc: 您可以在此重命名存档。 + desc: 你可以在此重命名存档。 tutorialVideoAvailable: title: Tutorial Available desc: There is a tutorial video available for this level! Would you like to From c8623ff1a58fa462d665af5f9bc42607e7aa1528 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 18:35:29 +0100 Subject: [PATCH 050/127] Fix typo in german translation, closes #971 --- translations/base-de.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/base-de.yaml b/translations/base-de.yaml index 26e9dfc2..bd3d9ef4 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -1050,7 +1050,7 @@ tips: gleichmäßig kaufst. - Serielle Ausführung ist effizienter als parallele. - Für viele Gebäude wirst du im Spielverlauf neue Varianten freischalten! - - Du kanst T drücken, um auf andere Varianten des Gebäudes zu + - Du kannst T drücken, um auf andere Varianten des Gebäudes zu wechseln. - Symmetrie ist der Schlüssel! - Du kannst verschiedene Arten von Tunneln miteinander verweben. @@ -1069,7 +1069,7 @@ tips: - Das Lager gibt Items immer zuerst am linken Ausgang ab. - Es lohnt sich, Zeit in den Bau von wiederverwendbaren Designs zu stecken! - Das Halten von STRG ermöglicht dir, mehrere Gebäude zu platzieren. - - Du kanst ALT gedrückt halten, um die Richtung der Fließbänder + - Du kannst ALT gedrückt halten, um die Richtung der Fließbänder umzukehren. - Effizienz ist entscheidend! - Abbaubare Formen werden komplexer, je weiter sie vom Hub entfernt sind. From b080236b0b01c30014c3c13d7a64cf06348fa482 Mon Sep 17 00:00:00 2001 From: Erha <895423140@qq.com> Date: Tue, 8 Dec 2020 01:36:15 +0800 Subject: [PATCH 051/127] Update base-zh-CN.yaml (#977) All English translated into Chinese --- translations/base-zh-CN.yaml | 596 +++++++++++++++-------------------- 1 file changed, 258 insertions(+), 338 deletions(-) diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 6cd179a8..41be04d3 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -110,9 +110,8 @@ dialogs: text: 未能导入你的存档: confirmSavegameDelete: title: 确认删除 - text: Are you sure you want to delete the following game?

- '' at level

This can not be - undone! + text: 你确定要删除这个游戏吗?

+ '' 等级

该操作无法回退! savegameDeletionError: title: 删除错误 text: 未能删除你的存档 @@ -148,14 +147,14 @@ dialogs: desc: 你还没有解锁蓝图功能!完成更多的关卡来解锁蓝图。 keybindingsIntroduction: title: 实用按键 - desc: "这个游戏有很多能帮助搭建工厂的使用按键。 以下是其中的一些,记得在按键设置中查看其他的!

+ desc: + "这个游戏有很多有用的快捷键。 以下是其中的一些,记得在按键设置中查看其他的!

CTRL + 拖动:选择区域以复制或删除。
SHIFT: 按住以放置多个。
ALT: 反向放置传送带。
" createMarker: title: 创建地图标记 - desc: Give it a meaningful name, you can also include a short - key of a shape (Which you can generate here) + desc: 填写一个有意义的名称, 你也可以使用形状的 短代码 (你可以 点击这里 生成短代码) titleEdit: 编辑地图标记 markerDemoLimit: desc: 在试玩版中你只能创建两个地图标记。请获取独立版以创建更多标记。 @@ -169,21 +168,18 @@ dialogs: title: 确认剪切 desc: 你没有足够的图形来粘贴这个区域!你确定要剪切吗? editSignal: - title: Set Signal - descItems: "Choose a pre-defined item:" - descShortKey: ... or enter the short key of a shape (Which you - can generate here) + title: 设置信号 + descItems: "选择一个预定义的信号:" + descShortKey: ... 或者输入图形的 短代码 (你可以 点击这里 生成短代码) renameSavegame: title: 重命名存档 desc: 你可以在此重命名存档。 tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: 教程 + desc: 该等级有视频教程! 你想查看这个视频吗? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: 教程 + desc: 该等级有英语版本的视频教程! 你想查看这个视频吗?? ingame: keybindingsOverlay: moveMap: 移动地图 @@ -204,9 +200,9 @@ ingame: copySelection: 复制 clearSelection: 取消选择 pipette: 选取器 - switchLayers: Switch layers + switchLayers: 选择层 buildingPlacement: - cycleBuildingVariants: 按 键以选择建筑变体. + cycleBuildingVariants: 按 键以选择建筑变体。 hotkeyLabel: "快捷键: " infoTexts: speed: 效率 @@ -224,7 +220,7 @@ ingame: notifications: newUpgrade: 有新更新啦! gameSaved: 游戏已保存。 - freeplayLevelComplete: Level has been completed! + freeplayLevelComplete: 等级 完成了! shop: title: 建筑升级 buttonUnlock: 升级 @@ -261,39 +257,26 @@ ingame: waypoints: 地图标记 hub: 基地 description: 左键跳转到地图标记,右键删除地图标记。

- 在当前地点创建地图标记,或者在选定位置上右键创建地图标记. + 在当前地点创建地图标记,或者在选定位置上右键创建地图标记。 creationSuccessNotification: 成功创建地图标记。 interactiveTutorial: title: 教程 hints: - 1_1_extractor: 在圆形矿脉上放一个开采机来获取圆形! - 1_2_conveyor: 用传送带将你的开采机连接到基地上!

提示:用你的鼠标按下并拖动传送带! - 1_3_expand: 这不是一个挂机游戏!建造更多的开采机和传送带来更快地完成目标。

提示:按住 - SHIFT 键来放置多个开采机,用 R 键旋转它们。 - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 1_1_extractor: 在圆形矿脉上放一个开采器来获取圆形! + 1_2_conveyor: 用传送带将你的开采器连接到基地上!

提示:用你的鼠标按下并拖动传送带! + 1_3_expand: + 这不是一个挂机游戏!建造更多的开采器和传送带来更快地完成目标。

提示:按住 + SHIFT 键来放置多个开采器,用 R 键旋转它们。 + 2_1_place_cutter: "现在放置一个切割器,把圆切成两半!

注意:无论方向如何,切割机总是从上到下切割。" + 2_2_place_trash: 切割机可能会堵塞

使用垃圾桶清除当前 (!) 不需要的废物。 + 2_3_more_cutters: "干的好!现在放置2个以上的切割机来加快当前缓慢的过程!

提示:用0-9快捷键可以快速选择建筑!" + 3_1_rectangles: + "现在让我们开采一些矩形!建4个人开采器并将它们连接到基地。

+ 提示:按住SHIFT拖到传送带会激活传送带规划!" + 21_1_place_quad_painter: 放置四口上色器并且输入圆形白色红色! + 21_2_switch_to_wires: 按 E 键选择电线层!

然后用导线连接上色器的四个输入口! + 21_3_place_button: 很好!现在放置一个开关并连接导线! + 21_4_press_button: "按下开关去产生正信号来激活上色器。

注:你不用连上所有的输入口!试着只接两个。" colors: red: 红色 green: 绿色 @@ -309,8 +292,8 @@ ingame: empty: 空 copyKey: 复制短代码 connectedMiners: - one_miner: 1 个开采机 - n_miners: 个开采机 + one_miner: 1 个开采器 + n_miners: 个开采器 limited_items: 限制在 watermark: title: 试玩版 @@ -364,10 +347,10 @@ buildings: description: 运送物品,按住并拖动来放置多个传送带。 miner: default: - name: 开采机 + name: 开采器 description: 在图形或者颜色上放置来开采他们。 chainable: - name: 链式开采机 + name: 链式开采器 description: 在图形或者颜色上放置来开采他们。可以被链接在一起。 underground_belt: default: @@ -396,25 +379,23 @@ buildings: stacker: default: name: 堆叠机 - description: 将输入的图形拼贴在一起。如果不能被直接拼贴,右边的图形会被堆叠在左边的图形上面. + description: 将输入的图形拼贴在一起。如果不能被直接拼贴,右边的图形会被堆叠在左边的图形上面。 mixer: default: - name: 混色机 + name: 混色器 description: 用加法混色将两个颜色混合起来 painter: default: - name: 上色机 + name: 上色器 description: 将整个图形涂上输入的颜色。 double: - name: 上色机(双倍) + name: 上色器(双倍) description: 同时为两个输入的图形上色,每次上色只消耗一份颜色。 quad: - name: 上色机(四向) - description: Allows you to color each quadrant of the shape individually. Only - slots with a truthy signal on the wires layer - will be painted! + name: 上色器(四口) + description: 能够为图形的四个象限单独上色。只有电线层上带有正信号的插槽才可以上色! mirrored: - name: 上色机 (镜像) + name: 上色器 (镜像) description: 将整个图形涂上输入的颜色。 trash: default: @@ -427,148 +408,126 @@ buildings: endOfDemo: 试玩版结束 wire: default: - name: 能量导线 - description: 用于传输能量。 + name: 导线 + description: 传输信号,信号可以是物品,颜色或者布尔值。 不同颜色的导线不会互相连接 second: name: 导线 description: 传输信号,信号可以是物品,颜色或者布尔值。 不同颜色的导线不会互相连接。 balancer: default: - name: Balancer - description: Multifunctional - Evenly distributes all inputs onto all outputs. + name: 平衡器 + description: 多功能-将所有输入均匀地分配到所有输出上。 merger: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: 合并器 (小型) + description: 将两条传送带合并为一条。 merger-inverse: - name: Merger (compact) - description: Merges two conveyor belts into one. + name: 合并器 (小型) + description: 将两条传送带合并为一条。 splitter: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: 分配器 (小型) + description: 将一条传送带分成为两条。 splitter-inverse: - name: Splitter (compact) - description: Splits one conveyor belt into two. + name: 分配器 (小型) + description: 将一条传送带分成为两条。 storage: default: - name: Storage - description: Stores excess items, up to a given capacity. Prioritizes the left - output and can be used as an overflow gate. + name: 存储器 + description: 储存多余的物品,直到指定的容量。 优先处理左边的输出,可以用作溢出门。 wire_tunnel: default: - name: Wire Crossing - description: Allows to cross two wires without connecting them. + name: 交差导线 + description: 使两根导线交差,而不会连接起来。 constant_signal: default: - name: Constant Signal - description: Emits a constant signal, which can be either a shape, color or - boolean (1 / 0). + name: 固定信号 + description: 发出固定信号,可以是图形、颜色、开关量(1 / 0)。 lever: default: - name: Switch - description: Can be toggled to emit a boolean signal (1 / 0) on the wires layer, - which can then be used to control for example an item filter. + name: 开关 + description: 可以在电线层上发出开关量(1 / 0)信号。比如说它可以用来控制过滤器。 logic_gate: default: - name: AND Gate - description: Emits a boolean "1" if both inputs are truthy. (Truthy means shape, - color or boolean "1") + name: 与门 + description: 如果输入都是正信号,则发出开(1)信号。(正信号:图形,颜色,开(1)信号) not: - name: NOT Gate - description: Emits a boolean "1" if the input is not truthy. (Truthy means - shape, color or boolean "1") + name: 非门 + description: 如果输入不是正信号,则发出开(1)信号。(正信号:图形,颜色,开(1)信号) xor: - name: XOR Gate - description: Emits a boolean "1" if one of the inputs is truthy, but not both. - (Truthy means shape, color or boolean "1") + name: 异或门 + description: 如果输入只有一个正信号,则发出开(1)信号。(正信号:图形,颜色,开(1)信号) or: - name: OR Gate - description: Emits a boolean "1" if one of the inputs is truthy. (Truthy means - shape, color or boolean "1") + name: 或门 + description: 如果输入有一个是正信号,则发出开(1)信号。(正信号:图形,颜色,开(1)信号) transistor: default: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: 晶体管 + description: 如果侧边输入正信号,输入可以通过。(正信号:图形,颜色,开(1)信号) mirrored: - name: Transistor - description: Forwards the bottom input if the side input is truthy (a shape, - color or "1"). + name: 晶体管 + description: 如果侧边输入正信号,输入可以通过。(正信号:图形,颜色,开(1)信号) filter: default: - name: Filter - description: Connect a signal to route all matching items to the top and the - remaining to the right. Can be controlled with boolean signals - too. + name: 过滤器 + description: 在上面输出和信号匹配的内容,在右侧输出不匹配的内容。如果是开关量的话,开(1)信号从上面输出,关(0)信号从右侧输出 + display: default: - name: Display - description: Connect a signal to show it on the display - It can be a shape, - color or boolean. + name: 显示器 + description: 在显示器上显示连接的信号(这些信号可以是:图形、颜色、开关量)。 reader: default: - name: Belt Reader - description: Allows to measure the average belt throughput. Outputs the last - read item on the wires layer (once unlocked). + name: 传送带阅读器 + description: 可以测量传送带平均吞吐量。在电线层输出最后输入物品的信号(可以在‘显示器’上显示,也可用来做过滤) analyzer: default: - name: Shape Analyzer - description: Analyzes the top right quadrant of the lowest layer of the shape - and returns its shape and color. + name: 图形分析器 + description: 分析图形最低层的右上象限并返回其图形和颜色。 comparator: default: - name: Compare - description: Returns boolean "1" if both signals are exactly equal. Can compare - shapes, items and booleans. + name: 比较器 + description: 如果输入的两个信号一样将输出开(1)信号,可以比较图形,颜色,和开关量。 virtual_processor: default: - name: Virtual Cutter - description: Virtually cuts the shape into two halves. + name: 模拟切割机 + description: 将信号中的图形切割成两半并输出信号 rotater: - name: Virtual Rotater - description: Virtually rotates the shape, both clockwise and counter-clockwise. + name: 模拟旋转机 + description: 将信号中的图形旋转后输出信号 unstacker: - name: Virtual Unstacker - description: Virtually extracts the topmost layer to the right output and the - remaining ones to the left. + name: 模拟拆分器 + description: 将信号中图形的最上层图形信号从右侧输出,其余的图形信号从左侧输出。 stacker: - name: Virtual Stacker - description: Virtually stacks the right shape onto the left. + name: 模拟堆叠机 + description: 将右侧的图形叠在左侧的图形上 painter: - name: Virtual Painter - description: Virtually paints the shape from the bottom input with the shape on - the right input. + name: 模拟上色器 + description: 使用右侧输入的颜色给底部输入的图形上色 item_producer: default: - name: Item Producer - description: Available in sandbox mode only, outputs the given signal from the - wires layer on the regular layer. + name: 物品生成器 + description: 仅在沙盒模式下可用,在常规层上输出电线层给定信号的图形。 storyRewards: reward_cutter_and_trash: title: 切割图形 - desc: You just unlocked the cutter, which cuts shapes in half - from top to bottom regardless of its - orientation!

Be sure to get rid of the waste, or - otherwise it will clog and stall - For this purpose - I have given you the trash, which destroys - everything you put into it! + desc: 你刚解锁了切割机,它会从上到下切开图形而不管它的方向! +

一定要用扔掉不用的东西,不然它会阻塞传送带, + 为此我给了你垃圾桶,它会摧毁所有放进去的东西! reward_rotater: title: 顺时针旋转 desc: 恭喜!你解锁了旋转机。它会顺时针旋转输入的图形90度。 reward_painter: title: 上色 - desc: 恭喜!你解锁了上色机。开采一些颜色 (就像你开采图形一样) - 将其在上色机中与图形结合来将图形上色!

PS:如果你患有色盲,可以在设置中启用色盲模式! + desc: 恭喜!你解锁了上色器。开采一些颜色 (就像你开采图形一样) + 将其在上色器中与图形结合来将图形上色!

注意:如果你患有色盲,可以在设置中启用色盲模式! reward_mixer: title: 混合颜色 - desc: 恭喜!你解锁了混色机。这个建筑使用加法混色将两种颜色混合起来。 + desc: 恭喜!你解锁了混色器。这个建筑使用加法混色将两种颜色混合起来。 reward_stacker: title: 堆叠 desc: 恭喜!你解锁了堆叠机。堆叠机会尝试把两个输入的图形拼贴在一起。如果有重叠的部分,右边的输入会被堆叠在左边的输入上方! reward_splitter: title: 分离与合并 - desc: You have unlocked a splitter variant of the - balancer - It accepts one input and splits them - into two! + desc: 你已经解锁了平衡器的变体分配器,它会把输入的东西分配在两边输出! reward_tunnel: title: 隧道 desc: 恭喜!你解锁了隧道。你现在可以从其他传送带或建筑底下运送物品了! @@ -576,11 +535,10 @@ storyRewards: title: 逆时针旋转 desc: 恭喜!你解锁了旋转机逆时针变体。这个变体可以逆时针旋转图形。选择旋转机然后按"T"键来选取这个变体。 reward_miner_chainable: - title: 链式开采机 - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + title: 链式开采器 + desc: + "你已经解锁了链式开采器!它能转发它的资源给其他的开采器,这样你就会更有效率的开采资源了!

+ 注意:新的开采器替换了工具栏里旧的开采器!" reward_underground_belt_tier_2: title: 二级隧道 desc: 恭喜!你解锁了二级隧道。这是隧道的一个变体。二级隧道有更长的传输距离。你还可以混用不同的隧道变体! @@ -588,22 +546,17 @@ storyRewards: title: 四向切割机 desc: 恭喜!你解锁了切割机四向变体。它可以将输入的图形切成四块而不只是左右两块! reward_painter_double: - title: 双倍上色机 - desc: 恭喜!你解锁了上色机双倍变体。它可以同时为两个图形上色,每次只消耗一份颜色! + title: 双倍上色器 + desc: 恭喜!你解锁了上色器双倍变体。它可以同时为两个图形上色,每次只消耗一份颜色! reward_storage: - title: 仓库 - desc: You have unlocked the storage building - It allows you to - store items up to a given capacity!

It priorities the left - output, so you can also use it as an overflow gate! + title: 存储器 + desc: 你已经解锁了存储器,它能存满指定容量的物品!

+ 它先从左边输出,这样你就可以用它做一个溢流门了! reward_freeplay: title: 自由模式 - desc: You did it! You unlocked the free-play mode! This means - that shapes are now randomly generated!

- Since the hub will require a throughput from now - on, I highly recommend to build a machine which automatically - delivers the requested shape!

The HUB outputs the requested - shape on the wires layer, so all you have to do is to analyze it and - automatically configure your factory based on that. + desc: 成功了!你解锁了自由模式!这意味着现在将随机生成图形! + 从现在起,基地将需要生产率,我强烈建议你去制造一台能够自动交付所需图形的机器!

+ 基地会在电线层输出需要的图形,你需要去分析图形并在此基础上自动配置你的工厂。 reward_blueprints: title: 蓝图 desc: 你现在可以复制粘贴你的工厂的一部分了!按住 CTRL @@ -611,83 +564,67 @@ storyRewards: no_reward: title: 下一关 desc: 这一关没有奖励,但是下一关有!

- PS:你生产过的所有图形都会被用来升级建筑。 + 注意:你生产过的所有图形都会被用来升级建筑。 no_reward_freeplay: title: 下一关 desc: 恭喜你!另外,我们已经计划在独立版中加入更多内容! reward_balancer: - title: Balancer - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + title: 平衡器 + desc: 解锁了多功能的平衡器,它能够分割和合并多个传送带的资源,可以用来建造更大的工厂! reward_merger: - title: Compact Merger - desc: You have unlocked a merger variant of the - balancer - It accepts two inputs and merges them - into one belt! + title: 小型合并器 + desc: 你已经解锁了平衡器的变体合并器,它能合并两个输入到一个传送带上! reward_belt_reader: - title: Belt reader - desc: You have now unlocked the belt reader! It allows you to - measure the throughput of a belt.

And wait until you unlock - wires - then it gets really useful! + title: 传送带阅读器 + desc: 你已经解锁了传送带阅读器!它能够测量传送带上的生产率。

+ 等你解锁了电线层后,它会更有用! reward_rotater_180: - title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + title: 180度旋转器 + desc: 你刚刚解锁了180度旋转器!它能帮你把一个图形旋转180度(Surprise! :D) reward_display: - title: Display - desc: "You have unlocked the Display - Connect a signal on the - wires layer to visualize it!

PS: Did you notice the belt - reader and storage output their last read item? Try showing it on a - display!" + title: 显示器 + desc: "你已经解锁了显示器,显示一个在电线层上输入的信号!

+ 注意:你注意到传输带阅读器和存储器输出他们最后一次输入的物品的信号了吗?试着在显示屏上展示一下!" reward_constant_signal: - title: Constant Signal - desc: You unlocked the constant signal building on the wires - layer! This is useful to connect it to item filters - for example.

The constant signal can emit a - shape, color or - boolean (1 / 0). + title: 固定信号 + desc: + 你解锁了电线层上的固定信号建筑,比如它连接过滤器时非常有用。

+ 它能发出图形、颜色、开关量(1 / 0)的固定信号。 reward_logic_gates: - title: Logic Gates - desc: You unlocked logic gates! You don't have to be excited - about this, but it's actually super cool!

With those gates - you can now compute AND, OR, XOR and NOT operations.

As a - bonus on top I also just gave you a transistor! + title: 逻辑门 + desc: 你解锁了逻辑门!它们是个好东西!

+ 你可以用它们来进行'与,或,非,异或'操作。

作为奖励,我还给你解锁了晶体管! + reward_virtual_processing: - title: Virtual Processing - desc: I just gave a whole bunch of new buildings which allow you to - simulate the processing of shapes!

You can - now simulate a cutter, rotater, stacker and more on the wires layer! - With this you now have three options to continue the game:

- - Build an automated machine to create any possible - shape requested by the HUB (I recommend to try it!).

- Build - something cool with wires.

- Continue to play - regulary.

Whatever you choose, remember to have fun! + title: 模拟处理器 + desc: 我刚刚给了一大堆新建筑,让你可以模拟形状的处理过程

+ 你现在可以在电线层上模拟切割机,旋转机,堆叠机和其他机器!

+ 有了这些,你可以选择下面三个方向来继续游戏:

+ -建立一个自动化生产基地需要图形的机器(我建议试试!)。

+ -用电线层上做些酷炫的东西。

+ -继续正常比赛。

+ 无论你选择什么,记住要玩得开心! + reward_wires_painter_and_levers: - title: Wires & Quad Painter - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + title: 电控四口上色器 + desc: "你刚刚解锁了电线层:它是正常层之上的一个层,它带来了许多新的机制!

+ 首先我解锁了你的四口上色器,按E键切换到电线层,然后连接你想要染色的槽,用开关来控制开启。

+ 注意:在设置中打开电线层教程!" reward_filter: - title: Item Filter - desc: You unlocked the Item Filter! It will route items either - to the top or the right output depending on whether they match the - signal from the wires layer or not.

You can also pass in a - boolean signal (1 / 0) to entirely activate or disable it. + title: 物品过滤器 + desc: + 你解锁了物品过滤器!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。

+ 你也可以输入正负(1 / 0)信号来激活或者禁用它。 reward_demo_end: - title: End of Demo - desc: You have reached the end of the demo version! + title: 试玩结束 + desc: 你已经玩完了试玩版本! settings: title: 设置 categories: general: 通用 userInterface: 用户界面 advanced: 高级 - performance: Performance + performance: 性能 versionBadges: dev: 开发版本 staging: 预览版本 @@ -779,55 +716,43 @@ settings: title: 记忆建筑方向 description: 每一类建筑都会记住各自上一次的旋转方向。如果你经常在不同建筑类型之间切换,这个设置会让游戏更加舒适。 soundVolume: - title: Sound Volume - description: Set the volume for sound effects + title: 音效音量 + description: 设置音效的音量 musicVolume: - title: Music Volume - description: Set the volume for music + title: 音乐音量 + description: 设置音乐的音量 lowQualityMapResources: - title: Low Quality Map Resources - description: Simplifies the rendering of resources on the map when zoomed in to - improve performance. It even looks cleaner, so be sure to try it - out! + title: 简陋的地图资源 + description: 放大时简化地图上资源的渲染以提高性能。它看起来更干净,所以一定要试试! disableTileGrid: - title: Disable Grid - description: Disabling the tile grid can help with the performance. This also - makes the game look cleaner! + title: 禁用网格 + description: 禁用平铺网格有助于提高性能。这也让游戏看起来更干净! clearCursorOnDeleteWhilePlacing: - title: Clear Cursor on Right Click - description: Enabled by default, clears the cursor whenever you right click - while you have a building selected for placement. If disabled, - you can delete buildings by right-clicking while placing a - building. + title: 右键取消 + description: 默认情况下取消当前的所有操作,如果禁用的话,你可以在保持将放置建筑的情况下删除已有的建筑。 lowQualityTextures: - title: Low quality textures (Ugly) - description: Uses low quality textures to save performance. This will make the - game look very ugly! + title: 低质量纹理(丑陋) + description: 使用低质量纹理保存游戏性能。但是游戏看起来很丑! displayChunkBorders: - title: Display Chunk Borders - description: The game is divided into chunks of 16x16 tiles, if this setting is - enabled the borders of each chunk are displayed. + title: 显示大块的边框 + description: 游戏将16x16的小块分成一个大块,如果打开这个设置将会显示每个大块的边框。 pickMinerOnPatch: - title: Pick miner on resource patch - description: Enabled by default, selects the miner if you use the pipette when - hovering a resource patch. + title: 在资源块上选择开采器 + description: 默认开启,当在资源块上使用选取器时会选择开采器。 simplifiedBelts: - title: Simplified Belts (Ugly) - description: Does not render belt items except when hovering the belt to save - performance. I do not recommend to play with this setting if you - do not absolutely need the performance. + title: 简单的传送带(简陋) + description: 为了保存性能,除非鼠标放在传送带上,不然不会渲染传送带上的物品。 + 除非你特别需要性能,否则我不推荐在这种设置下玩游戏。 enableMousePan: - title: Enable Mouse Pan - description: Allows to move the map by moving the cursor to the edges of the - screen. The speed depends on the Movement Speed setting. + title: 鼠标平移 + description: 在鼠标滑到屏幕边缘时可以移动地图。移动速度取决于移动速度设置。 + zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: 鼠标位置缩放 + description: 打开后在鼠标位置进行缩放,否则在屏幕中间进行缩放。 mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: 地图资源图形尺寸 + description: 控制地图总览时图形的尺寸(指缩小视野时)。 rangeSliderPercentage: % keybindings: title: 按键设置 @@ -858,12 +783,12 @@ keybindings: toggleFPSInfo: 开关帧数与调试信息 belt: 传送带 underground_belt: 隧道 - miner: 开采机 + miner: 开采器 cutter: 切割机 rotater: 旋转机 stacker: 堆叠机 - mixer: 混色机 - painter: 上色机 + mixer: 混色器 + painter: 上色器 trash: 垃圾桶 rotateWhilePlacing: 顺时针旋转 rotateInverseModifier: "修饰键: 改为逆时针旋转" @@ -883,24 +808,24 @@ keybindings: lockBeltDirection: 启用传送带规划 switchDirectionLockSide: 规划器:换边 pipette: 选取器 - menuClose: Close Menu - switchLayers: Switch layers - wire: Energy Wire - balancer: Balancer - storage: Storage - constant_signal: Constant Signal - logic_gate: Logic Gate + menuClose: 关闭菜单 + switchLayers: 选择层 + wire: 导线 + balancer: 平衡器 + storage: 存储器 + constant_signal: 固定信号 + logic_gate: 逻辑门 lever: Switch (regular) - filter: Filter - wire_tunnel: Wire Crossing - display: Display - reader: Belt Reader - virtual_processor: Virtual Cutter - transistor: Transistor - analyzer: Shape Analyzer - comparator: Compare - item_producer: Item Producer (Sandbox) - copyWireValue: "Wires: Copy value below cursor" + filter: 过滤器 + wire_tunnel: 交差导线 + display: 显示 + reader: 传送带阅读器 + virtual_processor: 模拟切割机 + transistor: 晶体管 + analyzer: 图形分析器 + comparator: 比较器 + item_producer: 物品生产器 (沙盒) + copyWireValue: "电线:复制指定电线上的值" about: title: 关于游戏 body: >- @@ -925,63 +850,58 @@ demo: exportingBase: 导出工厂截图 settingNotAvailable: 在试玩版中不可用。 tips: - - The hub accepts input of any kind, not just the current shape! - - Make sure your factories are modular - it will pay out! - - Don't build too close to the hub, or it will be a huge chaos! - - If stacking does not work, try switching the inputs. - - You can toggle the belt planner direction by pressing R. - - Holding CTRL allows dragging of belts without auto-orientation. - - Ratios stay the same, as long as all upgrades are on the same Tier. - - Serial execution is more efficient than parallel. - - You will unlock more variants of buildings later in the game! - - You can use T to switch between different variants. - - Symmetry is key! - - You can weave different tiers of tunnels. - - Try to build compact factories - it will pay out! - - The painter has a mirrored variant which you can select with T - - Having the right building ratios will maximize efficiency. - - At maximum level, 5 extractors will fill a single belt. - - Don't forget about tunnels! - - You don't need to divide up items evenly for full efficiency. - - Holding SHIFT will activate the belt planner, letting you place - long lines of belts easily. - - Cutters always cut vertically, regardless of their orientation. - - To get white mix all three colors. - - The storage buffer priorities the first output. - - Invest time to build repeatable designs - it's worth it! - - Holding CTRL allows to place multiple buildings. - - You can hold ALT to invert the direction of placed belts. - - Efficiency is key! - - Shape patches that are further away from the hub are more complex. - - Machines have a limited speed, divide them up for maximum efficiency. - - Use balancers to maximize your efficiency. - - Organization is important. Try not to cross conveyors too much. - - Plan in advance, or it will be a huge chaos! - - Don't remove your old factories! You'll need them to unlock upgrades. - - Try beating level 20 on your own before seeking for help! - - Don't complicate things, try to stay simple and you'll go far. - - You may need to re-use factories later in the game. Plan your factories to - be re-usable. - - Sometimes, you can find a needed shape in the map without creating it with - stackers. - - Full windmills / pinwheels can never spawn naturally. - - Color your shapes before cutting for maximum efficiency. - - With modules, space is merely a perception; a concern for mortal men. - - Make a separate blueprint factory. They're important for modules. - - Have a closer look on the color mixer, and your questions will be answered. - - Use CTRL + Click to select an area. - - Building too close to the hub can get in the way of later projects. - - The pin icon next to each shape in the upgrade list pins it to the screen. - - Mix all primary colors together to make white! - - You have an infinite map, don't cramp your factory, expand! - - Also try Factorio! It's my favorite game. - - The quad cutter cuts clockwise starting from the top right! - - You can download your savegames in the main menu! - - This game has a lot of useful keybindings! Be sure to check out the - settings page. - - This game has a lot of settings, be sure to check them out! - - The marker to your hub has a small compass to indicate its direction! - - To clear belts, cut the area and then paste it at the same location. - - Press F4 to show your FPS and Tick Rate. - - Press F4 twice to show the tile of your mouse and camera. - - You can click a pinned shape on the left side to unpin it. + - 基地接受所有输入的图形! + - 确保都是模块化的工厂,不然后面会很麻烦的! + - 不要建设的太靠近基地,不然后面会非常混乱的! + - 如果堆叠不起作用,那就换种方案。 + - 你可以通过 R 键切换传送带规化方向。 + - 按住 CTRL 键拖动传送带将不会自动改变它的方向。 + - 只要所有建筑等级一致,效率也将一致。 + - 串行执行比并行执行更有效。 + - 在后面的游戏中你会解锁更多建筑的变种! + - 你可以使用T键切换不同的变种。 + - 对称是关键! + - 你可以使用隧道构建不同层次的通道。 + - 试着建造紧凑型工厂,它会给你带来好处的! + - 你可以按T来切换上色器的镜像变体。 + - 正确的建筑比例将使效率最大化。 + - 在传送带和开采器等级一致时,5个开采器就可以占满一条传送带的运量。 + - 别忘了隧道! + - 你不必为了充分发挥效率而平均分配物品。 + - 按住SHIFT键将激活传送带规划,能让你更容易的放置长线的传送带。 + - 切割机总是垂直切割,而不管图形方向如何。 + - 混合三原色能够获得白色。 + - 存储缓冲区优先处理第一个输出。 + - 你值得花时间来构建可重复的设计! + - 按住CTRL键能够放置多个建筑。 + - 你可以按住ALT来反向你将放置传送带的方向。 + - 效率是关键! + - 离基地越远图形越复杂。 + - 机器的速度是有限的,把它们分开可以获得最高的效率。 + - 使用平衡器最大化你的效率。 + - 组织很重要。尽量不要过多地穿过传送带。 + - 提前规划,省的后面混乱! + - 不要删除旧的工厂,你会需要他们生产的东西升级建筑来提高效率。 + - 在寻求帮助之前,试着自己完成20级!! + - 不要把事情复杂化,试着保持简单,你会成功的。 + - 你可能需要在游戏的后期重复使用工厂。把你的工厂规划成可重复使用的。 + - 有时,你可以在地图上找到你需要的图形,而不用堆叠机去合成它。 + - 风车图形不会自动产生 + - 在切割前,给你的图形上色可以获得最高的效率。 + - 模块化,可以使你提高效率。 + - 记得做一个单独的蓝图工厂。 + - 仔细看看调色器,你就会调色了。 + - CTRL+点击能够选择一块区域。 + - 建得离基地太近会妨碍以后的工作。 + - 升级列表中每个形状旁边的固定图标可以将其固定到屏幕上。 + - 地图无限大,你可以随意布置。 + - 尝试下Factorio!这是我最喜欢的游戏。 + - 四输入切割机从右上角进行顺时针切割! + - 在主菜单你可以下载你保存的游戏进度文件! + - 这个游戏有很多有用的快捷键!一定要到快捷键页面看看。 + - 这个游戏有很多设置,一定要检查一下! + - 总览时基地的标记边上有个指向它所在方向的指针! + - 想清理传送带,就剪切那块区域并在相同位置放置他们。 + - 按F4显示FPS。 + - 按两次F4显示你鼠标所在的块。 + - 你可以点击固定在屏幕左侧的图形来解除固定。 From 1230b873aa7814f9580df84b992bb16bc5be0634 Mon Sep 17 00:00:00 2001 From: Ethan Chapman Date: Mon, 7 Dec 2020 12:37:49 -0500 Subject: [PATCH 052/127] Require LMB to place blueprints (#979) --- src/js/game/hud/parts/blueprint_placer.js | 30 ++++++++++++----------- 1 file changed, 16 insertions(+), 14 deletions(-) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index e1040c3b..c3625209 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -110,22 +110,24 @@ export class HUDBlueprintPlacer extends BaseHUDPart { } } - const blueprint = this.currentBlueprint.get(); - if (!blueprint) { - return; - } + if (button === enumMouseButton.left) { + const blueprint = this.currentBlueprint.get(); + if (!blueprint) { + return; + } - if (!blueprint.canAfford(this.root)) { - this.root.soundProxy.playUiError(); - return; - } + if (!blueprint.canAfford(this.root)) { + this.root.soundProxy.playUiError(); + return; + } - const worldPos = this.root.camera.screenToWorld(pos); - const tile = worldPos.toTileSpace(); - if (blueprint.tryPlace(this.root, tile)) { - const cost = blueprint.getCost(); - this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost); - this.root.soundProxy.playUi(SOUNDS.placeBuilding); + const worldPos = this.root.camera.screenToWorld(pos); + const tile = worldPos.toTileSpace(); + if (blueprint.tryPlace(this.root, tile)) { + const cost = blueprint.getCost(); + this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost); + this.root.soundProxy.playUi(SOUNDS.placeBuilding); + } } } From 3b268294df044278d13e4cd4335930f0d4d9539f Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 18:39:12 +0100 Subject: [PATCH 053/127] Minor adjustments --- src/js/changelog.js | 1 + src/js/game/hud/parts/blueprint_placer.js | 4 +--- 2 files changed, 2 insertions(+), 3 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index c7b142ba..34c10948 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -9,6 +9,7 @@ export const CHANGELOG = [ "Allow to cycle variants backwards with SHIFT + T", "Upgrade numbers now use roman numerals until tier 50 (by LeopoldTal)", "Add button to unpin shapes from the left side (by artemisSystem)", + "Fix middle mouse button also placing blueprints (by Eiim)", "Updated translations (Thanks to all contributors!)", ], }, diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index c3625209..b70fb82a 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -108,9 +108,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { this.abortPlacement(); return STOP_PROPAGATION; } - } - - if (button === enumMouseButton.left) { + } else if (button === enumMouseButton.left) { const blueprint = this.currentBlueprint.get(); if (!blueprint) { return; From 100ee57d10b0b27b930ca0b1a6b5cb78adcbfad7 Mon Sep 17 00:00:00 2001 From: Hyron <54694742+HyronBit@users.noreply.github.com> Date: Mon, 7 Dec 2020 14:41:41 -0300 Subject: [PATCH 054/127] Update base-pt-BR.yaml (#985) * Update base-pt-BR.yaml Fixed a few typos, and translated reward_storage and reward_miner_chainable * Update base-pt-BR.yaml fixed a space and a missing " --- translations/base-pt-BR.yaml | 22 +++++++++++----------- 1 file changed, 11 insertions(+), 11 deletions(-) diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index c52816d4..45f72353 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -44,7 +44,7 @@ steamPage: Qualquer um pode contribuir, estou ativamente envolvido com a comunidade e tento ler todas as sugestões e receber críticas quando possível. - Cheque minha lousa no trello para a linha do tempo completa! + Cheque meu quadro no trello para a linha do tempo completa! global: loading: Carregando error: Erro @@ -78,7 +78,7 @@ global: space: Espaço demoBanners: title: Versão Demo - intro: Compre a versão completa para desbloquear todas os recursos! + intro: Compre a versão completa para desbloquear todos os recursos! mainMenu: play: Jogar continue: Continuar @@ -543,7 +543,7 @@ buildings: filter: default: name: Filtro - description: Conecte um sinal para rotear todos os itens desejador para o topo e + description: Conecte um sinal para rotear todos os itens desejados para o topo e o restante para a direita. Pode ser controlado por sinais binários também. display: @@ -636,10 +636,10 @@ storyRewards: variantes! reward_miner_chainable: title: Extrator em Cadeia - desc: "You have unlocked the chained extractor! It can - forward its resources to other extractors so you - can more efficiently extract resources!

PS: The old - extractor has been replaced in your toolbar now!" + desc: "Você desbloqueou o extrator em cadeia! Ele + encaminha os recursos para outros extratores para que você + possa extrair recursos de forma mais eficiente!

OBS: O velho + extrator foi substituído na sua barra de ferramentas!" reward_underground_belt_tier_2: title: Túnel Classe II desc: Você desbloqueou uma nova variante do túnel - ele tem um @@ -656,10 +656,10 @@ storyRewards: pintor regular, mas processa duas formas ao mesmo tempo, consumindo apenas uma cor em vez de duas! reward_storage: - title: Acúmulo de excesso - desc: You have unlocked the storage building - It allows you to - store items up to a given capacity!

It priorities the left - output, so you can also use it as an overflow gate! + title: Armazém + desc: Você desbloqueou o armazém - Permite que você + armazene itens até uma certa capacidade!

Ele prioriza a saída + da esquerda, para que você tambpem possa usá-lo como um portão de excesso! reward_freeplay: title: Modo Livre desc: Você conseguiu! Você desbloqueou o modo livre! Isso From d0596be38c5f2bf0b6c9d7736b1094bce6e83d38 Mon Sep 17 00:00:00 2001 From: L404-Venik <67225529+L404-Venik@users.noreply.github.com> Date: Mon, 7 Dec 2020 20:43:06 +0300 Subject: [PATCH 055/127] Update base-ru.yaml (#990) * Update base-ru.yaml * Update base-ru.yaml * Update base-ru.yaml Sorry, even with my English knowledge I'm not really a programmer, so I badly understand error notifications. Give me time, maby I'll try couple times to get into it. Please disregard if there will be some more failed versions. * Update base-ru.yaml * Update base-ru.yaml * Update base-ru.yaml --- translations/base-ru.yaml | 15 ++++++++------- 1 file changed, 8 insertions(+), 7 deletions(-) diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 6c01272e..3c3df61e 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -3,12 +3,13 @@ steamPage: создания и объединения все более сложных фигур на бесконечной карте. discordLinkShort: Официальный Discord сервер intro: >- - Shapez.io - это спокойная игра о создании фабрик для автоматизации - создания сложных геометрических фигур. + Любите игры про автоматизацию? Тогда вы по адресу! + shapez.io это спокойная игра, в которой вам предстоит строить фабрики по автоматизированному производству геометрических фигур. По мере управления уровня, фигуры становятся все сложнее, так что придется расширять фабрику засчет бесконечной карты. - Если этого мало, то Вам так же придется экспоненциально производить все больше и больше фигур, чтобы удовлетворить потребности Вашей фабрики. Ключ к успеху - расширение! + Если этого мало, то Вам так же придется экспоненциально увеличивать производство, чтобы удовлетворить потребности Вашей фабрики. Ключ к успеху - масштабирование! + И если в начале вам понадобится обрабатывать только формы, то позже вы начнёте их раскрашивать, добывая и комбенируя красители. Вначале игры Вам понадобится производить только фигуры, однако позже фигуры надо будет окрашивать. Для этого добывайте и смешивайте краски! @@ -32,7 +33,7 @@ steamPage: - Моды - Режим песочницы - ... и многое другое! - title_open_source: Эта игра находится в открытом доступе! + title_open_source: Эта игра с открытым исходным кодом! title_links: Ссылки links: discord: Официальный Discord сервер @@ -85,7 +86,7 @@ mainMenu: changelog: Список изменений importSavegame: Импорт openSourceHint: Это игра с открытым исходным кодом! - discordLink: Офици- альный Дискорд + discordLink: Официальный Дискорд сервер! helpTranslate: Помоги с переводом! browserWarning: Извините, но игра работает медленно в вашем браузере! Приобретите полную версию или загрузите Chrome чтобы ознакомится с игрой @@ -109,7 +110,7 @@ dialogs: deleteGame: Я знаю, что я делаю viewUpdate: Посмотреть Обновление showUpgrades: Показать Улучшения - showKeybindings: Показать Управление + showKeybindings: Показать Управление (Привязку клавиш) importSavegameError: title: Ошибка импортирования text: Не удалось импортировать сохранение игры. @@ -122,7 +123,7 @@ dialogs: confirmSavegameDelete: title: Подтвердите удаление. text: Вы уверены, что хотите удалить это сохранение?

'' на - уровне

Это не может быть отменено! + уровне

Оно будет удалено безвозвратно! savegameDeletionError: title: Ошибка удаления text: Не удалось удалить сохранение игры. From c0027778ef1815653240033dbf90add76258bbe2 Mon Sep 17 00:00:00 2001 From: EmeraldBlock <69981203+EmeraldBlock@users.noreply.github.com> Date: Mon, 7 Dec 2020 11:43:58 -0600 Subject: [PATCH 056/127] Hide wires layer grid with disable grid option (#991) When the Disable Grid option is on, the grid shown on the wires layer also disappears. This is done by replacing the wires tile grid pattern with a pure color that is the average color of the tile image. The color also has the same transparency as the tile image. The use of a pure color loses the grainy look of the image. --- src/js/game/hud/parts/wires_overlay.js | 7 +++++-- 1 file changed, 5 insertions(+), 2 deletions(-) diff --git a/src/js/game/hud/parts/wires_overlay.js b/src/js/game/hud/parts/wires_overlay.js index 752d9cb3..2fd3092c 100644 --- a/src/js/game/hud/parts/wires_overlay.js +++ b/src/js/game/hud/parts/wires_overlay.js @@ -117,7 +117,8 @@ export class HUDWiresOverlay extends BaseHUDPart { return; } - if (!this.cachedPatternBackground) { + const hasTileGrid = !this.root.app.settings.getAllSettings().disableTileGrid; + if (hasTileGrid && !this.cachedPatternBackground) { this.cachedPatternBackground = parameters.context.createPattern(this.tilePatternCanvas, "repeat"); } @@ -132,7 +133,9 @@ export class HUDWiresOverlay extends BaseHUDPart { parameters.context.globalCompositeOperation = "source-over"; parameters.context.scale(scaleFactor, scaleFactor); - parameters.context.fillStyle = this.cachedPatternBackground; + parameters.context.fillStyle = hasTileGrid + ? this.cachedPatternBackground + : "rgba(78, 137, 125, 0.75)"; parameters.context.fillRect( bounds.x / scaleFactor, bounds.y / scaleFactor, From bb4fe006b677ff35f7745d7acd0167397373f2ac Mon Sep 17 00:00:00 2001 From: catyo <52142711+eastplum@users.noreply.github.com> Date: Tue, 8 Dec 2020 01:45:43 +0800 Subject: [PATCH 057/127] Update base-zh-TW.yaml (#992) Consistency for "pipette" vocab. :) --- translations/base-zh-TW.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index 06ebdd9b..48c0c868 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -199,7 +199,7 @@ ingame: cutSelection: 剪下選取 copySelection: 複製選取 clearSelection: 清空選取 - pipette: 吸附 + pipette: 滴管 switchLayers: 切換層 buildingPlacement: cycleBuildingVariants: 按鍵以選擇建築變體. From eecabf1a072e1605fdea9168be3d94e516ac58f2 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 18:45:52 +0100 Subject: [PATCH 058/127] Update changelog --- src/js/changelog.js | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 34c10948..80ae69f6 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -5,11 +5,12 @@ export const CHANGELOG = [ entries: [ "Added the ability to edit constant signals by left clicking them", "You can now add markers in the wire layer (partially by daanbreur)", - "Allow to cycle backwards in the toolbar with SHIFT + Tab (idea by emeraldblock)", + "Allow to cycle backwards in the toolbar with SHIFT + Tab (idea by EmeraldBlock)", "Allow to cycle variants backwards with SHIFT + T", "Upgrade numbers now use roman numerals until tier 50 (by LeopoldTal)", "Add button to unpin shapes from the left side (by artemisSystem)", "Fix middle mouse button also placing blueprints (by Eiim)", + "Hide wires grid when using the 'Disable Grid' setting (by EmeraldBlock)", "Updated translations (Thanks to all contributors!)", ], }, From 5e074dd9fef6e9574ae97dfbebea348d725da796 Mon Sep 17 00:00:00 2001 From: Jesper Welagen Date: Mon, 7 Dec 2020 18:46:19 +0100 Subject: [PATCH 059/127] Update base-nl.yaml (#993) I made some small grammar improvements (some were really weird). Also, I used more simple and basic Dutch to make it understandable for people that can't talk fluent dutch. I really wanted to contribute to the game, so I hope this makes it into the game :) --- translations/base-nl.yaml | 63 +++++++++++++++++++-------------------- 1 file changed, 31 insertions(+), 32 deletions(-) diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index c8933389..88b68b97 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -91,12 +91,12 @@ mainMenu: browserWarning: Sorry, maar dit spel draait langzaam in je huidige browser! Koop de standalone versie of download chrome voor de volledige ervaring. savegameLevel: Level - savegameLevelUnknown: Onbekend Level + savegameLevelUnknown: Level onbekend continue: Ga verder newGame: Nieuw Spel madeBy: Gemaakt door subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Naamloos dialogs: buttons: ok: OK @@ -160,14 +160,14 @@ dialogs: Het upgrades-tabblad staat in de rechterbovenhoek van het scherm. massDeleteConfirm: title: Bevestig verwijderen - desc: Je bent veel gebouwen aan het verwijderen ( om precies te zijn)! + desc: Je bent veel gebouwen aan het verwijderen ( om precies te zijn!) Weet je zeker dat je dit wil doen? blueprintsNotUnlocked: title: Nog niet ontgrendeld desc: Blauwdrukken zijn nog niet ontgrendeld! Voltooi meer levels om ze te ontgrendelen. keybindingsIntroduction: - title: Nuttige sneltoetsen + title: Handige sneltoetsen desc: "Dit spel heeft veel sneltoetsen die het makkelijker maken om grote fabrieken te bouwen. Hier zijn er een aantal, maar zorg dat je kijkt naar de sneltoetsen!

om precies te zijn)! Weet + desc: Je bent veel vormen aan het knippen ( om precies te zijn)! Weet je zeker dat je dit wil doen? exportScreenshotWarning: title: Exporteer screenshot @@ -221,10 +221,10 @@ ingame: placeMultiple: Plaats meerdere reverseOrientation: Omgekeerde oriëntatie disableAutoOrientation: Schakel auto-oriëntatie uit - toggleHud: Aan-/Uitzetten HUD + toggleHud: HUD aan-/uitzetten placeBuilding: Plaats gebouw createMarker: Plaats markering - delete: Vernietig + delete: Verwijder pasteLastBlueprint: Plak laatst gekopieerde blauwdruk lockBeltDirection: Gebruik lopende band planner plannerSwitchSide: Draai de richting van de planner @@ -265,11 +265,11 @@ ingame: title: In opslag description: Geeft alle vormen weer die opgeslagen zijn in de HUB. produced: - title: Geproduceerd + title: Productie description: Geeft alle vormen weer die op dit moment geproduceerd worden, inclusief tussenproducten. delivered: - title: Geleverd + title: Levering description: Geeft alle vormen weer die in de HUB worden bezorgd. noShapesProduced: Er zijn nog geen vormen geproduceerd. shapesDisplayUnits: @@ -340,7 +340,7 @@ ingame: purple: Paars cyan: Cyaan white: Wit - uncolored: Geen kleur + uncolored: Kleurloos black: Zwart shapeViewer: title: Lagen @@ -352,18 +352,18 @@ ingame: limited_items: "Gelimiteerd tot: " watermark: title: Demo versie - desc: Klik hier om het spel op Steam te bekijken! + desc: Klik hier om het spel op Steam te kopen! get_on_steam: Krijg het op Steam standaloneAdvantages: title: Koop de volledige versie! - no_thanks: Nee, bedankt! + no_thanks: Nee, dankjewel! points: levels: title: 12 Nieuwe Levels desc: Voor een totaal van 26 levels! buildings: title: 18 Nieuwe Gebouwen - desc: Automatiseer je fabrieken! + desc: Automatiseer je fabrieken nog beter en maak ze nog sneller! savegames: title: ∞ Savegames desc: Zo veel je maar wilt! @@ -375,7 +375,7 @@ ingame: desc: Verdwaal nooit meer in je fabriek! wires: title: Kabels - desc: Een volledig nieuwe dimensie! + desc: Een volledig nieuwe wereld! darkmode: title: Dark Mode desc: Minder vervelend voor je ogen! @@ -387,7 +387,7 @@ shopUpgrades: name: Banden, Verdeler & Tunnels description: Snelheid x → x miner: - name: Ontginner + name: Mijner description: Snelheid x → x processors: name: Knippen, draaien & stapelen @@ -402,7 +402,7 @@ buildings: description: Transporteert voorwerpen, klik en sleep om meerdere te plaatsen. miner: default: - name: Ontginner + name: Mijner description: Plaats op een vorm of kleur om deze te onttrekken. chainable: name: Ontginner (Ketting) @@ -471,14 +471,14 @@ buildings: deliver: Lever in toUnlock: om te ontgrendelen levelShortcut: LVL - endOfDemo: End of Demo + endOfDemo: Dit is het einde van de demo, koop het spel op Steam om verder te gaan! wire: default: name: Energiekabel description: Voor transport van energie. second: name: Kabel - description: Vervoerd signalen, zoals items, kleuren of booleans (1 of 0). + description: Vervoert signalen, zoals items, kleuren of booleans (1 of 0). Verschillende kleuren kabels kunnen niet verbonden worden. balancer: default: @@ -555,7 +555,7 @@ buildings: analyzer: default: name: Vorm Analyse - description: Analiseerd de onderste laag rechts boven en geeft de kleur en vorm + description: Analiseert de onderste laag rechts boven en geeft de kleur en vorm door aan de kabel. comparator: default: @@ -695,7 +695,7 @@ storyRewards: verdeler vrijgespeeld - Dit gebouw maakt van 2 lopende banden 1! reward_belt_reader: - title: Lopende band lezer + title: Lopende band sensor desc: Je hebt de lopende band lezer vrijgespeeld! Dit gebouw geeft de doorvoer op een lopende band weer.

Wacht maar tot je kabels vrijspeeld, dan wordt het pas echt interessant! @@ -710,7 +710,7 @@ storyRewards: lezer en opslag hun laatste vorm weergeven? Probeer het te tonen op een scherm!" reward_constant_signal: - title: Constante Signaal + title: Constant Signaal desc: Je hebt het constante signaal vrijgespeeld op de kabel dimensie! Dit gebouw is handig in samenwerking met item filters.

Het constante signaal kan een @@ -724,7 +724,7 @@ storyRewards: uitvoeren.

Als bonus krijg je ook nog een transistor van mij! reward_virtual_processing: - title: VIrtuele verwerking + title: Virtuele verwerking desc: Ik heb juist een hele hoop nieuwe gebouwen toegevoegd die je toetstaan om het process van vormen te stimuleren!

Je kan nu de knipper, draaier, stapelaar en meer op de dradenlaag stimuleren! @@ -755,7 +755,7 @@ settings: title: Opties categories: general: Algemeen - userInterface: Opmaak + userInterface: Gebruikersinterface advanced: Geavanceerd performance: Prestatie versionBadges: @@ -774,7 +774,7 @@ settings: small: Klein regular: Middel large: Groot - huge: Jumbo + huge: Ultragroot scrollWheelSensitivity: title: Zoom-gevoeligheid description: Veranderd hoe gevoelig het zoomen is (muiswiel of trackpad). @@ -805,7 +805,7 @@ settings: dark: Donker light: Licht refreshRate: - title: Simulatie doel + title: Simulatiedoel description: Wanneer je een 144 hz monitor hebt, verander de refresh rate hier zodat het spel naar behoren weer blijft geven. Dit verlaagt mogelijk de FPS als je computer te traag is. @@ -913,18 +913,17 @@ settings: te bewegen. zoomToCursor: title: Zoom naar de Muis - description: "Wanneer geactiveert: de zoom zal gebeuren in de richting van je - muispositie, anders in het midden van het scherm." + description: "Wanneer geactiveerd, zal de zoom naar de muis bewegen. Anders in het midden van het scherm." mapResourcesScale: title: Kaartbronnen schaal - description: Controleert de grote van de vormen op het map overzicht (wanneer je + description: Controleert de grootte van de vormen op het map overzicht (wanneer je uitzoomt). rangeSliderPercentage: % keybindings: title: Sneltoetsen hint: "Tip: Maak gebruik van CTRL, SHIFT en ALT! Hiermee kun je dingen anders en gemakkelijker plaatsen." - resetKeybindings: Reset sneltoetsen + resetKeybindings: Herstel sneltoetsen categoryLabels: general: Applicatie ingame: Spel @@ -978,11 +977,11 @@ keybindings: menuClose: Sluit Menu switchLayers: Lagen omwisselen wire: Energiekabel - balancer: Balancer + balancer: Balanceerder storage: Opslag constant_signal: Constant Signaal logic_gate: Logische poort - lever: Schakelaar (regulier) + lever: Schakelaar (standaard) filter: Filter wire_tunnel: Kabel kruising display: Scherm @@ -1093,5 +1092,5 @@ tips: dezelfde locatie. - Druk op F4 om uw FPS en Tick Rate weer te geven. - Druk twee keer op F4 om de tegel van je muis en camera weer te geven. - - U kunt aan de linkerkant op een vastgezette vorm klikken om deze los te + - Je kan aan de linkerkant op een vastgezette vorm klikken om deze los te maken. From ea064d41b6f480b537d74bc345da5a9ab24b7145 Mon Sep 17 00:00:00 2001 From: Mironov Danil <71277890+mironovmeow@users.noreply.github.com> Date: Tue, 8 Dec 2020 00:46:34 +0700 Subject: [PATCH 060/127] Update base-ru.yaml (#994) Some changes in "reward_belt_reader". --- translations/base-ru.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 3c3df61e..94ee3921 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -693,8 +693,8 @@ storyRewards: reward_belt_reader: title: Измеритель desc: Разблокирован измеритель! Он позволяет измерять - пропускную способность конвейера.

А как полезен он будет, - когда вы разблокируете провода! + пропускную способность конвейера.

Вы узнаете, как он полезен, + когда разблокируете провода! reward_rotater_180: title: Вращатель (180 градусов) desc: Разблокирован вращатель на 180 градусов! - Он позволяет From f92a04f1df30840046f178dd9e5b7af97eec3d19 Mon Sep 17 00:00:00 2001 From: Polarbub <71790726+Polarbub@users.noreply.github.com> Date: Mon, 7 Dec 2020 11:48:22 -0600 Subject: [PATCH 061/127] Fix Dependency errors (#996) --- gulp/package.json | 1 + gulp/yarn.lock | 28 ++++++++++++++-------------- 2 files changed, 15 insertions(+), 14 deletions(-) diff --git a/gulp/package.json b/gulp/package.json index 49118c32..90dc5501 100644 --- a/gulp/package.json +++ b/gulp/package.json @@ -42,6 +42,7 @@ "markdown-loader": "^5.1.0", "node-sri": "^1.1.1", "phonegap-plugin-mobile-accessibility": "^1.0.5", + "postcss": ">=5.0.0", "promise-polyfill": "^8.1.0", "query-string": "^6.8.1", "rusha": "^0.8.13", diff --git a/gulp/yarn.lock b/gulp/yarn.lock index 61c19815..c172cbab 100644 --- a/gulp/yarn.lock +++ b/gulp/yarn.lock @@ -8577,10 +8577,10 @@ nan@^2.12.1, nan@^2.13.2: resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== -nanoid@^3.1.12: - version "3.1.12" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.12.tgz#6f7736c62e8d39421601e4a0c77623a97ea69654" - integrity sha512-1qstj9z5+x491jfiC4Nelk+f8XBad7LN20PmyWINJEMRSf3wcAjAWysw1qaA8z6NSKe2sjq1hRSDpBH5paCb6A== +nanoid@^3.1.16: + version "3.1.16" + resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.1.16.tgz#b21f0a7d031196faf75314d7c65d36352beeef64" + integrity sha512-+AK8MN0WHji40lj8AEuwLOvLSbWYApQpre/aFJZD71r43wVRLrOYS4FmJOPQYon1TqB462RzrrxlfA74XRES8w== nanomatch@^1.2.9: version "1.2.13" @@ -10362,6 +10362,16 @@ postcss-zindex@^4.0.1: postcss "^7.0.0" uniqs "^2.0.0" +postcss@>=5.0.0: + version "8.1.7" + resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.7.tgz#ff6a82691bd861f3354fd9b17b2332f88171233f" + integrity sha512-llCQW1Pz4MOPwbZLmOddGM9eIJ8Bh7SZ2Oj5sxZva77uVaotYDsYTch1WBTNu7fUY0fpWp0fdt7uW40D4sRiiQ== + dependencies: + colorette "^1.2.1" + line-column "^1.0.2" + nanoid "^3.1.16" + source-map "^0.6.1" + postcss@^5.0.2: version "5.2.18" resolved "https://registry.yarnpkg.com/postcss/-/postcss-5.2.18.tgz#badfa1497d46244f6390f58b319830d9107853c5" @@ -10390,16 +10400,6 @@ postcss@^7.0.0, postcss@^7.0.1, postcss@^7.0.14, postcss@^7.0.17, postcss@^7.0.2 source-map "^0.6.1" supports-color "^6.1.0" -postcss@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.1.1.tgz#c3a287dd10e4f6c84cb3791052b96a5d859c9389" - integrity sha512-9DGLSsjooH3kSNjTZUOt2eIj2ZTW0VI2PZ/3My+8TC7KIbH2OKwUlISfDsf63EP4aiRUt3XkEWMWvyJHvJelEg== - dependencies: - colorette "^1.2.1" - line-column "^1.0.2" - nanoid "^3.1.12" - source-map "^0.6.1" - prelude-ls@~1.1.2: version "1.1.2" resolved "https://registry.yarnpkg.com/prelude-ls/-/prelude-ls-1.1.2.tgz#21932a549f5e52ffd9a827f570e04be62a97da54" From 8e2efb07561963b172f96c7b3ec91a19d8a6ba5a Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 19:15:57 +0100 Subject: [PATCH 062/127] Fix belts being too slow sometimes, closes #999 --- src/js/changelog.js | 1 + src/js/game/belt_path.js | 22 +++++++++++++++++++++- 2 files changed, 22 insertions(+), 1 deletion(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 80ae69f6..3d3ba951 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -3,6 +3,7 @@ export const CHANGELOG = [ version: "1.2.2", date: "07.12.2020", entries: [ + "Fix item readers and some other buildings slowing up belts, especially if they stalled (inspired by Keterr's fix)", "Added the ability to edit constant signals by left clicking them", "You can now add markers in the wire layer (partially by daanbreur)", "Allow to cycle backwards in the toolbar with SHIFT + Tab (idea by EmeraldBlock)", diff --git a/src/js/game/belt_path.js b/src/js/game/belt_path.js index eb55d613..dde81549 100644 --- a/src/js/game/belt_path.js +++ b/src/js/game/belt_path.js @@ -1085,6 +1085,9 @@ export class BeltPath extends BasicSerializableObject { // Reduce the spacing nextDistanceAndItem[_nextDistance] -= clampedProgress; + // Advance all items behind by the progress we made + this.spacingToFirstItem += clampedProgress; + // If the last item can be ejected, eject it and reduce the spacing, because otherwise // we lose velocity if (isFirstItemProcessed && nextDistanceAndItem[_nextDistance] < 1e-7) { @@ -1097,6 +1100,24 @@ export class BeltPath extends BasicSerializableObject { if (this.tryHandOverItem(nextDistanceAndItem[_item], excessVelocity)) { this.items.pop(); + const itemBehind = this.items[lastItemProcessed - 1]; + if (itemBehind && this.numCompressedItemsAfterFirstItem > 0) { + // So, with the next tick we will skip this item, but it actually has the potential + // to process farther -> If we don't advance here, we loose a tiny bit of progress + // every tick which causes the belt to be slower than it actually is. + // Also see #999 + const fixupProgress = Math.max( + 0, + Math.min(remainingVelocity, itemBehind[_nextDistance]) + ); + + // See above + itemBehind[_nextDistance] -= fixupProgress; + remainingVelocity -= fixupProgress; + this.spacingToFirstItem += fixupProgress; + } + + // Reduce the number of compressed items since the first item no longer exists this.numCompressedItemsAfterFirstItem = Math.max( 0, this.numCompressedItemsAfterFirstItem - 1 @@ -1110,7 +1131,6 @@ export class BeltPath extends BasicSerializableObject { } isFirstItemProcessed = false; - this.spacingToFirstItem += clampedProgress; if (remainingVelocity < 1e-7) { break; } From 01733c48a3d958817ba90d7606520fe887dcc8ca Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 19:24:39 +0100 Subject: [PATCH 063/127] Prevent items from being rendered on each other when a belt stalls, closes #1000 --- src/js/changelog.js | 1 + src/js/game/systems/item_ejector.js | 19 +++++++++++++++++-- 2 files changed, 18 insertions(+), 2 deletions(-) diff --git a/src/js/changelog.js b/src/js/changelog.js index 3d3ba951..c0ef3e66 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -5,6 +5,7 @@ export const CHANGELOG = [ entries: [ "Fix item readers and some other buildings slowing up belts, especially if they stalled (inspired by Keterr's fix)", "Added the ability to edit constant signals by left clicking them", + "Prevent items from being rendered on each other when a belt stalls (inspired by Keterr)", "You can now add markers in the wire layer (partially by daanbreur)", "Allow to cycle backwards in the toolbar with SHIFT + Tab (idea by EmeraldBlock)", "Allow to cycle variants backwards with SHIFT + T", diff --git a/src/js/game/systems/item_ejector.js b/src/js/game/systems/item_ejector.js index 56535111..6bbb42ce 100644 --- a/src/js/game/systems/item_ejector.js +++ b/src/js/game/systems/item_ejector.js @@ -328,6 +328,21 @@ export class ItemEjectorSystem extends GameSystemWithFilter { continue; } + // Limit the progress to the maximum available space on the next belt (also see #1000) + let progress = slot.progress; + const nextBeltPath = slot.cachedBeltPath; + if (nextBeltPath) { + progress = Math.min( + progress, + nextBeltPath.spacingToFirstItem / globalConfig.itemSpacingOnBelts + ); + } + + // Skip if the item would barely be visible + if (progress < 0.05) { + continue; + } + const realPosition = staticComp.localTileToWorld(slot.pos); if (!chunk.tileSpaceRectangle.containsPoint(realPosition.x, realPosition.y)) { // Not within this chunk @@ -337,8 +352,8 @@ export class ItemEjectorSystem extends GameSystemWithFilter { const realDirection = staticComp.localDirectionToWorld(slot.direction); const realDirectionVector = enumDirectionToVector[realDirection]; - const tileX = realPosition.x + 0.5 + realDirectionVector.x * 0.5 * slot.progress; - const tileY = realPosition.y + 0.5 + realDirectionVector.y * 0.5 * slot.progress; + const tileX = realPosition.x + 0.5 + realDirectionVector.x * 0.5 * progress; + const tileY = realPosition.y + 0.5 + realDirectionVector.y * 0.5 * progress; const worldX = tileX * globalConfig.tileSize; const worldY = tileY * globalConfig.tileSize; From ddf3e56f8de1e6f8c8fe6415514bb0ee1a5df8d8 Mon Sep 17 00:00:00 2001 From: Gumball73 <66757746+Gumball73@users.noreply.github.com> Date: Mon, 7 Dec 2020 18:25:46 +0000 Subject: [PATCH 064/127] Update base-pt-PT.yaml (#1002) Fix some typos. --- translations/base-pt-PT.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index a0d7901c..62d3b333 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -312,7 +312,7 @@ ingame: em duas metades!

PS: O cortador corta sempre de cima para baixo independentemente da sua orientação" 2_2_place_trash: O cortador pode encravar e parar!

Usa - um lixo para de livrares do atual (!) não + um lixo para te livrares do atual (!) não é necessário desperdício. 2_3_more_cutters: "Bom trabalho! Agora colocamais 2 cortadores para acelerades este progresso lento!

PS: Usa os atalhos From 6572d68d7d60a5d46963aac5237811f0f1ef44f7 Mon Sep 17 00:00:00 2001 From: Yami Odymel Date: Tue, 8 Dec 2020 02:26:12 +0800 Subject: [PATCH 065/127] Localized base-zh-TW.yaml (#1003) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit The words in the file were based on Chinese localization which doesn't fit the best for Taiwanese locale. This change modified the words below: 傳送帶 → 輸送帶 當前 → 目前 鼠標 → 游標 觸控板 → 軌跡板 屏幕 → 螢幕 導入 → 匯入 刷新率 → 更新率 信息 → 資訊 攝像頭 → 視角 設置 → 設定 性能 → 效能 創建 → 建立 獲取 → 取得 加載 → 載入 教程 → 教學 --- translations/base-zh-TW.yaml | 255 ++++++++++++++++++----------------- 1 file changed, 129 insertions(+), 126 deletions(-) diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index 48c0c868..e7ce1d91 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -10,7 +10,7 @@ steamPage: 玩家可以在 Steam 購買本游戲的單機版,如果還在猶豫,也可以到 shapez.io 先免費試玩再決定! title_advantages: 單機版優點 advantages: - - 12個新關卡 (總共有26關) + - 12個新關卡(總共有26關) - 18個新建築 幫助玩家自動化整個工廠! - 20個升級 讓遊玩時間更久! - 電路更新 帶給玩家新次元體驗! @@ -33,13 +33,13 @@ steamPage: discord: 官方 Discord 伺服器 roadmap: Roadmap subreddit: Reddit - source_code: 原始碼(GitHub) + source_code: 原始碼(GitHub) translate: 幫助我們翻譯! text_open_source: |- 任何人都可以幫助我開發遊戲或提供建議,我很活躍於各個社群媒體,也會讀所有的建議與回饋、並嘗試改善。 記得查看我的 trello board 以了解我的完整計畫! global: - loading: 加載中 + loading: 載入中 error: 錯誤 thousandsDivider: " " decimalSeparator: . @@ -68,18 +68,18 @@ global: alt: ALT escape: ESC shift: SHIFT - space: 空格 + space: 空白鍵 demoBanners: title: 試玩版 - intro: 獲取單機版以解鎖所有功能! + intro: 取得單機版以解鎖所有功能! mainMenu: play: 開始遊戲 changelog: 更新日誌 - importSavegame: 導入 + importSavegame: 匯入存檔 openSourceHint: 本遊戲已開源! discordLink: 官方 Discord 伺服器 helpTranslate: 協助我們翻譯! - browserWarning: 很抱歉, 本遊戲在當前瀏覽器上可能運行緩慢! 使用 chrome 或者獲取單機版以得到更好的體驗。 + browserWarning: 很抱歉,本遊戲在目前的瀏覽器上執行效率可能會有所緩慢!使用 Chrome 或者取得單機版以得到更好的體驗。 savegameLevel: 級 savegameLevelUnknown: 未知關卡 continue: 繼續 @@ -95,11 +95,11 @@ dialogs: later: 之後 restart: 重啟 reset: 重置 - getStandalone: 獲得單機版 + getStandalone: 取得單機版 deleteGame: 我知道我在做什麼 viewUpdate: 查看更新 showUpgrades: 顯示建築升級 - showKeybindings: 顯示按鍵設置 + showKeybindings: 顯示按鍵設定 importSavegameError: title: 匯入錯誤 text: 存檔匯入失敗: @@ -117,10 +117,10 @@ dialogs: text: 存檔刪除失敗 restartRequired: title: 需要重啟 - text: 你需要重啟遊戲以套用變更的設置。 + text: 你需要重啟遊戲以套用變更的設定。 editKeybinding: - title: 更改按鍵設置 - desc: 請按下你想要使用的按鍵,或者按下 ESC 鍵來取消設置。 + title: 更改按鍵設定 + desc: 請按下你想要使用的按鍵,或者按下 ESC 鍵來取消設定。 resetKeybindingsConfirmation: title: 重置所有按鍵 desc: 這將會重置所有按鍵,請確認。 @@ -132,13 +132,13 @@ dialogs: desc: 你嘗試使用了 功能。該功能在試玩版中不可用。請考慮購買單機版以獲得更好的體驗。 oneSavegameLimit: title: 存檔數量限制 - desc: 試玩版中只能保存一份存檔。請刪除舊存檔或者獲取單機版! + desc: 試玩版中只能保存一份存檔。請刪除舊存檔或者取得單機版! updateSummary: title: 更新了! - desc: "以下為自上次遊戲以來更新的內容:" + desc: "以下為自上次遊戲以來更新的內容:" upgradesIntroduction: title: 解鎖建築升級 - desc: 你生產過的所有圖形可以被用來升級建築。不要銷毀你之前建造的工廠! 升級選單在屏幕右上角。 + desc: 你生產過的所有圖形可以被用來升級建築。不要銷毀你之前建造的工廠! 升級選單在螢幕右上角。 massDeleteConfirm: title: 確認刪除 desc: 你將要刪除很多建築,準確來說有幢!你確定要這麼做嗎? @@ -147,17 +147,19 @@ dialogs: desc: 你還沒有解鎖藍圖功能!完成更多的關卡來解鎖藍圖。 keybindingsIntroduction: title: 實用按鍵 - desc: "這個遊戲有很多能幫助搭建工廠的使用按鍵。 以下是其中的一些,記得在按鍵設置中查看其他的!

- CTRL + 拖動:選擇區域以復製或刪除。
按鍵設定
中查看其他的!

+ CTRL + 拖曳:選擇區域以複製或刪除。
SHIFT: 按住以放置多個。
ALT: 反向放置傳送帶。
" + class='keybinding'>ALT
: 反向放置輸送帶。
" createMarker: - title: 創建標記 - desc: 給地圖標記起一個的名字。 你可以在名字中加入一個短代碼以加入圖形。 (你可以在 here - 生成短代碼。) + title: 建立標記 + desc: + 給地圖標記取一個名字。你可以在名字中加入一個簡短代碼以加入圖形。(你可以在這裡 + 建立簡短代碼。) titleEdit: 修改標記 markerDemoLimit: - desc: 在試玩版中你只能創建兩個地圖標記。請獲取單機版以創建更多標記。 + desc: 在試玩版中你只能建立兩個地圖標記。請取得單機版以建立更多標記。 massCutConfirm: title: 確認剪下 desc: 你將要剪下很多建築,準確來說有幢!你確定要這麼做嗎? @@ -170,16 +172,16 @@ dialogs: editSignal: title: 訊號設定 descItems: "選擇一個預先設定的物件" - descShortKey: ... 或輸入圖形的短代碼 (可以由 here 生成) + descShortKey: …或輸入圖形的簡短代碼(可以在這裡建立) renameSavegame: title: 重新命名存檔 desc: 你可以在這裡重新命名存檔 tutorialVideoAvailable: - title: 有教程 - desc: 這個等級有教學影片!你想觀看嗎? + title: 有教學 + desc: 這個等級有教學影片!你想觀看嗎? tutorialVideoAvailableForeignLanguage: - title: 有教程 - desc: 這個等級目前只有英文版教學影片,你想觀看嗎? + title: 有教學 + desc: 這個等級目前只有英文版教學影片,你想觀看嗎? ingame: keybindingsOverlay: moveMap: 移動 @@ -191,10 +193,10 @@ ingame: disableAutoOrientation: 關閉自動定向 toggleHud: 開關基地 placeBuilding: 放置建築 - createMarker: 創建地圖標記 + createMarker: 建立地圖標記 delete: 銷毀 pasteLastBlueprint: 貼上一個藍圖 - lockBeltDirection: 啟用傳送帶規劃 + lockBeltDirection: 啟用輸送帶規劃 plannerSwitchSide: 規劃器換邊 cutSelection: 剪下選取 copySelection: 複製選取 @@ -202,8 +204,8 @@ ingame: pipette: 滴管 switchLayers: 切換層 buildingPlacement: - cycleBuildingVariants: 按鍵以選擇建築變體. - hotkeyLabel: "快捷鍵: " + cycleBuildingVariants: 按鍵以選擇建築變體。 + hotkeyLabel: "快捷鍵:" infoTexts: speed: 效率 range: 範圍 @@ -246,7 +248,7 @@ ingame: settingsMenu: playtime: 遊戲時間 buildingsPlaced: 建築數量 - beltsPlaced: 傳送帶數量 + beltsPlaced: 輸送帶數量 tutorialHints: title: 需要幫助? showHint: 顯示 @@ -256,23 +258,23 @@ ingame: waypoints: waypoints: 地圖標記 hub: 基地 - description: 在標記上按左鍵以快速移動到標記區域,在標記上按右鍵以刪除該標記。

- 為當前區域建立地圖標記或按 right-click 為選取區域建立地圖標記。 - creationSuccessNotification: 成功創建地圖標記。 + description: 在標記上按左鍵以快速移動到標記區域,在標記上按右鍵以刪除該標記。

+ 為目前區域建立地圖標記或按右鍵為選取區域建立地圖標記。 + creationSuccessNotification: 成功建立地圖標記。 interactiveTutorial: - title: 教程 + title: 教學 hints: - 1_1_extractor: 在圓形礦脈上放一個開採機來獲取圓形! - 1_2_conveyor: 用傳送帶將你的開採機連接到基地上! -

提示:用你的游標按下並拖動傳送帶! - 1_3_expand: 這不是一個放置型遊戲!建造更多的開採機和傳送帶來更快地完成目標。

+ 1_1_extractor: 在圓形礦脈上放一個開採機來採集圓形! + 1_2_conveyor: 用輸送帶將你的開採機連接到基地上! +

提示:用你的游標按下並拖曳輸送帶! + 1_3_expand: 這不是一個放置型遊戲!建造更多的開採機和輸送帶來更快地完成目標。

提示:按住SHIFT鍵來放置多個開採機,用R鍵旋轉它們。 - 2_1_place_cutter: "現在放置一個切割機並利用它把圓圈切成兩半!

+ 2_1_place_cutter: "現在放置一個切割機並利用它把圓圈切成兩半!

PS: 不論切割機的方向,它都會把圖形垂直地切成兩半。" - 2_2_place_trash: 切割機可能會堵塞並停止運作!

+ 2_2_place_trash: 切割機可能會堵塞並停止運作

垃圾桶把「目前」不需要的部分處理掉。 - 2_3_more_cutters: "做得好! 現在,再放2個切割機來加速這個緩慢的生產線!

- PS: 使用0-9快捷鍵可以更快選取建築 !" + 2_3_more_cutters: "做得好! 現在,再放2個切割機來加速這個緩慢的生產線!

+ PS: 使用0-9快捷鍵可以更快選取建築 !" 3_1_rectangles: "現在來開採一些方形吧!蓋4座開採機,把形狀收集到基地。

PS: 選擇輸送帶,按住SHIFT並拖曳滑鼠可以計畫輸送帶位置!" 21_1_place_quad_painter: 放置一個切割機(四分)並取得一些 @@ -334,7 +336,7 @@ ingame: desc: 遊戲使我利用閒暇時間做的! shopUpgrades: belt: - name: 傳送帶、平衡機、隧道 + name: 輸送帶、平衡機、隧道 description: 效率 倍 → 倍 miner: name: 開採 @@ -348,8 +350,8 @@ shopUpgrades: buildings: belt: default: - name: 傳送帶 - description: 運送物品,按住並拖動來放置多個。 + name: 輸送帶 + description: 運送物品,按住並拖曳來放置多個。 miner: default: name: 開採機 @@ -360,10 +362,10 @@ buildings: underground_belt: default: name: 隧道 - description: 可以從其他傳送帶或建築底下方運送物品。 + description: 可以從其他輸送帶或建築底下方運送物品。 tier2: name: 貳級隧道 - description: 可以從其他傳送帶或建築底下方運送物品。 + description: 可以從其他輸送帶或建築底下方運送物品。 cutter: default: name: 切割機 @@ -379,7 +381,7 @@ buildings: name: 旋轉機(逆時針) description: 將圖形逆時針旋轉90度。 rotate180: - name: 旋轉機 (180度) + name: 旋轉機(180度) description: 將圖形旋轉180度。 stacker: default: @@ -424,16 +426,16 @@ buildings: description: 多功能——將所有輸入平均分配到所有輸出。 merger: name: 合流機(右) - description: 將兩個傳送帶整合成一個。 + description: 將兩個輸送帶整合成一個。 merger-inverse: name: 合流機(左) - description: 將兩個傳送帶整合成一個。 + description: 將兩個輸送帶整合成一個。 splitter: name: 分流機(右) - description: 將單個傳送帶分流成兩個。 + description: 將單個輸送帶分流成兩個。 splitter-inverse: name: 分流機(左) - description: 將單個傳送帶分流成兩個。 + description: 將單個輸送帶分流成兩個 storage: default: name: 倉庫 @@ -453,25 +455,25 @@ buildings: logic_gate: default: name: AND 邏輯閘 - description: 當輸入均為「真」時,輸出才為1。 (「真」值代表:形狀正確、顏色正確或布林值為1) + description: 當輸入均為「真」時,輸出才為1。(「真」值代表:形狀正確、顏色正確或布林值為1) not: name: NOT 邏輯閘 - description: 當輸入之ㄧ為「假」時,輸出才為1。 (「假」值代表:形狀不正確、顏色不正確或布林值為0) + description: 當輸入之ㄧ為「假」時,輸出才為1。(「假」值代表:形狀不正確、顏色不正確或布林值為0) xor: name: XOR 邏輯閘 - description: 當輸入均為「假」時,輸出才為1。 (「假」值代表:形狀不正確、顏色不正確或布林值為0) + description: 當輸入均為「假」時,輸出才為1。(「假」值代表:形狀不正確、顏色不正確或布林值為0) or: name: OR 邏輯閘 - description: 當輸入之ㄧ為「真」時,輸出才為1。 (「真」值代表:形狀正確、顏色正確或布林值為1) + description: 當輸入之ㄧ為「真」時,輸出才為1。(「真」值代表:形狀正確、顏色正確或布林值為1) transistor: default: name: 電晶體 description: 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 - (「真」值代表:形狀正確、顏色正確或布林值為1) + (「真」值代表:形狀正確、顏色正確或布林值為1) mirrored: name: 電晶體 description: 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 - (「真」值代表:形狀正確、顏色正確或布林值為1) + (「真」值代表:形狀正確、顏色正確或布林值為1) filter: default: name: 物件分類器 @@ -483,7 +485,7 @@ buildings: description: 連接一個訊號到顯示器上顯示,訊號可以是形狀、物件或布林值。 reader: default: - name: 傳送帶讀取機 + name: 輸送帶讀取機 description: 它會讀取輸送帶的平均流量,(解鎖後)在電路層輸出最後讀取的物件。 analyzer: default: @@ -524,7 +526,7 @@ storyRewards: desc: 順時針旋轉機已解鎖。它會順時針旋轉輸入的圖形90度。 reward_painter: title: 上色 - desc: 上色機已解鎖。開採一些顏色,用上色機把顏色和圖形混合,就可以為圖形著色。

備註:如果你是色盲,設置中有色盲模式可以選。 + desc: 上色機已解鎖。開採一些顏色,用上色機把顏色和圖形混合,就可以為圖形著色。

備註:如果你是色盲,設定中有色盲模式可以選。 reward_mixer: title: 混色 desc: 混色器已解鎖-在此建築物中使用附加混合結合兩種顏色! @@ -534,14 +536,14 @@ storyRewards: reward_splitter: title: 分流 desc: 分流機平衡機的變體)已解鎖。 - - 它將單個傳送帶分流成兩個。 + - 它將單個輸送帶分流成兩個。 reward_tunnel: title: 隧道 - desc: 隧道已解鎖。你現在可以從其他傳送帶或建築底下運送物品了! + desc: 隧道已解鎖。你現在可以從其他輸送帶或建築底下運送物品了! reward_rotater_ccw: title: 逆時針旋轉 desc: 逆時針旋轉機已解鎖。它會逆時針旋轉輸入的圖形90度。 - 逆時針旋轉機是順時針旋轉機的變體。選擇「順時針旋轉機」並按「T」來切換變體就能創建。 + 逆時針旋轉機是順時針旋轉機的變體。選擇「順時針旋轉機」並按「T」來切換變體就能建立。 reward_miner_chainable: title: 鏈式開採 desc: "鏈式開採機變體已解鎖。它是開採機的一個變體。 @@ -581,11 +583,11 @@ storyRewards: desc: 恭喜你!另外,我們已經計劃在單機版中加入更多內容! reward_balancer: title: 平衡物流 - desc: 平衡機已解鎖。在大型工廠中,平衡機負責合流或分流多個傳送帶上的物品。 + desc: 平衡機已解鎖。在大型工廠中,平衡機負責合流或分流多個輸送帶上的物品。 reward_merger: title: 合流 desc: 合流機平衡機的變體)已解鎖。 - - 它會將兩個傳送帶整合成一個。 + - 它會將兩個輸送帶整合成一個。 reward_belt_reader: title: 讀取輸送帶 desc: 輸送帶讀取機已解鎖。 @@ -612,10 +614,11 @@ storyRewards: desc: 邏輯閘已解鎖。 你可以覺得無所謂,但其實邏輯閘其實超酷的!

有了這些邏輯閘,你可以運算 AND, OR, XOR 與 NOT。

- 錦上添花,我再送你電晶體! + 錦上添花,我再送你電晶體! reward_virtual_processing: title: 虛擬操作 - desc: 虛擬操作!

已解鎖。很多新建築有虛擬版,你可以模擬切割機、旋轉機、推疊機還有更多電路層上的建築。 + desc: + 虛擬操作

已解鎖。很多新建築有虛擬版,你可以模擬切割機、旋轉機、推疊機還有更多電路層上的建築。 繼續遊玩的你現在有三個選項:

- 蓋一個自動生成任何基地要求圖形的自動機(推薦!)。

- 利用電路層蓋一些很酷建築

@@ -628,7 +631,7 @@ storyRewards: 首先,我為你解鎖四角上色機。 想要上色的角落記得在電路層通電!

E切換至電路層。

- PS: 設定裡開啟提示來啟動教程!" + PS: 設定裡開啟提示來啟動教學!" reward_filter: title: 物件分類器 desc: 物件分類器已解鎖。 @@ -638,7 +641,7 @@ storyRewards: title: 試玩結束 desc: 你已破關試玩版! settings: - title: 設置 + title: 設定 categories: general: 一般 userInterface: 使用者介面(UI) @@ -648,11 +651,11 @@ settings: dev: 開發版本 staging: 預覽版本 prod: 正式版本 - buildDate: 於創建 + buildDate: 於建立 labels: uiScale: - title: 用戶界面大小 - description: 改變用戶界面大小。用戶界面會隨著設備分辨率縮放,這個設置決定縮放比例。 + title: 顯示介面大小 + description: 改變顯示介面大小。顯示介面會隨著設備解析度縮放,這個設定決定縮放比例。 scales: super_small: 最小 small: 較小 @@ -661,7 +664,7 @@ settings: huge: 最大 scrollWheelSensitivity: title: 縮放靈敏度 - description: 改變縮放靈敏度(鼠標滾輪或者觸控板)。 + description: 改變縮放靈敏度(滑鼠滾輪或者軌跡板)。 sensitivity: super_slow: 最低 slow: 較低 @@ -687,17 +690,17 @@ settings: dark: 深色 light: 淺色 refreshRate: - title: 模擬頻率、刷新頻率 - description: 如果你的顯示器是144hz的,請在這裡更改刷新頻率,這樣遊戲可以正確地根據你的螢幕進行模擬。但是如果你的電腦性能不佳,提高刷新頻率可能降低幀數。 + title: 模擬頻率、更新頻率 + description: 如果你的顯示器是 144Hz 的,請在這裡更改更新頻率,這樣遊戲可以正確地根據你的螢幕進行模擬。但是如果你的電腦效能不佳,提高更新頻率可能降低幀數。 alwaysMultiplace: title: 多重放置 - description: 開啟這個選項之後放下建築將不會取消建築選擇。等同於一直按下SHIFT鍵。 + description: 開啟這個選項之後放下建築將不會取消建築選擇。等同於一直按下 SHIFT 鍵。 offerHints: - title: 提示與教程 - description: 是否顯示提示、教程以及一些其他的幫助理解遊戲的UI元素。 + title: 提示與教學 + description: 是否顯示提示、教學以及一些其他的幫助理解遊戲的介面元素。 movementSpeed: title: 移動速度 - description: 改變攝像頭移動速度 + description: 改變視角移動速度 speeds: super_slow: 最慢 slow: 較慢 @@ -706,35 +709,35 @@ settings: super_fast: 非常快 extremely_fast: 最快 enableTunnelSmartplace: - title: 智能隧道放置 - description: 啟用後,放置隧道時會將多餘的傳送帶移除。 此外,拖動隧道可以快速鋪設隧道,以及移除不必要的隧道。 + title: 智慧隧道放置 + description: 啟用後,放置隧道時會將多餘的輸送帶移除。此外,拖曳隧道可以快速鋪設隧道,以及移除不必要的隧道。 vignette: title: 暈映 - description: 啟用暈映,將屏幕角落裡的顏色變深,更容易閱讀文字。 + description: 啟用暈映,將螢幕角落裡的顏色變深,更容易閱讀文字。 autosaveInterval: title: 自動刷新時間 - description: 控制遊戲自動刷新的頻率。 您也可以禁用它。 + description: 控制遊戲自動刷新的頻率。您也可以停用它。 intervals: - one_minute: 1分鐘 - two_minutes: 2分鐘 - five_minutes: 5分鐘 - ten_minutes: 10分鐘 - twenty_minutes: 20分鐘 + one_minute: 1 分鐘 + two_minutes: 2 分鐘 + five_minutes: 5 分鐘 + ten_minutes: 10 分鐘 + twenty_minutes: 20 分鐘 disabled: 停用 compactBuildingInfo: - title: 省略建築信息 + title: 省略建築資訊 description: |- - 通過顯示建築物的比率來縮短建築物的資訊框。 否則 + 通過顯示建築物的比例來縮短建築物的資訊框。否則 顯示所有說明+圖像。 disableCutDeleteWarnings: title: 停用剪下/刪除的警告 description: 剪下/刪除超過100幢建築物時不顯示警告。 enableColorBlindHelper: title: 色盲模式 - description: 如果您是色盲者,啟用了這設定,就可以玩遊戲了。 + description: 如果您是色盲者,啟用了這設定就可以玩遊戲了。 rotationByBuilding: title: 依建築類型旋轉 - description: 每個建築類型,將會分別記住您最後一次使用的旋轉方向。 如果您常常切換不同類型的建築,這樣可能會更方便。 + description: 每個建築類型,將會分別記住您最後一次使用的旋轉方向。如果您常常切換不同類型的建築,這樣可能會更方便。 soundVolume: title: 音效 description: 音效設定 @@ -752,8 +755,8 @@ settings: description: 預設是開啟的,按下右鍵時,清空游標上顯示的準備要蓋建築。 如果關閉此選項,你可以一邊蓋工廠一邊刪除不要的建築。 lowQualityTextures: - title: 低畫質(醜) - description: 用低畫質節省效能。遊戲畫面會變的很醜! + title: 低畫質(簡陋) + description: 用低畫質節省效能。遊戲畫面會變的很簡陋! displayChunkBorders: title: 顯示分區邊界 description: 遊戲是由許多 16x16 的分區組成,啟用這個選項會顯示分區的邊界。 @@ -762,7 +765,7 @@ settings: description: 預設是開啟的,當滴管移動到資源叢上方時,選擇開採機。 simplifiedBelts: title: 簡化輸送帶(醜) - description: 為節省效能,不 render 輸送帶。 + description: 為節省效能,不渲染輸送帶。 除非有必要節省效能,不然我是不建議使用。 enableMousePan: title: 允許用滑鼠移動畫面 @@ -775,9 +778,9 @@ settings: description: 控制地圖資源標示大小(縮小俯瞰時)。 rangeSliderPercentage: % keybindings: - title: 按鍵設置 - hint: 提示:使用 CTRL、SHIFT、ALT ! 這些建在放置建築時有不同的效果。 - resetKeybindings: 重置按鍵設置 + title: 按鍵設定 + hint: 提示:使用 CTRL、SHIFT、ALT ! 這些建在放置建築時有不同的效果。 + resetKeybindings: 重置按鍵設定 categoryLabels: general: 通用 ingame: 遊戲 @@ -796,12 +799,12 @@ keybindings: centerMap: 回到基地 mapZoomIn: 放大 mapZoomOut: 縮小 - createMarker: 創建地圖標記 + createMarker: 建立地圖標記 menuOpenShop: 升級選單 menuOpenStats: 統計選單 toggleHud: 開關基地 - toggleFPSInfo: 開關幀數與調試信息 - belt: 傳送帶 + toggleFPSInfo: 開關幀數與除錯信息 + belt: 輸送帶 underground_belt: 隧道 miner: 開採機 cutter: 切割機 @@ -820,12 +823,12 @@ keybindings: massSelectCopy: 複製 placementDisableAutoOrientation: 取消自動定向 placeMultiple: 繼續放置 - placeInverse: 反向放置傳送帶 + placeInverse: 反向放置輸送帶 pasteLastBlueprint: 貼上前一張藍圖 massSelectCut: 剪切 exportScreenshot: 匯出截圖 mapMoveFaster: 快速移動 - lockBeltDirection: 啟用傳送帶規劃 + lockBeltDirection: 啟用輸送帶規劃 switchDirectionLockSide: 規劃器:換邊 pipette: 滴管 menuClose: 關閉選單 @@ -844,7 +847,7 @@ keybindings: transistor: 電晶體 analyzer: 形狀分析機 comparator: 比對機 - item_producer: 物品生產機(沙盒模式) + item_producer: 物品生產機(沙盒模式) copyWireValue: "電路:複製數值於游標底下" about: title: 關於遊戲 @@ -866,63 +869,63 @@ demo: restoringGames: 恢復存檔 importingGames: 匯入存檔 oneGameLimit: 最多一個存檔 - customizeKeybindings: 按鍵設置 + customizeKeybindings: 按鍵設定 exportingBase: 匯出工廠截圖 settingNotAvailable: 在試玩版中不可用。 tips: - - 基地接受任何輸入,不只是當前要求的圖形! - - 盡量讓工廠模組化,會有回報的! - - 建築不要距離基地太近,否則容易混亂! + - 基地接受任何輸入,不只是當下要求的圖形! + - 盡量讓工廠模組化,會有回報的! + - 建築不要距離基地太近,否則容易混亂! - 如果堆疊不如預期,嘗試將輸入端互換。 - 輸送帶的方向可以按 R 更換。 - 按住 CTRL 來防止輸送帶自動轉向。 - 同等級的生產比例會是一樣的。 - 串聯比並聯更有效率。 - - 遊戲後期可以解鎖更多建築變體! + - 遊戲後期可以解鎖更多建築變體! - 玩家可以按 T 來選擇不同變體。 - - 對稱是關鍵! + - 對稱是關鍵! - 不同等級的隧道可以相互交織。 - - 盡量讓工廠保持緊密,會有回報的! + - 盡量讓工廠保持緊密,會有回報的! - 上色機有對稱的變體。按 T 來選擇不同變體。 - 正確的建築比例可以將效率最大化。 - 最高級時,五個開採機可填滿一個輸送帶。 - - 別忘記使用隧道! + - 別忘記使用隧道! - 最高效率不一定來自均勻切割。 - 按住 SHIFT 輕鬆規劃長距離輸送帶。 - 不論擺放方向,切割機永遠做垂直切割。 - 白 = 紅 + 綠 + 藍。 - 倉庫優先從左側輸出。 - - 花點時間研究可以重複利用的設計,會有回報的! + - 花點時間研究可以重複利用的設計,會有回報的! - 按住 SHIFT 可以一次放置多個建築。 - 按住 ALT 以反轉輸送帶的放置方向。 - - 效率是關鍵! + - 效率是關鍵! - 離基地越遠得圖形叢越複雜。 - 機器的運作速度有上限,多放幾個增加生產效率。 - 用平衡機讓效率最大化。 - 規劃很重要,盡量別讓輸送帶錯綜複雜。 - - 預先規劃,不然會混亂不堪! + - 預先規劃,不然會混亂不堪! - 不要刪除舊的工廠,解鎖更新能會需要它們。 - - 先試著靠自己破第20關再去尋求幫助。 + - 先試著靠自己破第 20 關再去尋求幫助。 - 不要讓東西複雜化,保持簡單則行的遠。 - 遊戲中有時需要重複利用工廠,設計時記得考量重複利用性。 - 有些圖形地圖上就找的到,不必自行堆疊。 - 地圖永遠部會自然生成完整的風車圖形。 - 先上色再切割會比較有效率。 - 有了模組,空間淪為假議題、凡夫俗子的憂思。 - - 創建一個藍圖工廠,這對模組化很有幫助。 + - 建立一個藍圖工廠,這對模組化很有幫助。 - 靠近一點看混色機,你會找到解答。 - 按 CTRL + 點選想選取的區域。 - 離基地太近的建築可能在未來會礙事。 - - 更新目錄的每個圖形旁都有圖釘,點選即可把圖形釘在螢幕上(目標圖形旁)。 - - 混合所有基本色就會得到白色! - - 地圖是無限延展的,別執著,擴張吧! - - Factorio 是我最喜歡的遊戲,非常推薦! + - 更新目錄的每個圖形旁都有圖釘,點選即可把圖形訂選在螢幕上(目標圖形旁)。 + - 混合所有基本色就會得到白色! + - 地圖是無限延展的;別執著於一處,盡情地擴張吧! + - Factorio 是我最喜歡的遊戲,非常推薦! - 四分切割機從右上角順時鐘地輸出圖形的四個區塊。 - 你可以從主畫面下載存檔。 - - 去設定頁看看,有很多有用的按鍵組合! + - 去設定頁看看,有很多有用的按鍵組合! - 有很多東西都可以設定,有空的話去設定頁看看。 - 看不見基地時,基地的標示左側有個小指南針會提醒你它的方位。 - - 清除輸送帶有個方法:複製它再原地貼上。 - - 按 F4 來顯示螢幕的幀數(FPS)與刷新率(Tick Rate)。 + - 清除輸送帶有個方法:複製它再原地貼上。 + - 按 F4 來顯示螢幕的幀數(FPS)與刷新率(Tick Rate)。 - 按 F4 兩次來顯示相機和游標的絕對位置。 - 在已標記的圖形上按左鍵去除標記。 From 813fb941a7d5dde22615fd5509aaaa94727eaade Mon Sep 17 00:00:00 2001 From: JoaoP22 <43392813+JoaoP22@users.noreply.github.com> Date: Mon, 7 Dec 2020 15:26:25 -0300 Subject: [PATCH 066/127] Update base-pt-br.yaml (#1009) I updated some translations --- translations/base-pt-BR.yaml | 10 ++++------ 1 file changed, 4 insertions(+), 6 deletions(-) diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index 45f72353..7f702a5c 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -199,13 +199,11 @@ dialogs: title: Renomear Save desc: Você pode renomear seu save aqui. tutorialVideoAvailable: - title: Tutorial Available - desc: There is a tutorial video available for this level! Would you like to - watch it? + title: Tutorial disponível + desc: Existe um tutorial em vídeo para esse nível! Gostaria de assistí-lo? tutorialVideoAvailableForeignLanguage: - title: Tutorial Available - desc: There is a tutorial video available for this level, but it is only - available in English. Would you like to watch it? + title: Tutorial disponível + desc: Existe um tutorial em vídeo para esse nível, mas está disponível apenas em Inglês. Gostaria de assistí-lo? ingame: keybindingsOverlay: moveMap: Mover From cf22c7d9845cbff88515802a1493ae5b0e29d566 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 19:30:38 +0100 Subject: [PATCH 067/127] Fix save icon not matching up, closes #1010, closes #905 --- res/ui/icons/notification_saved.png | Bin 1744 -> 1726 bytes src/js/changelog.js | 1 + 2 files changed, 1 insertion(+) diff --git a/res/ui/icons/notification_saved.png b/res/ui/icons/notification_saved.png index de7096a4ab69dd274c25eb106667a03dc5eb8440..067f2c0e6b12230eb9341fc56b67931c51e3f695 100644 GIT binary patch delta 612 zcmcb>yN`E*HaFu&1_s8BjEOTe_%@pLGT9j#=^B`a7+P8xSy-8vX&V??85k%jROA*| z`KFd6rX-dmx+IpQ+A0|t7#ZkdD4xv7T&9v@W|W+mWND$Bl4_KqYhhwyrkj{%1mq?e zBpD?eCz)FqCQqKtEJK{a+srD&DO6?&BTnI5mc8|#?Qe1dJ?`P@;uunK>+LPWu0swY z$3FUO*mP65q9q|&wPNYkZ4v&9Pp;7tS zc(R9qr^>ZkeI;6VZwE~}uyNj=4?h=|=+5=nzx3@c=AB37<773M8j8#=)y-{O_MS&X z(V;M`XBFR;`v2_=uE%=$MJyZS9T^W4v#2uk3yLt_arF?6{i&&(!K@*$Zo9{0>$g2B zU&Jb&S2S*W>S;B>S$8Ybj+~`8k2B65)#)GG_hQ_<8!GzfufnpyAY(n*5HpX)_b<{+L(3ffY>}i5npDPyK`#14Bd1$6v+l z2H`vg<>ifidm=pdPtpAsK5OZ*8FQ-@=W5>M`bP0 Hl+XkKx9r(C delta 630 zcmdnTdx3X?HaFi91_r((j8nDwq&J%NGT9lJ>KdAb7#docT38tvYa19@85k%jROA*| z`KFd6rX-dmx+IpQ+A0|t7#ZkdD4xv7T&7}~lwx6FlA5e*Zf23FYiwp>qMKx7YNTsv zkYt`@YLse_W}Gy6HnR+I3U4#35T{U?C5$+Qb6NJ*S7_$^Wnf^8@^ox{I-}l7F$0!sDd|&gZSTnno>O?P&@TRfOa;@dh1b7I%O+GmVOzyF z;T&HD+d3zPD8~A;$JrhjGp_4r33V!qP#piTN8F1H-aNj^%R{$`~5T z9~?6}z}V!<&=78~w3cZ?jd}>z1HDY6^>Y6u6WC2wvwXPy%e(3t3 diff --git a/src/js/changelog.js b/src/js/changelog.js index c0ef3e66..6fdb3f09 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -13,6 +13,7 @@ export const CHANGELOG = [ "Add button to unpin shapes from the left side (by artemisSystem)", "Fix middle mouse button also placing blueprints (by Eiim)", "Hide wires grid when using the 'Disable Grid' setting (by EmeraldBlock)", + "Fix UI using multiple different save icons", "Updated translations (Thanks to all contributors!)", ], }, From 90eb088e760bdb1e1edd2fabfea74a8d2f69d63e Mon Sep 17 00:00:00 2001 From: Fernando Zanutto Date: Mon, 7 Dec 2020 15:31:27 -0300 Subject: [PATCH 068/127] Update base-pt-BR.yaml (#1013) --- translations/base-pt-BR.yaml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index 7f702a5c..bf215706 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -313,19 +313,19 @@ ingame: esteiras para concluir o objetivo mais rapidamente.

Dica, segure SHIFT para colocar vários extratores e use R para girá-los. - 2_1_place_cutter: "Now place a Cutter to cut the circles in two - halves!

PS: The cutter always cuts from top to - bottom regardless of its orientation." - 2_2_place_trash: The cutter can clog and stall!

Use a - trash to get rid of the currently (!) not - needed waste. - 2_3_more_cutters: "Good job! Now place 2 more cutters to speed - up this slow process!

PS: Use the 0-9 - hotkeys to access buildings faster!" - 3_1_rectangles: "Now let's extract some rectangles! Build 4 - extractors and connect them to the hub.

PS: - Hold SHIFT while dragging a belt to activate - the belt planner!" + 2_1_place_cutter: "Agora coloque um Cortador para cortar os círculos em duas + metades!

PS: O cortador sempre corta de cima para + baixo independentemente de sua orientação." + 2_2_place_trash: O cortador pode emtupir e parar!

Use um + lixo para se livrar do que atualmente (!) não for + necessário. + 2_3_more_cutters: "Bom trabalho! Agora coloque mais 2 cortadores para acelerar + este processo lento!

PS: Use as hotkeys 0-9 + para acessar as construções mais rápido!" + 3_1_rectangles: "Vamos extrair alguns retângulos! Construa 4 + extratores e conecte-os ao hub.

PS: + Segure SHIFT enquanto arrasta a esteira para ativar o + planejador de esteiras!" 21_1_place_quad_painter: Place the quad painter and get some circles, white and red color! @@ -440,7 +440,7 @@ buildings: name: Rotacionador (Anti-horário) description: Gira as formas no sentido anti-horário em 90 graus. rotate180: - name: Rotacionador (180) + name: Rotacionador (180°) description: Gira as formas em 180 graus. stacker: default: @@ -701,7 +701,7 @@ storyRewards: você meça a passagem de itens em uma esteira.

Espere até você desbloquear os fios - ele se torna muito útil! reward_rotater_180: - title: Rotacionador (180 graus) + title: Rotacionador (180°) desc: Você acabou de desbloquear o rotacionador de 180 graus! - Ele permite que você rotacione uma forma em 180 graus (Surpresa! :D) reward_display: From 46e53244d4440c4cd7f514c20e66f0ad8b932c10 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 19:37:55 +0100 Subject: [PATCH 069/127] display version in main menu --- src/css/states/main_menu.scss | 16 +++++++++------- src/js/states/main_menu.js | 2 +- 2 files changed, 10 insertions(+), 8 deletions(-) diff --git a/src/css/states/main_menu.scss b/src/css/states/main_menu.scss index cf0ab718..008bd30d 100644 --- a/src/css/states/main_menu.scss +++ b/src/css/states/main_menu.scss @@ -94,9 +94,11 @@ } .standaloneBanner { - background: rgb(255, 234, 245); - @include S(border-radius, $globalBorderRadius); + background: rgb(255, 75, 84); + @include S(border-radius, $globalBorderRadius + 4); box-sizing: border-box; + border: solid rgba(#fff, 0.15); + @include S(border-width, 4px); @include S(padding, 15px); display: flex; @@ -110,13 +112,14 @@ h3 { @include Heading; font-weight: bold; - @include S(margin-bottom, 5px); + @include S(margin-bottom, 20px); text-transform: uppercase; - color: $colorRedBright; + color: #fff; } p { @include Text; + color: #fff; } ul { @@ -138,7 +141,7 @@ display: block; text-indent: -999em; cursor: pointer; - @include S(margin-top, 20px); + @include S(margin-top, 30px); pointer-events: all; transition: all 0.12s ease-in; transition-property: opacity, transform; @@ -181,9 +184,8 @@ .updateLabel { position: absolute; transform: translateX(50%) rotate(-5deg); - color: $colorRedBright; + color: rgb(231, 78, 58); @include Heading; - text-transform: uppercase; font-weight: bold; @include S(right, 40px); @include S(bottom, 20px); diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index fa177874..dc8d30ce 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -59,7 +59,7 @@ export class MainMenuState extends GameState {
From 22735591e9905e77f850528bbf25a96e5653f771 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 7 Dec 2020 20:14:23 +0100 Subject: [PATCH 070/127] Minor hotfixes --- src/js/game/hud/parts/blueprint_placer.js | 1 + src/js/game/hud/parts/constant_signal_edit.js | 3 --- 2 files changed, 1 insertion(+), 3 deletions(-) diff --git a/src/js/game/hud/parts/blueprint_placer.js b/src/js/game/hud/parts/blueprint_placer.js index b70fb82a..54e2e3b7 100644 --- a/src/js/game/hud/parts/blueprint_placer.js +++ b/src/js/game/hud/parts/blueprint_placer.js @@ -126,6 +126,7 @@ export class HUDBlueprintPlacer extends BaseHUDPart { this.root.hubGoals.takeShapeByKey(this.root.gameMode.getBlueprintShapeKey(), cost); this.root.soundProxy.playUi(SOUNDS.placeBuilding); } + return STOP_PROPAGATION; } } diff --git a/src/js/game/hud/parts/constant_signal_edit.js b/src/js/game/hud/parts/constant_signal_edit.js index b030ac52..59115e62 100644 --- a/src/js/game/hud/parts/constant_signal_edit.js +++ b/src/js/game/hud/parts/constant_signal_edit.js @@ -23,9 +23,6 @@ export class HUDConstantSignalEdit extends BaseHUDPart { deleteOnCancel: false, }); return STOP_PROPAGATION; - } else if (button === enumMouseButton.right) { - this.root.logic.tryDeleteBuilding(contents); - return STOP_PROPAGATION; } } } From aa2b64eae58027dfc43a9b0b9626649751d36f18 Mon Sep 17 00:00:00 2001 From: tobspr Date: Wed, 9 Dec 2020 10:41:49 +0100 Subject: [PATCH 071/127] Fix items overlapping sometimes, fix constant signal being editable --- gulp/steampipe/upload.bat | 2 +- src/js/changelog.js | 8 +++ src/js/game/hud/parts/constant_signal_edit.js | 4 ++ src/js/game/systems/item_ejector.js | 51 +++++++++++++++++-- 4 files changed, 60 insertions(+), 5 deletions(-) diff --git a/gulp/steampipe/upload.bat b/gulp/steampipe/upload.bat index de461069..86dcf926 100644 --- a/gulp/steampipe/upload.bat +++ b/gulp/steampipe/upload.bat @@ -1,4 +1,4 @@ @echo off -cmd /c gulp standalone.prepareVDF +cmd /c yarn gulp standalone.prepareVDF steamcmd +login %STEAM_UPLOAD_SHAPEZ_ID% %STEAM_UPLOAD_SHAPEZ_USER% +run_app_build %cd%/scripts/app.vdf +quit start https://partner.steamgames.com/apps/builds/1318690 diff --git a/src/js/changelog.js b/src/js/changelog.js index 6fdb3f09..60df26cf 100644 --- a/src/js/changelog.js +++ b/src/js/changelog.js @@ -1,4 +1,12 @@ export const CHANGELOG = [ + { + version: "1.2.3", + date: "unreleased", + entries: [ + "Fixed constant signals being editable from the regular layer", + "Fixed items still overlapping sometimes between buildings and belts", + ], + }, { version: "1.2.2", date: "07.12.2020", diff --git a/src/js/game/hud/parts/constant_signal_edit.js b/src/js/game/hud/parts/constant_signal_edit.js index 59115e62..283c7619 100644 --- a/src/js/game/hud/parts/constant_signal_edit.js +++ b/src/js/game/hud/parts/constant_signal_edit.js @@ -13,6 +13,10 @@ export class HUDConstantSignalEdit extends BaseHUDPart { * @param {enumMouseButton} button */ downPreHandler(pos, button) { + if (this.root.currentLayer !== "wires") { + return; + } + const tile = this.root.camera.screenToWorld(pos).toTileSpace(); const contents = this.root.map.getLayerContentXY(tile.x, tile.y, "wires"); if (contents) { diff --git a/src/js/game/systems/item_ejector.js b/src/js/game/systems/item_ejector.js index 6bbb42ce..a4484795 100644 --- a/src/js/game/systems/item_ejector.js +++ b/src/js/game/systems/item_ejector.js @@ -332,10 +332,53 @@ export class ItemEjectorSystem extends GameSystemWithFilter { let progress = slot.progress; const nextBeltPath = slot.cachedBeltPath; if (nextBeltPath) { - progress = Math.min( - progress, - nextBeltPath.spacingToFirstItem / globalConfig.itemSpacingOnBelts - ); + /* + If you imagine the track between the center of the building and the center of the first belt as + a range from 0 to 1: + + Building Belt + | X | X | + | 0...................1 | + + And for example the first item on belt has a distance of 0.4 to the beginning of the belt: + + Building Belt + | X | X | + | 0...................1 | + ^ item + + Then the space towards this first item is always 0.5 (the distance from the center of the building to the beginning of the belt) + PLUS the spacing to the item, so in this case 0.5 + 0.4 = 0.9: + + Building Belt + | X | X | + | 0...................1 | + ^ item @ 0.9 + + Since items must not get clashed, we need to substract some spacing (lets assume it is 0.6, exact value see globalConfig.itemSpacingOnBelts), + So we do 0.9 - globalConfig.itemSpacingOnBelts = 0.3 + + Building Belt + | X | X | + | 0...................1 | + ^ ^ item @ 0.9 + ^ max progress = 0.3 + + Because now our range actually only goes to the end of the building, and not towards the center of the building, we need to multiply + all values by 2: + + Building Belt + | X | X | + | 0.........1.........2 | + ^ ^ item @ 1.8 + ^ max progress = 0.6 + + And that's it! If you summarize the calculations from above into a formula, you get the one below. + */ + + const maxProgress = + (0.5 + nextBeltPath.spacingToFirstItem - globalConfig.itemSpacingOnBelts) * 2; + progress = Math.min(maxProgress, progress); } // Skip if the item would barely be visible From 117afd329188d44707cc62510d3381fd877ea744 Mon Sep 17 00:00:00 2001 From: Mironov Danil <71277890+mironovmeow@users.noreply.github.com> Date: Wed, 9 Dec 2020 16:44:59 +0700 Subject: [PATCH 072/127] Update base-ru.yaml (#1019) Changes in tips: 1 typo, removed 1 English phrase (this phrase was in Russian here) and some other changes. --- translations/base-ru.yaml | 7 +++---- 1 file changed, 3 insertions(+), 4 deletions(-) diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 94ee3921..c103ea3f 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -1037,7 +1037,7 @@ tips: - Чтобы получить белый цвет, смешайте все три цвета. - Удерживание SHIFT активирует планировщик конвейеров, что упрощает простройку длинных конвейеров. - Вкладывайте время в строительство повторяемых механизмов - оно того стоит! - - Смешайте все три цвета для получения булого. + - Смешайте все три цвета для получения белого. - Буффер хранилища с большим приоритетом выдаёт на левый выход. - Эффективность - ключ к успеху! - Удерживание CTRL даёт возможность размещения нескольких построек. @@ -1060,8 +1060,7 @@ tips: - С модулями теряется восприятие пространства; забота смертных. - Создайте отдельную фабрику чертежей. Они очень важны для модулей. - Взгляните внимательнее на смешиватель и вы найдете ответы на свои вопросы. - - With modules, space is merely a perception; a concern for mortal men. - - Строительство вблизи ХАБ-а может помешать будущим проектам. + - Строительство вблизи ХАБ-а может помешать будущим фабрикам. - Иконка булавки на каждой фигуре закрепляет ее на экране. - Используйте CTRL + ЛКМ для выбора области. - В вашем распоряжении бесконечная карта! Не загромождайте вашу фабрику, @@ -1073,7 +1072,7 @@ tips: - В этой игре множество полезных комбинаций клавиш. Загляните в настройки, чтобы ознакомиться с ними. - В этой игре множество настроек, не забудьте с ними ознакомиться. - - Маркер ХАБ-а имеет небольшой компас, указывающий его направление. + - Маркер ХАБ-а имеет небольшой компас, указывающий его местоположение. - Нажмите F4, чтобы показать FPS и Частоту Обновления. - Нажмите F4 дважды, чтобы показать координаты курсора и камеры. - Вы можете нажать на закрепленную фигуру слева, чтобы открепить ее. From c9cee9d22bf29d5952feebe8e345a31bad597b9e Mon Sep 17 00:00:00 2001 From: tobspr Date: Wed, 9 Dec 2020 14:03:53 +0100 Subject: [PATCH 073/127] Fix typo --- translations/base-ar.yaml | 4 ++-- translations/base-da.yaml | 4 ++-- translations/base-el.yaml | 4 ++-- translations/base-hr.yaml | 4 ++-- translations/base-lt.yaml | 4 ++-- translations/base-no.yaml | 4 ++-- translations/base-ro.yaml | 4 ++-- translations/base-sl.yaml | 4 ++-- translations/base-sr.yaml | 4 ++-- 9 files changed, 18 insertions(+), 18 deletions(-) diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml index 305c9b88..50930b18 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -689,8 +689,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-da.yaml b/translations/base-da.yaml index 44293fdd..3d461d0e 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -693,8 +693,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-el.yaml b/translations/base-el.yaml index ec0df592..a09deaba 100644 --- a/translations/base-el.yaml +++ b/translations/base-el.yaml @@ -715,8 +715,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-hr.yaml b/translations/base-hr.yaml index ae62d58c..58975261 100644 --- a/translations/base-hr.yaml +++ b/translations/base-hr.yaml @@ -685,8 +685,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml index f69bbc03..f03bd1d0 100644 --- a/translations/base-lt.yaml +++ b/translations/base-lt.yaml @@ -688,8 +688,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-no.yaml b/translations/base-no.yaml index 8ab3a2a7..092379e6 100644 --- a/translations/base-no.yaml +++ b/translations/base-no.yaml @@ -702,8 +702,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index 1dd87f08..82771831 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -704,8 +704,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml index 907aa1f5..83d0c863 100644 --- a/translations/base-sl.yaml +++ b/translations/base-sl.yaml @@ -691,8 +691,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml index 35f2c8ca..5682a398 100644 --- a/translations/base-sr.yaml +++ b/translations/base-sr.yaml @@ -689,8 +689,8 @@ storyRewards: wires - then it gets really useful! reward_rotater_180: title: Rotater (180 degrees) - desc: You just unlocked the 180 degress rotater! - It allows - you to rotate a shape by 180 degress (Surprise! :D) + desc: You just unlocked the 180 degrees rotater! - It allows + you to rotate a shape by 180 degrees (Surprise! :D) reward_display: title: Display desc: "You have unlocked the Display - Connect a signal on the From b41a0ca1cb29b9b6b6b676638374a01ab06021bc Mon Sep 17 00:00:00 2001 From: Citron Date: Thu, 10 Dec 2020 11:53:45 -0300 Subject: [PATCH 074/127] Minor translation fix (#1022) * Update base-pt-BR.yaml Typo fix * Update base-pt-BR.yaml Minor translations and a typo fix. * Update base-pt-BR.yaml Removed untranslated text --- translations/base-pt-BR.yaml | 16 +++++++--------- 1 file changed, 7 insertions(+), 9 deletions(-) diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index bf215706..db4bb0ab 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -586,7 +586,7 @@ buildings: entrada direita. item_producer: default: - name: Fábricante de Itens + name: Fabricante de Itens description: Disponível no modo sandbox apenas, envia o sinal recebido do plano de fios para o plano regular. storyRewards: @@ -657,7 +657,7 @@ storyRewards: title: Armazém desc: Você desbloqueou o armazém - Permite que você armazene itens até uma certa capacidade!

Ele prioriza a saída - da esquerda, para que você tambpem possa usá-lo como um portão de excesso! + da esquerda, para que você também possa usá-lo como um portão de excesso! reward_freeplay: title: Modo Livre desc: Você conseguiu! Você desbloqueou o modo livre! Isso @@ -917,17 +917,15 @@ settings: description: Permite mover o mapa ao mover o cursor para as bordas da tela. A velocidade depende da configuração Velocidade de Movimento. zoomToCursor: - title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + title: Zoom na direção do cursor + description: Se ativado, o zoom irá se deslocar na direção do cursor do seu mouse. Caso contrário, irá para o meio da tela. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Tamanho do Mapa de Recursos + description: Controla o tamanho das formas no mapa de panorama (quando afasta o zoom). rangeSliderPercentage: % keybindings: title: Controles - hint: "Tip: Certifique-se de usar CTRL, SHIFT e ALT! Eles permitem diferentes + hint: "Dica: Certifique-se de usar CTRL, SHIFT e ALT! Eles permitem diferentes opções de construção." resetKeybindings: Resetar Controles categoryLabels: From 9b5811b8743e5d572529df52c79003c302e2b681 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?imreallybadatnames=E2=84=A2=EF=B8=8F?= <68000899+imreallybadatnames@users.noreply.github.com> Date: Mon, 21 Dec 2020 20:49:35 +1100 Subject: [PATCH 075/127] fix "banancer" typo (#1030) * fix "banancer" typo * fix confusion "and output everything else on the right" changed from "right" to "left" like in the original text * translate logic gate names --- translations/base-ru.yaml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index c103ea3f..bb77dfc9 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -511,20 +511,20 @@ buildings: Фильтром, например. logic_gate: default: - name: AND Gate + name: И description: Издает значение "1" если оба входа положительны. (Положительный - значит ресурс, цвет или логическое значение "1") not: - name: NOT Gate + name: НЕ description: Издает значение "1" если вход не положительный. (Положительный - значит ресурс, цвет или логическое значение "1") xor: - name: XOR Gate + name: Исключающее ИЛИ description: Издает значение "1" только один из входов положительный. (Положительный - значит ресурс, цвет или логическое значение "1") or: - name: OR Gate + name: ИЛИ description: Издает значение "1" если хотя бы один вход положительный. (Положительный - значит ресурс, цвет или логическое значение "1"). @@ -565,7 +565,7 @@ buildings: unstacker: name: Виртуальный Разъединитель description: Виртуально извлекает самый верхний слой фигуры направо, а все - остальное направо. + остальное налево. stacker: name: Виртуальный Объединитель description: Виртуально помещает правый предмет поверх левого. @@ -683,7 +683,7 @@ storyRewards: reward_balancer: title: Балансер desc: - Многофункциональный банансер разблокирован - Он используется для разделения и обьединения + Многофункциональный балансер разблокирован - Он используется для разделения и обьединения потора предметов на несколько конвейеров! reward_merger: title: Компактный Соединитель From b51c0fdbd43ac3f5be9c7bff9e241091ca542e68 Mon Sep 17 00:00:00 2001 From: dengr1065 Date: Fri, 25 Dec 2020 23:57:57 +0200 Subject: [PATCH 076/127] Replace gulp-sass with gulp-dart-sass (#1036) --- gulp/css.js | 4 +- gulp/package.json | 2 +- gulp/yarn.lock | 258 +++++++++------------------------------- src/css/animations.scss | 24 ++-- 4 files changed, 77 insertions(+), 211 deletions(-) diff --git a/gulp/css.js b/gulp/css.js index 73a0a7cf..2b51f153 100644 --- a/gulp/css.js +++ b/gulp/css.js @@ -62,7 +62,7 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) { return gulp .src("../src/css/main.scss", { cwd: __dirname }) .pipe($.plumber()) - .pipe($.sass.sync().on("error", $.sass.logError)) + .pipe($.dartSass.sync().on("error", $.dartSass.logError)) .pipe( $.postcss([ $.postcssCriticalSplit({ @@ -95,7 +95,7 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) { return gulp .src("../src/css/main.scss", { cwd: __dirname }) .pipe($.plumber()) - .pipe($.sass.sync().on("error", $.sass.logError)) + .pipe($.dartSass.sync().on("error", $.dartSass.logError)) .pipe( $.postcss([ $.postcssCriticalSplit({ diff --git a/gulp/package.json b/gulp/package.json index 90dc5501..28a83253 100644 --- a/gulp/package.json +++ b/gulp/package.json @@ -77,6 +77,7 @@ "gulp-cache": "^1.1.3", "gulp-cached": "^1.1.1", "gulp-clean": "^0.4.0", + "gulp-dart-sass": "^1.0.2", "gulp-dom": "^1.0.0", "gulp-flatten": "^0.4.0", "gulp-fluent-ffmpeg": "^2.0.0", @@ -90,7 +91,6 @@ "gulp-pngquant": "^1.0.13", "gulp-postcss": "^8.0.0", "gulp-rename": "^2.0.0", - "gulp-sass": "^4.1.0", "gulp-sass-lint": "^1.4.0", "gulp-sftp": "git+https://git@github.com/webksde/gulp-sftp", "gulp-terser": "^1.2.0", diff --git a/gulp/yarn.lock b/gulp/yarn.lock index c172cbab..12959102 100644 --- a/gulp/yarn.lock +++ b/gulp/yarn.lock @@ -1816,11 +1816,6 @@ async-each@^1.0.1: resolved "https://registry.yarnpkg.com/async-each/-/async-each-1.0.3.tgz#b727dbf87d7651602f06f4d4ac387f47d91b0cbf" integrity sha512-z/WhQ5FPySLdvREByI2vZiTWwCnF0moMJ1hK9YQwDTHKh6I7/uSckMetoRGb5UBZPC1z0jlw+n/XCgjeH7y1AQ== -async-foreach@^0.1.3: - version "0.1.3" - resolved "https://registry.yarnpkg.com/async-foreach/-/async-foreach-0.1.3.tgz#36121f845c0578172de419a97dbeb1d16ec34542" - integrity sha1-NhIfhFwFeBct5Bmpfb6x0W7DRUI= - async-limiter@~1.0.0: version "1.0.1" resolved "https://registry.yarnpkg.com/async-limiter/-/async-limiter-1.0.1.tgz#dd379e94f0db8310b08291f9d64c3209766617fd" @@ -2261,13 +2256,6 @@ blob@0.0.5: resolved "https://registry.yarnpkg.com/blob/-/blob-0.0.5.tgz#d680eeef25f8cd91ad533f5b01eed48e64caf683" integrity sha512-gaqbzQPqOoamawKg0LGVd7SzLgXS+JH61oWprSLH+P+abTczqJbhTR8CmJ2u9/bUYNmHTGJx/UEmn6doAvvuig== -block-stream@*: - version "0.0.9" - resolved "https://registry.yarnpkg.com/block-stream/-/block-stream-0.0.9.tgz#13ebfe778a03205cfe03751481ebb4b3300c126a" - integrity sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo= - dependencies: - inherits "~2.0.0" - bluebird@3.x.x, bluebird@^3.1.1, bluebird@^3.4.6, bluebird@^3.5.0, bluebird@^3.5.5: version "3.5.5" resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.5.5.tgz#a8d0afd73251effbbd5fe384a77d73003c17a71f" @@ -2821,6 +2809,21 @@ chardet@^0.7.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e" integrity sha512-mT8iDcrh03qDGRRmoA2hmBJnxpllMR+0/0qlzjqZES6NdiWDcZkCNAk4rPFZ9Q85r27unkiNNg8ZOiwZXBHwcA== +"chokidar@>=2.0.0 <4.0.0": + version "3.4.3" + resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-3.4.3.tgz#c1df38231448e45ca4ac588e6c79573ba6a57d5b" + integrity sha512-DtM3g7juCXQxFVSNPNByEC2+NImtBuxQQvWlHunpJIS5Ocr0lG306cC7FCi7cEA0fzmybPUIl4txBIobk1gGOQ== + dependencies: + anymatch "~3.1.1" + braces "~3.0.2" + glob-parent "~5.1.0" + is-binary-path "~2.1.0" + is-glob "~4.0.1" + normalize-path "~3.0.0" + readdirp "~3.5.0" + optionalDependencies: + fsevents "~2.1.2" + chokidar@^2.0.0, chokidar@^2.1.8: version "2.1.8" resolved "https://registry.yarnpkg.com/chokidar/-/chokidar-2.1.8.tgz#804b3a7b6a99358c3c5c61e71d8728f041cff917" @@ -3390,14 +3393,6 @@ cross-spawn@6.0.5, cross-spawn@^6.0.0, cross-spawn@^6.0.5: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-3.0.1.tgz#1256037ecb9f0c5f79e3d6ef135e30770184b982" - integrity sha1-ElYDfsufDF9549bvE14wdwGEuYI= - dependencies: - lru-cache "^4.0.1" - which "^1.2.9" - cross-spawn@^5.0.1: version "5.1.0" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-5.1.0.tgz#e8bd0efee58fcff6f8f94510a0a554bbfa235449" @@ -5404,16 +5399,6 @@ fsevents@~2.1.2: resolved "https://registry.yarnpkg.com/fsevents/-/fsevents-2.1.3.tgz#fb738703ae8d2f9fe900c33836ddebee8b97f23e" integrity sha512-Auw9a4AxqWpa9GUfj370BMPzzyncfBABW8Mab7BGWBYDj4Isgq+cDKtx0i6u9jcX9pQDnswsaaOTgTmA5pEjuQ== -fstream@^1.0.0, fstream@^1.0.12: - version "1.0.12" - resolved "https://registry.yarnpkg.com/fstream/-/fstream-1.0.12.tgz#4e8ba8ee2d48be4f7d0de505455548eae5932045" - integrity sha512-WvJ193OHa0GHPEL+AycEJgxvBEwyfRkN1vhjca23OaPVMCaLCXTd5qAu82AjTcgP1UJmytkOKb63Ypde7raDIg== - dependencies: - graceful-fs "^4.1.2" - inherits "~2.0.0" - mkdirp ">=0.5 0" - rimraf "2" - function-bind@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" @@ -5454,13 +5439,6 @@ gaze@^0.5.1: dependencies: globule "~0.1.0" -gaze@^1.0.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/gaze/-/gaze-1.1.3.tgz#c441733e13b927ac8c0ff0b4c3b033f28812924a" - integrity sha512-BRdNm8hbWzFzWHERTrejLqwHDfS4GibPoq5wjTPIoJHoBtKGPg3xAFfxmM+9ztbXelxcf2hwQcaz1PtmFeue8g== - dependencies: - globule "^1.0.0" - generate-function@^2.0.0: version "2.3.1" resolved "https://registry.yarnpkg.com/generate-function/-/generate-function-2.3.1.tgz#f069617690c10c868e73b8465746764f97c3479f" @@ -5959,6 +5937,20 @@ gulp-cli@^2.2.0: v8flags "^3.2.0" yargs "^7.1.0" +gulp-dart-sass@^1.0.2: + version "1.0.2" + resolved "https://registry.yarnpkg.com/gulp-dart-sass/-/gulp-dart-sass-1.0.2.tgz#20e33c236b48d557c91e8dfe67a2aef2b8a2e328" + integrity sha512-8fLttA824mbuc0jRVlGs00zWYZXBckat6INawx5kp66Eqsz5srNWTA51t0mbfB4C8a/a/GZ9muYLwXGklgAHlw== + dependencies: + chalk "^2.3.0" + lodash.clonedeep "^4.3.2" + plugin-error "^1.0.1" + replace-ext "^1.0.0" + sass "^1.26.3" + strip-ansi "^4.0.0" + through2 "^2.0.0" + vinyl-sourcemaps-apply "^0.2.0" + gulp-dom@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/gulp-dom/-/gulp-dom-1.0.0.tgz#f834d5299c09b85e11c32505044a2ebe86ae1375" @@ -6112,20 +6104,6 @@ gulp-sass-lint@^1.4.0: sass-lint "^1.12.0" through2 "^2.0.2" -gulp-sass@^4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/gulp-sass/-/gulp-sass-4.1.0.tgz#486d7443c32d42bf31a6b1573ebbdaa361de7427" - integrity sha512-xIiwp9nkBLcJDpmYHbEHdoWZv+j+WtYaKD6Zil/67F3nrAaZtWYN5mDwerdo7EvcdBenSAj7Xb2hx2DqURLGdA== - dependencies: - chalk "^2.3.0" - lodash "^4.17.11" - node-sass "^4.8.3" - plugin-error "^1.0.1" - replace-ext "^1.0.0" - strip-ansi "^4.0.0" - through2 "^2.0.0" - vinyl-sourcemaps-apply "^0.2.0" - "gulp-sftp@git+https://git@github.com/webksde/gulp-sftp": version "0.1.6" resolved "git+https://git@github.com/webksde/gulp-sftp#c8dfb20e290477eeed66a867406576d0c3d4fc6b" @@ -6712,11 +6690,6 @@ imurmurhash@^0.1.4: resolved "https://registry.yarnpkg.com/imurmurhash/-/imurmurhash-0.1.4.tgz#9218b9b2b928a238b13dc4fb6b6d576f231453ea" integrity sha1-khi5srkoojixPcT7a21XbyMUU+o= -in-publish@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/in-publish/-/in-publish-2.0.0.tgz#e20ff5e3a2afc2690320b6dc552682a9c7fadf51" - integrity sha1-4g/146KvwmkDILbcVSaCqcf631E= - indent-string@^2.1.0: version "2.1.0" resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-2.1.0.tgz#8e2d48348742121b4a8218b7a137e9a52049dc80" @@ -6752,7 +6725,7 @@ inherits@1: resolved "https://registry.yarnpkg.com/inherits/-/inherits-1.0.2.tgz#ca4309dadee6b54cc0b8d247e8d7c7a0975bdc9b" integrity sha1-ykMJ2t7mtUzAuNJH6NfHoJdb3Js= -inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.0, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: +inherits@2, inherits@2.0.4, inherits@^2.0.1, inherits@^2.0.3, inherits@~2.0.1, inherits@~2.0.3, inherits@~2.0.4: version "2.0.4" resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== @@ -7296,7 +7269,7 @@ jpegtran-bin@^5.0.0: bin-wrapper "^4.0.0" logalot "^2.0.0" -js-base64@^2.1.8, js-base64@^2.1.9: +js-base64@^2.1.9: version "2.5.1" resolved "https://registry.yarnpkg.com/js-base64/-/js-base64-2.5.1.tgz#1efa39ef2c5f7980bb1784ade4a8af2de3291121" integrity sha512-M7kLczedRMYX4L8Mdh4MzyAMM9O5osx+4FcOQuTvr3A9F2D9S5JXheN0ewNbrvK2UatkTRhL5ejGmGSjNMiZuw== @@ -8234,7 +8207,7 @@ memory-fs@^0.4.0, memory-fs@^0.4.1: errno "^0.1.3" readable-stream "^2.0.1" -meow@^3.3.0, meow@^3.7.0: +meow@^3.3.0: version "3.7.0" resolved "https://registry.yarnpkg.com/meow/-/meow-3.7.0.tgz#72cb668b425228290abbfa856892587308a801fb" integrity sha1-cstmi0JSKCkKu/qFaJJYcwioAfs= @@ -8495,7 +8468,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@0.5.1, "mkdirp@>=0.5 0", mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: +mkdirp@0.5.1, mkdirp@^0.5.0, mkdirp@^0.5.1, mkdirp@~0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -8572,7 +8545,7 @@ mute-stream@~0.0.4: resolved "https://registry.yarnpkg.com/mute-stream/-/mute-stream-0.0.8.tgz#1630c42b2251ff81e2a283de96a5497ea92e5e0d" integrity sha512-nnbWWOkoWyUsTjKrhgD0dcz22mdkSnpYqbEjIm2nhwhuxlSkpywJmBo8h0ZqJdkp73mb90SssHkN4rsRaBAfAA== -nan@^2.12.1, nan@^2.13.2: +nan@^2.12.1: version "2.14.0" resolved "https://registry.yarnpkg.com/nan/-/nan-2.14.0.tgz#7818f722027b2459a86f0295d434d1fc2336c52c" integrity sha512-INOFj37C7k3AfaNTtX8RhsTw7qRy7eLET14cROi9+5HAVbbHuIWUHEauBv5qT4Av2tWasiTY1Jw6puUNqRJXQg== @@ -8645,24 +8618,6 @@ no-case@^2.2.0: dependencies: lower-case "^1.1.1" -node-gyp@^3.8.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/node-gyp/-/node-gyp-3.8.0.tgz#540304261c330e80d0d5edce253a68cb3964218c" - integrity sha512-3g8lYefrRRzvGeSowdJKAKyks8oUpLEd/DyPV4eMhVlhJ0aNaZqIrNUIPuEWWTAoPqyFkfGrM67MC69baqn6vA== - dependencies: - fstream "^1.0.0" - glob "^7.0.3" - graceful-fs "^4.1.2" - mkdirp "^0.5.0" - nopt "2 || 3" - npmlog "0 || 1 || 2 || 3 || 4" - osenv "0" - request "^2.87.0" - rimraf "2" - semver "~5.3.0" - tar "^2.0.0" - which "1" - node-libs-browser@^2.2.1: version "2.2.1" resolved "https://registry.yarnpkg.com/node-libs-browser/-/node-libs-browser-2.2.1.tgz#b64f513d18338625f90346d27b0d235e631f6425" @@ -8715,29 +8670,6 @@ node-releases@^1.1.29: dependencies: semver "^5.3.0" -node-sass@^4.8.3: - version "4.12.0" - resolved "https://registry.yarnpkg.com/node-sass/-/node-sass-4.12.0.tgz#0914f531932380114a30cc5fa4fa63233a25f017" - integrity sha512-A1Iv4oN+Iel6EPv77/HddXErL2a+gZ4uBeZUy+a8O35CFYTXhgA8MgLCWBtwpGZdCvTvQ9d+bQxX/QC36GDPpQ== - dependencies: - async-foreach "^0.1.3" - chalk "^1.1.1" - cross-spawn "^3.0.0" - gaze "^1.0.0" - get-stdin "^4.0.1" - glob "^7.0.3" - in-publish "^2.0.0" - lodash "^4.17.11" - meow "^3.7.0" - mkdirp "^0.5.1" - nan "^2.13.2" - node-gyp "^3.8.0" - npmlog "^4.0.0" - request "^2.88.0" - sass-graph "^2.2.4" - stdout-stream "^1.4.0" - "true-case-path" "^1.0.2" - node-sri@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/node-sri/-/node-sri-1.1.1.tgz#041096d2b11f232b65dedc4c3ae1cb62babb54b0" @@ -8751,13 +8683,6 @@ node.extend@^1.0.10: has "^1.0.3" is "^3.2.1" -"nopt@2 || 3": - version "3.0.6" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-3.0.6.tgz#c6465dbf08abcd4db359317f79ac68a646b28ff9" - integrity sha1-xkZdvwirzU2zWTF/eaxopkayj/k= - dependencies: - abbrev "1" - nopt@^4.0.1, nopt@~4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" @@ -8854,7 +8779,7 @@ npm-run-path@^4.0.0: dependencies: path-key "^3.0.0" -"npmlog@0 || 1 || 2 || 3 || 4", npmlog@^4.0.0, npmlog@^4.0.2: +npmlog@^4.0.2: version "4.1.2" resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== @@ -9165,7 +9090,7 @@ os-tmpdir@^1.0.0, os-tmpdir@^1.0.1, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@0, osenv@^0.1.4: +osenv@^0.1.4: version "0.1.5" resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== @@ -10786,6 +10711,13 @@ readdirp@~3.4.0: dependencies: picomatch "^2.2.1" +readdirp@~3.5.0: + version "3.5.0" + resolved "https://registry.yarnpkg.com/readdirp/-/readdirp-3.5.0.tgz#9ba74c019b15d365278d2e91bb8c48d7b4d42c9e" + integrity sha512-cMhu7c/8rdhkHXWsY+osBhfSy0JikwpHK/5+imo+LpeasTF8ouErHrlYkwT0++njiyuDvc7OFY5T3ukvZ8qmFQ== + dependencies: + picomatch "^2.2.1" + readline2@^1.0.1: version "1.0.1" resolved "https://registry.yarnpkg.com/readline2/-/readline2-1.0.1.tgz#41059608ffc154757b715d9989d199ffbf372e35" @@ -10975,7 +10907,7 @@ request-promise-native@^1.0.5: stealthy-require "^1.1.1" tough-cookie "^2.3.3" -request@^2.87.0, request@^2.88.0: +request@^2.88.0: version "2.88.0" resolved "https://registry.yarnpkg.com/request/-/request-2.88.0.tgz#9c2fca4f7d35b592efe57c7f0a55e81052124fef" integrity sha512-NAqBSrijGLZdM0WZNsInLJpkJokL72XYjUpnB0iwsRgxh7dB6COrHnTBNwN0E+lHDAJzu7kLAkDeY08z2/A0hg== @@ -11136,13 +11068,6 @@ rgba-regex@^1.0.0: resolved "https://registry.yarnpkg.com/rgba-regex/-/rgba-regex-1.0.0.tgz#43374e2e2ca0968b0ef1523460b7d730ff22eeb3" integrity sha1-QzdOLiyglosO8VI0YLfXMP8i7rM= -rimraf@2, rimraf@^2.4.0, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: - version "2.7.1" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" - integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== - dependencies: - glob "^7.1.3" - rimraf@2.6.3, rimraf@~2.6.2: version "2.6.3" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab" @@ -11150,6 +11075,13 @@ rimraf@2.6.3, rimraf@~2.6.2: dependencies: glob "^7.1.3" +rimraf@^2.4.0, rimraf@^2.5.4, rimraf@^2.6.1, rimraf@^2.6.2, rimraf@^2.6.3: + version "2.7.1" + resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" + integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== + dependencies: + glob "^7.1.3" + rimraf@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.0.tgz#614176d4b3010b75e5c390eb0ee96f6dc0cebb9b" @@ -11249,16 +11181,6 @@ sanitize-filename@^1.6.0, sanitize-filename@^1.6.2: dependencies: truncate-utf8-bytes "^1.0.0" -sass-graph@^2.2.4: - version "2.2.4" - resolved "https://registry.yarnpkg.com/sass-graph/-/sass-graph-2.2.4.tgz#13fbd63cd1caf0908b9fd93476ad43a51d1e0b49" - integrity sha1-E/vWPNHK8JCLn9k0dq1DpR0eC0k= - dependencies: - glob "^7.0.0" - lodash "^4.0.0" - scss-tokenizer "^0.2.3" - yargs "^7.0.0" - sass-lint@^1.12.0: version "1.13.1" resolved "https://registry.yarnpkg.com/sass-lint/-/sass-lint-1.13.1.tgz#5fd2b2792e9215272335eb0f0dc607f61e8acc8f" @@ -11287,6 +11209,13 @@ sass-unused@^0.3.0: glob "^7.0.5" gonzales-pe "^4.2.3" +sass@^1.26.3: + version "1.30.0" + resolved "https://registry.yarnpkg.com/sass/-/sass-1.30.0.tgz#60bbbbaf76ba10117e61c6c24f00161c3d60610e" + integrity sha512-26EUhOXRLaUY7+mWuRFqGeGGNmhB1vblpTENO1Z7mAzzIZeVxZr9EZoaY1kyGLFWdSOZxRMAufiN2mkbO6dAlw== + dependencies: + chokidar ">=2.0.0 <4.0.0" + sax@>=0.6.0, sax@^1.2.4, sax@~1.2.4: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" @@ -11324,14 +11253,6 @@ schema-utils@^2.6.5: ajv "^6.12.0" ajv-keywords "^3.4.1" -scss-tokenizer@^0.2.3: - version "0.2.3" - resolved "https://registry.yarnpkg.com/scss-tokenizer/-/scss-tokenizer-0.2.3.tgz#8eb06db9a9723333824d3f5530641149847ce5d1" - integrity sha1-jrBtualyMzOCTT9VMGQRSYR85dE= - dependencies: - js-base64 "^2.1.8" - source-map "^0.4.2" - seek-bzip@^1.0.5: version "1.0.5" resolved "https://registry.yarnpkg.com/seek-bzip/-/seek-bzip-1.0.5.tgz#cfe917cb3d274bcffac792758af53173eb1fabdc" @@ -11373,11 +11294,6 @@ semver@^6.0.0, semver@^6.3.0: resolved "https://registry.yarnpkg.com/semver/-/semver-6.3.0.tgz#ee0a64c8af5e8ceea67687b133761e1becbd1d3d" integrity sha512-b39TBaTSfV6yBrapU89p5fKekE2m/NwnDocOVruQFS1/veMgdzuPcnOM34M6CwxW8jH/lxEa5rBoDeUwu5HHTw== -semver@~5.3.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/semver/-/semver-5.3.0.tgz#9b2ce5d3de02d17c6012ad326aa6b4d0cf54f94f" - integrity sha1-myzl094C0XxgEq0yaqa00M9U+U8= - send@0.16.2: version "0.16.2" resolved "https://registry.yarnpkg.com/send/-/send-0.16.2.tgz#6ecca1e0f8c156d141597559848df64730a6bbc1" @@ -11746,13 +11662,6 @@ source-map-url@^0.4.0: resolved "https://registry.yarnpkg.com/source-map-url/-/source-map-url-0.4.0.tgz#3e935d7ddd73631b97659956d55128e87b5084a3" integrity sha1-PpNdfd1zYxuXZZlW1VEo6HtQhKM= -source-map@^0.4.2: - version "0.4.4" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.4.4.tgz#eba4f5da9c0dc999de68032d8b4f76173652036b" - integrity sha1-66T12pwNyZneaAMti092FzZSA2s= - dependencies: - amdefine ">=0.0.4" - source-map@^0.5.0, source-map@^0.5.1, source-map@^0.5.3, source-map@^0.5.6, source-map@^0.5.7, source-map@~0.5.0: version "0.5.7" resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.5.7.tgz#8a039d2d1021d22d1ea14c80d8ea468ba2ef3fcc" @@ -11898,13 +11807,6 @@ statuses@~1.4.0: resolved "https://registry.yarnpkg.com/statuses/-/statuses-1.4.0.tgz#bb73d446da2796106efcc1b601a253d6c46bd087" integrity sha512-zhSCtt8v2NDrRlPQpCNtw/heZLtfUDqxBM1udqikb/Hbk52LK4nQSwr10u77iopCW5LsyHpuXS0GnEc48mLeew== -stdout-stream@^1.4.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/stdout-stream/-/stdout-stream-1.4.1.tgz#5ac174cdd5cd726104aa0c0b2bd83815d8d535de" - integrity sha512-j4emi03KXqJWcIeF8eIXkjMFN1Cmb8gUlDYGeBALLPo5qdyTfA9bOtl8m33lRoC+vFMkP3gl0WsDr6+gzxbbTA== - dependencies: - readable-stream "^2.0.1" - stealthy-require@^1.1.1: version "1.1.1" resolved "https://registry.yarnpkg.com/stealthy-require/-/stealthy-require-1.1.1.tgz#35b09875b4ff49f26a777e509b3090a3226bf24b" @@ -12335,15 +12237,6 @@ tar-stream@~0.4.0: readable-stream "^1.0.27-1" xtend "^4.0.0" -tar@^2.0.0: - version "2.2.2" - resolved "https://registry.yarnpkg.com/tar/-/tar-2.2.2.tgz#0ca8848562c7299b8b446ff6a4d60cdbb23edc40" - integrity sha512-FCEhQ/4rE1zYv9rYXJw/msRqsnmlje5jHP6huWeBZ704jUTy02c5AZyWujpMR1ax6mVw9NyJMfuK2CMDWVIfgA== - dependencies: - block-stream "*" - fstream "^1.0.12" - inherits "2" - tar@^4: version "4.4.11" resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.11.tgz#7ac09801445a3cf74445ed27499136b5240ffb73" @@ -12706,13 +12599,6 @@ trim@^0.0.1: resolved "https://registry.yarnpkg.com/trim/-/trim-0.0.1.tgz#5858547f6b290757ee95cccc666fb50084c460dd" integrity sha1-WFhUf2spB1fulczMZm+1AITEYN0= -"true-case-path@^1.0.2": - version "1.0.3" - resolved "https://registry.yarnpkg.com/true-case-path/-/true-case-path-1.0.3.tgz#f813b5a8c86b40da59606722b144e3225799f47d" - integrity sha512-m6s2OdQe5wgpFMC+pAJ+q9djG82O2jcHPOI6RNg1yy9rCYR+WD6Nbpl32fDpfC56nirdRy+opFa/Vk7HYhqaew== - dependencies: - glob "^7.1.2" - truncate-utf8-bytes@^1.0.0: version "1.0.2" resolved "https://registry.yarnpkg.com/truncate-utf8-bytes/-/truncate-utf8-bytes-1.0.2.tgz#405923909592d56f78a5818434b0b78489ca5f2b" @@ -13399,7 +13285,7 @@ which-module@^2.0.0: resolved "https://registry.yarnpkg.com/which-module/-/which-module-2.0.0.tgz#d9ef07dce77b9902b8a3a8fa4b31c3e3f7e6e87a" integrity sha1-2e8H3Od7mQK4o6j6SzHD4/fm6Ho= -which@1, which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: +which@^1.1.1, which@^1.2.14, which@^1.2.9, which@^1.3.1: version "1.3.1" resolved "https://registry.yarnpkg.com/which/-/which-1.3.1.tgz#a45043d54f5805316da8d62f9f50918d3da70b0a" integrity sha512-HxJdYWq1MTIQbJ3nw0cqssHoTNU267KlrDuGZ1WYlxDStUtKUhOaJmh112/TZmHxxUfuJqPXSOm7tDyas0OSIQ== @@ -13662,13 +13548,6 @@ yargs-parser@^18.1.2: camelcase "^5.0.0" decamelize "^1.2.0" -yargs-parser@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-5.0.0.tgz#275ecf0d7ffe05c77e64e7c86e4cd94bf0e1228a" - integrity sha1-J17PDX/+Bcd+ZOfIbkzZS/DhIoo= - dependencies: - camelcase "^3.0.0" - yargs@13.2.4: version "13.2.4" resolved "https://registry.yarnpkg.com/yargs/-/yargs-13.2.4.tgz#0b562b794016eb9651b98bd37acf364aa5d6dc83" @@ -13719,25 +13598,6 @@ yargs@^15.4.1: y18n "^4.0.0" yargs-parser "^18.1.2" -yargs@^7.0.0: - version "7.1.0" - resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.0.tgz#6ba318eb16961727f5d284f8ea003e8d6154d0c8" - integrity sha1-a6MY6xaWFyf10oT46gA+jWFU0Mg= - dependencies: - camelcase "^3.0.0" - cliui "^3.2.0" - decamelize "^1.1.1" - get-caller-file "^1.0.1" - os-locale "^1.4.0" - read-pkg-up "^1.0.1" - require-directory "^2.1.1" - require-main-filename "^1.0.1" - set-blocking "^2.0.0" - string-width "^1.0.2" - which-module "^1.0.0" - y18n "^3.2.1" - yargs-parser "^5.0.0" - yargs@^7.1.0: version "7.1.1" resolved "https://registry.yarnpkg.com/yargs/-/yargs-7.1.1.tgz#67f0ef52e228d4ee0d6311acede8850f53464df6" diff --git a/src/css/animations.scss b/src/css/animations.scss index 3e9b22f7..0716da70 100644 --- a/src/css/animations.scss +++ b/src/css/animations.scss @@ -1,13 +1,19 @@ -@include MakeAnimationWrappedEvenOdd(0.2s ease-in-out, "changeAnim") { - 0% { - transform: scale(1, 1); +@each $num in ("changeAnimEven", "changeAnimOdd") { + @keyframes #{$animName} { + 0% { + transform: scale(1, 1); + } + + 50% { + transform: scale(1.03, 1.03); + } + + 100% { + transform: scale(1, 1); + } } - 50% { - transform: scale(1.03, 1.03); - } - - 100% { - transform: scale(1, 1); + .#{$animName} { + animation: $animName 0.2s ease-in-out; } } From 6f486767b64074821951ef23f5a4c0708f4e3c72 Mon Sep 17 00:00:00 2001 From: dengr1065 Date: Tue, 29 Dec 2020 11:39:52 +0200 Subject: [PATCH 077/127] SCSS: Fix refactoring variable name (#1042) --- src/css/animations.scss | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/src/css/animations.scss b/src/css/animations.scss index 0716da70..16ba7fd1 100644 --- a/src/css/animations.scss +++ b/src/css/animations.scss @@ -1,4 +1,4 @@ -@each $num in ("changeAnimEven", "changeAnimOdd") { +@each $animName in ("changeAnimEven", "changeAnimOdd") { @keyframes #{$animName} { 0% { transform: scale(1, 1); From 38a69fbd38ed3520d1676e266a4a8ea359b26ebd Mon Sep 17 00:00:00 2001 From: Kexogg <65514050+Kexogg@users.noreply.github.com> Date: Tue, 29 Dec 2020 14:40:46 +0500 Subject: [PATCH 078/127] Update base-ru.yaml (#1038) Fixed incorrect description of Tick Rate, added new translations. If possible, please change fallback for cyrillic font. It's literally Times New Roman (in-game) --- translations/base-ru.yaml | 17 +++++++---------- 1 file changed, 7 insertions(+), 10 deletions(-) diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index bb77dfc9..3b16edd4 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -86,10 +86,10 @@ mainMenu: changelog: Список изменений importSavegame: Импорт openSourceHint: Это игра с открытым исходным кодом! - discordLink: Официальный Дискорд сервер! + discordLink: Официальный Дискорд сервер helpTranslate: Помоги с переводом! browserWarning: Извините, но игра работает медленно в вашем браузере! - Приобретите полную версию или загрузите Chrome чтобы ознакомится с игрой + Приобретите полную версию или загрузите Google Chrome, чтобы ознакомится с игрой в полной мере. savegameLevel: Уровень savegameLevelUnknown: Неизвестный уровень @@ -753,7 +753,7 @@ settings: general: Основные userInterface: Интерфейс advanced: Продвинутые - performance: Performance + performance: Производительность versionBadges: dev: Разработчик staging: Постановка @@ -803,11 +803,8 @@ settings: dark: Темная light: Светлая refreshRate: - title: Частота обновления - description: Если у вас монитор 144 Гц, измените частоту обновления здесь, чтобы - игра правильно выглядела при более высоких частотах обновления. - Это может уменьшить FPS, если ваш компьютер работает слишком - медленно. + title: Тикрейт + description: Определяет, сколько игровых тиков происходит в секунду. Более высокая частота тиков означает лучшую точность, но также и худшую производительность. На низких тикрейтах симуляция может быть неточной. alwaysMultiplace: title: Многократное размещение description: Если включено, все здания останутся выбранными после размещения, @@ -872,7 +869,7 @@ settings: title: Громкость Звука description: Задает громкость звуковых эффектов. musicVolume: - title: Music Volume + title: Громкость музыки description: Задает громкость музыки. lowQualityMapResources: title: Низкое качество ресурсов на карте @@ -999,7 +996,7 @@ about: Если вы хотите внести свой вклад игре - shapez.io в github.

- Эта игра не была бы возможна без большого сообщества в дискорде, которое собралось вокруг моих игр - Вам действительно стоит присоединиться к + Эта игра не была бы возможна без большого сообщества в Discord, которое собралось вокруг моих игр - Вам действительно стоит присоединиться к серверу Discord!!

Саундтрек сделал Peppsen - Он потрясающий.

From abb7ac782d8056b096fc5d8ac560d7874f772132 Mon Sep 17 00:00:00 2001 From: Gumball73 <66757746+Gumball73@users.noreply.github.com> Date: Sat, 2 Jan 2021 09:30:41 +0000 Subject: [PATCH 079/127] Update base-pt-PT.yaml (#1046) Fix some typos. --- translations/base-pt-PT.yaml | 14 +++++++------- 1 file changed, 7 insertions(+), 7 deletions(-) diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index 62d3b333..300435c8 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -895,7 +895,7 @@ settings: lembra-te de experimentares! disableTileGrid: title: Desativar Grelha - description: Desativar a grelha pode ajudar com o desempenho. Isto também fazz o + description: Desativar a grelha pode ajudar com o desempenho. Isto também faz o jogo parecer mais limpo! clearCursorOnDeleteWhilePlacing: title: Limpar Cursor com Clique Direito @@ -905,7 +905,7 @@ settings: direito do rato enquanto colocas um edifício. lowQualityTextures: title: Texturas de baixa qualidade (Feio) - description: sa texturas de baixa qualidade para melhorar o desempenho. sto vai + description: Usa texturas de baixa qualidade para melhorar o desempenho. Isto vai tornar o jogo parecer muito feio! displayChunkBorders: title: Mostrar bordas de limites (chunk borders) @@ -928,12 +928,12 @@ settings: velociade depende da definição de velocidade de movimentação. zoomToCursor: title: Zoom towards Cursor - description: If activated the zoom will happen in the direction of your mouse - position, otherwise in the middle of the screen. + description: Se ativado o zoom será na direção da posição + do teu rato, de outra forma será para o centro do ecrã. mapResourcesScale: - title: Map Resources Size - description: Controls the size of the shapes on the map overview (when zooming - out). + title: Tamanho de Recursos no Mapa + description: Controla o tamanho das formas na visão geral do mapa (aplicando + zoom out). rangeSliderPercentage: % keybindings: title: Atalhos From d8261a0b310c891bca080f434b2bec00026926c2 Mon Sep 17 00:00:00 2001 From: tobspr Date: Sun, 17 Jan 2021 15:14:29 +0100 Subject: [PATCH 080/127] Closes #1052 --- src/js/game/hud/parts/building_placer.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/src/js/game/hud/parts/building_placer.js b/src/js/game/hud/parts/building_placer.js index 7dccb7a4..7d618b6b 100644 --- a/src/js/game/hud/parts/building_placer.js +++ b/src/js/game/hud/parts/building_placer.js @@ -216,8 +216,8 @@ export class HUDBuildingPlacer extends HUDBuildingPlacerLogic { const dimensions = metaBuilding.getDimensions(variant); const sprite = metaBuilding.getPreviewSprite(0, variant); const spriteWrapper = makeDiv(element, null, ["iconWrap"]); - spriteWrapper.setAttribute("data-tile-w", dimensions.x); - spriteWrapper.setAttribute("data-tile-h", dimensions.y); + spriteWrapper.setAttribute("data-tile-w", String(dimensions.x)); + spriteWrapper.setAttribute("data-tile-h", String(dimensions.y)); spriteWrapper.innerHTML = sprite.getAsHTML(iconSize * dimensions.x, iconSize * dimensions.y); From aa4949c90f78f6cf1e2702a47d23080e62ec78b8 Mon Sep 17 00:00:00 2001 From: Specter711497 <77533045+Specter711497@users.noreply.github.com> Date: Sun, 17 Jan 2021 22:16:29 +0800 Subject: [PATCH 081/127] Update base-zh-TW.yaml (#1057) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit 912 - 地圖永遠部會自然生成完整的風車圖形。is not correct. - 地圖永遠不會自然生成完整的風車圖形。is correct. --- translations/base-zh-TW.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index e7ce1d91..2689dd66 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -909,7 +909,7 @@ tips: - 不要讓東西複雜化,保持簡單則行的遠。 - 遊戲中有時需要重複利用工廠,設計時記得考量重複利用性。 - 有些圖形地圖上就找的到,不必自行堆疊。 - - 地圖永遠部會自然生成完整的風車圖形。 + - 地圖永遠不會自然生成完整的風車圖形。 - 先上色再切割會比較有效率。 - 有了模組,空間淪為假議題、凡夫俗子的憂思。 - 建立一個藍圖工廠,這對模組化很有幫助。 From 1ab3c8c05d95f26ee019d5500ddd0a3c40314a96 Mon Sep 17 00:00:00 2001 From: Fernando Date: Wed, 3 Feb 2021 05:25:15 -0300 Subject: [PATCH 082/127] translated what was missing for PT-BR (#1060) --- translations/base-pt-BR.yaml | 42 ++++++++++++++++++------------------ 1 file changed, 21 insertions(+), 21 deletions(-) diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index db4bb0ab..1f24178d 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -326,17 +326,17 @@ ingame: extratores
e conecte-os ao hub.

PS: Segure SHIFT enquanto arrasta a esteira para ativar o planejador de esteiras!" - 21_1_place_quad_painter: Place the quad painter and get some - circles, white and - red color! - 21_2_switch_to_wires: Switch to the wires layer by pressing - E!

Then connect all four - inputs of the painter with cables! - 21_3_place_button: Awesome! Now place a Switch and connect it - with wires! - 21_4_press_button: "Press the switch to make it emit a truthy - signal and thus activate the painter.

PS: You - don't have to connect all inputs! Try wiring only two." + 21_1_place_quad_painter: Coloque o pintor (quádruplo) e consiga alguns + circulos, pigmento branco e + vermelho! + 21_2_switch_to_wires: Troque para o nível de fios pressionando + E!

E então conecte todos as quatro + entradas do pintor com fios! + 21_3_place_button: Incrivel! Agora coloque um interruptor e o conecte + com fio! + 21_4_press_button: "Pressione o interruptor para fazé-lo emitir um sinal + verdadeiro o que ativará o pintor.

OBS: Você + não precisa conectar todas as entradas! Tente conectar somente duas." connectedMiners: one_miner: 1 Extrator n_miners: Extratores @@ -687,9 +687,9 @@ storyRewards: desc: Parabéns! Aliás, mais conteúdo vindo na versão completa! reward_balancer: title: Balanceador - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: O multifuncional balanceador foi desbloqueado - Ele pode + ser usado para construir fabricas maiores ao dividir e juntar + itens em múltiplas esteiras! reward_merger: title: Unificador Compacto desc: Você desbloqueou uma variante unificadora do @@ -737,13 +737,13 @@ storyRewards: lembre de se divertir! reward_wires_painter_and_levers: title: Fios e Pintor Quádruplo - desc: "You just unlocked the Wires Layer: It is a separate - layer on top of the regular layer and introduces a lot of new - mechanics!

For the beginning I unlocked you the Quad - Painter - Connect the slots you would like to paint with on - the wires layer!

To switch to the wires layer, press - E.

PS: Enable hints in - the settings to activate the wires tutorial!" + desc: "Você acabou de desbloquear o nivel de fios: Ele é uma dimensão + separada da dimensão normal e introduz varias novas mecanicas! +

Para Começar eu desbloqueae para você o pintor + (quádruplo) - Conecte os espaços que você gostaria de usar para pintar com fios no + nivel de fios!

Para entrar no nivel de fios, pressione + E.

OBS: Ligue as dicas nas + configurações para ativar o tutorial de fios!" reward_filter: title: Filtro de Itens desc: Você desbloqueou o Filtro de Itens! Ele irá rotear os From d1d91dcf3cbfb322765e7b9b334d6f93665e807e Mon Sep 17 00:00:00 2001 From: Atum <54530076+rafaelnascimento411@users.noreply.github.com> Date: Wed, 3 Feb 2021 08:25:54 +0000 Subject: [PATCH 083/127] Portuguese translation fixes (#1064) Some more fixes i came across on the Portuguese translation, typos and suggestions --- translations/base-pt-PT.yaml | 30 +++++++++++++++--------------- 1 file changed, 15 insertions(+), 15 deletions(-) diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index 300435c8..34511bcd 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -340,7 +340,7 @@ ingame: purple: Roxo cyan: Ciano white: Branco - uncolored: Sem cor + uncolored: Incolor black: Preto shapeViewer: title: Camadas @@ -366,7 +366,7 @@ ingame: desc: Para uma fábrica totalmente automatizada! savegames: title: Savegames ∞ - desc: Tantos quanto o teu corção desejar! + desc: Tantos quanto o teu coração desejar! upgrades: title: ∞ Níveis de melhoria desc: Nesta versão demo apenas tens 5! @@ -477,11 +477,11 @@ buildings: default: name: Fio Elétrico description: Tranfere sinais, que podem ser itens, cores ou um sinal binário (1 - ou 0). Fios de cores diferestes não se conectam. + ou 0). Fios de cores diferentes não se conectam. second: name: Fio Elétrico description: Tranfere sinais, que podem ser itens, cores ou um sinal binário (1 - ou 0). Fios de cores diferestes não se conectam. + ou 0). Fios de cores diferentes não se conectam. balancer: default: name: Distribuidor @@ -630,8 +630,8 @@ storyRewards: esquerda! reward_splitter: title: Divisor - desc: Desbloqueaste o dvisor uma variante do - distribuidor - Aceita uma entradae divide-a em + desc: Desbloqueaste o divisor uma variante do + distribuidor - Aceita uma entrada e divide-a em duas! reward_tunnel: title: Túnel @@ -699,9 +699,9 @@ storyRewards: desc: Parabéns! Já agora, está planeado mais conteúdo para o jogo completo! reward_balancer: title: Distribuidor - desc: The multifunctional balancer has been unlocked - It can - be used to build bigger factories by splitting and merging - items onto multiple belts! + desc: O Distribuidor foi desbloqueado - Pode ser + usado para construir fábricas maiores ao dividir e misturar + itens para vários tapetes! reward_merger: title: Misturador (compacto) desc: Desbloqueaste um misturador, uma variante do @@ -731,15 +731,15 @@ storyRewards: binário (1 ou 0). reward_logic_gates: title: Portões Lógicos - desc: Desbloqueaste os portões lógicos! N tens de te excitar + desc: Desbloqueaste os portões lógicos! Não tens de te excitar com isto, mas é realmente super fixe!

Com estes portões agora podes realizar operações AND, OR, XOR and NOT.

Como um - bónus anteriormente já de dei um transístor! + bónus anteriormente já te dei um transístor! reward_virtual_processing: title: Processamento Virtual desc: Acadei de te dar um monte de novas construções, que te vão permitir simular o processamento de formas!

Agora - podes simular um cortador,um rodador, um empilhador e muito mais na + podes simular um cortador, um rodador, um empilhador e muito mais na camada de fios! Com isto, agora tens três opções para continuares o jogo:

- Construir uma máquina automática para criar qualquer forma possível pedida pelo Edifício Central @@ -760,7 +760,7 @@ storyRewards: desc: Desbloquaste o Filtro de Itens! Vai mandar itens ou para o topo ou para a saída da esquerda dependendo depending se são iguais ao sinal da camada de fios ou não.

Também podes - passar um sinal binário (1 ou 0) para ativa-lo ou desativa-lo + passar um sinal binário (1 ou 0) para ativá-lo ou desativá-lo totalmente. reward_demo_end: title: Fim da Demo @@ -910,7 +910,7 @@ settings: displayChunkBorders: title: Mostrar bordas de limites (chunk borders) description: O jogo está dividido em partes de 16x16 quadrados, se esta - dedinição estiver ativada as bordas de cada limitece são + definição estiver ativada as bordas de cada limite são mostradas. pickMinerOnPatch: title: Selecionar extrator num quadrado de recurso @@ -927,7 +927,7 @@ settings: description: Permite-te mover o mapa movento o rato nos cantos do ecrâ. A velociade depende da definição de velocidade de movimentação. zoomToCursor: - title: Zoom towards Cursor + title: Aproximar no cursor description: Se ativado o zoom será na direção da posição do teu rato, de outra forma será para o centro do ecrã. mapResourcesScale: From 14d09a7d520b0f0b79779a79f24439a491e38e54 Mon Sep 17 00:00:00 2001 From: coderadu <47945947+coderadu@users.noreply.github.com> Date: Thu, 11 Feb 2021 14:06:19 +0200 Subject: [PATCH 084/127] Translated more and made it more understandable (#1068) --- translations/base-ro.yaml | 40 +++++++++++++++++++-------------------- 1 file changed, 20 insertions(+), 20 deletions(-) diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index 82771831..109b4f18 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -80,23 +80,23 @@ global: space: SPACE demoBanners: title: Versiunea Demo - intro: Ia versiunea Standalone pentru a debloca toate funcțiile! + intro: Instalează versiunea Standalone pentru a debloca toate funcțiile! mainMenu: play: Joacă - changelog: Changelog - importSavegame: Import + changelog: Jurnalul schimbărilor + importSavegame: Importă openSourceHint: Acest joc este open source! discordLink: Serverul oficial de Discord helpTranslate: Ajută să traducem! browserWarning: Scuze dar, jocul este știut să ruleze încet pe browser-ul tău! - Ia versiunea standalone sau descarcă chrome pentru experiența completă. + Instalează versiunea standalone sau descarcă chrome pentru experiența completă. savegameLevel: Nivelul savegameLevelUnknown: Nivel necunoscut continue: Continuă newGame: Joc nou madeBy: Făcut de subreddit: Reddit - savegameUnnamed: Unnamed + savegameUnnamed: Fară nume dialogs: buttons: ok: OK @@ -105,28 +105,28 @@ dialogs: later: Mai târziu restart: Restartează reset: Resetează - getStandalone: Ia Standalone-ul + getStandalone: Instalează Standalone-ul deleteGame: Știu ce fac viewUpdate: Vezi Update-ul showUpgrades: Vezi Upgrade-urile showKeybindings: Arată tastele configurate importSavegameError: - title: Eroare la Import - text: "Încercarea de import a eșuat:" + title: Eroare la Importare + text: "Încercarea de importare a eșuat:" importSavegameSuccess: - title: Savegame importat - text: Savegame-ul tău a fost importat cu succes. + title: Salvarea importată + text: Salvarea ta a fost importat cu succes. gameLoadFailure: - title: Jocul este stricat - text: "Încercarea de încărcat savegame-ul a eșuat:" + title: Jocul este corupt + text: "Încercarea de a încărca salvarea a eșuat:" confirmSavegameDelete: title: Confirmă ștergerea - text: Are you sure you want to delete the following game?

- '' at level

This can not be - undone! + text: Ești sigur că vrei să ștergi următorul joc?

+ '' la nivelul

Acest lucru nu poate fi + anulat! savegameDeletionError: title: Eroare la ștergere - text: "Nu a reușit să se ștearga savegame-ul:" + text: "Nu a reușit să se ștearga salvarii:" restartRequired: title: Restartare necesară text: Trebuie să restartezi jocul pentru a aplica setările. @@ -144,11 +144,11 @@ dialogs: featureRestriction: title: Demo Version desc: Ai încercat să accesezi o funcție () care nu este disponibilă în - demo. Consideră să iei standalone-ul pentru experiența completă! + demo. Consideră să instalezi standalone-ul pentru experiența completă! oneSavegameLimit: - title: Savegame-uri limitate - desc: Poți avea doar un savegame în același timp în versiunea demo. Te rugăm - șterge-o pe cea existentă sau ia standalone-ul! + title: Salvări limitate + desc: Poți avea doar o salvare în același timp în versiunea demo. Te rugăm + șterge-o pe cea existentă sau instalează standalone-ul! updateSummary: title: Update nou! desc: "Aici sunt schimbările de când ai jucat ultima oară:" From 8850ab6c0807c11bb2fcce4c97386f8f0c7bf6a5 Mon Sep 17 00:00:00 2001 From: RevosCZ <72229413+RevosCZ@users.noreply.github.com> Date: Thu, 4 Mar 2021 07:00:55 +0100 Subject: [PATCH 085/127] Update base-cz.yaml (#1075) * Update base-cz.yaml Nothing special, just noticed a missing gap :D * Update base-cz.yaml --- translations/base-cz.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index 2f2909f0..70e561fa 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -291,7 +291,7 @@ ingame: interactiveTutorial: title: Tutoriál hints: - 1_1_extractor: Umístěte extraktor na nalezištěkruhového + 1_1_extractor: Umístěte extraktor na naleziště kruhového tvaru a vytěžte jej! 1_2_conveyor: "Připojte extraktor pomocí dopravníkového pásu k vašemu HUBu!

Tip: Klikněte a táhněte @@ -563,7 +563,7 @@ buildings: do levé. stacker: name: Virtuální kombinátor - description: Virtuálně Spojí tvary dohromady. Pokud nemohou být spojeny, pravý + description: Virtuálně spojí tvary dohromady. Pokud nemohou být spojeny, pravý tvar je položen na levý. painter: name: Virtuální barvič From 24240d514bdec7467b1066b98609c5f29a66395b Mon Sep 17 00:00:00 2001 From: Flipper5201 <80040357+Flipper5201@users.noreply.github.com> Date: Mon, 8 Mar 2021 11:00:45 +0100 Subject: [PATCH 086/127] massCutConfirm, line 187 (#1079) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit This should translated to ( w roli ścisłości), not ( gwoli ścisłości). --- translations/base-pl.yaml | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index 360f3cad..cd6d7a59 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -186,7 +186,7 @@ dialogs: wersję gry dla nielimitowanych znaczników! massCutConfirm: title: Potwierdź wycinanie - desc: Wycinasz sporą ilość maszyn ( gwoli ścisłości)! Czy na pewno chcesz + desc: Wycinasz sporą ilość maszyn ( w roli ścisłości)! Czy na pewno chcesz kontynuować? exportScreenshotWarning: title: Tworzenie zrzutu fabryki From b03f11772896d46b5e438838c56d081b93d5a1cf Mon Sep 17 00:00:00 2001 From: RevosCZ <72229413+RevosCZ@users.noreply.github.com> Date: Mon, 8 Mar 2021 11:01:04 +0100 Subject: [PATCH 087/127] Update base-cz.yaml (#1080) * Update base-cz.yaml Decided to solve the issue with the picture overlapping the name of buildings by shortening the words into shortcuts. * Update base-cz.yaml --- translations/base-cz.yaml | 24 ++++++++++++------------ 1 file changed, 12 insertions(+), 12 deletions(-) diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index 70e561fa..68f01ec8 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -404,7 +404,7 @@ buildings: name: Extraktor description: Umístěte na naleziště tvaru nebo barvy pro zahájení těžby. chainable: - name: Extraktor (Navazující) + name: Extraktor (Řetěz) description: Umístěte na naleziště tvaru nebo barvy pro zahájení těžby. Lze zapojit po skupinách. underground_belt: @@ -449,10 +449,10 @@ buildings: name: Barvič description: Obarví celý tvar v levém vstupu barvou z pravého vstupu. double: - name: Barvič (dvojnásobný) + name: Barvič (2x) description: Obarví tvary z levých vstupů barvou z horního vstupu. quad: - name: Barvič (čtyřnásobný) + name: Barvič (4x) description: Umožňuje obarvit každou čtvrtinu tvaru individuálně. Jen čtvrtiny se vstupy barev s logickým signálem na vrstvě kabelů budou obarveny! @@ -475,16 +475,16 @@ buildings: name: Vyvažovač description: Multifunkční - Rovnoměrně rozděluje vstupy na výstupech. merger: - name: Spojovač (kompaktní) + name: Spojovač description: Spojí dva pásy do jednoho. merger-inverse: - name: Spojovač (kompaktní) + name: Spojovač description: Spojí dva pásy do jednoho. splitter: - name: Rozdělovač (kompaktní) + name: Rozdělovač description: Rozdělí jeden pás na dva. splitter-inverse: - name: Rozdělovač (kompaktní) + name: Rozdělovač description: Rozdělí jeden pás na dva. storage: default: @@ -558,11 +558,11 @@ buildings: name: Virtuální rotor description: Virtuálně otáčí tvary o 90 stupňů po směru hodinových ručiček. unstacker: - name: Virtuální extrahátor + name: Virt. extrahátor description: Virtuálně extrahuje nejvyšší vrstvu do pravého výstupu a zbývající do levé. stacker: - name: Virtuální kombinátor + name: Virt. kombinátor description: Virtuálně spojí tvary dohromady. Pokud nemohou být spojeny, pravý tvar je položen na levý. painter: @@ -615,8 +615,8 @@ storyRewards: proti směru hodinových ručiček. Vyberte rotor a zmáčkněte 'T' pro přepnutí mezi variantami! reward_miner_chainable: - title: Napojovací extraktor - desc: "Právě jste odemkli napojovací extraktor! Může + title: Řetězový extraktor + desc: "Právě jste odemkli řetězový extraktor! Může předat své zdroje ostatním extraktorům, čímž můžete efektivněji těžit více zdrojů!

PS: Starý extraktor bude od teď nahrazen ve vašem panelu nástrojů!" @@ -1008,7 +1008,7 @@ tips: - Můžete proplétat různé úrovně tunelů. - Snažte se postavit kompaktní továrny - vyplatí se to! - Barvič má zrcadlově otočenou variantu, kterou můžete vybrat klávesou - T + T. - Užití správné kombinace vylepšení maximalizuje efektivitu. - Na maximální úrovní, 5 extraktorů zaplní jeden celý pás. - Nezapomeňte na tunely! From 3f7b0053c331b497e74d0104358c66080e82458e Mon Sep 17 00:00:00 2001 From: hcanergun <56073681+hcanergun@users.noreply.github.com> Date: Mon, 8 Mar 2021 13:01:21 +0300 Subject: [PATCH 088/127] Update base-tr.yaml (#1083) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Dödürcü was wrong for rotator there was typo it should be "Döndürücü" --- translations/base-tr.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index 389b01e8..5dbafce6 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -438,7 +438,7 @@ buildings: name: Döndürücü (Saat Yönünün Tersİ) description: Şekilleri saat yönünün tersinde 90 derece döndürür. rotate180: - name: Dödürücü (180 Derece) + name: Döndürücü (180 Derece) description: Şekilleri 180 derece döndürür. stacker: default: @@ -701,7 +701,7 @@ storyRewards: hızını ölçmeyi sağlar.

Kabloları açana kadar bekle - o zaman çok kullanışlı olacak. reward_rotater_180: - title: Dödürücü (180 derece) + title: Döndürücü (180 derece) desc: 180 derece döndürücüyü açtınız! - Şekilleri 180 derece döndürür (Süpriz! :D) reward_display: From 0b18cedd819de69acc00c529d647b8b606a32437 Mon Sep 17 00:00:00 2001 From: anitmyan <61045441+anitmyan@users.noreply.github.com> Date: Mon, 8 Mar 2021 19:01:34 +0900 Subject: [PATCH 089/127] Update base-ja.yaml (#1085) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit Changed ベルトリーダ to ベルトリーダー --- translations/base-ja.yaml | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/translations/base-ja.yaml b/translations/base-ja.yaml index a49611a2..ce8488e5 100644 --- a/translations/base-ja.yaml +++ b/translations/base-ja.yaml @@ -495,7 +495,7 @@ buildings: description: 入力された信号をディスプレイに表示します。 形状、色、真偽値のいずれでも可能です。 reader: default: - name: ベルトリーダ + name: ベルトリーダー description: 平均スループットを計測できます。 アンロック後は、 最後に通過したアイテムの情報を出力します。 analyzer: default: @@ -577,8 +577,8 @@ storyRewards: desc: 分配機コンパクトバージョンが利用可能になりました! - 1つの入力を2つの出力に分配します! reward_belt_reader: - title: ベルトリーダ - desc: ベルトリーダが利用可能になりました!ベルトのスループットを計測できます。

ワイヤーのロックが解除されれば、より便利になります! + title: ベルトリーダー + desc: ベルトリーダーが利用可能になりました!ベルトのスループットを計測できます。

ワイヤーのロックが解除されれば、より便利になります! reward_cutter_quad: title: 四分割 desc: 切断機のバリエーションが利用可能になりました。 - @@ -846,7 +846,7 @@ keybindings: filter: アイテムフィルタ wire_tunnel: 交差ワイヤ display: ディスプレイ - reader: ベルトリーダ + reader: ベルトリーダー virtual_processor: 仮想切断機 transistor: トランジスタ analyzer: 形状解析機 From e53ec8d6afa0a322c4e195937ae1211c7df52141 Mon Sep 17 00:00:00 2001 From: tobspr Date: Mon, 8 Mar 2021 11:59:45 +0100 Subject: [PATCH 090/127] Update chinese translation --- translations/base-zh-CN.yaml | 676 ++++++++++++++++++----------------- 1 file changed, 344 insertions(+), 332 deletions(-) diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 41be04d3..5c5a19c4 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -1,30 +1,36 @@ steamPage: - shortText: shapez.io 是一款在无边际的地图上建造工厂、自动化生产与组合愈加复杂的图形的游戏。 + shortText: “唯一能限制您的,只有您的想象力!” 《异形工厂》(Shapez.io) 是一款在无限拓展的地图上,通过建造各类工厂设施,来自动化生产与组合出愈加复杂图形的游戏。 discordLinkShort: 官方 Discord 服务器 intro: |- - Shapez.io 是一个休闲游戏,在其中,你将建造工厂以生产各种各样的几何图形。 - 随着等级提升,你需要生产的图形将会越来越复杂,你需要在无尽的地图中不断的扩建你的工厂。 - 如果这些还不够的话,你的生产目标是指数性增长的 - 你需要持续的增大工厂的规模! - 虽然你刚开始只需要生产图形,但你之后还可以给这些图形上色 - 你需要开采并混合颜料! - 你可以在 Steam 游戏商城购买此游戏的完整版, 但你可以先游玩试玩版并体验游戏! + “奇形怪状,放飞想象!” + “自动生产,尽情创造!” + 《异形工厂》(Shapez.io)是一款能让您尽情发挥创造力,充分享受思维乐趣的IO游戏。 + 游戏很轻松,只需建造工厂,布好设施,无需操作即能自动创造出各种各样的几何图形。 + 挑战很烧脑,随着等级提升,需要创造的图形将会越来越复杂,同时您还需要在无限扩展的地图中持续扩建优化您的工厂。 + 以为这就是全部了吗? 不!图形的生产需求将会指数性增长,持续的扩大规模和熵增带来的无序,将会是令人头痛的问题! + 这还不是全部! 一开始我们创造了图形,然后我们需要学会提取和混合来让它们五颜六色。 + 然后,还有吗? 当然,唯有思维,方能无限。 + + 欢迎免费体验试玩版:“让您的想象力插上翅膀!” + 和最聪明的玩家一起挑战,请访问 Steam 游戏商城购买《异形工厂》(Shapez.io)的完整版, title_advantages: 完整版内容 advantages: - - 12 个全新关卡 总共 26 个不同关卡 - - 18 个全新建筑 用于建造全自动工厂! - - 20 个等级升级 不停的愉快游玩! - - 导线更新包 解锁更多可能 - - 暗色模式! + - 12 个全新关卡 总共 26 个不同关卡! + - 18 个全新设施 呈现完全体的全自动工厂! + - 无限升级 又难又肝!让您一不小心就忘了时间! + - 导线更新包 发挥创造力的全新维度! + - 深色模式! 优雅且护眼的配色! - 无限数量存档 - 无限数量地图标记 - 支持作者! ❤️ - title_future: 预计更新 + title_future: 后续更新内容 planned: - - 建筑蓝图库 - - Steam 成就 - - 解密模式 - - 小地图 - - 模组 - - 沙盒模式 + - 蓝图库 + - 加入Steam成就 + - 全新DLC:解密模式 + - 增加小地图 + - 模组(Mods)支持 + - 增加沙盒模式 - ... 以及更多! title_open_source: 这个游戏是开源的! title_links: 链接 @@ -35,18 +41,18 @@ steamPage: source_code: 源代码 (GitHub) translate: 帮助汉化(翻译)组! text_open_source: |- - 任何人都可以对这个游戏做出贡献,我会活跃在游戏社区中并 尽最大可能积极参考大家对这个游戏的的全部建议和反馈。 - 请关注我的 trello board 以获取 the full roadmap! + 欢迎加入,一起创造!感谢所有对这个游戏做出贡献的玩家,作者和中国区发行小伙伴们会活跃在游戏社区中,并尽最大可能积极参考大家对这个游戏的的全部建议和反馈。 + 请关注我的 trello board 以获取完整的游戏路线图! global: loading: 加载中 error: 错误 thousandsDivider: "," decimalSeparator: . suffix: - thousands: K - millions: M - billions: B - trillions: T + thousands: 千 + millions: 百万 + billions: 亿万 + trillions: 兆 infinite: 无限 time: oneSecondAgo: 1秒前 @@ -62,150 +68,151 @@ global: hoursAndMinutesShort: 分 xMinutes: 分钟 keys: - tab: TAB - control: CTRL - alt: ALT - escape: ESC - shift: SHIFT - space: 空格 + tab: TAB键 + control: CTRL键 + alt: ALT键 + escape: ESC键 + shift: SHIFT键 + space: 空格键 demoBanners: title: 试玩版 - intro: 获取独立版以解锁所有游戏内容! + intro: 购买完整版以解锁所有游戏内容! mainMenu: play: 开始游戏 changelog: 更新日志 - importSavegame: 导入 + importSavegame: 读取存档 openSourceHint: 本游戏已开源! discordLink: 官方Discord服务器 helpTranslate: 帮助我们翻译! - browserWarning: 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 Chrome 或者获取独立版以得到更好的体验。 + browserWarning: 很抱歉, 本游戏在当前浏览器上可能运行缓慢! 使用 Chrome 或者购买完整版以得到更好的体验。 savegameLevel: 第关 savegameLevelUnknown: 未知关卡 continue: 继续游戏 newGame: 新游戏 madeBy: 作者: subreddit: Reddit - savegameUnnamed: 未命名 + savegameUnnamed: 存档未命名 dialogs: buttons: ok: 确认 delete: 删除 cancel: 取消 later: 以后 - restart: 重启游戏 + restart: 重新开始 reset: 重置 - getStandalone: 获取独立版 - deleteGame: 我知道我在做什么 + getStandalone: 获取完整版 + deleteGame: 我没疯!我知道我在做什么! viewUpdate: 查看更新 - showUpgrades: 显示建筑升级 + showUpgrades: 显示设施升级 showKeybindings: 显示按键设置 importSavegameError: - title: 导入错误 - text: 未能导入你的存档: + title: 读取错误 + text: 未能读取您的存档: importSavegameSuccess: - title: 导入成功 - text: 存档被成功导入 + title: 读取成功 + text: 存档被成功读取 gameLoadFailure: title: 存档损坏 - text: 未能导入你的存档: + text: 未能读取您的存档: confirmSavegameDelete: title: 确认删除 - text: 你确定要删除这个游戏吗?

+ text: 您确定要删除这个游戏吗?

'' 等级

该操作无法回退! savegameDeletionError: - title: 删除错误 - text: 未能删除你的存档 + title: 删除失败 + text: 未能删除您的存档 restartRequired: title: 需要重启游戏 - text: 你需要重启游戏以应用变更的设置。 + text: 您需要重启游戏以应用变更的设置。 editKeybinding: - title: 更改按键设置 - desc: 请按下你想要使用的按键,或者按下 ESC 键来取消设置。 + title: 更改按键设定 + desc: 请按下您想要使用的按键以设定,或者按下 ESC 键来取消设定。 resetKeybindingsConfirmation: - title: 重置所有按键 - desc: 你将要重置所有按键,请确认。 + title: 重置按键设定 + desc: 您将要重置所有按键设定,请确认。 keybindingsResetOk: - title: 重置所有按键 - desc: 成功重置所有按键! + title: 重置按键设定 + desc: 成功重置所有按键设定! featureRestriction: title: 试玩版 - desc: 你尝试使用了功能。该功能在试玩版中不可用。请考虑购买独立版以获得更好的体验。 + desc: 您尝试使用了一项功能。该功能在试玩版中不可用。请考虑购买完整版以获得更好的体验。 oneSavegameLimit: title: 存档数量限制 - desc: 试玩版中只能保存一份存档。请删除旧存档或者获取独立版! + desc: 试玩版中只能保存一份存档。请删除旧存档或者购买完整版! updateSummary: - title: 更新啦! - desc: "以下为自上次游戏以来更新的内容:" + title: 新内容更新啦! + desc: "以下为游戏最新更新内容:" upgradesIntroduction: - title: 解锁建筑升级 - desc: 不要销毁你之前建造的工厂!你生产过的所有图形都会被用来升级建筑。 升级菜单在屏幕右上角。 + title: 解锁升级 + desc: 您生产过的所有图形都能被用来解锁升级。 所以不要销毁您之前建造的工厂! + 注意:升级菜单在屏幕右上角。 massDeleteConfirm: title: 确认删除 - desc: 你将要删除很多建筑,准确来说有幢! 你确定要这么做吗? + desc: 您将要删除很多设施,准确来说有种! 您确定要这么做吗? blueprintsNotUnlocked: - title: 未解锁 - desc: 你还没有解锁蓝图功能!完成更多的关卡来解锁蓝图。 + title: 尚未解锁 + desc: 您还没有解锁蓝图功能!通过第12关的挑战后可解锁蓝图。 keybindingsIntroduction: - title: 实用按键 + title: 实用快捷键 desc: - "这个游戏有很多有用的快捷键。 以下是其中的一些,记得在按键设置中查看其他的!

- CTRL + 拖动:选择区域以复制或删除。
SHIFT: 按住以放置多个。
ALT: 反向放置传送带。
" + "这个游戏有很多有用的快捷键设定。 以下是其中的一些介绍,记得在按键设置中查看其他按键设定!

+ CTRL键 + 拖动:选择区域以复制或删除。
+ SHIFT键: 按住以放置多个同一种设施。
+ ALT键: 反向放置传送带。
" createMarker: title: 创建地图标记 - desc: 填写一个有意义的名称, 你也可以使用形状的 短代码 (你可以 点击这里 生成短代码) + desc: 填写一个有意义的名称, 还可以同时包含一个形状的 短代码 (您可以 点击这里 生成短代码) titleEdit: 编辑地图标记 markerDemoLimit: - desc: 在试玩版中你只能创建两个地图标记。请获取独立版以创建更多标记。 + desc: 在试玩版中您只能创建两个地图标记。请获取完整版以创建更多标记。 massCutConfirm: title: 确认剪切 - desc: 你将要剪切很多建筑,准确来说有幢! 你确定要这么做吗? + desc: 您将要剪切很多设施,准确来说有种! 您确定要这么做吗? exportScreenshotWarning: title: 工厂截图 - desc: 你将要导出你的工厂的截图。如果你的基地很大,截图过程将会很慢,且有可能导致游戏崩溃! + desc: 您将要导出您整个工厂基地的截图。如果您已经建设了一个规模很大的基地,生成截图的过程将会很慢,且有可能导致游戏崩溃! massCutInsufficientConfirm: title: 确认剪切 - desc: 你没有足够的图形来粘贴这个区域!你确定要剪切吗? + desc: 您没有足够的图形来粘贴这个区域!您确定要剪切吗? editSignal: title: 设置信号 - descItems: "选择一个预定义的信号:" - descShortKey: ... 或者输入图形的 短代码 (你可以 点击这里 生成短代码) + descItems: "选择一个预定义的项目:" + descShortKey: ... 或者输入图形的 短代码 (您可以 点击这里 生成短代码) renameSavegame: - title: 重命名存档 - desc: 你可以在此重命名存档。 + title: 重命名游戏存档 + desc: 您可以在此重命名游戏存档。 tutorialVideoAvailable: title: 教程 - desc: 该等级有视频教程! 你想查看这个视频吗? + desc: 这个关卡有视频攻略! 您想查看这个视频攻略? tutorialVideoAvailableForeignLanguage: title: 教程 - desc: 该等级有英语版本的视频教程! 你想查看这个视频吗?? + desc: 这个关卡有英语版本的视频攻略! 您想查看这个视频攻略吗?? ingame: keybindingsOverlay: moveMap: 移动地图 selectBuildings: 选择区域 stopPlacement: 停止放置 - rotateBuilding: 转动建筑 + rotateBuilding: 转动设施 placeMultiple: 放置多个 reverseOrientation: 反向放置 disableAutoOrientation: 关闭自动定向 - toggleHud: 开关 HUD - placeBuilding: 放置建筑 + toggleHud: 切换可视化界面(HUD) + placeBuilding: 放置设施 createMarker: 创建地图标记 delete: 销毁 pasteLastBlueprint: 粘贴上一个蓝图 - lockBeltDirection: 启用传送带规划 + lockBeltDirection: 启用传送带规划器 plannerSwitchSide: 规划器换边 cutSelection: 剪切 copySelection: 复制 clearSelection: 取消选择 - pipette: 选取器 - switchLayers: 选择层 + pipette: 吸取器 + switchLayers: 切换层 buildingPlacement: - cycleBuildingVariants: 按 键以选择建筑变体。 + cycleBuildingVariants: 按 键以选择设施的变型体。 hotkeyLabel: "快捷键: " infoTexts: - speed: 效率 + speed: 速率 range: 范围 storage: 容量 oneItemPerSecond: 1个/秒 @@ -218,65 +225,65 @@ ingame: unlockText: 解锁! buttonNextLevel: 下一关 notifications: - newUpgrade: 有新更新啦! + newUpgrade: 有新内容更新啦! gameSaved: 游戏已保存。 - freeplayLevelComplete: 等级 完成了! + freeplayLevelComplete: 第 关 完成了! shop: - title: 建筑升级 + title: 升级 buttonUnlock: 升级 tier: 级 - maximumLevel: 最高级(倍效率) + maximumLevel: 最高级(倍速率) statistics: title: 统计信息 dataSources: stored: - title: 已交付 - description: 显示基地中每种图形已交付且未使用的数量。 + title: 已存储 + description: 所有图形已存储于中心。 produced: title: 生产 - description: 显示所有正在被生产的图形数量,包括中间产物。 + description: 所有图形已在工厂内生产,包括中间产物。 delivered: - title: 送达 - description: 显示图形送达基地并交付的速度。 - noShapesProduced: 你还没有生产任何图形。 + title: 交付 + description: 图形已交付到中心基地。 + noShapesProduced: 您还没有生产任何图形。 shapesDisplayUnits: second: / 秒 minute: / 分 - hour: / 时 + hour: / 小时 settingsMenu: playtime: 游戏时间 - buildingsPlaced: 建筑数量 + buildingsPlaced: 设施数量 beltsPlaced: 传送带数量 tutorialHints: title: 需要帮助? showHint: 显示帮助 hideHint: 关闭 blueprintPlacer: - cost: 需要 + cost: 成本 waypoints: waypoints: 地图标记 - hub: 基地 - description: 左键跳转到地图标记,右键删除地图标记。

+ hub: 中心 + description: 左键点击地图标记以跳转到该处,右键点击可删除地图标记。

在当前地点创建地图标记,或者在选定位置上右键创建地图标记。 creationSuccessNotification: 成功创建地图标记。 interactiveTutorial: - title: 教程 + title: 新手教程 hints: - 1_1_extractor: 在圆形矿脉上放一个开采器来获取圆形! - 1_2_conveyor: 用传送带将你的开采器连接到基地上!

提示:用你的鼠标按下并拖动传送带! + 1_1_extractor: 在圆形上放置一个开采器来获取圆形!

提示:按下鼠标左键选中开采器 + 1_2_conveyor: 用传送带将您的开采器连接到中心基地上!

提示:选中传送带按下鼠标左键可拖动布置传送带! 1_3_expand: - 这不是一个挂机游戏!建造更多的开采器和传送带来更快地完成目标。

提示:按住 - SHIFT 键来放置多个开采器,用 R 键旋转它们。 - 2_1_place_cutter: "现在放置一个切割器,把圆切成两半!

注意:无论方向如何,切割机总是从上到下切割。" - 2_2_place_trash: 切割机可能会堵塞

使用垃圾桶清除当前 (!) 不需要的废物。 - 2_3_more_cutters: "干的好!现在放置2个以上的切割机来加快当前缓慢的过程!

提示:用0-9快捷键可以快速选择建筑!" + 您可以放置更多的开采器传送带来更有效率地完成关卡目标。

提示:按住 + SHIFT 键可放置多个开采器,注意用R 键可旋转开采器的出口方向,确保开采的图形可以顺利传送。 + 2_1_place_cutter: "现在放置一个切割器,这个设施可把圆形切成两半!

注意:无论如何放置,切割机总是从上到下切割。" + 2_2_place_trash: 使用切割机后产生的废弃图形会导致堵塞

注意使用垃圾桶清除当前 (!) 不需要的废物。 + 2_3_more_cutters: "干的好!现在放置2个以上的切割机来加快当前缓慢的过程!

提示:用快捷键0-9可以快速选择各项设施!" 3_1_rectangles: - "现在让我们开采一些矩形!建4个人开采器并将它们连接到基地。

- 提示:按住SHIFT拖到传送带会激活传送带规划!" - 21_1_place_quad_painter: 放置四口上色器并且输入圆形白色红色! - 21_2_switch_to_wires: 按 E 键选择电线层!

然后用导线连接上色器的四个输入口! + "现在让我们开采一些矩形!找到矩形地带放置4个开采器并将它们用传送带连接到中心基地。

+ 提示:选中传送带后按住SHIFT键可快速准确地规划传送带路线!" + 21_1_place_quad_painter: 放置四口上色器并且获取一些圆形白色红色! + 21_2_switch_to_wires: 按 E 键选择电线层

然后用导线连接上色器的四个输入口! 21_3_place_button: 很好!现在放置一个开关并连接导线! - 21_4_press_button: "按下开关去产生正信号来激活上色器。

注:你不用连上所有的输入口!试着只接两个。" + 21_4_press_button: "按下开关产生正信号以激活上色器

注:您不用连上所有的输入口!试着只接两个。" colors: red: 红色 green: 绿色 @@ -297,8 +304,8 @@ ingame: limited_items: 限制在 watermark: title: 试玩版 - desc: 点击这里 了解完整版内容 - get_on_steam: 在 steam 商城购买 + desc: 点击这里了解完整版内容 + get_on_steam: 在Steam商城购买 standaloneAdvantages: title: 购买完整版! no_thanks: 不需要,谢谢 @@ -307,29 +314,29 @@ ingame: title: 12 个全新关卡! desc: 总共 26 个不同关卡! buildings: - title: 18 个全新建筑 - desc: 用于建造全自动工厂! + title: 18 个全新设施! + desc: 呈现完全体的全自动工厂! savegames: title: 无限数量存档 - desc: 存档功能可以尽情使用 + desc: 放手去干,错了随时重来! upgrades: - title: 20 个等级升级 - desc: 试玩版只有 5 个等级! + title: 20个等级升级 + desc: 试玩版只有5个等级! markers: title: 无限数量地图标记 - desc: 再也不会找不到自己的工厂了 + desc: 地图再大,不会迷路! wires: - title: 导线更新包 - desc: 解锁更多可能! + title: 电线更新包 + desc: 发挥创造力的全新维度! darkmode: title: 暗色模式 - desc: 优雅且护眼的配色 + desc: 优雅且护眼的配色! support: title: 支持作者 desc: 我使用闲暇时间开发游戏! shopUpgrades: belt: - name: 传送带、平衡机、隧道 + name: 传送、分发、隧道 description: 效率 倍 → 倍 miner: name: 开采 @@ -344,107 +351,107 @@ buildings: belt: default: name: 传送带 - description: 运送物品,按住并拖动来放置多个传送带。 + description: 运送物品,选中后按住鼠标并拖动可一次性放置多个传送带。 miner: default: name: 开采器 - description: 在图形或者颜色上放置来开采他们。 + description: 放置在图形或者颜色上进行开采。 chainable: - name: 链式开采器 - description: 在图形或者颜色上放置来开采他们。可以被链接在一起。 + name: 开采器(链式) + description: 放置在图形或者颜色上进行开采。它们可以被链接在一起。 underground_belt: default: name: 隧道 - description: 可以从其他传送带或建筑底下方运送物品。 + description: 可放置在传送带设施下方以运送物品。 tier2: name: 二级隧道 - description: 可以从其他传送带或建筑底下方运送物品。 + description: 可放置在传送带设施下方以运送物品。 cutter: default: name: 切割机 - description: 将图形从上到下切开并输出。如果你只需要其中一半,记得把另一半销毁掉,否则切割机会停止工作! + description: 始终将图形从上到下切开并分别输出。如果您只需要其中一半的图形,使用垃圾桶清除另一半图形,否则切割机会停止工作! quad: name: 切割机(四向) - description: 将输入的图形切成四块。如果你只需要其中一块,记得把其他的销毁掉,否则切割机会停止工作! + description: 将输入的图形切成四块。如果您只需要其中一块图形,使用垃圾桶清除其他图形,否则切割机会停止工作! rotater: default: name: 旋转机 - description: 将图形顺时针旋转90度。 + description: 将图形顺时针旋转90度。 ccw: name: 旋转机(逆时针) - description: 将图形逆时针旋转90度。 + description: 将图形逆时针旋转90度。 rotate180: name: 旋转机 (180度) - description: 将图形旋转180度。 + description: 将图形旋转180度。 stacker: default: name: 堆叠机 - description: 将输入的图形拼贴在一起。如果不能被直接拼贴,右边的图形会被堆叠在左边的图形上面。 + description: 将输入的图形在同一层内组合在一起。如果不能被直接组合,则右边输入图形会堆叠在左边输入图形上面。 mixer: default: name: 混色器 - description: 用加法混色将两个颜色混合起来 + description: 用叠加混色法将两个颜色混合。 painter: default: name: 上色器 - description: 将整个图形涂上输入的颜色。 + description: 将整个图形涂上输入的颜色。 double: - name: 上色器(双倍) - description: 同时为两个输入的图形上色,每次上色只消耗一份颜色。 + name: 上色器(双面) + description: 使用顶部输入的颜色为左侧输入的图形上色。 quad: name: 上色器(四口) - description: 能够为图形的四个象限单独上色。只有电线层上带有正信号的插槽才可以上色! + description: 能够为图形的四个象限单独上色。记住只有通过电线层上带有正信号的插槽才可以上色! mirrored: name: 上色器 (镜像) - description: 将整个图形涂上输入的颜色。 + description: 将整个图形涂上输入的颜色。 trash: default: name: 垃圾桶 - description: 从所有四个方向上输入物品并销毁它们。永远。 + description: 可以从所有四个方向上输入物品并永远清除它们。 hub: deliver: 交付 - toUnlock: 来解锁 + toUnlock: 解锁 levelShortcut: LVL endOfDemo: 试玩版结束 wire: default: - name: 导线 - description: 传输信号,信号可以是物品,颜色或者布尔值。 不同颜色的导线不会互相连接 + name: 电线 + description: 可用来传输信号,信号可以是物品,颜色或者开关值(0或1)。 不同颜色的电线不会互相连接 second: - name: 导线 - description: 传输信号,信号可以是物品,颜色或者布尔值。 不同颜色的导线不会互相连接。 + name: 电线 + description: 可用来传输信号,信号可以是物品,颜色或者开关值(0或1)。 不同颜色的电线不会互相连接 balancer: default: name: 平衡器 - description: 多功能-将所有输入均匀地分配到所有输出上。 + description: 多功能的设施:可将所有输入均匀地分配到所有输出上。 merger: name: 合并器 (小型) - description: 将两条传送带合并为一条。 + description: 可将两条传送带合并为一条。 merger-inverse: name: 合并器 (小型) - description: 将两条传送带合并为一条。 + description: 可将两条传送带合并为一条。 splitter: - name: 分配器 (小型) - description: 将一条传送带分成为两条。 + name: 分离器 (小型) + description: 可将一条传送带分成为两条。 splitter-inverse: - name: 分配器 (小型) - description: 将一条传送带分成为两条。 + name: 分离器 (小型) + description: 可将一条传送带分成为两条。 storage: default: name: 存储器 - description: 储存多余的物品,直到指定的容量。 优先处理左边的输出,可以用作溢出门。 + description: 储存多余的物品,直到储满。 优先处理左边的输出,并可以用作溢出门。 wire_tunnel: default: - name: 交差导线 - description: 使两根导线交差,而不会连接起来。 + name: 交叉电线 + description: 使两根电线交叉而不会连接起来。 constant_signal: default: - name: 固定信号 - description: 发出固定信号,可以是图形、颜色、开关量(1 / 0)。 + name: 恒定信号 + description: 发出固定信号,可以是图形颜色开关值(1 / 0)。 lever: default: name: 开关 - description: 可以在电线层上发出开关量(1 / 0)信号。比如说它可以用来控制过滤器。 + description: 可以在电线层上发出开关值(1 / 0)信号,以达到控制部件的作用,比如可以用来控制物品过滤器。 logic_gate: default: name: 与门 @@ -461,163 +468,170 @@ buildings: transistor: default: name: 晶体管 - description: 如果侧边输入正信号,输入可以通过。(正信号:图形,颜色,开(1)信号) + description: 如果侧边输入正信号,输入可以通过并转发。(正信号:图形,颜色,开(1)信号) mirrored: name: 晶体管 - description: 如果侧边输入正信号,输入可以通过。(正信号:图形,颜色,开(1)信号) + description: 如果侧边输入正信号,输入可以通过并转发。(正信号:图形,颜色,开(1)信号) filter: default: name: 过滤器 - description: 在上面输出和信号匹配的内容,在右侧输出不匹配的内容。如果是开关量的话,开(1)信号从上面输出,关(0)信号从右侧输出 + description: 在顶侧输出和信号匹配的内容,在右侧输出不匹配的内容。如果是开关量的话,开(1)信号从顶侧输出,关(0)信号从右侧输出。 display: default: name: 显示器 - description: 在显示器上显示连接的信号(这些信号可以是:图形、颜色、开关量)。 + description: 在显示器上显示连接的信号(信号可以是:图形、颜色、开关值)。 reader: default: - name: 传送带阅读器 - description: 可以测量传送带平均吞吐量。在电线层输出最后输入物品的信号(可以在‘显示器’上显示,也可用来做过滤) + name: 传送带读取器 + description: 可以读取传送带平均吞吐量。输出最后在电线层上读取的物品(一旦解锁。) analyzer: default: name: 图形分析器 - description: 分析图形最低层的右上象限并返回其图形和颜色。 + description: 分析图形最底层的右上象限并返回其图形颜色。 comparator: default: name: 比较器 - description: 如果输入的两个信号一样将输出开(1)信号,可以比较图形,颜色,和开关量。 + description: 如果输入的两个信号一样将输出开(1)信号,可以比较图形,颜色,和开关值。 virtual_processor: default: - name: 模拟切割机 - description: 将信号中的图形切割成两半并输出信号 + name: 虚拟切割机 + description: 模拟将图形切割成两半。 rotater: name: 模拟旋转机 - description: 将信号中的图形旋转后输出信号 + description: 模拟顺时针旋转图形。 unstacker: name: 模拟拆分器 - description: 将信号中图形的最上层图形信号从右侧输出,其余的图形信号从左侧输出。 + description: 模拟提取最上层图形从右侧输出,提取其余的图形从左侧输出。 stacker: name: 模拟堆叠机 - description: 将右侧的图形叠在左侧的图形上 + description: 模拟将右侧图形叠在左侧图形上。 painter: name: 模拟上色器 - description: 使用右侧输入的颜色给底部输入的图形上色 + description: 模拟使用右侧输入的颜色给底部输入的图形上色 item_producer: default: name: 物品生成器 - description: 仅在沙盒模式下可用,在常规层上输出电线层给定信号的图形。 + description: 仅在沙盒模式下可用,在常规层上输出电线层给定的信号。 storyRewards: reward_cutter_and_trash: title: 切割图形 - desc: 你刚解锁了切割机,它会从上到下切开图形而不管它的方向! -

一定要用扔掉不用的东西,不然它会阻塞传送带, - 为此我给了你垃圾桶,它会摧毁所有放进去的东西! + desc: 恭喜!您解锁了切割机,不管如何放置,它只会从上到下切开图形! +
注意一定要用处理掉切割后废弃的图形,不然它会阻塞传送带, +
使用垃圾桶,它会清除所有放进去的图形! reward_rotater: - title: 顺时针旋转 - desc: 恭喜!你解锁了旋转机。它会顺时针旋转输入的图形90度。 + title: 旋转 + desc: 恭喜!您解锁了旋转机。它会顺时针将输入的图形旋转90度。 reward_painter: title: 上色 - desc: 恭喜!你解锁了上色器。开采一些颜色 (就像你开采图形一样) - 将其在上色器中与图形结合来将图形上色!

注意:如果你患有色盲,可以在设置中启用色盲模式! + desc: + 恭喜!您解锁了上色器。开采一些颜色 (就像您开采图形一样),将其在上色器中与图形结合来将图形上色! +
注意:如果您不幸患有色盲,可以在设置中启用色盲模式 reward_mixer: title: 混合颜色 - desc: 恭喜!你解锁了混色器。这个建筑使用加法混色将两种颜色混合起来。 + desc: 恭喜!您解锁了混色器。它使用叠加混色法将两种颜色混合起来。 reward_stacker: title: 堆叠 - desc: 恭喜!你解锁了堆叠机。堆叠机会尝试把两个输入的图形拼贴在一起。如果有重叠的部分,右边的输入会被堆叠在左边的输入上方! + desc: 恭喜!您解锁了堆叠机。它会将将输入的图形在同一层内组合在一起。 +
如果不能被直接组合,则右边输入图形会堆叠在左边输入图形上面。 reward_splitter: - title: 分离与合并 - desc: 你已经解锁了平衡器的变体分配器,它会把输入的东西分配在两边输出! + title: 分离器(小型) + desc: 您已经解锁了平衡器的变体分离器,它会把输入的东西一分为二! reward_tunnel: title: 隧道 - desc: 恭喜!你解锁了隧道。你现在可以从其他传送带或建筑底下运送物品了! + desc: 恭喜!您解锁了隧道。它可放置在传送带设施下方以运送物品。 reward_rotater_ccw: title: 逆时针旋转 - desc: 恭喜!你解锁了旋转机逆时针变体。这个变体可以逆时针旋转图形。选择旋转机然后按"T"键来选取这个变体。 + desc: + 恭喜!您解锁了旋转机逆时针变体。它可以逆时针旋转图形。 +
选择旋转机然后按"T"键来选取这个变体。 reward_miner_chainable: title: 链式开采器 desc: - "你已经解锁了链式开采器!它能转发它的资源给其他的开采器,这样你就会更有效率的开采资源了!

- 注意:新的开采器替换了工具栏里旧的开采器!" + "您已经解锁了链式开采器!它能转发资源给其他的开采器,这样您就能更有效率的开采各类资源了!

+ 注意:新的开采器已替换了工具栏里旧的开采器!" reward_underground_belt_tier_2: title: 二级隧道 - desc: 恭喜!你解锁了二级隧道。这是隧道的一个变体。二级隧道有更长的传输距离。你还可以混用不同的隧道变体! + desc: 恭喜!您解锁了二级隧道。这是隧道的一个变体。二级隧道有更长的传输距离。您还可以混用不同的隧道变体! reward_cutter_quad: title: 四向切割机 - desc: 恭喜!你解锁了切割机四向变体。它可以将输入的图形切成四块而不只是左右两块! + desc: 恭喜!您解锁了切割机四向变体。它可以将输入的图形切成四块而不只是左右两块! reward_painter_double: - title: 双倍上色器 - desc: 恭喜!你解锁了上色器双倍变体。它可以同时为两个图形上色,每次只消耗一份颜色! + title: 双面上色器 + desc: 恭喜!您解锁了上色器双面变体。它可以同时为两个图形上色,但每次只消耗一份颜色! reward_storage: title: 存储器 - desc: 你已经解锁了存储器,它能存满指定容量的物品!

- 它先从左边输出,这样你就可以用它做一个溢流门了! + desc: 您已经解锁了存储器,它能存满指定容量的物品! +
优先从左边输出,这样您就可以用它做一个溢流门了! reward_freeplay: title: 自由模式 - desc: 成功了!你解锁了自由模式!这意味着现在将随机生成图形! - 从现在起,基地将需要生产率,我强烈建议你去制造一台能够自动交付所需图形的机器!

- 基地会在电线层输出需要的图形,你需要去分析图形并在此基础上自动配置你的工厂。 + desc: + 成功了!您解锁了自由模式!挑战升级!这意味着现在将随机生成图形! + 从现在起,中心基地最为需要的是产量,我强烈建议您去制造一台能够自动交付所需图形的机器!

+ 基地会在电线层输出需要的图形,您需要去分析图形并在此基础上自动配置您的工厂。 reward_blueprints: title: 蓝图 - desc: 你现在可以复制粘贴你的工厂的一部分了!按住 CTRL - 键并拖动鼠标来选择一块区域,然后按C键复制。

粘贴并不是免费的,你需要使用蓝图图形来粘贴你的蓝图。蓝图图形是你刚刚交付的图形。 + desc: + 您现在可以复制粘贴您的工厂的一部分了!按住 CTRL键并拖动鼠标来选择一块区域,然后按C键复制。 +

粘贴并不是免费的,您需要制造蓝图图形来负担。蓝图图形是您刚刚交付的图形。 no_reward: title: 下一关 - desc: 这一关没有奖励,但是下一关有!

- 注意:你生产过的所有图形都会被用来升级建筑。 + desc: 这一关没有奖励,但是下一关有! +

注意:最高明的规划师都不会破坏原有的工厂设施,您生产过的所有图形都会被用于解锁升级。 no_reward_freeplay: title: 下一关 - desc: 恭喜你!另外,我们已经计划在独立版中加入更多内容! + desc: 恭喜您!另外,我们已经计划在完整版中加入更多内容! reward_balancer: title: 平衡器 - desc: 解锁了多功能的平衡器,它能够分割和合并多个传送带的资源,可以用来建造更大的工厂! + desc: 恭喜!您解锁了多功能平衡器,它能够分割和合并多个传送带的资源,可以用来建造更大的工厂! reward_merger: - title: 小型合并器 - desc: 你已经解锁了平衡器的变体合并器,它能合并两个输入到一个传送带上! + title: 合并器(小型) + desc: 恭喜!您解锁了平衡器的变体合并器,它能合并两个输入到同一个传送带上! reward_belt_reader: - title: 传送带阅读器 - desc: 你已经解锁了传送带阅读器!它能够测量传送带上的生产率。

- 等你解锁了电线层后,它会更有用! + title: 传送带读取器 + desc: 恭喜!您解锁了传送带读取器!它能够测量传送带上的生产率。 +

等您解锁了电线层后,它将会极其有用! reward_rotater_180: - title: 180度旋转器 - desc: 你刚刚解锁了180度旋转器!它能帮你把一个图形旋转180度(Surprise! :D) + title: 旋转机(180度) + desc: 恭喜!您解锁了旋转器(180度)!它能帮您把一个图形旋转180度(Surprise! :D) reward_display: title: 显示器 - desc: "你已经解锁了显示器,显示一个在电线层上输入的信号!

- 注意:你注意到传输带阅读器和存储器输出他们最后一次输入的物品的信号了吗?试着在显示屏上展示一下!" + desc: 恭喜!您已经解锁了显示器,它可以显示一个在电线层上连接的信号! +
注意:您注意到传送读取器存储器输出的他们最后读取的物品了吗?试着在显示屏上展示一下!" reward_constant_signal: - title: 固定信号 + title: 恒定信号 desc: - 你解锁了电线层上的固定信号建筑,比如它连接过滤器时非常有用。

- 它能发出图形、颜色、开关量(1 / 0)的固定信号。 + 恭喜!您解锁了生成于电线层之上的恒定信号,把它连接到过滤器时非常有用。 +
比如,它能发出图形、颜色、开关值(1 / 0)的固定信号。 reward_logic_gates: title: 逻辑门 - desc: 你解锁了逻辑门!它们是个好东西!

- 你可以用它们来进行'与,或,非,异或'操作。

作为奖励,我还给你解锁了晶体管! + desc: 您解锁了逻辑门!它们是个好东西!
+ 您可以用它们来进行'与,或,非,异或'操作。

作为奖励,我还给您解锁了晶体管! reward_virtual_processing: title: 模拟处理器 - desc: 我刚刚给了一大堆新建筑,让你可以模拟形状的处理过程

- 你现在可以在电线层上模拟切割机,旋转机,堆叠机和其他机器!

- 有了这些,你可以选择下面三个方向来继续游戏:

- -建立一个自动化生产基地需要图形的机器(我建议试试!)。

- -用电线层上做些酷炫的东西。

- -继续正常比赛。

- 无论你选择什么,记住要玩得开心! + desc: 我刚刚给了一大堆新设施,让您可以模拟形状的处理过程
+ 您现在可以在电线层上模拟切割机,旋转机,堆叠机和其他机器!
+ 有了这些,您可以选择下面三个方向来继续游戏:
+ -建立一个自动化机器以生产出任何中心基地需要图形(建议一试!)。
+ -用电线层做些酷炫的东西。
+ -继续正常游戏。
+ 放飞想象,尽情创造! reward_wires_painter_and_levers: - title: 电控四口上色器 - desc: "你刚刚解锁了电线层:它是正常层之上的一个层,它带来了许多新的机制!

- 首先我解锁了你的四口上色器,按E键切换到电线层,然后连接你想要染色的槽,用开关来控制开启。

- 注意:在设置中打开电线层教程!" + title: 电线 & 四口上色器 + desc: 恭喜!您解锁了电线层:它是正常层之上的一个层,它将带来了许多新的机制!

+ 首先我解锁了您的四口上色器,按E键切换到电线层,然后连接您想要染色的槽,用开关来控制开启。

+ 提示:可在设置中打开电线层教程!" reward_filter: title: 物品过滤器 desc: - 你解锁了物品过滤器!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。

- 你也可以输入正负(1 / 0)信号来激活或者禁用它。 + 恭喜!您解锁了物品过滤器!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。

+ 您也可以输入开关值(1 / 0)信号来激活或者禁用它。 reward_demo_end: title: 试玩结束 - desc: 你已经玩完了试玩版本! + desc: 恭喜!您已经通关了试玩版本! +
更多挑战,请至Steam商城购买完整版!谢谢支持! settings: title: 设置 categories: @@ -633,7 +647,7 @@ settings: labels: uiScale: title: 用户界面大小 - description: 改变用户界面大小。用户界面会随着设备分辨率缩放,这个设置决定缩放比例。 + description: 改变用户界面大小。用户界面会随着屏幕分辨率缩放,这个设置决定缩放比例。 scales: super_small: 最小 small: 较小 @@ -642,7 +656,7 @@ settings: huge: 最大 scrollWheelSensitivity: title: 缩放灵敏度 - description: 改变缩放灵敏度(鼠标滚轮或者触控板)。 + description: 改变屏幕缩放灵敏度(用鼠标滚轮或者触控板控制缩放)。 sensitivity: super_slow: 最低 slow: 较低 @@ -651,10 +665,10 @@ settings: super_fast: 最高 language: title: 语言 - description: 改变语言。所有的翻译皆由玩家提供,且有可能正在施工中! + description: 改变语言。官方中文版已更新,欢迎玩家继续提供更好的翻译意见。 fullscreen: title: 全屏 - description: 全屏以获得更好的游戏体验。仅在独立版中可用。 + description: 全屏可获得更好的游戏体验。仅在完整版中可用。 soundsMuted: title: 关闭音效 description: 关闭所有音效。 @@ -669,17 +683,16 @@ settings: light: 浅色 refreshRate: title: 模拟频率、刷新频率 - description: 如果你的显示器是 144Hz - 的,请在这里更改刷新频率,这样游戏可以正确地根据你的屏幕进行模拟。但是如果你的电脑性能不佳,提高刷新频率可能降低帧数。 + description: 如果您的显示器刷新频率是 144Hz,请在这里更改刷新频率,这样游戏可以正确地根据您的屏幕进行模拟。但是如果您的电脑性能不佳,提高刷新频率可能降低帧数。 alwaysMultiplace: title: 多重放置 - description: 开启这个选项之后放下建筑将不会取消建筑选择。等同于一直按下 SHIFT 键。 + description: 开启这个选项之后放下设施将不会取消设施选择。等同于一直按下 SHIFT 键。 offerHints: title: 提示与教程 - description: 是否显示提示、教程以及一些其他的帮助理解游戏的 UI 元素。 + description: 是否显示提示、教程以及一些其他的帮助理解游戏的 UI 元素。建议新手玩家开启。 movementSpeed: title: 移动速度 - description: 改变摄像头移动速度 + description: 改变摄像头的移动速度。 speeds: super_slow: 最慢 slow: 较慢 @@ -692,10 +705,10 @@ settings: description: 启用后,放置隧道时会将多余的传送带移除。 此外,拖动隧道可以快速铺设隧道,以及移除不必要的隧道。 vignette: title: 晕映 - description: 启用晕映,将屏幕角落里的颜色变深,更容易阅读文本。 + description: 启用晕映功能,可将屏幕角落里的颜色变深,更容易阅读文本。 autosaveInterval: - title: 自动保存间隔 - description: 在这里控制你的游戏多长时间保存一次,或者完全关闭这个功能。 + title: 自动存档间隔 + description: 在这里控制您的游戏多长时间自动存档一次,你也可以完全关闭这个功能。建议打开。 intervals: one_minute: 1分钟 two_minutes: 2分钟 @@ -704,17 +717,17 @@ settings: twenty_minutes: 20分钟 disabled: 关闭 compactBuildingInfo: - title: 精简建筑信息 - description: 缩小建筑信息展示框。如果打开,放置建筑时建筑将不再显示建筑说明和图片,只显示建筑速度或其他数据。 + title: 精简设施信息 + description: 缩小设施信息展示框。如果打开,放置设施时将不再显示说明和图片,只显示建造速度或其他数据。 disableCutDeleteWarnings: title: 关闭剪切/删除警告 - description: 如果打开,将不再在剪切或者删除100+建筑时显示警告信息。 + description: 如果打开,将不再在剪切或者删除100+实体时显示警告信息。 enableColorBlindHelper: title: 色盲模式 - description: 提供一些分辨颜色的工具。目前当鼠标移至颜色资源上方时,屏幕上方会显示颜色名称。 + description: 提供多种工具,帮助色盲玩家可正常进行游戏。 rotationByBuilding: - title: 记忆建筑方向 - description: 每一类建筑都会记住各自上一次的旋转方向。如果你经常在不同建筑类型之间切换,这个设置会让游戏更加舒适。 + title: 记忆设施方向 + description: 每一类设施都会记住各自上一次的旋转方向。如果您经常在不同设施类型之间切换,这个设置会让游戏操控更加便捷。 soundVolume: title: 音效音量 description: 设置音效的音量 @@ -722,50 +735,49 @@ settings: title: 音乐音量 description: 设置音乐的音量 lowQualityMapResources: - title: 简陋的地图资源 - description: 放大时简化地图上资源的渲染以提高性能。它看起来更干净,所以一定要试试! + title: 低质量地图资源 + description: 放大时简化地图上资源的渲染以提高性能。开启甚至会让画面看起来更干净,低配置电脑玩家建议开启! disableTileGrid: title: 禁用网格 - description: 禁用平铺网格有助于提高性能。这也让游戏看起来更干净! + description: 禁用平铺网格有助于提高性能。这也让游戏画面看起来更干净! clearCursorOnDeleteWhilePlacing: title: 右键取消 - description: 默认情况下取消当前的所有操作,如果禁用的话,你可以在保持将放置建筑的情况下删除已有的建筑。 + description: 默认启用。在选择要放置的设施时,单击鼠标右键即可取消。如果禁用,则可以通过在放置设施时单击鼠标右键来删除设施。 lowQualityTextures: title: 低质量纹理(丑陋) - description: 使用低质量纹理保存游戏性能。但是游戏看起来很丑! + description: 使用低质量纹理提高游戏性能。但是这样游戏会看起来很丑! displayChunkBorders: title: 显示大块的边框 - description: 游戏将16x16的小块分成一个大块,如果打开这个设置将会显示每个大块的边框。 + description: 游戏将每一个大块分成16*16的小块,如果启用将会显示每个大块的边框。 pickMinerOnPatch: title: 在资源块上选择开采器 description: 默认开启,当在资源块上使用选取器时会选择开采器。 simplifiedBelts: title: 简单的传送带(简陋) - description: 为了保存性能,除非鼠标放在传送带上,不然不会渲染传送带上的物品。 - 除非你特别需要性能,否则我不推荐在这种设置下玩游戏。 + description: 除非鼠标放在传送带上,不然不会渲染传送带上的物品。启用可提升游戏性能。但除非特别需要性能,否则不推荐启用。 enableMousePan: - title: 鼠标平移 + title: 鼠标平移屏幕 description: 在鼠标滑到屏幕边缘时可以移动地图。移动速度取决于移动速度设置。 zoomToCursor: title: 鼠标位置缩放 - description: 打开后在鼠标位置进行缩放,否则在屏幕中间进行缩放。 + description: 启用后在鼠标所在位置进行屏幕缩放,否则在屏幕中间进行缩放。 mapResourcesScale: title: 地图资源图形尺寸 description: 控制地图总览时图形的尺寸(指缩小视野时)。 rangeSliderPercentage: % keybindings: - title: 按键设置 - hint: 提示:使用 CTRL、SHIFT、ALT!这些建在放置建筑时有不同的效果。 - resetKeybindings: 重置按键设置 + title: 按键设定 + hint: 提示:使用 CTRL、SHIFT、ALT!这些键在放置设施时有不同的效果。 + resetKeybindings: 重置按键设定 categoryLabels: general: 通用 ingame: 游戏 navigation: 视角 placement: 放置 massSelect: 批量选择 - buildings: 建筑快捷键 - placementModifiers: 放置建筑修饰键 + buildings: 设施快捷键 + placementModifiers: 放置设施修饰键 mappings: confirm: 确认 back: 返回 @@ -773,7 +785,7 @@ keybindings: mapMoveRight: 右 mapMoveDown: 下 mapMoveLeft: 左 - centerMap: 回到基地 + centerMap: 回到中心基地 mapZoomIn: 放大 mapZoomOut: 缩小 createMarker: 创建地图标记 @@ -792,39 +804,39 @@ keybindings: trash: 垃圾桶 rotateWhilePlacing: 顺时针旋转 rotateInverseModifier: "修饰键: 改为逆时针旋转" - cycleBuildingVariants: 选择建筑变体 + cycleBuildingVariants: 切换所选择设施变体 confirmMassDelete: 确认批量删除 - cycleBuildings: 选择建筑 + cycleBuildings: 切换所选择设施 massSelectStart: 开始批量选择 massSelectSelectMultiple: 选择多个区域 - massSelectCopy: 复制 + massSelectCopy: 复制区域 placementDisableAutoOrientation: 取消自动定向 placeMultiple: 继续放置 - placeInverse: 反向放置传送带 + placeInverse: 反向自动传送带方向 pasteLastBlueprint: 粘贴上一张蓝图 - massSelectCut: 剪切 + massSelectCut: 剪切区域 exportScreenshot: 导出截图 mapMoveFaster: 快速移动 lockBeltDirection: 启用传送带规划 switchDirectionLockSide: 规划器:换边 - pipette: 选取器 + pipette: 吸取器 menuClose: 关闭菜单 - switchLayers: 选择层 - wire: 导线 + switchLayers: 切换层 + wire: 电线 balancer: 平衡器 storage: 存储器 - constant_signal: 固定信号 + constant_signal: 恒定信号 logic_gate: 逻辑门 - lever: Switch (regular) + lever: 控制杆 filter: 过滤器 - wire_tunnel: 交差导线 - display: 显示 - reader: 传送带阅读器 + wire_tunnel: 电线隧道 + display: 显示器 + reader: 传送带读取器 virtual_processor: 模拟切割机 transistor: 晶体管 analyzer: 图形分析器 comparator: 比较器 - item_producer: 物品生产器 (沙盒) + item_producer: 物品生产器 (沙盒模式) copyWireValue: "电线:复制指定电线上的值" about: title: 关于游戏 @@ -832,76 +844,76 @@ about: 本游戏由 Tobias Springer(我)开发,并且已经开源。

- 如果你想参与开发,请查看 shapez.io on github

+ 如果您想参与开发,请查看 shapez.io on github

- 这个游戏的开发少不了热情的 Discord 社区。请加入我们的 Discord 服务器

+ 这个游戏的开发获得了 Discord 社区内热情玩家的巨大支持。诚挚邀请您加入我们的 Discord 服务器

本游戏的音乐由 Peppsen 制作——他是个很棒的伙伴。

- 最后,我想感谢我最好的朋友 Niklas ——如果没有与他的异星工厂(factorio)的游戏体验,shapez.io将不会存在。 + 最后,我想感谢我最好的朋友 Niklas ——如果没有他的《异星工厂》(factorio)带给我的体验和启发,《异形工厂》(shapez.io)将不会存在。 changelog: title: 版本日志 demo: features: restoringGames: 恢复存档 - importingGames: 倒入存档 + importingGames: 导入存档 oneGameLimit: 最多一个存档 - customizeKeybindings: 按键设置 + customizeKeybindings: 按键设定 exportingBase: 导出工厂截图 settingNotAvailable: 在试玩版中不可用。 tips: - - 基地接受所有输入的图形! - - 确保都是模块化的工厂,不然后面会很麻烦的! - - 不要建设的太靠近基地,不然后面会非常混乱的! - - 如果堆叠不起作用,那就换种方案。 - - 你可以通过 R 键切换传送带规化方向。 - - 按住 CTRL 键拖动传送带将不会自动改变它的方向。 - - 只要所有建筑等级一致,效率也将一致。 + - 基地接受所有创造后输入的图形!并不限于现有的图形! + - 让你的工厂尽量模块化,不然后期你会面对大麻烦! + - 不要让设施太过靠近基地,不然可能会乱成一锅粥! + - 如果堆叠不起作用,尝试切换输入的图形来重新组合。 + - 您可以通过 R 键切换传送带规化方向。 + - 按住 CTRL 键拖动传送带将始终保持它现有的传送方向。 + - 只要所有设施等级一致,效率也将一致。 - 串行执行比并行执行更有效。 - - 在后面的游戏中你会解锁更多建筑的变种! - - 你可以使用T键切换不同的变种。 + - 在后面的游戏中您会解锁更多设施的变种! + - 您可以使用T键切换不同的设施变种。 - 对称是关键! - - 你可以使用隧道构建不同层次的通道。 - - 试着建造紧凑型工厂,它会给你带来好处的! - - 你可以按T来切换上色器的镜像变体。 - - 正确的建筑比例将使效率最大化。 + - 您可以使用隧道构建不同层次的通道。 + - 试着建造紧凑型工厂,它会给您带来好处的! + - 您可以按T来切换上色器的镜像变体。 + - 正确的设施比例将使效率最大化。 - 在传送带和开采器等级一致时,5个开采器就可以占满一条传送带的运量。 - 别忘了隧道! - - 你不必为了充分发挥效率而平均分配物品。 - - 按住SHIFT键将激活传送带规划,能让你更容易的放置长线的传送带。 - - 切割机总是垂直切割,而不管图形方向如何。 - - 混合三原色能够获得白色。 - - 存储缓冲区优先处理第一个输出。 - - 你值得花时间来构建可重复的设计! - - 按住CTRL键能够放置多个建筑。 - - 你可以按住ALT来反向你将放置传送带的方向。 + - 您不必为了充分发挥效率而平均分配物品。 + - 按住SHIFT键将激活传送带路线规划,这样可以更有效地规划如何放置长距离的传送带。 + - 切割机总是垂直切割图形,而不管图形方向如何。 + - 还记得吗?混合三原色能够获得白色。 + - 存储缓冲区优先处理左侧的输出。 + - 您值得花时间来构建可重复的设计! + - 按住CTRL键能够放置多个设施。 + - 您可以按住ALT来反向放置传送带的方向。 - 效率是关键! - 离基地越远图形越复杂。 - 机器的速度是有限的,把它们分开可以获得最高的效率。 - - 使用平衡器最大化你的效率。 - - 组织很重要。尽量不要过多地穿过传送带。 - - 提前规划,省的后面混乱! - - 不要删除旧的工厂,你会需要他们生产的东西升级建筑来提高效率。 - - 在寻求帮助之前,试着自己完成20级!! - - 不要把事情复杂化,试着保持简单,你会成功的。 - - 你可能需要在游戏的后期重复使用工厂。把你的工厂规划成可重复使用的。 - - 有时,你可以在地图上找到你需要的图形,而不用堆叠机去合成它。 + - 使用平衡器最大化您的效率。 + - 有条不紊!尽量不要过多地穿过传送带。 + - 凡事预则立!不预则废! + - 尽量不要删除旧的设施和生产线,您会需要他们生产的东西来升级设施并提高效率。 + - 先给自己定一个小目标:自己完成20级!!不去看别人的攻略! + - 不要把问题复杂化,试着保持简单,您会成功的。 + - 您可能需要在游戏的后期重复使用工厂。把您的工厂规划成可重复使用的。 + - 有时,您可以在地图上直接找到您需要的图形,并不需要使用堆叠机去合成它。 - 风车图形不会自动产生 - - 在切割前,给你的图形上色可以获得最高的效率。 - - 模块化,可以使你提高效率。 + - 在切割前,给您的图形上色可以获得最高的效率。 + - 模块化,可以使您提高效率。 - 记得做一个单独的蓝图工厂。 - - 仔细看看调色器,你就会调色了。 + - 仔细看看调色器,您就会调色了。 - CTRL+点击能够选择一块区域。 - - 建得离基地太近会妨碍以后的工作。 - - 升级列表中每个形状旁边的固定图标可以将其固定到屏幕上。 - - 地图无限大,你可以随意布置。 - - 尝试下Factorio!这是我最喜欢的游戏。 - - 四输入切割机从右上角进行顺时针切割! - - 在主菜单你可以下载你保存的游戏进度文件! + - 设施建得离基地太近很可能会妨碍以后的工作。 + - 使用升级列表中每个形状旁边的固定图标将其固定到屏幕上。 + - 地图无限,放飞想象,尽情创造。 + - 向您推荐Factorio!这是我最喜欢的游戏。向神作致敬! + - 四向切割机从右上开始进行顺时针切割! + - 在主界面您可以下载您的游戏存档文件! - 这个游戏有很多有用的快捷键!一定要到快捷键页面看看。 - - 这个游戏有很多设置,一定要检查一下! - - 总览时基地的标记边上有个指向它所在方向的指针! - - 想清理传送带,就剪切那块区域并在相同位置放置他们。 + - 这个游戏有很多设置可以提高游戏效率,请一定要了解一下! + - 中心基地有个指向它所在方向的小指南指针! + - 想清理传送带,可剪切那块区域然后将其在相同位置粘贴。 - 按F4显示FPS。 - - 按两次F4显示你鼠标所在的块。 - - 你可以点击固定在屏幕左侧的图形来解除固定。 + - 按两次F4显示您鼠标和镜头所在的块。 + - 您可以点击被固定在屏幕左侧的图形来解除固定。 From 1ee03d739846636f7bc67d5430ee1dddc10de628 Mon Sep 17 00:00:00 2001 From: Tobias Springer Date: Tue, 9 Mar 2021 10:07:19 +0100 Subject: [PATCH 091/127] Adjustments to support chinese versions --- .gitignore | 1 + gulp/css.js | 1 - gulp/gulpfile.js | 63 ++-- gulp/js.js | 48 ++- gulp/package.json | 1 + gulp/standalone.js | 356 +++++++++------------ gulp/steampipe/scripts/app.vdf.template | 8 +- gulp/steampipe/scripts/china-linux.vdf | 12 + gulp/steampipe/scripts/china-windows.vdf | 12 + gulp/steampipe/scripts/linux.vdf | 2 +- gulp/steampipe/scripts/windows.vdf | 2 +- gulp/webpack.config.js | 3 +- gulp/webpack.production.config.js | 3 + gulp/yarn.lock | 51 ++- res/logo_cn.png | Bin 0 -> 34370 bytes src/css/states/main_menu.scss | 4 + src/js/core/background_resources_loader.js | 2 +- src/js/globals.d.ts | 2 + src/js/states/about.js | 4 +- src/js/states/main_menu.js | 50 ++- src/js/states/mobile_warning.js | 10 +- src/js/states/preload.js | 21 +- src/js/states/settings.js | 25 +- yarn.lock | 35 +- 24 files changed, 422 insertions(+), 294 deletions(-) create mode 100644 gulp/steampipe/scripts/china-linux.vdf create mode 100644 gulp/steampipe/scripts/china-windows.vdf create mode 100644 res/logo_cn.png diff --git a/.gitignore b/.gitignore index a0e08a62..f7557646 100644 --- a/.gitignore +++ b/.gitignore @@ -46,6 +46,7 @@ res_built gulp/runnable-texturepacker.jar tmp_standalone_files +tmp_standalone_files_china # Local config config.local.js diff --git a/gulp/css.js b/gulp/css.js index 2b51f153..46e44247 100644 --- a/gulp/css.js +++ b/gulp/css.js @@ -21,7 +21,6 @@ function gulptasksCSS($, gulp, buildFolder, browserSync) { const plugins = [postcssAssetsPlugin(cachebust)]; if (prod) { plugins.unshift( - $.postcssUnprefix(), $.postcssPresetEnv({ browsers: ["> 0.1%"], }) diff --git a/gulp/gulpfile.js b/gulp/gulpfile.js index 7b0416ca..f2f4174e 100644 --- a/gulp/gulpfile.js +++ b/gulp/gulpfile.js @@ -136,7 +136,7 @@ gulp.task("main.webserver", () => { ); }); -function serve({ standalone }) { +function serve({ standalone, chineseVersion = false }) { browserSync.init({ server: buildFolder, port: 3005, @@ -200,7 +200,11 @@ function serve({ standalone }) { if (standalone) { gulp.series("js.standalone-dev.watch")(() => true); } else { - gulp.series("js.dev.watch")(() => true); + if (chineseVersion) { + gulp.series("china.js.dev.watch")(() => true); + } else { + gulp.series("js.dev.watch")(() => true); + } } } @@ -284,30 +288,28 @@ gulp.task( ); // Builds everything (standalone-prod) -gulp.task( - "step.standalone-prod.code", - 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.all", - gulp.series("step.standalone-prod.mainbuild", "css.prod-standalone", "html.standalone-prod") -); -gulp.task( - "build.standalone-prod", - gulp.series("utils.cleanup", "step.standalone-prod.all", "step.postbuild") -); -// OS X build and release upload -gulp.task( - "build.darwin64-prod", - gulp.series( - "build.standalone-prod", - "standalone.prepare", - "standalone.package.prod.darwin64", - "standalone.uploadRelease.darwin64" - ) -); +for (const prefix of ["", "china."]) { + gulp.task( + prefix + "step.standalone-prod.code", + gulp.series("sounds.fullbuildHQ", "translations.fullBuild", prefix + "js.standalone-prod") + ); + + gulp.task( + prefix + "step.standalone-prod.mainbuild", + gulp.parallel("step.baseResources", prefix + "step.standalone-prod.code") + ); + + gulp.task( + prefix + "step.standalone-prod.all", + gulp.series(prefix + "step.standalone-prod.mainbuild", "css.prod-standalone", "html.standalone-prod") + ); + + gulp.task( + prefix + "build.standalone-prod", + gulp.series("utils.cleanup", prefix + "step.standalone-prod.all", "step.postbuild") + ); +} // Deploying! gulp.task( @@ -320,7 +322,12 @@ gulp.task( ); gulp.task("main.deploy.prod", gulp.series("utils.requireCleanWorkingTree", "build.prod", "ftp.upload.prod")); gulp.task("main.deploy.all", gulp.series("main.deploy.staging", "main.deploy.prod")); -gulp.task("main.standalone", gulp.series("build.standalone-prod", "standalone.package.prod")); +gulp.task("regular.main.standalone", gulp.series("build.standalone-prod", "standalone.package.prod")); +gulp.task( + "china.main.standalone", + gulp.series("china.build.standalone-prod", "china.standalone.package.prod") +); +gulp.task("standalone.all", gulp.series("regular.main.standalone", "china.main.standalone")); // Live-development gulp.task( @@ -331,5 +338,9 @@ gulp.task( "main.serveStandalone", gulp.series("build.standalone.dev", () => serve({ standalone: true })) ); +gulp.task( + "china.main.serveDev", + gulp.series("build.dev", () => serve({ standalone: false, chineseVersion: true })) +); gulp.task("default", gulp.series("main.serveDev")); diff --git a/gulp/js.js b/gulp/js.js index 28c037bd..cfaedb8c 100644 --- a/gulp/js.js +++ b/gulp/js.js @@ -6,7 +6,6 @@ function requireUncached(module) { } function gulptasksJS($, gulp, buildFolder, browserSync) { - //// DEV gulp.task("js.dev.watch", () => { @@ -30,6 +29,36 @@ function gulptasksJS($, gulp, buildFolder, browserSync) { .pipe(gulp.dest(buildFolder)); }); + //// DEV CHINA + + gulp.task("china.js.dev.watch", () => { + return gulp + .src("../src/js/main.js") + .pipe( + $.webpackStream( + requireUncached("./webpack.config.js")({ + watch: true, + chineseVersion: true, + }) + ) + ) + .pipe(gulp.dest(buildFolder)) + .pipe(browserSync.stream()); + }); + + gulp.task("china.js.dev", () => { + return gulp + .src("../src/js/main.js") + .pipe( + $.webpackStream( + requireUncached("./webpack.config.js")({ + chineseVersion: true, + }) + ) + ) + .pipe(gulp.dest(buildFolder)); + }); + //// STAGING gulp.task("js.staging.transpiled", () => { @@ -162,6 +191,23 @@ function gulptasksJS($, gulp, buildFolder, browserSync) { ) .pipe(gulp.dest(buildFolder)); }); + + gulp.task("china.js.standalone-prod", () => { + return gulp + .src("../src/js/main.js") + .pipe( + $.webpackStream( + requireUncached("./webpack.production.config.js")({ + enableAssert: false, + environment: "prod", + es6: true, + standalone: true, + chineseVersion: true, + }) + ) + ) + .pipe(gulp.dest(buildFolder)); + }); } module.exports = { diff --git a/gulp/package.json b/gulp/package.json index 28a83253..0e1052b1 100644 --- a/gulp/package.json +++ b/gulp/package.json @@ -34,6 +34,7 @@ "fastdom": "^1.0.9", "flatted": "^2.0.1", "fs-extra": "^8.1.0", + "gifsicle": "^5.2.0", "gulp-audiosprite": "^1.1.0", "howler": "^2.1.2", "html-loader": "^0.5.5", diff --git a/gulp/standalone.js b/gulp/standalone.js index 8d247672..21c64595 100644 --- a/gulp/standalone.js +++ b/gulp/standalone.js @@ -10,226 +10,168 @@ const execSync = require("child_process").execSync; function gulptasksStandalone($, gulp) { const electronBaseDir = path.join(__dirname, "..", "electron"); - const tempDestDir = path.join(__dirname, "..", "tmp_standalone_files"); - const tempDestBuildDir = path.join(tempDestDir, "built"); + for (const { tempDestDir, suffix, taskPrefix } of [ + { tempDestDir: path.join(__dirname, "..", "tmp_standalone_files"), suffix: "", taskPrefix: "" }, + { + tempDestDir: path.join(__dirname, "..", "tmp_standalone_files_china"), + suffix: "china", + taskPrefix: "china.", + }, + ]) { + const tempDestBuildDir = path.join(tempDestDir, "built"); - gulp.task("standalone.prepare.cleanup", () => { - return gulp.src(tempDestDir, { read: false, allowEmpty: true }).pipe($.clean({ force: true })); - }); + gulp.task(taskPrefix + "standalone.prepare.cleanup", () => { + return gulp.src(tempDestDir, { read: false, allowEmpty: true }).pipe($.clean({ force: true })); + }); - gulp.task("standalone.prepare.copyPrefab", () => { - // const requiredFiles = $.glob.sync("../electron/"); - const requiredFiles = [ - path.join(electronBaseDir, "lib", "**", "*.node"), - path.join(electronBaseDir, "node_modules", "**", "*.*"), - path.join(electronBaseDir, "node_modules", "**", ".*"), - path.join(electronBaseDir, "favicon*"), + gulp.task(taskPrefix + "standalone.prepare.copyPrefab", () => { + // const requiredFiles = $.glob.sync("../electron/"); + const requiredFiles = [ + path.join(electronBaseDir, "lib", "**", "*.node"), + path.join(electronBaseDir, "node_modules", "**", "*.*"), + path.join(electronBaseDir, "node_modules", "**", ".*"), + path.join(electronBaseDir, "favicon*"), - // fails on platforms which support symlinks - // https://github.com/gulpjs/gulp/issues/1427 - // path.join(electronBaseDir, "node_modules", "**", "*"), - ]; - return gulp.src(requiredFiles, { base: electronBaseDir }).pipe(gulp.dest(tempDestBuildDir)); - }); + // fails on platforms which support symlinks + // https://github.com/gulpjs/gulp/issues/1427 + // path.join(electronBaseDir, "node_modules", "**", "*"), + ]; + return gulp.src(requiredFiles, { base: electronBaseDir }).pipe(gulp.dest(tempDestBuildDir)); + }); - gulp.task("standalone.prepare.writePackageJson", cb => { - fs.writeFileSync( - path.join(tempDestBuildDir, "package.json"), - JSON.stringify( - { - devDependencies: { - electron: "6.1.12", + gulp.task(taskPrefix + "standalone.prepare.writePackageJson", cb => { + fs.writeFileSync( + path.join(tempDestBuildDir, "package.json"), + JSON.stringify( + { + devDependencies: { + electron: "6.1.12", + }, }, - }, - null, - 4 + null, + 4 + ) + ); + cb(); + }); + + gulp.task(taskPrefix + "standalone.prepareVDF", cb => { + const hash = buildutils.getRevision(); + + const steampipeDir = path.join(__dirname, "steampipe", "scripts"); + const templateContents = fs + .readFileSync(path.join(steampipeDir, "app.vdf.template"), { encoding: "utf-8" }) + .toString(); + + const convertedContents = templateContents.replace("$DESC$", "Commit " + hash); + fs.writeFileSync(path.join(steampipeDir, "app.vdf"), convertedContents); + + cb(); + }); + + gulp.task(taskPrefix + "standalone.prepare.minifyCode", () => { + return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir)); + }); + + gulp.task(taskPrefix + "standalone.prepare.copyGamefiles", () => { + return gulp.src("../build/**/*.*", { base: "../build" }).pipe(gulp.dest(tempDestBuildDir)); + }); + + gulp.task(taskPrefix + "standalone.killRunningInstances", cb => { + try { + execSync("taskkill /F /IM shapezio.exe"); + } catch (ex) { + console.warn("Failed to kill running instances, maybe none are up."); + } + cb(); + }); + + gulp.task( + taskPrefix + "standalone.prepare", + gulp.series( + taskPrefix + "standalone.killRunningInstances", + taskPrefix + "standalone.prepare.cleanup", + taskPrefix + "standalone.prepare.copyPrefab", + taskPrefix + "standalone.prepare.writePackageJson", + taskPrefix + "standalone.prepare.minifyCode", + taskPrefix + "standalone.prepare.copyGamefiles" ) ); - cb(); - }); - gulp.task("standalone.prepareVDF", cb => { - const hash = buildutils.getRevision(); + /** + * + * @param {'win32'|'linux'} platform + * @param {'x64'|'ia32'} arch + * @param {function():void} cb + */ + function packageStandalone(platform, arch, cb) { + const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml")); - const steampipeDir = path.join(__dirname, "steampipe", "scripts"); - const templateContents = fs - .readFileSync(path.join(steampipeDir, "app.vdf.template"), { encoding: "utf-8" }) - .toString(); - - const convertedContents = templateContents.replace("$DESC$", "Commit " + hash); - fs.writeFileSync(path.join(steampipeDir, "app.vdf"), convertedContents); - - cb(); - }); - - gulp.task("standalone.prepare.minifyCode", () => { - return gulp.src(path.join(electronBaseDir, "*.js")).pipe(gulp.dest(tempDestBuildDir)); - }); - - gulp.task("standalone.prepare.copyGamefiles", () => { - return gulp.src("../build/**/*.*", { base: "../build" }).pipe(gulp.dest(tempDestBuildDir)); - }); - - gulp.task("standalone.killRunningInstances", cb => { - try { - execSync("taskkill /F /IM shapezio.exe"); - } catch (ex) { - console.warn("Failed to kill running instances, maybe none are up."); - } - cb(); - }); - - gulp.task( - "standalone.prepare", - gulp.series( - "standalone.killRunningInstances", - "standalone.prepare.cleanup", - "standalone.prepare.copyPrefab", - "standalone.prepare.writePackageJson", - "standalone.prepare.minifyCode", - "standalone.prepare.copyGamefiles" - ) - ); - - /** - * - * @param {'win32'|'linux'|'darwin'} platform - * @param {'x64'|'ia32'} arch - * @param {function():void} cb - * @param {boolean=} isRelease - */ - function packageStandalone(platform, arch, cb, isRelease = true) { - const tomlFile = fs.readFileSync(path.join(__dirname, ".itch.toml")); - - packager({ - dir: tempDestBuildDir, - appCopyright: "Tobias Springer", - appVersion: getVersion(), - buildVersion: "1.0.0", - arch, - platform, - asar: true, - executableName: "shapezio", - icon: path.join(electronBaseDir, "favicon"), - name: "shapez.io-standalone", - out: tempDestDir, - overwrite: true, - appBundleId: "io.shapez.standalone", - appCategoryType: "public.app-category.games", - ...(isRelease && - platform === "darwin" && { - osxSign: { - "identity": process.env.SHAPEZ_CLI_APPLE_CERT_NAME, - "hardened-runtime": true, - "hardenedRuntime": true, - "entitlements": "entitlements.plist", - "entitlements-inherit": "entitlements.plist", - "signature-flags": "library", - }, - osxNotarize: { - appleId: process.env.SHAPEZ_CLI_APPLE_ID, - appleIdPassword: "@keychain:SHAPEZ_CLI_APPLE_ID", - }, - }), - }).then( - appPaths => { - console.log("Packages created:", appPaths); - appPaths.forEach(appPath => { - if (!fs.existsSync(appPath)) { - console.error("Bad app path gotten:", appPath); - return; - } - - fs.writeFileSync( - path.join(appPath, "LICENSE"), - fs.readFileSync(path.join(__dirname, "..", "LICENSE")) - ); - - fs.writeFileSync(path.join(appPath, ".itch.toml"), tomlFile); - - if (platform === "linux") { - fs.writeFileSync( - path.join(appPath, "play.sh"), - '#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n' - ); - fs.chmodSync(path.join(appPath, "play.sh"), 0o775); - } - - if (process.platform === "win32" && platform === "darwin") { - console.warn( - "Cross-building for macOS on Windows: dereferencing symlinks.\n".red + - "This will nearly double app size and make code signature invalid. Sorry!\n" - .red.bold + - "For more information, see " + - "https://github.com/electron/electron-packager/issues/71".underline - ); - - // 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); + packager({ + dir: tempDestBuildDir, + appCopyright: "Tobias Springer", + appVersion: getVersion(), + buildVersion: "1.0.0", + arch, + platform, + asar: true, + executableName: "shapezio", + icon: path.join(electronBaseDir, "favicon"), + name: "shapez.io-standalone" + suffix, + out: tempDestDir, + overwrite: true, + appBundleId: "io.shapez.standalone", + appCategoryType: "public.app-category.games", + }).then( + appPaths => { + console.log("Packages created:", appPaths); + appPaths.forEach(appPath => { + if (!fs.existsSync(appPath)) { + console.error("Bad app path gotten:", appPath); + return; } - } - }); - cb(); - }, - err => { - console.error("Packaging error:", err); - cb(); - } + fs.writeFileSync( + path.join(appPath, "LICENSE"), + fs.readFileSync(path.join(__dirname, "..", "LICENSE")) + ); + + fs.writeFileSync(path.join(appPath, ".itch.toml"), tomlFile); + + if (platform === "linux") { + fs.writeFileSync( + path.join(appPath, "play.sh"), + '#!/usr/bin/env bash\n./shapezio --no-sandbox "$@"\n' + ); + fs.chmodSync(path.join(appPath, "play.sh"), 0o775); + } + }); + + cb(); + }, + err => { + console.error("Packaging error:", err); + cb(); + } + ); + } + + gulp.task(taskPrefix + "standalone.package.prod.win64", cb => packageStandalone("win32", "x64", cb)); + gulp.task(taskPrefix + "standalone.package.prod.linux64", cb => + packageStandalone("linux", "x64", cb) + ); + + gulp.task( + taskPrefix + "standalone.package.prod", + gulp.series( + taskPrefix + "standalone.prepare", + gulp.parallel( + taskPrefix + "standalone.package.prod.win64", + taskPrefix + "standalone.package.prod.linux64" + ) + ) ); } - - gulp.task("standalone.package.prod.win64", cb => packageStandalone("win32", "x64", cb)); - gulp.task("standalone.package.prod.win32", cb => packageStandalone("win32", "ia32", cb)); - gulp.task("standalone.package.prod.linux64", cb => packageStandalone("linux", "x64", cb)); - gulp.task("standalone.package.prod.linux32", cb => packageStandalone("linux", "ia32", cb)); - gulp.task("standalone.package.prod.darwin64", cb => packageStandalone("darwin", "x64", cb)); - gulp.task("standalone.package.prod.darwin64.unsigned", cb => - packageStandalone("darwin", "x64", cb, false) - ); - - gulp.task( - "standalone.package.prod", - gulp.series( - "standalone.prepare", - gulp.parallel( - "standalone.package.prod.win64", - "standalone.package.prod.linux64", - "standalone.package.prod.darwin64" - ) - ) - ); } module.exports = { gulptasksStandalone }; diff --git a/gulp/steampipe/scripts/app.vdf.template b/gulp/steampipe/scripts/app.vdf.template index a13a9db3..32634060 100644 --- a/gulp/steampipe/scripts/app.vdf.template +++ b/gulp/steampipe/scripts/app.vdf.template @@ -2,14 +2,16 @@ { "appid" "1318690" "desc" "$DESC$" - "buildoutput" "C:\work\shapez\shapez.io\gulp\steampipe\steamtemp" + "buildoutput" "C:\work\shapez.io\gulp\steampipe\steamtemp" "contentroot" "" "setlive" "" "preview" "0" "local" "" "depots" { - "1318691" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\windows.vdf" - "1318692" "C:\work\shapez\shapez.io\gulp\steampipe\scripts\linux.vdf" + "1318691" "C:\work\shapez.io\gulp\steampipe\scripts\windows.vdf" + "1318694" "C:\work\shapez.io\gulp\steampipe\scripts\china-windows.vdf" + "1318692" "C:\work\shapez.io\gulp\steampipe\scripts\linux.vdf" + "1318695" "C:\work\shapez.io\gulp\steampipe\scripts\china-linux.vdf" } } diff --git a/gulp/steampipe/scripts/china-linux.vdf b/gulp/steampipe/scripts/china-linux.vdf new file mode 100644 index 00000000..a1c56a96 --- /dev/null +++ b/gulp/steampipe/scripts/china-linux.vdf @@ -0,0 +1,12 @@ +"DepotBuildConfig" +{ + "DepotID" "1318695" + "contentroot" "C:\work\shapez.io\tmp_standalone_files_china\shapez.io-standalone-linux-x64" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + "FileExclusion" "*.pdb" +} \ No newline at end of file diff --git a/gulp/steampipe/scripts/china-windows.vdf b/gulp/steampipe/scripts/china-windows.vdf new file mode 100644 index 00000000..8acc894d --- /dev/null +++ b/gulp/steampipe/scripts/china-windows.vdf @@ -0,0 +1,12 @@ +"DepotBuildConfig" +{ + "DepotID" "1318694" + "contentroot" "C:\work\shapez.io\tmp_standalone_files_china\shapez.io-standalone-win32-x64" + "FileMapping" + { + "LocalPath" "*" + "DepotPath" "." + "recursive" "1" + } + "FileExclusion" "*.pdb" +} \ No newline at end of file diff --git a/gulp/steampipe/scripts/linux.vdf b/gulp/steampipe/scripts/linux.vdf index 60dfcca5..df1a86cc 100644 --- a/gulp/steampipe/scripts/linux.vdf +++ b/gulp/steampipe/scripts/linux.vdf @@ -1,7 +1,7 @@ "DepotBuildConfig" { "DepotID" "1318692" - "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64" + "contentroot" "C:\work\shapez.io\tmp_standalone_files\shapez.io-standalone-linux-x64" "FileMapping" { "LocalPath" "*" diff --git a/gulp/steampipe/scripts/windows.vdf b/gulp/steampipe/scripts/windows.vdf index 7d0db436..bf0e8721 100644 --- a/gulp/steampipe/scripts/windows.vdf +++ b/gulp/steampipe/scripts/windows.vdf @@ -1,7 +1,7 @@ "DepotBuildConfig" { "DepotID" "1318691" - "contentroot" "C:\work\shapez\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64" + "contentroot" "C:\work\shapez.io\tmp_standalone_files\shapez.io-standalone-win32-x64" "FileMapping" { "LocalPath" "*" diff --git a/gulp/webpack.config.js b/gulp/webpack.config.js index 6e1d7388..3f666e73 100644 --- a/gulp/webpack.config.js +++ b/gulp/webpack.config.js @@ -6,7 +6,7 @@ const { getRevision, getVersion, getAllResourceImages } = require("./buildutils" const lzString = require("lz-string"); const CircularDependencyPlugin = require("circular-dependency-plugin"); -module.exports = ({ watch = false, standalone = false }) => { +module.exports = ({ watch = false, standalone = false, chineseVersion = false }) => { return { mode: "development", devtool: "cheap-source-map", @@ -34,6 +34,7 @@ module.exports = ({ watch = false, standalone = false }) => { G_TRACKING_ENDPOINT: JSON.stringify( lzString.compressToEncodedURIComponent("http://localhost:10005/v1") ), + G_CHINA_VERSION: JSON.stringify(chineseVersion), G_IS_DEV: "true", G_IS_RELEASE: "false", G_IS_MOBILE_APP: "false", diff --git a/gulp/webpack.production.config.js b/gulp/webpack.production.config.js index c26bca68..1779a76f 100644 --- a/gulp/webpack.production.config.js +++ b/gulp/webpack.production.config.js @@ -16,12 +16,15 @@ module.exports = ({ standalone = false, isBrowser = true, mobileApp = false, + chineseVersion = false, }) => { const globalDefs = { assert: enableAssert ? "window.assert" : "false && window.assert", assertAlways: "window.assert", abstract: "window.assert(false, 'abstract method called');", G_IS_DEV: "false", + + G_CHINA_VERSION: JSON.stringify(chineseVersion), G_IS_RELEASE: environment === "prod" ? "true" : "false", G_IS_STANDALONE: standalone ? "true" : "false", G_IS_BROWSER: isBrowser ? "true" : "false", diff --git a/gulp/yarn.lock b/gulp/yarn.lock index 12959102..854ca274 100644 --- a/gulp/yarn.lock +++ b/gulp/yarn.lock @@ -3402,7 +3402,7 @@ cross-spawn@^5.0.1: shebang-command "^1.2.0" which "^1.2.9" -cross-spawn@^7.0.0: +cross-spawn@^7.0.0, cross-spawn@^7.0.3: version "7.0.3" resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== @@ -4746,6 +4746,21 @@ execa@^4.0.0: signal-exit "^3.0.2" strip-final-newline "^2.0.0" +execa@^5.0.0: + version "5.0.0" + resolved "https://registry.yarnpkg.com/execa/-/execa-5.0.0.tgz#4029b0007998a841fbd1032e5f4de86a3c1e3376" + integrity sha512-ov6w/2LCiuyO4RLYGdpFGjkcs0wMTgGE8PrkTHikeUy5iJekXyPIKUjifk5CsE0pt7sMCrMZ3YNqoCj6idQOnQ== + dependencies: + cross-spawn "^7.0.3" + get-stream "^6.0.0" + human-signals "^2.1.0" + is-stream "^2.0.0" + merge-stream "^2.0.0" + npm-run-path "^4.0.1" + onetime "^5.1.2" + signal-exit "^3.0.3" + strip-final-newline "^2.0.0" + executable@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" @@ -5517,6 +5532,11 @@ get-stream@^5.0.0, get-stream@^5.1.0: dependencies: pump "^3.0.0" +get-stream@^6.0.0: + version "6.0.0" + resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-6.0.0.tgz#3e0012cb6827319da2706e601a1583e8629a6718" + integrity sha512-A1B3Bh1UmL0bidM/YX2NsCOTnGJePL9rO/M+Mw3m9f2gUpfokS0hi5Eah0WSUEWZdZhIZtMjkIYS7mDfOqNHbg== + get-value@^2.0.3, get-value@^2.0.6: version "2.0.6" resolved "https://registry.yarnpkg.com/get-value/-/get-value-2.0.6.tgz#dc15ca1c672387ca76bd37ac0a395ba2042a2c28" @@ -5539,6 +5559,16 @@ gifsicle@^5.0.0: execa "^4.0.0" logalot "^2.0.0" +gifsicle@^5.2.0: + version "5.2.0" + resolved "https://registry.yarnpkg.com/gifsicle/-/gifsicle-5.2.0.tgz#b06b25ed7530f033f6ed2c545d6f9b546cc182fb" + integrity sha512-vOIS3j0XoTCxq9pkGj43gEix82RkI5FveNgaFZutjbaui/HH+4fR8Y56dwXDuxYo8hR4xOo6/j2h1WHoQW6XLw== + dependencies: + bin-build "^3.0.0" + bin-wrapper "^4.0.0" + execa "^5.0.0" + logalot "^2.0.0" + glob-all@^3.1.0: version "3.1.0" resolved "https://registry.yarnpkg.com/glob-all/-/glob-all-3.1.0.tgz#8913ddfb5ee1ac7812656241b03d5217c64b02ab" @@ -6520,6 +6550,11 @@ human-signals@^1.1.1: resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== +human-signals@^2.1.0: + version "2.1.0" + resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-2.1.0.tgz#dc91fcba42e4d06e4abaed33b3e7a3c02f514ea0" + integrity sha512-B4FFZ6q/T2jhhksgkbEW3HBvWIfDW85snkQgawt07S7J5QXTk6BkNV+0yAeZrM5QpMAdYlocGoljn0sJ/WQkFw== + iconv-lite@0.4.24, iconv-lite@^0.4.24, iconv-lite@^0.4.4: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" @@ -8772,7 +8807,7 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npm-run-path@^4.0.0: +npm-run-path@^4.0.0, npm-run-path@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== @@ -8985,6 +9020,13 @@ onetime@^5.1.0: dependencies: mimic-fn "^2.1.0" +onetime@^5.1.2: + version "5.1.2" + resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" + integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== + dependencies: + mimic-fn "^2.1.0" + open@^0.0.5: version "0.0.5" resolved "https://registry.yarnpkg.com/open/-/open-0.0.5.tgz#42c3e18ec95466b6bf0dc42f3a2945c3f0cad8fc" @@ -11469,6 +11511,11 @@ signal-exit@^3.0.0, signal-exit@^3.0.2: resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.2.tgz#b5fdc08f1287ea1178628e415e25132b73646c6d" integrity sha1-tf3AjxKH6hF4Yo5BXiUTK3NkbG0= +signal-exit@^3.0.3: + version "3.0.3" + resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.3.tgz#a1410c2edd8f077b08b4e253c8eacfcaf057461c" + integrity sha512-VUJ49FC8U1OxwZLxIbTTrDvLnf/6TDgxZcK8wxR8zs13xpx7xbG60ndBlhNrFi2EMuFRoeDoJO7wthSLq42EjA== + simple-swizzle@^0.2.2: version "0.2.2" resolved "https://registry.yarnpkg.com/simple-swizzle/-/simple-swizzle-0.2.2.tgz#a4da6b635ffcccca33f70d17cb92592de95e557a" diff --git a/res/logo_cn.png b/res/logo_cn.png new file mode 100644 index 0000000000000000000000000000000000000000..5ef18416dfe923dc4dbfa223b31490bb494d12f2 GIT binary patch literal 34370 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

xDIoi#!9E^-F&Kb+gr7gQ>?d6*Rg~*EYDUD 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 src.startsWith("ui/") && src.indexOf(".gif") < 0), ]; const essentialMainMenuSounds = [ diff --git a/src/js/globals.d.ts b/src/js/globals.d.ts index 642745ca..4a903437 100644 --- a/src/js/globals.d.ts +++ b/src/js/globals.d.ts @@ -19,6 +19,8 @@ declare const G_BUILD_VERSION: string; declare const G_ALL_UI_IMAGES: Array; declare const G_IS_RELEASE: boolean; +declare const G_CHINA_VERSION : boolean; + // Polyfills declare interface String { replaceAll(search: string, replacement: string): string; diff --git a/src/js/states/about.js b/src/js/states/about.js index db06d8de..b8f465b7 100644 --- a/src/js/states/about.js +++ b/src/js/states/about.js @@ -15,7 +15,9 @@ export class AboutState extends TextualGameState { getMainContentHTML() { return `

- shapez.io Logo + shapez.io Logo
${T.about.body diff --git a/src/js/states/main_menu.js b/src/js/states/main_menu.js index dc8d30ce..2e20b05b 100644 --- a/src/js/states/main_menu.js +++ b/src/js/states/main_menu.js @@ -42,7 +42,12 @@ export class MainMenuState extends GameState { return `
- + ${ + G_CHINA_VERSION + ? "" + : `` + } + ${ G_IS_STANDALONE || G_IS_DEV @@ -58,7 +63,9 @@ export class MainMenuState extends GameState { @@ -77,11 +84,17 @@ export class MainMenuState extends GameState {
-