diff --git a/gulp/html.js b/gulp/html.js index df80d2d4..14740713 100644 --- a/gulp/html.js +++ b/gulp/html.js @@ -118,6 +118,10 @@ function gulptasksHTML($, gulp, buildFolder) { style.textContent = loadingCss; document.head.appendChild(style); + let bodyContent = fs + .readFileSync(path.join(__dirname, "preloader", "preloader.html")) + .toString(); + // Append loader, but not in standalone (directly include bundle there) if (standalone) { const bundleScript = document.createElement("script"); @@ -135,19 +139,12 @@ function gulptasksHTML($, gulp, buildFolder) { loadJs.type = "text/javascript"; let scriptContent = ""; scriptContent += `var bundleSrc = '${cachebust("bundle.js")}';\n`; - // scriptContent += `var bundleSrcTranspiled = '${cachebust( - // "bundle-transpiled.js" - // )}';\n`; if (integrity) { scriptContent += "var bundleIntegrity = '" + computeIntegrityHash(path.join(buildFolder, "bundle.js")) + "';\n"; - // scriptContent += - // "var bundleIntegrityTranspiled = '" + - // computeIntegrityHash(path.join(buildFolder, "bundle-transpiled.js")) + - // "';\n"; } else { scriptContent += "var bundleIntegrity = null;\n"; scriptContent += "var bundleIntegrityTranspiled = null;\n"; @@ -158,11 +155,21 @@ function gulptasksHTML($, gulp, buildFolder) { .toString(); loadJs.textContent = scriptContent; document.head.appendChild(loadJs); - } - const bodyContent = fs - .readFileSync(path.join(__dirname, "preloader", "preloader.html")) - .toString(); + // Click fraud prevention + bodyContent = + ` + + ` + bodyContent; + } document.body.innerHTML = bodyContent; } diff --git a/res_raw/sounds/sfx/unlock_upgrade.wav b/res_raw/sounds/sfx/unlock_upgrade.wav new file mode 100644 index 00000000..b92acb8c Binary files /dev/null and b/res_raw/sounds/sfx/unlock_upgrade.wav differ diff --git a/src/css/ingame_hud/demo_timer.scss b/src/css/ingame_hud/demo_timer.scss deleted file mode 100644 index 47cc8ab0..00000000 --- a/src/css/ingame_hud/demo_timer.scss +++ /dev/null @@ -1,28 +0,0 @@ -#ingame_HUD_DemoTimer { - position: absolute; - @include S(top, 10px); - left: 50%; - text-align: center; - color: #fff; - transform: translateX(-50%); - color: rgb(248, 40, 106); - - .timer { - @include Heading; - @include S(font-size, 40px); - } - - &.expired .timer { - @include InlineAnimation(1s ease-in-out infinite) { - 50% { - transform: scale(1.05); - } - } - } - - .description { - @include SuperSmallText; - @include S(margin-top, 10px); - text-transform: uppercase; - } -} diff --git a/src/css/ingame_hud/shop.scss b/src/css/ingame_hud/shop.scss index 356f2d18..a9b27ebe 100644 --- a/src/css/ingame_hud/shop.scss +++ b/src/css/ingame_hud/shop.scss @@ -311,6 +311,7 @@ 50% { background-color: lighten($colorGreenBright, 10); + transform: scale(1.02); } 100% { } diff --git a/src/css/ingame_hud/standalone_advantages.scss b/src/css/ingame_hud/standalone_advantages.scss index bc285a30..0be61a5e 100644 --- a/src/css/ingame_hud/standalone_advantages.scss +++ b/src/css/ingame_hud/standalone_advantages.scss @@ -1,6 +1,6 @@ #ingame_HUD_StandaloneAdvantages { .content { - @include S(width, 440px); + @include S(width, 500px); @include S(min-height, 300px); } p { @@ -10,14 +10,10 @@ .points { display: grid; grid-template-columns: 1fr 1fr; - @include S(grid-column-gap, 10px); - @include S(grid-row-gap, 20px); - @include S(margin, 10px, 0, 20px); - grid-template-rows: #{D(30px)}; + @include S(grid-column-gap, 5px); + @include S(grid-row-gap, 5px); + @include S(margin, 10px, 0, 10px); align-items: center; - background: #eef1f4; - @include S(border-radius, $globalBorderRadius); - @include S(padding, 15px, 4px); } .title { @@ -90,20 +86,15 @@ .playtimeDisclaimerDownload { @include SuperSmallText; - width: 100%; box-sizing: border-box; text-align: center; - background: #b3f2c5; @include S(border-radius, $globalBorderRadius); - @include S(padding, 7px, 10px); + @include S(padding, 4px, 4px); @include S(margin-bottom, 15px); pointer-events: all; transition: background-color 0.12s ease-in-out; color: rgba(#000, 0.5); - &:hover { - background: darken(#b3f2c5, 3); - } cursor: pointer; strong { @@ -121,6 +112,12 @@ overflow: visible; @include S(border-radius, $globalBorderRadius); + @include InlineAnimation(1s ease-in-out infinite) { + 50% { + transform: scale(1.02, 1.03); + } + } + > .discount { position: absolute; @include S(top, -7px); @@ -143,8 +140,13 @@ .point { display: grid; - grid-template-columns: #{D(55px)} auto; + grid-template-columns: #{D(50px)} auto; grid-template-rows: D(20px) D(20px); + background: #eff2f4 #{D(12px)} center / #{D(30px)} no-repeat; + + @include S(border-radius, $globalBorderRadius); + @include S(padding, 10px, 4px, 4px); + @include S(height, 40px); > strong { grid-column: 2 / 3; @@ -161,8 +163,6 @@ opacity: 0.8; } - background: transparent #{D(10px)} center / #{D(30px)} no-repeat; - &.levels { & { /* @load-async */ diff --git a/src/css/main.scss b/src/css/main.scss index 46b6fced..f1ec8570 100644 --- a/src/css/main.scss +++ b/src/css/main.scss @@ -49,7 +49,6 @@ @import "ingame_hud/entity_debugger"; @import "ingame_hud/tutorial_hints"; @import "ingame_hud/watermark"; -@import "ingame_hud/demo_timer"; @import "ingame_hud/blueprint_placer"; @import "ingame_hud/waypoints"; @import "ingame_hud/interactive_tutorial"; @@ -113,7 +112,6 @@ ingame_HUD_BetaOverlay, ingame_HUD_Shop, ingame_HUD_Statistics, ingame_HUD_ShapeViewer, -ingame_HUD_DemoTimer, ingame_HUD_StandaloneAdvantages, ingame_HUD_UnlockNotification, ingame_HUD_PuzzleCompleteNotification, diff --git a/src/js/core/background_resources_loader.js b/src/js/core/background_resources_loader.js index e93c73d4..7d72614f 100644 --- a/src/js/core/background_resources_loader.js +++ b/src/js/core/background_resources_loader.js @@ -58,7 +58,7 @@ export class BackgroundResourcesLoader { return this.mainMenuPromise; } - logger.warn("⏰ Loading main menu assets"); + logger.log("⏰ Loading main menu assets"); return (this.mainMenuPromise = this.loadAssets(MAIN_MENU_ASSETS)); } @@ -66,7 +66,7 @@ export class BackgroundResourcesLoader { if (this.ingamePromise) { return this.ingamePromise; } - logger.warn("⏰ Loading ingame assets"); + logger.log("⏰ Loading ingame assets"); const promise = this.loadAssets(INGAME_ASSETS).then(() => initSpriteCache()); return (this.ingamePromise = promise); } diff --git a/src/js/core/stale_area_detector.js b/src/js/core/stale_area_detector.js index 5048ee37..631d0327 100644 --- a/src/js/core/stale_area_detector.js +++ b/src/js/core/stale_area_detector.js @@ -79,8 +79,8 @@ export class StaleAreaDetector { */ update() { if (this.staleArea) { - logger.log(this.name, "is recomputing", this.staleArea.toString()); if (G_IS_DEV && globalConfig.debug.renderChanges) { + logger.log(this.name, "is recomputing", this.staleArea.toString()); this.root.hud.parts.changesDebugger.renderChange(this.name, this.staleArea, "#fd145b"); } this.recomputeMethod(this.staleArea); diff --git a/src/js/game/hud/hud.js b/src/js/game/hud/hud.js index 48cee7c3..2f3b5629 100644 --- a/src/js/game/hud/hud.js +++ b/src/js/game/hud/hud.js @@ -13,7 +13,6 @@ import { HUDBuildingPlacer } from "./parts/building_placer"; import { HUDColorBlindHelper } from "./parts/color_blind_helper"; import { HUDChangesDebugger } from "./parts/debug_changes"; import { HUDDebugInfo } from "./parts/debug_info"; -import { HUDDemoTimer } from "./parts/demo_timer"; import { HUDEntityDebugger } from "./parts/entity_debugger"; import { HUDModalDialogs } from "./parts/modal_dialogs"; import { enumNotificationType } from "./parts/notifications"; @@ -86,10 +85,6 @@ export class GameHUD { this.parts.betaOverlay = new HUDBetaOverlay(this.root); } - if (this.root.app.restrictionMgr.getIsStandaloneMarketingActive()) { - this.parts.demoTimer = new HUDDemoTimer(this.root); - } - const additionalParts = this.root.gameMode.additionalHudParts; for (const [partId, part] of Object.entries(additionalParts)) { this.parts[partId] = new part(this.root); @@ -217,7 +212,7 @@ export class GameHUD { * @param {DrawParameters} parameters */ drawOverlays(parameters) { - const partsOrder = ["waypoints", "wireInfo"]; + const partsOrder = ["waypoints", "watermark", "wireInfo"]; for (let i = 0; i < partsOrder.length; ++i) { if (this.parts[partsOrder[i]]) { diff --git a/src/js/game/hud/parts/demo_timer.js b/src/js/game/hud/parts/demo_timer.js deleted file mode 100644 index 9421eacf..00000000 --- a/src/js/game/hud/parts/demo_timer.js +++ /dev/null @@ -1,43 +0,0 @@ -import { makeDiv } from "../../../core/utils"; -import { T } from "../../../translations"; -import { BaseHUDPart } from "../base_hud_part"; - -export class HUDDemoTimer extends BaseHUDPart { - createElements(parent) { - this.mainElement = makeDiv(parent, "ingame_HUD_DemoTimer", [], ""); - - this.timerElement = makeDiv(this.mainElement, null, ["timer"], "12:00"); - this.descElement = makeDiv(this.mainElement, null, ["description"], T.demoBanners.untilEndOfDemo); - - this.currentValue = ""; - } - - get totalTime() { - return G_IS_STEAM_DEMO ? 15 : 30; - } - - initialize() {} - - update() { - const time = Math.max(0, this.totalTime * 60 - this.root.time.now()); - - let minutes = Math.floor(time / 60); - let seconds = Math.floor(time % 60); - let displayString = String(minutes).padStart(2, "0") + ":" + String(seconds).padStart(2, "0"); - - if (displayString !== this.currentValue) { - this.currentValue = displayString; - this.timerElement.innerText = displayString; - if (time === 0) { - this.mainElement.classList.add("expired"); - } - } - - if (time === 0) { - const advantages = this.root.hud.parts.standaloneAdvantages; - if (advantages && !advantages.visible) { - advantages.show(true); - } - } - } -} diff --git a/src/js/game/hud/parts/shop.js b/src/js/game/hud/parts/shop.js index 70f7fa25..fa92b743 100644 --- a/src/js/game/hud/parts/shop.js +++ b/src/js/game/hud/parts/shop.js @@ -1,6 +1,7 @@ import { ClickDetector } from "../../../core/click_detector"; import { InputReceiver } from "../../../core/input_receiver"; import { formatBigNumber, getRomanNumber, makeDiv } from "../../../core/utils"; +import { SOUNDS } from "../../../platform/sound"; import { T } from "../../../translations"; import { KeyActionMapper, KEYMAPPINGS } from "../../key_action_mapper"; import { BaseHUDPart } from "../base_hud_part"; @@ -243,8 +244,9 @@ export class HUDShop extends BaseHUDPart { } tryUnlockNextTier(upgradeId) { - // Nothing - this.root.hubGoals.tryUnlockUpgrade(upgradeId); + if (this.root.hubGoals.tryUnlockUpgrade(upgradeId)) { + this.root.app.sound.playUiSound(SOUNDS.unlockUpgrade); + } } isBlockingOverlay() { diff --git a/src/js/game/hud/parts/standalone_advantages.js b/src/js/game/hud/parts/standalone_advantages.js index 59ffee80..3953830c 100644 --- a/src/js/game/hud/parts/standalone_advantages.js +++ b/src/js/game/hud/parts/standalone_advantages.js @@ -12,8 +12,8 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { // DIALOG Inner / Wrapper this.dialogInner = makeDiv(this.background, null, ["dialogInner"]); - this.title = makeDiv(this.dialogInner, null, ["title"], T.ingame.standaloneAdvantages.title_expired); - this.subTitle = makeDiv(this.dialogInner, null, ["subTitle"], T.ingame.standaloneAdvantages.title); + this.title = makeDiv(this.dialogInner, null, ["title"], ""); + this.subTitle = makeDiv(this.dialogInner, null, ["subTitle"], T.ingame.standaloneAdvantages.titleV2); this.contentDiv = makeDiv( this.dialogInner, @@ -34,7 +34,6 @@ export class HUDStandaloneAdvantages extends BaseHUDPart {
-
${T.demoBanners.playtimeDisclaimer}
${T.demoBanners.playtimeDisclaimerDownload}
@@ -75,6 +74,18 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { return 15 * 60; } + shouldPauseGame() { + return this.visible; + } + + shouldPauseRendering() { + return this.visible; + } + + hasBlockingOverlayOpen() { + return this.visible; + } + initialize() { this.domAttach = new DynamicDomAttach(this.root, this.background, { attachClass: "visible", @@ -83,7 +94,8 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { this.inputReciever = new InputReceiver("standalone-advantages"); this.close(); - // On standalone, show popup instant - but don't do so on web + // On standalone, show popup instant - but don't do so on web, since it increases + // the amount of clicks to get into the game if (G_IS_STEAM_DEMO) { // show instant this.lastShown = -1e10; @@ -91,6 +103,15 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { // wait for next interval this.lastShown = 0; } + + this.root.signals.gameRestored.add(() => { + if ( + this.root.hubGoals.level >= this.root.gameMode.getLevelDefinitions().length - 1 && + this.root.app.restrictionMgr.getIsStandaloneMarketingActive() + ) { + this.show(true); + } + }); } show(final = false) { @@ -98,6 +119,12 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { this.visible = true; this.final = final; this.root.app.inputMgr.makeSureAttachedAndOnTop(this.inputReciever); + + if (this.final) { + this.title.innerText = T.ingame.standaloneAdvantages.titleExpiredV2; + } else { + this.title.innerText = T.ingame.standaloneAdvantages.titleEnjoyingDemo; + } } close() { @@ -112,6 +139,10 @@ export class HUDStandaloneAdvantages extends BaseHUDPart { } update() { + if (!this.visible && this.root.time.now() - this.lastShown > this.showIntervalSeconds) { + this.show(); + } + this.domAttach.update(this.visible); } } diff --git a/src/js/game/hud/parts/unlock_notification.js b/src/js/game/hud/parts/unlock_notification.js index 3b2498f0..fe8aae5b 100644 --- a/src/js/game/hud/parts/unlock_notification.js +++ b/src/js/game/hud/parts/unlock_notification.js @@ -31,10 +31,6 @@ export class HUDUnlockNotification extends BaseHUDPart { this.element = makeDiv(parent, "ingame_HUD_UnlockNotification", ["noBlur"]); - if (G_IS_STEAM_DEMO || !G_IS_STANDALONE) { - this.element.classList.add("withinDemo"); - } - const dialog = makeDiv(this.element, null, ["dialog"]); this.elemTitle = makeDiv(dialog, null, ["title"]); @@ -135,6 +131,13 @@ export class HUDUnlockNotification extends BaseHUDPart { this.root.hud.signals.unlockNotificationFinished.dispatch(); + if ( + this.root.hubGoals.level > this.root.gameMode.getLevelDefinitions().length - 1 && + this.root.app.restrictionMgr.getIsStandaloneMarketingActive() + ) { + this.root.hud.parts.standaloneAdvantages.show(true); + } + if (!this.root.app.settings.getAllSettings().offerHints) { return; } diff --git a/src/js/game/hud/parts/watermark.js b/src/js/game/hud/parts/watermark.js index 59d039e4..eb877261 100644 --- a/src/js/game/hud/parts/watermark.js +++ b/src/js/game/hud/parts/watermark.js @@ -5,23 +5,6 @@ import { BaseHUDPart } from "../base_hud_part"; export class HUDWatermark extends BaseHUDPart { createElements(parent) { - // To be continued later - // let linkText = ""; - // switch (this.root.app.gameAnalytics.abtVariant) { - // case "0": { - // linkText = "Get on Steam"; - // break; - // } - // case "1": { - // linkText = "Play on Steam"; - // break; - // } - // case "2": { - // linkText = T.ingame.watermark.get_on_steam; - // break; - // } - // } - let linkText = T.ingame.watermark.get_on_steam; this.linkElement = makeDiv( @@ -41,4 +24,23 @@ export class HUDWatermark extends BaseHUDPart { initialize() {} update() {} + + /** + * + * @param {import("../../../core/draw_utils").DrawParameters} parameters + */ + drawOverlays(parameters) { + const w = this.root.gameWidth; + + parameters.context.fillStyle = "rgba(20, 30, 40, 0.25)"; + parameters.context.font = "bold " + this.root.app.getEffectiveUiScale() * 40 + "px GameFont"; + parameters.context.textAlign = "center"; + parameters.context.fillText( + T.demoBanners.title.toUpperCase(), + w / 2, + this.root.app.getEffectiveUiScale() * 50 + ); + + parameters.context.textAlign = "left"; + } } diff --git a/src/js/game/map_view.js b/src/js/game/map_view.js index 6a940a60..bbd6a82e 100644 --- a/src/js/game/map_view.js +++ b/src/js/game/map_view.js @@ -22,8 +22,12 @@ export class MapView extends BaseMap { /** * The cached background sprite, containing the flat background - * @type {HTMLCanvasElement} */ - this.cachedBackgroundCanvas = null; + * @type {Object} + */ + this.cachedBackgroundCanvases = { + regular: null, + placing: null, + }; /** @type {CanvasRenderingContext2D} */ this.cachedBackgroundContext = null; @@ -36,8 +40,10 @@ export class MapView extends BaseMap { } cleanup() { - freeCanvas(this.cachedBackgroundCanvas); - this.cachedBackgroundCanvas = null; + for (const key in this.cachedBackgroundCanvases) { + freeCanvas(this.cachedBackgroundCanvases[key]); + this.cachedBackgroundCanvases[key] = null; + } } /** @@ -99,28 +105,29 @@ export class MapView extends BaseMap { * Initializes all canvases used for background rendering */ internalInitializeCachedBackgroundCanvases() { - // Background canvas - const dims = globalConfig.tileSize; - const dpi = this.backgroundCacheDPI; - const [canvas, context] = makeOffscreenBuffer(dims * dpi, dims * dpi, { - smooth: false, - label: "map-cached-bg", - }); - context.scale(dpi, dpi); - - context.fillStyle = THEME.map.background; - context.fillRect(0, 0, dims, dims); - - const borderWidth = THEME.map.gridLineWidth; - context.fillStyle = THEME.map.grid; - context.fillRect(0, 0, dims, borderWidth); - context.fillRect(0, borderWidth, borderWidth, dims); - - context.fillRect(dims - borderWidth, borderWidth, borderWidth, dims - 2 * borderWidth); - context.fillRect(borderWidth, dims - borderWidth, dims, borderWidth); - - this.cachedBackgroundCanvas = canvas; - this.cachedBackgroundContext = context; + for (const key in this.cachedBackgroundCanvases) { + // Background canvas + const dims = globalConfig.tileSize; + const dpi = this.backgroundCacheDPI; + const [canvas, context] = makeOffscreenBuffer(dims * dpi, dims * dpi, { + smooth: false, + label: "map-cached-bg", + }); + context.scale(dpi, dpi); + + context.fillStyle = THEME.map.background; + context.fillRect(0, 0, dims, dims); + + const borderWidth = THEME.map.gridLineWidth; + context.fillStyle = THEME.map["grid" + key[0].toUpperCase() + key.substring(1)] || "red"; + context.fillRect(0, 0, dims, borderWidth); + context.fillRect(0, borderWidth, borderWidth, dims); + + context.fillRect(dims - borderWidth, borderWidth, borderWidth, dims - 2 * borderWidth); + context.fillRect(borderWidth, dims - borderWidth, dims, borderWidth); + + this.cachedBackgroundCanvases[key] = canvas; + } } /** @@ -225,14 +232,19 @@ export class MapView extends BaseMap { const dpi = this.backgroundCacheDPI; parameters.context.scale(1 / dpi, 1 / dpi); - // @ts-ignore - if (this.cachedBackgroundCanvas._contextLost) { - freeCanvas(this.cachedBackgroundCanvas); + let key = "regular"; + if (this.root.hud.parts.buildingPlacer.currentMetaBuilding.get()) { + key = "placing"; + } + + // @ts-ignore` + if (this.cachedBackgroundCanvases[key]._contextLost) { + freeCanvas(this.cachedBackgroundCanvases[key]); this.internalInitializeCachedBackgroundCanvases(); } parameters.context.fillStyle = parameters.context.createPattern( - this.cachedBackgroundCanvas, + this.cachedBackgroundCanvases[key], "repeat" ); parameters.context.fillRect( diff --git a/src/js/game/modes/levels.js b/src/js/game/modes/levels.js index 5c986dce..bd404dc5 100644 --- a/src/js/game/modes/levels.js +++ b/src/js/game/modes/levels.js @@ -1,249 +1,363 @@ import { enumHubGoalRewards } from "../tutorial_goals"; -export const LevelSetVariant = { - NoRestrictions: "NoRestrictions", - LimitedLevel8: "LimitedLevel8", - LimitedLevelBlueprints: "LimitedLevelBlueprints", -}; - export const finalGameShape = "RuCw--Cw:----Ru--"; const chinaShapes = G_WEGAME_VERSION || G_CHINA_VERSION; +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +const WEB_DEMO_LEVELS = () => [ + // 1 + // Circle + { + shape: "CuCuCuCu", // belts t1 + required: 10, + reward: enumHubGoalRewards.reward_cutter_and_trash, + }, + + // 2 + // Cutter + { + shape: "----CuCu", // + required: 20, + reward: enumHubGoalRewards.no_reward, + }, + + // 3 + // Rectangle + { + shape: "RuRuRuRu", // miners t1 + required: 50, + reward: enumHubGoalRewards.reward_balancer, + }, + + // 4 + { + shape: "RuRu----", // processors t2 + required: 30, + reward: enumHubGoalRewards.reward_rotater, + }, + + // 5 + // Rotater + { + shape: "Cu----Cu", // belts t2 + required: 75, + reward: enumHubGoalRewards.reward_tunnel, + }, + + // 6 + { + shape: "Cu------", // miners t2 + required: 75, + reward: enumHubGoalRewards.reward_painter, + }, + + // 7 + // Painter + { + shape: "CrCrCrCr", // unused + required: 120, + reward: enumHubGoalRewards.reward_rotater_ccw, + }, + // 8 + { + shape: "RbRb----", // painter t2 + required: 170, + reward: enumHubGoalRewards.reward_mixer, + }, + // End of demo + { + shape: "RbRb----", + required: 0, + reward: enumHubGoalRewards.reward_demo_end, + }, +]; + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +const STEAM_DEMO_LEVELS = () => [ + // 1 + // Circle + { + shape: "CuCuCuCu", // belts t1 + required: 35, + reward: enumHubGoalRewards.reward_cutter_and_trash, + }, + + // 2 + // Cutter + { + shape: "----CuCu", // + required: 45, + reward: enumHubGoalRewards.no_reward, + }, + + // 3 + // Rectangle + { + shape: "RuRuRuRu", // miners t1 + required: 90, + reward: enumHubGoalRewards.reward_balancer, + }, + + // 4 + { + shape: "RuRu----", // processors t2 + required: 70, + reward: enumHubGoalRewards.reward_rotater, + }, + + // 5 + // Rotater + { + shape: "Cu----Cu", // belts t2 + required: 160, + reward: enumHubGoalRewards.reward_tunnel, + }, + + // 6 + { + shape: "Cu------", // miners t2 + required: 160, + reward: enumHubGoalRewards.reward_painter, + }, + + // 7 + // Painter + { + shape: "CrCrCrCr", // unused + required: 140, + reward: enumHubGoalRewards.reward_rotater_ccw, + }, + // 8 + { + shape: "RbRb----", // painter t2 + required: 225, + reward: enumHubGoalRewards.reward_mixer, + }, + // End of demo + { + shape: "RbRb----", + required: 0, + reward: enumHubGoalRewards.reward_demo_end, + }, +]; + +//////////////////////////////////////////////////////////////////////// +//////////////////////////////////////////////////////////////////////// + +const STANDALONE_LEVELS = () => [ + // 1 + // Circle + { + shape: "CuCuCuCu", // belts t1 + required: 30, + reward: enumHubGoalRewards.reward_cutter_and_trash, + }, + + // 2 + // Cutter + { + shape: "----CuCu", // + required: 40, + reward: enumHubGoalRewards.no_reward, + }, + + // 3 + // Rectangle + { + shape: "RuRuRuRu", // miners t1 + required: 70, + reward: enumHubGoalRewards.reward_balancer, + }, + + // 4 + { + shape: "RuRu----", // processors t2 + required: 70, + reward: enumHubGoalRewards.reward_rotater, + }, + + // 5 + // Rotater + { + shape: "Cu----Cu", // belts t2 + required: 170, + reward: enumHubGoalRewards.reward_tunnel, + }, + + // 6 + { + shape: "Cu------", // miners t2 + required: 270, + reward: enumHubGoalRewards.reward_painter, + }, + + // 7 + // Painter + { + shape: "CrCrCrCr", // unused + required: 300, + reward: enumHubGoalRewards.reward_rotater_ccw, + }, + // 8 + { + shape: "RbRb----", // painter t2 + required: 480, + reward: enumHubGoalRewards.reward_mixer, + }, + // 9 + // Mixing (purple) + { + shape: "CpCpCpCp", // belts t3 + required: 600, + reward: enumHubGoalRewards.reward_merger, + }, + + // 10 + // STACKER: Star shape + cyan + { + shape: "ScScScSc", // miners t3 + required: 800, + reward: enumHubGoalRewards.reward_stacker, + }, + + // 11 + // Chainable miner + { + shape: "CgScScCg", // processors t3 + required: 1000, + reward: enumHubGoalRewards.reward_miner_chainable, + }, + + // 12 + // Blueprints + { + shape: "CbCbCbRb:CwCwCwCw", + required: 1000, + reward: enumHubGoalRewards.reward_blueprints, + }, + // 13 + // Tunnel Tier 2 + { + shape: chinaShapes ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", // painting t3 + required: 3800, + reward: enumHubGoalRewards.reward_underground_belt_tier_2, + }, + + // 14 + // Belt reader + { + shape: "--Cg----:--Cr----", // unused + required: 8, // Per second! + reward: enumHubGoalRewards.reward_belt_reader, + throughputOnly: true, + }, + + // 15 + // Storage + { + shape: "SrSrSrSr:CyCyCyCy", // unused + required: 10000, + reward: enumHubGoalRewards.reward_storage, + }, + + // 16 + // Quad Cutter + { + shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", // belts t4 (two variants) + required: 6000, + reward: enumHubGoalRewards.reward_cutter_quad, + }, + + // 17 + // Double painter + { + shape: chinaShapes ? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu" : "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) + required: 20000, + reward: enumHubGoalRewards.reward_painter_double, + }, + + // 18 + // Rotater (180deg) + { + shape: "Sg----Sg:CgCgCgCg:--CyCy--", // unused + required: 20000, + reward: enumHubGoalRewards.reward_rotater_180, + }, + + // 19 + // Compact splitter + { + shape: "CpRpCp--:SwSwSwSw", + required: 25000, + reward: enumHubGoalRewards.reward_splitter, + }, + + // 20 + // WIRES + { + shape: finalGameShape, + required: 25000, + reward: enumHubGoalRewards.reward_wires_painter_and_levers, + }, + + // 21 + // Filter + { + shape: "CrCwCrCw:CwCrCwCr:CrCwCrCw:CwCrCwCr", + required: 25000, + reward: enumHubGoalRewards.reward_filter, + }, + + // 22 + // Constant signal + { + shape: chinaShapes ? "RrSySrSy:RyCrCwCr:CyCyRyCy" : "Cg----Cr:Cw----Cw:Sy------:Cy----Cy", + required: 25000, + reward: enumHubGoalRewards.reward_constant_signal, + }, + + // 23 + // Display + { + shape: chinaShapes ? "CrCrCrCr:CwCwCwCw:WwWwWwWw:CrCrCrCr" : "CcSyCcSy:SyCcSyCc:CcSyCcSy", + required: 25000, + reward: enumHubGoalRewards.reward_display, + }, + + // 24 Logic gates + { + shape: chinaShapes ? "Su----Su:RwRwRwRw:Cu----Cu:CwCwCwCw" : "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy", + required: 25000, + reward: enumHubGoalRewards.reward_logic_gates, + }, + + // 25 Virtual Processing + { + shape: "Rg--Rg--:CwRwCwRw:--Rg--Rg", + required: 25000, + reward: enumHubGoalRewards.reward_virtual_processing, + }, + + // 26 Freeplay + { + shape: "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw", + required: 50000, + reward: enumHubGoalRewards.reward_freeplay, + }, +]; + /** * Generates the level definitions - * @param {keyof typeof LevelSetVariant} variant */ -export function generateLevelsForVariant(variant) { - const levelDefinitions = [ - // 1 - // Circle - { - shape: "CuCuCuCu", // belts t1 - required: 30, - reward: enumHubGoalRewards.reward_cutter_and_trash, - }, - - // 2 - // Cutter - { - shape: "----CuCu", // - required: 40, - reward: enumHubGoalRewards.no_reward, - }, - - // 3 - // Rectangle - { - shape: "RuRuRuRu", // miners t1 - required: 70, - reward: enumHubGoalRewards.reward_balancer, - }, - - // 4 - { - shape: "RuRu----", // processors t2 - required: 70, - reward: enumHubGoalRewards.reward_rotater, - }, - - // 5 - // Rotater - { - shape: "Cu----Cu", // belts t2 - required: 170, - reward: enumHubGoalRewards.reward_tunnel, - }, - - // 6 - { - shape: "Cu------", // miners t2 - required: 270, - reward: enumHubGoalRewards.reward_painter, - }, - - // 7 - // Painter - { - shape: "CrCrCrCr", // unused - required: 300, - reward: enumHubGoalRewards.reward_rotater_ccw, - }, - ]; - - if (variant === LevelSetVariant.LimitedLevel8) { - // Variant: End of Demo (level 8) - levelDefinitions.push({ - shape: "CrCrCrCr", - required: 0, - reward: enumHubGoalRewards.reward_demo_end, - }); - return levelDefinitions; +export function generateLevelsForVariant() { + if (G_IS_STEAM_DEMO) { + return STEAM_DEMO_LEVELS(); + } else if (G_IS_STANDALONE) { + return STANDALONE_LEVELS(); } - - levelDefinitions.push( - // 8 - { - shape: "RbRb----", // painter t2 - required: 480, - reward: enumHubGoalRewards.reward_mixer, - }, - - // 9 - // Mixing (purple) - { - shape: "CpCpCpCp", // belts t3 - required: 600, - reward: enumHubGoalRewards.reward_merger, - }, - - // 10 - // STACKER: Star shape + cyan - { - shape: "ScScScSc", // miners t3 - required: 800, - reward: enumHubGoalRewards.reward_stacker, - }, - - // 11 - // Chainable miner - { - shape: "CgScScCg", // processors t3 - required: 1000, - reward: enumHubGoalRewards.reward_miner_chainable, - }, - - // 12 - // Blueprints - { - shape: "CbCbCbRb:CwCwCwCw", - required: 1000, - reward: enumHubGoalRewards.reward_blueprints, - } - ); - - if (variant === LevelSetVariant.LimitedLevelBlueprints) { - // Variant: End of Demo (before blueprints) - levelDefinitions.push({ - shape: "CbCbCbRb:CwCwCwCw", - required: 0, - reward: enumHubGoalRewards.reward_demo_end, - }); - return levelDefinitions; - } - - levelDefinitions.push( - // 13 - // Tunnel Tier 2 - { - shape: chinaShapes ? "CuCuCuCu:CwCwCwCw:Sb--Sr--" : "RpRpRpRp:CwCwCwCw", // painting t3 - required: 3800, - reward: enumHubGoalRewards.reward_underground_belt_tier_2, - }, - - // 14 - // Belt reader - { - shape: "--Cg----:--Cr----", // unused - required: 8, // Per second! - reward: enumHubGoalRewards.reward_belt_reader, - throughputOnly: true, - }, - - // 15 - // Storage - { - shape: "SrSrSrSr:CyCyCyCy", // unused - required: 10000, - reward: enumHubGoalRewards.reward_storage, - }, - - // 16 - // Quad Cutter - { - shape: "SrSrSrSr:CyCyCyCy:SwSwSwSw", // belts t4 (two variants) - required: 6000, - reward: enumHubGoalRewards.reward_cutter_quad, - }, - - // 17 - // Double painter - { - shape: chinaShapes ? "CyCyCyCy:CyCyCyCy:RyRyRyRy:RuRuRuRu" : "CbRbRbCb:CwCwCwCw:WbWbWbWb", // miner t4 (two variants) - required: 20000, - reward: enumHubGoalRewards.reward_painter_double, - }, - - // 18 - // Rotater (180deg) - { - shape: "Sg----Sg:CgCgCgCg:--CyCy--", // unused - required: 20000, - reward: enumHubGoalRewards.reward_rotater_180, - }, - - // 19 - // Compact splitter - { - shape: "CpRpCp--:SwSwSwSw", - required: 25000, - reward: enumHubGoalRewards.reward_splitter, - }, - - // 20 - // WIRES - { - shape: finalGameShape, - required: 25000, - reward: enumHubGoalRewards.reward_wires_painter_and_levers, - }, - - // 21 - // Filter - { - shape: "CrCwCrCw:CwCrCwCr:CrCwCrCw:CwCrCwCr", - required: 25000, - reward: enumHubGoalRewards.reward_filter, - }, - - // 22 - // Constant signal - { - shape: chinaShapes ? "RrSySrSy:RyCrCwCr:CyCyRyCy" : "Cg----Cr:Cw----Cw:Sy------:Cy----Cy", - required: 25000, - reward: enumHubGoalRewards.reward_constant_signal, - }, - - // 23 - // Display - { - shape: chinaShapes ? "CrCrCrCr:CwCwCwCw:WwWwWwWw:CrCrCrCr" : "CcSyCcSy:SyCcSyCc:CcSyCcSy", - required: 25000, - reward: enumHubGoalRewards.reward_display, - }, - - // 24 Logic gates - { - shape: chinaShapes - ? "Su----Su:RwRwRwRw:Cu----Cu:CwCwCwCw" - : "CcRcCcRc:RwCwRwCw:Sr--Sw--:CyCyCyCy", - required: 25000, - reward: enumHubGoalRewards.reward_logic_gates, - }, - - // 25 Virtual Processing - { - shape: "Rg--Rg--:CwRwCwRw:--Rg--Rg", - required: 25000, - reward: enumHubGoalRewards.reward_virtual_processing, - }, - - // 26 Freeplay - { - shape: "CbCuCbCu:Sr------:--CrSrCr:CwCwCwCw", - required: 50000, - reward: enumHubGoalRewards.reward_freeplay, - } - ); - - return levelDefinitions; + return WEB_DEMO_LEVELS(); } diff --git a/src/js/game/modes/regular.js b/src/js/game/modes/regular.js index 2bff70f7..7712582f 100644 --- a/src/js/game/modes/regular.js +++ b/src/js/game/modes/regular.js @@ -293,21 +293,17 @@ function generateUpgrades(limitedVersion = false, difficulty = 1) { return upgrades; } -const levelDefinitionsCache = {}; +let levelDefinitionsCache = null; /** * Generates the level definitions - * @param {keyof typeof LevelSetVariant} variant */ -export function generateLevelDefinitions(variant, difficulty = 1) { - if (levelDefinitionsCache[variant]) { - return levelDefinitionsCache[variant]; +export function generateLevelDefinitions() { + if (levelDefinitionsCache) { + return levelDefinitionsCache; } - - const levelDefinitions = generateLevelsForVariant(variant); - + const levelDefinitions = generateLevelsForVariant(); MOD_SIGNALS.modifyLevelDefinitions.dispatch(levelDefinitions); - if (G_IS_DEV) { levelDefinitions.forEach(({ shape }) => { try { @@ -317,13 +313,7 @@ export function generateLevelDefinitions(variant, difficulty = 1) { } }); } - - levelDefinitions.forEach(definition => { - definition.required = Math.round(definition.required * difficulty); - }); - - levelDefinitionsCache[variant] = levelDefinitions; - + levelDefinitionsCache = levelDefinitions; return levelDefinitions; } @@ -412,14 +402,7 @@ export class RegularGameMode extends GameMode { * @returns {Array} */ getLevelDefinitions() { - if (this.root.app.restrictionMgr.isLimitedVersion()) { - return generateLevelDefinitions( - this.root.app.gameAnalytics.abtVariant === "0" ? "LimitedLevel8" : "LimitedLevelBlueprints", - this.difficultyMultiplicator - ); - } else { - return generateLevelDefinitions("NoRestrictions", this.difficultyMultiplicator); - } + return generateLevelDefinitions(); } /** diff --git a/src/js/game/themes/dark.json b/src/js/game/themes/dark.json index 786cfda2..a46f638a 100644 --- a/src/js/game/themes/dark.json +++ b/src/js/game/themes/dark.json @@ -1,7 +1,9 @@ { "map": { "background": "#3e3f47", - "grid": "rgba(255, 255, 255, 0.02)", + "gridRegular": "rgba(255, 255, 255, 0.02)", + "gridPlacing": "rgba(255, 255, 255, 0.06)", + "gridLineWidth": 0.5, "selectionOverlay": "rgba(74, 163, 223, 0.7)", diff --git a/src/js/game/themes/light.json b/src/js/game/themes/light.json index 1236d43d..7027e320 100644 --- a/src/js/game/themes/light.json +++ b/src/js/game/themes/light.json @@ -1,8 +1,11 @@ { "map": { - "background": "#fff", - "grid": "#fafafa", - "gridLineWidth": 1, + "background": "#eceef6", + + "gridRegular": "#e3e7f4", + "gridPlacing": "#dadff0", + + "gridLineWidth": 0.5, "selectionOverlay": "rgba(74, 163, 223, 0.7)", "selectionOutline": "rgba(74, 163, 223, 0.5)", @@ -29,9 +32,9 @@ "resources": { "shape": "#eaebec", - "red": "#ffbfc1", - "green": "#cbffc4", - "blue": "#bfdaff" + "red": "#f3bcb6", + "green": "#ccf7a7", + "blue": "#b2e0fa" }, "chunkOverview": { diff --git a/src/js/platform/browser/game_analytics.js b/src/js/platform/browser/game_analytics.js index 66bae5dc..837d7bcb 100644 --- a/src/js/platform/browser/game_analytics.js +++ b/src/js/platform/browser/game_analytics.js @@ -28,8 +28,8 @@ const analyticsUrl = G_IS_DEV ? "http://localhost:8001" : "https://analytics.sha // Be sure to increment the ID whenever it changes const analyticsLocalFile = G_IS_STEAM_DEMO ? "shapez_token_steamdemo.bin" : "shapez_token_123.bin"; -const CURRENT_ABT = "abt_unl"; -const CURRENT_ABT_COUNT = 2; +const CURRENT_ABT = "abt_bsln"; +const CURRENT_ABT_COUNT = 1; export class ShapezGameAnalytics extends GameAnalyticsInterface { constructor(app) { diff --git a/src/js/platform/sound.js b/src/js/platform/sound.js index be004b38..76ac07da 100644 --- a/src/js/platform/sound.js +++ b/src/js/platform/sound.js @@ -26,6 +26,7 @@ export const SOUNDS = { placeBuilding: "place_building", placeBelt: "place_belt", copy: "copy", + unlockUpgrade: "unlock_upgrade", }; export const MUSIC = { @@ -150,6 +151,9 @@ export class SoundInterface { * @returns {Promise} */ loadSound(key) { + if (!key) { + return Promise.resolve(); + } if (this.sounds[key]) { return this.sounds[key].load(); } else if (this.music[key]) { @@ -271,7 +275,7 @@ export class SoundInterface { */ playThemeMusic(key) { const music = this.music[key]; - if (key !== null && !music) { + if (key && !music) { logger.warn("Music", key, "not found"); } if (this.currentMusic !== music) { diff --git a/src/js/profile/application_settings.js b/src/js/profile/application_settings.js index 2b7d4d63..281b532c 100644 --- a/src/js/profile/application_settings.js +++ b/src/js/profile/application_settings.js @@ -513,12 +513,6 @@ export class ApplicationSettings extends ReadWriteProxy { const settings = data.settings; - // MODS - if (!THEMES[settings.theme] || !this.app.restrictionMgr.getHasExtendedSettings()) { - console.warn("Resetting theme because its no longer available: " + settings.theme); - settings.theme = "light"; - } - for (let i = 0; i < this.settingHandles.length; ++i) { const setting = this.settingHandles[i]; const storedValue = settings[setting.id]; @@ -701,7 +695,7 @@ export class ApplicationSettings extends ReadWriteProxy { // MODS if (!THEMES[data.settings.theme] || !this.app.restrictionMgr.getHasExtendedSettings()) { - console.warn("Resetting theme because its no longer available: " + data.settings.theme); + console.log("Resetting theme because its no longer available: " + data.settings.theme); data.settings.theme = "light"; } diff --git a/translations/base-ar.yaml b/translations/base-ar.yaml index d37d550c..fe6811f8 100644 --- a/translations/base-ar.yaml +++ b/translations/base-ar.yaml @@ -431,7 +431,6 @@ ingame: desc: Click here to see the Steam version advantages! get_on_steam: Get on steam standaloneAdvantages: - title: Get the full version! no_thanks: No, thanks! points: levels: @@ -458,7 +457,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-cat.yaml b/translations/base-cat.yaml index 93a2376f..a7c7330b 100644 --- a/translations/base-cat.yaml +++ b/translations/base-cat.yaml @@ -441,7 +441,6 @@ ingame: desc: Premeu aquí per veure les avantatges d'Steam! get_on_steam: Comprar a Steam standaloneAdvantages: - title: Aconsegueix la versió completa! no_thanks: No, gràcies! points: levels: @@ -468,7 +467,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-cz.yaml b/translations/base-cz.yaml index 49a73c6b..4c7d5ba1 100644 --- a/translations/base-cz.yaml +++ b/translations/base-cz.yaml @@ -65,8 +65,8 @@ demoBanners: playtimeDisclaimer: Plná verze obsahuje více než 20 hodin obsahu. playerCount: hráči jako vy právě hrají shapez ve službě Steam untilEndOfDemo: do konce ukázky - playtimeDisclaimerDownload: Ve hře můžete pokračovat v plné verzi! - Klikněte sem a stáhněte si uloženou hru. + playtimeDisclaimerDownload: Ve hře můžete pokračovat v plné verzi! Klikněte + sem a stáhněte si uloženou hru. mainMenu: play: Hrát continue: Pokračovat @@ -432,7 +432,6 @@ ingame: desc: Kliknutím sem zobrazíte výhody Steam verze! get_on_steam: Získejte na steamu standaloneAdvantages: - title: Získejte plnou verzi! no_thanks: Ne, děkuji! points: levels: @@ -459,7 +458,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Čas demoverze vypršel + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zóna zoneWidth: Šířka diff --git a/translations/base-da.yaml b/translations/base-da.yaml index 99ddb89c..3dcf26c3 100644 --- a/translations/base-da.yaml +++ b/translations/base-da.yaml @@ -433,7 +433,6 @@ ingame: desc: Click here to see the Steam version advantages! get_on_steam: Få på steam standaloneAdvantages: - title: Få den fulde version! no_thanks: Nej tak! points: levels: @@ -460,7 +459,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo tid er udløbet + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-de.yaml b/translations/base-de.yaml index d652e090..8387e40b 100644 --- a/translations/base-de.yaml +++ b/translations/base-de.yaml @@ -69,10 +69,8 @@ demoBanners: playtimeDisclaimer: Die Vollversion bietet mehr als 20 Stunden Spielspaß. playerCount: Spieler wie du spielen shapez gerade auf Steam untilEndOfDemo: Bis zum Ende der Demo - playtimeDisclaimerDownload: >- - Du kannst deinen Speicherstand in der Vollversion fortsetzen! - Klicke hier um ihn herunterzuladen. - + playtimeDisclaimerDownload: Du kannst deinen Speicherstand in der Vollversion + fortsetzen! Klicke hier um ihn herunterzuladen. mainMenu: play: Spielen continue: Fortsetzen @@ -508,34 +506,35 @@ ingame: desc: Klicke hier, um die Vorteile der Vollversion zu sehen! get_on_steam: Zur Vollversion standaloneAdvantages: - title: "Vorteile der Vollversion:" no_thanks: Nein, danke! points: levels: - title: 12 Neue Level - desc: Für insgesamt 26 Level! + title: 19 Neue Level + desc: Über 20 Stunden weitere Inhalte! + wires: + title: Wires-Ebene + desc: Eine ganz neue Dimension! + darkmode: + title: Dark-Mode + desc: Gönn deinen Augen eine Auszeit! buildings: title: 22 Neue Gebäude desc: Automatisiere deine Fabrik! achievements: - title: Errungenschaften + title: 45 Errungenschaften desc: Hol sie dir alle! markers: title: ∞ Markierungen desc: Verliere nie den Überblick! - wires: - title: Wires-Ebene - desc: Eine ganz neue Dimension! - darkmode: - title: Dark-Mode - desc: Gönn deinen Augen eine Auszeit! support: title: Unterstütze Mich desc: Ich entwickle das Spiel in meiner Freizeit! mods: title: Mod-Support! desc: Über 80 Mods verfügbar! - title_expired: Demo Zeit abgelaufen + titleV2: "Hol dir jetzt die Vollversion auf Steam für:" + titleExpiredV2: Demo abgeschlossen! + titleEnjoyingDemo: Gefällt dir die Demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Breite diff --git a/translations/base-el.yaml b/translations/base-el.yaml index 9b8f896e..edbc4962 100644 --- a/translations/base-el.yaml +++ b/translations/base-el.yaml @@ -447,7 +447,6 @@ ingame: desc: Click here to see the Steam version advantages! get_on_steam: Get on steam standaloneAdvantages: - title: Get the full version! no_thanks: No, thanks! points: levels: @@ -474,7 +473,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-en.yaml b/translations/base-en.yaml index cac4742d..0233afe6 100644 --- a/translations/base-en.yaml +++ b/translations/base-en.yaml @@ -107,7 +107,7 @@ demoBanners:
  • ... and a lot more!
  • playtimeDisclaimer: >- - The full version contains more than 20 hours of content. + The full version contains more than 20 hours of additional content! playtimeDisclaimerDownload: >- You can continue your savegame in the full version! Click here to download your savegame. @@ -654,22 +654,32 @@ ingame: get_on_steam: Get on Steam standaloneAdvantages: - title: >- - Advantages of the full version: - title_expired: Demo Time Expired + titleV2: >- + Get the full version now on Steam to unlock: + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoying the demo? + no_thanks: No, thanks! points: levels: title: 19 New Levels - desc: For a total of 26 levels! + desc: >- + Over 20 hours of additional content! + wires: + title: Wires + desc: An entirely new dimension! + + darkmode: + title: Dark Mode + desc: Stop hurting your eyes! buildings: title: 22 New Buildings desc: Fully automate your factory! achievements: - title: Achievements + title: 45 Achievements desc: Hunt them all! mods: @@ -680,14 +690,6 @@ ingame: title: ∞ Markers desc: Never get lost in your factory! - wires: - title: Wires - desc: An entirely new dimension! - - darkmode: - title: Dark Mode - desc: Stop hurting your eyes! - support: title: Support me desc: I develop shapez in my spare time! diff --git a/translations/base-es.yaml b/translations/base-es.yaml index 40b2942c..aa248bc7 100644 --- a/translations/base-es.yaml +++ b/translations/base-es.yaml @@ -72,8 +72,9 @@ demoBanners: playerCount: jugadores como tú están jugando actualmente a shapez en Steam untilEndOfDemo: Hasta el final de la demo - playtimeDisclaimerDownload: ¡Puedes continuar con tu partida guardada en la versión completa! - Haz clic aquí para descargar tu partida guardada. + playtimeDisclaimerDownload: ¡Puedes continuar con tu partida guardada en la + versión completa! Haz clic aquí para descargar tu + partida guardada. mainMenu: play: Jugar continue: Continuar @@ -448,7 +449,6 @@ ingame: desc: Presiona aquí para ver que tiene la versión de Steam! get_on_steam: Consiguelo en Steam standaloneAdvantages: - title: ¡Consigue la versión completa! no_thanks: ¡No grácias! points: levels: @@ -475,7 +475,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: El tiempo de demostración ha expirado + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Área zoneWidth: Anchura diff --git a/translations/base-fi.yaml b/translations/base-fi.yaml index 88668ccc..4c921510 100644 --- a/translations/base-fi.yaml +++ b/translations/base-fi.yaml @@ -70,8 +70,8 @@ demoBanners: playerCount: kaltaisesi pelaajat pelaavat parhaillaan shapezia Steamissa. untilEndOfDemo: Demon loppuun asti - playtimeDisclaimerDownload: Voit jatkaa tallentamistasi täysversiossa! - Lataa tallennettava peli napsauttamalla tätä. + playtimeDisclaimerDownload: Voit jatkaa tallentamistasi täysversiossa! Lataa + tallennettava peli napsauttamalla tätä. mainMenu: play: Pelaa continue: Jatka @@ -434,7 +434,6 @@ ingame: desc: Napsauta tästä nähdäksesi Steam version edut! get_on_steam: Hanki Steamista standaloneAdvantages: - title: Hanki täysversio! no_thanks: Ei kiitos! points: levels: @@ -461,7 +460,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demon aika päättynyt + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-fr.yaml b/translations/base-fr.yaml index 0d19c459..fd9317af 100644 --- a/translations/base-fr.yaml +++ b/translations/base-fr.yaml @@ -67,8 +67,9 @@ demoBanners: playtimeDisclaimer: La version complète offre plus de 20 heures de contenu. playerCount: joueurs comme vous jouent actuellement à shapez sur Steam untilEndOfDemo: Jusqu'à la fin de la démo - playtimeDisclaimerDownload: Vous pouvez continuer votre sauvegarde dans la version complète ! - Cliquez ici pour télécharger votre sauvegarde. + playtimeDisclaimerDownload: Vous pouvez continuer votre sauvegarde dans la + version complète ! Cliquez ici pour télécharger votre + sauvegarde. mainMenu: play: Jouer continue: Continuer @@ -446,7 +447,6 @@ ingame: desc: Cliquez ici pour voir les avantages de la version Steam ! get_on_steam: Acheter sur Steam standaloneAdvantages: - title: Obtenir la version complète no_thanks: Non merci ! points: levels: @@ -473,7 +473,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Temps de démo écoulé + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Largeur diff --git a/translations/base-he.yaml b/translations/base-he.yaml index 0b3dcf21..0bdee98c 100644 --- a/translations/base-he.yaml +++ b/translations/base-he.yaml @@ -419,7 +419,6 @@ ingame: desc: לחץ פה בשביל לראות את היתרונות של הגרסה להורדה! get_on_steam: Steamהשג ב standaloneAdvantages: - title: "!השג את הגרסה המלאה" no_thanks: "!לא, תודה" points: levels: @@ -446,7 +445,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-hr.yaml b/translations/base-hr.yaml index edfb8a20..8c258089 100644 --- a/translations/base-hr.yaml +++ b/translations/base-hr.yaml @@ -433,7 +433,6 @@ ingame: desc: Click here to see the Steam version advantages! get_on_steam: Get on steam standaloneAdvantages: - title: Get the full version! no_thanks: No, thanks! points: levels: @@ -460,7 +459,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-hu.yaml b/translations/base-hu.yaml index 69b5304a..24c74b72 100644 --- a/translations/base-hu.yaml +++ b/translations/base-hu.yaml @@ -438,7 +438,6 @@ ingame: desc: Kattints ide, hogy megnézd az Önálló Verzió előnyeit! get_on_steam: Megvásárlás Steamen standaloneAdvantages: - title: Vásárold meg a Teljes Verziót! no_thanks: Nem, köszönöm! points: levels: @@ -465,7 +464,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo idő lejárt + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zóna zoneWidth: Szélesség diff --git a/translations/base-ind.yaml b/translations/base-ind.yaml index c4f7be6e..18c51891 100644 --- a/translations/base-ind.yaml +++ b/translations/base-ind.yaml @@ -442,7 +442,6 @@ ingame: desc: Klik disini untuk melihat keunggulan pada versi Steam! get_on_steam: Dapatkan di Steam standaloneAdvantages: - title: Dapatkan versi lengkap! no_thanks: Tidak, terima kasih! points: levels: @@ -469,7 +468,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-it.yaml b/translations/base-it.yaml index 1b73bc63..6fc64127 100644 --- a/translations/base-it.yaml +++ b/translations/base-it.yaml @@ -70,8 +70,9 @@ demoBanners: playerCount: giocatori come te stanno attualmente giocando a shapez su Steam untilEndOfDemo: Fino alla fine della demo - playtimeDisclaimerDownload: Puoi continuare il tuo salvataggio nella versione completa! - Fai clic qui per scaricare il tuo salvataggio. + playtimeDisclaimerDownload: Puoi continuare il tuo salvataggio nella versione + completa! Fai clic qui per scaricare il tuo + salvataggio. mainMenu: play: Gioca changelog: Registro modifiche @@ -449,7 +450,6 @@ ingame: desc: Clicca qui per vedere i vantaggi della versione Completa! get_on_steam: Ottieni su Steam standaloneAdvantages: - title: Ottieni la versione completa! no_thanks: No, grazie! points: levels: @@ -476,7 +476,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Tempo di dimostrazione scaduto + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zona zoneWidth: Larghezza diff --git a/translations/base-ja.yaml b/translations/base-ja.yaml index 478fecc1..b405d889 100644 --- a/translations/base-ja.yaml +++ b/translations/base-ja.yaml @@ -375,11 +375,9 @@ ingame: 切断機はそれの向きに関わらず、縦の線で切断します。" 2_2_place_trash: 切断機は詰まる場合があります!

    ゴミ箱を利用して、不必要な部品を廃棄できます。 - 2_3_more_cutters: - "いいですね! 更に2つ以上の切断機を設置して処理をスピードアップさせましょう!
    \ + 2_3_more_cutters: "いいですね! 更に2つ以上の切断機を設置して処理をスピードアップさせましょう!
    \
    追記: 0から9 のホットキーを使用すると素早く部品にアクセスできます。" - 3_1_rectangles: - "それでは四角形を抽出しましょう! 4つの抽出機を作成してそれをハブに接続します。
    <\ + 3_1_rectangles: "それでは四角形を抽出しましょう! 4つの抽出機を作成してそれをハブに接続します。
    <\ br> 追記: SHIFTを押しながらベルトを引くと ベルトプランナーが有効になります!" 21_1_place_quad_painter: 四色着色機を設置して、 そして @@ -399,7 +397,6 @@ ingame: desc: Steamバージョンの特典を確認するには、ここをクリックしてください! get_on_steam: steamで購入 standaloneAdvantages: - title: フルバージョンを購入 no_thanks: いいえ、結構です points: levels: @@ -426,7 +423,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: デモ時間終了 + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width @@ -663,16 +662,14 @@ buildings: storyRewards: reward_cutter_and_trash: title: 形の切断 - desc: - 切断機が利用可能になりました。これは入力された形を、向きを考慮せず上下の直線で半分に切断します! 

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

    利用しない側の出力に注意しましょう、破棄しなければ詰まって停止してしまいます。 - このためにゴミ箱も用意しました。入力アイテムをすべて破棄できます! reward_rotater: title: 回転 desc: 回転機が利用可能になりました! 形を時計回り方向に90度回転させます。 reward_painter: title: 着色 - desc: - "着色機が利用可能になりました。(今まで形状でやってきた方法で)色を抽出し、形状と合成することで着色します! <\ + desc: "着色機が利用可能になりました。(今まで形状でやってきた方法で)色を抽出し、形状と合成することで着色します! <\ br>
    追伸: もし色覚特性をお持ちでしたら、 設定に色覚特性モードがあります!" reward_mixer: title: 混色 @@ -691,8 +688,7 @@ storyRewards: desc: 回転機のバリエーションが利用可能になりました。反時計回りの回転ができるようになります! 回転機を選択し、'T'キーを押すことで方向の切り替えができます。 reward_miner_chainable: title: 連鎖抽出機 - desc: - "連鎖抽出機が利用可能になりました! 他の抽出機に出力を渡すことができるので、 + desc: "連鎖抽出機が利用可能になりました! 他の抽出機に出力を渡すことができるので、 資源の抽出がより効率的になります!

    補足: ツールバーの 旧い抽出機が置き換えられました!" reward_underground_belt_tier_2: title: トンネル レベルII @@ -717,8 +713,7 @@ storyRewards: 通常の着色機と同様に機能しますが、ひとつの色の消費で一度に2つの形を着色処理できます! reward_storage: title: ストレージ - desc: - ストレージが利用可能になりました。 - 容量上限までアイテムを格納できます!

    + desc: ストレージが利用可能になりました。 - 容量上限までアイテムを格納できます!

    左側の出力を優先するため、オーバーフローゲートとしても使用できます! reward_blueprints: title: ブループリント @@ -737,8 +732,7 @@ storyRewards: 設定でヒントを有効にすると、 ワイヤのチュートリアルが有効になります。" reward_filter: title: アイテムフィルタ - desc: - アイテムフィルタが利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、アイテムを上側または右側の出力に分離します。

    + desc: アイテムフィルタが利用可能になりました! ワイヤレイヤの信号と一致するかどうかに応じて、アイテムを上側または右側の出力に分離します。

    また、真偽値(0/1)信号を入力すれば全てのアイテムの通過・非通過を制御できます。 reward_display: title: ディスプレイ @@ -747,13 +741,11 @@ storyRewards: ベルトリーダーとストレージが最後に通過したアイテムを出力していることに気づきましたか? それをディスプレイに表示してみてください!" reward_constant_signal: title: 定数信号 - desc: - 定数信号がワイヤレイヤで利用可能になりました! これは例えばアイテムフィルタに接続すると便利です。

    + desc: 定数信号がワイヤレイヤで利用可能になりました! これは例えばアイテムフィルタに接続すると便利です。

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

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

    これでAND, OR, XOR, NOTを計算できます。

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

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

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

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

    補足: すでに作った生産ラインは削除しないようにしましょう。 - 生産された形はすべて、後でアップグレードの解除に必要になります!" no_reward_freeplay: title: 次のレベル @@ -892,8 +883,7 @@ settings: description: 配置用のグリッドを無効にして、パフォーマンスを向上させます。 これにより、ゲームの見た目もすっきりします。 clearCursorOnDeleteWhilePlacing: title: 右クリックで配置をキャンセル - description: - デフォルトで有効です。建物を設置しているときに右クリックすると、選択中の建物がキャンセルされます。 + description: デフォルトで有効です。建物を設置しているときに右クリックすると、選択中の建物がキャンセルされます。 無効にすると、建物の設置中に右クリックで建物を削除できます。 lowQualityTextures: title: 低品質のテクスチャ(視認性低下) diff --git a/translations/base-kor.yaml b/translations/base-kor.yaml index 50bb804f..5e48f65c 100644 --- a/translations/base-kor.yaml +++ b/translations/base-kor.yaml @@ -63,8 +63,7 @@ demoBanners: playtimeDisclaimer: 정식 버전에는 20시간 이상의 콘텐츠가 포함되어 있습니다. playerCount: 명의 플레이어가 현재 Steam에서 shapez를 플레이하고 있습니다. untilEndOfDemo: 데모가 끝날 때까지 - playtimeDisclaimerDownload: 정식 버전에서 저장 게임을 계속할 수 있습니다! - 여기를 클릭하여 저장 게임을 다운로드하세요. + playtimeDisclaimerDownload: 정식 버전에서 저장 게임을 계속할 수 있습니다! 여기를 클릭하여 저장 게임을 다운로드하세요. mainMenu: play: 시작 changelog: 버전 기록 @@ -72,8 +71,7 @@ mainMenu: openSourceHint: 이 게임은 오픈 소스입니다! discordLink: 공식 디스코드 서버 helpTranslate: 번역을 도와주세요! - browserWarning: - 이 게임은 현재 브라우저에서 느리게 작동하는 것으로 알려져 있습니다! 더 좋은 성능을 위해 정식 버전을 구매하거나 + browserWarning: 이 게임은 현재 브라우저에서 느리게 작동하는 것으로 알려져 있습니다! 더 좋은 성능을 위해 정식 버전을 구매하거나 Google Chrome 브라우저를 다운로드하세요. savegameLevel: 레벨 savegameLevelUnknown: 미확인 레벨 @@ -145,8 +143,7 @@ dialogs: desc: 지난번 플레이 이후 변경 사항은 다음과 같습니다. upgradesIntroduction: title: 업그레이드 하기 - desc: - 기존의 공장을 허물지 마세요! 여러분이 그동안 만들어 수집한 모든 도형은 업그레이드에 사용됩니다. + desc: 기존의 공장을 허물지 마세요! 여러분이 그동안 만들어 수집한 모든 도형은 업그레이드에 사용됩니다. 업그레이드 버튼은 화면의 오른쪽 위에 있습니다. massDeleteConfirm: title: 삭제 확인 @@ -159,8 +156,7 @@ dialogs: desc: 12 레벨부터 청사진 기능이 해금됩니다! keybindingsIntroduction: title: 유용한 조작법 - desc: - "이 게임에는 거대한 공장을 수월하게 세우기 위한 많은 조작법이 있습니다. 아래는 그 대표적인 것이며, 자세한 조작법은 + desc: "이 게임에는 거대한 공장을 수월하게 세우기 위한 많은 조작법이 있습니다. 아래는 그 대표적인 것이며, 자세한 조작법은 조작법 설정을 참고해주세요!

    CTRL + 드래그: 영역을 선택합니다.
    SHIFT: 누르는 동안 같은 건물을 여러개 배치할 수 있습니다.
    @@ -174,8 +170,7 @@ dialogs: desc: 체험판 버전에서는 마커를 2개 까지만 배치할 수 있습니다. 정식 버전을 구입하면 마커를 무제한으로 배치할 수 있습니다! exportScreenshotWarning: title: 스크린샷 내보내기 - desc: - 당신의 공장을 스크린샷으로 내보내려 합니다. 매우 거대한 크기의 공장이라면 그 처리 시간이 상당히 오래 걸릴 것이며, 최악의 경우 + desc: 당신의 공장을 스크린샷으로 내보내려 합니다. 매우 거대한 크기의 공장이라면 그 처리 시간이 상당히 오래 걸릴 것이며, 최악의 경우 게임이 중단될 수 있습니다! massCutInsufficientConfirm: title: 자르기 확인 @@ -201,8 +196,7 @@ dialogs: submitPuzzle: title: 퍼즐 보내기 descName: "퍼즐에 이름을 지어 주세요:" - descIcon: - "퍼즐의 아이콘으로 보여지게 될 짧은 단어를 지정해 주세요. (이곳에서 생성하시거나, 아래 랜덤한 도형 + descIcon: "퍼즐의 아이콘으로 보여지게 될 짧은 단어를 지정해 주세요. (이곳에서 생성하시거나, 아래 랜덤한 도형 중 하나를 선택하세요):" placeholderName: 퍼즐 제목 puzzleResizeBadBuildings: @@ -228,8 +222,7 @@ dialogs: desc: 오프라인 모드임으로 퍼즐을 저장하거나 업로드할 수 없습니다. 그래도 계속하시겠습니까? puzzlePlayRegularRecommendation: title: 권장 사항 - desc: - 퍼즐 DLC 플레이시 소개되지 않은 요소를 접하시게 될 수 있으므로, 적어도 일반 게임을 12레벨까지 플레이하시는것을 + desc: 퍼즐 DLC 플레이시 소개되지 않은 요소를 접하시게 될 수 있으므로, 적어도 일반 게임을 12레벨까지 플레이하시는것을 강력히 권장드립니다. 그래도 계속하시겠습니까? puzzleShare: title: 짧은 키 복사됨 @@ -347,31 +340,25 @@ ingame: waypoints: waypoints: 마커 hub: 허브 - description: - 마커를 좌클릭하여 그곳으로 이동하고, 우클릭으로 삭제할 수 있습니다.

    마커를 배치하기 위해 + description: 마커를 좌클릭하여 그곳으로 이동하고, 우클릭으로 삭제할 수 있습니다.

    마커를 배치하기 위해 키로 지금 있는 위치에, 또는 우클릭하여 원하는 위치에 배치할 수 있습니다. creationSuccessNotification: 마커가 성공적으로 생성되었습니다. interactiveTutorial: title: 튜토리얼 hints: - 1_1_extractor: - 원형 도형을 추출하기 위해 그 위에 추출기를 선택한 뒤 + 1_1_extractor: 원형 도형을 추출하기 위해 그 위에 추출기를 선택한 뒤 배치하여 추출하세요! - 1_2_conveyor: - "이제 컨베이어 벨트를 추출기와 허브를 서로 연결하세요!

    팁: 벨트를 + 1_2_conveyor: "이제 컨베이어 벨트를 추출기와 허브를 서로 연결하세요!

    팁: 벨트를 마우스로 클릭한 뒤 드래그하세요!" - 1_3_expand: - "이 게임은 방치형 게임이 아닙니다! 더 많은 추출기와 벨트를 만들어 지정된 목표를 빨리 + 1_3_expand: "이 게임은 방치형 게임이 아닙니다! 더 많은 추출기와 벨트를 만들어 지정된 목표를 빨리 달성하세요.

    팁: SHIFT 키를 누른 상태에서는 빠르게 배치할 수 있고, R 키를 눌러 회전할 수 있습니다." - 2_1_place_cutter: - "이제 절단기를 배치해 원형 도형을 반으로 잘라보세요!

    참고: + 2_1_place_cutter: "이제 절단기를 배치해 원형 도형을 반으로 잘라보세요!

    참고: 절단기는 놓는 방향에 상관없이 항상 위에서 아래로만 자릅니다." 2_2_place_trash: 절단기가 막히거나 멈출 수 있습니다!

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

    추신: 상단 숫자 단축키 (0~9)를 사용하여 건물을 빠르게 선택할 수 있습니다!" 3_1_rectangles: "이제 사각형 도형을 추출해 볼까요! 추출기 네 개를 배치하고 허브와 @@ -379,12 +366,10 @@ ingame: 누른 채 드래그하세요!" 21_1_place_quad_painter: 4단 색칠기를 배치하여 흰색빨간색이 칠해진 원형 도형을 만들어보세요! - 21_2_switch_to_wires: - E 키를 눌러 전선 레이어 로 전환하세요!

    그 후 색칠기의 + 21_2_switch_to_wires: E 키를 눌러 전선 레이어 로 전환하세요!

    그 후 색칠기의 네 입력 부분을 모두 케이블로 연결하세요! 21_3_place_button: 훌륭해요! 이제 스위치를 배치하고 전선으로 연결하세요! - 21_4_press_button: - "스위치를 눌러서 색칠기에 참 신호를 보내 활성화해보세요.

    추신: + 21_4_press_button: "스위치를 눌러서 색칠기에 참 신호를 보내 활성화해보세요.

    추신: 모든 입력을 연결할 필요는 없습니다! 두개만 연결해 보세요." colors: red: 빨간색 @@ -409,7 +394,6 @@ ingame: desc: 정식 버전의 장점을 보려면 여기를 클릭하세요! get_on_steam: Steam으로 가기 standaloneAdvantages: - title: 정식 버전을 구매하세요! no_thanks: 괜찮아요! points: levels: @@ -436,7 +420,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: 구역 zoneWidth: 너비 @@ -512,13 +498,11 @@ buildings: cutter: default: name: 절단기 - description: - 도형을 수직으로 잘라 두 가지 도형으로 나눕니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 + description: 도형을 수직으로 잘라 두 가지 도형으로 나눕니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 절단기가 막혀 멈추게 됩니다! quad: name: 4단 절단기 - description: - 도형을 즉시 네 개로 자릅니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 절단기가 막혀 + description: 도형을 즉시 네 개로 자릅니다. 한쪽만 사용할 경우라면 다른 부분을 파괴하지 않을 경우 절단기가 막혀 멈추게 됩니다! rotater: default: @@ -533,8 +517,7 @@ buildings: stacker: default: name: 결합기 - description: - 도형을 서로 결합하고 쌓습니다. 서로 결합할 수 있다면 두 도형을 붙여 하나로 만들고, 그렇지 않으면 오른쪽 도형이 왼쪽 + description: 도형을 서로 결합하고 쌓습니다. 서로 결합할 수 있다면 두 도형을 붙여 하나로 만들고, 그렇지 않으면 오른쪽 도형이 왼쪽 도형 위에 쌓이게 됩니다. mixer: default: @@ -549,8 +532,7 @@ buildings: description: 색소를 이용해 도형을 색칠합니다. 위쪽에서 받는 색소로 왼쪽에서 받는 도형 전체를 색칠합니다. quad: name: 4단 색칠기 - description: - 도형의 각 사분면에 개별적으로 색상을 칠할 수 있습니다. 전선 레이어를 통해 참 신호가 + description: 도형의 각 사분면에 개별적으로 색상을 칠할 수 있습니다. 전선 레이어를 통해 참 신호가 있는 슬롯만 칠해집니다! mirrored: name: 색칠기 @@ -597,8 +579,7 @@ buildings: lever: default: name: 스위치 - description: - 전선 레이어에서 불 값 (1 또는 0)을 방출하도록 전환할 수 있으며, 그 후 아이템 선별같은 구성 요소를 제어하는 데 + description: 전선 레이어에서 불 값 (1 또는 0)을 방출하도록 전환할 수 있으며, 그 후 아이템 선별같은 구성 요소를 제어하는 데 사용될 수 있습니다. logic_gate: default: @@ -609,8 +590,7 @@ buildings: description: 입력이 거짓일 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). xor: name: XOR 회로 - description: - 입력 중 하나만 참이고 둘 다 같지 않을 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 + description: 입력 중 하나만 참이고 둘 다 같지 않을 경우 불 값 "1"을 내보냅니다 (참은 도형, 색상, 불 값 "1"을 의미합니다). or: name: OR 회로 @@ -677,8 +657,7 @@ buildings: storyRewards: reward_cutter_and_trash: title: 절단기 - desc: - 절단기가 잠금 해제되었습니다! 절단기는 들어오는 도형이 어떤 도형을 하고 있던 수직으로 잘라 + desc: 절단기가 잠금 해제되었습니다! 절단기는 들어오는 도형이 어떤 도형을 하고 있던 수직으로 잘라 반으로 나눕니다!

    쓰지 않는 도형은 쓰레기로 처리하세요, 그렇지 않으면 작동을 멈출 것입니다! 이러한 목적을 위해 휴지통도 함께 지급되었습니다. 휴지통에 들어간 것은 모두 파괴됩니다! @@ -687,8 +666,7 @@ storyRewards: desc: 회전기가 잠금 해제되었습니다! 회전기는 들어오는 도형을 시계 방향으로 90도 회전시켜줍니다. reward_painter: title: 색칠기 - desc: - "색칠기가 잠금 해제되었습니다! 도형과 마찬가지로 색소를 추출하고 색칠기에 넣거 도형과 결합하여 색칠된 + desc: "색칠기가 잠금 해제되었습니다! 도형과 마찬가지로 색소를 추출하고 색칠기에 넣거 도형과 결합하여 색칠된 도형을 만들도록 하세요!

    추신: 만약 당신이 색맹이라면, 설정에서 색맹 모드를 활성화하세요!" reward_mixer: @@ -697,28 +675,24 @@ storyRewards: 색소
    를 얻을 수 있습니다! reward_stacker: title: 결합기 - desc: - 결합기가 잠금 해제되었습니다! 이제 결합기를 통해 여러 도형을 붙이고 결합할 수 있습니다! 들어오는 두 + desc: 결합기가 잠금 해제되었습니다! 이제 결합기를 통해 여러 도형을 붙이고 결합할 수 있습니다! 들어오는 두 도형의 도형이 서로 나란히 붙일 수 있다면, 하나의 도형으로 결합됩니다. 만약 서로 겹쳐진다면, 오른쪽 도형이 왼쪽 도형의 위에 쌓이게 됩니다! reward_splitter: title: 압축형 분배기 - desc: - 밸런서의 새로운 형태인 분배기가 잠금 해제되었습니다! 이제 벨트 한 줄을 + desc: 밸런서의 새로운 형태인 분배기가 잠금 해제되었습니다! 이제 벨트 한 줄을 즉시 두 줄로 분배합니다! reward_tunnel: title: 터널 desc: 터널이 잠금 해제되었습니다! 이제 벨트와 건물 아래로 공간을 만들어내 옮길 수 있습니다! reward_rotater_ccw: title: 반시계 방향 회전기 - desc: - 반시계 방향 회전기가 잠금 해제되었습니다! 반시계 방향 회전기는 회전기의 다른 형태로, 이름처럼 + desc: 반시계 방향 회전기가 잠금 해제되었습니다! 반시계 방향 회전기는 회전기의 다른 형태로, 이름처럼 들어오는 도형을 반시계 방향으로 90도만큼 회전시킵니다! 제작하려면 회전기를 선택한 후 'T' 키를 눌러 다른 형태로 전환하세요! reward_miner_chainable: title: 연쇄 추출기 - desc: - "연쇄 추출기가 잠금 해제되었습니다! 자원을 보다 더욱 효율적으로 추출할 수 있도록 앞에 + desc: "연쇄 추출기가 잠금 해제되었습니다! 자원을 보다 더욱 효율적으로 추출할 수 있도록 앞에 있는 추출기로 자원을 보낼 수 있습니다!

    추신: 이제 툴바에 있는 기존 추출기는 연쇄 추출기로 대체되었습니다!" reward_underground_belt_tier_2: @@ -727,18 +701,15 @@ storyRewards: 거리
    를 운송할 수 있고 기존 터널과 겹쳐지지 않고도 자원을 보낼 수 있습니다! reward_cutter_quad: title: 4단 절단기 - desc: - 새로운 종류의 절단기가 잠금 해제되었습니다! 4단 절단기는 도형을 두 조각이 아닌 네 + desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 4단 절단기는 도형을 두 조각이 아닌 네 조각으로 자를 수 있습니다! reward_painter_double: title: 2단 색칠기 - desc: - 새로운 종류의 절단기가 잠금 해제되었습니다! 일반적인 색칠기와 거의 동일하지만, 하나의 색소를 사용하여 + desc: 새로운 종류의 절단기가 잠금 해제되었습니다! 일반적인 색칠기와 거의 동일하지만, 하나의 색소를 사용하여 동시에 두 개의 도형을 색칠할 수 있습니다! reward_storage: title: 저장고 - desc: - 저장고가 잠금 해제되었습니다! 저장고는 최대 용량까지 도형을 저장할 수 있습니다!

    왼쪽 + desc: 저장고가 잠금 해제되었습니다! 저장고는 최대 용량까지 도형을 저장할 수 있습니다!

    왼쪽 출력이 우선되므로 오버플로 회로로도 활용될 수 있습니다! reward_freeplay: title: 자유플레이 @@ -748,38 +719,32 @@ storyRewards: 레이어를 통해 내보내므로 이를 분석하는 구조를 기반으로 하여 공장을 자동으로 구성하기만 하면 됩니다. reward_blueprints: title: 청사진 - desc: - 이제 공장의 일부를 복사하고 붙여넣는 기능을 사용할 수 있습니다! 영역을 선택 (CTRL 키를 누른 채 + desc: 이제 공장의 일부를 복사하고 붙여넣는 기능을 사용할 수 있습니다! 영역을 선택 (CTRL 키를 누른 채 마우스로 드래그)한 뒤 'C' 키를 눌러 복사할 수 있습니다.

    하지만 공짜는 아닙니다, 청사진 도형 도형을 허브에 저장하고 그것을 일부 사용해 붙여넣기 기능을 사용할 수 있습니다! (방금 당신이 만든 것입니다.) no_reward: title: 다음 레벨 - desc: - "이번 레벨의 보상은 없네요. 대신 다음 레벨에서 줄겁니다!

    추신: 기존 공장을 파괴하지는 마세요. 후에 + desc: "이번 레벨의 보상은 없네요. 대신 다음 레벨에서 줄겁니다!

    추신: 기존 공장을 파괴하지는 마세요. 후에 업그레이드 잠금 해제되면 기존의 모든 도형이 필요합니다!" no_reward_freeplay: title: 다음 레벨 desc: 축하드립니다! reward_balancer: title: 밸런서 - desc: - 밸런서가 잠금 해제되었습니다! 다목적 밸런서를 통해 여러 벨트의 아이템을 서로 다른 + desc: 밸런서가 잠금 해제되었습니다! 다목적 밸런서를 통해 여러 벨트의 아이템을 서로 다른 벨트로 분할하거나 합침으로써 더욱 거대한 공장을 만들 수 있습니다! reward_merger: title: 압축형 병합기 - desc: - 밸런서의 새로운 형태인 병합기가 잠금 해제되었습니다! 이제 벨트 두 줄을 + desc: 밸런서의 새로운 형태인 병합기가 잠금 해제되었습니다! 이제 벨트 두 줄을 즉시 한 줄로 병합합니다! reward_belt_reader: title: 벨트 판독기 - desc: - 벨트 판독기가 잠금 해제되었습니다! 이제 벨트의 처리량을 확인할 수 있습니다.

    그리고, + desc: 벨트 판독기가 잠금 해제되었습니다! 이제 벨트의 처리량을 확인할 수 있습니다.

    그리고, 전선이 잠금 해제될 때 까지 기다리신다면 정말 유용하게 사용할 수 있을 겁니다! reward_rotater_180: title: 220도 회전기 - desc: - 180도 회전기가 잠금 해제되었습니다! 이제 도형을 바로 180도로 회전시킬 수 있습니다. (짜잔! + desc: 180도 회전기가 잠금 해제되었습니다! 이제 도형을 바로 180도로 회전시킬 수 있습니다. (짜잔! :D) reward_display: title: 디스플레이 @@ -787,37 +752,32 @@ storyRewards: 있습니다.

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

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

    + desc: 논리 회로가 잠금 해제되었습니다! 굳이 흥분할 필요는 없지만, 진짜 멋진 기술입니다!

    논리 회로를 통해 이제 AND, OR, XOR, NOT 논리 연산을 할 수 있습니다.

    보너스로, 트랜지스터도 지급되었습니다! reward_virtual_processing: title: 가상 처리 - desc: - 도형의 처리를 시뮬레이션할 수 있는 다양한 새로운 건물이 잠금 해제되었습니다!

    이제 전선 + desc: 도형의 처리를 시뮬레이션할 수 있는 다양한 새로운 건물이 잠금 해제되었습니다!

    이제 전선 레이어에서 도형에 대한 절단기, 회전기, 결합기 등을 가상으로 시뮬레이션할 수 있습니다! 이제 게임 진행에 있어 다음 세 가지의 방법이 존재합니다:

    - 완전 자동화된 기계를 구축하고 허브에서 요구되는 도형을 제작합니다. (먼저 시도해볼 것을 권합니다!).

    - 전선을 통해 멋진 것들 만듭니다.

    - 평소처럼 게임을 진행합니다.

    어떤 방식으로든, 재미있게 게임을 플레이해주시길 바랍니다! reward_wires_painter_and_levers: title: 전선과 4단 색칠기 - desc: - " 방금 전선 레이어를 활성화하셨습니다: 이것은 일반 레이어 위에 존재하는 별개의 레이어로 수많은 + desc: " 방금 전선 레이어를 활성화하셨습니다: 이것은 일반 레이어 위에 존재하는 별개의 레이어로 수많은 새로운 요소를 사용할 수 있습니다!

    4단 색칠기를 활성화해 드리겠습니다 - 전선 레이어에서 색을 칠할 부분에 연결해 보세요!

    전선 레이어로 전환하시려면 E키를 눌러주세요.

    추신: 힌트를 활성화해서 전선 튜토리얼을 활성화해 보세요!" reward_filter: title: 아이템 선별기 - desc: - 아이템 선별기가 잠금 해제되었습니다! 전선 레이어의 신호와 일치하는지에 대한 여부로 아이템을 위쪽 + desc: 아이템 선별기가 잠금 해제되었습니다! 전선 레이어의 신호와 일치하는지에 대한 여부로 아이템을 위쪽 출력이나 오른쪽 출력으로 보냅니다.

    불 값 (1 또는 0)을 전달하여 완전히 활성화과 비활성화를 전환할 수 있습니다. reward_demo_end: @@ -838,8 +798,7 @@ settings: labels: uiScale: title: UI 크기 - description: - 사용자 인터페이스의 크기를 변경합니다. 인터페이스는 당신의 해상도에 따라 확장되는데 이 설정은 그 확장의 정도를 + description: 사용자 인터페이스의 크기를 변경합니다. 인터페이스는 당신의 해상도에 따라 확장되는데 이 설정은 그 확장의 정도를 제어합니다. scales: super_small: 매우 작게 @@ -886,18 +845,15 @@ settings: light: 라이트 refreshRate: title: 틱 빈도 - description: - 이것은 초당 발생하는 게임 틱 수를 결정합니다. 일반적으로 틱 속도가 높을수록 정밀도는 향상되나 성능은 낮아집니다. 낮은 + description: 이것은 초당 발생하는 게임 틱 수를 결정합니다. 일반적으로 틱 속도가 높을수록 정밀도는 향상되나 성능은 낮아집니다. 낮은 틱 빈도에서는 처리량이 정확하지 않을 수 있습니다. alwaysMultiplace: title: 다수 배치 항시 켜기 - description: - 활성화할 경우 모든 건물은 배치한 후 취소할 때 까지 커서에 선택된 상태를 유지합니다. 이 기능은 SHIFT 키를 계속 + description: 활성화할 경우 모든 건물은 배치한 후 취소할 때 까지 커서에 선택된 상태를 유지합니다. 이 기능은 SHIFT 키를 계속 누르는 것과 같습니다. offerHints: title: 힌트와 튜토리얼 - description: - 게임 플레이하는 동안 힌트와 튜토리얼을 보여줄 지를 결정합니다. 또한 게임에 더 쉽게 빠져들 수 있도록 특정 레벨까지 + description: 게임 플레이하는 동안 힌트와 튜토리얼을 보여줄 지를 결정합니다. 또한 게임에 더 쉽게 빠져들 수 있도록 특정 레벨까지 특정한 UI 요소를 숨깁니다. enableTunnelSmartplace: title: 지능적인 터널 배치 @@ -926,8 +882,7 @@ settings: description: 색맹 사용자를 위해 게임을 플레이하는 데 도움을 주는 다양한 도구를 활성화합니다. rotationByBuilding: title: 건물 유형에 따른 방향 - description: - 각 건물 유형마다 개별적으로 마지막으로 설정했던 방향을 기억하도록 합니다. 다른 건물 변형을 자주 전환하는 경우 이 + description: 각 건물 유형마다 개별적으로 마지막으로 설정했던 방향을 기억하도록 합니다. 다른 건물 변형을 자주 전환하는 경우 이 방법이 더욱 편할 수 있습니다. soundVolume: title: 효과음 볼륨 @@ -943,8 +898,7 @@ settings: description: 성능 향상을 위해 타일 그리드를 비활성화할 수 있습니다. 이 역시 게임을 더욱 깨끗하게 보여줍니다! clearCursorOnDeleteWhilePlacing: title: 우클릭 시 커서 지우기 - description: - 기본적으로 활성화되어 있으며, 배치할 건물을 선택한 상태에서 마우스 우클릭 시 커서를 지웁니다. 비활성화할 경우, 건물을 + description: 기본적으로 활성화되어 있으며, 배치할 건물을 선택한 상태에서 마우스 우클릭 시 커서를 지웁니다. 비활성화할 경우, 건물을 커서에 선택한 채로 우클릭하면 바로 건물을 삭제할 수 있습니다. lowQualityTextures: title: 저품질 텍스처 (못생김) @@ -957,8 +911,7 @@ settings: description: 기본적으로 활성화되어 있으며, 자원 패치에서 피펫 기능을 사용 시 즉시 추출기를 선택합니다. simplifiedBelts: title: 벨트 단순화 (못생김) - description: - 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 정도로 + description: 성능 향상을 위해 벨트를 가리킬 때를 제외한 모든 상황에서 벨트 아이템을 렌더링하지 않습니다. 이 기능을 사용할 정도로 심각한 성능 문제가 일어나지 않는 한, 이 설정을 사용할 필요는 없습니다. enableMousePan: title: 화면 가장자리 패닝 @@ -1176,8 +1129,7 @@ puzzleMenu: medium: 중간 hard: 어려움 unknown: Unrated - dlcHint: - DLC를 이미 구입하셨나요? 라이브러리에서 shapez.io를 오른쪽 클릭한 다음 속성… > DLC 메뉴를 선택해서 + dlcHint: DLC를 이미 구입하셨나요? 라이브러리에서 shapez.io를 오른쪽 클릭한 다음 속성… > DLC 메뉴를 선택해서 활성화되었는지 확인해주세요. search: action: Search @@ -1227,7 +1179,6 @@ mods: noModSupport: 모드를 사용하기 위해 정식버전이 필요합니다. togglingComingSoon: title: 곧 업데이트 됩니다! - description: - 지금은 mods/ 폴더에 모드 파일을 넣고 빼는 방식으로만 모드를 활성화/비활성화할 수 있습니다. 모드를 이곳에서 켜고 + description: 지금은 mods/ 폴더에 모드 파일을 넣고 빼는 방식으로만 모드를 활성화/비활성화할 수 있습니다. 모드를 이곳에서 켜고 끌수 있는 기능은 추후 업데이트될 예정입니다. 모드폴더에 넣고/빼는것으로 할수있습니다. 모드를 토글하는 기능은 곧 업데이트 됩니다! diff --git a/translations/base-lt.yaml b/translations/base-lt.yaml index 9f5da00d..fed14af4 100644 --- a/translations/base-lt.yaml +++ b/translations/base-lt.yaml @@ -433,7 +433,6 @@ ingame: desc: Click here to see the Steam version advantages! get_on_steam: Get on steam standaloneAdvantages: - title: Get the full version! no_thanks: No, thanks! points: levels: @@ -460,7 +459,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-nl.yaml b/translations/base-nl.yaml index db9aea21..576ea744 100644 --- a/translations/base-nl.yaml +++ b/translations/base-nl.yaml @@ -69,8 +69,8 @@ demoBanners: playtimeDisclaimer: De volledige versie bevat meer dan 20 uur aan inhoud. playerCount: spelers zoals jij spelen op dit moment shapez op Steam untilEndOfDemo: Tot het einde van de demo - playtimeDisclaimerDownload: Je kunt doorgaan met je savegame in de volledige versie! - Klik hier om je savegame te downloaden. + playtimeDisclaimerDownload: Je kunt doorgaan met je savegame in de volledige + versie! Klik hier om je savegame te downloaden. mainMenu: play: Spelen changelog: Wijzigingenlijst @@ -446,7 +446,6 @@ ingame: 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, dankjewel! points: levels: @@ -473,7 +472,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo tijd verlopen + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Gebied zoneWidth: Breedte diff --git a/translations/base-no.yaml b/translations/base-no.yaml index 57e58ec7..a8a11534 100644 --- a/translations/base-no.yaml +++ b/translations/base-no.yaml @@ -438,7 +438,6 @@ ingame: desc: Trykk her for å se fordelene med Steam verjsonen! get_on_steam: Få på Steam standaloneAdvantages: - title: Få fullversjonen! no_thanks: Nei takk! points: levels: @@ -465,7 +464,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demotiden er utløpt + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Sone zoneWidth: Bredde diff --git a/translations/base-pl.yaml b/translations/base-pl.yaml index 534831de..9d342146 100644 --- a/translations/base-pl.yaml +++ b/translations/base-pl.yaml @@ -441,7 +441,6 @@ ingame: desc: Kliknij tutaj, aby zobaczyć co potrafi wersja Steam! get_on_steam: Kup na Steam standaloneAdvantages: - title: Kup pełną wersję! no_thanks: Nie, dziękuję! points: levels: @@ -468,7 +467,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Czas demonstracyjny wygasł + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Obszar zoneWidth: Wysokość diff --git a/translations/base-pt-BR.yaml b/translations/base-pt-BR.yaml index c0c85f28..530a2f83 100644 --- a/translations/base-pt-BR.yaml +++ b/translations/base-pt-BR.yaml @@ -69,8 +69,8 @@ demoBanners: playerCount: Jogadores como você está jogando shapez on Steam agora mesmo. untilEndOfDemo: Até o final da demo - playtimeDisclaimerDownload: Você pode continuar seu jogo salvo na versão completa! - Clique aqui para baixar seu jogo salvo. + playtimeDisclaimerDownload: Você pode continuar seu jogo salvo na versão + completa! Clique aqui para baixar seu jogo salvo. mainMenu: play: Jogar continue: Continuar @@ -440,7 +440,6 @@ ingame: desc: Clique aqui para ver as vantagens da versão completa! get_on_steam: Adquira na Steam standaloneAdvantages: - title: Adquira a versão completa! no_thanks: Não, obrigado! points: levels: @@ -467,7 +466,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: O tempo de demonstração expirou + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zona zoneWidth: Largura diff --git a/translations/base-pt-PT.yaml b/translations/base-pt-PT.yaml index d41f3c5c..16b30132 100644 --- a/translations/base-pt-PT.yaml +++ b/translations/base-pt-PT.yaml @@ -69,8 +69,8 @@ demoBanners: playtimeDisclaimer: A versão completa contém mais de 20 horas de conteúdo. playerCount: jogadores como você estão jogando shapez no Steam untilEndOfDemo: Até o final da demo - playtimeDisclaimerDownload: Você pode continuar seu jogo salvo na versão completa! - Clique aqui para baixar seu jogo salvo. + playtimeDisclaimerDownload: Você pode continuar seu jogo salvo na versão + completa! Clique aqui para baixar seu jogo salvo. mainMenu: play: Jogar changelog: Changelog @@ -448,7 +448,6 @@ ingame: desc: Clica aqui para veres as vantagens da versão na Steam! get_on_steam: Compra na Steam standaloneAdvantages: - title: Obtém a versão completa! no_thanks: Não, obrigado! points: levels: @@ -475,7 +474,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: O tempo de demonstração expirou + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zona zoneWidth: Largura diff --git a/translations/base-ro.yaml b/translations/base-ro.yaml index fd9d3c2b..ea5f45bc 100644 --- a/translations/base-ro.yaml +++ b/translations/base-ro.yaml @@ -446,7 +446,6 @@ ingame: desc: Apasă aici pentru a vedea avantajele versiunii Steam! get_on_steam: Ia pe Steam standaloneAdvantages: - title: Ia versiunea completă! no_thanks: Nu, mersi! points: levels: @@ -473,7 +472,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Timpul demo a expirat + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zonă zoneWidth: Lățime diff --git a/translations/base-ru.yaml b/translations/base-ru.yaml index 6f22f283..c69515f0 100644 --- a/translations/base-ru.yaml +++ b/translations/base-ru.yaml @@ -443,7 +443,6 @@ ingame: desc: Нажмите сюда, чтобы узнать о преимуществах Steam версии! get_on_steam: Приобрести в Steam standaloneAdvantages: - title: Приобретите полную версию! no_thanks: Нет, спасибо! points: levels: @@ -470,7 +469,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Истекло время демонстрации + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Область zoneWidth: Ширина diff --git a/translations/base-sl.yaml b/translations/base-sl.yaml index 81562e15..2664204f 100644 --- a/translations/base-sl.yaml +++ b/translations/base-sl.yaml @@ -434,7 +434,6 @@ ingame: desc: Click here to see the Steam version advantages! get_on_steam: Get on steam standaloneAdvantages: - title: Get the full version! no_thanks: No, thanks! points: levels: @@ -461,7 +460,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-sr.yaml b/translations/base-sr.yaml index 112982d7..11d42b22 100644 --- a/translations/base-sr.yaml +++ b/translations/base-sr.yaml @@ -435,7 +435,6 @@ ingame: desc: Kliknite ovde da pogledate prednosti Steam verzije! get_on_steam: Nabavite na Steam-u standaloneAdvantages: - title: Nabavite punu verziju! no_thanks: Neka, hvala! points: levels: @@ -462,7 +461,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Širina diff --git a/translations/base-sv.yaml b/translations/base-sv.yaml index c85622d6..3f156dea 100644 --- a/translations/base-sv.yaml +++ b/translations/base-sv.yaml @@ -69,8 +69,8 @@ demoBanners: timmars innehåll
    . playerCount: spelare som du spelar just nu shapez på Steam untilEndOfDemo: Till slutet av demonstrationen - playtimeDisclaimerDownload: Du kan fortsätta ditt savegame i den fullständiga versionen! - Klicka här för att ladda ner ditt savegame. + playtimeDisclaimerDownload: Du kan fortsätta ditt savegame i den fullständiga + versionen! Klicka här för att ladda ner ditt savegame. mainMenu: play: Spela changelog: Ändringslogg @@ -439,7 +439,6 @@ ingame: desc: Klicka här för att se fördelarna med Steam-versionen! get_on_steam: Skaffa på Steam standaloneAdvantages: - title: Skaffa den fulla versionen! no_thanks: Nej tack! points: levels: @@ -466,7 +465,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demotiden har löpt ut + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width diff --git a/translations/base-tr.yaml b/translations/base-tr.yaml index 77db3d5e..ac6b7d48 100644 --- a/translations/base-tr.yaml +++ b/translations/base-tr.yaml @@ -439,7 +439,6 @@ ingame: desc: Steam sürümü avantajlarını görmek için buraya tıklayın! get_on_steam: Steam'de al standaloneAdvantages: - title: Tam versiyonu al! no_thanks: Hayır, teşekkürler! points: levels: @@ -466,7 +465,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo süresi sona erdi + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Alan zoneWidth: Genişlik diff --git a/translations/base-uk.yaml b/translations/base-uk.yaml index ea9e76c1..653301b0 100644 --- a/translations/base-uk.yaml +++ b/translations/base-uk.yaml @@ -68,8 +68,8 @@ demoBanners: playtimeDisclaimer: Повна версія містить понад 20 години вмісту. playerCount: гравців як ви зараз грають у shapez на Steam untilEndOfDemo: До кінця демонстрації - playtimeDisclaimerDownload: Ви можете продовжити свою збережену гру в повній версії! - Натисніть тут, щоб завантажити збережену гру. + playtimeDisclaimerDownload: Ви можете продовжити свою збережену гру в повній + версії! Натисніть тут, щоб завантажити збережену гру. mainMenu: play: Грати continue: Продовжити @@ -430,10 +430,10 @@ ingame: вводи
    фарбувальника за допомогою проводу! 21_3_place_button: Неймовірно! Тепер розмістіть Вимикач Та з'єднайте їх дротом! - 21_4_press_button: 'Натисніть вимикач, аби він почав видавати сигнал - "Істина" активувавши таким чином - фарбувальник.

    PS: Не обов''язково підключати всі входи! - Спробуйте підключити лише два.' + 21_4_press_button: "Натисніть вимикач, аби він почав видавати сигнал + \"Істина\" активувавши таким чином + фарбувальник.

    PS: Не обов'язково підключати всі входи! + Спробуйте підключити лише два." connectedMiners: one_miner: 1 Екстрактор n_miners: Екстракторів @@ -443,7 +443,6 @@ ingame: desc: Натисніть сюди аби переглянути переваги Steam версії! get_on_steam: Отримати в Steam standaloneAdvantages: - title: Отримати повну версію! no_thanks: Ні, дякую! points: levels: @@ -470,7 +469,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Час демонстрації закінчився + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Зона zoneWidth: Ширина diff --git a/translations/base-zh-CN-ISBN.yaml b/translations/base-zh-CN-ISBN.yaml index 5cacf81c..51e458eb 100644 --- a/translations/base-zh-CN-ISBN.yaml +++ b/translations/base-zh-CN-ISBN.yaml @@ -375,7 +375,6 @@ ingame: desc: 点击这里了解完整版内容 get_on_steam: 在Steam商城购买 standaloneAdvantages: - title: 购买完整版! no_thanks: 不需要,谢谢 points: levels: @@ -402,7 +401,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: Demo Time Expired + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: 区域 zoneWidth: 宽度 diff --git a/translations/base-zh-CN.yaml b/translations/base-zh-CN.yaml index 01b402a2..bba3e065 100644 --- a/translations/base-zh-CN.yaml +++ b/translations/base-zh-CN.yaml @@ -65,8 +65,7 @@ demoBanners: playtimeDisclaimer: 完整版包括多达 20 小时的新内容 playerCount: 个像你一样的玩家目前正在 Steam 上玩 shapez untilEndOfDemo: 直到演示结束 - playtimeDisclaimerDownload: 您可以在完整版中继续您的存档游戏! - 点击此处下载您的存档游戏。 + playtimeDisclaimerDownload: 您可以在完整版中继续您的存档游戏! 点击此处下载您的存档游戏。 mainMenu: play: 开始游戏 changelog: 更新日志 @@ -84,8 +83,7 @@ mainMenu: savegameUnnamed: 存档未命名 puzzleMode: 谜题模式 back: 返回 - puzzleDlcText: - 持续优化,追求极致效率。在限定空间内使用有限的设施来创造图形!《异形工厂》(Shapez)的首个 DLC + puzzleDlcText: 持续优化,追求极致效率。在限定空间内使用有限的设施来创造图形!《异形工厂》(Shapez)的首个 DLC “谜题挑战者”将会给大家带来更烧脑、更自由的全新挑战! puzzleDlcWishlist: 添加愿望单! puzzleDlcViewNow: 查看 DLC @@ -155,8 +153,7 @@ dialogs: desc: 您还没有解锁蓝图功能!通过第 12 关的挑战后可解锁蓝图。 keybindingsIntroduction: title: 实用快捷键 - desc: - 这个游戏有很多有用的快捷键设定。以下是其中的一些介绍,记得在按键设置中查看其他按键设定!

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

    CTRL 键 + 拖动:选择区域以复制或删除。
    SHIFT 键: 按住以放置多个同一种设施。
    ALT 键:反向放置传送带。
    @@ -345,13 +342,11 @@ ingame: hints: 1_1_extractor: 在圆形上放置一个开采器来获取圆形!

    提示:按下鼠标左键选中开采器 1_2_conveyor: 用传送带将您的开采器连接到中心基地上!

    提示:选中传送带按下鼠标左键可拖动布置传送带! - 1_3_expand: - 您可以放置更多的开采器传送带来更有效率地完成关卡目标。

    + 1_3_expand: 您可以放置更多的开采器传送带来更有效率地完成关卡目标。

    提示:按住 SHIFT 键可放置多个开采器,注意用 R 键可旋转开采器的出口方向,确保开采的图形可以顺利传送。 2_1_place_cutter: 现在放置一个切割器,这个设施可把圆形切成两半!

    注意:无论如何放置,切割机总是从上到下切割。 - 2_2_place_trash: - 使用切割机后产生的废弃图形会导致堵塞

    注意使用垃圾桶清除当前 + 2_2_place_trash: 使用切割机后产生的废弃图形会导致堵塞

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

    提示:用快捷键 0 - 9 @@ -388,7 +383,6 @@ ingame: desc: 点击这里了解完整版内容 get_on_steam: 在 Steam 商城购买 standaloneAdvantages: - title: 购买完整版! no_thanks: 不需要,谢谢 points: levels: @@ -415,7 +409,9 @@ ingame: achievements: title: 成就 desc: 挑战全成就解锁! - title_expired: 演示时间已过 + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: 区域 zoneWidth: 宽度 @@ -655,8 +651,7 @@ storyRewards: desc: 恭喜!您解锁了旋转机。它会顺时针将输入的图形旋转90度。 reward_painter: title: 上色 - desc: - 恭喜!您解锁了上色器。开采一些颜色(就像您开采图形一样),将其在上色器中与图形结合来将图形上色! + desc: 恭喜!您解锁了上色器。开采一些颜色(就像您开采图形一样),将其在上色器中与图形结合来将图形上色!
    注意:如果您不幸患有色盲,可以在设置中启用色盲模式 reward_mixer: title: 混合颜色 @@ -673,13 +668,11 @@ storyRewards: desc: 恭喜!您解锁了隧道。它可放置在传送带设施下方以运送物品。 reward_rotater_ccw: title: 逆时针旋转 - desc: - 恭喜!您解锁了旋转机逆时针变体。它可以逆时针旋转图形。 + desc: 恭喜!您解锁了旋转机逆时针变体。它可以逆时针旋转图形
    选择旋转机然后按 "T" 键来选取这个变体。 reward_miner_chainable: title: 链式开采器 - desc: - 您已经解锁了链式开采器!它能转发资源给其他的开采器,这样您就能更有效率的开采各类资源了!

    + desc: 您已经解锁了链式开采器!它能转发资源给其他的开采器,这样您就能更有效率的开采各类资源了!

    注意:新的开采器已替换了工具栏里旧的开采器! reward_underground_belt_tier_2: title: 二级隧道 @@ -696,14 +689,12 @@ storyRewards:
    优先从左边输出,这样您就可以用它做一个溢流门了! reward_freeplay: title: 自由模式 - desc: - 成功了!您解锁了自由模式!挑战升级!这意味着现在将随机生成图形! + desc: 成功了!您解锁了自由模式!挑战升级!这意味着现在将随机生成图形! 从现在起,中心基地最为需要的是产量,强烈建议您去制造一台能够自动交付所需图形的机器!

    基地会在电线层输出需要的图形,您需要去分析图形并在此基础上自动配置您的工厂。 reward_blueprints: title: 蓝图 - desc: - 您现在可以复制粘贴您的工厂的一部分了!按住 CTRL 键并拖动鼠标来选择一块区域,然后按 C 键复制。 + desc: 您现在可以复制粘贴您的工厂的一部分了!按住 CTRL 键并拖动鼠标来选择一块区域,然后按 C 键复制。

    粘贴并不是免费的,您需要制造蓝图图形来负担。蓝图图形是您刚刚交付的图形。 no_reward: title: 下一关 @@ -731,8 +722,7 @@ storyRewards:
    注意:您注意到传送读取器存储器输出的他们最后读取的物品了吗?试着在显示屏上展示一下! reward_constant_signal: title: 恒定信号 - desc: - 恭喜!您解锁了生成于电线层之上的恒定信号,把它连接到过滤器时非常有用。 + desc: 恭喜!您解锁了生成于电线层之上的恒定信号,把它连接到过滤器时非常有用。
    比如,它能发出图形、颜色、开关值(1 / 0)的固定信号。 reward_logic_gates: title: 逻辑门 @@ -751,8 +741,7 @@ storyRewards: 提示:可在设置中打开电线层教程! reward_filter: title: 物品过滤器 - desc: - 恭喜!您解锁了物品过滤器!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。

    + desc: 恭喜!您解锁了物品过滤器!它会根据在电线层上输入的信号决定是从上面还是右边输出物品。

    您也可以输入开关值(1 / 0)信号来激活或者禁用它。 reward_demo_end: title: 试玩结束 @@ -808,8 +797,7 @@ settings: light: 浅色 refreshRate: title: 模拟频率、刷新频率 - description: - 在这里更改刷新频率,这样游戏可以正确地根据您的屏幕进行模拟。但是如果您的电脑性能不佳,提高刷新频率可能降低帧数。注意,60Hz + description: 在这里更改刷新频率,这样游戏可以正确地根据您的屏幕进行模拟。但是如果您的电脑性能不佳,提高刷新频率可能降低帧数。注意,60Hz 以上的任何频率都会导致游戏卡顿! alwaysMultiplace: title: 多重放置 @@ -1146,7 +1134,6 @@ mods: noModSupport: 您需要在 Steam 平台获得完整版才可以安装游戏模组(Mods)。 togglingComingSoon: title: 即将开放 - description: - 当前只能通过将游戏模组(Mods)文件复制到 mods 文件夹或从 mods 文件夹移除来启用或禁用游戏模组(Mods)。 + description: 当前只能通过将游戏模组(Mods)文件复制到 mods 文件夹或从 mods 文件夹移除来启用或禁用游戏模组(Mods)。 但是,可以切换游戏模组(Mods)已经计划在之后的更新中实现! modWebsite: 模组网站 diff --git a/translations/base-zh-TW.yaml b/translations/base-zh-TW.yaml index 88c20aeb..df027b89 100644 --- a/translations/base-zh-TW.yaml +++ b/translations/base-zh-TW.yaml @@ -63,8 +63,7 @@ demoBanners: playtimeDisclaimer: 完整版包含超過 20 小時的內容。 playerCount: 個像你一樣的玩家目前正在 Steam 上玩 shapez untilEndOfDemo: 直到演示結束 - playtimeDisclaimerDownload: 您可以在完整版中繼續您的存檔遊戲! - 點擊此處下載您的存檔遊戲。 + playtimeDisclaimerDownload: 您可以在完整版中繼續您的存檔遊戲! 點擊此處下載您的存檔遊戲。 mainMenu: play: 開始遊戲 changelog: 更新日誌 @@ -153,15 +152,13 @@ dialogs: desc: 你還沒有解鎖藍圖功能!完成更多的關卡來解鎖藍圖。 keybindingsIntroduction: title: 實用按鍵 - desc: - "這個遊戲有很多能幫助搭建工廠的使用按鍵。 以下是其中的一些,記得在按鍵設定中查看其他的!

    + desc: "這個遊戲有很多能幫助搭建工廠的使用按鍵。 以下是其中的一些,記得在按鍵設定中查看其他的!

    CTRL + 拖曳:選擇區域以複製或刪除。
    SHIFT: 按住以放置多個。
    ALT: 反向放置輸送帶。
    " createMarker: title: 建立標記 - desc: - 給地圖標記取一個名字。你可以在名字中加入一個簡短代碼以加入圖形。(你可以在這裡 + desc: 給地圖標記取一個名字。你可以在名字中加入一個簡短代碼以加入圖形。(你可以在這裡 建立簡短代碼。) titleEdit: 修改標記 markerDemoLimit: @@ -356,18 +353,15 @@ ingame: 1_1_extractor: 在圓形礦脈上放一個開採機來採集圓形! 1_2_conveyor: 用輸送帶將你的開採機連接到基地上!

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

    + 1_3_expand: 這不是一個放置型遊戲!建造更多的開採機和輸送帶來更快地完成目標。

    提示:按住SHIFT鍵來放置多個開採機,用R鍵旋轉它們。 2_1_place_cutter: "現在放置一個切割機並利用它把圓圈切成兩半!

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

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

    PS: + 2_3_more_cutters: "做得好! 現在,再放2個切割機來加速這個緩慢的生產線!

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

    PS: + 3_1_rectangles: "現在來開採一些方形吧!蓋4座開採機,把形狀收集到基地。

    PS: 選擇輸送帶,按住SHIFT並拖曳滑鼠可以計畫輸送帶位置!" 21_1_place_quad_painter: 放置一個上色機(四向)並取得一些 圓形白色紅色! @@ -400,7 +394,6 @@ ingame: desc: 按這裡看 Steam 版的優勢! get_on_steam: 在 Steam 上取得 standaloneAdvantages: - title: 取得單機版! no_thanks: 不用了,謝謝! points: levels: @@ -427,7 +420,9 @@ ingame: mods: title: Modding support! desc: Over 80 mods available! - title_expired: 演示時間已過 + titleV2: "Get the full version now on Steam to unlock:" + titleExpiredV2: Demo completed! + titleEnjoyingDemo: Enjoy the demo? puzzleEditorSettings: zoneTitle: Zone zoneWidth: Width @@ -604,19 +599,16 @@ buildings: transistor: default: name: 電晶體 - description: - 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 + description: 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 (「真」訊號代表:形狀訊號、顏色訊號或布林值為1) mirrored: name: 電晶體 - description: - 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 + description: 如果基極(側面)的輸入訊號為「真」,則把射極(底部)輸入的真假值複製到集極(頂部)的輸出。 (「真」訊號代表:形狀訊號、顏色訊號或布林值為1) filter: default: name: 物件分類器 - description: - 它會依據電路層收到的訊號,從分類器底部輸入的物件如符合輸入信號的會輸出到頂部,不符合的會從右方(交叉標記)排出。 + description: 它會依據電路層收到的訊號,從分類器底部輸入的物件如符合輸入信號的會輸出到頂部,不符合的會從右方(交叉標記)排出。 它也可以被布林值訊號控制。 display: default: @@ -669,8 +661,7 @@ buildings: storyRewards: reward_cutter_and_trash: title: 切割圖形 - desc: - 切割機已解鎖!不論切割機的方向,它都會把圖形垂直地切成兩半。

    + desc: 切割機已解鎖!不論切割機的方向,它都會把圖形垂直地切成兩半。

    記得把不需要的部分處理掉,否則切割機會因為堵塞而停止運作。 為此我給你準備了垃圾桶,它會把所有放進去的物品銷毀掉。 reward_rotater: @@ -762,8 +753,7 @@ storyRewards: 布林值(1或0)。 reward_logic_gates: title: 邏輯閘 - desc: - 邏輯閘已解鎖!你可能覺得無所謂,但其實邏輯閘其實超酷的!

    有了這些邏輯閘,你可以運算 AND, + desc: 邏輯閘已解鎖!你可能覺得無所謂,但其實邏輯閘其實超酷的!

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

    錦上添花,我再送你電晶體! reward_virtual_processing: title: 虛擬操作 diff --git a/version b/version index 1d5e9e0b..63ebd3fe 100644 --- a/version +++ b/version @@ -1 +1 @@ -1.5.3 \ No newline at end of file +1.5.4 \ No newline at end of file