diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index e98615e26867..f3e83da6017c 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -17,28 +17,31 @@ jobs: java-version: 14 - name: Set env run: echo "RELEASE_VERSION=${GITHUB_REF#refs/*/}" >> $GITHUB_ENV + - name: Add Arc release + run: | + git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc + cd ../Arc + git tag ${RELEASE_VERSION} + git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/Arc ${RELEASE_VERSION}; + cd ../Mindustry - name: Create artifacts run: | - ./gradlew desktop:dist server:dist core:javadoc -Pbuildversion=${RELEASE_VERSION:1} + ./gradlew desktop:dist server:dist core:mergedJavadoc -Pbuildversion=${RELEASE_VERSION:1} - name: Update docs run: | cd ../ git config --global user.email "cli@github.com" git config --global user.name "Github Actions" git clone --depth=1 https://github.com/MindustryGame/docs.git - cp -a Mindustry/core/build/docs/javadoc/. docs/ + cd docs + find . -maxdepth 1 ! -name ".git" ! -name . -exec rm -r {} \; + cd ../ + cp -a Mindustry/core/build/javadoc/. docs/ cd docs git add . git commit -m "Update ${RELEASE_VERSION:1}" git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/MindustryGame/docs cd ../Mindustry - - name: Add Arc release - run: | - git clone --depth=1 --branch=master https://github.com/Anuken/Arc ../Arc - cd ../Arc - git tag ${RELEASE_VERSION} - git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/Arc ${RELEASE_VERSION}; - cd ../Mindustry - name: Update F-Droid build string run: | git clone --depth=1 --branch=master https://github.com/Anuken/MindustryBuilds ../MindustryBuilds @@ -47,6 +50,7 @@ jobs: echo versionName=6-fdroid-${RELEASE_VERSION:1}$'\n'versionCode=${RELEASE_VERSION:1} > version_fdroid.txt git add . git commit -m "Updating to build ${RELEASE_VERSION:1}" + git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds cd ../Mindustry - name: Upload client artifacts uses: svenstaro/upload-release-action@v2 diff --git a/.gitignore b/.gitignore index 471b90910622..160366ca2a97 100644 --- a/.gitignore +++ b/.gitignore @@ -43,6 +43,7 @@ ios/robovm.properties packr-out/ config/ *.gif +/tests/out /core/assets/basepartnames version.properties diff --git a/CONTRIBUTING.md b/CONTRIBUTING.md index 8b4ec3bf55ac..64bd54bd561d 100644 --- a/CONTRIBUTING.md +++ b/CONTRIBUTING.md @@ -15,9 +15,6 @@ If you are submitting a new block, make sure it has a name and description, and If you are interested in adding a large mechanic/feature or changing large amounts of code, first contact me (Anuken) via [Discord](https://discord.gg/mindustry) (preferred method) or via e-mail (*anukendev@gmail.com*). For most changes, this should not be necessary. I just want to know if you're doing something big so I can offer advice and/or make sure you're not wasting your time on it. -### Do not include packed sprites in your pull request. -When making a pull request that changes or adds new sprites, do not add the modified atlas & `spritesX.png` files to your final pull request. These are a frequent source of conflicts. - ## Style Guidelines diff --git a/android/build.gradle b/android/build.gradle index cf60a2f9453e..1dd5ff14c65c 100644 --- a/android/build.gradle +++ b/android/build.gradle @@ -4,7 +4,6 @@ buildscript{ mavenCentral() google() maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" } - jcenter() } dependencies{ @@ -20,8 +19,8 @@ configurations{ natives } repositories{ mavenCentral() - jcenter() maven{ url "https://maven.google.com" } + jcenter() //remove later once google fixes the dependency } dependencies{ diff --git a/android/src/mindustry/android/AndroidLauncher.java b/android/src/mindustry/android/AndroidLauncher.java index 5084cbc67daa..b92865c68a50 100644 --- a/android/src/mindustry/android/AndroidLauncher.java +++ b/android/src/mindustry/android/AndroidLauncher.java @@ -45,6 +45,7 @@ protected void onCreate(Bundle savedInstanceState){ handler.uncaughtException(thread, error); }else{ error.printStackTrace(); + Log.err(error); System.exit(1); } }); @@ -161,7 +162,6 @@ public void endForceLandscape(){ }, new AndroidApplicationConfiguration(){{ useImmersiveMode = true; hideStatusBar = true; - stencil = 8; }}); checkFiles(getIntent()); diff --git a/annotations/src/main/java/mindustry/annotations/remote/RemoteReadGenerator.java b/annotations/src/main/java/mindustry/annotations/remote/RemoteReadGenerator.java index a8493d56438c..3442843669d2 100644 --- a/annotations/src/main/java/mindustry/annotations/remote/RemoteReadGenerator.java +++ b/annotations/src/main/java/mindustry/annotations/remote/RemoteReadGenerator.java @@ -107,7 +107,7 @@ public void generateFor(Seq entries, String className, String packa } readBlock.nextControlFlow("catch (java.lang.Exception e)"); - readBlock.addStatement("throw new java.lang.RuntimeException(\"Failed to to read remote method '" + entry.element.getSimpleName() + "'!\", e)"); + readBlock.addStatement("throw new java.lang.RuntimeException(\"Failed to read remote method '" + entry.element.getSimpleName() + "'!\", e)"); readBlock.endControlFlow(); } diff --git a/build.gradle b/build.gradle index 98744b135872..102c0babfddc 100644 --- a/build.gradle +++ b/build.gradle @@ -12,7 +12,6 @@ buildscript{ mavenCentral() google() maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" } - jcenter() maven{ url 'https://jitpack.io' } } @@ -184,7 +183,6 @@ allprojects{ maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" } maven{ url "https://oss.sonatype.org/content/repositories/releases/" } maven{ url 'https://jitpack.io' } - jcenter() } task clearCache{ @@ -320,6 +318,15 @@ project(":core"){ } } + task sourcesJar(type: Jar, dependsOn: classes){ + classifier = 'sources' + from sourceSets.main.allSource + } + + artifacts{ + archives sourcesJar + } + dependencies{ compileJava.dependsOn(preGen) @@ -337,6 +344,28 @@ project(":core"){ annotationProcessor 'com.github.Anuken:jabel:34e4c172e65b3928cd9eabe1993654ea79c409cd' } + + afterEvaluate{ + task mergedJavadoc(type: Javadoc){ + def blacklist = [project(":ios"), project(":desktop"), project(":server"), project(":annotations")] + if(findProject(":android") != null){ + blacklist += project(":android") + } + + source rootProject.subprojects.collect{ project -> + if(!blacklist.contains(project) && project.hasProperty("sourceSets")){ + return project.sourceSets.main.allJava + } + } + + classpath = files(rootProject.subprojects.collect { project -> + if(!blacklist.contains(project) && project.hasProperty("sourceSets")){ + return project.sourceSets.main.compileClasspath + } + }) + destinationDir = new File(buildDir, 'javadoc') + } + } } project(":server"){ @@ -410,3 +439,12 @@ task deployAll{ dependsOn "server:deploy" dependsOn "android:deploy" } + +task resolveDependencies{ + doLast{ + rootProject.allprojects{ project -> + Set configurations = project.buildscript.configurations + project.configurations + configurations.findAll{c -> c.canBeResolved}.forEach{c -> c.resolve()} + } + } +} diff --git a/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator.png b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator.png index a83ba863a9f5..41019a2c7d38 100644 Binary files a/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator.png and b/core/assets-raw/sprites/blocks/campaign/interplanetary-accelerator.png differ diff --git a/core/assets-raw/sprites/blocks/campaign/launch-pad-large.png b/core/assets-raw/sprites/blocks/campaign/launch-pad-large.png index ac04aef1c461..ac77dbe43c5d 100644 Binary files a/core/assets-raw/sprites/blocks/campaign/launch-pad-large.png and b/core/assets-raw/sprites/blocks/campaign/launch-pad-large.png differ diff --git a/core/assets-raw/sprites/effects/select-arrow.png b/core/assets-raw/sprites/effects/select-arrow.png new file mode 100644 index 000000000000..41c2608d8b95 Binary files /dev/null and b/core/assets-raw/sprites/effects/select-arrow.png differ diff --git a/core/assets-raw/sprites/items/item-plastanium.png b/core/assets-raw/sprites/items/item-plastanium.png index f6ddf438fcc1..eb5b69d37426 100644 Binary files a/core/assets-raw/sprites/items/item-plastanium.png and b/core/assets-raw/sprites/items/item-plastanium.png differ diff --git a/core/assets-raw/sprites/ui/pane-solid.9.png b/core/assets-raw/sprites/ui/pane-solid.9.png new file mode 100644 index 000000000000..f7a6a53b36fb Binary files /dev/null and b/core/assets-raw/sprites/ui/pane-solid.9.png differ diff --git a/core/assets-raw/sprites/units/vanguard-cell.png b/core/assets-raw/sprites/units/vanguard-cell.png deleted file mode 100644 index 4366b2167b0e..000000000000 Binary files a/core/assets-raw/sprites/units/vanguard-cell.png and /dev/null differ diff --git a/core/assets-raw/sprites/units/vanguard.png b/core/assets-raw/sprites/units/vanguard.png deleted file mode 100644 index feacbacc6eb7..000000000000 Binary files a/core/assets-raw/sprites/units/vanguard.png and /dev/null differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index b93e4059394b..b81792596cbc 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -41,10 +41,13 @@ be.ignore = Ignore be.noupdates = No updates found. be.check = Check for updates -mod.featured.dialog.title = Mod Browser (WIP) +mods.browser = Mod Browser mods.browser.selected = Selected mod mods.browser.add = Install -mods.github.open = View +mods.browser.reinstall = Reinstall +mods.github.open = Repo +mods.browser.sortdate = Sort by recent +mods.browser.sortstars = Sort by stars schematic = Schematic schematic.add = Save Schematic... @@ -89,6 +92,7 @@ joingame = Join Game customgame = Custom Game newgame = New Game none = +none.found = [lightgray] minimap = Minimap position = Position close = Close @@ -115,8 +119,10 @@ mods.none = [lightgray]No mods found! mods.guide = Modding Guide mods.report = Report Bug mods.openfolder = Open Folder +mods.viewcontent = View Content mods.reload = Reload mods.reloadexit = The game will now exit, to reload mods. +mod.installed = [[Installed] mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Enabled mod.disabled = [scarlet]Disabled @@ -286,6 +292,7 @@ cancel = Cancel openlink = Open Link copylink = Copy Link back = Back +max = Max crash.export = Export Crash Logs crash.none = No crash logs found. crash.exported = Crash logs exported. @@ -305,6 +312,7 @@ cancelbuilding = [accent][[{0}][] to clear plan selectschematic = [accent][[{0}][] to select+copy pausebuilding = [accent][[{0}][] to pause building resumebuilding = [scarlet][[{0}][] to resume building +enablebuilding = [scarlet][[{0}][] to enable building showui = UI hidden.\nPress [accent][[{0}][] to show UI. wave = [accent]Wave {0} wave.cap = [accent]Wave {0}/{1} @@ -360,7 +368,6 @@ editor.center = Center workshop = Workshop waves.title = Waves waves.remove = Remove -waves.never = waves.every = every waves.waves = wave(s) waves.perspawn = per spawn @@ -389,7 +396,7 @@ editor.removeunit = Remove Unit editor.teams = Teams editor.errorload = Error loading file. editor.errorsave = Error saving file. -editor.errorimage = That's an image, not a map.\n\nIf you want to import a 3.5/build 40 map, use the 'Import Legacy Map' button in the editor. +editor.errorimage = That's an image, not a map. editor.errorlegacy = This map is too old, and uses a legacy map format that is no longer supported. editor.errornot = This is not a map file. editor.errorheader = This map file is either not valid or corrupt. @@ -677,6 +684,7 @@ stat.drillspeed = Base Drill Speed stat.boosteffect = Boost Effect stat.maxunits = Max Active Units stat.health = Health +stat.armor = Armor stat.buildtime = Build Time stat.maxconsecutive = Max Consecutive stat.buildcost = Build Cost @@ -692,6 +700,7 @@ stat.lightningchance = Lightning Chance stat.lightningdamage = Lightning Damage stat.flammability = Flammability stat.radioactivity = Radioactivity +stat.charge = Charge stat.heatcapacity = Heat Capacity stat.viscosity = Viscosity stat.temperature = Temperature @@ -719,6 +728,7 @@ bar.corereq = Core Base Required bar.drillspeed = Drill Speed: {0}/s bar.pumpspeed = Pump Speed: {0}/s bar.efficiency = Efficiency: {0}% +bar.boost = Boost: {0}% bar.powerbalance = Power: {0}/s bar.powerstored = Stored: {0}/{1} bar.poweramount = Power: {0} @@ -786,6 +796,7 @@ setting.shadows.name = Shadows setting.blockreplace.name = Automatic Block Suggestions setting.linear.name = Linear Filtering setting.hints.name = Hints +setting.logichints.name = Logic Hints setting.flow.name = Display Resource Flow Rate setting.backgroundpause.name = Pause In Background setting.buildautopause.name = Auto-Pause Building @@ -917,6 +928,7 @@ keybind.toggle_menus.name = Toggle Menus keybind.chat_history_prev.name = Chat History Prev keybind.chat_history_next.name = Chat History Next keybind.chat_scroll.name = Chat Scroll +keybind.chat_mode.name = Change Chat Mode keybind.drop_unit.name = Drop Unit keybind.zoom_minimap.name = Zoom Minimap mode.help.title = Description of modes @@ -933,6 +945,7 @@ mode.custom = Custom Rules rules.infiniteresources = Infinite Resources rules.reactorexplosions = Reactor Explosions +rules.coreincinerates = Core Incinerates Overflow rules.schematic = Schematics Allowed rules.wavetimer = Wave Timer rules.waves = Waves @@ -944,6 +957,8 @@ rules.blockdamagemultiplier = Block Damage Multiplier rules.unitbuildspeedmultiplier = Unit Production Speed Multiplier rules.unithealthmultiplier = Unit Health Multiplier rules.unitdamagemultiplier = Unit Damage Multiplier +rules.unitcapvariable = Cores Contribute To Unit Cap +rules.unitcap = Base Unit Cap rules.enemycorebuildradius = Enemy Core No-Build Radius:[lightgray] (tiles) rules.wavespacing = Wave Spacing:[lightgray] (sec) rules.buildcostmultiplier = Build Cost Multiplier @@ -1379,8 +1394,8 @@ block.inverted-sorter.description = Similar to a standard sorter, but outputs se block.router.description = Distributes input items to 3 output directions equally. block.router.details = A necessary evil. Using next to production inputs is not advised, as they will get clogged by output. block.distributor.description = Distributes input items to 7 output directions equally. -block.overflow-gate.description = Only outputs items to the left and right if the front path is blocked. Cannot be used next to other gates. -block.underflow-gate.description = Opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. Cannot be used next to other gates. +block.overflow-gate.description = Only outputs items to the left and right if the front path is blocked. +block.underflow-gate.description = Opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. block.mass-driver.description = Long-range item transport structure. Collects batches of items and shoots them to other mass drivers. block.mechanical-pump.description = Pumps and outputs liquids. Does not require power. block.rotary-pump.description = Pumps and outputs liquids. Requires power. @@ -1501,3 +1516,139 @@ unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Co unit.alpha.description = Defends the Shard core from enemies. Builds structures. unit.beta.description = Defends the Foundation core from enemies. Builds structures. unit.gamma.description = Defends the Nucleus core from enemies. Builds structures. + +lst.read = Read a number from a linked memory cell. +lst.write = Write a number to a linked memory cell. +lst.print = Add text to the print buffer.\nDoes not display anything until [accent]Print Flush[] is used. +lst.draw = Add an operation to the drawing buffer.\nDoes not display anything until [accent]Draw Flush[] is used. +lst.drawflush = Flush queued [accent]Draw[] operations to a display. +lst.printflush = Flush queued [accent]Print[] operations to a message block. +lst.getlink = Get a processor link by index. Starts at 0. +lst.control = Control a building. +lst.radar = Locate units around a building with range. +lst.sensor = Get data from a building or unit. +lst.set = Set a variable. +lst.operation = Perform an operation on 1-2 variables. +lst.end = Jump to the top of the instruction stack. +lst.jump = Conditionally jump to another statement. +lst.unitbind = Bind to the next unit of a type, and store it in [accent]@unit[]. +lst.unitcontrol = Control the currently bound unit. +lst.unitradar = Locate units around the currently bound unit. +lst.unitlocate = Locate a specific type of position/building anywhere on the map.\nRequires a bound unit. + +lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. +lenum.shoot = Shoot at a position. +lenum.shootp = Shoot at a unit/building with velocity prediction. +lenum.configure = Building configuration, e.g. sorter item. +lenum.enabled = Whether the block is enabled. + +laccess.color = Illuminator color. + +graphicstype.clear = Fill the display with a color. +graphicstype.color = Set color for next drawing operation. +graphicstype.stroke = Set line width. +graphicstype.line = Draw line segment. +graphicstype.rect = Fill a rectangle. +graphicstype.linerect = Draw a rectangle outline. +graphicstype.poly = Fill a regular polygon. +graphicstype.linepoly = Draw a regular polygon outline. +graphicstype.triangle = Fill a triangle. +graphicstype.image = Draw an image of some content.\nex: [accent]@router[] or [accent]@dagger[]. + +lenum.always = Always true. +lenum.idiv = Integer division. +lenum.div = Division.\nReturns [accent]null[] on divide-by-zero. +lenum.mod = Modulo. +lenum.equal = Equal. Coerces types.\nNon-null objects compared with numbers become 1, otherwise 0. +lenum.notequal = Not equal. Coerces types. +lenum.strictequal = Strict equality. Does not coerce types.\nCan be used to check for [accent]null[]. +lenum.shl = Bit-shift left. +lenum.shr = Bit-shift right. +lenum.or = Bitwise OR. +lenum.land = Logical AND. +lenum.and = Bitwise AND. +lenum.not = Bitwise flip. +lenum.xor = Bitwise XOR. + +lenum.min = Minimum of two numbers. +lenum.max = Maximum of two numbers. +lenum.angle = Angle of vector in degrees. +lenum.len = Length of vector. +lenum.sin = Sine, in degrees. +lenum.cos = Cosine, in degrees. +lenum.tan = Tangent, in degrees. +#not a typo, look up 'range notation' +lenum.rand = Random number in range [0, value). +lenum.log = Natural logarithm (ln). +lenum.log10 = Base 10 logarithm. +lenum.noise = 2D simplex noise. +lenum.abs = Absolute value. +lenum.sqrt = Square root. + +lenum.any = Any unit. +lenum.ally = Ally unit. +lenum.attacker = Unit with a weapon. +lenum.enemy = Enemy unit. +lenum.boss = Guardian unit. +lenum.flying = Flying unit. +lenum.ground = Ground unit. +lenum.player = Unit controlled by a player. + +lenum.ore = Ore deposit. +lenum.damaged = Damaged ally building. +lenum.spawn = Enemy spawn point.\nMay be a core or a position. +lenum.building = Building in a specific group. + +lenum.core = Any core. +lenum.storage = Storage building, e.g. Vault. +lenum.generator = Buildings that generate power. +lenum.factory = Buildings that transform resources. +lenum.repair = Repair points. +lenum.rally = Command center. +lenum.battery = Any battery. +lenum.resupply = Resupply points.\nOnly relevant when [accent]"Unit Ammo"[] is enabled. +lenum.reactor = Impact/Thorium reactor. +lenum.turret = Any turret. + +sensor.in = The building/unit to sense. + +radar.from = Building to sense from.\nSensor range is limited by building range. +radar.target = Filter for units to sense. +radar.and = Additional filters. +radar.order = Sorting order. 0 to reverse. +radar.sort = Metric to sort results by. +radar.output = Variable to write output unit to. + +unitradar.target = Filter for units to sense. +unitradar.and = Additional filters. +unitradar.order = Sorting order. 0 to reverse. +unitradar.sort = Metric to sort results by. +unitradar.output = Variable to write output unit to. + +control.of = Building to control. +control.unit = Unit/building to aim at. +control.shoot = Whether to shoot. + +unitlocate.enemy = Whether to locate enemy buildings. +unitlocate.found = Whether the object was found. +unitlocate.building = Output variable for located building. +unitlocate.outx = Output X coordinate. +unitlocate.outy = Output Y coordinate. +unitlocate.group = Building group to look for. + +lenum.stop = Stop moving/mining/building. +lenum.move = Move to exact position. +lenum.approach = Approach a position with a radius. +lenum.pathfind = Pathfind to the enemy spawn. +lenum.target = Shoot a position. +lenum.targetp = Shoot a target with velocity prediction. +lenum.itemdrop = Drop an item. +lenum.itemtake = Take an item from a building. +lenum.paydrop = Drop current payload. +lenum.paytake = Pick up payload at current location. +lenum.flag = Numeric unit flag. +lenum.mine = Mine at a position. +lenum.build = Build a structure. +lenum.getblock = Fetch a building and type at coordinates.\nUnit must be in range of position.\nSolid non-buildings will have the type [accent]@solid[]. +lenum.within = Check if unit is near a position. +lenum.boost = Start/stop boosting. \ No newline at end of file diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index 58942b40e3c9..f727c74fc601 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -194,6 +194,7 @@ servers.local = Místní servery servers.remote = Vzdálené servery servers.global = Komunitní servery +servers.disclaimer = Komunitní servery [accent]nejsou[] vlastněny ani kontrolovány vývojářem této hry.\n\nServery mohou obsahovat obsah vytvořený uživateli, který může na některé uživatele působit nepatřičně či nevhodně. servers.showhidden = Zobraz skryté servery server.shown = Zobrazené server.hidden = Skryté @@ -1278,6 +1279,10 @@ hint.payloadDrop.mobile = [accent]Ťupni a drž[] na prázdném místě pro polo hint.waveFire = [accent]Naplň[] věže vodou místo munice pro automatické hašení okolních požárů. hint.generator = \uf879 [accent]Spalovací generátory[] pálí uhlí a přenášení energii do sousedících bloků.\n\nPřenos energie na delší vzdálenost se provádí pomocí \uf87f [accent]Energetických uzlů[]. hint.guardian = Jednotky [accent]Strážce[] jsou obrněné. Měkká munice, jako je například [accent]měď[] a [accent]olovo[] je [scarlet]neefektivní[].\n\nPoužij vylepšené věže nebo \uf835 [accent]grafitovou[] munici pro \uf861 Střílnu Duo/\uf859 Salvu, abys Strážce sejmul. +hint.coreUpgrade = Jádro může být vylepšeno [accent]překrytím jádrem vyšší úrovně[].\n\nUmísti jádro typu [accent]Základ[] přes jádro typu [accent]Odštěpek[]. Ujisti se, že v okolí nejsou žádné překážky. +hint.presetLaunch = Na šedé [accent]sektory v přistávací zóně[], jako je například [accent]Zamrzlý les[], se lze vyslat kdykoli. Nevyžadují polapení okolního teritoria.\n\n[accent]Číslované sektory[], jako je tento, jsou [accent]volitelné[]. +hint.coreIncinerate = Poté, co je kapacita jádra určité položky naplněna, jakékoliv další stejné přijaté položky budou [accent]zničeny[]. +hint.coopCampaign = Když hraješ [accent]kooperativní kampaň[], položky, které jsou vyrobeny v této mapě, budou též zaslány [accent]do Tvých místních sektorů[].\n\nJakýkoliv vývoj dosažený hostitelem se též přenáší. item.copper.description = Používá se ve všech typech bloků a munice. item.copper.details = Měď. Nezvykle nadpočetný kov na Serpulu. Konstrukčně slabý, pokud není rafinovaná. @@ -1471,7 +1476,7 @@ unit.zenith.description = Střílí salvy raket na všechny blízké nepřátele unit.antumbra.description = Střílí palbu střel na všechny blízké nepřátele. unit.eclipse.description = Vystřelí dva pronikavé lasery a záplavu protivzdušných střel na všechny blízké nepřátele. unit.mono.description = Samočinně těží měď a olovo a ukládá je do jádra. -unit.poly.description = Samočinně obnovuje poškozené konstrukce a pomáhá ostatním jednotkám při stavbě. +unit.poly.description = Samočinně obnovuje zničené konstrukce a pomáhá ostatním jednotkám při stavbě. unit.mega.description = Samočinně opravuje poškozené konstrukce. Je schopný přenést bloky a malé pozemní jednotky. unit.quad.description = Pouští velké bomby na pozemní cíle, opravuje spojenecké konstrukce a poškozuje nepřátele. Je schopen přenést středně velké pozemní jednotky. unit.oct.description = Chrání blízké spojence pomocí regeneračního štítu. Je schopen přenést většinu pozemních jednotek. diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index 945617b7ba2b..13c4725bee6a 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -41,11 +41,13 @@ be.ignore = Ignorieren be.noupdates = Keine Aktualisierungen gefunden. be.check = Auf Aktualisierungen prüfen -mod.featured.title = Mod Browser mod.featured.dialog.title = Mod Browser mods.browser.selected = Ausgewählter Mod -mods.browser.add = Mod installieren -mods.github.open = Auf GitHub ansehen +mods.browser.add = Installieren +mods.browser.reinstall = Neu Installieren +mods.github.open = Github +mods.browser.sortdate = Nach neusten sortieren +mods.browser.sortstars = Nach Sternen sortieren schematic = Entwurf schematic.add = Entwurf speichern... @@ -69,9 +71,9 @@ schematic.disabled = [scarlet]Entwürfe deaktiviert[]\nAuf dieser [accent]Karte[ stats = Statistiken stat.wave = Wellen besiegt:[accent] {0} stat.enemiesDestroyed = Gegner zerstört:[accent] {0} -stat.built = Gebäude gebaut:[accent] {0} -stat.destroyed = Gebäude zerstört:[accent] {0} -stat.deconstructed = Gebäude abgebaut:[accent] {0} +stat.built = Blöcke gebaut:[accent] {0} +stat.destroyed = Blöcke zerstört:[accent] {0} +stat.deconstructed = Blöcke abgebaut:[accent] {0} stat.delivered = Übertragene Ressourcen: stat.playtime = Spielzeit:[accent] {0} stat.rank = Finaler Rang:[accent] {0} @@ -90,6 +92,7 @@ joingame = Spiel beitreten customgame = Benutzerdefiniertes Spiel newgame = Neues Spiel none = +none.found = [lightgray] minimap = Minimap position = Position close = Schließen @@ -116,8 +119,10 @@ mods.none = [lightgray]Keine Mods gefunden! mods.guide = Modding-Anleitung mods.report = Problem melden mods.openfolder = Mod-Verzeichnis öffnen +mods.viewcontent = Inhalt ansehen mods.reload = Neu laden mods.reloadexit = Das Spiel wird jetzt beendet, um die Mod-Änderungen anzuwenden. +mod.installed = [[Installiert] mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Aktiviert mod.disabled = [scarlet]Deaktiviert @@ -287,6 +292,7 @@ cancel = Abbruch openlink = Link öffnen copylink = Link kopieren back = Zurück +max = Max crash.export = Crash-Logs exportieren crash.none = Keine Crash-Logs gefunden. crash.exported = Crash-Logs wurden erfolgreich exportiert. @@ -306,6 +312,7 @@ cancelbuilding = [accent][[{0}][] um den Plan zu leeren selectschematic = [accent][[{0}][] zum Auswählen+Kopieren pausebuilding = [accent][[{0}][] um das Bauen zu pausieren resumebuilding = [scarlet][[{0}][] um das Bauen fortzusetzen +enablebuilding = [scarlet][[{0}][] um zu bauen showui = Bedienflächen versteckt.\nDrücke [accent][[{0}][], um sie wieder anzuzeigen. wave = [accent]Welle {0} wave.cap = [accent]Welle {0}/{1} @@ -361,7 +368,6 @@ editor.center = Zur Mitte workshop = Workshop waves.title = Wellen waves.remove = Entfernen -waves.never = waves.every = alle waves.waves = Welle(n) waves.perspawn = pro Spawn @@ -390,7 +396,7 @@ editor.removeunit = Bereich entfernen editor.teams = Teams editor.errorload = Fehler beim Laden der Datei:\n[accent]{0} editor.errorsave = Fehler beim Speichern der Datei:\n[accent]{0} -editor.errorimage = Das ist ein Bild, keine Karte. Wechsle nicht den Dateityp und erwarte, dass es funktioniert.\n\nWenn du eine 'v3.5/build 40'-Karte importieren möchtest, benutze den 'Importiere Terrainbild'-Knopf im Editor. +editor.errorimage = Das ist ein Bild, keine Karte. editor.errorlegacy = Diese Karte ist zu alt und benutzt ein veraltetes Kartenformat, das nicht mehr unterstützt wird. editor.errornot = Dies ist keine Kartendatei. editor.errorheader = Diese Karte ist entweder nicht gültig oder beschädigt. @@ -420,7 +426,7 @@ editor.exportimage = Export in Terrainbild-Datei editor.exportimage.description = Exportiere in ein Kartenbild editor.loadimage = Bild\nladen editor.saveimage = Bild\nspeichern -editor.unsaved = [crimson] Einige Änderungen wurden noch nicht gespeichert! [] Möchtest du den Editor wirklich verlassen? +editor.unsaved = Möchtest du den Editor wirklich verlassen? [crimson] Alle ungespeicherten Änderungen werden dann verworfen! editor.resizemap = Größe der Karte ändern editor.mapname = Kartenname editor.overwrite = [accent] Warnung! Dies überschreibt eine vorhandene Karte. @@ -678,6 +684,7 @@ stat.drillspeed = Bohrgeschwindigkeit stat.boosteffect = Verstärkungseffekt stat.maxunits = Max. aktive Einheiten stat.health = Lebenspunkte +stat.armour = Panzer stat.buildtime = Baudauer stat.maxconsecutive = Max. Konsekutive stat.buildcost = Baukosten @@ -693,6 +700,7 @@ stat.lightningchance = Blitzwahr­schein­lich­keit stat.lightningdamage = Blitzschaden stat.flammability = Brennbarkeit stat.radioactivity = Radioaktivität +stat.charge = Ladung stat.heatcapacity = Hitzekapazität stat.viscosity = Viskosität stat.temperature = Temperatur @@ -720,6 +728,7 @@ bar.corereq = Kern-Basis erforderlich bar.drillspeed = Bohrgeschwindigkeit: {0}/s bar.pumpspeed = Pumpengeschwindigkeit: {0}/s bar.efficiency = Effizienz: {0}% +bar.boost = Beschleunigung: {0}% bar.powerbalance = Strom: {0}/s bar.powerstored = Gespeichert: {0}/{1} bar.poweramount = Strom: {0} @@ -787,6 +796,7 @@ setting.shadows.name = Schatten setting.blockreplace.name = Automatische Blockvorschläge setting.linear.name = Lineare Filterung setting.hints.name = Tipps +setting.logichints.name = Logiktipps setting.flow.name = Ressourcen-Fluss anzeigen setting.backgroundpause.name = Im Hintergrund pausieren setting.buildautopause.name = Bauen automatisch pausieren @@ -918,6 +928,7 @@ keybind.toggle_menus.name = Menüs umschalten keybind.chat_history_prev.name = Chat Historie zurück keybind.chat_history_next.name = Chat Historie vor keybind.chat_scroll.name = Chat scrollen +keybind.chat_mode.name = Chatmodus ändern keybind.drop_unit.name = Einheit absetzen keybind.zoom_minimap.name = Minimap-Zoom mode.help.title = Beschreibung der Modi @@ -934,6 +945,7 @@ mode.custom = Angepasste Regeln rules.infiniteresources = Unbegrenzte Ressourcen rules.reactorexplosions = Reaktor-Explosionen +rules.coreincinerates = Kern verbrennt überflüssige Materialien rules.schematic = Entwürfe erlaubt rules.wavetimer = Wellen-Timer rules.waves = Wellen @@ -954,7 +966,7 @@ rules.waitForWaveToEnd = Warten bis Welle endet rules.dropzoneradius = Drop-Zonen-Radius:[lightgray] (Kacheln) rules.unitammo = Einheiten benötigen Munition rules.title.waves = Wellen -rules.title.resourcesbuilding = Ressourcen & Gebäude +rules.title.resourcesbuilding = Ressourcen & Blöcke rules.title.enemy = Gegner rules.title.unit = Einheiten rules.title.experimental = Experimentell @@ -1309,7 +1321,7 @@ item.coal.details = Scheint versteinerte Pflanzenmasse zu sein, die sich schon l item.titanium.description = Wird im Flüssigkeitsbereich, im Bohrerbereich und für Flugzeuge vielfältig eingesetzt. item.thorium.description = Wird als festes Baumaterial oder radioaktiver Kraftstoff verwendet. item.scrap.description = Wird in Pulverisierer und Schmelzer zu anderen Materialien bearbeitet. -item.scrap.details = Übriggebliebene Reste alter Gebäude oder Einheiten. +item.scrap.details = Übriggebliebene Reste alter Blöcke oder Einheiten. item.silicon.description = Wird in Solarzellen, komplizierter Elektronik und als zielsuchende Munition verwendet. item.plastanium.description = Wird für fortgeschrittene Einheiten, Isolation und Munition eingesetzt. item.phase-fabric.description = Kann in Elektronik und selbstreparierende Blöcke verwendet werden. @@ -1380,8 +1392,8 @@ block.inverted-sorter.description = Wie ein normaler Sortierer, aber gibt das au block.router.description = Verteilt Materialien auf bis zu drei Richtungen. block.router.details = Ein nötiges Übel. Es ist nicht empfehlenswert, ihn neben Fabriken zu setzen, da er sich dort verstopfen kann. block.distributor.description = Verteilt Materialien auf bis zu sieben Richtungen. -block.overflow-gate.description = Gibt Materialien nur zu den Seiten heraus, wenn der fordere Ausgang blockiert ist. Kann nicht neben anderen Überlauf- oder Unterlauftoren verwendet werden. -block.underflow-gate.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind. Kann nicht neben anderen Überlauf- oder Unterlauftoren verwendet werden. +block.overflow-gate.description = Gibt Materialien nur zu den Seiten heraus, wenn der fordere Ausgang blockiert ist. +block.underflow-gate.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind. block.mass-driver.description = Ein Transportblock mit sehr hoher Reichweite. Sammelt mehrere Materialien und schießt sie zu einem verbundenen Massenbeschleuniger. block.mechanical-pump.description = Eine Pumpe, die keinen Strom benötigt. block.rotary-pump.description = Eine Pumpe, die Strom verbraucht. @@ -1501,4 +1513,119 @@ unit.sei.description = Schießt ein Sperrfeuer aus Raketen und durchdringende Ge unit.omura.description = Schießt eine Railgun mit hoher Reichweite, um Gegner zu zerstören. Stellt Flare-Einheiten her. unit.alpha.description = Beschützt den Scherbenkern vor Feinden. Baut Blöcke. unit.beta.description = Beschützt den Fundamentkern vor Feinden. Baut Blöcke. -unit.gamma.description = Beschützt den Nukleuskern vor Feinden. Baut Blöcke. \ No newline at end of file +unit.gamma.description = Beschützt den Nukleuskern vor Feinden. Baut Blöcke. + +lst.read = Liest einen Wert aus einer verbundenen Spiecherzelle. +lst.write = Schreibt eine Zahl in einer verbundene Speicherzelle. +lst.print = Fügt Text zum Textspeicher hinzu.\nZeigt nichts an, bis [accent]Print Flush[] verwendet wird. +lst.draw = Fügt eine [accent]Draw[]-Aufgabe zum Bildspeicher hinzu.\nZeigt nichts an, bis [accent]Draw Flush[] verwendet wird. +lst.drawflush = Druckt [accent]Draw[]-Aufgaben aus dem Bildspeicher auf einen Bildschirm. +lst.printflush = Druckt [accent]Print[]-Aufgaben aus dem Textspeicher auf einen Nachrichtenblock. +lst.getlink = Gibt ein verbundenen Block wieder. Fängt bei 0 an. +lst.control = Steuert einen Block. +lst.radar = Findet Einheiten. +lst.sensor = Gibt Daten über einen Block oder eine Einheit wieder. +lst.set = Setzt eine Variable fest. +lst.operation = Verändert eine Variable. +lst.end = Springt wieder nach oben. +lst.jump = Falls die Bedingung erfüllt ist, wird woanders weitergemacht. +lst.unitbind = Speichert eine Einheit einer Sorte als [accent]@unit[]. +lst.unitcontrol = Steuert [accent]@unit[]. +lst.unitradar = Findet Einheiten in der Nähe von [accent]@unit[]. +lst.unitlocate = Findet mit [accent]@unit[] bestimmte Positionen / Blöcke auf der ganzen Karte. + +lenum.type = Englischer Name eines Blocks / einer Einheit. Ein Verteiler gibt [accent]@router[] wieder.\nKein string. +lenum.shoot = Schießt auf eine Position. +lenum.shootp = Schießt auf eine Einheit / einen Block und sagt deren Position voraus. +lenum.configure = Blockkonfiguration, z.B. das ausgewählte Item in einem Sortierer. +lenum.enabled = Ob der Block an oder aus ist. +lenum.color = Illuminiererfarbe. + +lenum.always = Immer. +lenum.idiv = Division mit ganzen Zahlen. +lenum.div = Division.\nGibt bei Teilung durch null [accent]null[] zurück. +lenum.mod = Modulo. +lenum.equal = Prüft Gleichheit.\nNicht-"null" Objekte, die mit Zahlen verglichen werden, werden 1. +lenum.notequal = Prüft Ungleichheit. +lenum.strictequal = Prüft strenge Gleichheit.\nKann verwendet werden, um "null" zu finden. +lenum.shl = Bit-shift nacht links. +lenum.shr = Bit-shift nach rechts. +lenum.or = Bitwise ODER. +lenum.land = Logisches AND. +lenum.and = Bitwise UND. +lenum.not = Bitwise NOT. +lenum.xor = Bitwise XOR. + +lenum.min = Die Größte von zwei Zahlen. +lenum.max = Die Kleinste von zwei Zahlen. +lenum.angle = Angle of vector in degrees. +lenum.len = Length of vector. +lenum.sin = Sinus in Grad. +lenum.cos = Cosinus in Grad. +lenum.tan = Tangens in Grad. +lenum.rand = Zufällige Zahl zwischen [0, ). +lenum.log = Logarithmus (ln). +lenum.log10 = Logarithmus zur Basis 10. +lenum.noise = 2D rauschen. +lenum.abs = Betrag. +lenum.sqrt = Quadratwurzel. + +lenum.any = Irgendeine Einheit. +lenum.ally = Freundliche Einheit. +lenum.attacker = Einheit mit Waffe. +lenum.enemy = Gegnerische Einheit. +lenum.boss = Bosseinheit. +lenum.flying = Lufteinheit. +lenum.ground = Bodeneinheit. +lenum.player = Spielergesteuerte Einheit. + +lenum.ore = Erz. +lenum.damaged = Beschädigter, alliierter Block. +lenum.spawn = Gegnerischer Spawnpunkt.\nKann ein Kern oder eine Position sein. +lenum.building = Ein Block einer bestimmten Sorte. + +lenum.core = Irgendein Kern. +lenum.storage = Speicherblock, z.B. ein Tresor. + +sensor.in = Der Block / die Einheit. + +radar.from = Block zu benutzen. [accent]Sensor[]-Reichweite hängt von der Blockreichweite ab. +radar.target = Einheitenfilter. +radar.and = Weitere Filter. +radar.order = Sortierreihenfolge der Ergebnisse. 0 bedeutet rückwärts. +radar.sort = Sortiermethode der Ergebnisse. +radar.output = Variable für das Ergebnis. + +unitradar.target = Einheitenfilter. +unitradar.and = Weitere Filter. +unitradar.order = Sortierreihenfolge der Ergebnisse. 0 bedeutet rückwärts. +unitradar.sort = Sortiermethode der Ergebnisse. +unitradar.output = Variable für das Ergebnis. + +control.of = Block, der gesteuert werden soll. +control.unit = Zieleinheit / Zielblock. +control.shoot = Ob geschossen werden soll. + +unitlocate.enemy = Ob gegnerische Blöcke gesucht werden sollen. +unitlocate.found = Ob der Block gefunden wurde. +unitlocate.building = Variable für das Ergebnis. +unitlocate.outx = Variable für die X-Koordinate. +unitlocate.outy = Variable für die Y-Koordinate. +unitlocate.group = Gesuchter Blocktyp. + +lenum.stop = Bewegung / Abbau / Bau abbrechen. +lenum.move = Geht zu diese Position. +lenum.approach = Geht auf einen Punkt mit einem bestimmten Radius zu. +lenum.pathfind = Geht zum gegnerischen Spawnpunkt. +lenum.target = Schießt auf eine Position. +lenum.targetp = Schießt auf eine Einheit und sagt deren Position voraus. +lenum.itemdrop = Items abwerfen. +lenum.itemtake = Items aus einem Block nehmen. +lenum.paydrop = Lässt einen Block / eine Einheit wieder fallen. +lenum.paytake = Hebt einen Block / eine kleine Einheit auf. +lenum.flag = Zahl, mit der eine Einheit identifiziert werden kann. +lenum.mine = Erz von einer Position abbauen. +lenum.build = Einen Block bauen. +lenum.getblock = Gibt den Blocktyp an den Koordinaten zurück.\nEinheiten müssen nah genug dran sein.\nFeste nicht-Blöcke sind [accent]@solid[]. +lenum.within = Prüft, ob eine Einheit in einem Radius um einen Punkt ist. +lenum.boost = Aktiviert / deaktiviert den Boost. \ No newline at end of file diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 63fd6d805538..6f62033ba27f 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -24,7 +24,7 @@ gameover.waiting = [accent]Esperando el próximo mapa... highscore = [accent]¡Nuevo récord de puntuación! copied = Copiado indev.notready = Esta parte del juego no esta lista aún. -indev.campaign = [accent]Has llegado al final de la campaña![]\n\nEsto es todo lo lejos que puedes llegar por ahora.\nLos viajes interplanetarios se añadirán en futuras actualizaciones. +indev.campaign = [accent]Has llegado al final de la campaña![]\n\nEsto es lo más lejos que puedes llegar por ahora.\nLos viajes interplanetarios se añadirán en futuras actualizaciones. load.sound = Sonidos load.map = Mapas @@ -570,7 +570,7 @@ threat.low = Baja threat.medium = Media threat.high = Alta threat.extreme = Extrema -threat.eradication = Exterminio +threat.eradication = Erradicación planets = Planetas @@ -585,7 +585,7 @@ sector.ruinousShores.name = Costas Ruinosas sector.stainedMountains.name = Montañas manchadas sector.desolateRift.name = Grieta desolada sector.nuclearComplex.name = Complejo de producción nuclear -sector.overgrowth.name = Crecimiento excesivo +sector.overgrowth.name = Sobrecrecimiento sector.tarFields.name = Campos de alquitrán sector.saltFlats.name = Llanuras de sal sector.fungalPass.name = Paso de hongos @@ -594,13 +594,13 @@ sector.windsweptIslands.name = Islas Windswept sector.extractionOutpost.name = Puesto de avanzada de Extracción sector.planetaryTerminal.name = Terminal de Lanzamiento Interplanetario -sector.groundZero.description = La ubicación adecuada para empezar una vez más. Baja amenaza enemiga. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible y sigue adelante. +sector.groundZero.description = La ubicación adecuada para empezar una vez más. Amenaza enemiga baja. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible y sigue adelante. sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no las contendrán para siempre.\n\nAprende a usar la energía. Construye generadores de combustión. Aprende a usar reparadores. sector.saltFlats.description = En las afueras del desierto se encuentran las Salinas. No hay muchos recursos en esta ubicación.\n\nEl enemigo ha creado un complejo de almacenamiento de recursos aquí. Erradica su núcleo. No dejes nada en pie. sector.craters.description = El agua se ha acumulado en este cráter, reliquia de las viejas guerras. Recupera la zona. Recoge arena. Funde Metacristal. Bombea agua para enfriar torretas y taladros. sector.ruinousShores.description = Más allá de los páramos, se encuentra la costa. Una vez, esta ubicación albergó una serie de defensa costera. No queda mucho. Solo las estructuras de defensa más básicas han quedado ilesas, todo lo demás está reducido a chatarra.\nContinúa la expansión. Redescubre la tecnología. sector.stainedMountains.description = Más adentro se encuentran las montañas, aún intactas por las esporas.\nExtrae el abundante titanio de esta zona. Aprende a usarlo.\n\nLa presencia enemiga es mayor aquí. No les des tiempo para enviar sus unidades más fuertes. -sector.overgrowth.description = El área está cubierta de maleza, más cerca de la fuente de las esporas.\nEl enemigo ha establecido un puesto de avanzada aquí. Construye unidades Titán. Destruyelo. Recupera lo que se perdió. +sector.overgrowth.description = El área está cubierta de maleza, más cerca de la fuente de las esporas.\nEl enemigo ha establecido un puesto de avanzada aquí. Construye unidades Mace. Destruyelo. Recupera lo que se perdió. sector.tarFields.description = Las afueras de una zona de producción de petróleo, entre la montaña y el desierto. Una de las pocas áreas con reservas de alquitrán utilizables.\nAunque está abandonada, esta zona tiene algunas fuerzas enemigas peligrosas cerca. No los subestimes.\n\n[lightgray]Investiga la tecnología de procesamiento de petróleo si es posible. sector.desolateRift.description = Una zona extremadamente peligrosa. Recursos abundantes, pero poco espacio. Alto riesgo de destrucción. Abandona el lugar lo antes posible. No te dejes engañar por el intervalo entre los ataques enemigos. sector.nuclearComplex.description = Antigua instalación de producción y procesamiento de torio, reducida a ruinas.\n[lightgray] Investiga el torio y sus múltiples usos.\n\nEl enemigo está presente aquí,superando en número a sus atacantes. @@ -706,11 +706,11 @@ stat.abilities = Habilidades stat.canboost = Tiene Propulsores stat.flying = Aéreo -ability.forcefield = Zona de Escudo -ability.repairfield = Zona de Reparación -ability.statusfield = Zona de Estado +ability.forcefield = Campo de Fuerza +ability.repairfield = Campo de Reparación +ability.statusfield = Campo de Estado ability.unitspawn = {0} Fábrica de Drones -ability.shieldregenfield = Regeneración de Escudos +ability.shieldregenfield = Campo de Regeneración de Escudos ability.movelightning = Movimiento Relámpago bar.drilltierreq = Requiere un taladro mejor @@ -735,7 +735,7 @@ bar.progress = Progreso de construcción bar.input = Entrada bar.output = Salida -units.processorcontrol = [lightgray]Procesador Controlado +units.processorcontrol = [lightgray]Controlado por Procesador bullet.damage = [stat]{0}[lightgray] Daño bullet.splashdamage = [stat]{0}[lightgray] daño de área ~[stat] {1}[lightgray] casillas @@ -796,7 +796,7 @@ setting.indicators.name = Indicadores de Enemigos setting.autotarget.name = Auto-Apuntado setting.keyboard.name = Controles de Ratón+Teclado setting.touchscreen.name = Controles Táctiles -setting.fpscap.name = Máximos FPS +setting.fpscap.name = FPS Maxímos setting.fpscap.none = Nada setting.fpscap.text = {0} FPS setting.uiscale.name = Escala de Interfaz[lightgray] (necesita reiniciar)[] @@ -823,7 +823,7 @@ setting.smoothcamera.name = Movimiento de cámara suave setting.vsync.name = VSync (Limita los fps a los Hz de tu pantalla) setting.pixelate.name = Pixelar setting.minimap.name = Mostrar Minimapa -setting.coreitems.name = Mostrar elementos en el nucleo (WIP) +setting.coreitems.name = Mostrar Objetos en el nucleo (WIP) setting.position.name = Mostrar indicadores de posición de jugadores. setting.musicvol.name = Volumen de la Música setting.atmosphere.name = Mostrar Atmósfera del planeta @@ -852,7 +852,7 @@ category.view.name = Visión category.multiplayer.name = Multijugador category.blocks.name = Seleccionar bloques command.attack = Atacar -command.rally = Patrullar +command.rally = Reunirse command.retreat = Retirarse command.idle = Esperar placement.blockselectkeys = \n[lightgray]Códigos: [{0}, @@ -915,6 +915,7 @@ keybind.toggle_menus.name = Ocultar menús keybind.chat_history_prev.name = Historial de chat - Anterior keybind.chat_history_next.name = Historial de chat - Siguiente keybind.chat_scroll.name = Desplazar el chat +keybind.chat_mode.name = Cambiar modo de chat keybind.drop_unit.name = Soltar unidad keybind.zoom_minimap.name = Zoom del minimapa mode.help.title = Descripción de modos @@ -1231,7 +1232,7 @@ block.disassembler.name = Desensamblador block.silicon-crucible.name = Crisol de silicio block.overdrive-dome.name = Campo de Aceleración #experimental, puede ser eliminado -block.block-forge.name = Fundidor de Bloques +block.block-forge.name = Forja de Bloques block.block-loader.name = Cargador de Bloques block.block-unloader.name = Descargador de Bloques block.interplanetary-accelerator.name = Acelerador Interplanetario @@ -1246,10 +1247,10 @@ block.memory-cell.name = Unidad de memoria block.memory-bank.name = Servidor de memoria team.blue.name = azul -team.crux.name = rojo -team.sharded.name = naranja +team.crux.name = crux +team.sharded.name = sharded team.orange.name = naranja -team.derelict.name = abandonado +team.derelict.name = delerict team.green.name = verde team.purple.name = morado @@ -1268,7 +1269,7 @@ hint.placeConveyor = Las cintas transportadoras pueden sacar objetos de los tala hint.placeConveyor.mobile = Las cintas transportadoras pueden mover objetos de los taladros hasta otros bloques. Selecciona un \uf896 [accent]Transportador[] de la pestaña \ue814 [accent]Distribución[].\n\nMantén el dedo un segundo y arrastra para crear múltiples cintas transportadoras. hint.placeTurret = Construye \uf861 [accent]Torretas[] para defender tu base de los enemigos.\n\nLas torretas necesitan munición - en este caso, \uf838cobre.\nUsa cintas transportadoras y taladros para abastecerlas con cobre. hint.breaking = Pulsa [accent]Clic-derecho[] y arrastra para destruir bloques. -hint.breaking.mobile = Activa el botón con el \ue817 [accent]martillo[] situado abajo a la derecha y selecciona bloque para eliminarlos.\n\nMantén el dedo un segundo y arrastra para eliminar bloques directamente en esa selección. +hint.breaking.mobile = Activa el botón con el \ue817 [accent]martillo[] situado abajo a la derecha y selecciona bloques para eliminarlos.\n\nMantén el dedo un segundo y arrastra para eliminar bloques directamente en esa selección. hint.research = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos. hint.research.mobile = Usa el botón \ue875 [accent]Investigación[] para acceder al menú de descubrimientos tecnológicos. hint.unitControl = Mantén [accent][[L-ctrl][] y [accent]haz clic[] sobre unidades o torretas aliadas para controlarlas manualmente. @@ -1285,7 +1286,7 @@ hint.payloadPickup = Pulsa [accent][[[] para recoger bloques pequeños o unidade hint.payloadPickup.mobile = [accent]Mantén[] sobre un bloque pequeño o unidad para recogerlo. hint.payloadDrop = Pulsa [accent]][] para soltar la carga. hint.payloadDrop.mobile = [accent]Mantén[] sobre un lugar vacío para soltar la carga. -hint.waveFire = Cuando las torretas [accent]Wave[] usan agua como munición, apagarán fuego e incendios cercanos automáticamente. +hint.waveFire = Cuando las torretas [accent]Wave[] usen agua como munición, apagarán fuego e incendios cercanos automáticamente. hint.generator = Los \uf879[accent]Generadores de combustión[] querman carbón para transmitir energía a bloques adyacentes.\n\nEl alcance de transmisión de energía se puede extender usando \uf87f[accent]Nodos de energía[]. hint.guardian = Los [accent]Guardianes[] poseen una robusta armadura. Municiones débiles como el [accent]Cobre[] o el [accent]Plomo[] no son [scarlet]effectivas[] contra él.\n\nUsa torretas de mayor categoría o por ejemplo, munición de \uf835[accent]Grafito[] \uf861Duo/\uf859 en torretas Salvo para derribar a los Guardianes. hint.coreUpgrade = Los núcleos se pueden mejorar [accent]construyendo núcleos de mayor calidad encima[].\n\nColoca un  núcleo [accent]Foundation[] sobre el  núcleo [accent]Shard[]. Asegúrate de que no hay obstáculos cerca. @@ -1293,7 +1294,7 @@ hint.presetLaunch = Las zonas de aterrizaje de los [accent]sectores grises[], co hint.coreIncinerate = Tras completar la capacidad máxima de almacenamiento en el núcleo para un tipo de objeto, cualquier recurso adicional de ese tipo que reciba el núcleo será [accent]incinerado[]. hint.coopCampaign = Sí estás jugando el modo [accent]campaña en multijugador[], los objetos producidos en el mapa actual también se enviarán [accent]a los sectores locales de cada jugador[].\n\nCualquier nueva investigación tecnológica realizada por el anfitrión también se desbloqueará para los demás jugadores. -item.copper.description = Un práctico material de estructura. Usado en todo tipo de bloques. +item.copper.description = Un práctico material para construcción. Usado en todo tipo de bloques y munición. item.copper.details = Cobre. Metal anormalmente abundante en Serpulo. Estructuralmente débil a menos que sea reforzado. item.lead.description = Un material básico. Usado en electrónicos y transferencia de líquidos. item.lead.details = Denso. Inerte. Extensamente usado en baterías.\nNota: Suele ser tóxico para la mayoría de formas de vida biológicas. Aunque ya no quedan muchas de esas por aquí. @@ -1444,7 +1445,7 @@ block.parallax.description = Dispara un rayo tractor que atrae enemigos aéreos, block.tsunami.description = Dispara poderosos torrentes de líquido a los enemigos. También apaga fuegos automáticamente si se lo abastece con agua. block.silicon-crucible.description = Refina silicio a partir de arena y carbón, usando pirotita como una fuente de calor adicional. Es más eficiente en lugares cálidos. block.disassembler.description = Separa magma cantidades moderadas de componentes minerales exóticos con baja eficiencia. Puede producir Torio. -block.overdrive-dome.description = Incrementa la velocidad de estructuras cercanas. Requiere Tejido de Fase, y Silicio para operar. +block.overdrive-dome.description = Incrementa la velocidad de estructuras cercanas. Requiere Tejido de Fase y Silicio para operar. block.payload-conveyor.description = Mueve tanto grandes cargas, como unidades recién ensambladas de sus fábricas. block.payload-router.description = Divide las cargas entrantes en 3 direcciones de salida. block.command-center.description = Controla el comportamiento de las unidades con diferentes órdenes. @@ -1478,7 +1479,7 @@ unit.corvus.description = Dispara poderosos láseres que dañan enemigos, y repa unit.crawler.description = Corre hacia enemigos y se autodestruye, provocando una gran explosión. unit.atrax.description = Dispara orbes de magma debilitantes a enemigos terrestres. Puede pisar sobre la mayoría de terreno. unit.spiroct.description = Dispara láseres que debilitan al enemigo, reparándose en el proceso. Puede pisar sobre la mayoría de terreno. -unit.arkyid.description = Dispara grandes rayos láser que debilitan al enemigo, repairing itself in the process. Puede pisar sobre la mayoría de terreno. +unit.arkyid.description = Dispara grandes rayos láser que debilitan al enemigo, reparándose en el proceso. Puede pisar sobre la mayoría de terreno. unit.toxopid.description = Dispara grandes fragmentos electrizados y láseres perforantes. Puede pisar sobre la mayoría de terreno. unit.flare.description = Dispara proyectiles básicos a enemigos cercanos. unit.horizon.description = Suelta fragmentos explosivos sobre objetivos terrestres. diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index 9e516c89c963..d2a998db7784 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -1,9 +1,9 @@ -credits.text = Pelin tehnyt [royal]Anuken[] - [sky]anukendev@gmail.com[] +credits.text = Pelin on luonut [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = Tekijät contributors = Kääntäjät ja avustajat discord = Liity Mindustryn Discordiin! link.discord.description = Mindustryn virallinen Discord-keskusteluhuone -link.reddit.description = Mindustryn alireddit +link.reddit.description = Mindustryn reddit sivu link.github.description = Pelin lähdekoodi link.changelog.description = Lista päivityksien muutoksista link.dev-builds.description = Epävakaat kehitysversiot @@ -15,7 +15,7 @@ link.wiki.description = Virallinen Mindustry wiki link.suggestions.description = Ehdota uusia ominaisuuksia linkfail = Linkin avaaminen epäonnistui!\nOsoite on kopioitu leikepöydällesi. screenshot = Kuvankaappaus tallennettu sijaintiin {0} -screenshot.invalid = Kartta liian laaja, kuvankaappaukselle ei mahdollisesti ole tarpeeksi tilaa. +screenshot.invalid = Kartta liian laaja, levytila voi olla liian vähissä kuvankaappausta varten. gameover = Peli ohi gameover.pvp = [accent] {0}[] joukkue voittaa! highscore = [accent]Uusi ennätys! @@ -46,7 +46,7 @@ schematic.exists = Kaavio tällä nimellä on jo olemassa. schematic.import = Tuo kaavio... schematic.exportfile = Vie tiedosto schematic.importfile = Tuo tiedosto -schematic.browseworkshop = Selaa Workshoppia +schematic.browseworkshop = Selaa Steam Workshoppia schematic.copy = Kopioi leikepöydälle schematic.copy.import = Tuo leikepöydältä schematic.shareworkshop = Jaa Workshoppiin @@ -64,15 +64,15 @@ stat.destroyed = Rakennuksia tuhottu:[accent] {0} stat.deconstructed = Rakennuksia purettu:[accent] {0} stat.delivered = Resursseja laukaistu: stat.playtime = Pelattu aika:[accent] {0} -stat.rank = Lopullinen arvosana: [accent]{0} +stat.rank = Arvosana: [accent]{0} -globalitems = [accent]Global Items -map.delete = Oletko varma että haluat poistaa kartan "[accent]{0}[]"? +globalitems = [accent]Yhteiset tavarat +map.delete = Oletko varma että haluat poistaa kartan: "[accent]{0}[]"? level.highscore = Ennätys: [accent]{0} level.select = Tason valinta level.mode = Pelimuoto: coreattack = < Ytimeen hyökätään! > -nearpoint = [[ [scarlet]POISTU PUDOTUSPISTEELTÄ VÄLITTÖMÄSTI[]\nvälitön tuhoutuminen +nearpoint = [[ [scarlet]POISTU VIHOLLISEN PUDOTUSPISTEELTÄ VÄLITTÖMÄSTI[]\nvälitön tuhoutuminen database = Ytimen tietokanta savegame = Tallenna peli loadgame = Lataa peli @@ -92,11 +92,11 @@ continue = Jatka maps.none = [lightgray]Karttoja ei löytynyt! invalid = Virheellinen pickcolor = Valitse väri -preparingconfig = Preparing Config -preparingcontent = Preparing Content -uploadingcontent = Uploading Content -uploadingpreviewfile = Uploading Preview File -committingchanges = Comitting Changes +preparingconfig = Valmistellaan asetuksia +preparingcontent = Valmistellaan sisältöä +uploadingcontent = Julkaistaan sisältöä +uploadingpreviewfile = Julkaistaan esikatseltavaa tiedostoa +committingchanges = Varmistetaan muutokset done = Valmis feature.unsupported = Laitteesi ei tue tätä toimintoa. @@ -139,16 +139,16 @@ mod.scripts.disable = Laitteesi ei tue modeja skripteillä. Sinun on sammutettav about.button = Tietoa name = Nimi: noname = Valitse ensin[accent] pelaajanimi[]. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Avaruuskartta +launchcore = Laukaise tukikohta filename = Tiedostonimi: unlocked = Uutta sisältöä avattu! completed = [accent]Suoritettu -techtree = Tekniikkapuu +techtree = Edistyspuu research.list = [lightgray]Tutki: research = Tutki researched = [lightgray]{0} tutkittu. -research.progress = {0}% complete +research.progress = {0}% valmis players = {0} pelaajaa paikalla players.single = {0} pelaaja paikalla players.search = etsiä @@ -180,7 +180,7 @@ host = Isäntä hosting = [accent]Avataan palvelinta... hosts.refresh = Päivitä hosts.discovering = Etsitään LAN pelejä -hosts.discovering.any = Etsitään Pelejä +hosts.discovering.any = Etsitään pelejä server.refreshing = Päivitetään palvelimen tietoja hosts.none = [lightgray]Paikallisia pelejä ei löytynyt! host.invalid = [scarlet]Isäntään ei voitu yhdistää. @@ -192,8 +192,8 @@ servers.global = Yhteisön palvelimet trace = Seuraa pelaajaa trace.playername = Pelaajanimi: [accent]{0} trace.ip = IP-osoite: [accent]{0} -trace.id = Uniikki tunniste: [accent]{0} -trace.mobile = Mobile Client: [accent]{0} +trace.id = Pelaajakohtainen tunniste: [accent]{0} +trace.mobile = Mobiililaite: [accent]{0} trace.modclient = Custom Client: [accent]{0} invalidid = Invalid client ID! Submit a bug report. server.bans = Porttikiellot @@ -225,7 +225,7 @@ connecting = [accent]Yhdistetään... connecting.data = [accent]Ladataan maailman tietoja... server.port = Portti: server.addressinuse = Osoite on jo käytössä! -server.invalidport = Invalid port number! +server.invalidport = Tällä portilla ei löytynyt peliä! server.error = [crimson]Error hosting server: [accent]{0} save.new = Uusi tallennus save.overwrite = Haluatko varmasti korvata \ntämän tallennuspaikan?? @@ -260,39 +260,39 @@ confirm = Vahvista delete = Poista view.workshop = View In Workshop workshop.listing = Edit Workshop Listing -ok = OK +ok = Juu open = Avaa customize = Muokkaa sääntöjä cancel = Peruuta openlink = Avaa linkki copylink = Kopioi linkki back = Takaisin -data.export = Vie data -data.import = Tuo data +data.export = Vie dataa +data.import = Tuo dataa data.openfolder = Avaa datakansio -data.exported = Data viety. +data.exported = Dataa on viety. data.invalid = This isn't valid game data. data.import.confirm = Importing external data will overwrite[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. quit.confirm = Oletko varma että haluat poistua? -quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] +quit.confirm.tutorial = Oletko varma että tiedät mitä teet?\nVoit tehdä tutoriaalin milloin vain[accent] Asetukset->Peli->Tee Tutoriaali Uudelleen[] loading = [accent]Ladataan... reloading = [accent]Ladataan Modeja... saving = [accent]Tallennetaan... -respawn = [accent][[{0}][] to respawn in core -cancelbuilding = [accent][[{0}][] to clear plan -selectschematic = [accent][[{0}][] to select+copy -pausebuilding = [accent][[{0}][] to pause building -resumebuilding = [scarlet][[{0}][] to resume building +respawn = [accent][[{0}][] uudelleensyntymiseen ytimessä +cancelbuilding = [accent][[{0}][] tyhjentääksesi suunnitelman +selectschematic = [accent][[{0}][] jotta voisit kopioida ja liittää +pausebuilding = [accent][[{0}][] pysäyttääksesi rakentamisen +resumebuilding = [scarlet][[{0}][] jatkaaksesi rakentamista wave = [accent]Taso {0} wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]Seuraava taso {0} -wave.waveInProgress = [lightgray]Wave in progress +wave.waveInProgress = [lightgray]Taso käynnissä waiting = [lightgray]Odotetaan... waiting.players = Odotetaan pelaajia... wave.enemies = [lightgray]{0} vihollista jäljellä wave.enemy = [lightgray]{0} vihollinen jäljellä -wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. -wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. +wave.guardianwarn = Suojelija tulossa [accent]{0}[] tason päästä. +wave.guardianwarn.one = Suojelija tulee rökittämään sinut [accent]{0}[] tasolla. loadimage = Lataa kuva saveimage = Tallenna kuva unknown = Tuntematon @@ -306,10 +306,10 @@ map.nospawn.attack = This map does not have any enemy cores for player to attack map.invalid = Virhe ladatessa karttaa: korruptoitunut tai väärä karttatiedosto. workshop.update = Update Item workshop.error = Error fetching workshop details: {0} -map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up! -workshop.menu = Select what you would like to do with this item. +map.publish.confirm = Oletko varma että haluat julkaista tämän kartan?\n\n[lightgray]Hyväksy Workshopin EULA ehdot, muuten karttasi ei tule näkyviin! +workshop.menu = Mitä haluat tehdä tälle asialle? workshop.info = Kohteen Tiedot -changelog = Muutosloki (valinnainen): +changelog = Loki (valinnainen): eula = Steam EULA missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. publishing = [accent]Publishing... @@ -402,9 +402,9 @@ editor.exists = Kartta tällä nimellä on jo olemassa. editor.selectmap = Valitse kartta ladattavaksi: toolmode.replace = Korvaa -toolmode.replace.description = Draws only on solid blocks. +toolmode.replace.description = Piirtää vain kiinteille objekteille. toolmode.replaceall = Korvaa kaikki -toolmode.replaceall.description = Replace all blocks in map. +toolmode.replaceall.description = Korvaa kaikki palikat kartassa. toolmode.orthogonal = Orthogonal toolmode.orthogonal.description = Draws only orthogonal lines. toolmode.square = Square @@ -423,15 +423,15 @@ filter.enemyspawn = Enemy Spawn Select filter.spawnpath = Path To Spawn filter.corespawn = Valitse Ydin filter.median = Mediaani -filter.oremedian = Malmin mediaani +filter.oremedian = Malmin keskiarvo filter.blend = Sekoitus -filter.defaultores = Oletuksena malmit +filter.defaultores = Oletus malmit filter.ore = Malmi filter.rivernoise = Jokien melu filter.mirror = Peili filter.clear = Selkeä -filter.option.ignore = Ohittaa -filter.scatter = Scatter +filter.option.ignore = Ohitta +filter.scatter = Hajauta filter.terrain = Maasto filter.option.scale = Mittakaava filter.option.chance = Mahdollisuus @@ -448,10 +448,10 @@ filter.option.flooronto = Target Floor filter.option.target = Target filter.option.wall = Seinä filter.option.ore = Malmi -filter.option.floor2 = Secondary Floor +filter.option.floor2 = Toinen lattia filter.option.threshold2 = Secondary Threshold -filter.option.radius = Radius -filter.option.percentile = Percentile +filter.option.radius = Säde +filter.option.percentile = Prosentti width = Leveys: height = Korkeus: @@ -483,7 +483,7 @@ research.multiplayer = Only the host can research items. uncover = Paljasta configure = Configure Loadout loadout = Loadout -resources = Resources +resources = Resurssit bannedblocks = Kielletyt Palikat addall = Lisää kaikki launch.destination = Destination: {0} @@ -508,37 +508,37 @@ error.io = Network I/O error. error.any = Unknown network error. error.bloom = Failed to initialize bloom.\nYour device may not support it. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm -weather.fog.name = Fog +weather.rain.name = Sade +weather.snow.name = Lumi +weather.sandstorm.name = Hiekkamyrsky +weather.sporestorm.name = Sienimyräkkä +weather.fog.name = Sumu sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) -sectors.rename = Rename Sector -sector.missingresources = [scarlet]Insufficient Core Resources +sectors.resources = Resurssit: +sectors.production = Produktio: +sectors.stored = Säilötty: +sectors.resume = Jatka +sectors.launch = Laukaise +sectors.select = Valitse +sectors.nonelaunch = [lightgray]ei mitään (sun) +sectors.rename = Nimeä sektori +sector.missingresources = [scarlet]Sinulla ei ole tarpeeksi resursseja. planet.serpulo.name = Serpulo -planet.sun.name = Sun +planet.sun.name = Aurinko -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +sector.groundZero.name = Tapahtumahorisontti +sector.craters.name = Kraatterit +sector.frozenForest.name = Jäätyneet Metsät +sector.ruinousShores.name = Taistelujen Ranta +sector.stainedMountains.name = Kalliovuoret +sector.desolateRift.name = Musta Kanjoni +sector.nuclearComplex.name = Hylätty Ydinvoimalaitos +sector.overgrowth.name = Jätti Viidakko +sector.tarFields.name = Tervakentät +sector.saltFlats.name = Suola Autio +sector.fungalPass.name = Sienirihmasto sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. @@ -633,15 +633,15 @@ stat.lightningdamage = Lightning Damage stat.flammability = Flammability stat.radioactivity = Radioactivity stat.heatcapacity = HeatCapacity -stat.viscosity = Viscosity -stat.temperature = Temperature -stat.speed = Speed +stat.viscosity = Tahmeus +stat.temperature = Lämpötila +stat.speed = Nopeus stat.buildspeed = Build Speed stat.minespeed = Mine Speed stat.minetier = Mine Tier stat.payloadcapacity = Payload Capacity stat.commandlimit = Command Limit -stat.abilities = Abilities +stat.abilities = Erikoisvoimat ability.forcefield = Force Field ability.repairfield = Repair Field @@ -684,11 +684,11 @@ bullet.pierce = [stat]{0}[lightgray]x pierce bullet.infinitepierce = [stat]pierce bullet.freezing = [stat]jäädyttävä bullet.tarred = [stat]tervattu -bullet.multiplier = [stat]{0}[lightgray]x ammusten kerroin +bullet.multiplier = [stat]{0}[lightgray]x ammusmäärän kerroin bullet.reload = [stat]{0}[lightgray]x ampumisnopeus unit.blocks = palikat -unit.blockssquared = blocks² +unit.blockssquared = palikat² unit.powersecond = energiayksikköä/sekunti unit.liquidsecond = nesteyksikköä/sekunti unit.itemssecond = esinettä/sekunti @@ -696,12 +696,12 @@ unit.liquidunits = nesteyksikköä unit.powerunits = energiayksikköä unit.degrees = astetta unit.seconds = sekunttia -unit.minutes = mins +unit.minutes = minuuttia unit.persecond = /s unit.perminute = /min unit.timesspeed = x nopeus unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = suojan elinpisteet unit.items = esinettä unit.thousands = t unit.millions = mil @@ -733,24 +733,24 @@ setting.fpscap.none = Ei Mitään setting.fpscap.text = {0} FPS setting.uiscale.name = UI Koko[lightgray] (vaatii uudelleenkäynnistyksen)[] setting.swapdiagonal.name = Aina vino korvaus -setting.difficulty.training = Treeni -setting.difficulty.easy = Helppo -setting.difficulty.normal = Keskivaikea -setting.difficulty.hard = Haastava -setting.difficulty.insane = Järjetön +setting.difficulty.training = Treenaus +setting.difficulty.easy = Huoleton +setting.difficulty.normal = Haasteeton +setting.difficulty.hard = Taidonnäyte +setting.difficulty.insane = Hullun Vaikea setting.difficulty.name = Vaikeustaso: setting.screenshake.name = Näytön keikkuminen setting.effects.name = Naytön Efektit setting.destroyedblocks.name = Näytä tuhoutuneet palikat -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Näytä Palikan Toimintakunto setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.sensitivity.name = Ohjauksen herkkyys setting.saveinterval.name = Tallennuksen Aikaväli -setting.seconds = {0} Sekunttia +setting.seconds = {0} Sekuntia setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} millisekunttia -setting.fullscreen.name = Fullscreen -setting.borderlesswindow.name = Borderless Window[lightgray] (vaatii uudelleenkäynnistyksen) +setting.milliseconds = {0} millisekuntia +setting.fullscreen.name = Täysnäyttö +setting.borderlesswindow.name = Reunaton Ikkuna[lightgray] (vaatii uudelleenkäynnistyksen) setting.fps.name = Näytä FPS setting.smoothcamera.name = Smooth Camera setting.vsync.name = VSync @@ -776,8 +776,8 @@ public.confirm = Do you want to make your game public?\n[accent]Anyone will be a public.beta = Note that beta versions of the game cannot make public lobbies. uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... uiscale.cancel = Peruuta ja poistu -setting.bloom.name = Bloom -keybind.title = Rebind Keys +setting.bloom.name = Hehkeys +keybind.title = Kontrollit keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = View @@ -786,10 +786,10 @@ category.blocks.name = Block Select command.attack = Hyökkäys command.rally = Kokoontuminen command.retreat = Perääntyminen -command.idle = Idle +command.idle = AFK placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit +keybind.respawn.name = Synny Uudelleen +keybind.control.name = Käytä Yksikköä keybind.clear_building.name = Clear Building keybind.press = Press a key... keybind.press.axis = Press an axis or key... @@ -907,19 +907,19 @@ item.graphite.name = Grafiitti item.titanium.name = Titaani item.thorium.name = Torium item.silicon.name = Pii -item.plastanium.name = Plastaniumi -item.phase-fabric.name = Kiihdekuitu -item.surge-alloy.name = Taiteseos +item.plastanium.name = Plastiikkaseos +item.phase-fabric.name = Kiihtokuitu +item.surge-alloy.name = Venttikovete item.spore-pod.name = Itiöpalko item.sand.name = Hiekka -item.blast-compound.name = Räjähdeyhdiste -item.pyratite.name = Pyratiitti -item.metaglass.name = Metallilasi +item.blast-compound.name = Erikoisruuti +item.pyratite.name = Rikkikiisu +item.metaglass.name = Teräslasi item.scrap.name = Romu liquid.water.name = Vesi liquid.slag.name = Kuona liquid.oil.name = Öljy -liquid.cryofluid.name = Kryoneste +liquid.cryofluid.name = Kryölitku unit.dagger.name = Tikari unit.mace.name = Mace @@ -991,9 +991,9 @@ block.spawn.name = Vihollisten syntymispiste block.core-shard.name = Ydin: Siru block.core-foundation.name = Ydin: Pohjaus block.core-nucleus.name = Ydin: Tuma -block.deepwater.name = Syvä vesi -block.water.name = Vesi -block.tainted-water.name = Pilaantunut vesi +block.deepwater.name = Syvää vettä +block.water.name = Vettä +block.tainted-water.name = Saastevettä block.darksand-tainted-water.name = Dark Sand Tainted Water block.tar.name = Terva block.stone.name = Kivi @@ -1057,7 +1057,7 @@ block.titanium-conveyor.name = Titanium Conveyor block.plastanium-conveyor.name = Plastanium Conveyor block.armored-conveyor.name = Armored Conveyor block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyor belts. -block.junction.name = Junction +block.junction.name = Junktio block.router.name = Reititin block.distributor.name = Distributor block.sorter.name = Lajittelija diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 79de4a48653d..ab44ee3d80b8 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -1,29 +1,32 @@ -credits.text = Créé par [royal]Anuken[] - [sky]anukendev@gmail.com[]\n\n[gray] +credits.text = Créé par [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = Crédits contributors = Traducteurs et contributeurs -discord = Rejoignez le Discord de Mindustry -link.discord.description = Le discord officiel de Mindustry! -link.reddit.description = Le subreddit de Mindustry +discord = Rejoignez le Discord de Mindustry ! +link.discord.description = Discord officiel de Mindustry +link.reddit.description = Subreddit de Mindustry link.github.description = Code source du jeu link.changelog.description = Liste des mises à jour -link.dev-builds.description = Versions instables du jeu -link.trello.description = Trello officiel pour les ajouts futurs -link.itch.io.description = Page itch.io avec lien de téléchargement pour PC -link.google-play.description = Google Play Store -link.f-droid.description = Catalogue F-Droid -link.wiki.description = Le wiki officiel de Mindustry -link.suggestions.description = Suggérer de nouvelles fonctionnalités -linkfail = Erreur lors de l'ouverture du lien !\nL'URL a été copiée dans votre presse-papier. -screenshot = Capture d'écran sauvegardée à {0} -screenshot.invalid = La carte est trop large, il n'y a potentiellement pas assez de mémoire pour la capture d'écran. -gameover = Game over -gameover.pvp = L'équipe [accent] {0}[] a gagné ! +link.dev-builds.description = Versions expérimentale du jeu +link.trello.description = Trello officiel pour les nouvelles fonctionalités planifiées +link.itch.io.description = Page itch.io avec les différentes versions du jeu. +link.google-play.description = Page Google Play du jeu +link.f-droid.description = Page F-Droid du jeu +link.wiki.description = Wiki officiel de Mindustry +link.suggestions.description = Suggérez de nouvelles fonctionallités +link.bug.description = Vous avez trouvé un bug? Reportez le ici +linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier. +screenshot = Capture d'écran sauvegardée dans {0} +screenshot.invalid = Carte trop grande, potentiellement pas assez de mémoire pour la capture d'écran. +gameover = Partie terminée +gameover.disconnect = Déconnecté +gameover.pvp = L'équipe[accent] {0}[] a gagnée! +gameover.waiting = [accent]Attente de la nouvelle carte... highscore = [accent]Nouveau meilleur score! copied = Copié. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.notready = Cette partie du jeu n'est pas encore prête +indev.campaign = [accent]Félicitations! Vous avez atteint la fin de la campagne![]\n\nC'est ici que le contenu actuel s'arrête. Le voyage interplanétaire sera ajouté dans de futures mises à jour. -load.sound = Sons +load.sound = Son load.map = Cartes load.image = Images load.content = Contenu @@ -31,38 +34,38 @@ load.system = Système load.mod = Mods load.scripts = Scripts -be.update = Une nouvelle version en développement est disponible: -be.update.confirm = Télécharger et Redémarrer le jeu maintenenant ? +be.update = Une nouvelle version expérimentale est disponible: +be.update.confirm = Télécharger et Redémarrer le jeu maintenenant? be.updating = Mise à jour en cours... be.ignore = Ignorer be.noupdates = Aucune mise à jour trouvée. -be.check = Vérifiez les mises à jour +be.check = Chercher des mises à jour -mod.featured.title = Explorateur de mods -mod.featured.dialog.title = Explorateur de Mods +mod.featured.dialog.title = Navigateur de Mods (WIP) mods.browser.selected = Mod sélectionné -mods.browser.add = Installer le mod -mods.github.open = Ouvrir au Github +mods.browser.add = Installer +mods.github.open = Voir schematic = Schéma -schematic.add = Sauvegarder le schéma... +schematic.add = Enregistrer le Schéma... schematics = Schémas -schematic.replace = Un schéma avec ce nom existe déjà. Le remplacer? +schematic.replace = Un schéma avec ce nom existe déjà. Voulez-vous le remplacer ? schematic.exists = Un schéma avec ce nom existe déjà. schematic.import = Importer un schéma... schematic.exportfile = Exporter le fichier schematic.importfile = Importer un fichier schematic.browseworkshop = Consulter le Steam Workshop -schematic.copy = Copier au presse-papier -schematic.copy.import = Importer du presse-papier +schematic.copy = Copier dans le presse-papier +schematic.copy.import = Importer depuis presse-papier schematic.shareworkshop = Partager sur le Steam Workshop schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner le schéma -schematic.saved = Schéma sauvegardé. +schematic.saved = Schéma enregistré. schematic.delete.confirm = Ce schéma sera supprimé définitivement. -schematic.rename = Renommer le schéma +schematic.rename = Renommer le Schéma schematic.info = {0}x{1}, {2} blocs -schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. +schematic.disabled = [scarlet] Schémas désactivés![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]cartemap[] ou ce [accent]serveur. +stats = Stats stat.wave = Vagues vaincues:[accent] {0} stat.enemiesDestroyed = Ennemis détruits:[accent] {0} stat.built = Bâtiments construits:[accent] {0} @@ -72,26 +75,27 @@ stat.delivered = Ressources transférées: stat.playtime = Temps de jeu:[accent] {0} stat.rank = Rang Final: [accent]{0} -globalitems = [accent]Global Items -map.delete = Êtes-vous certain(e) de vouloir supprimer la carte "[accent]{0}[]"? +globalitems = [accent]Ressources globales +map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]"? level.highscore = Meilleur score: [accent]{0} level.select = Sélection du niveau level.mode = Mode de jeu: -coreattack = [scarlet]< Le noyau est attaquée! > +coreattack = [scarlet]< Le Noyau est attaqué! > nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente database = Base de données savegame = Sauvegarder la partie loadgame = Charger la partie -joingame = Rejoindre une partie -customgame = Partie customisée +joingame = Rejoindre la partie +customgame = Partie personnalisée newgame = Nouvelle partie -none = -minimap = Minimap +none = +none.found = [lightgray] +minimap = Mini-carte position = Position close = Fermer website = Site Web quit = Quitter -save.quit = Sauvegarder\net Quitter +save.quit = Sauvegarder & Quitter maps = Cartes maps.browse = Parcourir les cartes continue = Continuer @@ -104,24 +108,24 @@ uploadingcontent = Publication du contenu uploadingpreviewfile = Publication du fichier d'aperçu committingchanges = Validation des modifications done = Fait -feature.unsupported = Votre appareil ne supporte pas cette fonctionnalité. +feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité. -mods.alphainfo = Gardez à l'esprit que les mods sont en alpha et[scarlet] peuvent être très buggés[].\nMerci de signaler les problèmes que vous rencontrez via le GitHub ou le Discord Mindustry. +mods.alphainfo = Gardez à l'esprit que les mods sont en alpha et[scarlet] qu'ils peuvent être très buggés[].\nMerci de signaler les problèmes que vous rencontrez via le GitHub de Mindustry. mods = Mods -mods.none = [lightgray]Aucun mod trouvé! +mods.none = [lightgray]Aucun Mod trouvé! mods.guide = Guide de Modding mods.report = Signaler un Bug -mods.openfolder = Ouvrir le dossier des mods -mods.reload = Rafraichir -mods.reloadexit = The game will now exit, to reload mods. +mods.openfolder = Ouvrir le Dossier +mods.reload = Relancer +mods.reloadexit = Le jeu va se fermer pour relancer les mods. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Activé mod.disabled = [scarlet]Désactivé mod.disable = Désactiver mod.content = Contenu: mod.delete.error = Impossible de supprimer le mod. Le fichier est probablement en cours d'utilisation. -mod.requiresversion = [scarlet]Version du jeu requise : [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) +mod.requiresversion = [scarlet]Version minimale du jeu requise : [accent]{0} +mod.outdated = [scarlet]non compatible avec la V6 (no minGameVersion: 105) mod.missingdependencies = [scarlet]Dépendances manquantes: {0} mod.erroredcontent = [scarlet]Erreurs de contenu mod.errors = Des erreurs se sont produites lors du chargement du contenu. @@ -129,34 +133,38 @@ mod.noerrorplay = [scarlet]Vous avez des mods avec des erreurs.[] Désactivez le mod.nowdisabled = [scarlet]Le mod '{0}' a des dépendances manquantes:[accent] {1}\n[lightgray]Ces mods doivent d'abord être téléchargés.\nCe mod sera automatiquement désactivé. mod.enable = Activer mod.requiresrestart = Le jeu va maintenant se fermer pour appliquer les modifications du mod. -mod.reloadrequired = [scarlet]Rechargement requis +mod.reloadrequired = [scarlet]Redémarrage requis mod.import = Importer un mod mod.import.file = Importer un fichier -mod.import.github = Importer un mod GitHub -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.import.github = Importer un mod depuis GitHub +mod.jarwarn = [scarlet]Les mods JAR sont par nature peu sûrs.[]\nFaites en sorte d'Importer ce mod depuis une source digne de confiance. mod.item.remove = Cet objet fait partie du mod[accent] '{0}'[]. Pour le supprimer, désinstallez le mod en question. mod.remove.confirm = Ce mod sera supprimé. mod.author = [lightgray]Auteur:[] {0} -mod.missing = Cette sauvegarde contient des mods que vous avez récemment mis à jour ou que vous avez désinstallés. Votre sauvegarde risque d'être corrompue. Êtes-vous sûr(e) de vouloir l'importer?\n[lightgray]Mods:\n{0} +mod.missing = Cette sauvegarde contient des mods que vous avez récemment mis à jour ou que vous avez désinstallés. Votre sauvegarde risque d'être corrompue. Êtes-vous sûr de vouloir l'importer?\n[lightgray]Mods:\n{0} mod.preview.missing = Avant de publier ce mod dans le Steam Workshop, vous devez ajouter une image servant d'aperçu.\nPlacez une image nommée[accent] preview.png[] dans le dossier du mod et réessayez. -mod.folder.missing = Seuls les mods sous forme de dossiers peuvent être publiés sur le Steam Workshop.\nPour convertir n'importe quel mod en un dossier, dézippez-le tout simplement dans un dossier et supprimez l'ancien zip, puis redémarrez votre jeu ou rechargez vos mods. -mod.scripts.disable = Votre appareil ne supporte pas les mods avec des scripts. Vous devez désactiver ces mods pour jouer. +mod.folder.missing = Seuls les mods sous forme de dossiers peuvent être publiés sur le Steam Workshop.\nPour convertir n'importe quel mod en un dossier, décompressez-le tout simplement dans un dossier et supprimez l'ancien zip, puis redémarrez votre jeu ou rechargez vos mods. +mod.scripts.disable = Votre appareil ne prend pas an charge les mods avec des scripts. Vous devez désactiver ces mods pour pouvoir jouer. about.button = À propos name = Nom: -noname = Commencez par choisir un[accent] nom de joueur[]. -planetmap = Planet Map -launchcore = Launch Core +noname = Commencez par choisir un[accent] pseudo[]. +planetmap = Carte de la planète +launchcore = Lancer le Noyau filename = Nom du fichier: -unlocked = Nouveau bloc débloqué! +unlocked = Nouveau contenu débloqué! +available = Nouvelle recherche disponible! completed = [accent]Complété techtree = Arbre technologique +research.legacy = Données de recherche de la [accent]5.0[] trouvées.\nVoulez-vous [accent]charger les données[] ou [accent]les ignorer[] et recommencer la recherche dans la nouvelle campagne? (recommandé) +research.load = Chargement +research.discard = Ignorer research.list = [lightgray]Recherche: research = Rechercher -researched = [lightgray]{0} recherché(e). -research.progress = {0}% complete -players = {0} joueurs en ligne -players.single = {0} joueur en ligne +researched = [lightgray]{0} recherché. +research.progress = {0}% complété +players = {0} joueurs +players.single = {0} joueur players.search = Recherche players.notfound = [gray]Aucun joueur trouvé server.closing = [accent]Fermeture du serveur... @@ -168,113 +176,123 @@ server.kicked.clientOutdated = Client obsolète! Mettez votre jeu à jour! server.kicked.serverOutdated = Serveur obsolète! Demandez à l'hôte de le mettre à jour! server.kicked.banned = Vous avez été banni de ce serveur. server.kicked.typeMismatch = Ce serveur n'est pas compatible avec votre version du jeu. -server.kicked.playerLimit = Ce serveur est plein. Veuillez attendre qu'une place se libère. -server.kicked.recentKick = Vous avez été expulsé récemment.\nAttendez avant de vous connecter à nouveau. +server.kicked.playerLimit = Ce serveur est complet. Attendez qu'une place se libére. +server.kicked.recentKick = Vous avez été expulsé récemment.\nAttendez avant de vous reconnecter. server.kicked.nameInUse = Il y a déjà quelqu'un avec\nce nom sur ce serveur. server.kicked.nameEmpty = Votre nom est invalide. -server.kicked.idInUse = Vous êtes déjà sur ce serveur! Se connecter avec deux comptes n'est pas permis. +server.kicked.idInUse = Vous êtes déjà sur ce serveur! Se connecter avec deux comptes n'est pas permis! server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Téléchargez une version officielle. -server.kicked.gameover = Game over! +server.kicked.gameover = Partie terminée! server.kicked.serverRestarting = Le serveur est en train de redémarrer. server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[] -host.info = Le bouton [accent]Héberger[] héberge un serveur sur le port [scarlet]6567[]. \nN'importe qui sur le même [lightgray]wifi ou réseau local []devrait voir votre serveur sur sa liste de serveurs.\n\nSi vous voulez que les gens puissent s'y connecter de partout à l'aide de votre IP, [accent]le transfert de port (port forwarding)[] est requis.\n\n[lightgray]Note: Si quelqu'un a des problèmes de connexion à votre partie LAN, vérifiez que vous avez autorisé l'accès à Mindustry sur votre réseau local dans les paramètres de votre pare-feu. -join.info = Ici, vous pouvez entrer [accent]l'adresse IP d'un serveur []pour s'y connecter, ou découvrir un serveur en [accent]réseau local[].\nLe multijoueur en LAN ainsi qu'en WAN est supporté.\n\n[lightgray]Note: Il n'y a pas de liste de serveurs globaux automatiques; Si vous voulez vous connecter à quelqu'un par IP, il faudra d'abord demander à l'hébergeur leur IP. -hostserver = Héberger une partie +host.info = Le bouton [accent]héberger[] héberge un serveur sur le port [scarlet]6567[].\nN'importe qui sur le même [lightgray]réseau wifi ou local[] devrait pouvoir voir votre serveur dans sa liste de serveurs.\n\nSi vous voulez que les gens puissent se connecter de n'importe où grâce à l'IP, [accent]une ouverture des ports[] est requise.\n\n[lightgray]Note: Si quelqu'un éprouve des difficultés à se connecter à votre partie LAN, assurez-vous que vous avez autorisé Mindustry à accéder à votre réseau local dans les paramètres de votre pare-feu. +join.info = Ici, vous pouvez entrer l'[accent]IP d'un serveur[] pour vous y connecter, ou découvrir les serveurs sur votre [accent]réseau local[] ou les serveurs [accent]globaux[].\nLes parties multijoueur LAN et WAN sont toutes deux supportées.\n\n[lightgray]Note: Si vous voulez vous connecter à un serveur par IP, vous devrez demander l'IP à l'hébergeur. Celle-ci peut-être trouvée en recherchant "Mon IP" sur un moteur de recherche depuis son appareil. +hostserver = Héberger une partie multijoueur invitefriends = Inviter des Amis hostserver.mobile = Héberger\nune partie host = Héberger -hosting = [accent]Préparation du serveur... +hosting = [accent]Ouverture du serveur... hosts.refresh = Actualiser hosts.discovering = Recherche de jeux en LAN hosts.discovering.any = Recherche de parties server.refreshing = Actualisation du serveur -hosts.none = [lightgray]Aucun jeu en LAN trouvé! +hosts.none = [lightgray]Aucune partie en LAN trouvée! host.invalid = [scarlet]Impossible de se connecter à l'hôte. servers.local = Serveurs locaux servers.remote = Serveurs distants -servers.global = Serveurs officiels +servers.global = Serveurs communautaires + +servers.disclaimer = Les serveurs communautaires ne sont [accent]pas[] gérés ou controllés par le développeur.\n\nCes serveurs peuvent contenir du contenu qui ne convient pas à tout les âges. +servers.showhidden = Montrer les serveurs cachés +server.shown = Montré +server.hidden = Caché trace = Suivre le joueur trace.playername = Nom du joueur : [accent]{0} trace.ip = IP: [accent]{0} -trace.id = ID Unique : [accent]{0} -trace.mobile = Client mobile: [accent]{0} +trace.id = ID Unique: [accent]{0} +trace.mobile = Client Mobile: [accent]{0} trace.modclient = Client personnalisé: [accent]{0} invalidid = ID du client invalide! Veuillez soumettre un rapport d'erreur. -server.bans = Joueurs Bannis +server.bans = Bans server.bans.none = Aucun joueur banni trouvé! -server.admins = Administrateurs +server.admins = Admins server.admins.none = Aucun administrateur trouvé! server.add = Ajouter un serveur -server.delete = Êtes-vous sûr de vouloir supprimer ce serveur ? +server.delete = Êtes-vous sûr de vouloir supprimer ce serveur? server.edit = Modifier le serveur -server.outdated = [crimson]Serveur obsolète![] -server.outdated.client = [crimson]Client obsolète![] -server.version = [lightgray]Version: {0} {1} +server.outdated = [scarlet]Serveur obsolète![] +server.outdated.client = [scarlet]Client obsolète![] +server.version = [gray]Version: {0} {1} server.custombuild = [accent]Version personnalisée -confirmban = Souhaitez-vous vraiment bannir ce joueur? -confirmkick = Souhaitez-vous vraiment expulser ce joueur? -confirmvotekick = Voulez-vous vraiment voter l'expulsion de ce joueur? -confirmunban = Souhaitez-vous vraiment réintégrer ce joueur ? -confirmadmin = Souhaitez-vous vraiment rendre ce joueur administrateur? -confirmunadmin = Souhaitez-vous vraiment enlever le statut d'administrateur à ce joueur? +confirmban = Êtes-vous sûr de vouloir bannir "{0}[white]"? +confirmkick = Êtes-vous sûr de vouloir expulser "{0}[white]"? +confirmvotekick = Êtes-vous sûr de vouloir voter "{0}[white]"? +confirmunban = Êtes-vous sûr de vouloir annuler le ban de ce joueur? +confirmadmin = Êtes-vous sûr de vouloir faire de "{0}[white]" un administrateur? +confirmunadmin = Êtes-vous sûr de vouloir supprimer le statut d'administrateur de "{0}[white]"? joingame.title = Rejoindre une partie joingame.ip = IP: disconnect = Déconnecté. -disconnect.error = Erreur de connexion. -disconnect.closed = Connexion fermée. +disconnect.error = Un problème est survenu lors de la connection. +disconnect.closed = Connection fermée. disconnect.timeout = Délai de connexion expiré. disconnect.data = Les données du monde n'ont pas pu être chargées! cantconnect = Impossible de rejoindre ([accent]{0}[]). connecting = [accent]Connexion... -connecting.data = [accent]Chargement de la partie... +reconnecting = [accent]Reconnexion... +connecting.data = [accent]Chargement des données du monde... server.port = Port: server.addressinuse = Adresse déjà utilisée! server.invalidport = Numéro de port invalide! -server.error = [crimson]Erreur d'hébergement: [accent]{0} +server.error = [scarlet]Erreur lors de l'hébergement du serveur. save.new = Nouvelle sauvegarde -save.overwrite = Êtes-vous sûr de vouloir\n écraser cette sauvegarde ? +save.overwrite = Êtes-vous sûr de vouloir\nécraser cette sauvegarde ? overwrite = Écraser -save.none = Aucune sauvegarde trouvée ! +save.none = Aucune sauvegarde trouvée! savefail = Échec de la sauvegarde! -save.delete.confirm = Êtes-vous sûr(e) de vouloir supprimer cette sauvegarde? +save.delete.confirm = Êtes-vous sûr de vouloir supprimer cette sauvegarde? save.delete = Supprimer -save.export = Exporter une\nsauvegarde +save.export = Exporter une sauvegarde save.import.invalid = [accent]Cette sauvegarde est invalide! -save.import.fail = [crimson]Échec d'importation: [accent]{0} -save.export.fail = [crimson]Échec d'exportation: [accent]{0} +save.import.fail = [crimson]L'importation de la sauvegarde\na échouée: [accent]{0} +save.export.fail = [crimson]L'exportation de la sauvegarde\na échouée: [accent]{0} save.import = Importer une sauvegarde save.newslot = Nom de la sauvegarde: save.rename = Renommer save.rename.text = Nouveau nom: -selectslot = Choisissez une sauvegarde. +selectslot = Sélectionnez une sauvegarde. slot = [accent]Emplacement {0} editmessage = Modifier le Message -save.corrupted = [accent]Sauvegarde corrompue ou invalide!\nSi vous venez de mettre à jour votre jeu, c'est probablement dû à un changement du format de sauvegarde et [scarlet]pas[] à un bug. +save.corrupted = Fichier de sauvegarde corrompu ou invalide! empty = on = Activé off = Désactivé save.autosave = Sauvegarde automatique: {0} save.map = Carte: {0} save.wave = Vague {0} -save.mode = Mode de jeu: {0} +save.mode = Mode de jeu : {0} save.date = Dernière sauvegarde: {0} save.playtime = Temps de jeu: {0} warning = Avertissement. confirm = Confirmer delete = Supprimer view.workshop = Voir dans le Steam Workshop -workshop.listing = Éditer le listing du Steam Workshop +workshop.listing = Éditer la liste du Steam Workshop ok = OK open = Ouvrir -customize = Personnaliser les règles +customize = Personnaliser cancel = Annuler openlink = Ouvrir le lien copylink = Copier le lien back = Retour +max = Max +crash.export = Exporter les rapports de bugs +crash.none = Aucun rapport de bug trouvé. +crash.exported = Rapports de bugs exportés. data.export = Exporter les données -data.import = Importer les données +data.import = Importer des données data.openfolder = Ouvrir le dossier de données data.exported = Données exportées. data.invalid = Ce ne sont pas des données de jeu valides. @@ -284,11 +302,12 @@ quit.confirm.tutorial = Êtes-vous sur de ce que vous faites?\nLe tutoriel peut loading = [accent]Chargement... reloading = [accent]Rechargement des Mods... saving = [accent]Sauvegarde... -respawn = [accent][[{0}][] pour réapparaitre dans le noyau +respawn = [accent][[{0}][] pour réapparaître dans le Noyau cancelbuilding = [accent][[{0}][] pour effacer le plan -selectschematic = [accent][[{0}][] pour sélectionner et copier +selectschematic = [accent][[{0}][] pour sélectionner+copier pausebuilding = [accent][[{0}][] pour mettre la construction en pause resumebuilding = [scarlet][[{0}][] pour reprendre la construction +showui = Interface cachée.\nPressez [accent][[{0}][] pour montrer l'interface. wave = [accent]Vague {0} wave.cap = [accent]Vague {0}/{1} wave.waiting = [lightgray]Vague dans {0} @@ -296,38 +315,40 @@ wave.waveInProgress = [lightgray]Vague en cours waiting = [lightgray]En attente... waiting.players = En attente de joueurs... wave.enemies = [lightgray]{0} Ennemis restants +wave.enemycores = [accent]{0}[lightgray] Noyaux ennemis +wave.enemycore = [accent]{0}[lightgray] Noyau ennemi wave.enemy = [lightgray]{0} Ennemi restant -wave.guardianwarn = Gardien à l'approche dans [accent]{0}[] vagues. -wave.guardianwarn.one = Gardien à l'approche dans [accent]{0}[] vague. +wave.guardianwarn = Arrivée du Gardien dans [accent]{0}[] vagues. +wave.guardianwarn.one = Arrivée du Gardien dans [accent]{0}[] vague. loadimage = Charger l'image saveimage = Sauvegarder l'image unknown = Inconnu custom = Personnalisé -builtin = Intégré -map.delete.confirm = Voulez-vous vraiment supprimer cette carte? Il n'y aura plus de retour en arrière! +builtin = Pré-fait +map.delete.confirm = Voulez-vous vraiment supprimer cette carte? Il n'y aura pas de retour en arrière! map.random = [accent]Carte aléatoire -map.nospawn = Cette carte n'a pas de base pour qu'un joueur puisse y apparaître! Ajoutez une base[accent] orange[] sur cette carte dans l'éditeur. +map.nospawn = Cette carte ne possède pas de base pour que le joueur puisse apparaître! Ajouter un [royalNoyau orange[] sur cette carte dans l'éditeur. map.nospawn.pvp = Cette carte n'a pas de base ennemie pour qu'un joueur ennemi puisse y apparaître! Ajoutez au moins une base [scarlet] non-orange[] dans l'éditeur. map.nospawn.attack = Cette carte n'a aucune base ennemie à attaquer! Veuillez ajouter une base[scarlet] rouge[] sur cette carte dans l'éditeur. map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide. workshop.update = Mettre à jour workshop.error = Erreur lors de la récupération des détails du Steam Workshop: {0} -map.publish.confirm = Êtes-vous sûr(e) de vouloir publier cette carte?\n\n[lightgray]Assurez-vous d’accepter d’abord les CGU du Steam Workshop, sinon vos cartes ne seront pas affichées! +map.publish.confirm = Êtes-vous sûr de vouloir publier cette carte?\n\n[lightgray]Assurez-vous d’accepter d’abord les CGU du Steam Workshop, sinon vos cartes ne seront pas affichées! workshop.menu = Sélectionnez ce que vous souhaitez faire avec cet élément. workshop.info = Infos sur l'élément changelog = Journal des changements (optionnel): eula = CGU de Steam -missing = Cet élément a été supprimé ou déplacé.\n[lightgray]Le listing du Steam Workshop a maintenant été automatiquement dissocié. +missing = Cet élément a été supprimé ou déplacé.\n[lightgray]La liste du Steam Workshop a maintenant été automatiquement dissociée. publishing = [accent]Publication... -publish.confirm = Êtes-vous sûr de vouloir publier ceci ?\n\n[lightgray]Assurez-vous d'être d'abord d'accord avec les CGU du workshop, sinon vos éléments n'apparaîtront pas ! +publish.confirm = Êtes-vous sûr de vouloir publier ceci ?\n\n[lightgray]Assurez-vous d'avoir accepté les CGU du workshop, sinon vos éléments n'apparaîtront pas! publish.error = Erreur de publication de l'élément: {0} -steam.error = Échec d'initialisation des services Steam.\nError: {0} +steam.error = Échec d'initialisation des services Steam.\nErreur: {0} editor.brush = Pinceau editor.openin = Ouvrir dans l'éditeur editor.oregen = Génération de minerais editor.oregen.info = Génération de minerais: -editor.mapinfo = Infos Carte +editor.mapinfo = Infos de la Carte editor.author = Auteur: editor.description = Description: editor.nodescription = Une carte doit avoir une description d'au moins 4 caractères pour pouvoir être publiée. @@ -341,7 +362,6 @@ editor.center = Centrer workshop = Steam Workshop waves.title = Vagues waves.remove = Supprimer -waves.never = waves.every = tous les waves.waves = vague(s) waves.perspawn = par apparition @@ -356,48 +376,49 @@ waves.invalid = Vagues invalides dans le presse-papiers. waves.copied = Vagues copiées waves.none = Aucun ennemi défini.\nNotez que les vagues vides seront automatiquement remplacées par une vague générée par défaut. -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health +#these are intentionally in lower case +wavemode.counts = compte +wavemode.totals = totaux +wavemode.health = vie editor.default = [lightgray] details = Détails... edit = Modifier... editor.name = Nom: -editor.spawn = Créer l'unité +editor.spawn = Ajouter une unité editor.removeunit = Retirer l'unité -editor.teams = Équipe +editor.teams = Équipes editor.errorload = Erreur lors du chargement du fichier:\n[accent]{0} editor.errorsave = Erreur lors de la sauvegarde du fichier:\n[accent]{0} editor.errorimage = Ceci est une image, et non une carte.\n\nSi vous voulez importer une carte provenant de la version 3.5 (build 40), utilisez le bouton 'importer une carte obsolète (image)' dans l'éditeur. -editor.errorlegacy = Cette carte est trop ancienne, et utilise un format de carte qui n'est plus supporté. +editor.errorlegacy = Cette carte est trop ancienne et utilise un format de carte qui n'est plus pris en charge. editor.errornot = Ceci n'est pas un fichier de carte. -editor.errorheader = Le fichier de carte est invalide ou corrompu. +editor.errorheader = Ce fichier de carte est invalide ou corrompu. editor.errorname = La carte n'a pas de nom. Essayez-vous de charger une sauvegarde? editor.update = Mettre à jour -editor.randomize = Rendre aléatoire +editor.randomize = Randomiser editor.apply = Appliquer editor.generate = Générer editor.resize = Redimensionner editor.loadmap = Charger la carte editor.savemap = Sauvegarder la carte editor.saved = Sauvegardé! -editor.save.noname = Votre carte n'a pas de nom! Ajoutez un nom dans le menu 'info de la carte'. -editor.save.overwrite = Votre carte écrase une carte du jeu de base! Choisissez un nom différent dans le menu 'info de la carte' . -editor.import.exists = [scarlet]Importation impossible :[] '{0}' est le nom d'une carte du jeu de base! -editor.import = Importation... +editor.save.noname = Votre carte n'a pas de nom! Ajoutez un nom dans le menu 'Infos de la Carte' +editor.save.overwrite = Votre carte écrase une carte de base du jeu! Choisissez un nom différent dans le menu 'Infos de la Carte'. +editor.import.exists = [scarlet]Importation impossible :[] '{0}' est le nom d'une carte de base du jeu! +editor.import = Importer editor.importmap = Importer une carte -editor.importmap.description = Importer une carte existante +editor.importmap.description = Importer une carte déjà existante editor.importfile = Importer un fichier editor.importfile.description = Importer une carte externe -editor.importimage = Importer une carte obsolète +editor.importimage = Importer une carte (image) editor.importimage.description = Importer une carte externe (image) -editor.export = Exporter... +editor.export = Exporter editor.exportfile = Exporter un fichier editor.exportfile.description = Exporter un fichier de carte editor.exportimage = Exporter l'image du terrain -editor.exportimage.description = Exporter une image de la carte -editor.loadimage = Importer le terrain +editor.exportimage.description = Exporter une image de la carte avec du terrain seulement +editor.loadimage = Importer un terrain editor.saveimage = Exporter le terrain editor.unsaved = [scarlet]Vous n'avez pas sauvegardé vos modifications![] Voulez-vous vraiment quitter ? editor.resizemap = Redimensionner\nla carte @@ -408,15 +429,15 @@ editor.exists = Une carte avec ce nom existe déjà. editor.selectmap = Sélectionnez une carte: toolmode.replace = Remplacer -toolmode.replace.description = Dessiner seulement sur les blocs solides. +toolmode.replace.description = Dessine seulement sur les blocs solides. toolmode.replaceall = Tout Remplacer toolmode.replaceall.description = Remplace tous les blocs de la carte. toolmode.orthogonal = Orthogonal toolmode.orthogonal.description = Dessine seulement des lignes orthogonales. toolmode.square = Carré toolmode.square.description = Pinceau carré. -toolmode.eraseores = Effacer les minéraux -toolmode.eraseores.description = Efface seulement les minéraux. +toolmode.eraseores = Effacer les minerais +toolmode.eraseores.description = Efface seulement les minerais. toolmode.fillteams = Remplir les équipes toolmode.fillteams.description = Remplit les équipes au lieu des blocs. toolmode.drawteams = Dessiner les équipes @@ -425,39 +446,39 @@ toolmode.drawteams.description = Dessine les équipes au lieu de blocs. filters.empty = [lightgray]Aucun filtre! Ajoutez-en un avec les boutons ci-dessous. filter.distort = Déformation filter.noise = Bruit -filter.enemyspawn = Zone d'apparition enemi -filter.spawnpath = Path To Spawn -filter.corespawn = Zone d'apparition du noyau +filter.enemyspawn = Zone d'apparition enemie +filter.spawnpath = Chemin vers la zone d'apparition +filter.corespawn = Zone d'apparition du Noyau filter.median = Médian filter.oremedian = Minerai Médian filter.blend = Fusion -filter.defaultores = Minerai par défaut +filter.defaultores = Minerais par défaut filter.ore = Minerai -filter.rivernoise = Bruit des rivières +filter.rivernoise = Bruit de rivière filter.mirror = Miroir filter.clear = Effacer filter.option.ignore = Ignorer filter.scatter = Disperser filter.terrain = Terrain -filter.option.scale = Gamme +filter.option.scale = Échelle filter.option.chance = Chance filter.option.mag = Magnitude filter.option.threshold = Seuil -filter.option.circle-scale = Gamme du cercle +filter.option.circle-scale = Échelle circulaire filter.option.octaves = Octaves -filter.option.falloff = Diminution +filter.option.falloff = Détachemment filter.option.angle = Angle filter.option.amount = Quantité filter.option.block = Bloc filter.option.floor = Sol -filter.option.flooronto = Sol en question +filter.option.flooronto = Sol ciblé filter.option.target = Cible filter.option.wall = Mur filter.option.ore = Minerai filter.option.floor2 = Sol secondaire filter.option.threshold2 = Seuil secondaire filter.option.radius = Rayon -filter.option.percentile = Centile +filter.option.percentile = Pourcentage width = Largeur: height = Hauteur: @@ -466,9 +487,11 @@ play = Jouer campaign = Campagne load = Charger save = Sauvegarder -fps = FPS: {0} +fps = IPS: {0} ping = Ping: {0}ms -language.restart = Veuillez redémarrer votre jeu pour que le changement de langue prenne effet. +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb +language.restart = Veuillez redémarrez votre jeu pour que le changement de langage prenne effet. settings = Paramètres tutorial = Tutoriel tutorial.retake = Refaire le Tutoriel @@ -481,59 +504,80 @@ locked = Verrouillé complete = [lightgray]Compléter: requirement.wave = Vague {0} dans {1} requirement.core = Détruire le Noyau ennemi dans {0} -requirement.research = Research {0} -requirement.capture = Capture {0} -bestwave = [lightgray]Meilleur: {0} -launch.text = Launch -research.multiplayer = Only the host can research items. +requirement.research = Recherchez {0} +requirement.produce = Produisez {0} +requirement.capture = Capturez {0} +launch.text = Décoller +research.multiplayer = Seul l'hôte peut rechercher des objets. +map.multiplayer = Seul l'hôte peut voir les secteurs. uncover = Découvrir -configure = Modifier les ressources à emporter -loadout = Loadout -resources = Resources -bannedblocks = Blocs Bannis -addall = Ajouter TOUS +configure = Modifier le chargement + +loadout = Chargement +resources = Ressources +bannedblocks = Blocs bannis +addall = Ajouter TOUT +launch.from = Décollage depuis: [accent]{0} launch.destination = Destination: {0} -configure.invalid = Le montant doit être un nombre compris entre 0 et {0}. -zone.unlocked = [lightgray]{0} débloquée. -zone.requirement.complete = Exigences pour {0} complétées:[lightgray]\n{1} -zone.resources = [lightgray]Ressources détectées: -zone.objective = [lightgray]Objectif: [accent]{0} -zone.objective.survival = Survivre -zone.objective.attack = Détruire le noyau ennemi -add = Ajouter... -boss.health = Santé du Boss +configure.invalid = La quantité doit être un nombre compris entre 0 et {0}. +add = Ajouter +boss.health = Santé du Gardien -connectfail = [crimson]Échec de la connexion au serveur :\n\n[accent]{0} -error.unreachable = Serveur injoignable.\nL'adresse IP est-elle correcte? +connectfail = [scarlet]Échec de la connexion au serveur:\n\n[accent]{0} +error.unreachable = Serveur inaccessible.\nEst-ce que l'adresse est écrite correctement? error.invalidaddress = Adresse invalide. -error.timedout = Délai de connexion expiré!\nAssurez-vous que l'hôte a autorisé l'accès au port (port forwarding) et que l'adresse est correcte! -error.mismatch = Erreur de paquet:\nPossible différence de version entre le client et le serveur .\nVérifiez que vous et l'hôte avez la version de Mindustry la plus récente! -error.alreadyconnected = Déjà connecté(e). -error.mapnotfound = Carte introuvable! +error.timedout = Expiration du délai!\nAssurez-vous que l'ouverture des port est configurée chez l'hôte et que l'adresse est correcte! +error.mismatch = Erreur de paquet:\nPossible incompatibilité de version client/serveur.\nAssurez-vous que l'hôte et vous disposez de la dernière version de Mindustry! +error.alreadyconnected = Déjà connecté. +error.mapnotfound = Fichier de carte introuvable ! error.io = Erreur de Réseau (I/O) -error.any = Erreur réseau inconnue -error.bloom = Échec de l'initialisation du flou lumineux.\nVotre appareil peut ne pas le supporter. +error.any = Erreur de réseau inconnue. +error.bloom = Échec de l'initialisation du flou lumineux.\nIl se peut que votre appareil ne le prenne pas en charge. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm -weather.fog.name = Fog +weather.rain.name = Pluie +weather.snow.name = Neige +weather.sandstorm.name = Tempête de sable +weather.sporestorm.name = Tempête de spores +weather.fog.name = Brouillard -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: +sectors.unexplored = [lightgray]Inexploré +sectors.resources = Ressources: sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) -sectors.rename = Rename Sector -sector.missingresources = [scarlet]Insufficient Core Resources +sectors.export = Exporté: +sectors.time = Temps de jeu: +sectors.threat = Menace: +sectors.wave = Vague: +sectors.stored = Stocké: +sectors.resume = Reprendre +sectors.launch = Décoller +sectors.select = Sélectionner +sectors.nonelaunch = [lightgray]Vide (soleil) +sectors.rename = Renommer le secteur +sectors.enemybase = [scarlet]Base ennemie +sectors.vulnerable = [scarlet]Vulnérable +sectors.underattack = [scarlet]Attaque en cours! [accent]{0}% endommagé +sectors.survives = [accent]Survécu à {0} vagues +sectors.go = Aller +sector.curcapture = Secteur capturé +sector.curlost = Secteur perdu +sector.missingresources = [scarlet]Ressources du Noyau insuffisantes +sector.attacked = Secteur [accent]{0}[white] attaqué! +sector.lost = Secteur [accent]{0}[white] perdu! +#note: the missing space in the line below is intentional +sector.captured = Sector [accent]{0}[white]capturé! + +threat.low = Faible +threat.medium = Normale +threat.high = Grande +threat.extreme = Extrême +threat.eradication = Éradication + +planets = Planètes planet.serpulo.name = Serpulo -planet.sun.name = Sun +planet.sun.name = Soleil +sector.impact0078.name = Impact 0078 sector.groundZero.name = Ground Zero sector.craters.name = The Craters sector.frozenForest.name = Frozen Forest @@ -545,20 +589,29 @@ sector.overgrowth.name = Overgrowth sector.tarFields.name = Tar Fields sector.saltFlats.name = Salt Flats sector.fungalPass.name = Fungal Pass +sector.biomassFacility.name = Biomass Synthesis Facility +sector.windsweptIslands.name = Windswept Islands +sector.extractionOutpost.name = Extraction Outpost +sector.planetaryTerminal.name = Planetary Launch Terminal -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. -sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. -sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. -sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. -sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. -sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. +sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration. +sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprennez à utiliser les bâtiments de soin. +sector.saltFlats.description = À la périphérie du désert se trouvent les déserts de sel. Peu de ressources s'y trouvent.\n\nLà-bas, l'ennemi a construit un complexe de stockage de ressource. Détruisez leur Noyau et ne laissez rien debout. +sector.craters.description = Ce cratère est une relique d'anciennes guerres. De l'eau s'est accumulée au fond. Prenez le contrôle de la zone.\nCollectez du Sable et faites fondre du Verre trempé. Pompez de l'eau pour refroidir vos tourelles et vos foreuses. +sector.ruinousShores.description = Au-delà des déchets, se trouve le littoral. Autrefois, cet endroit abritait un réseau de défense côtière, mais il n’en reste pas grand-chose. Seules quelques structures de défense basiques sont restées intactes, tout le reste a été réduit en ferraille.\nContinuez votre exploration en redécouvrant la technologie. +sector.stainedMountains.description = Plus loin, à l’intérieur des terres, se trouvent des montagnes qui n'ont pas touchées par les spores.\nExploitez le Titane présent en abondance dans cette zone et apprenez comment l'utiliser.\n\nLa présence ennemie est bien plus grande ici. Ne leur donnez pas le temps d’envoyer leurs unités les plus fortes. +sector.overgrowth.description = Étant plus proche de la source des spores, cette zone a été complètement envahie.\nL'ennemi y a établi un avant-poste. Formez des Titans et détruisez-le. +sector.tarFields.description = La périphérie d’une zone de production de pétrole, situé entre les montagnes et le désert. L’une des rares avec des réserves de goudron utilisables.\nBien qu’abandonnée, cette zone a quelques forces ennemies dangereuses à proximité. Ne les sous-estimez pas!\n\n[lightgray]Recherchez la technologie de traitement de pétrole si possible. +sector.desolateRift.description = Une zone extrêmement dangereuse. Des ressources abondantes, mais peu d’espace. Un risque élevé de destruction donc partez dès que possible! Ne vous laissez surtout pas berner par le long temps d'attente entre les vagues ennemies. Vous risquerez de le regretter. +sector.nuclearComplex.description = Une ancienne installation de production et de traitement de thorium, réduite en ruines.\n[lightgray]Faites des recherches sur le thorium et ses nombreuses utilisations.\n\nL’ennemi est présent ici en grand nombre, recherchant constamment des attaquants. +sector.fungalPass.description = Une zone de transition entre les hautes montagnes et les terres plus basses, infestées de spores. Une petite base de reconnaissance ennemie se trouve ici.\nDétruisez les 2 Noyaux ennemis en utilisant des Poingnards et des Rampeurs. +sector.biomassFacility.description = L’origine des spores. Il s’agit de l’installation dans laquelle elles ont été étudiées et initialement produites.\nRecherchez la technologie présente sur les lieux et cultivez des spores pour la production de carburant et de plastique.\n\n[lightgray]Lors de la destruction de cette installation, les spores ont été libérées. Rien dans l’écosystème local ne pouvait concurrencer un organisme aussi envahissant. +sector.windsweptIslands.description = Au delà du rivage se trouve cette chaîne d’îles reculées. Les registres montrent qu’il y avait autrefois des usines de [accent]Plastanium[].\n\nDéfendez-vous contre les unités navales ennemies, établissez-y une base et faites des recherches sur ces usines. +sector.extractionOutpost.description = Un avant-poste éloigné, construit par l’ennemi dans le but de transférer des ressources vers d’autres secteurs.\n\nCette technologie de transport inter-secteur est essentielle pour de nouvelles conquêtes. Détruisez la base et recherchez leurs Rampes de lancement. +sector.impact0078.description = Ici reposent les vestiges d'un vaisseau de transport interstellaire, premier à être rentré dans ce système.\n\nRécuperez et recherchez autant de technologies que possible dans cette épave. +sector.planetaryTerminal.description = La cible finale.\n\nCette base côtière contient une structure capable de lancer des Noyaux sur les planètes voisines. Elle est extrêmement bien gardée.\n\nProduisez des unités navales, éliminez l’ennemi le plus rapidement possible et recherchez la structure de lancement. -settings.language = Langue +settings.language = Language settings.data = Données du Jeu settings.reset = Valeurs par Défaut settings.rebind = Réattribuer @@ -568,34 +621,34 @@ settings.game = Jeu settings.sound = Son settings.graphics = Graphismes settings.cleardata = Effacer les données du jeu... -settings.clear.confirm = Êtes-vous sûr d'effacer ces données ?\nAucun retour en arrière n'est possible! -settings.clearall.confirm = [scarlet]ATTENTION![]\nCette action effacera toutes les données, y compris les sauvegardes, les cartes, la progression et la configuration des touches.\nUne fois que vous aurez pressé 'OK' le jeu effacera TOUTES les données et se fermera. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves -settings.clearresearch = Clear Research -settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? -settings.clearcampaignsaves = Clear Campaign Saves -settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? +settings.clear.confirm = Êtes-vous sûr de vouloir effacer ces données?\nAucun retour en arrière n'est possible! +settings.clearall.confirm = [scarlet]ATTENTION![]\nCette action effacera toutes les données, y compris les sauvegardes, les cartes, la progression et la configuration des touches.\nUne fois que vous aurez pressé 'OK', le jeu effacera TOUTES les données et se fermera. +settings.clearsaves.confirm = Êtes-vous sûr de vouloir supprimer toutes vos sauvegardes? +settings.clearsaves = Supprimer les Sauvegardes +settings.clearresearch = Supprimer la Recherche +settings.clearresearch.confirm = Êtes-vous sûr de vouloir supprimer toutes les recherches de la campagne? +settings.clearcampaignsaves = Supprimer la Campagne +settings.clearcampaignsaves.confirm = Êtes-vous sûr de vouloir supprimer toutes les sauvegardes de la campagne? paused = [accent]< Pause > clear = Effacer banned = [scarlet]Bannis -unplaceable.sectorcaptured = [scarlet]Nécessite la capture du secteur yes = Oui no = Non info.title = Info -error.title = [crimson]Une erreur s'est produite +error.title = [scarlet]Une erreur s'est produite error.crashtitle = Une erreur s'est produite unit.nobuild = [scarlet]Cette unité ne peut construire -lastaccessed = [lightgray]Last Accessed: {0} +lastaccessed = [lightgray]Dernier accès: {0} block.unknown = [lightgray]??? -stat.input = Entrée -stat.output = Sortie -stat.booster = Booster -stat.tiles = Pré-requis +stat.description = But +stat.input = Ressource(s) requise(s) +stat.output = Ressource(s) produite(s) +stat.booster = Boosteur +stat.tiles = Sol requis stat.affinities = Affinités stat.powercapacity = Capacité d'énergie -stat.powershot = Énergie/Tir +stat.powershot = Unités d'énergie/Tir stat.damage = Dégâts stat.targetsair = Cibles Aériennes stat.targetsground = Cibles Terrestres @@ -603,141 +656,153 @@ stat.itemsmoved = Vitesse de Déplacement stat.launchtime = Temps entre chaque lancement stat.shootrange = Portée de tir stat.size = Taille -stat.displaysize = Display Size +stat.displaysize = Résolution stat.liquidcapacity = Capacité liquide stat.powerrange = Portée électrique -stat.linkrange = Link Range +stat.linkrange = Portée des liens stat.instructions = Instructions stat.powerconnections = Nombre maximal de connections stat.poweruse = Énergie utilisée -stat.powerdamage = Dégâts d'énergie +stat.powerdamage = Unités d'énergie/Dégat stat.itemcapacity = Stockage -stat.memorycapacity = Memory Capacity -stat.basepowergeneration = Production d'énergie +stat.memorycapacity = Mémoire +stat.basepowergeneration = Production d'énergie de Base stat.productiontime = Durée de production -stat.repairtime = Durée de réparation complète du Bloc +stat.repairtime = Durée de la réparation complète d'un Bloc +stat.weapons = Armes +stat.bullet = Balles stat.speedincrease = Accélération stat.range = Portée stat.drilltier = Forable -stat.drillspeed = Vitesse de forage de base -stat.boosteffect = Effet du Boost -stat.maxunits = Unités actives max +stat.drillspeed = Vitesse de forage de Base +stat.boosteffect = Effet(s) du Boost +stat.maxunits = Max d'Unités Actives stat.health = Santé stat.buildtime = Durée de construction -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = Max Consécutif stat.buildcost = Coût de construction -stat.inaccuracy = Imprécision +stat.inaccuracy = Précision stat.shots = Tirs stat.reload = Tirs/Seconde stat.ammo = Munitions -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time -stat.explosiveness = Explosiveness -stat.basedeflectchance = Base Deflect Chance -stat.lightningchance = Lightning Chance -stat.lightningdamage = Lightning Damage -stat.flammability = Flammability -stat.radioactivity = Radioactivity -stat.heatcapacity = HeatCapacity -stat.viscosity = Viscosity -stat.temperature = Temperature -stat.speed = Speed -stat.buildspeed = Build Speed -stat.minespeed = Mine Speed -stat.minetier = Mine Tier -stat.payloadcapacity = Payload Capacity -stat.commandlimit = Command Limit -stat.abilities = Abilities +stat.shieldhealth = Santé du bouclier +stat.cooldowntime = Temps de refroidissement +stat.explosiveness = Explosivité +stat.basedeflectchance = Chance de Détournement de Base +stat.lightningchance = Chance d'Éclairs +stat.lightningdamage = Dégats des Éclairs +stat.flammability = Inflammabilité +stat.radioactivity = Radioactivité +stat.heatcapacity = Capacité Thermique +stat.viscosity = Viscosité +stat.temperature = Température +stat.speed = Vitesse +stat.buildspeed = Vitesse de construction +stat.minespeed = Vitesse de minage +stat.minetier = Niveau de minage +stat.payloadcapacity = Capacité de chargement +stat.commandlimit = Limite de contrôle +stat.abilities = Abilités +stat.canboost = Boost +stat.flying = Unité volante +stat.ammouse = Utilisation de munitions -ability.forcefield = Force Field -ability.repairfield = Repair Field -ability.statusfield = Status Field -ability.unitspawn = {0} Factory -ability.shieldregenfield = Shield Regen Field +ability.forcefield = Champ de Force +ability.repairfield = Champ de Réparation +ability.statusfield = Champ de statut +ability.unitspawn = Usine de {0} +ability.shieldregenfield = Champ de regénération de bouclier +ability.movelightning = Déplacement éclair bar.drilltierreq = Meilleure Foreuse Requise -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = Ressources manquantes +bar.corereq = Noyau de base requis bar.drillspeed = Vitesse de Forage: {0}/s bar.pumpspeed = Vitesse de Pompage: {0}/s bar.efficiency = Efficacité: {0}% +bar.boost = Boost: {0}% bar.powerbalance = Énergie: {0}/s -bar.powerstored = En stock: {0}/{1} +bar.powerstored = Réserves d'Énergie: {0}/{1} bar.poweramount = Énergie: {0} bar.poweroutput = Énergie Produite: {0} bar.powerlines = Connections: {0}/{1} bar.items = Objets: {0} bar.capacity = Capacité: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] -bar.liquid = Liquide +bar.liquid = Liquides bar.heat = Chaleur bar.power = Énergie -bar.progress = Progression de la construction +bar.progress = Construction en cours bar.input = Entrée bar.output = Sortie -units.processorcontrol = [lightgray]Processor Controlled +units.processorcontrol = [lightgray]Contrôlée par un processeur bullet.damage = [stat]{0}[lightgray] dégâts bullet.splashdamage = [stat]{0}[lightgray] dégâts de zone ~[stat] {1}[lightgray] blocs bullet.incendiary = [stat]incendiaire +bullet.sapping = [stat]vol de vie bullet.homing = [stat]autoguidé bullet.shock = [stat]choc électrique -bullet.frag = [stat]explosif +bullet.frag = [stat]fragmentation +bullet.buildingdamage = [stat]{0}%[lightgray] des dégâts aux bâtiments bullet.knockback = [stat]{0}[lightgray] recul -bullet.pierce = [stat]{0}[lightgray]x pierce -bullet.infinitepierce = [stat]pierce +bullet.pierce = [stat]{0}[lightgray]x perforant +bullet.infinitepierce = [stat]perforant +bullet.healpercent = [stat]{0}[lightgray]% soins bullet.freezing = [stat]gel bullet.tarred = [stat]goudronné bullet.multiplier = [stat]{0}[lightgray]x multiplicateur de munitions bullet.reload = [stat]{0}[lightgray]x vitesse de tir unit.blocks = blocs -unit.blockssquared = blocks² -unit.powersecond = énergie/seconde -unit.liquidsecond = unité de liquide/seconde +unit.blockssquared = blocs² +unit.powersecond = unités d'énergie/seconde +unit.liquidsecond = Unités de liquide/seconde unit.itemssecond = objets/seconde -unit.liquidunits = unité de liquide -unit.powerunits = unité d'énergie +unit.liquidunits = unités de liquide +unit.powerunits = unités d'énergie unit.degrees = degrés unit.seconds = secondes -unit.minutes = mins +unit.minutes = minutes unit.persecond = /sec unit.perminute = /min unit.timesspeed = x vitesse unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = santé du bouclier unit.items = objets unit.thousands = k -unit.millions = M -unit.billions = b +unit.millions = mil +unit.billions = Md +unit.pershot = /tirs +category.purpose = But category.general = Général category.power = Énergie category.liquids = Liquides category.items = Objets category.crafting = Fabrication -category.function = Function -category.optional = Améliorations optionnelles -setting.landscape.name = Verrouiller en rotation paysage +category.function = Fonction +category.optional = Améliorations facultatives +setting.landscape.name = Verrouiller la rotation en mode paysage setting.shadows.name = Ombres -setting.blockreplace.name = Suggestions Automatiques de Blocs -setting.linear.name = Filtrage Linéaire +setting.blockreplace.name = Suggestion automatique des Blocs +setting.linear.name = Filtrage linéaire setting.hints.name = Astuces -setting.flow.name = Afficher le Débit des Ressources -setting.buildautopause.name = Confirmation avant la construction -setting.animatedwater.name = Eau animée +setting.flow.name = Afficher le Débit des ressources +setting.backgroundpause.name = Pause en Arrière-plan +setting.buildautopause.name = Confirmation avant construction +setting.animatedwater.name = Surfaces Animées setting.animatedshields.name = Boucliers Animés setting.antialias.name = Anticrénelage[lightgray] (redémarrage du jeu nécessaire)[] -setting.playerindicators.name = Indicateurs des Joueurs -setting.indicators.name = Indicateurs des Ennemis +setting.playerindicators.name = Indicateurs alliés +setting.indicators.name = Indicateurs ennemis setting.autotarget.name = Visée automatique setting.keyboard.name = Contrôles Souris+Clavier setting.touchscreen.name = Commandes d'écran tactile -setting.fpscap.name = FPS Max -setting.fpscap.none = Aucun -setting.fpscap.text = {0} FPS -setting.uiscale.name = Échelle de l'interface[lightgray] (redémarrage du jeu nécessaire)[] +setting.fpscap.name = Max IPS +setting.fpscap.none = Illimité +setting.fpscap.text = {0} IPS +Échelle de l'interface[lightgray] (redémarrage du jeu nécessaire)[] setting.swapdiagonal.name = Autoriser le placement en diagonale setting.difficulty.training = Entraînement setting.difficulty.easy = Facile @@ -747,65 +812,66 @@ setting.difficulty.insane = Extrême setting.difficulty.name = Difficulté: setting.screenshake.name = Tremblement de l'Écran setting.effects.name = Afficher les Effets -setting.destroyedblocks.name = Afficher les Blocs Détruits +setting.destroyedblocks.name = Afficher les Blocs détruits setting.blockstatus.name = Afficher le Statut des Blocs -setting.conveyorpathfinding.name = Auto-placement Intelligent des Convoyeurs +setting.conveyorpathfinding.name = Placement intelligent des Convoyeurs setting.sensitivity.name = Sensibilité de la manette -setting.saveinterval.name = Intervalle des Sauvegardes Automatiques +setting.saveinterval.name = Intervalle des Sauvegardes automatiques setting.seconds = {0} secondes -setting.blockselecttimeout.name = Délai d'Attente de Sélection de Bloc setting.milliseconds = {0} millisecondes setting.fullscreen.name = Plein Écran -setting.borderlesswindow.name = Fenêtre sans bords (Borderless)[lightgray] (peut nécessiter le redémarrage du jeu) -setting.fps.name = Afficher FPS et Ping +setting.borderlesswindow.name = Fenêtre sans bords[lightgray] (peut nécessiter le redémarrage du jeu) +setting.fps.name = Afficher IPS et Ping setting.smoothcamera.name = Lissage de la Caméra -setting.vsync.name = VSync -setting.pixelate.name = Pixeliser[lightgray] (désactive les animations) -setting.minimap.name = Afficher la Minimap -setting.coreitems.name = Display Core Items (WIP) +setting.vsync.name = Synchronisation Verticale +setting.pixelate.name = Pixeliser +setting.minimap.name = Afficher la Mini-carte +setting.coreitems.name = Afficher les objets du Noyau setting.position.name = Afficher la position du joueur -setting.musicvol.name = Volume Musique -setting.atmosphere.name = Son atmosphérique de la planète +setting.musicvol.name = Volume de la Musique +setting.atmosphere.name = Montrer l'Atmosphère de la planète setting.ambientvol.name = Volume Ambiant setting.mutemusic.name = Couper la Musique -setting.sfxvol.name = Volume des Effets Spéciaux -setting.mutesound.name = Couper le son des Effets Spéciaux -setting.crashreport.name = Envoyer des Rapports de Crash anonymes +setting.sfxvol.name = Volume des Sons et Effets +setting.mutesound.name = Couper les Sons et Effets +setting.crashreport.name = Envoyer des Rapports de crash anonymes setting.savecreate.name = Sauvegardes Automatiques -setting.publichost.name = Visibilité de la Partie Publique +setting.publichost.name = Visibilité de la Partie publique setting.playerlimit.name = Limite de Joueurs setting.chatopacity.name = Opacité du Chat -setting.lasersopacity.name = Opacité des Connections Laser +setting.lasersopacity.name = Opacité des Connections laser setting.bridgeopacity.name = Opacité des ponts setting.playerchat.name = Montrer les bulles de discussion des joueurs -public.confirm = Voulez-vous rendre votre partie publique?\n[accent]N'importe qui pourrait rejoindre vos parties.\n[lightgray]Ce paramètre peut être changé plus tard dans Paramètres->Jeu->Visibilité de la Partie Publique -public.beta = Notez que les versions bêta du jeu ne peuvent pas créer des salons publics. -uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des paramètres d'avant et fermeture dans [accent] {0}[]... +setting.showweather.name = Montrer les Effets météos +public.confirm = Voulez-vous rendre votre partie publique?\n[accent]N'importe qui pourra rejoindre vos parties.\n[lightgray]Ce paramètre peut être changé plus tard dans Paramètres->Jeu->Visibilité de la Partie Publique +public.confirm.really = Si vous voulez jouer avec des amis, utilisez [green]Inviter un Ami[] Au lieu [scarlet]d'un Serveur Public[]!\nÊtes-vous sûrs de vouloir rendre votre partie [scarlet]publique[]? +public.beta = Notez que les versions bêta du jeu ne peuvent pas créer de salons publics. +uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer.\n[scarlet]Rétablissement des anciens paramètres et fermeture du jeu dans [accent] {0}[] secondes... uiscale.cancel = Annuler & Quitter setting.bloom.name = Flou lumineux -keybind.title = Raccourcis Clavier -keybinds.mobile = [scarlet]La plupart des raccourcis clavier ne sont pas fonctionnels sur mobile. Seuls les mouvements basiques sont supportés. +keybind.title = Paramètres des Touches du Clavier +keybinds.mobile = [scarlet]La plupart des touches de clavier ne sont pas fonctionnelles sur mobile. Seuls les mouvements basiques sont supportés. category.general.name = Général category.view.name = Voir category.multiplayer.name = Multijoueur -category.blocks.name = Block Select -command.attack = Attaque -command.rally = Rassembler +category.blocks.name = Sélection des blocs +command.attack = Attaquer +command.rally = Rallier command.retreat = Retraite -command.idle = Idle -placement.blockselectkeys = \n[lightgray]Touche: [{0}, -keybind.respawn.name = Réapparaitre +command.idle = Pause +placement.blockselectkeys = \n[lightgray]Raccourci: [{0}, +keybind.respawn.name = Réapparaître keybind.control.name = Controler une Unité -keybind.clear_building.name = Effacer les constructions -keybind.press = Appuyez sur une touche... -keybind.press.axis = Appuyez sur un axe ou une touche... -keybind.screenshot.name = Capture d'écran +keybind.clear_building.name = Réinitialiser les constructions +keybind.press = Pressez une touche... +keybind.press.axis = Pressez un axe ou une touche... +keybind.screenshot.name = Capture d'écran de la carte keybind.toggle_power_lines.name = Montrer/Cacher les Connections d'Énergie -keybind.toggle_block_status.name = Montrer/Cacher les Status des Blocs -keybind.move_x.name = Mouvement X -keybind.move_y.name = Mouvement Y -keybind.mouse_move.name = Suivre la Souris -keybind.pan.name = Pan View +keybind.toggle_block_status.name = Montrer/Cacher le Statut des Blocs +keybind.move_x.name = Mouvement axe X +keybind.move_y.name = Mouvement axe Y +keybind.mouse_move.name = Suivre la souris +keybind.pan.name = Vue Panoramique keybind.boost.name = Boost keybind.schematic_select.name = Sélectionner une Région keybind.schematic_menu.name = Menu des schémas @@ -813,10 +879,10 @@ keybind.schematic_flip_x.name = Retourner le schéma sur l'axe des X keybind.schematic_flip_y.name = Retourner le schéma sur l'axe des Y keybind.category_prev.name = Catégorie Précédente keybind.category_next.name = Catégorie Suivante -keybind.block_select_left.name = Sélectionner Bloc de Gauche -keybind.block_select_right.name = Sélectionner Bloc de Droite -keybind.block_select_up.name = Sélectionner Bloc en Haut -keybind.block_select_down.name = Sélectionner Bloc en Bas +keybind.block_select_left.name = Sélectionner le Bloc de Gauche +keybind.block_select_right.name = Sélectionner le Bloc de Droite +keybind.block_select_up.name = Sélectionner le Bloc en Haut +keybind.block_select_down.name = Sélectionner le Bloc en Bas keybind.block_select_01.name = Sélectionner Catégorie/Bloc 1 keybind.block_select_02.name = Sélectionner Catégorie/Bloc 2 keybind.block_select_03.name = Sélectionner Catégorie/Bloc 3 @@ -833,59 +899,63 @@ keybind.diagonal_placement.name = Placement en diagonale keybind.pick.name = Choisir un bloc keybind.break_block.name = Supprimer un bloc keybind.deselect.name = Désélectionner -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command +keybind.pickupCargo.name = Prendre un Chargement +keybind.dropCargo.name = Lacher un Chargement +keybind.command.name = Commander keybind.shoot.name = Tirer -keybind.zoom.name = Zoomer +keybind.zoom.name = Zoom keybind.menu.name = Menu keybind.pause.name = Pause -keybind.pause_building.name = Pauser/Reprendre la construction -keybind.minimap.name = Minimap -keybind.chat.name = Chat -keybind.player_list.name = Liste des Joueurs +keybind.pause_building.name = Pauser/Reprendre la Construction +keybind.minimap.name = Mini-carte +keybind.planet_map.name = Carte de la Planète +keybind.research.name = Recherche +keybind.chat.name = Tchat +keybind.player_list.name = Liste des joueurs keybind.console.name = Console keybind.rotate.name = Tourner -keybind.rotateplaced.name = Tourner un bloc existant (maintenir) +keybind.rotateplaced.name = Tourner un Bloc existant (maintenir) keybind.toggle_menus.name = Cacher/Afficher les Menus -keybind.chat_history_prev.name = Remonter l'Historique du Chat -keybind.chat_history_next.name = Descendre l'Historique du Chat -keybind.chat_scroll.name = Défilement du Chat -keybind.drop_unit.name = Larguer l'unité -keybind.zoom_minimap.name = Zoom Minimap +keybind.chat_history_prev.name = Remonter l'Historique du Tchat +keybind.chat_history_next.name = Descendre l'Historique du Tchat +keybind.chat_scroll.name = Défilement du Tchat +keybind.chat_mode.name = Changer le mode du Tchat +keybind.drop_unit.name = Larguer une unité +keybind.zoom_minimap.name = Zoomer la Mini-carte mode.help.title = Description des modes de jeu mode.survival.name = Survie -mode.survival.description = Le mode normal. Ressources limitées et vagues d'Ennemis automatiques.\n[gray]Nécessite un point d'apparition ennemi pour y jouer. -mode.sandbox.name = Bac à sable -mode.sandbox.description = Ressources infinies et pas de minuterie pour les vagues. +mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques.\n[gray]Requiert des points d'apparition ennemis pour pouvoir jouer à ce mode. +mode.sandbox.name = Bac à Sable +mode.sandbox.description = Ressources infinies et pas de compte à rebours pour les vagues. mode.editor.name = Éditeur -mode.pvp.name = PvP -mode.pvp.description = Battez-vous contre d'autres joueurs en local.\n[gray]Requiert aux moins 2 noyaux de couleurs différentes dans la carte pour y jouer. +mode.pvp.name = JcJ +mode.pvp.description = Lutter contre d'autres joueurs pour gagner!\n[gray]Requiert au moins 2 Noyaux de couleurs différentes pour pouvoir jouer à ce mode. mode.attack.name = Attaque -mode.attack.description = Pas de vagues, le but étant de détruire la base ennemie.\n[gray]Requiert un noyau rouge dans la map pour y jouer. -mode.custom = Règles personnalisées +mode.attack.description = Pas forcément de vagues, le but étant de détruire la base ennemie.\n[gray]Requiert un Noyau rouge pour jouer à ce mode. +mode.custom = Règles Personnalisées -rules.infiniteresources = Ressources infinies +rules.infiniteresources = Ressources Infinies rules.reactorexplosions = Explosion des Réacteurs -rules.schematic = Schematics Allowed -rules.wavetimer = Minuterie pour les vagues +rules.coreincinerates = Incinération des surplus du Noyau +rules.schematic = Schémas autorisés +rules.wavetimer = Compte à rebours des vagues rules.waves = Vagues rules.attack = Mode « Attaque » -rules.buildai = AI Building +rules.buildai = Constructions de l'IA rules.enemyCheat = Ressources infinies pour l'IA (équipe rouge) rules.blockhealthmultiplier = Multiplicateur de Santé des Blocs rules.blockdamagemultiplier = Multiplicateur de Dégât des Blocs -rules.unitbuildspeedmultiplier = Multiplicateur de Vitesse de Construction d'Unités +rules.unitbuildspeedmultiplier = Multiplicateur de Vitesse de Construction des Unités rules.unithealthmultiplier = Multiplicateur de Santé des Unités rules.unitdamagemultiplier = Multiplicateur de Dégât des Unités -rules.enemycorebuildradius = Périmètre de non-construction autour du noyau ennemi:[lightgray] (blocs) -rules.wavespacing = Espacement des vagues:[lightgray] (sec) +rules.enemycorebuildradius = Périmètre de Non-Construction autour du Noyau ennemi:[lightgray] (blocs) +rules.wavespacing = Temps entre les Vagues:[lightgray] (sec) rules.buildcostmultiplier = Multiplicateur du prix de construction rules.buildspeedmultiplier = Multiplicateur du temps de construction rules.deconstructrefundmultiplier = Multiplicateur du remboursement lors de la déconstruction -rules.waitForWaveToEnd = Les Vagues Attendent la Mort des Ennemis -rules.dropzoneradius = Rayon d'Apparition des Ennemis:[lightgray] (tuiles) -rules.unitammo = Les Unités Nécessitent des Munitions +rules.waitForWaveToEnd = Les Vagues attendent la mort des ennemis +rules.dropzoneradius = Rayon d'Apparition des ennemis:[lightgray] (tuiles) +rules.unitammo = Les Unités nécessitent des munitions rules.title.waves = Vagues rules.title.resourcesbuilding = Ressources & Construction rules.title.enemy = Ennemis @@ -893,18 +963,20 @@ rules.title.unit = Unités rules.title.experimental = Expérimental rules.title.environment = Environment rules.lighting = Éclairage -rules.enemyLights = Enemy Lights -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage +rules.enemyLights = Éclairage ennemi +rules.fire = Feu +rules.explosions = Dégâts d'explosion des Blocs/Unités rules.ambientlight = Éclairage Ambiant -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: +rules.weather = Météo +rules.weather.frequency = Fréquence: +rules.weather.always = Permanent +rules.weather.duration = Durée: content.item.name = Objets content.liquid.name = Liquides content.unit.name = Unités content.block.name = Blocs +content.sector.name = Secteurs item.copper.name = Cuivre item.lead.name = Plomb @@ -916,7 +988,7 @@ item.silicon.name = Silicium item.plastanium.name = Plastanium item.phase-fabric.name = Tissu Phasé item.surge-alloy.name = Alliage Superchargé -item.spore-pod.name = Glande de Spore +item.spore-pod.name = Bulbe Sporifère item.sand.name = Sable item.blast-compound.name = Mélange Explosif item.pyratite.name = Pyratite @@ -928,7 +1000,7 @@ liquid.oil.name = Pétrole liquid.cryofluid.name = Liquide Cryogénique unit.dagger.name = Poignard -unit.mace.name = Mace +unit.mace.name = Titan unit.fortress.name = Forteresse unit.nova.name = Nova unit.pulsar.name = Pulsar @@ -942,7 +1014,7 @@ unit.flare.name = Flare unit.horizon.name = Horizon unit.zenith.name = Zenith unit.antumbra.name = Antumbra -unit.eclipse.name = Eclipse +unit.eclipse.name = Éclipse unit.mono.name = Mono unit.poly.name = Poly unit.mega.name = Mega @@ -956,89 +1028,90 @@ unit.omura.name = Omura unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma -unit.scepter.name = Scepter -unit.reign.name = Reign +unit.scepter.name = Destructeur +unit.reign.name = Éradicateur unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Resupply Point +block.resupply-point.name = Point de Rechargement block.parallax.name = Parallax block.cliff.name = Falaise block.sand-boulder.name = Bloc de Sable +block.basalt-boulder.name = Rocher de Basalte block.grass.name = Herbe block.slag.name = Scories -block.space.name = Space +block.space.name = Espace block.salt.name = Sel -block.salt-wall.name = Salt Wall +block.salt-wall.name = Mur de Sel block.pebbles.name = Cailloux block.tendrils.name = Vrilles -block.sand-wall.name = Sand Wall +block.sand-wall.name = Mur de Sable block.spore-pine.name = Pin Sporeux -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder +block.spore-wall.name = Mur de Spores +block.boulder.name = Rocher +block.snow-boulder.name = Bloc de Neige block.snow-pine.name = Pin enneigé block.shale.name = Schiste block.shale-boulder.name = Blocs de Schiste block.moss.name = Mousse block.shrubs.name = Arbustes -block.spore-moss.name = Mousse Sporeuse -block.shale-wall.name = Shale Wall +block.spore-moss.name = Mousse Sporifère +block.shale-wall.name = Mur de Schiste block.scrap-wall.name = Mur de Ferraille block.scrap-wall-large.name = Grand Mur de Ferraille block.scrap-wall-huge.name = Énorme Mur de Ferraille block.scrap-wall-gigantic.name = Gigantesque Mur de Ferraille block.thruster.name = Propulseur -block.kiln.name = Four +block.kiln.name = Four à Verre block.graphite-press.name = Presse à Graphite block.multi-press.name = Multi-Presse -block.constructing = {0}\n[lightgray](En Construction) +block.constructing = {0} [lightgray](En Construction) block.spawn.name = Point d'Apparition Ennemi -block.core-shard.name = Noyau: Tesson +block.core-shard.name = Noyau: Fragment block.core-foundation.name = Noyau: Fondation block.core-nucleus.name = Noyau: Épicentre block.deepwater.name = Eau profonde block.water.name = Eau block.tainted-water.name = Eau Contaminée -block.darksand-tainted-water.name = Eau Contaminée avec fond de Sable Sombre +block.darksand-tainted-water.name = Eau Contaminée avec fond de Sable sombre block.tar.name = Goudron block.stone.name = Roche block.sand.name = Sable -block.darksand.name = Sable Sombre +block.darksand.name = Sable sombre block.ice.name = Glace block.snow.name = Neige block.craters.name = Cratères block.sand-water.name = Eau avec fond de Sable -block.darksand-water.name = Eau avec fond de Sable Sombre -block.char.name = Cendre +block.darksand-water.name = Eau avec fond de Sable sombre +block.char.name = Cendres block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall -block.dacite-boulder.name = Dacite Boulder +block.dacite-wall.name = Mur de Dacite +block.dacite-boulder.name = Rocher de Dacite block.ice-snow.name = Neige et Glace -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = Mur de Pierre +block.ice-wall.name = Mur de Glace +block.snow-wall.name = Mur de Neige +block.dune-wall.name = Mur de Sable sombre block.pine.name = Pin -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = Terre +block.dirt-wall.name = Mur de Terre +block.mud.name = Boue block.white-tree-dead.name = Arbre Blanc Mort block.white-tree.name = Arbre Blanc -block.spore-cluster.name = Grappe de Spores -block.metal-floor.name = Plancher Métallique 1 -block.metal-floor-2.name = Plancher Métallique 2 -block.metal-floor-3.name = Plancher Métallique 3 -block.metal-floor-5.name = Plancher Métallique 4 -block.metal-floor-damaged.name = Plancher Métallique Endommagé -block.dark-panel-1.name = Panneau Sombre 1 -block.dark-panel-2.name = Panneau Sombre 2 -block.dark-panel-3.name = Panneau Sombre 3 -block.dark-panel-4.name = Panneau Sombre 4 -block.dark-panel-5.name = Panneau Sombre 5 -block.dark-panel-6.name = Panneau Sombre 6 -block.dark-metal.name = Métal Sombre -block.basalt.name = Basalt +block.spore-cluster.name = Grappes de Spores +block.metal-floor.name = Sol métallique +block.metal-floor-2.name = Sol métallique 2 +block.metal-floor-3.name = Sol métallique 3 +block.metal-floor-5.name = Sol métallique 5 +block.metal-floor-damaged.name = Sol métallique endommagé +block.dark-panel-1.name = Panneau sombre 1 +block.dark-panel-2.name = Panneau sombre 2 +block.dark-panel-3.name = Panneau sombre 3 +block.dark-panel-4.name = Panneau sombre 4 +block.dark-panel-5.name = Panneau sombre 5 +block.dark-panel-6.name = Panneau sombre 6 +block.dark-metal.name = Métal sombre +block.basalt.name = Basalte block.hotrock.name = Roches Chaudes block.magmarock.name = Roches Magmatiques block.copper-wall.name = Mur de Cuivre @@ -1057,12 +1130,11 @@ block.duo.name = Duo block.scorch.name = Brûleur block.scatter.name = Disperseur block.hail.name = Grêle -block.lancer.name = Lancier +block.lancer.name = Perforateur block.conveyor.name = Convoyeur block.titanium-conveyor.name = Convoyeur en Titane block.plastanium-conveyor.name = Convoyeur en Plastanium block.armored-conveyor.name = Convoyeur Cuirassé -block.armored-conveyor.description = Déplace les objets à la même vitesse que les convoyeurs en titane, mais est plus résistant. Seulement d'autres convoyeurs peuvent faire entrer des ressources par ses côtés. block.junction.name = Jonction block.router.name = Routeur block.distributor.name = Distributeur @@ -1070,7 +1142,6 @@ block.sorter.name = Trieur block.inverted-sorter.name = Trieur Inversé block.message.name = Message block.illuminator.name = Illuminateur -block.illuminator.description = Une petite source lumineuse compacte et configurable. Nécessite de l'énergie pour fonctionner. block.overflow-gate.name = Barrière de Débordement block.underflow-gate.name = Barrière de Refoulement block.silicon-smelter.name = Fonderie de Silicium @@ -1079,7 +1150,7 @@ block.pulverizer.name = Pulvérisateur block.cryofluid-mixer.name = Refroidisseur block.melter.name = Four à Fusion block.incinerator.name = Incinérateur -block.spore-press.name = Presse à Spore +block.spore-press.name = Presse à Spores block.separator.name = Séparateur block.coal-centrifuge.name = Centrifugeuse à Charbon block.power-node.name = Transmetteur Énergétique @@ -1093,7 +1164,7 @@ block.steam-generator.name = Générateur à Turbine block.differential-generator.name = Générateur Différentiel block.impact-reactor.name = Réacteur à Impact block.mechanical-drill.name = Foreuse Mécanique -block.pneumatic-drill.name = Foreuse à Vérin +block.pneumatic-drill.name = Foreuse Pneumatique block.laser-drill.name = Foreuse Laser block.water-extractor.name = Extracteur d'Eau block.cultivator.name = Cultivateur @@ -1107,15 +1178,15 @@ block.power-void.name = Absorbeur Énergétique block.power-source.name = Source d'Énergie block.unloader.name = Déchargeur block.vault.name = Coffre-Fort -block.wave.name = Onde +block.wave.name = Vague block.tsunami.name = Tsunami -block.swarmer.name = Nuée +block.swarmer.name = Essaim block.salvo.name = Salve -block.ripple.name = Percussion +block.ripple.name = Percuteur block.phase-conveyor.name = Convoyeur Phasé block.bridge-conveyor.name = Pont block.plastanium-compressor.name = Compresseur de Plastanium -block.pyratite-mixer.name = Mixeur de Pyratite +block.pyratite-mixer.name = Mixeur à Pyratite block.blast-mixer.name = Mixeur à Explosion block.solar-panel.name = Panneau Solaire block.solar-panel-large.name = Grand Panneau Solaire @@ -1124,218 +1195,313 @@ block.repair-point.name = Point de Réparation block.pulse-conduit.name = Conduit à Impulsion block.plated-conduit.name = Conduit Plaqué block.phase-conduit.name = Conduit Phasé -block.liquid-router.name = Routeur de Liquide -block.liquid-tank.name = Réservoir à Liquide -block.liquid-junction.name = Jonction à Liquide -block.bridge-conduit.name = Conduit Surélevé +block.liquid-router.name = Routeur de Liquides +block.liquid-tank.name = Réservoir à Liquides +block.liquid-junction.name = Jonction à Liquides +block.bridge-conduit.name = Pont à Liquide block.rotary-pump.name = Pompe Rotative block.thorium-reactor.name = Réacteur à Thorium -block.mass-driver.name = Catapulte Électromagnétique -block.blast-drill.name = Foreuse à Explosion -block.thermal-pump.name = Pompe Thermique -block.thermal-generator.name = Générateur Thermique +block.mass-driver.name = Transporteur de masse +block.blast-drill.name = Foreuse à explosion +block.thermal-pump.name = Pompe thermique +block.thermal-generator.name = Générateur thermique block.alloy-smelter.name = Fonderie d'Alliage Superchargé -block.mender.name = Réparateur -block.mend-projector.name = Projecteur Soignant +block.mender.name = Gardien +block.mend-projector.name = Projecteur soignant block.surge-wall.name = Mur Superchargé -block.surge-wall-large.name = Grand Mur Superchargé +block.surge-wall-large.name = Grand mur Superchargé block.cyclone.name = Cyclone -block.fuse.name = Fusible -block.shock-mine.name = Mine -block.overdrive-projector.name = Projecteur Surmultiplicateur -block.force-projector.name = Champ de Force +block.fuse.name = Fuse +block.shock-mine.name = Mine terrestre +block.overdrive-projector.name = Projecteur Accélérant +block.force-projector.name = Projecteur de Champ de force block.arc.name = Arc -block.rtg-generator.name = Générateur G.T.R. +block.rtg-generator.name = G.T.R block.spectre.name = Spectre -block.meltdown.name = Fusion -block.foreshadow.name = Foreshadow +block.meltdown.name = Meltdown +block.foreshadow.name = Présage block.container.name = Conteneur -block.launch-pad.name = Plateforme de Lancement -block.launch-pad-large.name = Grande Plateforme de Lancement -block.segment.name = Diviseur -block.command-center.name = Command Center -block.ground-factory.name = Usine d'Unité Terrestre -block.air-factory.name = Usine d'Unité Aérienne -block.naval-factory.name = Usine d'Unité Navale +block.launch-pad.name = Rampe de lancement +block.launch-pad-large.name = Grande rampe de lancement +block.segment.name = Diviseur +block.command-center.name = Centre de Commande +block.ground-factory.name = Usine d'Unités Terrestres +block.air-factory.name = Usine d'Unités Aériennes +block.naval-factory.name = Usine d'Unités Navales block.additive-reconstructor.name = Reconstructeur Additif block.multiplicative-reconstructor.name = Reconstructeur Multiplicatif block.exponential-reconstructor.name = Reconstructeur Exponentiel block.tetrative-reconstructor.name = Reconstructeur Tétratif block.payload-conveyor.name = Convoyeur de Masse -block.payload-router.name = Routeur de Charge Utile -block.disassembler.name = Disassembler -block.silicon-crucible.name = Creuset de Silicium -block.overdrive-dome.name = Overdrive Dome +block.payload-router.name = Routeur de Masse +block.disassembler.name = Désasembleur +block.silicon-crucible.name = Grande Fonderie de Silicium +block.overdrive-dome.name = Dome Accélérant +#experimental, may be removed +block.block-forge.name = Forgeur de Blocs +block.block-loader.name = Chargeur de Blocs +block.block-unloader.name = Déchargeur de Blocs +block.interplanetary-accelerator.name = Accélérateur Interplanétaire -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell -block.memory-bank.name = Memory Bank +block.switch.name = Interrupteur +block.micro-processor.name = Micro Processeur +block.logic-processor.name = Processeur +block.hyper-processor.name = Hyper Processeur +block.logic-display.name = Écran +block.large-logic-display.name = Grand Écran +block.memory-cell.name = Bloc de mémoire +block.memory-bank.name = Banque de mémoire team.blue.name = bleu team.crux.name = rouge -team.sharded.name = jaune +team.sharded.name = orange team.orange.name = orange -team.derelict.name = abandonné +team.derelict.name = derelict team.green.name = vert -team.purple.name = violet +team.purple.name = mauve -tutorial.next = [lightgray] -tutorial.intro = Bienvenue sur le [scarlet]Tutoriel de Mindustry![]\nUtilisez [accent][[ZQSD ou WASD][] pour vous déplacer.\nFaites [accent]rouler[] la molette de la souris pour zoomer et dézoomer.\nCommencez en minant du [accent]cuivre[]. Pour cela, allez près de votre noyau, puis faites un clic gauche sur un minerai de cuivre.\n\n[accent]{0}/{1} cuivre -tutorial.intro.mobile = Bienvenue sur le [scarlet]Tutoriel de Mindustry![]\nBalayez l'écran pour vous déplacer.\n[accent] Pincez avec deux doigts [] pour zoomer et dézoomer.\nCommencez en[accent] minant du cuivre[]. Pour cela, allez près de votre noyau, puis appuyez sur un minerai de cuivre.\n\n[accent]{0}/{1} cuivre -tutorial.drill = Miner manuellement est inefficace.\nLes [accent]foreuses []peuvent miner pour vous.\nCliquez sur l'onglet des foreuses en bas à droite.\nSélectionnez la [accent]foreuse mécanique[]. Placez-la ensuite sur des minerais de cuivre avec un clic-gauche.\nVous pouvez aussi sélectionner la foreuse en appuyant sur [accent][[2][] et [accent][[1][] rapidement, peu importe l'onglet ouvert.\n[accent]Faites un clic-droit[] pour arrêter la construction. -tutorial.drill.mobile = Miner manuellement est inefficace.\n[accent]Les foreuses []peuvent miner pour vous.\nAppuyez sur l'onglet des foreuses en bas à droite.\nSélectionnez la [accent]foreuse mécanique[].\nPlacez-la sur des minerais de cuivre en appuyant dessus, puis en touchant la[accent] coche[] pour confirmer votre placement.\nAppuyez sur le [accent]bouton X[] pour annuler le placement. -tutorial.blockinfo = Chaque bloc a des statistiques différentes. Chaque foreuse ne peut miner que certains minerais.\nPour vérifier les informations et les statistiques d'un bloc, appuyez sur le [accent]bouton "?" tout en le sélectionnant dans le menu de construction.[]\n\n[accent]Maintenant, essayez d'accéder aux statistiques de la foreuse mécanique.[] -tutorial.conveyor = [accent]Les convoyeurs[] sont utilisés pour transporter des objets au noyau.\nFaites une ligne de convoyeurs de la foreuse jusqu'au noyau.\n[accent]Maintenez votre souris pour les placer en ligne.[]\nGardez la touche[accent] CTRL[] enfoncée pour pouvoir les placer en diagonale.\n\nPlacez 2 convoyeurs en ligne, puis livrez un minerai au noyau. -tutorial.conveyor.mobile = [accent]Les convoyeurs[] sont utilisés pour transporter des objets au noyau.\nFaites une ligne de convoyeurs de la foreuse jusqu'au noyau.\n[accent] Maintenez votre doigt enfoncé[] et déplacez-le pour former une ligne.\n\nPlacez 2 convoyeurs en ligne, puis livrez un minerai au noyau. -tutorial.turret = Une fois qu'une ressource entre dans votre noyau, elle peut être utilisée pour la construction.\nGardez à l'esprit que certaines ressources ne peuvent pas être utilisées pour la construction.\nCes ressources, telles que[accent] le charbon[],[accent] le sable[] ou[accent] la ferraille[], ne peuvent pas entrer dans votre noyau.\nDes structures défensives doivent être construites pour repousser l'[lightgray] ennemi[].\nConstruisez une [accent]tourelle Duo[] près de votre noyau. -tutorial.drillturret = Les tourelles Duo ont besoin de[accent] munitions en cuivre []pour tirer.\nPlacez une foreuse près de la tourelle.\nÀ l'aide de convoyeurs, alimentez la tourelle en cuivre.\n\n[accent]Munitions livrées: 0/1 -tutorial.pause = Pendant les batailles, vous pouvez mettre [accent]le jeu en pause.[]\nVous pouvez planifier la construction de bâtiments tout en étant en pause.\n\n[accent]Appuyez sur la barre espace pour mettre en pause. -tutorial.pause.mobile = Pendant les batailles, vous pouvez mettre [accent]le jeu en pause.[]\nVous pouvez planifier la construction de bâtiments tout en étant en pause.\n\n[accent]Appuyez sur ce bouton en haut à gauche pour mettre en pause. -tutorial.unpause = Maintenant, appuyez à nouveau sur espace pour reprendre. -tutorial.unpause.mobile = Appuyez à nouveau dessus pour reprendre. -tutorial.breaking = Les blocs ou bâtiments doivent souvent être détruits.\n[accent]Gardez enfoncé le bouton droit de votre souris[] pour détruire tous les blocs en une sélection.[]\n\n[accent]Détruisez tous les blocs de ferraille situés à la gauche de votre noyau à l'aide de la sélection de zone. -tutorial.breaking.mobile = Les blocs ou bâtiments doivent souvent être détruits.\n[accent]Sélectionnez le mode de déconstruction[], puis appuyez sur un bloc pour commencer à le détruire.\nDétruisez une zone en maintenant votre doigt appuyé pendant quelques secondes[] et en le déplaçant dans une direction.\nAppuyez sur le bouton coche pour confirmer.\n\n[accent]Détruisez tous les blocs de ferraille situés à la gauche de votre noyau à l'aide de la sélection de zone. -tutorial.withdraw = Dans certaines situations, il est nécessaire de prendre des ressources directement à partir des bâtiments.\nPour faire cela, [accent]appuyez sur un bloc[] qui contient des ressources, puis [accent]appuyez sur une ressource[] dans son inventaire.\nPlusieurs objets d'une même ressource peuvent être retirées en [accent]appuyant pendant quelques secondes[].\n\n[accent]Retirez du cuivre du noyau.[] -tutorial.deposit = Vous pouvez déposer des ressources dans des bâtiments en les faisant glisser de votre vaisseau vers le bâtiment de destination.\n\n[accent]Déposez le cuivre récupéré précédemment dans le noyau.[] -tutorial.waves = L'[lightgray] ennemi[] approche.\n\nDéfendez le noyau pendant 2 vagues.[accent] Cliquez[] pour tirer.\nConstruisez plus de tourelles et de foreuses. Minez plus de cuivre. -tutorial.waves.mobile = L'[lightgray] ennemi[] approche.\n\nDéfendez le noyau pendant 2 vagues. Votre vaisseau tirera automatiquement sur les ennemis.\nConstruisez plus de tourelles et de foreuses. Minez plus de cuivre. -tutorial.launch = Une fois que vous aurez atteint une vague spécifique, vous aurez la possibilité de[accent] faire décoller le noyau[], abandonnant vos défenses, mais [accent]sécurisant toutes les ressources stockées dans votre noyau.[]\nCes ressources peuvent ensuite être utilisées pour rechercher de nouvelles technologies.\n\n[accent]Appuyez sur le bouton de lancement. +hint.skip = Passer +hint.desktopMove = Utilisez [accent][[ZQSD][] pour bouger. +hint.zoom = [accent]Scroller[] pour zoomer et dézoomer. +hint.mine = Bougez vers le \uf8c4 minerai de cuivre et [accent]cliquez[] dessus mour le miner manuellement. +hint.desktopShoot = [accent][[Clic-gauche][] pour tirer. +hint.depositItems = Pour déposer des ressources dans le Noyau, déplacez-les depuis votre vaisseau, vers ce dernier. +hint.respawn = Pour réapparaître en tant que vaisseau, presser [accent][[V][]. +hint.respawn.mobile = Vous avez pris le contrôle d'une unité/structure. Pour réapparaître en tant que vaisseau, [accent]touchez l'avatar en haut à gauche.[] +hint.desktopPause = Pressez [accent][[Espace][] pour pauser et reprendre le jeu. +hint.placeDrill = Sélectionnez l'onglet \ue85e [accent]Foreuses[] dans le menu en bas à droite, sélectionnez une \uf870 [accent]Foreuse[] et cliquez sur un filon de cuivre pour la placer. +hint.placeDrill.mobile = Sélectionnez l'onglet \ue85e [accent]Foreuses[] dans le menu en bas à droite, sélectionnez une \uf870 [accent]Foreuse Méchanique[] et touchez un filon de cuivre pour la placer.\n\nPressez le \ue800 [accent]V[] en bas à droite pour confirmer. +hint.placeConveyor = Les Convoyeurs transportent les ressources des foreuses, vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nCliquez et maintenez pour placer plusieurs convoyeurs.\n[accent]Scrollez[] pour les faire pivoter. +hint.placeConveyor.mobile = Les Convoyeurs transportent les ressources des foreuses, vers d'autres blocs. Sélectionnez un \uf896 [accent]Convoyeur[] dans l'onglet \ue814 [accent]Distribution[].\n\nMaintenez votre doigt et déplacez-le pour placer plusieurs convoyeurs. +hint.placeTurret = Placez des \uf861 [accent]Tourelles[] pour défendre votre base contre les ennemis.\n\nLes Tourelles nécessitent des munitions (dans ce cas, du \uf838Cuivre).\nUtilisez les convoyeurs et les foreuses pour les ravitailler. +hint.breaking = Maintenez [accent]Clic-droit[] pour détruire des blocs. +hint.breaking.mobile = Activez le \ue817 [accent]marteau[] en bas à droite Touchez pour détruire des blocs.\n\nRetenez votre doigt pendant une seconde et déplacez-le pour détruire les blocs dans la zone de sélection. +hint.research = Utilisez le bouton \ue875 [accent]Recherche[] pour rechercher de nouvelles technologies. +hint.research.mobile = Utilisez le bouton \ue875 [accent]Recherche[] dans le \ue88c [accent]Menu[] pour rechercher de nouvelles technologies. +hint.unitControl = Retenez [accent][[Ctrl-gauche][] et [accent]cliquez[] Pour contrôler une tourelle ou une unité alliée. +hint.unitControl.mobile = [accent][[Tapez][] 2 fois une tourelle ou une unité alliée pour la controler. +hint.launch = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] en bas à droite. +hint.launch.mobile = Une fois que vous avez collecté assez de ressources, vous pouvez [accent]Lancer[] votre Noyau en sélectionnant un secteur depuis la \ue827 [accent]Carte[] dans le \ue88c [accent]Menu[]. +hint.schematicSelect = Retenez [accent][[F][] pour sélectionner des blocs dans une zone afin de les copier et les coller.\n\n[accent][[Clic du milieu][] pour copier un seule type de bloc. +hint.conveyorPathfind = Retenez [accent][[Ctrl-gauche][] pendant que vous placez des convoyeurs, afin de générer un chemin automatiquement. +hint.conveyorPathfind.mobile = Activez le mode \ue844 [accent]Diagonale[] et déplacez des convoyeurs, afin de générer un chemin automatiquement. +hint.boost = Retenez [accent][[Maj-gauche][] pour voler au-dessus des obstacles avec votre unité actuelle.\n\nSeules quelques unités terrestres peuvent voler. +hint.command = Pressez [accent][[G][] pour commander les unités proches d'un [accent]type similaire[] et bouger une formation.\n\nSeules les unités terrestres peuvent controller d'autres unités terrestres. +hint.command.mobile = [accent][[Tapez][] 2 fois votre unité pour commander les unités proches d'un [accent]type similaire[] et bouger une formation. +hint.payloadPickup = Pressez [accent][[[] pour transporter des blocs ou des unités. +hint.payloadPickup.mobile = [accent]Tapez et retenez[] votre doigt pour transporter des blocs ou des unités. +hint.payloadDrop = Pressez [accent]][] pour larguer votre chargement. +hint.payloadDrop.mobile = [accent]Tapez et retenez[] votre doigt pour larguer votre chargement. +hint.waveFire = [accent]Les tourelles à liquides[] approvisionnées en eau en tant que munition, vont automatiquement éteindre les incendies proches. +hint.generator = \uf879 Les [accent]Générateurs à combustion[] brûlent du Charbon et transmettent de l'énergie aux blocs adjacents.\n\nLa transmission d'énergie peut être étendue avec des \uf87f [accent]Transmetteurs Énergétiques[]. +hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien. +hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un  Noyau [accent]Fondation[] sur le  Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction. +hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[]. +hint.coreIncinerate = Lorsqu'un Noyau est remplit d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[]. +hint.coopCampaign = Quand vous jouez en [accent]campagne multi-joueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées. -item.copper.description = Le matériau structurel de base. Utilisation très répandue dans tous les types de blocs. +item.copper.description = Le matériau structurel de base. Utilisation très répandue dans tous les types de blocs et en tant que munition. +item.copper.details = Le cuivre est un matériau anormalement abondant sur Serpulo. Il est structurellement faible à moins d'être renforcé. item.lead.description = Un matériau de départ. Utilisation très répandue en électronique et dans les blocs de transport de liquides. +item.lead.details = Dense et inerte, il est beaucoup utilisé dans les batteries.\nNote: Probablement toxique pour les formes de vie biologiques. Mais ce n'est pas comme s’il en restait beaucoup ici. item.metaglass.description = Un composé de verre super-résistant. Utilisation très répandue pour le transport et le stockage de liquides. -item.graphite.description = Du carbone minéralisé utilisé pour les munitions et l’isolation électrique. -item.sand.description = Un matériau commun largement utilisé dans la fonte, à la fois dans l'alliage et comme un flux. -item.coal.description = De la matière végétale fossilisée, formée bien avant l’ensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources. -item.titanium.description = Un métal rare et super-léger largement utilisé dans le transport de liquides, dans les foreuses de hauts niveaux et dans l'aviation. -item.thorium.description = Un métal dense et radioactif utilisé comme support structurel et comme carburant nucléaire. -item.scrap.description = Un mix de métaux provenant des restes de vieilles structures et d'unités. Contient des traces de nombreux métaux différents. +item.graphite.description = Du carbone minéralisé utilisé pour les munitions et dans les composants électriques. +item.sand.description = Un matériau commun, largement utilisé pour la fabrication de matériaux raffinés. +item.coal.description = Un carburant commun et facile à obtenir. +item.coal.details = De la matière végétale fossilisée, formée bien avant l’ensemencement de ce monde. Utilisation très répandue pour la production de carburant et de ressources. +item.titanium.description = Un métal rare et super-léger, largement utilisé dans le transport de liquides, dans les foreuses de haut niveau et dans l'aviation. +item.thorium.description = Un métal dense et radioactif, utilisé comme support structurel et comme carburant nucléaire. +item.scrap.description = Il est utilisé dans les fours à fusion et les pulvériseurs, pour être raffiné en d'autres matériauxs. +item.scrap.details = Un mix de métaux provenant des restes de vieilles structures et d'unités. Contient des traces de nombreux métaux différents. item.silicon.description = Un matériau semi-conducteur extrêmement pratique utilisé dans les panneaux solaires, dans les munitions autoguidées et dans beaucoup d'autres composants électroniques complexes. -item.plastanium.description = Un matériau léger et ductile utilisé dans l'aviation avancée et dans les munitions à fragmentation. -item.phase-fabric.description = Une substance au poids quasiment inexistant utilisée pour l'électronique avancée et la technologie auto-réparatrice. -item.surge-alloy.description = Un alliage avancé avec des propriétés électriques uniques. -item.spore-pod.description = Une glande de spores synthétisées à partir de concentrations atmosphériques à des fins industrielles et utilisé pour la conversion en pétrole, en explosifs et en carburant. -item.blast-compound.description = Un composé instable synthétisé à partir de glandes de spores ou bien d'autres composés volatils et utilisé dans les bombes ainsi que dans les autres explosifs. Bien qu'il puisse être utilisé comme carburant, ce n'est pas conseillé. -item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires. +item.plastanium.description = Un matériau léger et ductile, utilisé dans l'isolation, la fabrication d'unités avancées et dans les munitions à fragmentation. +item.phase-fabric.description = Une substance au poids quasiment inexistant, utilisée pour l'électronique avancée et la technologie auto-réparatrice. +item.surge-alloy.description = Un alliage avancé aux propriétés électriques uniques, utilisé dans l'armement avancé. +item.spore-pod.description = Les bulbes sporifères sont utilisés pour l'obtention d'huile, d'explosifs et de carburants. +item.spore-pod.details = Les spores dont des formes de vies synthetiques, émettant des gaz qui sont toxiques pour les autres formes de vie biologiques. Elles sont extrêmement invasives et Très inflammables dans certaines conditions. +item.blast-compound.description = Un matériau utilisé dans les bombes et les munitions explosives. +item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires et comme combustible pour les générateurs. + liquid.water.description = Le liquide le plus utile. Couramment utilisé pour le refroidissement et le traitement des déchets. liquid.slag.description = Différents types de métaux en fusion mélangés. Peut être séparé en ses minéraux constitutifs ou tout simplement pulvérisé sur les unités ennemies. liquid.oil.description = Un liquide utilisé dans la production de matériaux avancés. Peut être transformé en charbon ou pulvérisé sur les ennemis, puis enflammé. liquid.cryofluid.description = Un liquide inerte, non corrosif, créé à partir d’eau et de titane. Possède une capacité d'absorption de chaleur extrêmement élevée. Largement utilisé comme liquide de refroidissement. -block.message.description = Enregistre un message. Utilisé pour la communication entre alliés. -block.graphite-press.description = Compresse des morceaux de charbon en feuilles de graphite pur. -block.multi-press.description = Une version améliorée de la presse à graphite. Utilise de l'eau et de l'électricité pour traiter le charbon rapidement et efficacement. -block.silicon-smelter.description = Réduit le sable avec du charbon pur. Produit du silicium. -block.kiln.description = Fait fondre le sable et le plomb en verre trempé. Nécessite une petite quantité d'énergie. +block.resupply-point.description = Approvisionne les unités proches en munitions. Pas compatible avec celles qui ont besoin d'énergie pour tirer. +block.illuminator.description = Une petite source lumineuse compacte et configurable. Nécessite de l'énergie pour fonctionner. +block.armored-conveyor.description = Déplace les objets à la même vitesse que les convoyeurs en titane, mais est plus résistant. Seulement d'autres convoyeurs peuvent faire entrer des ressources par ses côtés. +block.message.description = Enregistre un message. Utilisé pour la communication entre alliés. Le message contenu peut être modifié par un processeur logique. +block.graphite-press.description = Compresse le charbon en graphite. +block.multi-press.description = Une version améliorée de la presse à graphite, utilisant de l'eau et de l'électricité pour traiter le charbon plus rapidement et plus efficacement. +block.silicon-smelter.description = Raffine du silicium avec du sable et du charbon. +block.kiln.description = Fait fondre le sable et le plomb en verre trempé. block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane. -block.phase-weaver.description = Produit du tissu phasé à partir de thoriums et de grandes quantités de sable. Nécessite une quantité massive d'énergie pour fonctionner. +block.phase-weaver.description = Synthétise du tissu phasé à partir de thorium et de grandes quantités de sable. Nécessite une quantité massive d'énergie pour fonctionner. block.alloy-smelter.description = Produit un alliage superchargé à l'aide de titane, de plomb, de silicium et de cuivre. -block.cryofluid-mixer.description = Mélange de l’eau et de la fine poudre de titane pour former du liquide cryogénique. Indispensable lors de l'utilisation de réacteurs aux thoriums. -block.blast-mixer.description = Écrase et mélange les amas de spores avec de la pyratite pour produire un mélange explosif. -block.pyratite-mixer.description = Mélange le charbon, le plomb et le sable en pyratite hautement inflammable. -block.melter.description = Fait fondre la ferraille en scories pour un traitement ultérieur ou une utilisation dans les tourelles « Onde ». +block.cryofluid-mixer.description = Mélange de l’eau et de la poudre fine de titane pour former du liquide cryogénique. Indispensable lors de l'utilisation de réacteurs à thorium. +block.blast-mixer.description = Écrase et mélange des amas de spores avec de la pyratite pour produire un mélange explosif. +block.pyratite-mixer.description = Mélange du charbon, du plomb et du sable en pyratite hautement inflammable. +block.melter.description = Fait fondre la ferraille en scories. block.separator.description = Expose la scorie à de l'eau sous pression afin d'obtenir les différents minéraux qu'elle contient. -block.spore-press.description = Compresse les glandes de spore sous une pression extrême pour synthétiser du pétrole. +block.spore-press.description = Compresse des spores pour synthétiser du pétrole. block.pulverizer.description = Écrase la ferraille pour en faire du sable. Utile quand il y a un manque de sable naturel. block.coal-centrifuge.description = Solidifie le pétrole en blocs de charbon. -block.incinerator.description = Permet de se débarrasser de n'importe quel objet ou liquide en excès. +block.incinerator.description = Incinère ou vaporise n'importe quel objet ou liquide qu'il reçoit. block.power-void.description = Absorbe toute l'énergie qui va à l'intérieur. Bac à sable uniquement. block.power-source.description = Produit de l'énergie à l'infini. Bac à sable uniquement. -block.item-source.description = Produit des objets à l'infini. Bac à sable uniquement . +block.item-source.description = Produit des objets à l'infini. Bac à sable uniquement. block.item-void.description = Désintègre n'importe quel objet qui va à l'intérieur. Bac à sable uniquement. block.liquid-source.description = Source de liquide infinie. Bac à sable uniquement. block.liquid-void.description = Détruit n'importe quel liquide. Bac à sable uniquement. block.copper-wall.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues. -block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues.\n2 x 2. -block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les ennemis. -block.titanium-wall-large.description = Un bloc défensif standard.\nProcure une protection modérée contre les ennemis.\n2 x 2. -block.plastanium-wall.description = Un mur spécial qui absorbe les arcs électriques et bloque les connections automatiques des transmetteurs énergétiques. -block.plastanium-wall-large.description = Un mur spécial qui absorbe les arcs électriques et bloque les connections automatiques des transmetteurs énergétiques.\n2 x 2. -block.thorium-wall.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les ennemis. -block.thorium-wall-large.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les ennemis.\n2 x 2. -block.phase-wall.description = Moins puissant qu'un mur en Thorium mais dévie les balles, sauf si elles sont trop puissantes. -block.phase-wall-large.description = Moins puissant qu'un mur en Thorium mais dévie les balles, sauf si elles sont trop puissantes.\n2 x 2. -block.surge-wall.description = Le plus puissant bloc défensif .\nA une faible chance de créer des éclairs vers les ennemis . -block.surge-wall-large.description = Le plus puissant bloc défensif .\nA une faible chance de créer des éclairs vers les ennemis .\n2 x 2. -block.door.description = Une petite porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte les ennemis peuvent tirer et passer à travers. -block.door-large.description = Une large porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte les ennemis peuvent tirer et passer à travers.\n2 x 2. -block.mender.description = Soigne périodiquement les bâtiments autour de lui. Permet de garder les défenses en bon état entre les vagues ennemies.\nPeut utiliser du Silicium pour booster la portée et l'efficacié. -block.mend-projector.description = Une version améliorée du Réparateur. Soigne périodiquement les bâtiments autour de lui.\nPeut utiliser du tissu phasé pour booster la portée et l'efficacié. -block.overdrive-projector.description = Accélère le fonctionnement des bâtiments autour de lui, notamment les foreuses et les convoyeurs.\nPeut utiliser du tissu phasé pour booster la portée et l'efficacié. -block.force-projector.description = Crée un champ de force hexagonal autour de lui qui protège des dégâts les bâtiments et les unités à l'intérieur.\nSurchauffe si trop de dégâts sont reçus. Peut utiliser du liquide cryogénique pour éviter la surchauffe. Peut utiliser du tissu phasé pour booster la taille du bouclier. -block.shock-mine.description = Blesse les ennemis qui marchent dessus. Quasiment invisible pour l'ennemi. +block.copper-wall-large.description = Un bloc défensif à faible coût.\nUtile pour protéger la base et les tourelles lors des premières vagues. +block.titanium-wall.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies. +block.titanium-wall-large.description = Un bloc défensif standard.\nProcure une protection modérée contre les attaques ennemies. +block.plastanium-wall.description = Un mur spécial qui peut absorber les arcs électriques et bloquer les connections automatiques des transmetteurs énergétiques. +block.plastanium-wall-large.description = Un mur spécial qui absorber les arcs électriques et bloquer les connections automatiques des transmetteurs énergétiques. +block.thorium-wall.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les attaques ennemies. +block.thorium-wall-large.description = Un bloc défensif puissant.\nProcure une très bonne protection contre les attaques ennemies. +block.phase-wall.description = Ce mur est moins puissant qu'un mur en thorium, mais il peut dévier les balles, sauf si elles sont trop puissantes. +block.phase-wall-large.description = Ce mur est moins puissant qu'un mur en thorium, mais il peut dévier les balles, sauf si elles sont trop puissantes. +block.surge-wall.description = Le plus puissant bloc défensif.\nA une faible chance de créer des éclairs vers les ennemis. +block.surge-wall-large.description = Le plus puissant bloc défensif.\nA une faible chance de créer des éclairs vers les ennemis. +block.door.description = Une petite porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte, les ennemis peuvent passer à travers. +block.door-large.description = Une grande porte pouvant être ouverte et fermée en appuyant dessus.\nSi elle est ouverte, les ennemis peuvent passer à travers. +block.mender.description = Soigne périodiquement les bâtiments autour de lui, ce qui permet de remettre les défenses en bon état entre les vagues ennemies.\nPeut utiliser du silicium pour booster la portée et l'efficacité. +block.mend-projector.description = Une version améliorée du Gardien. Soigne périodiquement les bâtiments autour de lui.\nPeut utiliser du tissu phasé pour booster la portée et l'efficacité. +block.overdrive-projector.description = Accélère le fonctionnement des bâtiments autour de lui, notamment les foreuses et les convoyeurs.\nPeut utiliser du tissu phasé pour booster la portée et l'efficacité. +block.force-projector.description = Crée un champ de force hexagonal autour de lui, qui protège des dégâts les bâtiments et les unités à l'intérieur.\nSurchauffe si trop de dégâts sont reçus. De l'eau ou du liquide cryogénique peuvent être utilisés pour ralentir la surchauffe et/ou accélérer le refroidissement. Peut utiliser du tissu phasé pour booster la taille du bouclier. +block.shock-mine.description = Blesse les ennemis qui marchent dessus. block.conveyor.description = Convoyeur basique servant à transporter des objets. Les objets déplacés en avant sont automatiquement déposés dans les tourelles ou les bâtiments. Peut être tourné. -block.titanium-conveyor.description = Convoyeur avancé. Déplace les objets plus rapidement que les convoyeurs standard. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. +block.titanium-conveyor.description = Convoyeur avancé. Déplace les objets plus rapidement que les convoyeurs standards. +block.plastanium-conveyor.description = Convoyeur transportant les ressources par paquets. Accepte les ressources par derrière et les déchargent par 3 directions à l'avant. Pour une efficacité maximale, utilisez plusieurs points de chargement et de déchargement pour une même ligne. block.junction.description = Agit comme un pont pour deux lignes de convoyeurs se croisant. Utile lorsque deux lignes de convoyeurs différentes déplacent différents matériaux à différents endroits. -block.bridge-conveyor.description = Bloc de transport avancé permettant de traverser jusqu'à 3 blocs de n'importe quel terrain ou bâtiment. -block.phase-conveyor.description = Convoyeur très avancé. Utilise de l'énergie pour téléporter des objets à un convoyeur phasé connecté jusqu'à une longue distance. +block.bridge-conveyor.description = Bloc de transport avancé permettant de traverser jusqu'à 3 blocs, au-dessus de n'importe quel terrain ou bâtiment. +block.phase-conveyor.description = Convoyeur très avancé. Utilise de l'énergie pour téléporter des objets à un autre convoyeur phasé. Possède une longue portée. block.sorter.description = Trie les ressources. Si une ressource correspond à la sélection, elle peut passer tout droit. Autrement, elle est distribuée vers la gauche ou la droite. -block.inverted-sorter.description = Trie les ressources comme un trieur standard, mais ceux correspondant à la sélection sont envoyés sur les côtés. Le reste est envoyé tout droit. -block.router.description = Accepte les objets depuis une ou plusieurs directions et les renvoie dans n'importe quelle direction. Utile pour séparer une chaîne de convoyeurs en plusieurs. -block.distributor.description = Un routeur avancé qui répartit équitablement les objets entre au plus 7 directions différentes.\n2x2 -block.overflow-gate.description = Bloc envoyant les ressources à gauche et à droite si le chemin de devant est bloqué. -block.underflow-gate.description = Le contraire d'une barrière de débordement.\nEnvoie les ressources vers l'avant si les chemins de gauche et de droite sont bloqués. -block.mass-driver.description = Le moyen de transport de resources ultime. Collecte plusieurs ressources puis les envoie à une autre catapulte sur une longue distance. Nécessite de l'énergie pour fonctionner. -block.mechanical-pump.description = Une pompe de faible prix pompant lentement, mais ne consommant pas d'énergie. -block.rotary-pump.description = Une pompe avancée plus rapide mais utilisant de l'énergie.\n2x2 -block.thermal-pump.description = La pompe ultime.\n3x3 -block.conduit.description = Bloc de transport de liquide de base. Fait avancer les liquides. Utilisé avec des pompes et autres conduits. +block.inverted-sorter.description = Trie les ressources comme un trieur standard, mais celles qui correspondent à la sélection sont envoyées sur les côtés. Le reste est envoyé tout droit. +block.router.description = Accepte les objets depuis une ou plusieurs directions et les renvoie équitablement dans n'importe quelle direction. Utile pour séparer une chaîne de convoyeurs en plusieurs. +block.router.details = Un mal nécessaire... Utiliser un routeur à côté d'une usine est très déconseillé, car ceux-ci peuvent être bloqués par les matériaux produits par celle-ci. +block.distributor.description = Un routeur avancé qui répartit équitablement les objets jusqu'à 7 directions différentes. +block.overflow-gate.description = Bloc envoyant les ressources à gauche et à droite si le chemin de devant est bloqué. Ne peut pas être utilisée si elle est à côté d'une autre barrière. +block.underflow-gate.description = Le contraire d'une barrière de débordement. Envoie les ressources vers l'avant si les chemins de gauche et de droite sont bloqués. Ne peut pas être utilisée si elle est à côté d'une autre barrière. +block.mass-driver.description = Le moyen de transport de ressources ultime! Cette structure collecte des lots de ressources et les envoie à un autre transporteur de masse, sur une longue distance. Nécessite de l'énergie pour fonctionner. +block.mechanical-pump.description = Une pompe basique et bon marché qui pompe lentement des liquides. Elle ne consomme pas d'énergie. +block.rotary-pump.description = Une pompe avancée, plus rapide, mais utilisant de l'énergie. +block.thermal-pump.description = La pompe ultime. +block.conduit.description = Bloc de transport de liquide de base, faisant avancer les liquides. Utilisé avec des pompes et autres conduits. block.pulse-conduit.description = Conduit avancé permettant le transport de liquide. Transporte les liquides plus rapidement et en stocke plus que les conduits standards. -block.plated-conduit.description = Déplace les liquides au même rythme que les conduits à impulsion, mais est renforcé. N'accepte pas de liquides provenant des côtés par autre chose que des conduits.\nFuit moins. -block.liquid-router.description = Accepte les liquides depuis une direction et les rejette de tous les côtés équitablement. Peut aussi stocker une certaine quantité de liquide. Utile pour envoyer un liquide à plusieurs endroits. -block.liquid-tank.description = Stocke une grande quantité de liquide. Utile pour réguler la sortie quand la demande est inconstante ou comme sécurité pour refroidir des bâtiments importants. -block.liquid-junction.description = Agit comme une jonction pour deux conduits se croisant. Utile si deux conduits amènent différents liquides à différents endroits. -block.bridge-conduit.description = Bloc de transport de liquide avancé. Permet le transport de liquides à travers 3 blocs de n'importe quel terrain ou bâtiment au plus. +block.plated-conduit.description = Déplace les liquides au même rythme que les conduits à impulsion, mais est renforcé et empêche les fuites en cas de rupture. N'accepte pas les liquides provenant des côtés, seuls les autres conduits peuvent le faire. +block.liquid-router.description = Accepte les liquides depuis une direction et les distribue jusqu'à 3 directions équitablement. Utile pour envoyer un liquide à plusieurs endroits. Peut aussi stocker une certaine quantité de liquide. +block.liquid-tank.description = Stocke une grande quantité de liquide et peut les distribuer dans tous les côtés, un peu comme un routeur liquide.\nUtile pour réguler la sortie quand la demande en liquide si elle est inconstante ou comme sécurité pour refroidir des bâtiments importants. +block.liquid-junction.description = Agit comme un pont pour deux conduits se croisant. Utile si deux conduits amènent différents liquides à différents endroits. +block.bridge-conduit.description = Bloc de transport de liquide avancé permettant de traverser jusqu'à 3 blocs, au-dessus de n'importe quel terrain ou bâtiment. block.phase-conduit.description = Conduit très avancé permettant le transport de liquide. Utilise de l'énergie pour téléporter les liquides à un autre conduit phasé sur une longue distance. -block.power-node.description = Transmet l'énergie aux transmetteurs énergétiques connectés. Le transmetteur recevra de l'énergie ou la transmettra à n'importe quel bâtiment adjacent, mais la connexion peut être activé/désactivé manuellement -block.power-node-large.description = Possède un rayon plus grand que le transmetteur énergétique standard, connectant d'autant plus de consommateurs ou transmetteurs d'énergie. +block.power-node.description = Transmet de l'énergie aux autres transmetteurs énergétiques connectés. Le transmetteur recevra de l'énergie ou la transmettra à n'importe quel bâtiment adjacent. La connexion peut être activée/désactivée manuellement. +block.power-node-large.description = Ce transmetteur possède un rayon plus grand que le transmetteur énergétique standard. Il peut aussi accepter plus de connexions. block.surge-tower.description = Un transmetteur énergétique de très grande portée mais avec moins de connections disponibles. -block.diode.description = L'énergie ne peut circuler à travers ce bloc que dans un sens, et uniquement si l’autre côté présente moins d’énergie en stock. +block.diode.description = L'énergie ne circule que dans un sens à travers ce bloc, et uniquement si l’autre côté présente moins d’énergie en stock. Idéal pour protéger les lieux de production d'énergie. block.battery.description = Stocke le surplus d'énergie et le redistribue en cas de besoin. -block.battery-large.description = Stocke bien plus d'énergie qu'une batterie normale. +block.battery-large.description = Stocke bien plus d'énergie qu'une batterie normale. block.combustion-generator.description = Génère de l'énergie en brûlant du charbon ou d'autres matériaux inflammables. block.thermal-generator.description = Génère une grande quantité d'énergie à partir de zones de chaleur. block.steam-generator.description = Plus efficace qu'un générateur à combustion, mais requiert de l'eau. block.differential-generator.description = Génère de grandes quantités d'énergie en utilisant la différence de température entre le liquide cryogénique et la pyratite brûlante. -block.rtg-generator.description = Un générateur thermo-électrique à radioisotope qui ne demande pas de refroidissement mais produit moins d'énergie qu'un réacteur à Thorium. +block.rtg-generator.description = Un générateur thermo-électrique à radioisotope qui ne demande pas de refroidissement, mais produit moins d'énergie qu'un réacteur à Thorium. block.solar-panel.description = Génère une faible quantité d'énergie grâce aux rayons du soleil. block.solar-panel-large.description = Génère bien plus d'énergie qu'un panneau solaire standard, mais est aussi bien plus cher à construire. block.thorium-reactor.description = Génère énormément d'énergie à l'aide de la radioactivité du thorium. Requiert néanmoins un refroidissement constant. Explosera violemment en cas de surchauffe. -block.impact-reactor.description = Un générateur avancé, capable de produire une quantité d'énergie gigantesque lorsqu'il atteint son efficacité maximale. Nécessite une quantité significative d'énergie pour lancer le générateur. -block.mechanical-drill.description = Une foreuse de faible coût. Si elle est placée sur un endroit approprié, produit des matériaux lentement à l'infini. -block.pneumatic-drill.description = Une foreuse améliorée plus rapide et capable de forer des matériaux plus durs comme le titane grâce à l'usage de vérins à air comprimé. -block.laser-drill.description = Permet de forer bien plus vite grâce à la technologie laser, mais requiert de l'énergie . Permet de miner le Thorium, un matériau radioactif. -block.blast-drill.description = La Foreuse ultime . Demande une grande quantité d'énergie. -block.water-extractor.description = Extrait l'eau des nappes phréatiques. Utile quand il n'y a pas d'eau à proximité. -block.cultivator.description = Cultive le sol avec de l'eau afin d'obtenir de la biomasse. -block.oil-extractor.description = Utilise une grande quantité d'énergie afin d'extraire du pétrole à partir de sable. Utile quand il n'y a pas de lacs de pétrole à proximité. -block.core-shard.description = La première version du noyau. Une fois détruite tout contact avec la région est perdu. Ne laissez pas cela se produire. -block.core-foundation.description = La deuxième version du noyau. Meilleur blindage. Stocke plus de ressources. -block.core-nucleus.description = La troisième et dernière version du noyau. Extrêmement bien blindée. Stocke des quantités importantes de ressources. -block.vault.description = Stocke un grand nombre d'objets. Utile pour réguler le flux d'objets quand la demande de matériaux est inconstante. Un [lightgray] déchargeur[] peut être utilisé pour récupérer des objets depuis le coffre-fort. -block.container.description = Stocke un petit nombre d'objets. Utile pour réguler le flux d'objets quand la demande de matériaux est inconstante. Un [lightgray] déchargeur[] peut être utilisé pour récupérer des objets depuis le conteneur. -block.unloader.description = Décharge des objets depuis des conteneurs, coffres-forts ou d'un noyau sur un convoyeur ou directement dans un bloc adjacent. Le type d'objet peut être changé en appuyant sur le déchargeur. -block.launch-pad.description = Permet de transférer des ressources sans attendre le lancement du noyau. -block.launch-pad-large.description = Une version améliorée de la plateforme de lancement. Stocke plus de ressources et les envoie plus fréquemment. +block.impact-reactor.description = Ce réacteur est capable de produire de gigantesques quantités d'énergie lorsqu'il atteint son efficacité maximale. Nécessite une quantité significative d'énergie pour pouvoir le démarrer. +block.mechanical-drill.description = Une foreuse basique. Si elle est placée sur un endroit approprié, elle produira des matériaux lentement et indéfiniment. +block.pneumatic-drill.description = Une foreuse améliorée, plus rapide et capable de forer des minerais plus durs comme le titane. +block.laser-drill.description = Permet de forer bien plus vite grâce à la technologie laser, mais requiert de l'énergie pour fonctionner. Permet de miner du Thorium, un matériau radioactif. +block.blast-drill.description = La Foreuse ultime. Demande une grande quantité d'énergie pour fonctionner. +block.water-extractor.description = Extrait l'eau des nappes phréatiques. Utile quand il n'y a pas d'étendue d'eau à proximité. +block.cultivator.description = Cultive une petite quantité de spores atmosphériques afin de former des bulbes sporifères. +block.cultivator.details = Technologie de récupération. Utilisée pour produire des quantités massives de biomasse aussi efficacement que possible. Probablement l’incubateur initial des spores qui couvrent maintenant Serpulo. +block.oil-extractor.description = Utilise de grandes quantités d'énergie pour extraire le pétrole du sable. Utilisez-le lorsqu'il n'y a pas de source directe de pétrole à proximité. +block.core-shard.description = Le coeur de votre base. Une fois détruit, le secteur est perdu. Ne laissez pas cela arriver. +block.core-shard.details = La première version du Noyau. Il est compact, doté d'un module d'auto-réplication et est équippé de propulseurs de lancement à usage unique. Equipped with single-use launch thrusters. Ceux-ci n'ont pas été conçus pour le voyage interplanétaire. +block.core-foundation.description = Le coeur de votre base. Cette version améliorée possède un meilleur blindage et stocke plus de ressources qu'un Noyau fragment. +block.core-foundation.details = La seconde version. +block.core-nucleus.description = Le coeur de votre base. Ce Noyau est extrêmement bien blindé et stocke des quantités massives de ressources. +block.core-nucleus.details = La version finale. +block.vault.description = Stocke un grand nombre d'objets de chaque type. Utilisez un déchargeur pour les récupérer.\nUtile pour réguler le flux d'objets quand la demande de matériaux est inconstante. +block.container.description = Stocke un petit nombre d'objets de chaque type. Utilisez un déchargeur pour les récupérer.\nUtile pour réguler le flux d'objets quand la demande de matériaux est inconstante. +block.unloader.description = Permet de décharger l'objet choisi, depuis les blocs adjacents. +block.launch-pad.description = Permet de transférer des ressources vers les secteurs sélectionnés. block.duo.description = Une petite tourelle à faible coût. Fonctionne bien contre les ennemis terrestres. block.scatter.description = Une tourelle anti-aérienne essentielle. Mitraille les ennemis de débris de plomb, de ferraille ou de verre trempé. block.scorch.description = Brûle les ennemis terrestres près de lui. Très efficace à courte portée. -block.hail.description = Une petite tourelle d'artillerie. Efficace à longue portée. -block.wave.description = Une tourelle de taille moyenne tirant rapidement des jets de liquide. Peut éteindre les incendies si elle est alimentée en eau. +block.hail.description = Une petite tourelle d'artillerie visant les ennemis terrestres. Efficace à longue portée. +block.wave.description = Une tourelle de taille moyenne tirant un jet de liquide. Peut éteindre les incendies automatiquement si elle est alimentée en eau. block.lancer.description = Une tourelle de taille moyenne chargeant et tirant de puissants lasers aux ennemis terrestres. -block.arc.description = Une petite tourelle de petite portée tirant des arcs électriques sur les ennemis. -block.swarmer.description = Une tourelle de taille moyenne attaquant les ennemis terrestres et aériens à l'aide de missiles autoguidés. +block.arc.description = Une petite tourelle tirant des arcs électriques sur les ennemis. +block.swarmer.description = Une tourelle de taille moyenne attaquant les ennemis terrestres et aériens à l'aide de missiles autoguidés. Consomme beaucoup de munitions. block.salvo.description = Une version plus grande et améliorée de la tourelle Duo. Tire par salves. block.fuse.description = Une tourelle de grande taille et de petite portée. Elle perce les lignées ennemis avec ses trois tirs de sharpnel. -block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs salves simultanément sur de très longues distances. -block.cyclone.description = Une grande tourelle qui tire rapidement des débris explosifs aux ennemis terrestres et aériens. -block.spectre.description = Une tourelle massive à double cannon et qui tire de puissantes balles perce-blindages simultanément. +block.ripple.description = Lance des amas d’obus sur les ennemis terrestres sur de très longues distances. +block.cyclone.description = Une grande tourelle qui tire rapidement des balles explosives aux ennemis proches. +block.spectre.description = Une tourelle massive à double cannon qui tire de puissantes balles perçantes. block.meltdown.description = Une tourelle massive chargeant et tirant de puissants rayons lasers. Nécessite un liquide de refroidissement. +block.foreshadow.description = Une tourelle massive tirant une puissante balle sur une cible, sur de très longues distances. Elle vise les unités ayant le plus de santé en priorité. block.repair-point.description = Soigne en permanence l'unité endommagée la plus proche à proximité. -block.segment.description = Endommage et détruit les tirs ennemis. Cependant, les lasers ne peuvent pas être ciblés. +block.segment.description = Endommage et détruit les tirs ennemis. Les lasers ne peuvent pas être ciblés. +block.parallax.description = Tire un rayon tracteur qui attire les ennemis volants, infligeant aussi des dégâts. +block.tsunami.description = Tire un puissant jet de liquide aux ennemis. Peut éteindre les incendies automatiquement si elle est alimentée en eau. +block.silicon-crucible.description = Raffine du silicium avec du sable et du charbon en utilisant de la pyratite comme source de chaleur additionelle. Cette usine est plus efficace dans les endroits chauds. +block.disassembler.description = Cette verion avancée du séparateur peut produire du thorium. +block.overdrive-dome.description = Accélère le fonctionnement des bâtiments autour de lui. Requiert du silicium et du tissu phasé pour fonctionner. +block.payload-conveyor.description = Ce grand convoyeur peut déplacer de gros chargements, comme des unité depuis leurs usines ou bien des conteneurs. +block.payload-router.description = Distribue les chargements qui entrent dans 3 directions différentes. +block.command-center.description = Contrôle le comportement des unités avec plusieurs commandes différentes. +block.ground-factory.description = Produit des unités terrestres. Elles peuvent être soit utilisées directement, soit envoyées vers des reconstructeurs pour être améliorées. +block.air-factory.description = Produit des unités aériennes. Elles peuvent être soit utilisées directement, soit envoyées vers des reconstructeurs pour être améliorées. +block.naval-factory.description = Produit des unités navales. Elles peuvent être soit utilisées directement, soit envoyées vers des reconstructeurs pour être améliorées. +block.additive-reconstructor.description = Améliore les unités entrantes au second niveau. +block.multiplicative-reconstructor.description = Améliore les unités entrantes au troisième niveau. +block.exponential-reconstructor.description = Améliore les unités entrantes au quatrième niveau. +block.tetrative-reconstructor.description = Améliore les unités entrantes au cinquième niveau. +block.switch.description = Un interupteur pouvant être activé/désactivé. Le statut peut être lu et controllé avec des processeurs logiques. +block.micro-processor.description = Exécute une séquence d'instructions en bloucle. Peut être utilisé pour controller des unités ou des bâtiments. +block.logic-processor.description = Exécute une séquence d'instructions en bloucle. Peut être utilisé pour controller des unités ou des bâtiments. Plus rapide qu'un micro processeur. +block.hyper-processor.description = Exécute une séquence d'instructions en bloucle. Peut être utilisé pour controller des unités ou des bâtiments. Plus rapide qu'un processeur. +block.memory-cell.description = Stocke des informations pour un processeur logique. +block.memory-bank.description = Stocke des informations pour un processeur logique. Possède une plus grande capacité. +block.logic-display.description = Affiche des images à partir des instructions d'un processeur logique. +block.large-logic-display.description = Affiche des images à partir des instructions d'un processeur logique. Possède une plus grande résolution qu'un écran. +block.interplanetary-accelerator.description = Un énorme canon électromagnétique à rails. Accélère les Noyaux pour qu'ils échappent à la gravité de leur planète et leur permettre un déploiement interplanétaire. + +unit.dagger.description = Tire des balles normales aux ennemis proches. +unit.mace.description = Tire des jets de flammes aux ennemis proches. +unit.fortress.description = Tire des balles d’artillerie à longue portée, sur des cibles terrestres. +unit.scepter.description = Tire un barrage de balles superchargées aux ennemis proches. +unit.reign.description = Tire un barrage de grosses balles perçantes aux ennemis proches. +unit.nova.description = Tire des balles laser qui infligent des dégâts aux ennemis et réparent les structures alliées. Est capable de voler. +unit.pulsar.description = Tire des arcs électriques qui infligent des dégâts aux ennemis et réparent les structures alliées. Est capable de voler. +unit.quasar.description = Tire des faisceaux laser qui infligent des dégâts aux ennemis et réparent les structures alliées. Est capable de voler et est dotée d'un champ de force. +unit.vela.description = Tire un rayon laser continu qui inflige des dégâts aux ennemis, cause des incendies aux structures ennemies et répare les structures alliées. Est capable de voler. +unit.corvus.description = Tire un rayon laser massif qui inflige des dégâts aux ennemis et répare les structures alliées. Peut marcher sur de la plupart des terrains. +unit.crawler.description = Court vers un ennemi proche pour s'auto-détruire, causant une large explosion. +unit.atrax.description = Tire des orbes débilitants de scories sur des cibles terrestres. Peut marcher sur de la plupart des terrains. +unit.spiroct.description = Tire des faisceaux laser sapants aux ennemis proches, le réparant aussi. Peut marcher sur de la plupart des terrains. +unit.arkyid.description = Tire de larges faisceaux laser sapants aux ennemis proches, le réparant aussi. Peut marcher sur de la plupart des terrains. +unit.toxopid.description = Tire de larges obus électriques et des lasers perçants aux ennemis proches. Peut marcher sur de la plupart des terrains. +unit.flare.description = Tire des balles normales cibles terrestres. +unit.horizon.description = Largue des bombes sur des cibles terrestres. +unit.zenith.description = Tire des salves de missiles sur les ennemis proches. +unit.antumbra.description = Tire un barrage de balles aux ennemis proches. +unit.eclipse.description = Tire 2 lasers perçants et un barrage de balles explosives aux ennemis proches. +unit.mono.description = Mine automatiquement du cuivre et du plomb et le dépose dans un Noyau proche. +unit.poly.description = Reconstruit automatiquement les structures détruites (sauf les réacteurs au thorium) et assiste les autres unités lorsqu'elles construisent. +unit.mega.description = Répare automatiquement les structures endommagées. Capable de transporter des blocs et de petites unités terrestres. +unit.quad.description = Largue de grosses bombes sur des cibles terrestres, réparant les structures alliées et infligeant des dégâts aux ennemis. Capable de transporter des blocs et des unités terrestres de taille moyenne. +unit.oct.description = Protège les alliés proches avec son champ de force auto-regénérant. Capable de transporter des blocs et de grosses unités terrestres. +unit.risso.description = Tire un barrage de missiles et de balles aux ennemis proches. +unit.minke.description = Tire des obus et des balles normales aux ennemis proches. +unit.bryde.description = Tire des obus d'artillerie à longue portée et des missiles aux ennemis proches. +unit.sei.description = Tire un barrage de missiles et de balles perçantes aux ennemis proches. +unit.omura.description = Tire avec un canon à rails à longue portée, une puissante balle perçante aux ennemis proches. Possède une usine à flares. +unit.alpha.description = Défend le Noyau fragment contre les ennemis. Peut construire des structures. +unit.beta.description = Défend le Noyau fondation contre les ennemis. Peut construire des structures. +unit.gamma.description = Défend le Noyau épicentre contre les ennemis. Peut construire des structures. diff --git a/core/assets/bundles/bundle_fr_BE.properties b/core/assets/bundles/bundle_fr_BE.properties deleted file mode 100644 index 8975031cb64a..000000000000 --- a/core/assets/bundles/bundle_fr_BE.properties +++ /dev/null @@ -1,1335 +0,0 @@ -credits.text = Créé par [royal]Anuken[] - [sky]anukendev@gmail.com[] -credits = Crédits -contributors = Traducteurs et contributeurs -discord = Rejoignez le discord de Mindustry ! -link.discord.description = Le discord officiel de Mindustry -link.reddit.description = Le subreddit de Mindustry -link.github.description = Code source du jeu -link.changelog.description = Liste des mises à jour -link.dev-builds.description = Versions instables de développement -link.trello.description = Trello officiel pour les fonctionnalités planifiées. -link.itch.io.description = Site itch.io avec les versions téléchargeables pour ordinateur. -link.google-play.description = Page Google Play du jeu -link.f-droid.description = F-Droid catalogue listing -link.wiki.description = Wiki officiel de Mindustry -link.suggestions.description = Suggérer des nouvelles fonctionallitées -linkfail = L'ouverture du lien a échoué!\nL'URL a été copiée dans votre presse-papier. -screenshot = Capture d'écran enregistrée sur {0} -screenshot.invalid = Carte trop grande, potentiellement pas assez de mémoire pour la capture d'écran. -gameover = Le base a été détruite. -gameover.pvp = L'équipe[accent] {0}[] a gagnée ! -highscore = [accent]Nouveau meilleur score ! -copied = Copié. -indev.popup = [accent]La v6[] est actuellement en [accent]alpha[].\n[lightgray]Cela signifie :[]\n[scarlet]- La campagne est totalement incomplète[]\n- Il manque du contenu\n - La plupart des [scarlet]IA d'unités[] ne fonctionne pas correctement\n- De nombreuses unités ne sont pas terminées\n- Tout ce que vous voyez est susceptible d'être modifié ou supprimé.\n\nMerci de rapporter les bugs/crash sur [accent]Github[]. -indev.notready = Cette partie du jeu n'est pas encore prête - -load.sound = Son -load.map = Maps -load.image = Images -load.content = Contenu -load.system = Système -load.mod = Mods -load.scripts = Scripts - -be.update = Une nouvelle version est disponible: -be.update.confirm = Voulez vous la télécharger et recommencer maintenant ? -be.updating = En train de mettre à jour... -be.ignore = Ignorer -be.noupdates = Aucune mise à jour n'as été trouvée. -be.check = Chercher des mises à jour - -schematic = Schéma -schematic.add = Enregistrer Schéma... -schematics = Schémas -schematic.replace = Un schéma avec ce nom existe déjà. Voulez vous le remplacer ? -schematic.exists = Un schéma avec ce nom existe déjà. -schematic.import = Importer le Schéma... -schematic.exportfile = Exporter Dossier -schematic.importfile = Importer Dossier -schematic.browseworkshop = Parcourir l'Atelier -schematic.copy = Copier dans le presse-papier -schematic.copy.import = Importer du presse-papier -schematic.shareworkshop = Partager sur l'Atelier -schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Retourner Schéma -schematic.saved = Schéma enregistré. -schematic.delete.confirm = Ce Schéma sera définitivement supprimé. -schematic.rename = Renommer Schéma -schematic.info = {0}x{1}, {2} blocks -schematic.disabled = [scarlet] Schémas désactivés ![]\nVous n'êtes pas autorisés à utiliser des schémas sur cette [accent]map[] ou ce [accent]serveur. - -stat.wave = Vagues vaincues:[accent] {0} -stat.enemiesDestroyed = Ennemies détruits:[accent] {0} -stat.built = Bâtiments construits:[accent] {0} -stat.destroyed = Bâtiments détruits:[accent] {0} -stat.deconstructed = Bâtiments déconstruits:[accent] {0} -stat.delivered = Ressources transférées: -stat.playtime = Temps Joué:[accent] {0} -stat.rank = Rang Final: [accent]{0} - -globalitems = [accent]Global Items -map.delete = Êtes-vous sûr de vouloir supprimer cette carte ?"[accent]{0}[]"? -level.highscore = Meilleur score: [accent]{0} -level.select = Sélection de niveau -level.mode = Mode de jeu: -coreattack = -nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nextermination imminente -database = Base de données -savegame = Sauvegarder la partie -loadgame = Charger la partie -joingame = Rejoindre la partie -customgame = Partie personnalisée -newgame = Nouvelle partie -none = -minimap = Minimap -position = Position -close = Fermer -website = Site Web -quit = Quitter -save.quit = Save & Quit -maps = Cartes -maps.browse = Feuilleter les maps -continue = Continuer -maps.none = [lightgray]Aucune carte trouvée! -invalid = Invalide -pickcolor = Choisir Couleur -preparingconfig = Préparation Configuration -preparingcontent = Préparation Contenu -uploadingcontent = Télécharger Contenu -uploadingpreviewfile = Télécharger Aperçu de Dossier -committingchanges = Commettre Changements -done = Fini -feature.unsupported = Votre appareil ne prend pas en charge cette fonctionnalité. - -mods.alphainfo = Tenez en compte que les mods sont en version alpha et [scarlet] qu'ils peuvent avoir des bugs[].\nVeuillez signaler tout les problèmes que vous encontrez sur le Github de Mindustry ou sur Discord. -mods = Mods -mods.none = [lightgray]Aucun Mod trouvé ! -mods.guide = Guide de Modding -mods.report = Signaler un Bug -mods.openfolder = Ouvrir Dossier Mod -mods.reload = Relancer -mods.reloadexit = Le jeu va quitter pour relancer les mods. -mod.display = [gray]Mod:[orange] {0} -mod.enabled = [lightgray]Activé -mod.disabled = [scarlet]Désactivé -mod.disable = Désactive -mod.content = Contenu: -mod.delete.error = Unable to delete mod. File may be in use. -mod.requiresversion = [scarlet]Requires min game version: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) -mod.missingdependencies = [scarlet]Missing dependencies: {0} -mod.erroredcontent = [scarlet]Content Errors -mod.errors = Errors have occurred loading content. -mod.noerrorplay = [scarlet]You have mods with errors.[] Either disable the affected mods or fix the errors before playing. -mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled. -mod.enable = Enable -mod.requiresrestart = The game will now close to apply the mod changes. -mod.reloadrequired = [scarlet]Reload Required -mod.import = Import Mod -mod.import.file = Import File -mod.import.github = Import GitHub Mod -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! -mod.item.remove = This item is part of the[accent] '{0}'[] mod. To remove it, uninstall that mod. -mod.remove.confirm = This mod will be deleted. -mod.author = [lightgray]Author:[] {0} -mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0} -mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again. -mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods. -mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. - -about.button = À propos -name = Nom: -noname = Choisissez d'abord [accent]un pseudo[]. -planetmap = Planet Map -launchcore = Launch Core -filename = Nom du fichier: -unlocked = Nouveau bloc debloqué! -completed = [accent]Terminé -techtree = Arbre technologique -research.list = [lightgray]Recherche: -research = Recherche -researched = [lightgray]{0} recherché. -research.progress = {0}% complete -players = {0} joueurs -players.single = {0} joueur -players.search = search -players.notfound = [gray]no players found -server.closing = [accent]Fermeture du serveur ... -server.kicked.kick = Vous avez été expulsé du serveur ! -server.kicked.whitelist = You are not whitelisted here. -server.kicked.serverClose = Serveur fermé. -server.kicked.vote = Vous avez été expulsé par vote. Au revoir. -server.kicked.clientOutdated = Client dépassé! Mettez à jour votre jeu ! -server.kicked.serverOutdated = Serveur dépassé! Demandez à l'hôte de le mettre à jour ! -server.kicked.banned = Vous êtes banni de ce serveur. -server.kicked.typeMismatch = This server is not compatible with your build type. -server.kicked.playerLimit = Ce serveur est complet. Attendez qu'une place ce libére. -server.kicked.recentKick = Vous avez été expulsé récemment.\nAttendez avant de vous connecter à nouveau. -server.kicked.nameInUse = Il y a déjà quelqu'un avec ce nom\nsur ce serveur. -server.kicked.nameEmpty = Votre nom doit contenir au moins une lettre ou un chiffre. -server.kicked.idInUse = Vous êtes déjà sur ce serveur ! Se connecter avec deux comptes n'est pas permis ! -server.kicked.customClient = Ce serveur ne supporte pas les versions personnalisées (Custom builds). Télécharger une version officielle. -server.kicked.gameover = Vous avez perdu ! -server.kicked.serverRestarting = Le serveur est entrain de redémarrer. -server.versions = Votre version:[accent] {0}[]\nVersion du serveur:[accent] {1}[] -host.info = Le bouton [accent]héberger[] héberge un serveur sur les ports [scarlet]6567[] et [scarlet]6568.[]\nN'importe qui sur le même [lightgray]réseau wifi ou local[] devrait pouvoir voir votre serveur dans sa liste de serveurs.\n\nSi vous voulez que les gens puissent se connecter de n'importe où grâce à l'IP, [accent]rediriger les ports[] est requis.\n\n[lightgray]Note:Si quelqu'un éprouve des difficultés à se connecter à votre partie LAN, assurez-vous que vous avez autorisé Mindustry à accéder à votre réseau local dans les paramètres de votre pare-feu. -join.info = Ici, vous pouvez entrer l' [accent]IP d'un serveur[] pour s'y connecter, ou découvrir les serveurs[accent]sur votre réseau local[] pour s'y connecter.\nLes parties multijoueur LAN et WAN sont toutes deux supportées.\n\n[lightgray]Note: Aucune liste globale des serveurs n'est génerée automatiquement: si vous voulez vous connecter à un serveur par IP, vous devrez demander l'IP à l'hébergeur. -hostserver = Héberger un serveur -invitefriends = Inviter des amis -hostserver.mobile = Héberger\nune partie -host = Héberger -hosting = [accent]Ouverture du serveur ... -hosts.refresh = Actualiser -hosts.discovering = Recherche de parties en LAN -hosts.discovering.any = Découverte des jeux -server.refreshing = Actualisation du serveur -hosts.none = [lightgray]Aucun jeu en LAN trouvé ! -host.invalid = [scarlet]Impossible de se\nconnecter à l'hôte. - -servers.local = Serveurs Locaux -servers.remote = Serveurs Distants -servers.global = Serveurs Communautaires - -trace = Suivre le joueur -trace.playername = Nom du joueur: [accent]{0} -trace.ip = IP: [accent]{0} -trace.id = ID Unique: [accent]{0} -trace.mobile = Client Mobile: [accent]{0} -trace.modclient = Client personnalisé: [accent]{0} -invalidid = ID client invalide ! Soumettre un rapport de bug -server.bans = Banni -server.bans.none = Aucun joueur banni trouvé ! -server.admins = Administrateurs -server.admins.none = Aucun administrateur trouvé ! -server.add = Ajouter un serveur -server.delete = Êtes-vous sûr de vouloir supprimer ce serveur ? -server.edit = Modifier le serveur -server.outdated = [crimson]Serveur obsolète ![] -server.outdated.client = [crimson]Client obsolète ![] -server.version = [lightgray]Version: {0} {1} -server.custombuild = [accent]Version personnalisée -confirmban = Êtes-vous sûr de vouloir bannir ce joueur ? -confirmkick = Êtes-vous sûr de vouloir expulser ce joueur ? -confirmvotekick = Êtes-vous sûr de vouloir voter que ce joueur soit banni ? -confirmunban = Êtes-vous sûr de vouloir annuler le ban de ce joueur ? -confirmadmin = Êtes-vous sûr de vouloir faire de ce joueur un administrateur ? -confirmunadmin = Êtes-vous sûr de vouloir supprimer le statut d'administrateur de ce joueur ? -joingame.title = Rejoindre une partie -joingame.ip = IP: -disconnect = Déconnecté. -disconnect.error = Un problème est survenu lors de la connection. -disconnect.closed = Connection fermée. -disconnect.timeout = Timed out. -disconnect.data = Les données du monde n'ont pas pu être chargées ! -cantconnect = Impossible de rejoindre le jeu ([accent]{0}[]). -connecting = [accent]Connexion... -connecting.data = [accent]Chargement des données du monde... -server.port = Port: -server.addressinuse = Adresse déjà utilisée ! -server.invalidport = Numéro de port incorrect ! -server.error = [crimson]Erreur lors de l'hébergement du serveur: [accent]{0} -save.new = Nouvelle sauvegarde -save.overwrite = Êtes-vous sûr de vouloir\nrecouvrir cette sauvegarde ? -overwrite = Recouvrir -save.none = Aucune sauvegarde trouvée ! -savefail = Échec de la sauvegarde ! -save.delete.confirm = Êtes-vous sûr de supprimer cette sauvegarde ? -save.delete = Supprimer -save.export = Exporter une\nSauvegarde -save.import.invalid = [accent]Cette sauvegarde est invalide! -save.import.fail = [crimson]L'importation de la sauvegarde\na échouée: [accent]{0} -save.export.fail = [crimson]L'exportation de la sauvegarde\na échouée: [accent]{0} -save.import = Importer une sauvegarde -save.newslot = Nom de la sauvegarde: -save.rename = Renommer -save.rename.text = Nouveau nom: -selectslot = Sélectionnez une sauvegarde. -slot = [accent]Emplacement {0} -editmessage = Modifier le Message -save.corrupted = [accent]Fichier de sauvegarde corrompu ou invalide!\nSi vous venez de mettre à jour votre jeu, c'est probablement dû à un changement du format de sauvegarde et [scarlet]non[] un bug. -empty = -on = Allumer -off = Éteint -save.autosave = Sauvegarde automatique {0} -save.map = Carte: {0} -save.wave = Vague {0} -save.mode = Mode de jeu {0} -save.date = Dernière sauvegarde: {0} -save.playtime = Temps de jeu: {0} -warning = Avertissement. -confirm = Confirmer -delete = Supprimer -view.workshop = View In Workshop -workshop.listing = Edit Workshop Listing -ok = OK -open = Ouvrir -customize = Personnaliser -cancel = Annuler -openlink = Ouvrir le lien -copylink = Copier le lien -back = Retour -data.export = Export Data -data.import = Import Data -data.openfolder = Open Data Folder -data.exported = Data exported. -data.invalid = Ceci ne sont pas des données de jeu valide. -data.import.confirm = Importing external data will erase[scarlet] all[] your current game data.\n[accent]This cannot be undone![]\n\nOnce the data is imported, your game will exit immediately. -quit.confirm = Êtes-vous sûr de vouloir quitter? -quit.confirm.tutorial = Are you sure you know what you're doing?\nThe tutorial can be re-taken in[accent] Settings->Game->Re-Take Tutorial.[] -loading = [accent]Chargement... -reloading = [accent]Reloading Mods... -saving = [accent]Sauvegarde... -respawn = [accent][[{0}][] to respawn in core -cancelbuilding = [accent][[{0}][] to clear plan -selectschematic = [accent][[{0}][] to select+copy -pausebuilding = [accent][[{0}][] to pause building -resumebuilding = [scarlet][[{0}][] to resume building -wave = [accent]Vague {0} -wave.cap = [accent]Wave {0}/{1} -wave.waiting = [lightgray]Prochaine vague dans {0} -wave.waveInProgress = [lightgray]Vague en cours -waiting = [lightgray]En attente... -waiting.players = En attente de joueurs ... -wave.enemies = [lightgray]{0} Ennemis restants -wave.enemy = [lightgray]{0} Ennemi restant -wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. -wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. -loadimage = Charger l'image -saveimage = Sauvegarder l'image -unknown = Inconnu -custom = Personnalisé -builtin = Pré-fait -map.delete.confirm = Êtes-vous sûr de vouloir effacer cette carte ? Cette action est irréversible ! -map.random = [accent]Carte aléatoire -map.nospawn = Cette carte ne possède pas de base pour que le joueur puisse apparaître !Ajouter un [royal]base bleue[] sur cette carte dans l'éditeur. -map.nospawn.pvp = Cette carte ne contient aucune base ennemi dans lequel le joueur apparaît!\nAjoutez des bases [scarlet]rouge[] à cette carte dans l'éditeur. -map.nospawn.attack = Cette carte ne contient aucune base ennemi à attaquer! Ajoutez des bases [scarlet]rouge[] à cette carte dans l'éditeur. -map.invalid = Erreur lors du chargement de la carte: carte corrompue ou invalide. -workshop.update = Update Item -workshop.error = Error fetching workshop details: {0} -map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up! -workshop.menu = Select what you would like to do with this item. -workshop.info = Item Info -changelog = Changelog (optional): -eula = Steam EULA -missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. -publishing = [accent]Publishing... -publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up! -publish.error = Error publishing item: {0} -steam.error = Failed to initialize Steam services.\nError: {0} - -editor.brush = Pinceau -editor.openin = Ouvrir dans l'éditeur -editor.oregen = Génération des minerais -editor.oregen.info = Génération de minerais: -editor.mapinfo = Infos sur la carte -editor.author = Auteur: -editor.description = Description: -editor.nodescription = A map must have a description of at least 4 characters before being published. -editor.waves = Vagues: -editor.rules = Règles: -editor.generation = Generation: -editor.ingame = Modifier en jeu -editor.publish.workshop = Publish On Workshop -editor.newmap = Nouvelle carte -editor.center = Center -workshop = Workshop -waves.title = Vagues -waves.remove = Retirer -waves.never = -waves.every = tous les -waves.waves = vague(s) -waves.perspawn = par apparition -waves.shields = shields/wave -waves.to = à -waves.guardian = Guardian -waves.preview = Prévisualiser -waves.edit = Modifier... -waves.copy = Copier dans le Presse-papiers -waves.load = Coller depuis le Presse-papiers -waves.invalid = Vagues invalides dans le Presse-papiers. -waves.copied = Vagues copiées. -waves.none = Aucun ennemi défini.\nNotez que les dispositions vides seront automatiquement remplacées par la dispositions par défaut. - -wavemode.counts = counts -wavemode.totals = totals -wavemode.health = health - -editor.default = [lightgray] -details = Details... -edit = Modifier... -editor.name = Nom: -editor.spawn = Ajouter une unité -editor.removeunit = Retirer l'unité -editor.teams = Équipes -editor.errorload = Erreur lors du chargement du fichier:\n[accent]{0} -editor.errorsave = Erreur lors de la sauvegarde du fichier:\n[accent]{0} -editor.errorimage = C’est une image, pas une carte.\n\nSi vous souhaitez importer une carte 3.5/build 40, utilisez le bouton "Importer une carte héritée" dans l’éditeur. -editor.errorlegacy = Cette carte est trop ancienne et utilise un format de carte qui n'est plus pris en charge. -editor.errornot = Ce n'est pas un fichier de carte. -editor.errorheader = Ce fichier de carte n'est pas valide ou corrompu. -editor.errorname = La carte n'a pas de nom ! -editor.update = Mettre à jour -editor.randomize = Randomiser -editor.apply = Appliquer -editor.generate = Générer -editor.resize = Redimensionner -editor.loadmap = Charger une carte -editor.savemap = Sauvegarder une carte -editor.saved = Sauvegardé ! -editor.save.noname = Votre carte ne possède pas de nom ! Ajouter en un dans le menu 'Infos sur la carte'. -editor.save.overwrite = Une carte posséde déjà ce nom ! Choisissez un nom différent dans le menu 'Infos sur la carte'. -editor.import.exists = [scarlet]Importation impossible :[] Une carte nommé '{0}' existe déjà! -editor.import = Importation... -editor.importmap = Importer une carte -editor.importmap.description = Importer une carte déjà existante -editor.importfile = Importer un fichier -editor.importfile.description = Importer une carte à partir d'un fichier externe -editor.importimage = Importer la carte existante -editor.importimage.description = Importer une image de terrain à partir d'un fichier externe -editor.export = Exportation en cours... -editor.exportfile = Exporter un fichier -editor.exportfile.description = Exporter une carte -editor.exportimage = Exporter l'image du terrain -editor.exportimage.description = Exporter la carte sous forme d'image -editor.loadimage = Importer le terrain -editor.saveimage = Exportr le terrain -editor.unsaved = [scarlet] Vous avez des changements non sauvegardés ![] Êtes-vous sûr de vouloir quitter ? -editor.resizemap = Redimensionner\nla carte -editor.mapname = Nom de la carte: -editor.overwrite = [accent]Attention!\nCela écrasera une carte existante. -editor.overwrite.confirm = [scarlet]Attention ![] Une carte avec ce nom existe déjà. Êtes-vous sûr de vouloir la réécrire? -editor.exists = A map with this name already exists. -editor.selectmap = Sélectionnez une carte à charger: - -toolmode.replace = Remplacer -toolmode.replace.description = Dessine uniquement sur des blocs pleins. -toolmode.replaceall = Remplacer tout -toolmode.replaceall.description = Remplacez tous les blocs de la carte. -toolmode.orthogonal = Orthogonale -toolmode.orthogonal.description = Dessine uniquement des lignes orthogonales. -toolmode.square = Carré -toolmode.square.description = Pinceau carré. -toolmode.eraseores = Effacer les minerais -toolmode.eraseores.description = N'effacez que les minerais. -toolmode.fillteams = Remplir les équipes -toolmode.fillteams.description = Remplissez les équipes au lieu de blocs. -toolmode.drawteams = Tirage au sort des équipes -toolmode.drawteams.description = Dessinez des équipes au lieu de blocs. - -filters.empty = [lightgray]Aucun filtre! Ajoutez-en un avec les boutons ci-dessous. -filter.distort = Déformation -filter.noise = Bruit -filter.enemyspawn = Enemy Spawn Select -filter.spawnpath = Path To Spawn -filter.corespawn = Core Select -filter.median = Median -filter.oremedian = Ore Median -filter.blend = Mélange -filter.defaultores = Minerais par défaut -filter.ore = Minerai -filter.rivernoise = Bruit des rivières -filter.mirror = Miroir -filter.clear = Nettoyer -filter.option.ignore = Ignorer -filter.scatter = Dispersement -filter.terrain = Terrain -filter.option.scale = Échelle -filter.option.chance = Chance -filter.option.mag = Magnitude -filter.option.threshold = Seuil -filter.option.circle-scale = Échelle du cercle -filter.option.octaves = Octaves -filter.option.falloff = Diminution -filter.option.angle = Angle -filter.option.amount = Amount -filter.option.block = Bloc -filter.option.floor = Sol -filter.option.flooronto = Sible au sol -filter.option.target = Target -filter.option.wall = Mur -filter.option.ore = Minerai -filter.option.floor2 = Sol secondaire -filter.option.threshold2 = Seuil secondaire -filter.option.radius = Rayon -filter.option.percentile = Centile - -width = Largeur: -height = Hauteur: -menu = Menu -play = Jouer -campaign = Campagne -load = Charger -save = Sauvegarder -fps = FPS: {0} -ping = Ping: {0}ms -language.restart = Veuillez redémarrez votre jeu pour le changement de langage prenne effet. -settings = Paramètres -tutorial = Tutoriel -tutorial.retake = Re-Take Tutorial -editor = Éditeur -mapeditor = Éditeur de carte - -abandon = Abandonner -abandon.text = Cette zone et toutes ses ressources seront perdues. -locked = Verrouillé -complete = [lightgray]Compléter: -requirement.wave = Reach Wave {0} in {1} -requirement.core = Destroy Enemy Core in {0} -requirement.research = Research {0} -requirement.capture = Capture {0} -bestwave = [lightgray]Meilleur: {0} -launch.text = Launch -research.multiplayer = Only the host can research items. -uncover = Découvrir -configure = Configurer le transfert des ressources. -loadout = Loadout -resources = Resources -bannedblocks = Banned Blocks -addall = Add All -launch.destination = Destination: {0} -configure.invalid = Amount must be a number between 0 and {0}. -zone.unlocked = [lightgray]{0} Débloquée. -zone.requirement.complete = Vague {0} atteinte:\n{1} Exigences de la zone complétées -zone.resources = Ressources détectées: -zone.objective = [lightgray]Objective: [accent]{0} -zone.objective.survival = Survive -zone.objective.attack = Détruire la base ennemi -add = Ajouter... -boss.health = Vie du BOSS - -connectfail = [crimson]Échec de la connexion au serveur: [accent]{0} -error.unreachable = Serveur inaccessible. -error.invalidaddress = Adresse invalide. -error.timedout = Expiration du délai !\nAssurez-vous que la redirection de port est configurée sur l'hôte et que l'adresse est correcte ! -error.mismatch = Erreur de paquet:\nPossible d'incompatibilité de version client/serveur.\nAssurez-vous que l'hôte et vous disposez de la dernière version de Mindustry ! -error.alreadyconnected = Déjà connecté. -error.mapnotfound = Fichier de carte introuvable ! -error.io = Network I/O error. -error.any = Erreur réseau inconnue. -error.bloom = Échec d'initialisation du flou lumineux.\nVotre appareil peut ne pas le supporter. - -weather.rain.name = Pluie -weather.snow.name = Neige -weather.sandstorm.name = Tempête de sable -weather.sporestorm.name = Tempête de spores -weather.fog.name = Brouillard - -sectors.unexplored = [lightgray] Inexploré -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) -sectors.rename = Rename Sector -sector.missingresources = [scarlet]Ressources du noyau insuffisantes - -planet.serpulo.name = Serpulo -planet.sun.name = Soleil - -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass - -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. -sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. -sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. -sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. -sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. -sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. - -settings.language = Langue -settings.data = Données du jeu -settings.reset = Valeur par défaut. -settings.rebind = Réatttribuer -settings.resetKey = Reset -settings.controls = Contrôles -settings.game = Jeu -settings.sound = Son -settings.graphics = Graphiques -settings.cleardata = Effacer les données du jeu... -settings.clear.confirm = Êtes-vous sûr d'effacer ces données ?\n[scarlet]Ceci est irréversible -settings.clearall.confirm = [scarlet]ATTENTION![]\nCet action effacera toutes les données , incluant les sauvegarges, les cartes, les déblocages et la configuration des touches.\nUne fois que vous aurez pressé 'Ok' le jeu effacera toutes les données et se fermera. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves -settings.clearresearch = Clear Research -settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? -settings.clearcampaignsaves = Clear Campaign Saves -settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? -paused = En pause -clear = Clear -banned = [scarlet]Banned -unplaceable.sectorcaptured = [scarlet]Requires captured sector -yes = Oui -no = Non -info.title = Info -error.title = [crimson]Une erreur s'est produite -error.crashtitle = Une erreur s'est produite -unit.nobuild = [scarlet]Unit can't build -lastaccessed = [lightgray]Last Accessed: {0} -block.unknown = [lightgray]Inconnu - -stat.input = Ressource(s) requise(s) -stat.output = Ressource(s) produite(s) -stat.booster = Booster -stat.tiles = Required Tiles -stat.affinities = Affinities -stat.powercapacity = Capacité d'énergie -stat.powershot = Énergie/Tir -stat.damage = Damage -stat.targetsair = Cible les unités aériennes -stat.targetsground = Cible les unités terrestres -stat.itemsmoved = Vitesse de déplacement -stat.launchtime = Temps entre chaque lancement -stat.shootrange = Portée -stat.size = Taille -stat.displaysize = Display Size -stat.liquidcapacity = Capacité en liquide -stat.powerrange = Distance de transmission -stat.linkrange = Link Range -stat.instructions = Instructions -stat.powerconnections = Max Connections -stat.poweruse = Énergie utilisée -stat.powerdamage = Énergie/Dégâts -stat.itemcapacity = Stockage -stat.memorycapacity = Memory Capacity -stat.basepowergeneration = Production d'énergie de base -stat.productiontime = Temps de production -stat.repairtime = Temps pour la réparation totale du bloc -stat.speedincrease = Augmentation de la vitesse -stat.range = Portée -stat.drilltier = Forable -stat.drillspeed = Vitesse de forage de base -stat.boosteffect = Effet boostant -stat.maxunits = Maximum d'unitée active -stat.health = Santé -stat.buildtime = Temps de construction -stat.maxconsecutive = Max Consecutive -stat.buildcost = Coût de construction -stat.inaccuracy = Précision -stat.shots = Tirs -stat.reload = Tirs/Seconde -stat.ammo = Munition -stat.shieldhealth = Shield Health -stat.cooldowntime = Cooldown Time -stat.explosiveness = Explosiveness -stat.basedeflectchance = Base Deflect Chance -stat.lightningchance = Lightning Chance -stat.lightningdamage = Lightning Damage -stat.flammability = Flammability -stat.radioactivity = Radioactivity -stat.heatcapacity = HeatCapacity -stat.viscosity = Viscosity -stat.temperature = Temperature -stat.speed = Speed -stat.buildspeed = Build Speed -stat.minespeed = Mine Speed -stat.minetier = Mine Tier -stat.payloadcapacity = Payload Capacity -stat.commandlimit = Command Limit -stat.abilities = Abilities - -ability.forcefield = Force Field -ability.repairfield = Repair Field -ability.statusfield = Status Field -ability.unitspawn = {0} Factory -ability.shieldregenfield = Shield Regen Field - -bar.drilltierreq = Better Drill Required -bar.noresources = Missing Resources -bar.corereq = Core Base Required -bar.drillspeed = Vitesse de forage: {0}/s -bar.pumpspeed = Pump Speed: {0}/s -bar.efficiency = Efficacité: {0}% -bar.powerbalance = Énergie: {0} -bar.powerstored = Stored: {0}/{1} -bar.poweramount = Énergie: {0} -bar.poweroutput = Énergie en sortie: {0} -bar.powerlines = Connections: {0}/{1} -bar.items = Objets: {0} -bar.capacity = Capacity: {0} -bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] -bar.liquid = Liquide -bar.heat = Chaleur -bar.power = Énergie -bar.progress = Progression de la construction -bar.input = Input -bar.output = Output - -units.processorcontrol = [lightgray]Processor Controlled - -bullet.damage = [stat]{0}[lightgray] dégats -bullet.splashdamage = [stat]{0}[lightgray] dgt zone ~[stat] {1}[lightgray] tuiles -bullet.incendiary = [stat]incendiaire -bullet.homing = [stat]autoguidage -bullet.shock = [stat]choc -bullet.frag = [stat]frag -bullet.knockback = [stat]{0}[lightgray]recul -bullet.pierce = [stat]{0}[lightgray]x pierce -bullet.infinitepierce = [stat]pierce -bullet.freezing = [stat]gel -bullet.tarred = [stat]goudronné -bullet.multiplier = [stat]{0}[lightgray]x multiplicateur de munitions -bullet.reload = [stat]{0}[lightgray]x vitesse de rechargement - -unit.blocks = Blocs -unit.blockssquared = blocks² -unit.powersecond = Énergie/seconde -unit.liquidsecond = Liquides/seconde -unit.itemssecond = Objets/seconde -unit.liquidunits = Unité de liquide -unit.powerunits = Unité d'énergie -unit.degrees = degrés -unit.seconds = secondes -unit.minutes = mins -unit.persecond = /sec -unit.perminute = /min -unit.timesspeed = x vitesse -unit.percent = % -unit.shieldhealth = shield health -unit.items = Objets -unit.thousands = k -unit.millions = mil -unit.billions = b -category.general = Général -category.power = Énergie -category.liquids = Liquides -category.items = Objets -category.crafting = Fabrication -category.function = Function -category.optional = Améliorations facultatives -setting.landscape.name = Verrouiller la rotation en mode paysage -setting.shadows.name = Ombres -setting.blockreplace.name = Automatic Block Suggestions -setting.linear.name = Filtrage linéaire -setting.hints.name = Hints -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) -setting.buildautopause.name = Auto-Pause Building -setting.animatedwater.name = Eau animée -setting.animatedshields.name = Boucliers Animés -setting.antialias.name = Antialias[lightgray] (demande le redémarrage de l'appareil)[] -setting.playerindicators.name = Player Indicators -setting.indicators.name = Indicateurs d'alliés -setting.autotarget.name = Visée automatique -setting.keyboard.name = Contrôles Souris + Clavier -setting.touchscreen.name = Touchscreen Controls -setting.fpscap.name = Max FPS -setting.fpscap.none = Vide -setting.fpscap.text = {0} FPS -setting.uiscale.name = Mise à l'échelle de l'interface[lightgray] (nécessite un redémarrage)[] -setting.swapdiagonal.name = Autoriser le placement des blocs en diagonal -setting.difficulty.training = Entraînement -setting.difficulty.easy = Facile -setting.difficulty.normal = Normal -setting.difficulty.hard = Difficile -setting.difficulty.insane = Êxtreme -setting.difficulty.name = Difficulté: -setting.screenshake.name = Tremblement d'écran -setting.effects.name = Montrer les effets -setting.destroyedblocks.name = Display Destroyed Blocks -setting.blockstatus.name = Display Block Status -setting.conveyorpathfinding.name = Conveyor Placement Pathfinding -setting.sensitivity.name = Contôle de la sensibilité -setting.saveinterval.name = Intervalle des sauvegardes auto -setting.seconds = {0} Secondes -setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds -setting.fullscreen.name = Plein écran -setting.borderlesswindow.name = Fenêtre sans bordure[lightgray] (peut nécessiter un redémarrage) -setting.fps.name = Afficher FPS -setting.smoothcamera.name = Smooth Camera -setting.vsync.name = VSync -setting.pixelate.name = Pixélisé [lightgray](peut diminuer les performances)[] -setting.minimap.name = Montrer la minimap -setting.coreitems.name = Display Core Items (WIP) -setting.position.name = Show Player Position -setting.musicvol.name = Volume de la musique -setting.atmosphere.name = Show Planet Atmosphere -setting.ambientvol.name = Ambient Volume -setting.mutemusic.name = Couper la musique -setting.sfxvol.name = Volume des SFX -setting.mutesound.name = Couper les SFX -setting.crashreport.name = Envoyer des rapports d'incident anonymement. -setting.savecreate.name = Auto-Create Saves -setting.publichost.name = Public Game Visibility -setting.playerlimit.name = Player Limit -setting.chatopacity.name = Opacité du tchat -setting.lasersopacity.name = Power Laser Opacity -setting.bridgeopacity.name = Bridge Opacity -setting.playerchat.name = Afficher le tchat en jeu -public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. -public.beta = Note that beta versions of the game cannot make public lobbies. -uiscale.reset = L'échelle de l'interface a été modifiée.\nAppuyez sur "OK" pour confirmer cette échelle.\n[scarlet]Revenir et sortir en[accent] {0}[] réglages... -uiscale.cancel = Annuler et quitter -setting.bloom.name = Flou lumineux -keybind.title = Paramétrer les touches -keybinds.mobile = [scarlet]La plupart des raccourcis clavier ne sont pas fonctionnelles sur les appareils mobiles. Seul le mouvement de base est pris en charge. -category.general.name = Général -category.view.name = Voir -category.multiplayer.name = Multijoueur -category.blocks.name = Block Select -command.attack = Attaquer -command.rally = Rally -command.retreat = Retraite -command.idle = Idle -placement.blockselectkeys = \n[lightgray]Key: [{0}, -keybind.respawn.name = Respawn -keybind.control.name = Control Unit -keybind.clear_building.name = Clear Building -keybind.press = Appuyez sur une touche ... -keybind.press.axis = Appuyez sur un axe ou une touche... -keybind.screenshot.name = Map Screenshot -keybind.toggle_power_lines.name = Toggle Power Lasers -keybind.toggle_block_status.name = Toggle Block Statuses -keybind.move_x.name = Mouvement X -keybind.move_y.name = Mouvement Y -keybind.mouse_move.name = Follow Mouse -keybind.pan.name = Pan View -keybind.boost.name = Boost -keybind.schematic_select.name = Select Region -keybind.schematic_menu.name = Schematic Menu -keybind.schematic_flip_x.name = Flip Schematic X -keybind.schematic_flip_y.name = Flip Schematic Y -keybind.category_prev.name = Previous Category -keybind.category_next.name = Next Category -keybind.block_select_left.name = Block Select Left -keybind.block_select_right.name = Block Select Right -keybind.block_select_up.name = Block Select Up -keybind.block_select_down.name = Block Select Down -keybind.block_select_01.name = Category/Block Select 1 -keybind.block_select_02.name = Category/Block Select 2 -keybind.block_select_03.name = Category/Block Select 3 -keybind.block_select_04.name = Category/Block Select 4 -keybind.block_select_05.name = Category/Block Select 5 -keybind.block_select_06.name = Category/Block Select 6 -keybind.block_select_07.name = Category/Block Select 7 -keybind.block_select_08.name = Category/Block Select 8 -keybind.block_select_09.name = Category/Block Select 9 -keybind.block_select_10.name = Category/Block Select 10 -keybind.fullscreen.name = Basculer en plein écran -keybind.select.name = Sélectionner/Tirer -keybind.diagonal_placement.name = Placement en diagonal -keybind.pick.name = Choisir un bloc -keybind.break_block.name = Supprimer un bloc -keybind.deselect.name = Déselectionner -keybind.pickupCargo.name = Pickup Cargo -keybind.dropCargo.name = Drop Cargo -keybind.command.name = Command -keybind.shoot.name = Tirer -keybind.zoom.name = Zoom -keybind.menu.name = Menu -keybind.pause.name = Pause -keybind.pause_building.name = Pause/Resume Building -keybind.minimap.name = Mini-Map -keybind.chat.name = Tchat -keybind.player_list.name = Liste des joueurs -keybind.console.name = Console -keybind.rotate.name = Tourner -keybind.rotateplaced.name = Rotate Existing (Hold) -keybind.toggle_menus.name = Montrer/Cacher les menus -keybind.chat_history_prev.name = Reculer dans l'historique du tchat -keybind.chat_history_next.name = Suite de l'historique du tchat -keybind.chat_scroll.name = Faire défiler le tchat -keybind.drop_unit.name = Larguer une unité -keybind.zoom_minimap.name = Zoomer la minimap -mode.help.title = Description des modes de jeu -mode.survival.name = Survival -mode.survival.description = Le mode normal. Ressources limitées et vagues automatiques. -mode.sandbox.name = Bac à sable -mode.sandbox.description = Ressources infinies et pas de compte à rebours pour les vagues. -mode.editor.name = Editor -mode.pvp.name = PvP -mode.pvp.description = Lutter contre d'autres joueurs pour gagner ! -mode.attack.name = Attaque -mode.attack.description = Pas de vagues, le but est de détruire la base ennemie. -mode.custom = Règles personnalisées - -rules.infiniteresources = Ressources infinies -rules.reactorexplosions = Reactor Explosions -rules.schematic = Schematics Allowed -rules.wavetimer = Temps de vague -rules.waves = Vague -rules.attack = Mode attaque -rules.buildai = AI Building -rules.enemyCheat = Ressources infinies pour l'IA -rules.blockhealthmultiplier = Block Health Multiplier -rules.blockdamagemultiplier = Block Damage Multiplier -rules.unitbuildspeedmultiplier = Multiplicateur de vitesse de création d'unités -rules.unithealthmultiplier = Multiplicateur de la santé des unités -rules.unitdamagemultiplier = Multiplicateur de dégât des unités -rules.enemycorebuildradius = Rayon de non-construction autour de la base ennemi:[lightgray] (tuiles) -rules.wavespacing = Espacement des vagues:[lightgray] (sec) -rules.buildcostmultiplier = Multiplicateur de coût de construction -rules.buildspeedmultiplier = Multiplicateur de vitesse de construction -rules.deconstructrefundmultiplier = Deconstruct Refund Multiplier -rules.waitForWaveToEnd = Les vagues attendent les ennemis -rules.dropzoneradius = Rayon de la zone de largage:[lightgray] (tuiles) -rules.unitammo = Units Require Ammo -rules.title.waves = Vagues -rules.title.resourcesbuilding = Ressources & Bâtiment -rules.title.enemy = Ennemis -rules.title.unit = Unités -rules.title.experimental = Experimental -rules.title.environment = Environment -rules.lighting = Lighting -rules.enemyLights = Enemy Lights -rules.fire = Fire -rules.explosions = Block/Unit Explosion Damage -rules.ambientlight = Ambient Light -rules.weather = Weather -rules.weather.frequency = Frequency: -rules.weather.duration = Duration: - -content.item.name = Objets -content.liquid.name = Liquides -content.unit.name = Unités -content.block.name = Blocs - -item.copper.name = Cuivre -item.lead.name = Plomb -item.coal.name = Charbon -item.graphite.name = Graphite -item.titanium.name = Titane -item.thorium.name = Thorium -item.silicon.name = Silicium -item.plastanium.name = Plastanium -item.phase-fabric.name = Phase Fabric -item.surge-alloy.name = Alliage superchargé -item.spore-pod.name = Bulbe sporifère -item.sand.name = Sable -item.blast-compound.name = Mélange explosif -item.pyratite.name = Pyratite -item.metaglass.name = Métaverre -item.scrap.name = Ferraille -liquid.water.name = Eau -liquid.slag.name = Scorie -liquid.oil.name = Pétrole -liquid.cryofluid.name = Liquide Cryogénique - -unit.dagger.name = Poignard -unit.mace.name = Mace -unit.fortress.name = Forteresse -unit.nova.name = Nova -unit.pulsar.name = Pulsar -unit.quasar.name = Quasar -unit.crawler.name = Rampeur -unit.atrax.name = Atrax -unit.spiroct.name = Spiroct -unit.arkyid.name = Arkyid -unit.toxopid.name = Toxopid -unit.flare.name = Flare -unit.horizon.name = Horizon -unit.zenith.name = Zenith -unit.antumbra.name = Antumbra -unit.eclipse.name = Eclipse -unit.mono.name = Mono -unit.poly.name = Poly -unit.mega.name = Mega -unit.quad.name = Quad -unit.oct.name = Oct -unit.risso.name = Risso -unit.minke.name = Minke -unit.bryde.name = Bryde -unit.sei.name = Sei -unit.omura.name = Omura -unit.alpha.name = Alpha -unit.beta.name = Beta -unit.gamma.name = Gamma -unit.scepter.name = Scepter -unit.reign.name = Reign -unit.vela.name = Vela -unit.corvus.name = Corvus - -block.resupply-point.name = Point de rechargement -block.parallax.name = Parallax -block.cliff.name = Falaise -block.sand-boulder.name = Sable rocheux -block.grass.name = Herbe -block.slag.name = Scories -block.space.name = Space -block.salt.name = Sel -block.salt-wall.name = Mur de sel -block.pebbles.name = Cailloux -block.tendrils.name = Vrilles -block.sand-wall.name = Mur de sable -block.spore-pine.name = Pin sporifère -block.spore-wall.name = Spore Wall -block.boulder.name = Boulder -block.snow-boulder.name = Snow Boulder -block.snow-pine.name = Snow Pine -block.shale.name = Schiste -block.shale-boulder.name = Rocher de schiste -block.moss.name = Mousse -block.shrubs.name = Arbustes -block.spore-moss.name = Mousse sporifère -block.shale-wall.name = Shale Wall -block.scrap-wall.name = Mur de ferraille -block.scrap-wall-large.name = Grand mur de ferraille -block.scrap-wall-huge.name = Enorme mur de ferraille -block.scrap-wall-gigantic.name = Gigantesque mur de ferraille -block.thruster.name = Propulseur -block.kiln.name = Four -block.graphite-press.name = Presse à graphite -block.multi-press.name = Multi-Presse -block.constructing = {0}\n[lightgray](En construction) -block.spawn.name = Générateur d'ennemis -block.core-shard.name = Core: Shard -block.core-foundation.name = Core: Fondation -block.core-nucleus.name = Core: Nucleus -block.deepwater.name = Eau profonde -block.water.name = Eau -block.tainted-water.name = Eau contaminée -block.darksand-tainted-water.name = Eau contaminée par le sable noir -block.tar.name = Pétrole -block.stone.name = Pierre -block.sand.name = Sable -block.darksand.name = Sable noire -block.ice.name = Glace -block.snow.name = Neige -block.craters.name = Cratères -block.sand-water.name = Eau (sable) -block.darksand-water.name = Eau (sable noir) -block.char.name = Carboniser -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall -block.dacite-boulder.name = Dacite Boulder -block.ice-snow.name = Neige glacée -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall -block.pine.name = Pin -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud -block.white-tree-dead.name = Arbre blanc mort -block.white-tree.name = Arbre blanc -block.spore-cluster.name = Grappe de spores -block.metal-floor.name = Sol métallique -block.metal-floor-2.name = Sol métallique 2 -block.metal-floor-3.name = Sol métallique 3 -block.metal-floor-5.name = Sol métallique 5 -block.metal-floor-damaged.name = Sol métallique endommagé -block.dark-panel-1.name = Panneau noir 1 -block.dark-panel-2.name = Panneau noir 2 -block.dark-panel-3.name = Panneau noir 3 -block.dark-panel-4.name = Panneau noir 4 -block.dark-panel-5.name = Panneau noir 5 -block.dark-panel-6.name = Panneau noir 6 -block.dark-metal.name = Métal noir -block.basalt.name = Basalt -block.hotrock.name = Roche chaude -block.magmarock.name = Roche de magma -block.copper-wall.name = Mur de cuivre -block.copper-wall-large.name = Grand mur de cuivre -block.titanium-wall.name = Mur de titane -block.titanium-wall-large.name = Grand mur de titane -block.plastanium-wall.name = Plastanium Wall -block.plastanium-wall-large.name = Large Plastanium Wall -block.phase-wall.name = Mur phasé -block.phase-wall-large.name = Grand mur phasé -block.thorium-wall.name = Mur en thorium -block.thorium-wall-large.name = Grand mur en thorium -block.door.name = Porte -block.door-large.name = Grande porte -block.duo.name = Duo -block.scorch.name = Brûleur -block.scatter.name = Disperseur -block.hail.name = Grêle -block.lancer.name = Lancier -block.conveyor.name = Convoyeur -block.titanium-conveyor.name = Convoyeur en titane -block.plastanium-conveyor.name = Convoyeur en plastanium -block.armored-conveyor.name = Convoyeur cuirassé -block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyors. -block.junction.name = Jonction -block.router.name = Routeur -block.distributor.name = [accent]Distributeur[] -block.sorter.name = Trieur -block.inverted-sorter.name = Trieur inversé -block.message.name = Message -block.illuminator.name = Illuminator -block.illuminator.description = A small, compact, configurable light source. Requires power to function. -block.overflow-gate.name = Barrière de Débordement -block.underflow-gate.name = Barrière de Refoulement -block.silicon-smelter.name = Fonderie de silicium -block.phase-weaver.name = Tisseur à phase -block.pulverizer.name = Pulvérisateur -block.cryofluid-mixer.name = Refroidisseur -block.melter.name = Four à Fusion -block.incinerator.name = Incinérateur -block.spore-press.name = Presse à spores -block.separator.name = Séparateur -block.coal-centrifuge.name = Centrifugeuse à charbon -block.power-node.name = Transmetteur énergétique -block.power-node-large.name = Grand transmetteur énergétique -block.surge-tower.name = Tour de surtension -block.diode.name = Diode de batterie -block.battery.name = Batterie -block.battery-large.name = Grande batterie -block.combustion-generator.name = Générateur à combustion -block.steam-generator.name = Générateur à turbine -block.differential-generator.name = Générateur différentiel -block.impact-reactor.name = Réacteur à impact -block.mechanical-drill.name = Foreuse mécanique -block.pneumatic-drill.name = Foreuse à vérins -block.laser-drill.name = Foreuse Laser -block.water-extractor.name = Extracteur d'eau -block.cultivator.name = Cultivateur -block.conduit.name = Conduit -block.mechanical-pump.name = Pompe Mécanique -block.item-source.name = Source d'objets -block.item-void.name = Destructeur d'objets -block.liquid-source.name = Source de liquide -block.liquid-void.name = Vaporisateur -block.power-void.name = Absorbeur énergétique -block.power-source.name = Puissance infinie -block.unloader.name = Déchargeur -block.vault.name = Coffre-Fort -block.wave.name = Vague -block.tsunami.name = Tsunami -block.swarmer.name = Essaim -block.salvo.name = Salve -block.ripple.name = Percussion -block.phase-conveyor.name = Convoyeur phasé -block.bridge-conveyor.name = Pont -block.plastanium-compressor.name = Compresseur de plastanium -block.pyratite-mixer.name = Mixeur à pyratite -block.blast-mixer.name = Mixeur à explosion -block.solar-panel.name = Panneau solaire -block.solar-panel-large.name = Grand panneau solaire -block.oil-extractor.name = Extracteur de pétrole -block.repair-point.name = Point de Réparation -block.pulse-conduit.name = Conduit à Impulsion -block.plated-conduit.name = Plated Conduit -block.phase-conduit.name = Conduit à Phase -block.liquid-router.name = Routeur de Liquide -block.liquid-tank.name = Réservoir de Liquide -block.liquid-junction.name = Jonction à Liquide -block.bridge-conduit.name = Pont à liquide -block.rotary-pump.name = Pompe Rotative -block.thorium-reactor.name = Réacteur à Thorium -block.mass-driver.name = Transporteur de masse -block.blast-drill.name = Foreuse à explosion -block.thermal-pump.name = Pompe thermique -block.thermal-generator.name = Générateur thermique -block.alloy-smelter.name = Fonderie d'alliage superchargé -block.mender.name = Gardien -block.mend-projector.name = Projecteur soignant -block.surge-wall.name = Mur superchargé -block.surge-wall-large.name = Grand mur superchargé -block.cyclone.name = Cyclone -block.fuse.name = Fuse -block.shock-mine.name = Mines terrestre -block.overdrive-projector.name = Projecteur accélérant -block.force-projector.name = Projecteur de champ de force -block.arc.name = Arc -block.rtg-generator.name = G.T.R. -block.spectre.name = Spectre -block.meltdown.name = Meltdown -block.foreshadow.name = Foreshadow -block.container.name = Conteneur -block.launch-pad.name = Rampe de lancement -block.launch-pad-large.name = Grande rampe de lancement -block.segment.name = Segment -block.command-center.name = Command Center -block.ground-factory.name = Ground Factory -block.air-factory.name = Air Factory -block.naval-factory.name = Naval Factory -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor -block.payload-router.name = Payload Router -block.disassembler.name = Disassembler -block.silicon-crucible.name = Silicon Crucible -block.overdrive-dome.name = Overdrive Dome - -block.switch.name = Switch -block.micro-processor.name = Micro Processor -block.logic-processor.name = Logic Processor -block.hyper-processor.name = Hyper Processor -block.logic-display.name = Logic Display -block.large-logic-display.name = Large Logic Display -block.memory-cell.name = Memory Cell -block.memory-bank.name = Memory Bank - -team.blue.name = Bleu -team.crux.name = red -team.sharded.name = orange -team.orange.name = Orange -team.derelict.name = derelict -team.green.name = Vert -team.purple.name = Violet - -tutorial.next = [lightgray] -tutorial.intro = Vous êtes entré dans le[scarlet] Tutoriel de Mindustry.[]\nCommencez par[accent] miner du cuivre[]. Appuyez ou cliquez sur une veine de minerai de cuivre près de votre base pour commencer à miner.\n\n[accent]{0}/{1} cuivre -tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers [] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper -tutorial.drill = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nPlacez-en une sur un filon de cuivre. -tutorial.drill.mobile = Le minage manuel est inefficace.\n[accent]Des foreuses[]peuvent miner automatiquement.\nAppuyez sur l'onglet de forage en bas à droite.\nSélectionnez la[accent] perceuse mécanique[].\nPlacez-la sur une veine de cuivre, puis appuyez sur la[accent] coche(V)[] ci-dessous pour confirmer votre sélection.\nAppuyez sur le [accent] bouton X[]pour annuler le placement. -tutorial.blockinfo = Chaque bloc a des statistiques différentes. Chaque foreuse ne peut extraire que certains minerais.\nPour vérifier les informations et les statistiques d'un bloc,[accent] tapez sur le "?" tout en le sélectionnant dans le menu de compilation.[]\n\n[accent]Accédez aux statistiques de la foreuse mécanique maintenant.[] -tutorial.conveyor = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreuse à la base.\n[accent]Maintenez le clique droit de la souris pour placer dans une ligne.[]\nMaintenir[accent] CTRL[] en sélectionnant une ligne à placer en diagonale.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base. -tutorial.conveyor.mobile = [accent]Convoyeurs[] sont utilisés pour transporter des articles à la base.\nFaire une ligne de convoyeurs de la foreuse à la base.\n[accent] Placez dans une ligne en maintenant votre doigt appuyé pendant quelques secondes[] et en le faisant glisser dans une direction.\n\n[accent]Placez 2 convoyeurs avec l'outil ligne, puis livrez un article dans la base. -tutorial.turret = Des constructions défensives doivent être construites pour repousser [lightgray]les ennemis[].Construisez une tourelle "duo" près de votre base. -tutorial.drillturret = Les tourelles "Duo" ont besoin de [accent]munitions en cuivre[] pour tirer.\nPlacez une foreuse à côté de la tourelle pour l'approvisionner avec du cuivre. -tutorial.pause = Pendant le combat, vous pouvez[accent] mettre le jeu en pause.[]\nVous pouvez construire des bâtiments pendant que le jeu est en pause.\n\n[accent]Appuyez sur espace pour mettre le jeu en pause. -tutorial.pause.mobile = Pendant le combat, vous pouvez[accent] mettre le jeu en pause.[]\nVous pouvez construire des bâtiments pendant que le jeu est en pause.\n\n[accent]Appuyez sur le bouton en haut à gauche pour mettre le jeu en pause. -tutorial.unpause = Appuyez de nouveau sur espace pour reprendre le cour du jeu -tutorial.unpause.mobile = Appuyez de nouveau sur cette touche pour reprendre le cour du jeu -tutorial.breaking = Les blocs doivent souvent être détruits.\n[accent]Maintenez le bouton droit de la souris enfoncé.[] pour détruire tous les blocs sélectionnés.[]\n\n[accent]Détruisez tous les blocs de ferraille à gauche de votre base à l'aide de la sélection de zone. -tutorial.breaking.mobile = Les blocs doivent souvent être détruits.\n[accent]Sélectionnez le mode de déconstruction[], puis appuyez sur un bloc pour commencer à le casser.\nDétruisez une zone en maintenant votre doigt enfoncé pendant quelques secondes[] et glisser dans une direction.\nAppuyez sur la coche(V) pour confirmer.\n\n[accent]Détruisez tous les blocs de ferraille à gauche de votre base à l'aide de la sélection de zone. -tutorial.withdraw = Dans certaines situations, il est nécessaire de prendre des articles directement des blocs..\nPour faire ça, [accent]tapez sur un bloc[] avec des articles à l'intérieur, alors [accent]appuyez sur l'élément[] dans l'inventaire.\nPlusieurs éléments peuvent être retirés en [accent]tapotant et en maintenant enfoncée la touche[].\n\n[accent]Retirez un peu de cuivre de votre base.[] -tutorial.deposit = Déposez les éléments dans des blocs en les faisant glisser de votre vaisseau vers un module de stockage.\n\n[accent]Déposez votre cuivre dans la base.[] -tutorial.waves = Les [lightgray]ennemies[] approchent.\n\nDéfendez votre base durant 2 vagues.\nConstruisez plus de tourelles et de foreuses. Minez plus de cuivre. -tutorial.waves.mobile = [lightgray]Les ennemies approchent[].\n\nDéfendez votre base durant 2 vagues. Votre vaisseau tirera automatiquement sur les ennemis.\nConstruisez plus de tourelles et de foreuses. Minez plus de cuivre. -tutorial.launch = Une fois que vous atteignez une vague spécifique, vous êtes en mesure de[accent] lancer votre base[], laissant vos défenses derrière vous et[accent] en obtenant toutes les ressources de votre base.[]\nCes ressources peuvent ensuite servir à la recherche de nouvelles technologies.\n\n[accent]Appuyez sur le bouton de lancement. - -item.copper.description = Un matériau de construction utile. Utilisé intensivement dans tout les blocs. -item.lead.description = Un matériau de départ. Utilisé intensivement en électronique et pour le transport de blocs. -item.metaglass.description = Un composé de verre très résistant. Utilisation intensive pour la distribution et le stockage de liquides. -item.graphite.description = Carbone minéralisé, utilisé pour les munitions et l’isolation électrique. -item.sand.description = Un matériau commun utilisé largement dans la fonte, à la fois dans l'alliage et comme un flux. -item.coal.description = Un carburant commun et facile à obtenir. -item.titanium.description = Un métal rare super-léger largement utilisé dans le transport de liquides et d'objets ainsi que dans les foreuses de haut-niveau et l'aviation -item.thorium.description = Un métal dense, et radioactif utilisé comme support structurel et comme carburant nucléaire. -item.scrap.description = Restes de vieilles structures et unités. Contient des traces de nombreux métaux différents. -item.silicon.description = Un matériau semi-conducteur extrêmement utile, avec des utilisations dans les panneaux solaires et beaucoup d'autre composants électroniques complexes. -item.plastanium.description = Un matériau léger et docile utilisé dans l'aviation avancée et dans les munitions à fragmentation. -item.phase-fabric.description = Une substance presque en apesanteur utilisée dans l'électronique de pointe et la technologie autoréparable. -item.surge-alloy.description = Un alliage avancé aux propriétés électriques uniques. -item.spore-pod.description = Utilisé pour l'obtention d'huile, d'explosifs et de carburants -item.blast-compound.description = Un composé volatile utilisé dans les bombes et les explosifs. Bien qu'il puisse être utilisé comme carburant, ce n'est pas conseillé. -item.pyratite.description = Une substance extrêmement inflammable utilisée dans les armes incendiaires. -liquid.water.description = Couramment utilisé pour les machines de refroidissement et le traitement des déchets. -liquid.slag.description = Différents types de métaux en fusion mélangés. Peut être séparé en ses minéraux constitutifs ou pulvérisé sur les unités ennemies comme une arme. -liquid.oil.description = Peut être brûlé, explosé ou utilisé comme liquide de refroidissement. -liquid.cryofluid.description = Le liquide de refroidissement le plus efficace. - -block.message.description = Stores a message. Used for communication between allies. -block.graphite-press.description = Compresse des morceaux de charbon en feuilles de graphite. -block.multi-press.description = Une version améliorée de la presse à graphite. Utilise de l'eau et de l'électricité pour traiter le charbon rapidement et efficacement. -block.silicon-smelter.description = Réduit le sable avec du coke* très pur afin de produire du silicium. (*Coke produit à partir de charbon:REF) -block.kiln.description = Fait fondre le sable et le plomb en métaverre. Nécessite de petites quantités d'énergie. -block.plastanium-compressor.description = Produit du plastanium à partir de pétrole et de titane. -block.phase-weaver.description = Produit un tissu de phase à partir de thorium radioactif et de grandes quantités de sable. -block.alloy-smelter.description = Produit un alliage de surtension à partir de titane, plomb, silicium et cuivre. -block.cryofluid-mixer.description = L'eau et le titane combinés forment un fluide cryo beaucoup plus efficace pour le refroidissement. -block.blast-mixer.description = Utilise du pétrole pour transformer la pyratite en un composé explosif moins inflammable mais plus explosif. -block.pyratite-mixer.description = Mélange le charbon, le plomb et le sable en pyratite hautement inflammable. -block.melter.description = Chauffe la pierre à des températures très élevées pour obtenir de la lave. -block.separator.description = Exposer la pierre à la pression de l'eau afin d'obtenir différents minéraux contenus dans la pierre. -block.spore-press.description = Comprime les gousses de spores en huile. -block.pulverizer.description = Brise la pierre en sable. Utile en cas de manque de sable naturel. -block.coal-centrifuge.description = Solidifie le pétrole en morceaux de charbon. -block.incinerator.description = Se débarrasse de tout article ou liquide en excès. -block.power-void.description = Annule toute l'énergie qui y est introduite. Bac à sable seulement. -block.power-source.description = Débit infini d'énergie. Bac à sable seulement. -block.item-source.description = Sort infiniment les articles. Bac à sable seulement. -block.item-void.description = Détruit tous les objets qui y entrent sans utiliser d'énergie. Bac à sable seulement. -block.liquid-source.description = Débit infini de liquides. Bac à sable seulement. -block.liquid-void.description = Removes any liquids. Sandbox only. -block.copper-wall.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues. -block.copper-wall-large.description = Un bloc défensif bon marché.\nUtile pour protéger le noyau et les tourelles lors des premières vagues.\nS'étend sur plusieurs tuiles. -block.titanium-wall.description = Un bloc défensif modérément fort.\nFournit une protection modérée contre les ennemis. -block.titanium-wall-large.description = Un bloc défensif modérément fort.\nFournit une protection modérée contre les ennemis.\nS'étend sur plusieurs tuiles. -block.plastanium-wall.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections. -block.plastanium-wall-large.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections.\nSpans multiple tiles. -block.thorium-wall.description = Un puissant bloc défensif.\nBonne protection contre les ennemis. -block.thorium-wall-large.description = Un puissant bloc défensif.\nBonne protection contre les ennemis.\nS'étend sur plusieurs tuiles. -block.phase-wall.description = Pas aussi fort qu'un mur de thorium, mais détournera les balles à moins qu'elles ne soient trop puissantes. -block.phase-wall-large.description = Pas aussi fort qu'un mur de thorium, mais détournera les balles à moins qu'elles ne soient trop puissantes.\nS'étend sur plusieurs tuiles. -block.surge-wall.description = Le bloc défensif le plus puissant.\nPeu de chances de déclencher des éclairs en direction de l'attaquant. -block.surge-wall-large.description = Le bloc défensif le plus puissant.\nPeu de chances de déclencher des éclairs en direction de l'attaquant.\nS'étend sur plusieurs tuiles. -block.door.description = Une petite porte qui peut être ouverte et fermée en cliquant dessus.\nSi elle est ouverte, les ennemis peuvent tirer et se déplacer. -block.door-large.description = Une grande porte qui peut être ouverte et fermée en cliquant dessus.\nSi elle est ouverte, les ennemis peuvent tirer et se déplacer.\nS'étend sur plusieurs tuiles. -block.mender.description = Répare périodiquement des blocs à proximité. Garder les défenses réparées entre les vagues.\nUtilise éventuellement du silicium pour augmenter la portée et l'efficacité. -block.mend-projector.description = Guérit périodiquement les bâtiments situés à proximité. -block.overdrive-projector.description = Augmente la vitesse des bâtiments à proximité, comme les foreuses et les convoyeurs. -block.force-projector.description = Crée un champ de force hexagonal autour de lui-même, protégeant les bâtiments et les unités internes des dommages causés par les balles. -block.shock-mine.description = Endommage les ennemis qui marchent sur la mine. Presque invisible à l'ennemi. -block.conveyor.description = Bloc de transport d'articles standard.\nDéplace les objets et les déposes automatiquement dans des tourelles ou des usines. Rotatif. -block.titanium-conveyor.description = Bloc de transport d'articles avancé.\nDéplace les articles plus rapidement que les convoyeurs standard. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. -block.junction.description = Agit comme un pont pour deux bandes transporteuses qui se croisent.\nUtile dans les situations avec deux convoyeurs différents transportant des matériaux différents à des endroits différents. -block.bridge-conveyor.description = Bloc de transport d'articles avancé. Permet de transporter des objets sur plus de 3 tuiles de n'importe quel terrain ou bâtiment. -block.phase-conveyor.description = Bloc de transport d'articles avancé.\nUtilise le pouvoir de téléporter des articles vers un convoyeur de phase connecté sur plusieurs carreaux. -block.sorter.description = Trie les articles. Si un article correspond à la sélection, il peut passer. Autrement, l'article est distribué vers la gauche ou la droite. -block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead. -block.router.description = Accepte les éléments d'une direction et les envoie dans 3 autres directions de manière égale. Utile pour séparer les matériaux d'une source en plusieurs cibles. -block.distributor.description = Un routeur avancé qui divise les articles en 7 autres directions de manière égale. [scarlet]Seule et unique ![] -block.overflow-gate.description = C'est la combinaison entre un routeur et un diviseur qui peut seulement distribuer à gauche et à droite si le chemin de devant est bloqué. -block.underflow-gate.description = Le contraire d'une barrière de débordement.\nEnvoie les ressources vers l'avant si les chemins de gauche et de droite sont bloqués. -block.mass-driver.description = Bloc de transport d'articles ultime.\nRecueille plusieurs objets et les envoie ensuite à un autre pilote de masse sur une longue distance. -block.mechanical-pump.description = Une pompe bon marché avec un débit lent, mais aucune consommation d'énergie. -block.rotary-pump.description = Une pompe avancée qui double la vitesse en utilisant l’énergie. -block.thermal-pump.description = La pompe ultime. Trois fois plus rapide qu'une pompe mécanique et la seule pompe capable de récupérer de la lave. -block.conduit.description = Bloc de transport liquide de base. Fonctionne comme un convoyeur, mais avec des liquides. Utilisation optimale avec des extracteurs, des pompes ou d’autres conduits. -block.pulse-conduit.description = Bloc de transport de liquide avancé. Transporte les liquides plus rapidement et stocke plus que des conduits standard. -block.plated-conduit.description = Moves liquids at the same rate as pulse conduits, but possesses more armor. Does not accept fluids from the sides by anything other than conduits.\nLeaks less. -block.liquid-router.description = Accepte les liquides d'une direction et les envoie dans 3 autres directions de manière égale. Peut également stocker une certaine quantité de liquide. Utile pour séparer les liquides d'une source à plusieurs cibles. -block.liquid-tank.description = Stocke une grande quantité de liquides. Utilisez-le pour créer des tampons en cas de demande non constante de matériaux ou comme protection pour le refroidissement des blocs vitaux. -block.liquid-junction.description = Agit comme un pont pour deux conduits de croisement. Utile dans les situations avec deux conduits différents transportant des liquides différents à des endroits différents. -block.bridge-conduit.description = Bloc de transport de liquide avancé. Permet de transporter des liquides jusqu'à 3 tuiles de n'importe quel terrain ou bâtiment. -block.phase-conduit.description = Bloc de transport de liquide avancé. Utilise le pouvoir de téléporter des liquides vers un conduit de phase connecté sur plusieurs carreaux. -block.power-node.description = Transmet la puissance à des noeuds connectés. Il est possible de connecter jusqu'à quatre sources d'alimentation, puits ou nœuds.\nLe nœud recevra de l’alimentation ou fournira l’alimentation à tous les blocs adjacents. -block.power-node-large.description = Son rayon d'action est supérieur à celui du nœud d'alimentation et peut être connecté à six sources d'alimentation, puits ou nœuds au maximum. -block.surge-tower.description = Un nœud d'alimentation extrêmement longue portée avec moins de connexions disponibles. -block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored. -block.battery.description = Stocke l’énergie chaque fois qu’il ya abondance et en cas de pénurie, tant qu’il reste de la capacité. -block.battery-large.description = Stocke beaucoup plus d'énergie qu'une batterie ordinaire. -block.combustion-generator.description = Génère de l'énergie en brûlant du pétrole ou des matériaux inflammables. -block.thermal-generator.description = Génère une grande quantité d'énergie grâce à la lave. -block.steam-generator.description = Plus efficace qu'un générateur de combustion, mais nécessite de l'eau supplémentaire. -block.differential-generator.description = Génère de grandes quantités d'énergie. Utilise la différence de température entre le cryofluide et la pyratite en combustion. -block.rtg-generator.description = Générateur thermoélectrique à radio-isotopes ne nécessitant pas de refroidissement mais fournissant moins d'énergie qu'un réacteur à thorium. -block.solar-panel.description = Fournit une petite quantité d'énergie grâce au soleil. -block.solar-panel-large.description = Fournit une bien meilleure alimentation qu'un panneau solaire standard, mais coûte également beaucoup plus cher à construire. -block.thorium-reactor.description = Génère d'énormes quantités d'énergie à partir de thorium hautement radioactif. Nécessite un refroidissement constant.\nExplose violemment si des quantités insuffisantes de liquide de refroidissement ne sont pas fournies. -block.impact-reactor.description = Un groupe électrogène avancé, capable de générer d’énormes quantités d’énergie avec une efficacité maximale.\nNécessite une entrée de puissance significative pour relancer le processus. -block.mechanical-drill.description = Un extracteur bon marché. Lorsqu'il est placé sur des carreaux appropriés, les objets sortent à un rythme lent et indéfiniment. -block.pneumatic-drill.description = Un extracteur améliorée, plus rapide et capable de traiter des matériaux plus durs en utilisant la pression atmosphérique. -block.laser-drill.description = Permet de forer encore plus rapidement grâce à la technologie laser, mais nécessite de l'énergie. De plus, le thorium radioactif peut être récupéré avec cet extracteur. -block.blast-drill.description = L'extracteur ultime. Nécessite de grandes quantités d'énergie. -block.water-extractor.description = Extrait l'eau du sol. Utilisez-le quand il n'y a pas de lac à proximité. -block.cultivator.description = Cultiver le sol avec de l'eau afin d'obtenir du biomatter. -block.oil-extractor.description = Utilise de grandes quantités d'énergie pour extraire le pétrole du sable. Utilisez-le lorsqu'il n'y a pas de source directe de pétrole à proximité. -block.core-shard.description = La première version de la base centrale. Une fois détruit, tout contact avec la région est perdu. Ne laissez pas cela arriver. -block.core-foundation.description = La deuxième version de la base centrale. Mieux blindé. Stocke plus de ressources. -block.core-nucleus.description = La troisième et dernière version de la base centrale. Extrêmement bien blindé. Stocke des quantités massives de ressources. -block.vault.description = Stocke une grande quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [lightgray]Un déchargeur[] peut être utilisé pour récupérer des éléments du coffre-fort. -block.container.description = Stocke une petite quantité d'objets. Utilisez-le pour créer des tampons lorsqu'il existe une demande non constante de matériaux. [lightgray]Un déchargeur[] peut être utilisé pour récupérer des éléments du conteneur. -block.unloader.description = Décharge des articles d'un conteneur, d'une chambre forte ou d'un noyau sur un convoyeur ou directement dans un bloc adjacent.\nLe type d'élément à décharger peut être modifié en tapotant sur le déchargeur. -block.launch-pad.description = Lance des lots d'articles sans qu'il soit nécessaire de procéder à un lancement de base. Inachevé. -block.launch-pad-large.description = Une version améliorée de la rampe de lancement. Stocke plus d'articles. Lancements plus fréquemment. -block.duo.description = Une petite tourelle pas chère. -block.scatter.description = Une tourelle anti-air de taille moyenne. Pulvérise des amas de plomb ou de ferraille sur les unités ennemies. -block.scorch.description = Brûle les ennemis au sol les plus proches. Très efficace à courte portée. -block.hail.description = Une petite tourelle d'artillerie. -block.wave.description = Une tourelle de taille moyenne à tir rapide qui tire des bulles de liquide. -block.lancer.description = Une tourelle de taille moyenne qui tire des faisceaux d’électricité chargés. -block.arc.description = Une petite tourelle qui tire de l'électricité dans un arc au hasard vers l'ennemi. -block.swarmer.description = Une tourelle de taille moyenne qui tire des missiles éclatés. -block.salvo.description = Une tourelle de taille moyenne qui tire des coups de salves. -block.fuse.description = Une grande tourelle qui tire de puissants faisceaux à courte portée. -block.ripple.description = Une grande tourelle d'artillerie qui tire plusieurs coups simultanément. -block.cyclone.description = Une grande tourelle à tir rapide. -block.spectre.description = Une grande tourelle qui tire deux balles puissantes à la fois. -block.meltdown.description = Une grande tourelle qui tire de puissants faisceaux à longue portée. -block.repair-point.description = Soigne en permanence l'unité endommagée la plus proche à proximité. -block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index bdfc172ddcd2..1b32ac77da55 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -1,9 +1,10 @@ -credits.text = Készítette [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[] +#Fordította: Vajda Simon +credits.text = Created by [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = Credits -contributors = Fordítók és készítők -discord = Csatlakozz a Mindustry Discord-hoz! -link.discord.description = A hivatalos Mindustry Discord chatroom -link.reddit.description = A Mindustry subreddit +contributors = Fordítok és készítők +discord = Csatlakozz a Mindustry Discord szerverhez! +link.discord.description = Az eredeti Mindustry Discord chatszoba +link.reddit.description = A Mindustry subreddit link.github.description = A játék forráskódja link.changelog.description = Frissítési változások listája link.dev-builds.description = Instabil fejlesztői build-ek @@ -13,30 +14,38 @@ link.google-play.description = Google Play áruház listázás link.f-droid.description = F-Droid katalógus listázás link.wiki.description = Hivatalos Mindustry wiki link.suggestions.description = Új funkciók ajánlása +link.bug.description = Találtál egyett? Jelentsd itt linkfail = Nem sikerült megnyitni a linket!\nAz URL a vágólapra lett másolva. screenshot = Képernyőkép mentve ide: {0} screenshot.invalid = Túl nagy a térkép, nincsen elég memória a képernyőképhez. -gameover = Vége a játéknak +gameover = Játék vége +gameover.disconnect = Kapcsolat bontása gameover.pvp = A[accent] {0}[] csapat nyert! +gameover.waiting = [accent]Várakozás a következő mapra... highscore = [accent]Új rekord! copied = Másolva. -indev.popup = [accent]v6[] is currently in [accent]alpha[].\n[lightgray]This means:[]\n[scarlet]- The campaign is completely unfinished[]\n- Content is missing\n - Most [scarlet]Unit AI[] does not work properly\n- Many units are unfinished\n- Everything you see is subject to change or removal.\n\nReport bugs or crashes on [accent]Github[]. -indev.notready = This part of the game isn't ready yet +indev.notready = A játéknak ez a része még nincsen kész +indev.campaign = [accent]Gratulálunk! Elérte a kampány végét! []\n\nEz a tartalom mostanáig terjedt. A bolygóközi utazás a jövőbeli frissítésekben szerepel. load.sound = Hangok -load.map = Térképek +load.map = Mapok load.image = Képek load.content = Tartalom load.system = Rendszer load.mod = Modok load.scripts = Szkriptek -be.update = Egy új Bleeding Edge build érhető el: -be.update.confirm = Letöltés és újraindítás?? +be.update = Új Bleeding Edge épület áll rendelkezésre: +be.update.confirm = Letölti és újra indítja? be.updating = Frissítés... -be.ignore = Figyelmen kívül hagyás -be.noupdates = Nincsen új frissítés. -be.check = Frissítések keresése +be.ignore = Mellőzés +be.noupdates = Nem találtunk frissítést. +be.check = Frissítések keresése. + +mod.featured.dialog.title = Mod kereső (WIP) +mods.browser.selected = Mod kiválasztása +mods.browser.add = Letöltés +mods.github.open = Megtekintés schematic = Schematic schematic.add = Schematic mentése... @@ -55,68 +64,69 @@ schematic.saved = Schematic mentve. schematic.delete.confirm = Ez a Schematic törölve lesz. schematic.rename = Schematic átnevezése schematic.info = {0}x{1}, {2} blokk -schematic.disabled = [scarlet]Schematics disabled[]\nYou are not allowed to use schematics on this [accent]map[] or [accent]server. +schematic.disabled = [scarlet]Sémák letiltva[]\nNem használhat sematikákat ezen a [accent]mapon[] vagy [accent] szerveren. -stat.wave = Hullámok kivédve:[accent] {0} -stat.enemiesDestroyed = Ellenségek kivédve:[accent] {0} +stats = Statisztika +stat.wave = Hullámok kivádve:[accent] {0} +stat.enemiesDestroyed = Kivédett ellenség:[accent] {0} stat.built = Épített épületek:[accent] {0} -stat.destroyed = Ledöntött épületek:[accent] {0} +stat.destroyed = Szétrombolt épületek:[accent] {0} stat.deconstructed = Törölt épületek:[accent] {0} stat.delivered = Elindított erőforrások: -stat.playtime = Játékidő:[accent] {0} +stat.playtime = Játszott idő:[accent] {0} stat.rank = Végső értékelés: [accent]{0} -globalitems = [accent]Global Items -map.delete = Biztos, hogy törölni akarod a "[accent]{0}[]" térképet? -level.highscore = Rekord: [accent]{0} -level.select = Pálya választása +globalitems = [accent]Összes item +map.delete = Biztosan törli ezt a mapot"[accent]{0}[]"? +level.highscore = Magas pontszám: [accent]{0} +level.select = Szint kiválasztása level.mode = Játékmód: -coreattack = < A mag támadás alatt van! > +coreattack = < A mag támadás alatt! > nearpoint = [[ [scarlet]AZONNAL HAGYD EL A LEDOBÁSI PONTOT[] ]\nveszélyes zóna database = Mag adatbázis savegame = Játék mentése loadgame = Játék betöltése joingame = Csatlakozás játékhoz -customgame = Speciális játék +customgame = Egyedi játék newgame = Új játék none = -minimap = Minitérkép +minimap = Minimap position = Pozíció close = Bezárás website = Weboldal quit = Kilépés -save.quit = Mentés és kilépés -maps = Térképek -maps.browse = Térképek böngészése +save.quit = Mentés & Kilépés +maps = Mapok +maps.browse = Mapok keresése continue = Folytatás -maps.none = [lightgray]Nincsen térkép! +maps.none = [lightgray]Nem találtunk ilyen mapot! invalid = Érvénytelen -pickcolor = Szín kiválasztása +pickcolor = Válasszon színt preparingconfig = Konfiguráció előkészítése preparingcontent = Tartalom előkészítése uploadingcontent = Tartalom feltöltése uploadingpreviewfile = Előnézet feltöltése committingchanges = Változások mentése done = Kész -feature.unsupported = Az eszköz nem támogatja a funkciót. +feature.unsupported = Az eszköz nem támogatja ezt a funkciót. -mods.alphainfo = Figyelem! a modok alfa állapotban vannak, és[scarlet] nagyon sok lehet benne a hiba[].\nJelentsd be az esetleges hibákat a Mindustry GitHubon vagy a Discordon. +mods.alphainfo = Figyelem! a modok alfa állapotban vannak, és[scarlet] nagyon sok lehet benne a hiba[].\nJelentsd be az esetleges hibákat a Mindustry GitHubon. mods = Modok -mods.none = [LIGHT_GRAY]Nincsen Mod! +mods.none = [lightgray]Nincsen mod! mods.guide = Mod készítési útmutató -mods.report = Hiba bejelentése -mods.openfolder = Mod mappa -mods.reload = Reload -mods.reloadexit = The game will now exit, to reload mods. +mods.report = Hiba jelentése +mods.openfolder = Megnyitás mappából +mods.reload = Újratöltés +mods.reloadexit = Indítsa újra a játékot, hogy betöltődjenek a modok. mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Aktív mod.disabled = [scarlet]Inaktív mod.disable = Letiltás -mod.content = Content: +mod.content = Tartalom: mod.delete.error = Nem lehet törölni a Modot. Lehet, hogy egy másik folyamat használja. mod.requiresversion = [scarlet]Minimális játék verzió: [accent]{0} -mod.outdated = [scarlet]Not compatible with V6 (no minGameVersion: 105) -mod.missingdependencies = [scarlet]Hiányzó függőségek: {0} +mod.outdated = [scarlet]Nem kompatibilis V6-al (no minGameVersion: 105) +mod.missingdependencies = [scarlet]Hiányzó függőség: {0} mod.erroredcontent = [scarlet]Tartalom hiba mod.errors = Hiba történt a tartalom betöltése közben. mod.noerrorplay = [scarlet]Vannak hibás Modok.[] Töröld le vagy javítsd ki a játék előtt. @@ -125,31 +135,35 @@ mod.enable = Engedélyezés mod.requiresrestart = A játék kilép a módosítások alkalmazásához. mod.reloadrequired = [scarlet]Újratöltés szükséges mod.import = Mod importálása -mod.import.file = Import File +mod.import.file = Fájl importálása mod.import.github = GitHub Mod importálása -mod.jarwarn = [scarlet]JAR mods are inherently unsafe.[]\nMake sure you're importing this mod from a trustworthy source! +mod.jarwarn = [scarlet]A JAR modok eredendően nem biztonságosak.[]\nGyőződjön meg arról, hogy ezt a modot megbízható forrásból importálja! mod.item.remove = Ez az elem része a [accent] '{0}'[] Modnak. A törléshez távolítsd el a Modot. mod.remove.confirm = Ez a Mod törölve lesz. mod.author = [LIGHT_GRAY]Készítő:[] {0} mod.missing = Ez a mentés nemrég törölt vagy frissített Modokat tartalmaz. Elképzelhető, hogy nem fog működni. Biztosan betöltöd?\n[lightgray]Modok:\n{0} mod.preview.missing = Mielőtt publikálod ezt a modot a workshopra, adj hozzá egy borítóképet.\nKészíts egy[accent] preview.png[] nevű képet a mod mappájába, majd próbáld újra. mod.folder.missing = Csak mappa formában lehet feltölteni a workshopra.\nHogy átalakítsd, csomagold ki a ZIP-et egy mappába és töröld le a régit, Majd indítsd újra a játékot vagy töltsd újra a modot. -mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. +mod.scripts.disable = Az eszköz nem támogatja a szkriptekkel rendelkező modokat. \nA játékhoz le kell tiltania ezeket a modokat. about.button = Közreműködők name = Név: noname = Válassz egy[accent] nevet[] előbb. -planetmap = Planet Map -launchcore = Launch Core +planetmap = Bolygó térkép +launchcore = Mag kilövése filename = Fájl név: unlocked = Új tartalom kinyitva! +available = Új kutatás áll rendelkezésre! completed = [accent]Kész techtree = Tech Tree +research.legacy = [accent]5.0[] kutatási adatok találhatók.\nSzeretné [accent] betölteni ezeket az adatokat [], vagy [accent] eldobni [], és újraindítani a kutatást az új kampányban (ajánlott)? +research.load = Betöltés +research.discard = Eldobás research.list = [lightgray]Fedezd fel: research = Felfedezés researched = [lightgray]{0} felfedezve. -research.progress = {0}% complete -players = {0} játékos +research.progress = {0}% kész +players = {0} játékosok players.single = {0} játékos players.search = keresés players.notfound = [gray]nincsen játékos @@ -171,11 +185,11 @@ server.kicked.customClient = Ez a szerver nem támogatja a saját készítésű server.kicked.gameover = Vége a játéknak! server.kicked.serverRestarting = Ez a szerver újraindul. server.versions = Te verziód:[accent] {0}[]\nSzerver verzió:[accent] {1}[] -host.info = The [accent]host[] button hosts a server on port [scarlet]6567[]. \nAnybody on the same [lightgray]wifi or local network[] should be able to see your server in their server list.\n\nIf you want people to be able to connect from anywhere by IP, [accent]port forwarding[] is required.\n\n[lightgray]Note: If someone is experiencing trouble connecting to your LAN game, make sure you have allowed Mindustry access to your local network in your firewall settings. Note that public networks sometimes do not allow server discovery. -join.info = Here, you can enter a [accent]server IP[] to connect to, or discover [accent]local network[] or [accent]global[] servers to connect to.\nBoth LAN and WAN multiplayer is supported.\n\n[lightgray]If you want to connect to someone by IP, you would need to ask the host for their IP, which can be found by googling "my ip" from their device. +host.info = Az [accent]host[] gomb kiszolgálót üzemeltet a [scarlet]6567[] porton.\nAzon a [lightgray] wifin vagy a helyi hálózaton [] bárki láthatja a szervert a szerverlistáján.\n\nHa azt szeretné, hogy az emberek bárhonnan IP-címmel csatlakozhassanak, [accent] port-továbbítás []\n\n[lightgray] Megjegyzés: Ha valakinek problémái vannak a LAN-játékhoz való csatlakozással, győződjön meg arról, hogy a tűzfal beállításaiban engedélyezte-e a Mindustry hozzáférését a helyi hálózathoz. Ne feledje, hogy a nyilvános hálózatok néha nem teszik lehetővé a kiszolgálók felderítését. +join.info = Itt megadhat egy [accent]szerver IP-t[] a csatlakozáshoz, vagy felfedezheti a [accent]helyi hálózat[] vagy [accent]globális[] szervereket, amelyekhez csatlakozni szeretne.\nMindkét LAN és WAN multiplayer támogatott.\n\n[lightgray]Ha IP-vel akarsz csatlakozni valakihez, akkor meg kell kérdezned a gazdagéptől az IP-jét, amely megtalálható a "my ip" Google kereséssel. hostserver = Másik játékos meghívása invitefriends = Barátok meghívása -hostserver.mobile = JátékosMeghívása +hostserver.mobile = Játékos meghívása host = meghívás hosting = [accent]Szerver megnyitása... hosts.refresh = Frissítés @@ -189,6 +203,11 @@ servers.local = Lokális Szerverek servers.remote = Távoli Szerverek servers.global = Közösségi szerverek +servers.disclaimer = A közösségi szervereket [accent]nem[] a fejlesztő birtokolja és nem ellenőrzi.\n\nA szerverek tartalmazhatnak olyan felhasználók által létrehozott tartalmat, amely nem minden korosztály számára megfelelő. +servers.showhidden = Rejtett szerverek megjelenítése +server.shown = Látható +server.hidden = Rejtett + trace = Játékos követése trace.playername = Játékos neve: [accent]{0} trace.ip = IP: [accent]{0} @@ -222,6 +241,7 @@ disconnect.timeout = Időtúllépés. disconnect.data = Nem sikerült betölteni az adatokat! cantconnect = Nem sikerült csatlakozni ehhez: ([accent]{0}[]). connecting = [accent]Csatlakozás... +reconnecting = [accent]Újra csatlakozás... connecting.data = [accent]Betöltés... server.port = Port: server.addressinuse = Már van ilyen cím! @@ -267,6 +287,9 @@ cancel = Mégse openlink = Link megnyitása copylink = Link másolása back = Vissza +crash.export = Összeomlási napló exportálása +crash.none = Nem található összeomlási napló. +crash.exported = Összeomlási napló exportálva. data.export = Adatok Exportálása data.import = Adatok Importálása data.openfolder = Adat mappa megnyitása @@ -276,46 +299,49 @@ data.import.confirm = Külső adat importálása felülírja[scarlet] minden[] j quit.confirm = Biztos kilépsz? quit.confirm.tutorial = Biztosan tudod, mit csinálsz?\nA bevezetőt megtalálod itt:[accent] Beállítások->Játék->Bevezető újrajátszása[] loading = [accent]Betöltés... -reloading = [accent]Reloading Mods... -saving = [accent]Saving... -respawn = [accent][[{0}][] to respawn in core -cancelbuilding = [accent][[{0}][] to clear plan -selectschematic = [accent][[{0}][] to select+copy -pausebuilding = [accent][[{0}][] to pause building -resumebuilding = [scarlet][[{0}][] to resume building -wave = [accent]{0}. hullám -wave.cap = [accent]Wave {0}/{1} -wave.waiting = [lightgray]Következő hullám: {0} -wave.waveInProgress = [lightgray]Wave in progress +reloading = [accent]Modok Újratöltése... +saving = [accent]Mentés... +respawn = Nyomd meg a [accent][[{0}][] gombot, hogy újra élegy a magban. +cancelbuilding = Használd a(z) [accent][[{0}][] gombot, hogy töröld a tervrajzot. +selectschematic = Használd a(z) [accent][[{0}][] gombot, hogy kijelölj és másolj. +pausebuilding = Használd a(z) [accent][[{0}][] gombot, hogy megállítsd az építkezést. +resumebuilding = Használd a(z) [scarlet][[{0}][] gombot, hogy folytasd az építkezést. +showui = A kezelőfelület elrejtve.\nNyomja meg a(z) [accent][[{0}][] gombot a megjelenítéséhez. +wave = [accent]{0}. Hullám +wave.cap = [accent]{0}/{1} Hullám +wave.waiting = [lightgray]Következő hullám {0} +wave.waveInProgress = [lightgray]Hullám folyamatban waiting = [lightgray]Várakozás... -waiting.players = Waiting for players... -wave.enemies = [lightgray]{0} ellenség maradt -wave.enemy = [lightgray]{0} ellenség maradt -wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. -wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. -loadimage = Load Image -saveimage = Save Image -unknown = Unknown -custom = Custom -builtin = Built-In -map.delete.confirm = Are you sure you want to delete this map? This action cannot be undone! +waiting.players = Várakozás a játékosokra... +wave.enemies = [lightgray]Fennmaradó ellenségek: {0} +wave.enemycores = [accent]{0}[lightgray] Ellenséges magok +wave.enemycore = [accent]{0}[lightgray] Ellenséges mag +wave.enemy = [lightgray]{0} Megmaradt ellenség +wave.guardianwarn = Az őrző [accent]{0}[] hullám múlva érkezik. +wave.guardianwarn.one = Az őrző [accent]{0}[] hullám múlva érkezik. +loadimage = Fénykép betöltése +saveimage = Fénykép mentése +unknown = Ismeretlen +custom = Egyedi +builtin = Beépített +map.delete.confirm = Biztosan törli ezt a mapot? Ez a művelet nem visszavonható! map.random = [accent]Random Map -map.nospawn = This map does not have any cores for the player to spawn in! Add a[accent] orange[] core to this map in the editor. -map.nospawn.pvp = This map does not have any enemy cores for player to spawn into! Add[SCARLET] non-orange[] cores to this map in the editor. -map.nospawn.attack = This map does not have any enemy cores for player to attack! Add[SCARLET] red[] cores to this map in the editor. -map.invalid = Error loading map: corrupted or invalid map file. -workshop.update = Update Item -workshop.error = Error fetching workshop details: {0} -map.publish.confirm = Are you sure you want to publish this map?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your maps will not show up! -workshop.menu = Select what you would like to do with this item. -workshop.info = Item Info -changelog = Changelog (optional): +map.nospawn = Ez a map nem rendelkezik maggal, amelybe a játékos beleszülethet! Adjon hozzá egy [accent]narancssárga[] magot ehhez a maphoz a szerkesztőben. +map.nospawn.pvp = Ezen a térképen nincsen ellenséges mag, amiba az másik csapat éledhet! Adjon hozzá [scarlet]nem narancssárga[] magok ehhez a maphoz a szerkesztőben. +map.nospawn.attack = Ezen a térképen nincsen ellenséges mag! Adjon hozzá [scarlet]piros[] magot ehhez a maphoz a szerkesztőben. +map.invalid = Hiba a map betöltésekor: sérült vagy érvénytelen mapfájl. +workshop.update = Item frisítése +workshop.error = Hiba történt a műhely részleteinek lekérésekor: {0} +map.publish.confirm = Biztos, hogy közzéteszi ezt a mapot?\n\n[lightgray] Győződjön meg róla, hogy először elfogadta a Workshop EULA-t, különben a mapok nem jelennek meg! +workshop.menu = Válassza ki, mit szeretne csinálni ezzel az itemmel. +workshop.info = Item Infó +changelog = Changelog (opcionális): eula = Steam EULA -missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked. -publishing = [accent]Publishing... -publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up! -publish.error = Error publishing item: {0} -steam.error = Failed to initialize Steam services.\nError: {0} +missing = Ezt az elemet törölték vagy áthelyezték.\n[lightgray] A műhely adatait automatikusan leválasztották. +publishing = [accent]Publikálás... +publish.confirm = Biztosan közzéteszi ezt?\n\n[lightgray] Győződjön meg róla, hogy először elfogadta a Workshop EULA-t, különben az itemei nem jelennek meg! +publish.error = Hiba az item publikálásakor: {0} +steam.error = Nem sikerült inicializálni a Steam szolgáltatásokat.\nHiba: {0} editor.brush = Brush editor.openin = Open In Editor @@ -350,6 +376,7 @@ waves.invalid = Invalid waves in clipboard. waves.copied = Waves copied. waves.none = No enemies defined.\nNote that empty wave layouts will automatically be replaced with the default layout. +#these are intentionally in lower case wavemode.counts = counts wavemode.totals = totals wavemode.health = health @@ -384,20 +411,20 @@ editor.importmap = Import Map editor.importmap.description = Import an already existing map editor.importfile = Import File editor.importfile.description = Import an external map file -editor.importimage = Import Legacy Map +editor.importimage = Import Image File editor.importimage.description = Import an external map image file editor.export = Export... editor.exportfile = Export File editor.exportfile.description = Export a map file editor.exportimage = Export Terrain Image -editor.exportimage.description = Export a map image file +editor.exportimage.description = Export an image file containing only basic terrain editor.loadimage = Import Terrain editor.saveimage = Export Terrain -editor.unsaved = [scarlet]You have unsaved changes![]\nAre you sure you want to exit? +editor.unsaved = Are you sure you want to exit?\n[scarlet]Any unsaved changes will be lost. editor.resizemap = Resize Map editor.mapname = Map Name: editor.overwrite = [accent]Warning!\nThis overwrites an existing map. -editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it? +editor.overwrite.confirm = [scarlet]Warning![] A map with this name already exists. Are you sure you want to overwrite it?\n"[accent]{0}[]" editor.exists = A map with this name already exists. editor.selectmap = Select a map to load: @@ -456,56 +483,55 @@ filter.option.percentile = Percentile width = Szélesség: height = Magasság: menu = Menü -play = Indítás -campaign = Campaign -load = Load -save = Save +play = Játék +campaign = Kampány +load = Betöltés +save = Mentés fps = FPS: {0} ping = Ping: {0}ms -language.restart = Please restart your game for the language settings to take effect. +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb +language.restart = Indítsa újra a játékot, hogy betöltődjenek a nyelvi beállítások. settings = Beállítások -tutorial = Bevezető -tutorial.retake = Bevezető újrajátszása +tutorial = Tutorial +tutorial.retake = Re-Take Tutorial editor = Szerkesztő -mapeditor = Térképszerkesztő +mapeditor = Map szerkesztő -abandon = Elhagyás -abandon.text = Ez a zóna és minden tartalma el lesz hagyva. -locked = Zárva +abandon = Abandon +abandon.text = This zone and all its resources will be lost to the enemy. +locked = Lezárva complete = [lightgray]Complete: requirement.wave = Reach Wave {0} in {1} requirement.core = Destroy Enemy Core in {0} requirement.research = Research {0} +requirement.produce = Produce {0} requirement.capture = Capture {0} -bestwave = [lightgray]Best Wave: {0} -launch.text = Launch +launch.text = Indítás research.multiplayer = Only the host can research items. +map.multiplayer = Only the host can view sectors. uncover = Uncover configure = Configure Loadout + loadout = Loadout -resources = Resources +resources = Resources bannedblocks = Banned Blocks -addall = Add All +addall = Összes hozzáadása +launch.from = Launching From: [accent]{0} launch.destination = Destination: {0} configure.invalid = Amount must be a number between 0 and {0}. -zone.unlocked = [lightgray]{0} unlocked. -zone.requirement.complete = Requirement for {0} completed:[lightgray]\n{1} -zone.resources = [lightgray]Resources Detected: -zone.objective = [lightgray]Objective: [accent]{0} -zone.objective.survival = Survive -zone.objective.attack = Destroy Enemy Core add = Add... -boss.health = Boss Health +boss.health = Guardian Health -connectfail = [crimson]Connection error:\n\n[accent]{0} +connectfail = [scarlet]Csatlakozási hiba:\n\n[accent]{0} error.unreachable = Server unreachable.\nIs the address spelled correctly? error.invalidaddress = Invalid address. error.timedout = Timed out!\nMake sure the host has port forwarding set up, and that the address is correct! error.mismatch = Packet error:\npossible client/server version mismatch.\nMake sure you and the host have the latest version of Mindustry! error.alreadyconnected = Already connected. -error.mapnotfound = Map file not found! -error.io = Network I/O error. -error.any = Unknown network error. +error.mapnotfound = A map fájl nem található! +error.io = Internet I/O hiba. +error.any = Ismeretlen internet hiba. error.bloom = Failed to initialize bloom.\nYour device may not support it. weather.rain.name = Rain @@ -517,17 +543,41 @@ weather.fog.name = Fog sectors.unexplored = [lightgray]Unexplored sectors.resources = Resources: sectors.production = Production: +sectors.export = Export: +sectors.time = Idő: +sectors.threat = Threat: +sectors.wave = Hullámok: sectors.stored = Stored: -sectors.resume = Resume +sectors.resume = Folytatás sectors.launch = Launch -sectors.select = Select +sectors.select = Kiválasztás sectors.nonelaunch = [lightgray]none (sun) -sectors.rename = Rename Sector +sectors.rename = Szektor átnevezése +sectors.enemybase = [scarlet]Ellenséges bázis +sectors.vulnerable = [scarlet]Vulnerable +sectors.underattack = [scarlet]Under attack! [accent]{0}% damaged +sectors.survives = [accent]Survives {0} waves +sectors.go = Go +sector.curcapture = Sector Captured +sector.curlost = Elvesztett szektor sector.missingresources = [scarlet]Insufficient Core Resources +sector.attacked = Sector [accent]{0}[white] under attack! +sector.lost = Sector [accent]{0}[white] lost! +#note: the missing space in the line below is intentional +sector.captured = Sector [accent]{0}[white]captured! + +threat.low = Gyenge +threat.medium = Közepes +threat.high = Nehéz +threat.extreme = Extrém +threat.eradication = Felszámolás + +planets = Planets planet.serpulo.name = Serpulo planet.sun.name = Sun +sector.impact0078.name = Impact 0078 sector.groundZero.name = Ground Zero sector.craters.name = The Craters sector.frozenForest.name = Frozen Forest @@ -539,6 +589,10 @@ sector.overgrowth.name = Overgrowth sector.tarFields.name = Tar Fields sector.saltFlats.name = Salt Flats sector.fungalPass.name = Fungal Pass +sector.biomassFacility.name = Biomass Synthesis Facility +sector.windsweptIslands.name = Windswept Islands +sector.extractionOutpost.name = Extraction Outpost +sector.planetaryTerminal.name = Planetary Launch Terminal sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. @@ -546,43 +600,48 @@ sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. +sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Mace units. Destroy it. sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. +sector.biomassFacility.description = The origin of spores. This is the facility in which they were researched and initially produced.\nResearch the technology contained within. Cultivate spores for the production of fuel and plastics.\n\n[lightgray]Upon this facility's demise, the spores were released. Nothing in the local ecosystem could compete with such an invasive organism. +sector.windsweptIslands.description = Further past the shoreline is this remote chain of islands. Records show they once had [accent]Plastanium[]-producing structures.\n\nFend off the enemy's naval units. Establish a base on the islands. Research these factories. +sector.extractionOutpost.description = A remote outpost, constructed by the enemy for the purpose of launching resources to other sectors.\n\nCross-sector transport technology is essential for further conquest. Destroy the base. Research their Launch Pads. +sector.impact0078.description = Here lie remnants of the interstellar transport vessel that first entered this system.\n\nSalvage as much as possible from the wreckage. Research any intact technology. +sector.planetaryTerminal.description = The final target.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure. -settings.language = Language -settings.data = Game Data -settings.reset = Reset to Defaults +settings.language = Nyelvek +settings.data = Játék adatok +settings.reset = Visszaállítás az alapértelmezett értékekre settings.rebind = Rebind -settings.resetKey = Reset -settings.controls = Controls -settings.game = Game -settings.sound = Sound -settings.graphics = Graphics -settings.cleardata = Clear Game Data... -settings.clear.confirm = Are you sure you want to clear this data?\nWhat is done cannot be undone! -settings.clearall.confirm = [scarlet]WARNING![]\nThis will clear all data, including saves, maps, unlocks and keybinds.\nOnce you press 'ok' the game will wipe all data and automatically exit. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves -settings.clearresearch = Clear Research -settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? -settings.clearcampaignsaves = Clear Campaign Saves -settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? -paused = [accent]< Paused > -clear = Clear -banned = [scarlet]Banned -unplaceable.sectorcaptured = [scarlet]Requires captured sector -yes = Yes -no = No -info.title = Info -error.title = [crimson]An error has occured -error.crashtitle = An error has occured -unit.nobuild = [scarlet]Unit can't build -lastaccessed = [lightgray]Last Accessed: {0} +settings.resetKey = Visszaállítás +settings.controls = Irányítás +settings.game = Játék +settings.sound = Hangok +settings.graphics = Grafika +settings.cleardata = Játék adatok törlése... +settings.clear.confirm = Biztosan törli ezeket az adatokat?\n A végrehajtottakat nem lehet visszavonni! +settings.clearall.confirm = [scarlet] FIGYELEM! []\n Ez törli az összes adatot, beleértve a mentéseket, a térképeket, a feloldásokat és a billentyűzárakat.\n Amint megnyomja az 'OK' gombot, a játék minden adatot töröl és automatikusan kilép. +settings.clearsaves.confirm = Biztosan törli az összes mentést? +settings.clearsaves = Mentések törlése +settings.clearresearch = Kutatások törlése +settings.clearresearch.confirm = Biztosan törli az összes kutatást? +settings.clearcampaignsaves = Kampány mentések törlése +settings.clearcampaignsaves.confirm = Biztosan törli az összes kampány mentést? +paused = [accent]< Megállítva > +clear = Törlés +banned = [scarlet]Kitiltva +yes = Igen +no = Nem +info.title = Infó +error.title = [scarlet]Hiba történt +error.crashtitle = Hiba történt +unit.nobuild = [scarlet]Az egység nem tud építeni +lastaccessed = [lightgray]Utoljára megtekintve: {0} block.unknown = [lightgray]??? +stat.description = Célja stat.input = Input stat.output = Output stat.booster = Booster @@ -610,6 +669,8 @@ stat.memorycapacity = Memory Capacity stat.basepowergeneration = Base Power Generation stat.productiontime = Production Time stat.repairtime = Block Full Repair Time +stat.weapons = Weapons +stat.bullet = Bullet stat.speedincrease = Speed Increase stat.range = Range stat.drilltier = Drillables @@ -632,7 +693,7 @@ stat.lightningchance = Lightning Chance stat.lightningdamage = Lightning Damage stat.flammability = Flammability stat.radioactivity = Radioactivity -stat.heatcapacity = HeatCapacity +stat.heatcapacity = Heat Capacity stat.viscosity = Viscosity stat.temperature = Temperature stat.speed = Speed @@ -642,12 +703,16 @@ stat.minetier = Mine Tier stat.payloadcapacity = Payload Capacity stat.commandlimit = Command Limit stat.abilities = Abilities +stat.canboost = Can Boost +stat.flying = Flying +stat.ammouse = Ammo Use ability.forcefield = Force Field ability.repairfield = Repair Field ability.statusfield = Status Field ability.unitspawn = {0} Factory ability.shieldregenfield = Shield Regen Field +ability.movelightning = Movement Lightning bar.drilltierreq = Better Drill Required bar.noresources = Missing Resources @@ -663,7 +728,6 @@ bar.powerlines = Connections: {0}/{1} bar.items = Items: {0} bar.capacity = Capacity: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = Liquid bar.heat = Heat bar.power = Power @@ -676,12 +740,15 @@ units.processorcontrol = [lightgray]Processor Controlled bullet.damage = [stat]{0}[lightgray] damage bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles bullet.incendiary = [stat]incendiary +bullet.sapping = [stat]sapping bullet.homing = [stat]homing bullet.shock = [stat]shock bullet.frag = [stat]frag +bullet.buildingdamage = [stat]{0}%[lightgray] building damage bullet.knockback = [stat]{0}[lightgray] knockback bullet.pierce = [stat]{0}[lightgray]x pierce bullet.infinitepierce = [stat]pierce +bullet.healpercent = [stat]{0}[lightgray]% healing bullet.freezing = [stat]freezing bullet.tarred = [stat]tarred bullet.multiplier = [stat]{0}[lightgray]x ammo multiplier @@ -706,6 +773,8 @@ unit.items = items unit.thousands = k unit.millions = mil unit.billions = b +unit.pershot = /shot +category.purpose = Purpose category.general = General category.power = Power category.liquids = Liquids @@ -713,70 +782,72 @@ category.items = Items category.crafting = Input/Output category.function = Function category.optional = Optional Enhancements -setting.landscape.name = Lock Landscape -setting.shadows.name = Shadows -setting.blockreplace.name = Automatic Block Suggestions -setting.linear.name = Linear Filtering -setting.hints.name = Hints -setting.flow.name = Display Resource Flow Rate -setting.buildautopause.name = Auto-Pause Building -setting.animatedwater.name = Animated Water -setting.animatedshields.name = Animated Shields -setting.antialias.name = Antialias[lightgray] (requires restart)[] -setting.playerindicators.name = Player Indicators -setting.indicators.name = Enemy/Ally Indicators -setting.autotarget.name = Auto-Target -setting.keyboard.name = Mouse+Keyboard Controls -setting.touchscreen.name = Touchscreen Controls +setting.landscape.name = Fekvő mód zárolása +setting.shadows.name = Árnyékok +setting.blockreplace.name = Automatikus blokk javaslatok +setting.linear.name = Lineáris szűrés +setting.hints.name = Tippek +setting.flow.name = Az erőforrás áramlási sebességének megjelenítése +setting.backgroundpause.name = Szünet a háttérben +setting.buildautopause.name = Automatikus szünet építéskor +setting.animatedwater.name = Animált víz +setting.animatedshields.name = Animált pajzsok +setting.antialias.name = Antialias[lightgray] (újra kell indítani)[] +setting.playerindicators.name = Játékos mutató +setting.indicators.name = Ellenség mutató +setting.autotarget.name = Automatikus lövés +setting.keyboard.name = Irányítás egérrel és billentyűzettel +setting.touchscreen.name = Irányítás érintőképernyővel setting.fpscap.name = Max FPS -setting.fpscap.none = None +setting.fpscap.none = Nincs setting.fpscap.text = {0} FPS -setting.uiscale.name = UI Scaling[lightgray] (requires restart)[] +setting.uiscale.name = UI Scaling[lightgray] (restart required)[] setting.swapdiagonal.name = Always Diagonal Placement -setting.difficulty.training = Training -setting.difficulty.easy = Easy -setting.difficulty.normal = Normal -setting.difficulty.hard = Hard -setting.difficulty.insane = Insane -setting.difficulty.name = Difficulty: +setting.difficulty.training = Kiképzés +setting.difficulty.easy = Könnyű +setting.difficulty.normal = közepes +setting.difficulty.hard = Nehéz +setting.difficulty.insane = Őrült +setting.difficulty.name = Nehézség: setting.screenshake.name = Screen Shake setting.effects.name = Display Effects setting.destroyedblocks.name = Display Destroyed Blocks -setting.blockstatus.name = Display Block Status +setting.blockstatus.name = Blokk állapotának megjelenítése setting.conveyorpathfinding.name = Conveyor Placement Pathfinding setting.sensitivity.name = Controller Sensitivity setting.saveinterval.name = Save Interval -setting.seconds = {0} seconds -setting.blockselecttimeout.name = Block Select Timeout -setting.milliseconds = {0} milliseconds -setting.fullscreen.name = Fullscreen -setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart) -setting.fps.name = Show FPS & Ping -setting.smoothcamera.name = Smooth Camera +setting.seconds = {0} másodperc +setting.milliseconds = {0} ezredmásodperc +setting.fullscreen.name = Teljesképernyő +setting.borderlesswindow.name = Keret nélküli ablak[lightgray] (újraindításra lehet szükség) +setting.fps.name = FPS és Ping mutatása +setting.smoothcamera.name = Sima kamera setting.vsync.name = VSync -setting.pixelate.name = Pixelate -setting.minimap.name = Show Minimap -setting.coreitems.name = Display Core Items (WIP) -setting.position.name = Show Player Position -setting.musicvol.name = Music Volume -setting.atmosphere.name = Show Planet Atmosphere -setting.ambientvol.name = Ambient Volume -setting.mutemusic.name = Mute Music -setting.sfxvol.name = SFX Volume -setting.mutesound.name = Mute Sound +setting.pixelate.name = Pixeles +setting.minimap.name = Minimap +setting.coreitems.name = Az alapvető elemek megjelenítése +setting.position.name = A játékos pozíciójának megjelenítése +setting.musicvol.name = Zene hangerő +setting.atmosphere.name = Bolygó atmoszféra +setting.ambientvol.name = Környezeti hangerő +setting.mutemusic.name = Néma zene +setting.sfxvol.name = SFX hangerő +setting.mutesound.name = Néma hang setting.crashreport.name = Send Anonymous Crash Reports -setting.savecreate.name = Auto-Create Saves +setting.savecreate.name = Automatikus mentés setting.publichost.name = Public Game Visibility -setting.playerlimit.name = Player Limit -setting.chatopacity.name = Chat Opacity +setting.playerlimit.name = Játékos limit +setting.chatopacity.name = Chat átlátszatlanság setting.lasersopacity.name = Power Laser Opacity -setting.bridgeopacity.name = Bridge Opacity -setting.playerchat.name = Display Player Bubble Chat +setting.bridgeopacity.name = Híd átlátszatlanság +setting.playerchat.name = A játékos buborékos csevegésének megjelenítése +setting.showweather.name = Időjárás grafika megjelenítése public.confirm = Do you want to make your game public?\n[accent]Anyone will be able to join your games.\n[lightgray]This can be changed later in Settings->Game->Public Game Visibility. +public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? public.beta = Note that beta versions of the game cannot make public lobbies. uiscale.reset = UI scale has been changed.\nPress "OK" to confirm this scale.\n[scarlet]Reverting and exiting in[accent] {0}[] seconds... -uiscale.cancel = Cancel & Exit -setting.bloom.name = Bloom +uiscale.cancel = Mégse és Kilépés +setting.bloom.name = Virágzás keybind.title = Rebind Keys keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General @@ -836,6 +907,8 @@ keybind.menu.name = Menu keybind.pause.name = Pause keybind.pause_building.name = Pause/Resume Building keybind.minimap.name = Minimap +keybind.planet_map.name = Planet Map +keybind.research.name = Research keybind.chat.name = Chat keybind.player_list.name = Player List keybind.console.name = Console @@ -845,17 +918,18 @@ keybind.toggle_menus.name = Toggle Menus keybind.chat_history_prev.name = Chat History Prev keybind.chat_history_next.name = Chat History Next keybind.chat_scroll.name = Chat Scroll +keybind.chat_mode.name = Change Chat Mode keybind.drop_unit.name = Drop Unit keybind.zoom_minimap.name = Zoom Minimap mode.help.title = Description of modes -mode.survival.name = Túlélő +mode.survival.name = Survival mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play. -mode.sandbox.name = Homokozó +mode.sandbox.name = Sandbox mode.sandbox.description = Infinite resources and no timer for waves. mode.editor.name = Editor mode.pvp.name = PvP mode.pvp.description = Fight against other players locally.\n[gray]Requires at least 2 differently-colored cores in the map to play. -mode.attack.name = Támadás +mode.attack.name = Attack mode.attack.description = Destroy the enemy's base. \n[gray]Requires a red core in the map to play. mode.custom = Custom Rules @@ -893,12 +967,14 @@ rules.explosions = Block/Unit Explosion Damage rules.ambientlight = Ambient Light rules.weather = Weather rules.weather.frequency = Frequency: +rules.weather.always = Mindig rules.weather.duration = Duration: -content.item.name = Items -content.liquid.name = Liquids -content.unit.name = Units -content.block.name = Blocks +content.item.name = Itemek +content.liquid.name = Folyadékok +content.unit.name = Egységek +content.block.name = Blokkok +content.sector.name = Szektor item.copper.name = Copper item.lead.name = Lead @@ -959,6 +1035,7 @@ block.resupply-point.name = Resupply Point block.parallax.name = Parallax block.cliff.name = Cliff block.sand-boulder.name = Sand Boulder +block.basalt-boulder.name = Basalt Boulder block.grass.name = Grass block.slag.name = Slag block.space.name = Space @@ -1056,7 +1133,6 @@ block.conveyor.name = Conveyor block.titanium-conveyor.name = Titanium Conveyor block.plastanium-conveyor.name = Plastanium Conveyor block.armored-conveyor.name = Armored Conveyor -block.armored-conveyor.description = Moves items at the same speed as titanium conveyors, but possesses more armor. Does not accept inputs from the sides from anything but other conveyor belts. block.junction.name = Junction block.router.name = Router block.distributor.name = Distributor @@ -1064,7 +1140,6 @@ block.sorter.name = Sorter block.inverted-sorter.name = Inverted Sorter block.message.name = Message block.illuminator.name = Illuminator -block.illuminator.description = A small, compact, configurable light source. Requires power to function. block.overflow-gate.name = Overflow Gate block.underflow-gate.name = Underflow Gate block.silicon-smelter.name = Silicon Smelter @@ -1155,11 +1230,16 @@ block.additive-reconstructor.name = Additive Reconstructor block.multiplicative-reconstructor.name = Multiplicative Reconstructor block.exponential-reconstructor.name = Exponential Reconstructor block.tetrative-reconstructor.name = Tetrative Reconstructor -block.payload-conveyor.name = Mass Conveyor +block.payload-conveyor.name = Payload Conveyor block.payload-router.name = Payload Router block.disassembler.name = Disassembler block.silicon-crucible.name = Silicon Crucible block.overdrive-dome.name = Overdrive Dome +#experimental, may be removed +block.block-forge.name = Block Forge +block.block-loader.name = Block Loader +block.block-unloader.name = Block Unloader +block.interplanetary-accelerator.name = Interplanetary Accelerator block.switch.name = Switch block.micro-processor.name = Micro Processor @@ -1170,166 +1250,256 @@ block.large-logic-display.name = Large Logic Display block.memory-cell.name = Memory Cell block.memory-bank.name = Memory Bank -team.blue.name = blue -team.crux.name = red -team.sharded.name = orange -team.orange.name = orange -team.derelict.name = derelict -team.green.name = green -team.purple.name = purple +team.blue.name = kék +team.crux.name = piros +team.sharded.name = narancssárga +team.orange.name = narancssárga +team.derelict.name = elhagyott +team.green.name = zöld +team.purple.name = lila + +hint.skip = Átugrás +hint.desktopMove = Használd a [accent][[WASD][] gombokat a mozgáshoz. +hint.zoom = Használd a [accent]görgőt[] a zoomhoz.. +hint.mine = Mozogjon a \uf8c4 copper közelében, és [accent]érintse meg[] a kézi bányászathoz. +hint.desktopShoot = Használja a [accent]bal egér gombot[] a lövéshez. +hint.depositItems = Az átviteléhez húzzaaz itemeket a hajóról a magra. +hint.respawn = Ha újból hajóvá akar válni, nyomja meg a [accent][[V][] gombot. +hint.respawn.mobile = You have switched control to a unit/structure. To respawn as a ship, [accent]tap the avatar in the top left.[] +hint.desktopPause = Press [accent][[Space][] to pause and unpause the game. +hint.placeDrill = Select the \ue85e [accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and click on a copper patch to place it. +hint.placeDrill.mobile = Select the \ue85e [accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and tap on a copper patch to place it.\n\nPress the \ue800 [accent]checkmark[] at the bottom right to confirm. +hint.placeConveyor = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate. +hint.placeConveyor.mobile = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nHold down your finger for a second and drag to place multiple conveyors. +hint.placeTurret = Place \uf861 [accent]Turrets[] to defend your base from enemies.\n\nTurrets require ammo - in this case, \uf838copper.\nUse conveyors and drills to supply them. +hint.breaking = [accent]Right-click[] and drag to break blocks. +hint.breaking.mobile = Activate the \ue817 [accent]hammer[] in the bottom right and tap to break blocks.\n\nHold down your finger for a second and drag to break in a selection. +hint.research = Use the \ue875 [accent]Research[] button to research new technology. +hint.research.mobile = Use the \ue875 [accent]Research[] button in the \ue88c [accent]Menu[] to research new technology. +hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to control friendly units or turrets. +hint.unitControl.mobile = [accent][[Double-tap][] to control friendly units or turrets. +hint.launch = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the bottom right. +hint.launch.mobile = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the \ue88c [accent]Menu[]. +hint.schematicSelect = Hold [accent][[F][] and drag to select blocks to copy and paste.\n\n[accent][[Middle Click][] to copy a single block type. +hint.conveyorPathfind = Hold [accent][[L-Ctrl][] while dragging conveyors to automatically generate a path. +hint.conveyorPathfind.mobile = Enable \ue844 [accent]diagonal mode[] and drag conveyors to automatically generate a path. +hint.boost = Hold [accent][[L-Shift][] to fly over obstacles with your current unit.\n\nOnly a few ground units have boosters. +hint.command = Press [accent][[G][] to command nearby units of [accent]similar type[] into formation.\n\nTo command ground units, you must first control another ground unit. +hint.command.mobile = [accent][[Double-tap][] your unit to command nearby units into formation. +hint.payloadPickup = Press [accent][[[] to pick up small blocks or units. +hint.payloadPickup.mobile = [accent]Tap and hold[] a small block or unit to pick it up. +hint.payloadDrop = Press [accent]][] to drop a payload. +hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a payload there. +hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. +hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uf87f [accent]Power Nodes[]. +hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down. +hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a  [accent]Foundation[] core over the  [accent]Shard[] core. Make sure it is free from nearby obstructions. +hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[]. +hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[]. +hint.coopCampaign = When playing the [accent]co-op campaign[], items that are produced in the current map will also be sent [accent]to your local sectors[].\n\nAny new research done by the host also carries over. -tutorial.next = [lightgray] -tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse[accent] [[WASD][] to move.\n[accent]Scroll[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper -tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper -tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\nYou can also select the drill by tapping [accent][[2][] then [accent][[1][] quickly, regardless of which tab is open.\n[accent]Right-click[] to stop building. -tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement. -tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[] -tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\nUse the scrollwheel to rotate blocks before placing them.\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core. -tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core. -tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base. -tutorial.drillturret = Duo turrets require[accent] copper ammo[] to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1 -tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause. -tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause. -tutorial.unpause = Now press space again to unpause. -tutorial.unpause.mobile = Now press it again to unpause. -tutorial.breaking = Blocks frequently need to be destroyed.\n[accent]Hold down right-click[] to destroy all blocks in a selection.[]\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection. -tutorial.breaking.mobile = Blocks frequently need to be destroyed.\n[accent]Select deconstruction mode[], then tap a block to begin breaking it.\nDestroy an area by holding down your finger for a few seconds[] and dragging in a direction.\nPress the checkmark button to confirm breaking.\n\n[accent]Destroy all the scrap blocks to the left of your core using area selection. -tutorial.withdraw = In some situations, taking items directly from blocks is necessary.\nTo do this, [accent]tap a block[] with items in it, then [accent]tap the item[] in the inventory.\nMultiple items can be withdrawn by [accent]tapping and holding[].\n\n[accent]Withdraw some copper from the core.[] -tutorial.deposit = Deposit items into blocks by dragging from your ship to the destination block.\n\n[accent]Deposit your copper back into the core.[] -tutorial.waves = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves.[accent] Click[] to shoot.\nBuild more turrets and drills. Mine more copper. -tutorial.waves.mobile = The[lightgray] enemy[] approaches.\n\nDefend the core for 2 waves. Your ship will automatically fire at enemies.\nBuild more turrets and drills. Mine more copper. -tutorial.launch = Once you reach a specific wave, you are able to[accent] launch the core[], leaving your defenses behind and[accent] obtaining all the resources in your core.[]\nThese obtained resources can then be used to research new technology.\n\n[accent]Press the launch button. +item.copper.description = Used in all types of construction and ammunition. +item.copper.details = Copper. Abnormally abundant metal on Serpulo. Structurally weak unless reinforced. +item.lead.description = Used in liquid transportation and electrical structures. +item.lead.details = Dense. Inert. Extensively used in batteries.\nNote: Likely toxic to biological life forms. Not that there are many left here. +item.metaglass.description = Used in liquid distribution/storage structures. +item.graphite.description = Used in electrical components and turret ammunition. +item.sand.description = Used for production of other refined materials. +item.coal.description = Used for fuel and refined material production. +item.coal.details = Appears to be fossilized plant matter, formed long before the seeding event. +item.titanium.description = Used in liquid transportation structures, drills and aircraft. +item.thorium.description = Used in durable structures and as nuclear fuel. +item.scrap.description = Used in Melters and Pulverizers for refining into other materials. +item.scrap.details = Leftover remnants of old structures and units. +item.silicon.description = Used in solar panels, complex electronics and homing turret ammunition. +item.plastanium.description = Used in advanced units, insulation and fragmentation ammunition. +item.phase-fabric.description = Used in advanced electronics and self-repairing structures. +item.surge-alloy.description = Used in advanced weaponry and reactive defense structures. +item.spore-pod.description = Used for conversion into oil, explosives and fuel. +item.spore-pod.details = Spores. Likely a synthetic life form. Emit gases toxic to other biological life. Extremely invasive. Highly flammable in certain conditions. +item.blast-compound.description = Used in bombs and explosive ammunition. +item.pyratite.description = Used in incendiary weapons and combustion-fueled generators. -item.copper.description = The most basic structural material. Used extensively in all types of blocks. -item.lead.description = A basic starter material. Used extensively in electronics and liquid transportation blocks. -item.metaglass.description = A super-tough glass compound. Extensively used for liquid distribution and storage. -item.graphite.description = Mineralized carbon, used for ammunition and electrical components. -item.sand.description = A common material that is used extensively in smelting, both in alloying and as a flux. -item.coal.description = Fossilized plant matter, formed long before the seeding event. Used extensively for fuel and resource production. -item.titanium.description = A rare super-light metal used extensively in liquid transportation, drills and aircraft. -item.thorium.description = A dense, radioactive metal used as structural support and nuclear fuel. -item.scrap.description = Leftover remnants of old structures and units. Contains trace amounts of many different metals. -item.silicon.description = An extremely useful semiconductor. Applications in solar panels, complex electronics and homing turret ammunition. -item.plastanium.description = A light, ductile material used in advanced aircraft and fragmentation ammunition. -item.phase-fabric.description = A near-weightless substance used in advanced electronics and self-repairing technology. -item.surge-alloy.description = An advanced alloy with unique electrical properties. -item.spore-pod.description = A pod of synthetic spores, synthesized from atmospheric concentrations for industrial purposes. Used for conversion into oil, explosives and fuel. -item.blast-compound.description = An unstable compound used in bombs and explosives. Synthesized from spore pods and other volatile substances. Use as fuel is not advised. -item.pyratite.description = An extremely flammable substance used in incendiary weapons. -liquid.water.description = The most useful liquid. Commonly used for cooling machines and waste processing. -liquid.slag.description = Various different types of molten metal mixed together. Can be separated into its constituent minerals, or sprayed at enemy units as a weapon. -liquid.oil.description = A liquid used in advanced material production. Can be converted into coal as fuel, or sprayed and set on fire as a weapon. -liquid.cryofluid.description = An inert, non-corrosive liquid created from water and titanium. Has extremely high heat capacity. Extensively used as coolant. +liquid.water.description = Used for cooling machines and waste processing. +liquid.slag.description = Refined in separators into constituent metals, or sprayed at enemies as a weapon. +liquid.oil.description = Used in advanced material production and as incendiary ammunition. +liquid.cryofluid.description = Used as coolant in reactors, turrets and factories. -block.message.description = Stores a message. Used for communication between allies. -block.graphite-press.description = Compresses chunks of coal into pure sheets of graphite. -block.multi-press.description = An upgraded version of the graphite press. Employs water and power to process coal quickly and efficiently. -block.silicon-smelter.description = Reduces sand with pure coal. Produces silicon. -block.kiln.description = Smelts sand and lead into the compound known as metaglass. Requires small amounts of power to run. +block.resupply-point.description = Resupplies nearby units with copper ammunition. Not compatible with units that require battery power. +block.armored-conveyor.description = Moves items forward. Does not accept inputs from the sides. +block.illuminator.description = Emits light. +block.message.description = Stores a message for communication between allies. +block.graphite-press.description = Compresses coal into graphite. +block.multi-press.description = Compresses coal into graphite. Requires water as coolant. +block.silicon-smelter.description = Refines silicon from sand and coal. +block.kiln.description = Smelts sand and lead into metaglass. block.plastanium-compressor.description = Produces plastanium from oil and titanium. -block.phase-weaver.description = Synthesizes phase fabric from radioactive thorium and sand. Requires massive amounts of power to function. -block.alloy-smelter.description = Combines titanium, lead, silicon and copper to produce surge alloy. -block.cryofluid-mixer.description = Mixes water and fine titanium powder into cryofluid. Essential for thorium reactor usage. -block.blast-mixer.description = Crushes and mixes clusters of spores with pyratite to produce blast compound. -block.pyratite-mixer.description = Mixes coal, lead and sand into highly flammable pyratite. -block.melter.description = Melts down scrap into slag for further processing or usage in wave turrets. -block.separator.description = Separates slag into its mineral components. Outputs the cooled result. -block.spore-press.description = Compresses spore pods under extreme pressure to synthesize oil. +block.phase-weaver.description = Synthesizes phase fabric from thorium and sand. +block.alloy-smelter.description = Fuses titanium, lead, silicon and copper into surge alloy. +block.cryofluid-mixer.description = Mixes water and fine titanium powder to produce cryofluid. +block.blast-mixer.description = Produces blast compound from pyratite and spore pods. +block.pyratite-mixer.description = Mixes coal, lead and sand into pyratite. +block.melter.description = Melts down scrap into slag. +block.separator.description = Separates slag into its mineral components. +block.spore-press.description = Compresses spore pods into oil. block.pulverizer.description = Crushes scrap into fine sand. -block.coal-centrifuge.description = Solidifes oil into chunks of coal. -block.incinerator.description = Vaporizes any excess item or liquid it receives. -block.power-void.description = Voids all power inputted into it. Sandbox only. +block.coal-centrifuge.description = Transforms oil into coal. +block.incinerator.description = Vaporizes any item or liquid it receives. +block.power-void.description = Voids all power inputted. Sandbox only. block.power-source.description = Infinitely outputs power. Sandbox only. block.item-source.description = Infinitely outputs items. Sandbox only. block.item-void.description = Destroys any items. Sandbox only. block.liquid-source.description = Infinitely outputs liquids. Sandbox only. block.liquid-void.description = Removes any liquids. Sandbox only. -block.copper-wall.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves. -block.copper-wall-large.description = A cheap defensive block.\nUseful for protecting the core and turrets in the first few waves.\nSpans multiple tiles. -block.titanium-wall.description = A moderately strong defensive block.\nProvides moderate protection from enemies. -block.titanium-wall-large.description = A moderately strong defensive block.\nProvides moderate protection from enemies.\nSpans multiple tiles. -block.plastanium-wall.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections. -block.plastanium-wall-large.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections.\nSpans multiple tiles. -block.thorium-wall.description = A strong defensive block.\nDecent protection from enemies. -block.thorium-wall-large.description = A strong defensive block.\nDecent protection from enemies.\nSpans multiple tiles. -block.phase-wall.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact. -block.phase-wall-large.description = A wall coated with special phase-based reflective compound. Deflects most bullets upon impact.\nSpans multiple tiles. -block.surge-wall.description = An extremely durable defensive block.\nBuilds up charge on bullet contact, releasing it randomly. -block.surge-wall-large.description = An extremely durable defensive block.\nBuilds up charge on bullet contact, releasing it randomly.\nSpans multiple tiles. -block.door.description = A small door. Can be opened or closed by tapping. -block.door-large.description = A large door. Can be opened and closed by tapping.\nSpans multiple tiles. -block.mender.description = Periodically repairs blocks in its vicinity. Keeps defenses repaired in-between waves.\nOptionally uses silicon to boost range and efficiency. -block.mend-projector.description = An upgraded version of the Mender. Repairs blocks in its vicinity.\nOptionally uses phase fabric to boost range and efficiency. +block.copper-wall.description = Protects structures from enemy projectiles. +block.copper-wall-large.description = Protects structures from enemy projectiles. +block.titanium-wall.description = Protects structures from enemy projectiles. +block.titanium-wall-large.description = Protects structures from enemy projectiles. +block.plastanium-wall.description = Protects structures from enemy projectiles. Absorbs lasers and electric arcs. Blocks automatic power connections. +block.plastanium-wall-large.description = Protects structures from enemy projectiles. Absorbs lasers and electric arcs. Blocks automatic power connections. +block.thorium-wall.description = Protects structures from enemy projectiles. +block.thorium-wall-large.description = Protects structures from enemy projectiles. +block.phase-wall.description = Protects structures from enemy projectiles, reflecting most bullets upon impact. +block.phase-wall-large.description = Protects structures from enemy projectiles, reflecting most bullets upon impact. +block.surge-wall.description = Protects structures from enemy projectiles, periodically releasing electric arcs upon contact. +block.surge-wall-large.description = Protects structures from enemy projectiles, periodically releasing electric arcs upon contact. +block.door.description = A wall that can be opened and closed. +block.door-large.description = A wall that can be opened and closed. +block.mender.description = Periodically repairs blocks in its vicinity.\nOptionally uses silicon to boost range and efficiency. +block.mend-projector.description = Repairs blocks in its vicinity.\nOptionally uses phase fabric to boost range and efficiency. block.overdrive-projector.description = Increases the speed of nearby buildings.\nOptionally uses phase fabric to boost range and efficiency. -block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage.\nOverheats if too much damage is sustained. Optionally uses coolant to prevent overheating. Phase fabric can be used to increase shield size. -block.shock-mine.description = Damages enemies stepping on the mine. Nearly invisible to the enemy. -block.conveyor.description = Basic item transport block. Moves items forward and automatically deposits them into blocks. Rotatable. -block.titanium-conveyor.description = Advanced item transport block. Moves items faster than standard conveyors. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. -block.junction.description = Acts as a bridge for two crossing conveyor belts. Useful in situations with two different conveyors carrying different materials to different locations. -block.bridge-conveyor.description = Advanced item transport block. Allows transporting items over up to 3 tiles of any terrain or building. -block.phase-conveyor.description = Advanced item transport block. Uses power to teleport items to a connected phase conveyor over several tiles. -block.sorter.description = Sorts items. If an item matches the selection, it is allowed to pass. Otherwise, the item is outputted to the left and right. -block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead. -block.router.description = Accepts items, then outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.\n\n[scarlet]Never use next to production inputs, as they will get clogged by output.[] -block.distributor.description = An advanced router. Splits items to up to 7 other directions equally. -block.overflow-gate.description = Only outputs to the left and right if the front path is blocked. -block.underflow-gate.description = The opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. -block.mass-driver.description = The ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. Requires power to operate. -block.mechanical-pump.description = A cheap pump with slow output, but no power consumption. -block.rotary-pump.description = An advanced pump. Pumps more liquid, but requires power. -block.thermal-pump.description = The ultimate pump. -block.conduit.description = Basic liquid transport block. Moves liquids forward. Used in conjunction with pumps and other conduits. -block.pulse-conduit.description = An advanced liquid transport block. Transports liquids faster and stores more than standard conduits. -block.plated-conduit.description = Moves liquids at the same rate as pulse conduits, but possesses more armor. Does not accept fluids from the sides by anything other than conduits.\nLeaks less. -block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. Useful for splitting the liquids from one source to multiple targets. -block.liquid-tank.description = Stores a large amount of liquids. Use for creating buffers in situations with non-constant demand of materials or as a safeguard for cooling vital blocks. -block.liquid-junction.description = Acts as a bridge for two crossing conduits. Useful in situations with two different conduits carrying different liquids to different locations. -block.bridge-conduit.description = Advanced liquid transport block. Allows transporting liquids over up to 3 tiles of any terrain or building. -block.phase-conduit.description = Advanced liquid transport block. Uses power to teleport liquids to a connected phase conduit over several tiles. +block.force-projector.description = Creates a hexagonal force field around itself, protecting buildings and units inside from damage.\nOverheats if too much damage is sustained. Optionally uses coolant to prevent overheating. Phase fabric increases shield size. +block.shock-mine.description = Releases electric arcs upon enemy unit contact. +block.conveyor.description = Transports items forward. +block.titanium-conveyor.description = Transports items forward. Faster than a standard conveyor. +block.plastanium-conveyor.description = Transports items forward in batches. Accepts items at the back, and unloads them in three directions at the front. Requires multiple loading and unloading points for peak throughput. +block.junction.description = Acts as a bridge for two crossing conveyor belts. +block.bridge-conveyor.description = Transports items over terrain or buildings. +block.phase-conveyor.description = Instantly transports items over terrain or buildings. Longer range than the item bridge, but requires power. +block.sorter.description = If an input item matches the selection, it passes forward. Otherwise, the item is outputted to the left and right. +block.inverted-sorter.description = Similar to a standard sorter, but outputs selected items to the sides instead. +block.router.description = Distributes input items to 3 output directions equally. +block.router.details = A necessary evil. Using next to production inputs is not advised, as they will get clogged by output. +block.distributor.description = Distributes input items to 7 output directions equally. +block.overflow-gate.description = Only outputs items to the left and right if the front path is blocked. Cannot be used next to other gates. +block.underflow-gate.description = Opposite of an overflow gate. Outputs to the front if the left and right paths are blocked. Cannot be used next to other gates. +block.mass-driver.description = Long-range item transport structure. Collects batches of items and shoots them to other mass drivers. +block.mechanical-pump.description = Pumps and outputs liquids. Does not require power. +block.rotary-pump.description = Pumps and outputs liquids. Requires power. +block.thermal-pump.description = Pumps and outputs liquids. +block.conduit.description = Moves liquids forward. Used in conjunction with pumps and other conduits. +block.pulse-conduit.description = Moves liquids forward. Transports faster and stores more than standard conduits. +block.plated-conduit.description = Moves liquids forward. Does not accept input from the sides. Does not leak. +block.liquid-router.description = Accepts liquids from one direction and outputs them to up to 3 other directions equally. Can also store a certain amount of liquid. +block.liquid-tank.description = Stores a large amount of liquid. Outputs to all sides, similarly to a liquid router. +block.liquid-junction.description = Acts as a bridge for two crossing conduits. +block.bridge-conduit.description = Transports liquids over terrain or buildings. +block.phase-conduit.description = Transports liquids over terrain or buildings. Longer range than the bridge conduit, but requires power. block.power-node.description = Transmits power to connected nodes. The node will receive power from or supply power to any adjacent blocks. block.power-node-large.description = An advanced power node with greater range. -block.surge-tower.description = An extremely long-range power node with fewer available connections. -block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored. -block.battery.description = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit. -block.battery-large.description = Stores much more power than a regular battery. +block.surge-tower.description = A long-range power node with fewer available connections. +block.diode.description = Moves battery power in one direction, but only if the other side has less power stored. +block.battery.description = Stores power in times of surplus energy. Outputs power in times of deficit. +block.battery-large.description = Stores power in times of surplus energy. Outputs power in times of deficit. Higher capacity than a regular battery. block.combustion-generator.description = Generates power by burning flammable materials, such as coal. block.thermal-generator.description = Generates power when placed in hot locations. -block.steam-generator.description = An advanced combustion generator. More efficient, but requires additional water for generating steam. +block.steam-generator.description = Generates power by burning flammable materials and converting water to steam. block.differential-generator.description = Generates large amounts of energy. Utilizes the temperature difference between cryofluid and burning pyratite. -block.rtg-generator.description = A simple, reliable generator. Uses the heat of decaying radioactive compounds to produce energy at a slow rate. +block.rtg-generator.description = Uses the heat of decaying radioactive compounds to produce energy at a slow rate. block.solar-panel.description = Provides a small amount of power from the sun. -block.solar-panel-large.description = A significantly more efficient version of the standard solar panel. -block.thorium-reactor.description = Generates significant amounts of power from thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. Power output depends on fullness, with base power generated at full capacity. -block.impact-reactor.description = An advanced generator, capable of creating massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. -block.mechanical-drill.description = A cheap drill. When placed on appropriate tiles, outputs items at a slow pace indefinitely. Only capable of mining basic resources. +block.solar-panel-large.description = Provides a small amount of power from the sun. More efficient than the standard solar panel. +block.thorium-reactor.description = Generates significant amounts of power from thorium. Requires constant cooling. Will explode violently if insufficient amounts of coolant are supplied. +block.impact-reactor.description = Creates massive amounts of power at peak efficiency. Requires a significant power input to kickstart the process. +block.mechanical-drill.description = When placed on ore, outputs items at a slow pace indefinitely. Only capable of mining basic resources. block.pneumatic-drill.description = An improved drill, capable of mining titanium. Mines at a faster pace than a mechanical drill. block.laser-drill.description = Allows drilling even faster through laser technology, but requires power. Capable of mining thorium. block.blast-drill.description = The ultimate drill. Requires large amounts of power. block.water-extractor.description = Extracts groundwater. Used in locations with no surface water available. -block.cultivator.description = Cultivates tiny concentrations of spores in the atmosphere into industry-ready pods. +block.cultivator.description = Cultivates tiny concentrations of atmospheric spores into spore pods. +block.cultivator.details = Recovered technology. Used to produce massive amounts of biomass as efficiently as possible. Likely the initial incubator of the spores now covering Serpulo. block.oil-extractor.description = Uses large amounts of power, sand and water to drill for oil. -block.core-shard.description = The first iteration of the core capsule. Once destroyed, all contact to the region is lost. Do not let this happen. -block.core-foundation.description = The second version of the core. Better armored. Stores more resources. -block.core-nucleus.description = The third and final iteration of the core capsule. Extremely well armored. Stores massive amounts of resources. -block.vault.description = Stores a large amount of items of each type. An unloader block can be used to retrieve items from the vault. -block.container.description = Stores a small amount of items of each type. An unloader block can be used to retrieve items from the container. -block.unloader.description = Unloads items from any nearby non-transportation block. The type of item to be unloaded can be changed by tapping. -block.launch-pad.description = Launches batches of items without any need for a core launch. -block.launch-pad-large.description = An improved version of the launch pad. Stores more items. Launches more frequently. -block.duo.description = A small, cheap turret. Useful against ground units. -block.scatter.description = An essential anti-air turret. Sprays clumps of lead, scrap or metaglass flak at enemy units. +block.core-shard.description = Core of the base. Once destroyed, the sector is lost. +block.core-shard.details = The first iteration. Compact. Self-replicating. Equipped with single-use launch thrusters. Not designed for interplanetary travel. +block.core-foundation.description = Core of the base. Well armored. Stores more resources than a Shard. +block.core-foundation.details = The second iteration. +block.core-nucleus.description = Core of the base. Extremely well armored. Stores massive amounts of resources. +block.core-nucleus.details = The third and final iteration. +block.vault.description = Stores a large amount of items of each type. Contents can be retrieved with an unloader. +block.container.description = Stores a small amount of items of each type. Contents can be retrieved with an unloader. +block.unloader.description = Unloads the selected item from nearby blocks. +block.launch-pad.description = Launches batches of items to selected sectors. +block.duo.description = Fires alternating bullets at enemies. +block.scatter.description = Fires clumps of lead, scrap or metaglass flak at enemy aircraft. block.scorch.description = Burns any ground enemies close to it. Highly effective at close range. -block.hail.description = A small, long-range artillery turret. -block.wave.description = A medium-sized turret. Shoots streams of liquid at enemies. Automatically extinguishes fires when supplied with water. -block.lancer.description = A medium-sized anti-ground laser turret. Charges and fires powerful beams of energy. -block.arc.description = A small close-range electric turret. Fires arcs of electricity at enemies. -block.swarmer.description = A medium-sized missile turret. Attacks both air and ground enemies. Fires homing missiles. -block.salvo.description = A larger, more advanced version of the Duo turret. Fires quick salvos of bullets at the enemy. -block.fuse.description = A large, close-range energy turret. Fires three piercing beams at nearby enemies. -block.ripple.description = An extremely powerful artillery turret. Shoots clusters of shells at enemies over long distances. -block.cyclone.description = A large anti-air and anti-ground turret. Fires explosive clumps of flak at nearby units. -block.spectre.description = A massive dual-barreled cannon. Shoots large armor-piercing bullets at air and ground targets. -block.meltdown.description = A massive laser cannon. Charges and fires a persistent laser beam at nearby enemies. Requires coolant to operate. -block.repair-point.description = Continuously heals the closest damaged unit in its vicinity. +block.hail.description = Fires small shells at ground enemies over long distances. +block.wave.description = Fires streams of liquid at enemies. Automatically extinguishes fires when supplied with water. +block.lancer.description = Charges and fires powerful beams of energy at ground targets. +block.arc.description = Fires arcs of electricity at ground targets. +block.swarmer.description = Fires homing missiles at enemies. +block.salvo.description = Fires quick salvos of bullets at enemies. +block.fuse.description = Fires three close-range piercing blasts at nearby enemies. +block.ripple.description = Shoots clusters of shells at ground enemies over long distances. +block.cyclone.description = Fires explosive clumps of flak at nearby enemies. +block.spectre.description = Fires large armor-piercing bullets at air and ground targets. +block.meltdown.description = Charges and fires a persistent laser beam at nearby enemies. Requires coolant to operate. +block.foreshadow.description = Fires a large single-target bolt over long distances. +block.repair-point.description = Continuously repairs the closest damaged unit in its vicinity. block.segment.description = Damages and destroys incoming projectiles. Laser projectiles are not targeted. +block.parallax.description = Fires a tractor beam that pulls in air targets, damaging them in the process. +block.tsunami.description = Fires powerful streams of liquid at enemies. Automatically extinguishes fires when supplied with water. +block.silicon-crucible.description = Refines silicon from sand and coal, using pyratite as an additional heat source. More efficient in hot locations. +block.disassembler.description = Separates slag into trace amounts of exotic mineral components at low efficiency. Can produce thorium. +block.overdrive-dome.description = Increases the speed of nearby buildings. Requires phase fabric and silicon to operate. +block.payload-conveyor.description = Moves large payloads, such as units from factories. +block.payload-router.description = Splits input payloads into 3 output directions. +block.command-center.description = Controls unit behavior with several different commands. +block.ground-factory.description = Produces ground units. Output units can be used directly, or moved into reconstructors for upgrading. +block.air-factory.description = Produces air units. Output units can be used directly, or moved into reconstructors for upgrading. +block.naval-factory.description = Produces naval units. Output units can be used directly, or moved into reconstructors for upgrading. +block.additive-reconstructor.description = Upgrades inputted units to the second tier. +block.multiplicative-reconstructor.description = Upgrades inputted units to the third tier. +block.exponential-reconstructor.description = Upgrades inputted units to the fourth tier. +block.tetrative-reconstructor.description = Upgrades inputted units to the fifth and final tier. +block.switch.description = A toggleable switch. State can be read and controlled with logic processors. +block.micro-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. +block.logic-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. Faster than the micro processor. +block.hyper-processor.description = Runs a sequence of logic instructions in a loop. Can be used to control units and buildings. Faster than the logic processor. +block.memory-cell.description = Stores information for a logic processor. +block.memory-bank.description = Stores information for a logic processor. High capacity. +block.logic-display.description = Displays arbitrary graphics from a logic processor. +block.large-logic-display.description = Displays arbitrary graphics from a logic processor. +block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. + +unit.dagger.description = Fires standard bullets at all nearby enemies. +unit.mace.description = Fires streams of flame at all nearby enemies. +unit.fortress.description = Fires long-range artillery at ground targets. +unit.scepter.description = Fires a barrage of charged bullets at all nearby enemies. +unit.reign.description = Fires a barrage of massive piercing bullets at all nearby enemies. +unit.nova.description = Fires laser bolts that damage enemies and repair allied structures. Capable of flight. +unit.pulsar.description = Fires arcs of electricity that damage enemies and repair allied structures. Capable of flight. +unit.quasar.description = Fires piercing laser beams that damage enemies and repair allied structures. Capable of flight. Shielded. +unit.vela.description = Fires a massive continuous laser beam that damages enemies, causes fires and repairs allied structures. Capable of flight. +unit.corvus.description = Fires a massive laser blast that damages enemies and repairs allied structures. Can step over most terrain. +unit.crawler.description = Runs toward enemies and self-destructs, causing a large explosion. +unit.atrax.description = Fires debilitating orbs of slag at ground targets. Can step over most terrain. +unit.spiroct.description = Fires sapping laser beams at enemies, repairing itself in the process. Can step over most terrain. +unit.arkyid.description = Fires large sapping laser beams at enemies, repairing itself in the process. Can step over most terrain. +unit.toxopid.description = Fires large electric cluster-shells and piercing lasers at enemies. Can step over most terrain. +unit.flare.description = Fires standard bullets at nearby ground targets. +unit.horizon.description = Drops clusters of bombs on ground targets. +unit.zenith.description = Fires salvos of missiles at all nearby enemies. +unit.antumbra.description = Fires a barrage of bullets at all nearby enemies. +unit.eclipse.description = Fires two piercing lasers and a barrage of flak at all nearby enemies. +unit.mono.description = Automatically mines copper and lead, depositing it into the core. +unit.poly.description = Automatically rebuilds destroyed structures and assists other units in construction. +unit.mega.description = Automatically repairs damaged structures. Capable of carrying blocks and small ground units. +unit.quad.description = Drops large bombs on ground targets, repairing allied structures and damaging enemies. Capable of carrying medium-sized ground units. +unit.oct.description = Protects nearby allies with its regenerating shield. Capable of carrying most ground units. +unit.risso.description = Fires a barrage of missiles and bullets at all nearby enemies. +unit.minke.description = Fires shells and standard bullets at nearby ground targets. +unit.bryde.description = Fires long-range artillery shells and missiles at enemies. +unit.sei.description = Fires a barrage of missiles and armor-piercing bullets at enemies. +unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Constructs flare units. +unit.alpha.description = Defends the Shard core from enemies. Builds structures. +unit.beta.description = Defends the Foundation core from enemies. Builds structures. +unit.gamma.description = Defends the Nucleus core from enemies. Builds structures. diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index af5bdab68d5e..e9a8d1382a4f 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -41,11 +41,12 @@ be.ignore = Abaikan be.noupdates = Tidak ada pembaruan yang ditemukan. be.check = Cek versi baru -mod.featured.title = Browser mod mod.featured.dialog.title = Browser Mod mods.browser.selected = Mod yang Dipilih mods.browser.add = Unduh Mod mods.github.open = Buka di GitHub +mods.browser.sortdate = Urut berdasarkan waktu +mods.browser.sortstars = Urut berdasarkan bintang schematic = Skema schematic.add = Menyimpan skema... @@ -90,6 +91,7 @@ joingame = Bermain Bersama customgame = Permainan Modifikasi newgame = Permainan Baru none = +none.found = [lightgray] minimap = Peta Kecil position = Posisi close = Tutup @@ -287,9 +289,10 @@ cancel = Batal openlink = Buka Tautan copylink = Salin Tautan back = Kembali -crash.export = Export Crash Logs -crash.none = No crash logs found. -crash.exported = Crash logs exported. +max = Maks +crash.export = Ekspor Crash Log +crash.none = Tidak ada crash log ditemukan. +crash.exported = Crash log diekspor. data.export = Ekspor Data data.import = Impor Data data.openfolder = Buka Folder Data @@ -361,7 +364,6 @@ editor.center = Pusat workshop = Workshop waves.title = Gelombang waves.remove = Hapus -waves.never = waves.every = setiap waves.waves = gelombang waves.perspawn = per muncul @@ -705,6 +707,7 @@ stat.commandlimit = Batas Perintah stat.abilities = Kemampuan stat.canboost = Dapat dipercepat stat.flying = Terbang +stat.ammouse = Penggunaan Amunisi ability.forcefield = Bidang Kekuatan ability.repairfield = Bidang Perbaikan @@ -719,6 +722,7 @@ bar.corereq = Memerlukan Inti Dasar bar.drillspeed = Kecepatan Bor: {0}/s bar.pumpspeed = Kecepatan Pompa: {0}/s bar.efficiency = Daya Guna: {0}% +bar.boost = Percepatan: {0}% bar.powerbalance = Tenaga: {0}/s bar.powerstored = Disimpan: {0}/{1} bar.poweramount = Tenaga: {0} @@ -727,7 +731,6 @@ bar.powerlines = Sambungan: {0}/{1} bar.items = Item: {0} bar.capacity = Kapasitas: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = Zat Cair bar.heat = Panas bar.power = Tenaga @@ -744,6 +747,7 @@ bullet.sapping = [stat]sapping bullet.homing = [stat]mengejar bullet.shock = [stat]mengkejut bullet.frag = [stat]menyebar +bullet.buildingdamage = [stat]{0}%[lightgray] kerusakan bangunan bullet.knockback = [stat]{0}[lightgray] pantulan kembali bullet.pierce = [stat]{0}[lightgray]x tembus bullet.infinitepierce = [stat]menembus @@ -772,6 +776,7 @@ unit.items = item unit.thousands = rb unit.millions = jt unit.billions = m +unit.pershot = /tembakan category.purpose = Kegunaan category.general = Umum category.power = Tenaga @@ -841,6 +846,7 @@ setting.bridgeopacity.name = Jelas-Beningnya Jembatan setting.playerchat.name = Tunjukkan Pesan dalam Permainan setting.showweather.name = Perlihatkan Cuaca public.confirm = Apakah kamu ingin mempublikasi permainanmu?\n[accent]Siapa saja bisa masuk ke permainanmu.\n[lightgray]Ini bisa diganti di Peraturan->Permainan->Visibilitas Game Publik. +public.confirm.really = Jika kamu ingin bermain dengan temanmu, gunakan [green]Undang Teman[] daripada [scarlet]server publik[]!\nApakah kamu yakin ingin membuat permainanmu [scarlet]publik[]? public.beta = Ingat bahwa game versi beta tidak dapat membuat lobi publik. uiscale.reset = Skala UI telah diubah.\nTekan "OK" untuk mengonfirmasi.\n[scarlet]Kembali dan keluar di[accent] {0}[] pengaturan... uiscale.cancel = Batal & Keluar @@ -915,6 +921,7 @@ keybind.toggle_menus.name = Muncul Tidaknya Menu keybind.chat_history_prev.name = Sejarah Pesan Sebelumnya keybind.chat_history_next.name = Sejarah Pesan Setelahnya keybind.chat_scroll.name = Scroll Pesan +keybind.chat_mode.name = Ubah Mode Pesan keybind.drop_unit.name = Jatuhkan Unit keybind.zoom_minimap.name = Perbesar Peta Kecil mode.help.title = Deskripsi mode @@ -922,7 +929,7 @@ mode.survival.name = Bertahan Hidup mode.survival.description = Mode normal. Sumber daya terbatas dan gelombang otomatis. mode.sandbox.name = Mode Sandbox/Bebas mode.sandbox.description = Sumber daya tak terbatas dan tidak ada gelombang otomatis. -mode.editor.name = Sunting +mode.editor.name = Penyunting mode.pvp.name = PvP mode.pvp.description = Melawan pemain lain. Membutuhkan setidaknya 2 inti berbeda warna didalam peta untuk main. mode.attack.name = Penyerangan @@ -931,6 +938,7 @@ mode.custom = Pengaturan Modifikasi rules.infiniteresources = Sumber Daya Tak Terbatas rules.reactorexplosions = Ledakan Reaktor +rules.coreincinerates = Penghangusan Luapan Inti rules.schematic = Skema Diperbolehkan rules.wavetimer = Pengaturan Waktu Gelombang rules.waves = Gelombang @@ -963,6 +971,7 @@ rules.explosions = Kekuatan Ledakan Blok/Unit rules.ambientlight = Sinar Disekeliling rules.weather = Cuaca rules.weather.frequency = Frekuensi: +rules.weather.always = Selalu rules.weather.duration = Durasi: content.item.name = Item @@ -1139,7 +1148,7 @@ block.overflow-gate.name = Gerbang Luap block.underflow-gate.name = Gerbang Luap Terbalik block.silicon-smelter.name = Pelebur Silikon block.phase-weaver.name = Pengrajut Phase -block.pulverizer.name = Pulverisator +block.pulverizer.name = Penghancur block.cryofluidmixer.name = Penyampur Cairan Dingin block.melter.name = Pencair block.incinerator.name = Penghangus @@ -1171,19 +1180,19 @@ block.power-void.name = Penghilang Tenaga block.power-source.name = Sumber Tenaga block.unloader.name = Pembongkar Muatan block.vault.name = Gudang -block.wave.name = Wave +block.wave.name = Penyemprot block.tsunami.name = Tsunami block.swarmer.name = Peluncur Misil block.salvo.name = Salvo -block.ripple.name = Ripple +block.ripple.name = Mortir block.phase-conveyor.name = Pengantar Berbahan Phase block.bridge-conveyor.name = Jembatan Pengantar block.plastanium-compressor.name = Kompresor Plastanium block.pyratite-mixer.name = Penyampur Pyratit -block.blast-mixer.name = Penyampur Peledak +block.blast-mixer.name = Penyampur Bahan Peledak block.solar-panel.name = Panel Surya block.solar-panel-large.name = Panel Surya Besar -block.oil-extractor.name = Penggali Minyak +block.oil-extractor.name = Pengekstrak Minyak block.repair-point.name = Tempat Perbaikan block.pulse-conduit.name = Selang Denyut block.plated-conduit.name = Pipa Terlapis @@ -1197,8 +1206,8 @@ block.thorium-reactor.name = Reaktor Thorium block.mass-driver.name = Penggerak Massal block.blast-drill.name = Bor Ledakan Udara block.thermal-pump.name = Pompa Suhu Panas -block.thermal-generator.name = Generator Suhu Panas -block.alloy-smelter.name = Pelebur Paduan Listrik +block.thermal-generator.name = Generator Panas +block.alloy-smelter.name = Pelebur Paduan Logam block.mender.name = Mender block.mend-projector.name = Mender Projektor block.surge-wall.name = Dinding Listrik @@ -1206,11 +1215,11 @@ block.surge-wall-large.name = Dinding Listrik Besar block.cyclone.name = Cyclone block.fuse.name = Fuse block.shock-mine.name = Ranjau Listrik -block.overdrive-projector.name = Proyeksi Pencepat -block.force-projector.name = Proyeksi Medan Gaya -block.arc.name = Arc -block.rtg-generator.name = Generator RTG -block.spectre.name = Spectre +block.overdrive-projector.name = Projektor Pemercepat +block.force-projector.name = Projektor Pelindung +block.arc.name = Busur Petir +block.rtg-generator.name = Generator Radiasi +block.spectre.name = Meriam Raksasa block.meltdown.name = Meltdown block.foreshadow.name = Foreshadow block.container.name = Kontainer @@ -1218,9 +1227,9 @@ block.launch-pad.name = Alas Peluncur block.launch-pad-large.name = Alas Peluncur Besar block.segment.name = Segment block.command-center.name = Pusat Perintah -block.ground-factory.name = Pabrik Angkatan Darat -block.air-factory.name = Pabrik Angkatan Udara -block.naval-factory.name = Pabrik Angkatan Laut +block.ground-factory.name = Pabrik Unit Darat +block.air-factory.name = Pabrik Unit Udara +block.naval-factory.name = Pabrik Unit Laut block.additive-reconstructor.name = Rekonstruktor Aditif block.multiplicative-reconstructor.name = Rekonstruktor Multiplikatif block.exponential-reconstructor.name = Rekonstruktor Eksponensial @@ -1228,8 +1237,8 @@ block.tetrative-reconstructor.name = Rekonstruktor Tetratif block.payload-conveyor.name = Pengantar Massa block.payload-router.name = Pengarah Massa block.disassembler.name = Pembongkar -block.silicon-crucible.name = Multi-Lebur -block.overdrive-dome.name = Kubah Proyeksi Percepat +block.silicon-crucible.name = Pelebur Raksasa +block.overdrive-dome.name = Kubah Projektor Pemercepat #experimental, may be removed block.block-forge.name = Pemadu Blok block.block-loader.name = Pemuat Blok @@ -1312,10 +1321,10 @@ item.phase-fabric.description = Digunakan di elektronik canggih dan teknologi pe item.surge-alloy.description = Digunakan di pertahanan yang lebih canggih dan struktur pertahanan reaktif. item.spore-pod.description = Digunakan untuk produksi minyak, bahan peledak dan bahan bakar. item.spore-pod.details = Spora. Sepertinya bentuk kehidupan sintetis. Menghasilkan gas beracun yang meracuni kehidupan biologis lainnya. Sangat mudah menyebar. Sangat mudah terbakar dalam kondisi tertentu. -item.blast-compound.description = Senyawa yang digunakan di bom dan amunisi peledak. +item.blast-compound.description = Senyawa yang digunakan sebagai bom dan amunisi peledak. item.pyratite.description = Digunakan di senjata pembakar dan generator yang membutuhkan bahan mudah terbakar. -liquid.water.description = Umumnya digunakan untuk mendinginkan mesin-mesin dan pendaur ulang. +liquid.water.description = Umumnya digunakan untuk mendinginkan bor dan turret. liquid.slag.description = Berbagai campuran tipe logam yang meleleh. Dapat dipisahkan menjadi mineral masing-masing, atau disemprotkan ke musuh sebagai senjata. liquid.oil.description = Digunakan di produksi material lanjutan dan sebagai amunisi yang mudah terbakar. liquid.cryofluid.description = Digunakan sebagai pendingin di reaktor, turret, dan pabrik. @@ -1325,8 +1334,8 @@ block.armored-conveyor.description = Memindahkan barang sama cepatnya dengan pen block.illuminator.description = Sebuah lampu kecil untuk menerangi daerah sekitar. Perlu listrik untuk bekerja. block.message.description = Menyimpan pesan. Digunakan untuk komunikasi antar sekutu. block.graphite-press.description = Memadatkan bongkahan batu bara menjadi lempengan grafit murni. -block.multi-press.description = Versi pemadat grafit yang lebih bagus. Membutuhkan air dan tenaga untuk memproses batu bara lebih cepat dan efisien. -block.silicon-smelter.description = Mengubah pasir dengan batu bara untuk memproduksi silikon. +block.multi-press.description = Versi pemadat grafit yang lebih bagus. Membutuhkan air sebagai pendingin. +block.silicon-smelter.description = Melebur pasir dengan batu bara untuk memproduksi silikon. block.kiln.description = Membakar pasir dan timah menjadi kaca meta. Membutuhkan tenaga. block.plastanium-compressor.description = Memproduksi plastanium dari minyak dan titanium. block.phase-weaver.description = Memproduksi kain phase dari thorium dan banyak pasir. @@ -1376,7 +1385,7 @@ block.inverted-sorter.description = Sama seperti penyortir, melainkan mengeluark block.router.description = Menerima bahan dari satu arah dan mengeluarkannya ke 3 arah yang sama. Bisa juga menyimpan sejumlah bahan. Berguna untuk memisahkan bahan dari satu sumber ke target yang banyak. block.router.details = Bisa sangat menggangu. Jangan meletakannya disamping input produksi, karena bisa tersumbat oleh output. block.distributor.description = Pemisah canggih yang memisah item ke 7 arah berbeda bersamaan. -block.overflow-gate.description = Kombinasi antara pemisah dan penyortir yang hanya mengeluarkan item ke kiri dan/atau ke kanan jika bagian depan tertutup. +block.overflow-gate.description = Hanya mengeluarkan item ke kiri dan/atau ke kanan jika bagian depan tertutup. block.underflow-gate.description = Kebalikan dari gerbang luap. Mengeluarkan ke depan jika kanan dan kiri tertutup. block.mass-driver.description = Blok item transportasi tercanggih. Membawa beberapa item dan menembaknya ke penggerak massal lainnya dari arah yang jauh. block.mechanical-pump.description = Pompa murah dengan pengeluaran yang pelan, tetapi tidak mengkonsumsi tenaga. @@ -1399,18 +1408,18 @@ block.battery-large.description = Menyimpan lebih banyak tenaga daripada baterai block.combustion-generator.description = Menghasilkan tenaga dengan membakar minyak atau bahan bakar. block.thermal-generator.description = Menghasilkan tenaga disaat ditaruh di lokasi yang panas. block.steam-generator.description = Lebih efisien daripada generator pembakar, tetapi membutuhkan tambahan air. -block.differential-generator.description = Menghasilkan banyak sekali tenaga. Memanfaatkan perbedaan suhu dingin cairan pendingin dan suhu panas pyratite. +block.differential-generator.description = Menghasilkan tenaga dalam jumlah banyak. Memanfaatkan perbedaan suhu dingin cairan pendingin dan suhu panas pyratite. block.rtg-generator.description = Generator yang tidak membutuhkan pendiginan tetapi lebih memberi sedikit tenaga daripada reaktor thorium. -block.solar-panel.description = Menghasilkan jumlah tenaga kecil dari matahari. +block.solar-panel.description = Menghasilkan tenaga dalam jumlah kecil dari sinar matahari. block.solar-panel-large.description = Menghasilkan lebih banyak tenaga dari panel surya biasa, tapi lebih mahal untuk dibangun. block.thorium-reactor.description = Menghasilkan tenaga yang besar dari konsumsi thorium. Membutuhkan pendinginan konstan. Akan meledak jika tidak cukup pendingin . Pengeluaran tenaga tergantung kepenuhan. -block.impact-reactor.description = Sebuah generator yang lebih maju, dapat menghasilkan tenaga dengan jumlah yang sangat banyak. Memerlukan tenaga untuk menyelakan reaktor terlebih dahulu. +block.impact-reactor.description = Sebuah generator yang lebih maju, dapat menghasilkan tenaga dengan jumlah yang sangat banyak. Memerlukan tenaga untuk menyalakan reaktor terlebih dahulu. block.mechanical-drill.description = Bor murah. Saat ditaruh ditempat yang sesuai, mengeluarkan item dengan pelan tanpa batas. block.pneumatic-drill.description = Bor lebih cepat dari bor mekanik dan bisa memproses bahan lebih keras dengan menggunakan tekanan udara. block.laser-drill.description = Mengebor lebih cepat lewat teknologi laser, tapi membutuhkan tenaga. Bisa menambang thorium dengan bor ini. block.blast-drill.description = Bor tercanggih. Membutuhkan banyak tenaga. block.water-extractor.description = Mengekstrak air dari tanah. Gunakan jika tidak ada sumber air disekitar. -block.cultivator.description = Membudidaya spora kecil menjadi polong siap diolah. +block.cultivator.description = Menumbuhkan konsentrasi spora yang kecil di atmosfer menjadi polong spora. block.cultivator.details = Teknologi yang dipulihkan. Digunakan untuk memproduksi biomassa secara efesien. Kemungkinan merupakan inkubator awal dari spora yang sekarang menutupi Serpulo. block.oil-extractor.description = Menggunakan tenaga cukup besar untuk mengekstrak minyak dari pasir. Gunakan jika tidak ada sumber minyak disekitar. block.core-shard.description = Versi pertama dari pengulangan kapsul inti. Jika hancur, Semua kontak dengan daerah akan hilang. Jangan biarkan ini terjadi. @@ -1428,7 +1437,7 @@ block.scatter.description = Menembakkan gumpalan timah, rongsokan atau metaglass block.scorch.description = Membakar musuh darat yang dekat dengannya. Sangat efektif dalam jarak dekat. block.hail.description = Menembakkan peluru kecil ke musuh darat dari jarak jauh. block.wave.description = Menembakkan aliran cairan ke musuh. Secara otomatis memadamkan api saat disuplai dengan air. -block.lancer.description = Mengisi dan menembakkan sinar energi yang kuat ke target darat. +block.lancer.description = Memuat dan menembakkan sinar energi yang kuat ke target darat. block.arc.description = Menembak petir ke musuh darat. block.swarmer.description = Menembakkan misil yang mengejar ke arah musuh. block.salvo.description = Menembakkan peluru cepat ke arah musuh. diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 89f2cd49b143..7b43e8051654 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -13,13 +13,14 @@ link.google-play.description = Google Play ストアを開く link.f-droid.description = F-Droid を開く link.wiki.description = 公式 Mindustry Wiki link.suggestions.description = 新機能を提案する +link.bug.description = Found one? Report it here linkfail = リンクを開けませんでした!\nURLをクリップボードにコピーしました。 screenshot = スクリーンショットを {0} に保存しました。 screenshot.invalid = マップが広すぎます。スクリーンショットに必要なメモリが足りない可能性があります。 gameover = ゲームオーバー -gameover.disconnect = Disconnect +gameover.disconnect = 切断 gameover.pvp = [accent] {0}[] チームの勝利! -gameover.waiting = [accent]Waiting for next map... +gameover.waiting = [accent]次のマップを待っています... highscore = [accent]ハイスコアを更新! copied = コピーしました。 indev.notready = This part of the game isn't ready yet @@ -40,6 +41,11 @@ be.ignore = 無視する be.noupdates = 更新が見つかりません。 be.check = 更新を確認します。 +mod.featured.dialog.title = Mod ブラウザー (作業中) +mods.browser.selected = 選択されたmod +mods.browser.add = インストール +mods.github.open = 見る + schematic = 設計図 schematic.add = 設計図を保存 schematics = 設計図一覧 @@ -83,6 +89,7 @@ joingame = マルチプレイ customgame = カスタムプレイ newgame = 新しく始める none = <なし> +none.found = [lightgray]<見つかりません> minimap = ミニマップ position = 位置 close = 閉じる @@ -196,9 +203,10 @@ servers.local = ローカルサーバー servers.remote = リモートサーバー servers.global = コミュニティサーバー -servers.showhidden = Show Hidden Servers -server.shown = Shown -server.hidden = Hidden +servers.disclaimer = コミュニティサーバーは、[accent]開発者が所有、管理していません。[] \n\nサーバーには全ての年齢層に適さないコンテンツが存在する可能性があります。 +servers.showhidden = 非表示のサーバーを表示する +server.shown = 表示 +server.hidden = 非表示 trace = プレイヤーの記録 trace.playername = プレイヤー名: [accent]{0} @@ -464,7 +472,7 @@ filter.option.amount = 量 filter.option.block = ブロック filter.option.floor = 地面 filter.option.flooronto = 対象の地面 -filter.option.target = Target +filter.option.target = ターゲット filter.option.wall = 壁 filter.option.ore = 鉱石 filter.option.floor2 = 2番目の地面 @@ -537,7 +545,7 @@ sectors.resources = 資源: sectors.production = 生産: sectors.export = 搬出: sectors.time = 時間: -sectors.threat = 難易度: +sectors.threat = 脅威: sectors.wave = ウェーブ: sectors.stored = 保存済み: sectors.resume = 再開 @@ -561,8 +569,8 @@ sector.captured = セクター [accent]{0}[white]制圧! threat.low = 低 threat.medium = 中 threat.high = 高 -threat.extreme = Extreme -threat.eradication = Eradication +threat.extreme = 過激 +threat.eradication = 根絶 planets = 惑星 @@ -697,6 +705,7 @@ stat.commandlimit = 指揮上限 stat.abilities = 能力 stat.canboost = ブースト可能 stat.flying = 飛行 +stat.ammouse = 使用弾薬 ability.forcefield = フォースフィールド ability.repairfield = リペアフィールド @@ -719,7 +728,6 @@ bar.powerlines = 接続数: {0}/{1} bar.items = アイテム: {0} bar.capacity = 容量: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = 液体 bar.heat = 熱 bar.power = 電力 @@ -736,6 +744,7 @@ bullet.sapping = [stat]sapping bullet.homing = [stat]追尾弾 bullet.shock = [stat]電撃 bullet.frag = [stat]爆発弾 +bullet.buildingdamage = [stat]{0}%[lightgray] 対物ダメージ bullet.knockback = [stat]{0}[lightgray] ノックバック bullet.pierce = [stat]{0}[lightgray]x レーザー弾 bullet.infinitepierce = [stat]レーザー弾 @@ -764,6 +773,7 @@ unit.items = アイテム unit.thousands = k unit.millions = mil unit.billions = b +unit.pershot = /発 category.purpose = 説明 category.general = 一般 category.power = 電力 @@ -831,7 +841,9 @@ setting.chatopacity.name = チャットの透明度 setting.lasersopacity.name = レーザーの透明度 setting.bridgeopacity.name = ブリッジの透明度 setting.playerchat.name = ゲーム内にチャットを表示 +setting.showweather.name = 天気のグラフィックを表示 public.confirm = ゲームを公開しますか?\n[accent]誰でもゲームに参加できるようになります。\n[lightgray]あとから設定で変更できます。 +public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? public.beta = ベータ版では使用できません。 uiscale.reset = UIサイズが変更されました。\nこのままでよければ「OK」を押してください。\n[scarlet][accent]{0}[] 秒で元の設定に戻ります... uiscale.cancel = キャンセル & 終了 @@ -906,6 +918,7 @@ keybind.toggle_menus.name = メニュー切り替え keybind.chat_history_prev.name = 前のチャット履歴 keybind.chat_history_next.name = 次のチャット履歴 keybind.chat_scroll.name = チャットスクロール +keybind.chat_mode.name = Change Chat Mode keybind.drop_unit.name = ドロップユニット keybind.zoom_minimap.name = ミニマップのズーム mode.help.title = モード説明 @@ -954,6 +967,7 @@ rules.explosions = 爆発ダメージ rules.ambientlight = 霧の色 rules.weather = 気象 rules.weather.frequency = 頻度: +rules.weather.always = Always rules.weather.duration = 継続時間: content.item.name = アイテム @@ -1163,7 +1177,7 @@ block.power-source.name = 無限電源 block.unloader.name = 搬出機 block.vault.name = ボールト block.wave.name = ウェーブ -block.tsunami.name = 津波 +block.tsunami.name = ツナミ block.swarmer.name = スウォーマー block.salvo.name = サルボー block.ripple.name = リップル @@ -1244,7 +1258,7 @@ team.derelict.name = 廃墟 team.green.name = グリーン team.purple.name = パープル -hint.skip = Skip +hint.skip = スキップ hint.desktopMove = Use [accent][[WASD][] to move. hint.zoom = [accent]Scroll[] to zoom in or out. hint.mine = Move near the \uf8c4 copper ore and [accent]tap[] it to mine manually. @@ -1279,6 +1293,10 @@ hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a pay hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uf87f [accent]Power Nodes[]. hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down. +hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a  [accent]Foundation[] core over the  [accent]Shard[] core. Make sure it is free from nearby obstructions. +hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[]. +hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[]. +hint.coopCampaign = When playing the [accent]co-op campaign[], items that are produced in the current map will also be sent [accent]to your local sectors[].\n\nAny new research done by the host also carries over. item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。 item.copper.details = セルプロに豊富な金属。補強しない限り構造的に弱い。 @@ -1460,7 +1478,7 @@ unit.reign.description = Fires a barrage of massive piercing bullets at all near unit.nova.description = Fires laser bolts that damage enemies and repair allied structures. Capable of flight. unit.pulsar.description = Fires arcs of electricity that damage enemies and repair allied structures. Capable of flight. unit.quasar.description = Fires piercing laser beams that damage enemies and repair allied structures. Capable of flight. Shielded. -unit.vela.description = Fires a massive continuous laser beam that damages enemies, causes fires and repair allied structures. Capable of flight. +unit.vela.description = Fires a massive continuous laser beam that damages enemies, causes fires and repairs allied structures. Capable of flight. unit.corvus.description = Fires a massive laser blast that damages enemies and repairs allied structures. Can step over most terrain. unit.crawler.description = Runs toward enemies and self-destructs, causing a large explosion. unit.atrax.description = Fires debilitating orbs of slag at ground targets. Can step over most terrain. @@ -1473,12 +1491,12 @@ unit.zenith.description = Fires salvos of missiles at all nearby enemies. unit.antumbra.description = Fires a barrage of bullets at all nearby enemies. unit.eclipse.description = Fires two piercing lasers and a barrage of flak at all nearby enemies. unit.mono.description = Automatically mines copper and lead, depositing it into the core. -unit.poly.description = Automatically rebuilds damaged structures and assists other units in construction. +unit.poly.description = Automatically rebuilds destroyed structures and assists other units in construction. unit.mega.description = Automatically repairs damaged structures. Capable of carrying blocks and small ground units. unit.quad.description = Drops large bombs on ground targets, repairing allied structures and damaging enemies. Capable of carrying medium-sized ground units. unit.oct.description = Protects nearby allies with its regenerating shield. Capable of carrying most ground units. unit.risso.description = Fires a barrage of missiles and bullets at all nearby enemies. -unit.minke.description = Fires incendiary shells and standard bullets at nearby ground targets. +unit.minke.description = Fires shells and standard bullets at nearby ground targets. unit.bryde.description = Fires long-range artillery shells and missiles at enemies. unit.sei.description = Fires a barrage of missiles and armor-piercing bullets at enemies. unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Constructs flare units. diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 762e8a3cd8ce..5d5ab625ab62 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -4,10 +4,10 @@ contributors = 번역가와 기여자 discord = Mindustry Discord 서버에 가입하세요! link.discord.description = Mindustry Discord 공식 대화방 link.reddit.description = Mindustry 서브레딧 -link.github.description = Mindustry 개발 홈페이지 +link.github.description = Mindustry 소스코드 link.changelog.description = 업데이트 내용 목록 link.dev-builds.description = 불안정한 개발 버전 -link.trello.description = 출시 예정인 기능을 한다고 게시한 공식 Trello 보드 +link.trello.description = 출시 예정 기능 계획을 게시한 공식 Trello 보드 link.itch.io.description = PC 다운로드가 있는 itch.io 페이지 link.google-play.description = Google Play 스토어 목록 link.f-droid.description = F-Droid 카탈로그 목록 @@ -22,7 +22,7 @@ gameover.disconnect = 연결 끊기 gameover.pvp = [accent]{0}[] 팀이 승리했습니다! gameover.waiting = [accent]다음 맵 기다리는 중... highscore = [accent]새로운 최고 점수! -copied = 복사 +copied = 복사됨. indev.notready = 이 부분은 아직 준비되지 않았습니다. indev.campaign = [accent]당신은 캠페인의 끝에 도달했습니다![]\n\n이것으로 캠페인에 있는 대부분의 콘텐츠는 끝났으며, 행성 간 여행은 향후 업데이트에 추가될 예정입니다. @@ -41,11 +41,13 @@ be.ignore = 무시 be.noupdates = 업데이트가 없습니다. be.check = 업데이트 확인 -mod.featured.title = 모드 탐색기 -mod.featured.dialog.title = 모드 탐색 +mods.browser = 모드 탐색기 mods.browser.selected = 선택된 모드 -mods.browser.add = 모드 설치 -mods.github.open = 깃허브 사이트 열기 +mods.browser.add = 설치 +mods.browser.reinstall = 재설치 +mods.github.open = 레포지토리 보기 +mods.browser.sortdate = 최근 업데이트 +mods.browser.sortstars = 추천(스타) 수 schematic = 설계도 schematic.add = 설계도 저장하기 @@ -55,7 +57,7 @@ schematic.exists = 해당 이름의 설계도가 이미 존재합니다. schematic.import = 설계도 가져오기 schematic.exportfile = 파일 내보내기 schematic.importfile = 파일 가져오기 -schematic.browseworkshop = 창작마당 검색 +schematic.browseworkshop = 창작마당에 검색 schematic.copy = 클립 보드에 복사 schematic.copy.import = 클립 보드에서 가져오기 schematic.shareworkshop = 창작마당에 공유 @@ -82,7 +84,7 @@ level.highscore = 최고 점수: [accent]{0} level.select = 맵 선택 level.mode = 게임 모드: coreattack = < 코어가 공격을 받고 있습니다! > -nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 전멸됩니다! +nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 전멸합니다! database = 코어 데이터베이스 savegame = 게임 저장 loadgame = 게임 불러오기 @@ -90,6 +92,7 @@ joingame = 게임 참여 customgame = 사용자 지정 게임 newgame = 새 게임 none = < 없음 > +none.found = [lightgray]< 찾을 수 없음 > minimap = 미니맵 position = 위치 close = 닫기 @@ -116,8 +119,10 @@ mods.none = [lightgray]모드를 찾을 수 없습니다! mods.guide = 모드 제작 가이드 mods.report = 버그 제보하기 mods.openfolder = 폴더 열기 +mods.viewcontent = 콘텐츠 보기 mods.reload = 새로 고침 mods.reloadexit = 게임이 종료된 후 모드를 불러올 것입니다. +mod.installed = [[설치됨] mod.display = [gray]모드:[orange] {0} mod.enabled = [lightgray]활성화됨 mod.disabled = [scarlet]비활성화됨 @@ -125,8 +130,8 @@ mod.disable = 비활성화 mod.content = 콘텐츠: mod.delete.error = 모드를 삭제할 수 없습니다. 파일이 사용 중일 수 있습니다. mod.requiresversion = [scarlet]필요한 최소 게임 버전: [accent]{0} -mod.outdated = [scarlet]V6 버전과 호환되지 않음 (minGameVersion이 105 이하인 모드는 사용할 수 없습니다.) -mod.missingdependencies = [scarlet]누락된 요구 모드: {0} +mod.outdated = [scarlet]V6 버전과 호환되지 않음 (minGameVersion: 105 이상이 아님) +mod.missingdependencies = [scarlet]누락된 필요 모드: {0} mod.erroredcontent = [scarlet]콘텐츠 오류 mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함. mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요. @@ -137,21 +142,21 @@ mod.reloadrequired = [scarlet]재시작 필요 mod.import = 모드 가져오기 mod.import.file = 파일 가져오기 mod.import.github = Github 에서 모드 가져오기 -mod.jarwarn = [scarlet]JAR 모드는 안전하지 않습니다.[]\n신뢰할 수 있는 소스에서 얻은 모드만을 사용해야 합니다! -mod.item.remove = 이 자원은[accent] '{0}' 모드의 일부입니다. 이를 제거하려면 해당 모드를 제거하세요. +mod.jarwarn = [scarlet]JAR 모드는 안전하지 않습니다.[]\n신뢰할 수 있는 개발자에게서 얻은 모드만을 사용해야 합니다! +mod.item.remove = 이 아이템은[accent] '{0}' 모드의 일부입니다. 이를 제거하려면 해당 모드를 제거하세요. mod.remove.confirm = 이 모드가 삭제될 것입니다. mod.author = [lightgray]제작자:[] {0} -mod.missing = 이 저장 파일에는 최근에 업데이트되었거나 현재 기기에 설치되지 않은 모드가 포함되어 있습니다. 저장 파일이 손상될 수 있습니다. 정말로 불러오시겠습니까?\n[lighthray]모드들:\n{0} +mod.missing = 이 저장 파일에는 최근에 업데이트되었거나 현재 기기에 설치되지 않은 모드가 포함되어 있습니다. 저장 파일이 손상될 수 있습니다. 정말로 불러오시겠습니까?\n[lightgray]모드들:\n{0} mod.preview.missing = 창작마당에 모드를 올리기 전에 미리 보기 이미지를 추가해야 합니다.\n[accent]preview.png[] 라는 이름의 미리 보기 이미지를 모드 폴더에 넣고 다시 시도하세요. mod.folder.missing = 창작마당에는 폴더 형태의 모드만 게시할 수 있습니다.\n모드를 폴더 형태로 바꾸려면 모드 파일을 모드 폴더에 압축을 풀고 이전 모드 파일을 삭제 후, 게임을 재시작하거나 모드를 다시 불러오십시오. mod.scripts.disable = 이 기기는 스크립트가 있는 모드를 지원하지 않습니다. 게임을 플레이하려면 이 모드를 비활성화해야 합니다. about.button = 정보 name = 닉네임 : -noname = 먼저 [accent]닉네임[]을 설정하세요. +noname = 먼저 [accent]플레이어 이름[]을 설정하세요. planetmap = 행성 지도 launchcore = 코어 출격 -filename = 파일 이름 : +filename = 파일 이름: unlocked = 새로운 콘텐츠가 해금되었습니다! available = 새로운 콘텐츠 해금이 가능합니다! completed = [accent]완료됨 @@ -171,17 +176,17 @@ server.closing = [accent]서버를 닫는 중... server.kicked.kick = 서버에서 추방되었습니다! server.kicked.whitelist = 당신은 이 서버의 화이트리스트에 등록되어 있지 않습니다. server.kicked.serverClose = 서버 닫힘. -server.kicked.vote = 당신은 투표로 추방되었습니다. 안녕히 가세요! +server.kicked.vote = 당신은 투표로 추방되었습니다. 안녕히 가세요. server.kicked.clientOutdated = 구버전 클라이언트입니다! 게임을 업데이트하세요! server.kicked.serverOutdated = 구버전 서버입니다! 호스트에게 업데이트를 요청하세요! server.kicked.banned = 당신은 이 서버에서 영구적으로 차단되었습니다. -server.kicked.typeMismatch = 이 서버는 현재 빌드 유형과 호환되지 않습니다. +server.kicked.typeMismatch = 이 서버는 현재 빌드와 호환되지 않습니다. server.kicked.playerLimit = 서버의 인원이 꽉 찼습니다. 빈 슬롯이 생길 때까지 기다려주세요. server.kicked.recentKick = 최근에 추방되었습니다.\n추방 쿨타임이 끝날 때까지 기다리세요. server.kicked.nameInUse = 이 서버에 해당 이름을 가진 사람이 있습니다. server.kicked.nameEmpty = 설정된 닉네임이 없습니다. -server.kicked.idInUse = 당신은 이미 이 서버에 있습니다! 두 개의 계정으로 연결하는건 허용되지 않습니다. -server.kicked.customClient = 이 서버는 사용자 정의 빌드를 지원하지 않습니다. 공식 버전을 다운로드 하세요. +server.kicked.idInUse = 당신은 이미 이 서버에 있습니다! 두 개의 계정으로 연결하는 건 허용되지 않습니다. +server.kicked.customClient = 이 서버는 사용자 정의 빌드를 지원하지 않습니다. 공식 버전을 내려받으세요. server.kicked.gameover = 게임 오버! server.kicked.serverRestarting = 서버가 다시 시작되고 있습니다. server.versions = 당신의 버전 : [accent] {0}[]\n서버 버전 : [accent] {1}[] @@ -204,7 +209,7 @@ servers.remote = 원격 서버 servers.global = 커뮤니티 서버 servers.disclaimer = 커뮤니티 서버는 개발자가 소유하거나 제어하지 [accent]않습니다[].\n\n서버들은 전연령대에 적합하지 않은 사용자 지정 콘텐츠를 보유할 수도 있습니다. -servers.showhidden = 서버 숨기기 / 보이기 +servers.showhidden = 숨겨진 서버 보이기/숨기기 server.shown = 서버 숨기기 server.hidden = 서버 보이기 @@ -217,7 +222,7 @@ trace.modclient = 사용자 지정 클라이언트: [accent]{0} invalidid = 잘못된 클라이언트 ID입니다! 버그 보고서를 보내주세요. server.bans = 차단 목록 server.bans.none = 차단된 플레이어를 찾을 수 없습니다! -server.admins = 관리자들 +server.admins = 관리자 server.admins.none = 관리자를 찾을 수 없습니다! server.add = 서버 추가 server.delete = 정말로 이 서버를 삭제하시겠습니까? @@ -287,6 +292,7 @@ cancel = 취소 openlink = 링크 열기 copylink = 링크 복사 back = 뒤로가기 +max = 최대 crash.export = 오류 로그 내보내기 crash.none = 오류 로그가 발견되지 않았습니다. crash.exported = 오류 로그가 추출되었습니다. @@ -302,11 +308,12 @@ loading = [accent]불러오는중... reloading = [accent]모드 새로고침하는중... saving = [accent]저장중... respawn = [accent][[{0}][] 키를 눌러 코어에서 부활 -cancelbuilding = [accent][[{0}][] 를 눌러 건설 계획을 초기화 -selectschematic = [accent][[{0}][] 를 눌러 선택+복사 -pausebuilding = [accent][[{0}][] 를 눌러 건설을 일시중지 -resumebuilding = [scarlet][[{0}][] 를 눌러 건설을 재개 -showui = [accent][[{0}][] 키를 눌러 UI를 활성화 +cancelbuilding = [accent][[{0}][] 키를 눌러 건설 계획을 초기화 +selectschematic = [accent][[{0}][] 키를 눌러 선택+복사 +pausebuilding = [accent][[{0}][] 키를 눌러 건설을 일시중지 +resumebuilding = [scarlet][[{0}][] 키를 눌러 건설을 재개 +enablebuilding = [scarlet][[{0}][] 키를 눌러 건설을 활성 +showui = UI가 숨겨졌습니다. [accent][[{0}][] 키를 눌러 UI를 활성화하세요. wave = [accent]{0} 단계 wave.cap = [accent]단계 {0}/{1} wave.waiting = 다음 단계까지[lightgray] {0}초 @@ -335,10 +342,10 @@ workshop.error = 창작마당 세부 사항을 가져오는 중 오류가 발생 map.publish.confirm = 이 맵을 게시하시겠습니까?\n\n[lightgray]창작마당 EULA에 먼저 동의해야 하며, 그렇지 않으면 맵이 표시되지 않습니다! workshop.menu = 이 아이템으로 수행 할 작업을 선택하십시오. workshop.info = 아이템 정보 -changelog = 변경 점 (선택 사항) : +changelog = 변경점 (선택 사항): eula = 스팀 EULA missing = 이 아이템은 삭제되거나 이동되었습니다.\n[lightgray]창작마당 목록이 자동으로 연결 해제되었습니다. -publishing = [accent]업로드 중... +publishing = [accent]게시 중... publish.confirm = 이것을 게시하시겠습니까?[lightgray]창작마당 EULA에 동의해야 합니다. 그렇지 않으면 아이템이 표시되지 않습니다! publish.error = 아이템 게시 오류: {0} steam.error = 스팀 서비스를 초기화하지 못했습니다.\n오류: {0} @@ -361,7 +368,6 @@ editor.center = 중앙 workshop = 창작마당 waves.title = 단계 waves.remove = 삭제 -waves.never = 여기까지 유닛 생성 waves.every = 매 waves.waves = 단계마다 waves.perspawn = 마리씩 생성됨 @@ -373,7 +379,7 @@ waves.edit = 편집 waves.copy = 클립보드로 복사 waves.load = 클립보드에서 불러오기 waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다. -waves.copied = 단계 복사됨 +waves.copied = 단계 복사됨. waves.none = 적 단계가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 단계 데이터로 설정됩니다. #these are intentionally in lower case @@ -382,15 +388,15 @@ wavemode.totals = 총 wavemode.health = 체력 editor.default = [lightgray]<기본값> -details = 설명 -edit = 편집 +details = 설명... +edit = 편집... editor.name = 이름: editor.spawn = 유닛 생성 editor.removeunit = 유닛 삭제 editor.teams = 팀 editor.errorload = 파일을 불러오지 못했습니다. editor.errorsave = 파일을 저장하지 못했습니다. -editor.errorimage = 이것은 맵이 아니라 사진입니다.\n\n3.5/build 40 맵을 가져올려면 편집기에서 '예전 맵 가져오기' 버튼을 사용하세요. +editor.errorimage = 이것은 맵이 아니라 사진입니다. editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원되지 않는 구형 맵 형식을 사용합니다. editor.errornot = 맵 파일이 아닙니다. editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다. @@ -413,7 +419,7 @@ editor.importfile = 파일 가져오기 editor.importfile.description = 외부 맵 파일 가져오기 editor.importimage = 사진 파일 가져오기 editor.importimage.description = 외부 맵 사진 파일 가져오기 -editor.export = 내보내기 +editor.export = 내보내기... editor.exportfile = 파일 내보내기 editor.exportfile.description = 맵 파일 내보내기 editor.exportimage = 지형 이미지 내보내기 @@ -446,15 +452,15 @@ toolmode.drawteams.description = 블록 대신 선택한 팀으로 블록 팀을 filters.empty = [lightgray]필터가 없습니다! 아래 버튼을 눌러 하나를 추가하세요. filter.distort = 왜곡 filter.noise = 노이즈 -filter.enemyspawn = 적 소환지점 제한 +filter.enemyspawn = 적 소환지점 선택 filter.spawnpath = 자동생성된 적 이동경로 폭 -filter.corespawn = 코어 1개 제한 +filter.corespawn = 코어 선택 filter.median = 중앙값 -filter.oremedian = 자원 중앙값 -filter.blend = 블렌드 -filter.defaultores = 기본 자원 -filter.ore = 자원 -filter.rivernoise = 협곡 노이즈 +filter.oremedian = 광물 중앙값 +filter.blend = 가장자리 +filter.defaultores = 기본 광물 +filter.ore = 광물 +filter.rivernoise = 강 노이즈 filter.mirror = 거울 filter.clear = 초기화 filter.option.ignore = 무시 @@ -463,19 +469,19 @@ filter.terrain = 지형 filter.option.scale = 크기 filter.option.chance = 배치 빈도 filter.option.mag = 크기 -filter.option.threshold = 경계선 +filter.option.threshold = 한계점 filter.option.circle-scale = 원 크기 filter.option.octaves = 옥타브 filter.option.falloff = 경사 filter.option.angle = 각도 filter.option.amount = 개수 filter.option.block = 블록 -filter.option.floor = 배치할 타일 +filter.option.floor = 타일 filter.option.flooronto = 대상 타일 -filter.option.target = 대상 타일 +filter.option.target = 대상 filter.option.wall = 벽 -filter.option.ore = 자원 -filter.option.floor2 = 2층 바닥 +filter.option.ore = 광물 +filter.option.floor2 = 2번째 타일 filter.option.threshold2 = 2번째 경계선 filter.option.radius = 반경 filter.option.percentile = 백분율 @@ -486,7 +492,7 @@ menu = 메뉴 play = 플레이 campaign = 캠페인 load = 불러오기 -save = 저장 +save = 저장하기 fps = FPS: {0} ping = Ping: {0}ms memory = Mem: {0}mb @@ -517,7 +523,7 @@ loadout = 출격 resources = 자원 bannedblocks = 금지된 블록들 addall = 모두 추가 -launch.from = 점령 코어 송신 지역 : [accent]{0} +launch.from = 출격 출발지 : [accent]{0} launch.destination = 목적지: {0} configure.invalid = 해당 값은 0에서 {0} 사이의 숫자여야 합니다. add = 추가... @@ -532,7 +538,7 @@ error.alreadyconnected = 이미 접속 중입니다. error.mapnotfound = 맵 파일을 찾을 수 없습니다! error.io = 네트워크 I/O 오류. error.any = 알 수 없는 네트워크 오류. -error.bloom = 블룸 그래픽 효과를 적용하지 못했습니다.\n당신의 기기가 이 기능을 지원하지 않는 것일 수도 있습니다. +error.bloom = 블룸 그래픽 효과를 적용하지 못했습니다.\n기기가 이 기능을 지원하지 않는 것일 수도 있습니다. weather.rain.name = 비 weather.snow.name = 눈 @@ -542,27 +548,27 @@ weather.fog.name = 안개 sectors.unexplored = [lightgray]미개척지 sectors.resources = 자원: -sectors.production = 분당 자원 생산량: -sectors.export = 분당 자원 수출량: -sectors.time = 지역 진행 시간: -sectors.threat = 지역 위험도: -sectors.wave = 진행 중 단계: -sectors.stored = 저장된 자원 목록: +sectors.production = 생산량: +sectors.export = 수출량: +sectors.time = 진행 시간: +sectors.threat = 위험도: +sectors.wave = 단계: +sectors.stored = 저장량: sectors.resume = 재개 sectors.launch = 출격 sectors.select = 선택 sectors.nonelaunch = [lightgray]없음 (sun) sectors.rename = 구역 이름 변경 sectors.enemybase = [scarlet]적 기지 -sectors.vulnerable = [scarlet]취약 +sectors.vulnerable = [scarlet]취약함 sectors.underattack = [scarlet]공격받고 있습니다! [accent]{0}% 손상됨. sectors.survives = [accent]{0} 단계 이상 버티세요. -sectors.go = 지역 진입 -sector.curcapture = 점령지 -sector.curlost = 잃은 지역 +sectors.go =진입 +sector.curcapture = 지역 점령됨 +sector.curlost = 지역 잃음 sector.missingresources = [scarlet]자원 부족 sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다! -sector.lost = [accent]{0}[white] 지역을 잃었습니다... +sector.lost = [accent]{0}[white] 지역을 잃었습니다! #note: the missing space in the line below is intentional sector.captured = [accent]{0}[white] 지역을 점령했습니다! @@ -578,7 +584,7 @@ planet.serpulo.name = 세르플로 planet.sun.name = 태양 sector.impact0078.name = 폐허 : Impact 0078 -sector.groundZero.name = Zero 전초기지 +sector.groundZero.name = 전초기지 sector.craters.name = 크레이터 sector.frozenForest.name = 얼어붙은 숲 sector.ruinousShores.name = 파괴된 해안가 @@ -597,15 +603,15 @@ sector.planetaryTerminal.name = 대행성 출격단지 sector.groundZero.description = 이 장소는 다시 시작하기에 최적의 환경을 지닌 장소입니다. 적의 위협 수준이 낮으며, 자원이 거의 없습니다.\n가능 한 많은 양의 구리와 납을 수집하세요.\n이제 출격할 시간입니다! sector.frozenForest.description = 이곳에서도, 산에 가까운 곳에 포자가 퍼졌습니다. 추운 온도에서도 포자들을 막을 수 없을 것 같습니다.\n화력 발전기를 건설하고, 멘더를 사용하는 방법을 배우세요. sector.saltFlats.description = 이 소금 사막은 매우 척박하여 자원이 거의 없습니다.\n하지만 자원이 희소한 이곳에서도 적들의 요새가 발견되었습니다. 그들을 사막의 모래로 만들어버리십시오. -sector.craters.description = 물이 가득한 이 크레이터에는 옛 전쟁의 유물들이 쌓여있습니다.\n이곳을 다시 점령해 강화 유리를 제작하고 물을 끌어 올려 포탑과 드릴에 공급하여 더 좋은 효율로 방어선을 강화하십시오. +sector.craters.description = 물이 가득한 이 크레이터에는 옛 전쟁의 유물들이 쌓여있습니다.\n이곳을 다시 점령해 강화 유리를 제작하고 물을 끌어올려 포탑과 드릴에 공급하여 더 좋은 효율로 방어선을 강화하십시오. sector.ruinousShores.description = 이 지역은 과거 해안방어기지로 사용되었습니다.\n그러나 지금은 기본구조물만 남아있으니 이 지역을 어서 신속히 수리하여 외부로 세력을 확장한 뒤, 잃어버린 기술을 다시 회수하십시오. sector.stainedMountains.description = 더 안쪽에는 포자에 오염된 산맥이 있지만, 이곳은 아직 포자에 오염되지 않았습니다.\n이 지역에서 티타늄을 채굴하고 이것을 어떻게 사용하는지 배우십시오.\n\n적들은 이곳에서 더 강력합니다. 더 강한 유닛들이 나올 때까지 시간을 낭비하지 마십시오. -sector.overgrowth.description = 이곳은 포자들의 근원과 가까이에 있는 과성장 지대입니다. 적이 이 곳에 전초기지를 설립했습니다. 디거를 생산해 적의 코어를 박살 내고 우리가 잃어버린 것들을 되돌려받으십시오! +sector.overgrowth.description = 이곳은 포자들의 근원과 가까이에 있는 과성장 지대입니다. 적이 이곳에 전초기지를 설립했습니다. 대거를 생산해 적의 코어를 박살 내고 우리가 잃어버린 것들을 되돌려받으십시오! sector.tarFields.description = 산지와 사막 사이에 있는 석유 생산지의 외곽 지역이며, 사용 가능한 타르가 매장되어 있는 희귀한 지역 중 하나입니다. 버려진 지역이지만 이곳에는 위험한 적군들이 있습니다. 그들을 과소평가하지 마십시오.\n\n[lightgray]석유 생산기술을 익히는 것이 도움이 될 것입니다. sector.desolateRift.description = 극도로 위험한 지역입니다. 자원은 풍부하지만, 사용 가능한 공간은 거의 없습니다. 코어 파괴의 위험성이 높으니 가능한 한 빨리 떠나십시오. 또한, 적의 공격 딜레이가 길다고 안심하지 마십시오. sector.nuclearComplex.description = 과거 토륨의 생산, 연구와 처리를 위해 운영되었던 시설입니다. 지금은 그저 폐허로 전락했으며, 다수의 적이 배치된 지역입니다. 그들은 끊임없이 당신을 공격할 것입니다.\n\n[lightgray]토륨의 다양한 사용법을 연구하고 익히십시오. -sector.fungalPass.description = 높은 산과 낮은 땅 사이의 전환 지역. 작은 적 정찰 기지가 여기에 있습니다.\n그것들을 파괴하세요.\n대거와 크롤러 유닛을 사용하여 두개의 코어를 파괴하세요. -sector.biomassFacility.description = 포자의 시작이 되는 지역입니다. 이 시설은 포자를 연구하고 그것들을 가장 처음 생산했습니다.\n이 시설에 기록된 기술을 배우고, 연료와 플라스터늄을 생산하기 위해 포자를 배양하세요. \n\n[lightgray]이 시설이 붕괴된 후에, 시설 내에 배양되던 포자들이 외부로 방출되었습니다. 이로 인해 생태계 교란종인 포자가 지역 생태계에서 번식하게 되었고, 그 무엇도 이 무자비하고 작은 침략자에게 대항할 수 없었습니다. +sector.fungalPass.description = 높은 산과 낮은 땅 사이의 전환 지역. 작은 적 정찰 기지가 여기에 있습니다.\n그것들을 파괴하세요.\n대거와 크롤러 유닛을 사용하여 두 개의 코어를 파괴하세요. +sector.biomassFacility.description = 포자의 시작이 되는 지역입니다. 이 시설은 포자를 연구하고 그것들을 가장 처음 생산했습니다.\n이 시설에 기록된 기술을 배우고, 연료와 플라스터늄을 생산하기 위해 포자를 배양하세요. \n\n[lightgray]이 시설이 붕괴한 후에, 시설 내에 배양되던 포자들이 외부로 방출되었습니다. 이로 인해 생태계 교란종인 포자가 지역 생태계에서 번식하게 되었고, 그 무엇도 이 무자비하고 작은 침략자에게 대항할 수 없었습니다. sector.windsweptIslands.description = 육지에서 멀리 떨어진 이곳에는 작은 군도가 있습니다. 이 지역을 조사해보면 한 때 [accent]플라스터늄[]을 생산한 흔적이 남아있습니다.\n\n몰려오는 적 해군을 막으며, 섬에 기지를 건설하고, 공장들을 연구하십시오. sector.extractionOutpost.description = 적이 다른 지역에 자원을 보내기 위한 용도로 건설한 보급기지입니다.\n\n강력한 적들이 지키고 있거나, 침공해올 예정인 지역을 효과적으로 침공/수호하기 위해서는 우리도 이 수송 기술이 필요합니다. 적의 기지를 파괴하고, 그들의 수송 기술을 약탈하십시오. sector.impact0078.description = 이곳에는 시스템에 처음 진입한 우주 수송선의 잔해가 있습니다.\n\n우주선이 파괴된 잔해에서 최대한 많은 자원을 회수하고, 손상되지 않은 그들의 기술을 획득하세요. @@ -613,9 +619,9 @@ sector.planetaryTerminal.description = 이 행성에서의 마지막 전투를 settings.language = 언어 settings.data = 게임 데이터 -settings.reset = 설정 초기화 -settings.rebind = 조작키 설정 -settings.resetKey = 조작키 설정 초기화 +settings.reset = 기본값으로 초기화 +settings.rebind = 설정 +settings.resetKey = 초기화 settings.controls = 조작 settings.game = 게임 settings.sound = 소리 @@ -631,14 +637,14 @@ settings.clearcampaignsaves = 캠페인 맵 초기화 settings.clearcampaignsaves.confirm = 정말로 캠페인을 초기화하시겠습니까? paused = [accent]< 일시정지 > clear = 초기화 -banned = [scarlet]차단됨 +banned = [scarlet]금지됨 yes = O no = X info.title = 정보 -error.title = [scarlet]오류가 발생했습니다. -error.crashtitle = 오류가 발생했습니다. +error.title = [scarlet]오류가 발생했습니다 +error.crashtitle = 오류가 발생했습니다 unit.nobuild = [scarlet]건설 불가 -lastaccessed = [lightgray]마지막 조작: {0} +lastaccessed = [lightgray]마지막 접근: {0} block.unknown = [lightgray]??? stat.description = 특성 @@ -647,64 +653,67 @@ stat.output = 출력 stat.booster = 가속 stat.tiles = 필요한 타일 stat.affinities = 친화력 -stat.powercapacity = 전력량 -stat.powershot = 전력량/발 -stat.damage = 공격력 -stat.targetsair = 공중 공격 -stat.targetsground = 지상 공격 +stat.powercapacity = 전력 용량 +stat.powershot = 전력/발 +stat.damage = 피해량 +stat.targetsair = 공중 조준 +stat.targetsground = 지상 조준 stat.itemsmoved = 이동 속도 -stat.launchtime = 발사 간격 +stat.launchtime = 출격 간격 stat.shootrange = 사거리 stat.size = 크기 stat.displaysize = 화면 크기 -stat.liquidcapacity = 액체 수용량 +stat.liquidcapacity = 액체 용량 stat.powerrange = 전선 길이 -stat.linkrange = 감지 길이 +stat.linkrange = 연결 길이 stat.instructions = 연산 속도 -stat.powerconnections = 최대 연결 개수 +stat.powerconnections = 최대 연결 stat.poweruse = 전력 요구량 -stat.powerdamage = 전력량/피해량 -stat.itemcapacity = 자원 수용량 -stat.memorycapacity = 최대 변수 개수 -stat.basepowergeneration = 기본 발전량 +stat.powerdamage = 전력/피해량 +stat.itemcapacity = 자원 용량 +stat.memorycapacity = 변수 용량 +stat.basepowergeneration = 기본 전력 발전량 stat.productiontime = 소요 시간 -stat.repairtime = 건물 완전 복구 시간 +stat.repairtime = 건물 완전 수리 시간 stat.weapons = 무기 stat.bullet = 탄환 stat.speedincrease = 속도 증가 stat.range = 사거리 -stat.drilltier = 채굴 가능 자원 +stat.drilltier = 채굴 가능 stat.drillspeed = 기본 채굴 속도 stat.boosteffect = 버프 효과 stat.maxunits = 최대 유닛 수 stat.health = 체력 +stat.armor = 방어력 stat.buildtime = 건설 시간 -stat.maxconsecutive = 최대 체인 길이 +stat.maxconsecutive = 최대 체인 stat.buildcost = 건설 비용 stat.inaccuracy = 오차각 -stat.shots = 발사 당 탄 -stat.reload = 발/초 +#stat.shots = 발사 수 (안쓰임) +stat.reload = 초당 발사 수 stat.ammo = 탄약 stat.shieldhealth = 보호막 체력 stat.cooldowntime = 쿨타임 stat.explosiveness = 폭발성 stat.basedeflectchance = 기본 반사 확률 stat.lightningchance = 전격 확률 -stat.lightningdamage = 전격 공격량 -stat.flammability = 휘발성 +stat.lightningdamage = 전격 피해량 +stat.flammability = 인화성 stat.radioactivity = 방사성 -stat.heatcapacity = 열용량 +stat.charge = 과충전율 +stat.heatcapacity = 열 용량 stat.viscosity = 점성 stat.temperature = 온도 stat.speed = 속도 stat.buildspeed = 건설 속도 stat.minespeed = 채굴 속도 stat.minetier = 채굴 티어 -stat.payloadcapacity = 화물 수용량 +stat.payloadcapacity = 화물 용량 stat.commandlimit = 지휘 한계 stat.abilities = 능력 -stat.canboost = 부스터 +stat.canboost = 이륙 가능 stat.flying = 비행 +stat.ammouse = 탄약 사용 ability.forcefield = 보호막 필드 ability.repairfield = 수리 필드 @@ -713,12 +722,13 @@ ability.unitspawn = {0} 공장 ability.shieldregenfield = 방어막 복구 필드 ability.movelightning = 가속 전격 -bar.drilltierreq = 더 좋은 드릴이 필요 +bar.drilltierreq = 더 좋은 드릴 필요 bar.noresources = 자원 부족 -bar.corereq = 코어 필요 +bar.corereq = 기본 코어 필요 bar.drillspeed = 드릴 속도: {0}/s bar.pumpspeed = 펌프 속도: {0}/s bar.efficiency = 효율: {0}% +bar.boost = 가속: {0}% bar.powerbalance = 전력: {0}/s bar.powerstored = 저장량: {0}/{1} bar.poweramount = 전력: {0} @@ -727,37 +737,37 @@ bar.powerlines = 연결: {0}/{1} bar.items = 자원량: {0} bar.capacity = 용량: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[장비를 정지합니다] bar.liquid = 액체 bar.heat = 발열 bar.power = 전력 -bar.progress = 생산 진행도 +bar.progress = 건설 진행도 bar.input = 입력 bar.output = 출력 -units.processorcontrol = [lightgray]프로세서 제어 중 +units.processorcontrol = [lightgray]프로세서 제어됨 -bullet.damage = 기본 피해량 : [stat]{0}[lightgray] -bullet.splashdamage = 범위 피해량 : [stat]{0}[lightgray] ~ [stat]{1}[lightgray] 타일 +bullet.damage = [stat]{0}[lightgray] 피해량 +bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat] {1}[lightgray] 타일 bullet.incendiary = [stat]방화 bullet.sapping = [stat]흡혈 bullet.homing = [stat]유도 bullet.shock = [stat]전격 bullet.frag = [stat]파편 -bullet.knockback = 넉백 피해량 : [stat]{0}[lightgray] -bullet.pierce = 관통 피해량 : [stat]{0}[lightgray] +bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량 +bullet.knockback = [stat]{0}[lightgray] 넉백 +bullet.pierce = [stat]{0}[lightgray]번 관통 bullet.infinitepierce = [stat]관통 -bullet.healpercent = 회복량 : [stat]{0}[lightgray]% / 1발 +bullet.healpercent = [stat]{0}[lightgray]% 회복 bullet.freezing = [stat]빙결 bullet.tarred = [stat]타르 -bullet.multiplier = 탄약 소모량 : [stat]{0}[lightgray]개 / 1발 -bullet.reload = 발사 속도 : [stat]{0}[lightgray] / s +bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수 +bullet.reload = [stat]{0}[lightgray]배 발사 속도 unit.blocks = 블록 unit.blockssquared = 블록² unit.powersecond = 전력/초 unit.liquidsecond = 액체/초 -unit.itemssecond = 개/초 +unit.itemssecond = 자원/초 unit.liquidunits = 액체 unit.powerunits = 전력 unit.degrees = 도 @@ -767,24 +777,26 @@ unit.persecond = /초 unit.perminute = /분 unit.timesspeed = x 배 unit.percent = % -unit.shieldhealth = 방어막 체력 +unit.shieldhealth = 보호막 체력 unit.items = 자원 unit.thousands = k unit.millions = m unit.billions = b -category.purpose = 기능 / 목적 +unit.pershot = /발 +category.purpose = 목적 category.general = 일반 category.power = 전력 category.liquids = 액체 category.items = 자원 category.crafting = 입력/출력 category.function = 기능 -category.optional = 보조 자원 +category.optional = 선택적 향상 setting.landscape.name = 가로화면 잠금 setting.shadows.name = 그림자 setting.blockreplace.name = 자동 블록 제안 setting.linear.name = 선형 필터링 -setting.hints.name = 힌트 +setting.hints.name = 힌트 표시 +setting.logichints.name = 로직 힌트 표시 setting.flow.name = 자원 흐름량 표시 setting.backgroundpause.name = 백그라운드에서 일시정지 setting.buildautopause.name = 건설 자동 일시정지 @@ -808,14 +820,14 @@ setting.difficulty.hard = 혼돈 setting.difficulty.insane = 박멸 setting.difficulty.name = 난이도: setting.screenshake.name = 화면 흔들림 -setting.effects.name = 효과 보임 +setting.effects.name = 효과 표시 setting.destroyedblocks.name = 파괴된 블록 표시 setting.blockstatus.name = 블록 상태 표시 -setting.conveyorpathfinding.name = 컨베이어를 배치할 때 자동으로 경로 찾기 +setting.conveyorpathfinding.name = 컨베이어 배치 길찾기 setting.sensitivity.name = 컨트롤러 감도 setting.saveinterval.name = 저장 간격 setting.seconds = {0}초 -setting.milliseconds = {0}ms +setting.milliseconds = {0} 밀리초 setting.fullscreen.name = 전체 화면 setting.borderlesswindow.name = 테두리 없는 창 모드[lightgray] (재시작이 필요할 수 있습니다) setting.fps.name = FPS와 핑 표시 @@ -833,7 +845,7 @@ setting.sfxvol.name = 효과음 크기 setting.mutesound.name = 소리 끄기 setting.crashreport.name = 익명으로 오류 보고서 자동 전송 setting.savecreate.name = 자동 저장 활성화 -setting.publichost.name = 멀티플레이 공용 서버로 표시 +setting.publichost.name = 공용 서버로 표시 setting.playerlimit.name = 플레이어 제한 setting.chatopacity.name = 채팅창 투명도 setting.lasersopacity.name = 전선 투명도 @@ -841,6 +853,7 @@ setting.bridgeopacity.name = 터널 투명도 setting.playerchat.name = 채팅 말풍선 표시 setting.showweather.name = 날씨 그래픽 표시 public.confirm = 게임을 모두에게 공개하시겠습니까?\n[accent]모든 플레이어가 게임에 참여할 수 있습니다.\n[lightgray]설정->게임->멀티플레이 공용 서버로 표시에서 나중에 변경할 수 있습니다.\n\n[sky]번역자 추가[]\n[accent]친구끼리 하려고 이 기능을 활성화 한 뒤에, 친구 외에 다른 플레이어가 들어왔을 때\n해당 플레이어를 차단하는 행위는 비매너를 넘어서는 얌체 행위 그 자체입니다.\n정말로 [scarlet]많은 다른 플레이어들이 오길 원한다[]면 확인하세요. +public.confirm.really = [red]친구하고 플레이 하고 싶으면 [scarlet]공용 서버[] 대신에 [green]친구 초대[] 를 사용하세요. 정말로 [scarlet]공용 서버[] 를 열겠습니까?[] public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다. uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다... uiscale.cancel = 취소 후 나가기 @@ -852,7 +865,7 @@ category.view.name = 보기 category.multiplayer.name = 멀티플레이어 category.blocks.name = 블록 선택 command.attack = 공격 -command.rally = 순찰 +command.rally = 집결 command.retreat = 후퇴 command.idle = 대기 placement.blockselectkeys = \n[lightgray]단축키: [{0}, @@ -868,13 +881,13 @@ keybind.move_x.name = X축 이동 keybind.move_y.name = Y축 이동 keybind.mouse_move.name = 커서를 따라서 이동 keybind.pan.name = 펜 보기 -keybind.boost.name = 부스트 +keybind.boost.name = 이륙 keybind.schematic_select.name = 영역 설정 keybind.schematic_menu.name = 설계도 메뉴 keybind.schematic_flip_x.name = 설계도 X축 뒤집기 keybind.schematic_flip_y.name = 설계도 Y축 뒤집기 -keybind.category_prev.name = 이전 목록 -keybind.category_next.name = 다음 목록 +keybind.category_prev.name = 이전 카테고리 +keybind.category_next.name = 다음 카테고리 keybind.block_select_left.name = 블록 왼쪽 선택 keybind.block_select_right.name = 블록 오른쪽 선택 keybind.block_select_up.name = 블록 위쪽 선택 @@ -899,7 +912,7 @@ keybind.pickupCargo.name = 화물 집기 keybind.dropCargo.name = 화물 내려놓기 keybind.command.name = 명령 keybind.shoot.name = 사격 -keybind.zoom.name = 확대 +keybind.zoom.name = 확대/축소 keybind.menu.name = 메뉴 keybind.pause.name = 일시중지 keybind.pause_building.name = 건설 일시정지/재개 @@ -915,13 +928,14 @@ keybind.toggle_menus.name = 메뉴 보이기/숨기기 keybind.chat_history_prev.name = 이전 채팅 기록 keybind.chat_history_next.name = 다음 채팅 기록 keybind.chat_scroll.name = 채팅 스크롤 -keybind.drop_unit.name = 유닛 떨구기 +keybind.chat_mode = 대화 대상 변경 +keybind.drop_unit.name = 유닛 내려놓기 keybind.zoom_minimap.name = 미니맵 확대 mode.help.title = 모드 설명 mode.survival.name = 생존 mode.survival.description = 기본 모드. 제한된 자원이 있으며, 단계가 자동으로 시작합니다.\n[gray]플레이하려면 맵에 적의 스폰지점이 필요합니다. mode.sandbox.name = 샌드박스 -mode.sandbox.description = 무한한 자원이 있으며, 단계 타이머가 없습니다. +mode.sandbox.description = 무한한 자원이 있으며, 시간 제한이 없습니다. mode.editor.name = 편집기 mode.pvp.name = PvP mode.pvp.description = 다른 플레이어와 현장에서 싸우십시오.\n[gray]플레이하려면 맵에 다른 색상의 코어가 2개 이상 있어야 합니다. @@ -931,9 +945,10 @@ mode.custom = 사용자 정의 규칙 rules.infiniteresources = 무한 자원 rules.reactorexplosions = 원자로 폭발 허용 +rules.coreincinerates = 코어 방화 비허용 rules.schematic = 설계도 허용 rules.wavetimer = 시간 제한이 있는 단계 -rules.waves = 일반 단계 +rules.waves = 단계 rules.attack = 공격 모드 rules.buildai = AI 건설 rules.enemyCheat = 무한 AI (빨간팀) 자원 @@ -942,27 +957,30 @@ rules.blockdamagemultiplier = 블록 공격력 배수 rules.unitbuildspeedmultiplier = 유닛 생산 속도 배수 rules.unithealthmultiplier = 유닛 체력 배수 rules.unitdamagemultiplier = 유닛 공격력 배수 +rules.unitcapvariable = 코어 유닛 제한 추가 +rules.unitcap = 기본 유닛 제한 rules.enemycorebuildradius = 적 코어 건설 금지구역 범위:[lightgray] (타일) rules.wavespacing = 단계 간격:[lightgray] (초) -rules.buildcostmultiplier = 건설 자원소모 배수 +rules.buildcostmultiplier = 건설 비용 배수 rules.buildspeedmultiplier = 건설 속도 배수 -rules.deconstructrefundmultiplier = 해체 환불 배수 +rules.deconstructrefundmultiplier = 철거 환불 배수 rules.waitForWaveToEnd = 한 단계가 끝날때까지 대기 rules.dropzoneradius = 스폰 구역 범위: [lightgray] (타일) -rules.unitammo = 탄약 필요 +rules.unitammo = 유닛 탄약 필요 rules.title.waves = 단계 rules.title.resourcesbuilding = 자원 & 건축 rules.title.enemy = 적 rules.title.unit = 유닛 rules.title.experimental = 실험적인 기능 rules.title.environment = 환경 -rules.lighting = 조명 -rules.enemyLights = 상대에게 조명 -rules.fire = 방화 +rules.lighting = 조명 표시 +rules.enemyLights = 상대에게 조명 표시 +rules.fire = 방화 허용 rules.explosions = 블록/유닛 폭발 데미지 -rules.ambientlight = 자연 조명 -rules.weather = 날씨 +rules.ambientlight = 자연 조명 표시 +rules.weather = 날씨 추가 rules.weather.frequency = 빈도: +rules.weather.always = 항상 rules.weather.duration = 지속 시간: content.item.name = 자원 @@ -1029,8 +1047,8 @@ unit.corvus.name = 코르버스 block.resupply-point.name = 보급 지점 block.parallax.name = 패럴랙스 block.cliff.name = 언덕 -block.sand-boulder.name = 사암 -block.basalt-boulder.name = 현무암 +block.sand-boulder.name = 사암 바위 +block.basalt-boulder.name = 현무암 바위 block.grass.name = 잔디 block.slag.name = 용암 block.space.name = 우주 @@ -1149,7 +1167,7 @@ block.coal-centrifuge.name = 석탄 정제기 block.power-node.name = 전력 노드 block.power-node-large.name = 대형 전력 노드 block.surge-tower.name = 설금 타워 -block.diode.name = 전력 비교기 +block.diode.name = 다이오드 block.battery.name = 배터리 block.battery-large.name = 대형 배터리 block.combustion-generator.name = 화력 발전기 @@ -1231,9 +1249,9 @@ block.disassembler.name = 광재 분해기 block.silicon-crucible.name = 실리콘 도가니 block.overdrive-dome.name = 대형 과부하 프로젝터 #experimental, may be removed / 이 아래의 블록들은 테스트용 임시 블록들입니다. -block.block-forge.name = [테스트] 공장 블록 -block.block-loader.name = [테스트] 로더 블록 -block.block-unloader.name = [테스트] 언로더 블록 +block.block-forge.name = 블록 제작대 +block.block-loader.name = 블록 로더 +block.block-unloader.name = 블록 언로더 block.interplanetary-accelerator.name = 성간 코어 가속기 block.switch.name = 스위치 @@ -1255,48 +1273,48 @@ team.purple.name = 보라색 팀 hint.skip = 힌트 넘기기 hint.desktopMove = [accent][[WASD][] 키를 이용해 자신의 유닛을 조종하세요. -hint.zoom = [accent]마우스 스크롤[]를 사용해 확대 또는 축소가 가능합니다. -hint.mine = \uf8c4 주변의 구리광석을 수동으로 채굴하려면 광석을 [accent]누르십시오[]. (추가설명)마우스가 있을 경우 마우스 오른쪽 클릭을 하면 채굴 중단이 가능합니다. -hint.desktopShoot = [accent][[마우스 왼클릭][]으로 발사할수 있습니다. -hint.depositItems = 아이템을 코어로 옮기려면, 당신의 기체의 아이템을 코어로 끌어놓으세요. -hint.respawn = 당신의 기체를 떠나려면 [accent][[V][]를 누르십시오. -hint.respawn.mobile = 당신은 유닛 혹은 포탑을 조종할 수 있습니다. 당신의 기체를 떠나려면 [accent]왼쪽 위에 있는 아바타를 누르십시오.[] -hint.desktopPause = 게임을 일시정지/재시작 하기 위해 [accent][[Space][]를 누르십시오. +hint.zoom = [accent]마우스 스크롤[]을 사용해 확대 또는 축소가 가능합니다. +hint.mine =\uf8c4 주변의 구리 광석을 수동으로 채굴하려면 광석을 [accent]누르십시오[]. (추가 설명) 마우스가 있으면 마우스 오른쪽 클릭을 하면 채굴 중단이 가능합니다. +hint.desktopShoot = [accent][[마우스 좌클릭][]으로 발사할 수 있습니다. +hint.depositItems = 자원을 코어로 옮기려면, 기체의 자원을 코어로 끌어놓으세요. +hint.respawn = 기체를 떠나려면 [accent][[V][]를 누르십시오. +hint.respawn.mobile = 유닛 혹은 포탑을 조종할 수 있습니다. 기체를 떠나려면 [accent]왼쪽 위에 있는 아바타를 누르십시오.[] +hint.desktopPause = 게임을 일시 정지/재시작하기 위해 [accent][[Space][]를 누르십시오. hint.placeDrill = 드릴을 설치하려면 오른쪽 아래의 \ue85e [accent]드릴[]을 선택하고, \uf870 [accent]드릴[]을 선택해서 구리 광석 위를 누르십시오. -hint.placeDrill.mobile = 오른쪽 아래 메뉴의 \ue85e [accent]드릴[]을 선택하고, \uf870 [accent]드릴[] 를 선택해서 구리 광석 위를 누르십시오.\n\n설치를 완료하려면 오른쪽 아래의 \ue800 [accent]완료 버튼[]을 누르십시오. -hint.placeConveyor = 컨베이어는 아이템을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n클릭하거나 드래그로 다수의 컨베이어를 설치할 수 있습니다.\n클릭하고 놓지 않은채로 마우스 [accent]휠을 돌리면 돌아갑니다. -hint.placeConveyor.mobile = 컨베이어는 아이템을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n여러개의 컨베이어를 놓으려면 손가락으로 누른채로 끌어서 설치 범위를 지정하십시오. -hint.placeTurret = 적에게서 당신의 기지를 막아내려면 \uf861 [accent]포탑[]를 설치하십시오.\n\n포탑 탄약 필요 - 지금은 \uf838 구리가 필요합니다.\n컨베이어를 사용해 드릴에 구리를 공급하십시오. -hint.breaking = 블록을 부수려면 [accent]오른클릭[]이나 드래그를 하십시오. -hint.breaking.mobile = 블럭을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화 하십시오.\n\n손가락으로 누른채로 끌어서 해체 범위를 지정하십시오. +hint.placeDrill.mobile = 오른쪽 아래 메뉴의 \ue85e [accent] 드릴[]을 선택하고, \uf870 [accent]드릴[]을 선택해서 구리 광석 위를 누르십시오.\n\n설치를 완료하려면 오른쪽 아래의 \ue800 [accent]완료 버튼[]을 누르십시오. +hint.placeConveyor = 컨베이어는 자원을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n클릭하거나 드래그로 다수의 컨베이어를 설치할 수 있습니다.\n클릭하고 놓지 않은 채로 마우스 [accent]휠을 돌리면 돌아갑니다. +hint.placeConveyor.mobile = 컨베이어는 자원을 드릴에서 다른 블록으로 이동시켜줍니다. \ue814 [accent]분배[] 카테고리에서 \uf896 [accent]컨베이어[]를 선택하십시오.\n\n여러 개의 컨베이어를 놓으려면 손가락으로 누른 채로 끌어서 설치 범위를 지정하십시오. +hint.placeTurret = 적에게서 기지를 막아내려면 \uf861 [accent]포탑[]를 설치하십시오.\n\n포탑 탄약 필요 - 지금은 \uf838 구리가 필요합니다.\n컨베이어를 사용해 드릴에 구리를 공급하십시오. +hint.breaking = 블록을 부수려면 [accent]우클릭[]이나 드래그를 하십시오. +hint.breaking.mobile = 블록을 부수려면 오른쪽 아래의 \ue817 [accent]망치[]를 눌러 해체 모드를 활성화하십시오.\n\n손가락으로 누른 채로 끌어서 해체 범위를 지정하십시오. hint.research = 새 기술을 연구하려면 \ue875 [accent]연구[]버튼을 누르십시오. hint.research.mobile = 새 기술을 연구하려면 \ue88c [accent]메뉴[] 아래의 \ue875 [accent]연구[]버튼을 누르십시오. -hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른채로 [accent]클릭[] 하십시오. -hint.unitControl.mobile = 아군 유닛과 포탑을 조종하려면 해당 개체를 [accent]빠르게 두번 누르십시오[]. -hint.launch = 충분한 자원을 모았으면, 오른쪽 아래의 \ue827 [accent]Map[]에서 주변 지역을 선택해서 [accent]Launch[]할 수 있습니다. +hint.unitControl = 아군 유닛과 포탑을 조종하려면 [accent][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오. +hint.unitControl.mobile = 아군 유닛과 포탑을 조종하려면 해당 개체를 [accent]빠르게 두 번 누르십시오[]. +hint.launch = 충분한 자원을 모았으면, 오른쪽 아래의 \ue827 [accent]Map[]에서 주변 지역을 선택해서 [accent]Launch[]할 수 있습니다. hint.launch.mobile = 충분한 자원을 모았으면, 오른쪽 아래의 \ue88c [accent]메뉴[]에 있는 \ue827 [accent]Map[]에서 주변 지역을 선택해서 [accent]Launch[]할 수 있습니다. -hint.schematicSelect = 블록을 복사하고 붙여넣으려면 [accent][[F][]를 누른채로 끌어서 구역을 지정하십시오. \n\n [accent][[마우스 휠][]을 누르면 한개의 블록만 복사할 수 있습니다. -hint.conveyorPathfind = [accent][[왼쪽 Ctrl][]을 누른채로 컨베이어를 대각선으로 끌면 길을 자동으로 만들어줍니다. +hint.schematicSelect = 블록을 복사하고 붙여넣으려면 [accent][[F][]를 누른 채로 끌어서 구역을 지정하십시오. \n\n [accent][[마우스 휠][]을 누르면 한 개의 블록만 복사할 수 있습니다. +hint.conveyorPathfind = [accent][[왼쪽 Ctrl][]을 누른 채로 컨베이어를 대각선으로 끌면 길을 자동으로 만들어줍니다. hint.conveyorPathfind.mobile = \ue844 [accent]diagonal mode[]를 활성화하고 컨베이어를 대각선으로 끌면 길을 자동으로 찾아줍니다. -hint.boost = 당신의 유닛과 같이 장애물을 넘어가려면 [accent][[L-Shift][]을 누르고 이동하십시오. \n\n 적은 수의 지상 유닛만 날 수 있습니다. +hint.boost = 유닛과 같이 장애물을 넘어가려면 [accent][[L-Shift][]을 누르고 이동하십시오. \n\n 적은 수의 지상 유닛만 날 수 있습니다. hint.command = 주변의 아군 유닛을 데리고 다니려면 비슷한 단계의 유닛 무리 주변에서 [accent][[G][]를 누르십시오. \n\n 지상 유닛을 데리고 다니기 위해서는 먼저 다른 지상 유닛을 조종하고 있어야 합니다. -hint.command.mobile = 아군 유닛을 데리고 다니려면 비슷한 단계의 유닛 무리 주변에서 [accent]빠르게 두번 누르십시오[]. -hint.payloadPickup = 작은 블럭이나 유닛을 집으려면 [accent][[[]를 누르십시오. -hint.payloadPickup.mobile = 작은 블럭이나 유닛을 집으려면 [accent]잠깐 누르십시오[]. +hint.command.mobile = 아군 유닛을 데리고 다니려면 비슷한 단계의 유닛 무리 주변에서 [accent]빠르게 두 번 누르십시오[]. +hint.payloadPickup = 작은 블록이나 유닛을 집으려면 [accent][[[]를 누르십시오. +hint.payloadPickup.mobile = 작은 블록이나 유닛을 집으려면 [accent]잠깐 누르십시오[]. hint.payloadDrop = 다시 내려놓으려면 [accent]][]를 누르십시오. hint.payloadDrop.mobile = 다시 내려놓으려면 빈 공간에서 [accent]화면을 잠깐 누르십시오[]. hint.waveFire = [accent]Wave[]포탑에 탄약으로 물을 넣으면 주변의 불을 자동으로 꺼줍니다. hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변 블록에 전력을 전달합니다.\n\n \uf87f 더 넓은 범위의 블록에 전력을 전달하려면 [accent]Power Nodes[]를 사용하십시오. -hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[]같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오. -hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를  [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오. -hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다. -hint.coreIncinerate = 코어가 아이템으로 가득 찬 후에 받는 모든 아이템들은 [accent]소각[]될 것입니다. -hint.coopCampaign = [accent]협동 캠페인[]을 할 떄, 현재 맵에서 생산된 아이템들은 [accent]당신의 캠페인 지역으로[]도 보내집니다.\n\n호스트가 새로 해금한 모든 것들도 가져갑니다. +hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[] 같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오. +hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오. +hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다. +hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다. +hint.coopCampaign = [accent]협동 캠페인[]을 할 때, 현재 맵에서 생산된 자원들은 [accent]캠페인 지역[]으로도 보내집니다.\n\n호스트가 새로 해금한 모든 것들도 가져갑니다. item.copper.description = 가장 기본적인 건설 재료. 모든 유형의 블록에서 광범위하게 사용됩니다. -item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포되어 있습니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다. +item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포합니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다. item.lead.description = 기본 초반 재료. 전자 및 액체 수송 블록에서 광범위하게 사용되는 자원입니다. -item.lead.details = 밀도가 높으며 반응성이 적은 자원. 배터리에 주로 사용됩니다. +item.lead.details = 밀도가 높으며 반응성이 적은 자원. 배터리에 주로 사용됩니다. item.metaglass.description = 초강력 방탄유리. 액체 분배 및 저장에 광범위하게 사용됩니다. item.graphite.description = 탄약 및 전기 부품에 사용되는 무기질 탄소. item.sand.description = 제련에서 합금 또는 플럭스에서 광범위하게 사용되는 일반적인 재료. @@ -1308,30 +1326,30 @@ item.scrap.description = 오래된 건물과 유닛의 남은 잔해. 미량의 item.scrap.details = 오래된 구조물과 유닛의 잔해. item.silicon.description = 매우 유용한 반도체. 복잡한 전자 장치나 유도탄에 사용됩니다. item.plastanium.description = 고급 기체 및 파편화 탄약에 사용되는 가볍고 연성이 있는 재료입니다. -item.phase-fabric.description = 최첨단 전자 제품과 자기수리 기술에 사용되는 거의 무중력에 가까운 물질입니다. +item.phase-fabric.description = 최첨단 전자 제품과 자가 수리 기술에 사용되는 거의 무중력에 가까운 물질입니다. item.surge-alloy.description = 독특한 전기적 특성을 가진 고급 합금. -item.spore-pod.description = 산업 목적을 위해 대기 농도에서 합성된 포자 버섯. 석유, 폭발물 및 연료로 전환하는 데 사용됩니다. +item.spore-pod.description = 산업 목적을 위해 대기 농도에서 합성된 포자 버섯. 석유, 폭발물과 연료로 전환하는 데 사용됩니다. item.spore-pod.details = 포자. 유기적인 생명체로 판단된다. 타 유기체에 치명적인 독가스를 내뿜는다. 침입성이 매우 강하다. 특정 조건에서 강력한 인화성을 보입니다. item.blast-compound.description = 폭탄과 폭발물에 사용되는 불안정한 화합물. 포자 버섯 및 기타 휘발성 물질로 합성할 수 있습니다. 연료로 사용하지 않는 것이 좋습니다. item.pyratite.description = 소이 무기에서 사용되는 가연성 매우 높은 물질. liquid.water.description = 기능성이 뛰어난 액체. 냉각기 및 폐기물 처리에 일반적으로 사용됩니다. liquid.slag.description = 다양한 종류의 금속들이 함께 섞여 녹아있습니다. 분리기를 이용해 다른 광물들로 분리하거나 탄약으로 사용해 적 부대를 향해 살포할 수 있습니다. -liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다. -liquid.cryofluid.description = 물과 티타늄으로 만든 비 부식성 액체. 열 용량이 매우 높으며 냉각수로 광범위하게 사용됩니다. +liquid.oil.description = 고급 재료 생산에 사용되는 액체. 석탄으로 전환하거나 무기로 뿌려서 불을 지를 수 있습니다. +liquid.cryofluid.description = 물과 티타늄으로 만든 비부식성 액체. 열용량이 매우 높으며 냉각수로 광범위하게 사용됩니다. -block.resupply-point.description = 주변 유닛들에게 구리 탄약을 보급합니다. 베터리 전력이 필요한 유닛들은 호환되지 않습니다. -block.armored-conveyor.description = 앞으로 아이템들을 운반합니다. 측면에서 아이템들을 받아들이지 않습니다. +block.resupply-point.description = 주변 유닛들에 구리 탄약을 보급합니다. 배터리 전력이 필요한 유닛들은 호환되지 않습니다. +block.armored-conveyor.description = 앞으로 자원들을 운반합니다. 측면에서 자원들을 받아들이지 않습니다. block.illuminator.description = 발광합니다. block.message.description = 아군 간의 소통을 위한 메시지를 저장합니다. block.graphite-press.description = 석탄을 흑연으로 압축합니다. block.multi-press.description = 석탄을 흑연으로 압축합니다. 냉각수로써 물이 필요합니다. block.silicon-smelter.description = 석탄과 모래로부터 실리콘을 정제합니다. -block.kiln.description = 모래와 납을 강화 유리로 재련합니다. +block.kiln.description = 모래와 납을 강화 유리로 제련합니다. block.plastanium-compressor.description = 석유와 티타늄으로 플라스터늄을 생산합니다. block.phase-weaver.description = 토륨과 모래로 메타를 합성합니다. block.alloy-smelter.description = 티타늄, 납, 실리콘, 구리를 결합하여 설금을 생산합니다. -block.cryofluid-mixer.description = 물과 미세 티타늄 분말을 냉각수로 혼합합니다. +block.cryofluid-mixer.description = 물과 미세 티타늄 분말을 냉각수로 혼합합니다. block.blast-mixer.description = 파이라타이트와 포자로 폭발물을 생산합니다. block.pyratite-mixer.description = 석탄, 납, 그리고 모래를 파이라타이트로 혼합합니다. block.melter.description = 고철을 광재로 녹입니다. @@ -1340,32 +1358,32 @@ block.spore-press.description = 포자를 석유로 압축합니다. block.pulverizer.description = 고철을 갈아 모래로 만듭니다. block.coal-centrifuge.description = 석유에서 석탄을 추출합니다. block.incinerator.description = 넘치는 자원이나 액체를 증발시킵니다. -block.power-void.description = 입력된 모든 전력을 무효화합니다. 샌드박스 전용. +block.power-void.description = 입력된 모든 전력을 무효로 합니다. 샌드박스 전용. block.power-source.description = 무한한 전력을 공급해주는 블록입니다. 샌드박스 전용. block.item-source.description = 자원을 무한대로 출력합니다. 샌드박스 전용. block.item-void.description = 모든 자원을 파괴합니다. 샌드박스 전용. block.liquid-source.description = 액체를 무한히 출력합니다. 샌드박스 전용. block.liquid-void.description = 액체를 제거합니다. 샌드박스 전용. -block.copper-wall.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는데 유용합니다. -block.copper-wall-large.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는데 유용합니다.\n여러 타일을 차지합니다. +block.copper-wall.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다. +block.copper-wall-large.description = 저렴한 수비 블록.\n초반 단계에서 코어와 포탑을 보호하는 데 유용합니다.\n여러 타일을 차지합니다. block.titanium-wall.description = 적당히 강한 방어 블록.\n적에게서 적절한 보호를 제공합니다. block.titanium-wall-large.description = 적당히 강한 방어 블록.\n적에게서 적절한 보호를 제공합니다.\n여러 타일을 차지합니다. block.plastanium-wall.description = 전격 공격을 흡수하고 전력 노드의 자동 연결을 차단하는 특수 유형의 벽. block.plastanium-wall-large.description = 전격 공격을 흡수하고 전력 노드의 자동 연결을 차단하는 특수 유형의 벽.\n여러 타일을 차지합니다. block.thorium-wall.description = 강력한 방어 블록.\n적으로부터 적절한 보호를 할 수 있습니다. block.thorium-wall-large.description = 강력한 방어 블록.\n적으로부터 적절한 보호를 할 수 있습니다.\n여러 타일을 차지합니다. -block.phase-wall.description = 특수 메타기반 반사 화합물로 코팅된 벽. 총알 대부분을 반사시킵니다. -block.phase-wall-large.description = 특수 메타기반 반사 화합물로 코팅된 벽. 총알 대부분을 반사시킵니다.\n여러 타일을 차지합니다. +block.phase-wall.description = 특수 메타기반 반사 화합물로 코팅된 벽. 총알 대부분을 반사합니다. +block.phase-wall-large.description = 특수 메타기반 반사 화합물로 코팅된 벽. 총알 대부분을 반사합니다.\n여러 타일을 차지합니다. block.surge-wall.description = 내구성이 매우 강한 방어 블록.\n총탄이 날아오면 충전량을 높여 무작위로 방출합니다. block.surge-wall-large.description = 내구성이 매우 강한 방어 블록.\n총탄이 날아오면 충전량을 높여 무작위로 방출합니다.\n여러 타일을 차지합니다. -block.door.description = 작은 문. 탭하여 열거나 닫을 수 있습니다. -block.door-large.description = 큰 문. 탭하여 열거나 닫을 수 있습니다.\n여러 타일을 차지합니다. +block.door.description = 작은 문. 탭 하여 열거나 닫을 수 있습니다. +block.door-large.description = 큰 문. 탭 하여 열거나 닫을 수 있습니다.\n여러 타일을 차지합니다. block.mender.description = 주변의 블록을 주기적으로 수리합니다. 각 단계 사이의 방어를 유지하게 합니다.\n선택적으로 실리콘을 사용하여 범위와 효율성을 향상합니다. block.mend-projector.description = 소형 수리 프로젝터의 강화 버전. 주변의 블록을 수리합니다.\n선택적으로 메타를 사용하여 범위와 효율성을 향상합니다. block.overdrive-projector.description = 주변 건물의 속도를 높입니다.\n선택적으로 메타를 사용하여 범위와 효율성을 높입니다. block.force-projector.description = 건물과 내부의 유닛을 공격으로부터 보호하며, 그 주위에 육각형 역장을 형성합니다.\n갑자기 많은 손상이 피해를 받으면 과열되며, 선택적으로 냉각수를 사용하여 과열을 방지할 수 있고, 메타는 역장의 크기를 늘리는 데 사용할 수 있습니다. block.shock-mine.description = 지뢰를 밟고 있는 적에게 피해를 줍니다. 적에게는 거의 보이지 않습니다. -block.conveyor.description = 기본 자원 수송 레일. 자원을 배치된 방향을 따라 이동시켜 자동으로 건물에 넣어줍니다. 회전식. +block.conveyor.description = 기본 자원 수송 레일. 자원을 배치된 방향을 따라 이동 시켜 자동으로 건물에 넣어줍니다. 회전식. block.titanium-conveyor.description = 고급 자원 수송 레일. 기본 컨베이어보다 자원을 더 빨리 이동시킵니다. block.plastanium-conveyor.description = 자원을 일괄적으로 운송시킵니다. 컨베이에 뒤에서 자원을 받고 앞쪽에 세 방향으로 내보냅니다. block.junction.description = 2개의 컨베이어 벨트를 교차시키는 다리 역할을 합니다. 서로 다른 재료를 다른 장소로 운반하는 두 개의 다른 컨베이어의 상황에서 유용합니다. @@ -1379,24 +1397,24 @@ block.distributor.description = 고급 분배기. 자원을 최대 7개의 다 block.overflow-gate.description = 전면 경로가 차단된 경우에만 왼쪽과 오른쪽으로 출력됩니다. block.underflow-gate.description = 오버플로 게이트의 반대. 왼쪽 및 오른쪽 경로가 차단되면 전면으로 출력됩니다. block.mass-driver.description = 최고의 자원 운송 블록. 여러 자원을 모아서 장거리에 걸쳐 다른 매스 드라이버에게 발사합니다. 작동하려면 전원이 필요합니다. -block.mechanical-pump.description = 느린 속도로 액체를 퍼 올리지만, 전력를 사용하지 않는 펌프입니다. +block.mechanical-pump.description = 느린 속도로 액체를 퍼 올리지만, 전력을 사용하지 않는 펌프입니다. block.rotary-pump.description = 고급 펌프. 더 많은 액체를 퍼 올리지만, 전력이 필요합니다. block.thermal-pump.description = 가장 강력한 펌프. block.conduit.description = 기본 액체 운송 블록. 액체를 앞으로 이동시킵니다. 펌프 및 기타 파이프와 함께 사용됩니다. block.pulse-conduit.description = 고급 액체 운송 블록. 액체를 더 빠르게 운반하고 표준 파이프보다 더 많이 저장합니다. block.plated-conduit.description = 펄스 파이프와 같은 속도로 이동하지만 더 높은 방어력을 가지고 있습니다. 측면에서 액체들을 받아들이지 않습니다.\n액체가 누설하지 않습니다. -block.liquid-router.description = 한 방향에서 액체를 받아 최대 3개의 다른 방향으로 동일하게 출력합니다. 일정량의 액체를 저장할 수도 있으며 한 소스에서 여러 대상으로 액체를 분할하는 데 유용합니다. +block.liquid-router.description = 한 방향에서 액체를 받아 최대 3개의 다른 방향으로 같이 출력합니다. 일정량의 액체를 저장할 수도 있으며 한 소스에서 여러 대상으로 액체를 나누는 데 유용합니다. block.liquid-tank.description = 대량의 액체를 저장합니다. 재료가 일정하지 않은 상황에서 버퍼를 생성하거나 중요한 블록을 냉각하기 위한 보호 장치로 사용하세요. block.liquid-junction.description = 두 개의 교차 파이프를 위한 다리 역할을 합니다. 다른 액체를 다른 위치로 운반하는 두 개의 다른 파이프가 있는 상황에서 유용합니다. block.bridge-conduit.description = 고급 액체 운송 블록. 지형이나 건물을 넘어 최대 3개 타일 위로 액체를 운반할 수 있습니다. -block.phase-conduit.description = 고급 액체 운송 블록. 전력을 사용하여 액체를 여러 타일을 건너뛰어 연결된 메타 파이프로 순간 이동시킵니다. +block.phase-conduit.description = 고급 액체 운송 블록. 전력을 사용하여 액체를 여러 타일을 건너뛰어 연결된 메타 파이프로 순간 이동시킵니다. block.power-node.description = 연결된 노드에 전력을 전송합니다. 노드는 인접한 블록에서 전력을 공급받거나 전력을 공급합니다. block.power-node-large.description = 더 넓은 범위의 고급 전력 노드. block.surge-tower.description = 사용 가능한 연결 수가 적은 장거리 전력 노드. block.diode.description = 배터리 전력은 이 블록을 통해 한 방향으로만 흐를 수 있지만, 출력 방향 배터리의 전력이 더 적은 경우에만 가능합니다. -block.battery.description = 전기가 넘쳐날 때 전력을 저장할 수 있습니다. 전력에 적자가 발생할 때 전력을 출력합니다. +block.battery.description = 전력이 넘쳐날 때 저장할 수 있습니다. 전력에 적자가 발생할 때 전력을 출력합니다. block.battery-large.description = 일반 배터리보다 훨씬 더 많은 전력을 저장합니다. -block.combustion-generator.description = 석탄과 같은 가연성 물질을 연소시켜 전력을 생산합니다. +block.combustion-generator.description = 석탄과 같은 가연성 물질을 연소 시켜 전력을 생산합니다. block.thermal-generator.description = 열이 있는 곳에 설치하면 전력이 생성됩니다. block.steam-generator.description = 고급 연소 발전기. 더 효율적이지만 증기를 생성하기 위해 물이 필요합니다. block.differential-generator.description = 많은 양의 전력을 생성합니다. 냉각수와 불타는 파이라타이트의 온도 차이를 이용합니다. @@ -1404,10 +1422,10 @@ block.rtg-generator.description = 간단하고 안정적인 발전기. 붕괴하 block.solar-panel.description = 태양으로부터 소량의 전력을 생성합니다. block.solar-panel-large.description = 표준 태양 전지판보다 훨씬 더 효율적인 버전. block.thorium-reactor.description = 토륨으로부터 상당한 양의 전력을 생산합니다. 지속적인 냉각이 필요하며, 충분한 양의 냉각수가 공급되지 않으면 크게 폭발합니다. 전력 출력은 토륨의 양에 따라 달라집니다. -block.impact-reactor.description = 최고 효율로 대량의 전력을 생산할 수 있는 고급 발전기. 프로세스를 시작하려면 상당한 전력 공급이 필요합니다. +block.impact-reactor.description = 최고 효율로 대량의 전력을 생산할 수 있는 고급 발전기. 가동을 시작하려면 상당한 전력 공급이 필요합니다. block.mechanical-drill.description = 가격이 싼 드릴. 적절한 타일에 설치하면 자원을 천천히 느린 속도로 출력합니다. 기본 자원만 채굴할 수 있습니다. block.pneumatic-drill.description = 티타늄을 캘 수 있는 향상된 드릴. 기계식 드릴보다 더 빠른 속도로 채굴합니다. -block.laser-drill.description = 레이저 기술을 통해 더욱 빠르게 채광할 수 있지만, 전력이 필요합니다. 토륨 채굴 가능. +block.laser-drill.description = 레이저 기술을 통해 더욱더 빠르게 채광할 수 있지만, 전력이 필요합니다. 토륨 채굴 가능. block.blast-drill.description = 최상위 드릴. 많은 양의 전력이 필요합니다. block.water-extractor.description = 지하수를 추출합니다. 물을 구하기 어려운 곳에서 사용합니다. block.cultivator.description = 대기 중의 작은 농도의 포자를 산업용 포자로 배양합니다. @@ -1421,33 +1439,33 @@ block.core-nucleus.description = 기지의 핵심입니다. 방어력이 매우 block.core-nucleus.details = 세 번째, 궁극의 버전. block.vault.description = 각 유형의 많은 양의 자원을 저장합니다. 언로더 블록을 사용하여 창고에서 자원을 빼낼 수 있습니다. block.container.description = 각 유형의 자원을 소량 저장합니다. 언로더 블록을 사용하여 컨테이너에서 자원을 빼낼 수 있습니다. -block.unloader.description = 근처의 비 수송 블록에서 자원을 빼냅니다. 눌러서 빼낼 자원을 변경할 수 있십니다. +block.unloader.description = 근처의 비 수송 블록에서 자원을 빼냅니다. 눌러서 빼낼 자원을 변경할 수 있습니다. block.launch-pad.description = 코어 출격 없이도 자원을 묶어 출격시킬 수 있습니다. block.duo.description = 적에게 탄환을 교대하며 발사합니다. block.scatter.description = 적군에게 납, 고철, 또는 강화 유리 조각 덩어리를 발사합니다. block.scorch.description = 주변의 모든 지상 적을 불태웁니다. 근거리에서 매우 효과적입니다. block.hail.description = 장거리에 걸쳐 지상 적에게 작은 포탄을 발사합니다. block.wave.description = 적에게 액체 줄기를 발사합니다. 물이 공급되면 자동으로 화재를 진압합니다. -block.lancer.description = 지상 목표물에게 강력한 에너지 빔을 충전하여 발사합니다. -block.arc.description = 지상 목표물에게 전격 아크를 발사합니다. +block.lancer.description = 지상 목표물에 강력한 에너지 빔을 충전하여 발사합니다. +block.arc.description = 지상 목표물에 전격 아크를 발사합니다. block.swarmer.description = 적에게 유도탄을 발사합니다. block.salvo.description = 적에게 총알을 빠르게 일제히 발사합니다. block.fuse.description = 주변 적에게 3개의 단거리 관통 레이저를 발사합니다. block.ripple.description = 장거리에 걸쳐 지상 적에게 포탄 무리를 발사합니다. block.cyclone.description = 근처 적에게 폭발 파편 덩어리를 발사합니다. -block.spectre.description = 공중 및 지상 목표물에게 큰 관통 철갑탄을 발사합니다. +block.spectre.description = 공중 및 지상 목표물에 큰 관통 철갑탄을 발사합니다. block.meltdown.description = 주변 적에게 지속적인 레이저 빔을 충전하여 발사합니다. 냉각 액체가 있어야 작동합니다. block.foreshadow.description = 장거리에 걸친 거대한 단일 목표 저격탄을 발사합니다. -block.repair-point.description = 인근에 가장 가까운 유닛을 지속적으로 치료합니다. -block.segment.description = 날아오는 발사체를 요격합니다. 큰 발사체에겐 조준되지 않습니다. +block.repair-point.description = 인근에 가장 가까운 유닛을 지속해서 치료합니다. +block.segment.description = 날아오는 발사체를 요격합니다. 큰 발사체엔 조준하지 않습니다. block.parallax.description = 공중 목표물을 끌어오는 견인 광선을 발사하며, 견인 과정에서 데미지를 줍니다. block.tsunami.description = 적에게 강력한 액체 줄기를 발사합니다. 물이 공급되면 자동으로 주변의 화재를 진압합니다. -block.silicon-crucible.description = 추가적으로 파이라타이트를 사용하여 더 높은 온도에서 석탄과 모래를 제련합니다. 뜨거운 곳에서 더 효율적입니다. +block.silicon-crucible.description = 추가로 파이라타이트를 사용하여 더 높은 온도에서 석탄과 모래를 제련합니다. 뜨거운 곳에서 더 효율적입니다. block.disassembler.description = 광재를 낮은 확률로 미량의 희귀한 광물들로 분리합니다. 토륨을 생산할 수 있습니다. block.overdrive-dome.description = 인근 블록들을 과부하시킵니다. 작동하기 위해 실리콘과 메타가 필요합니다. block.payload-conveyor.description = 유닛이나 공장같이 큰 화물들을 운반합니다. block.payload-router.description = 3가지 방향으로 번갈아서 화물들을 운반합니다. -block.command-center.description = 4개의 명령어들로 유닛 행동을 제어합니다. +block.command-center.description = 4개의 명령어로 유닛 행동을 제어합니다. block.ground-factory.description = 지상 유닛들을 생산합니다. 생산된 유닛들은 바로 사용될 수 있고, 또는 강화를 위해 재구성기에 들어가질 수 있습니다. block.air-factory.description = 공중 유닛들을 생산합니다. 생산된 유닛들은 바로 사용될 수 있고, 또는 강화를 위해 재구성기에 들어가질 수 있습니다. block.naval-factory.description = 해상 유닛들을 생산합니다. 생산된 유닛들은 바로 사용될 수 있고, 또는 강화를 위해 재구성기에 들어가질 수 있습니다. @@ -1498,3 +1516,127 @@ unit.omura.description = 적에게 장거리 관통 레일건을 발사합니다 unit.alpha.description = 적으로부터 코어: 조각을 방어합니다. 구조물을 짓습니다. unit.beta.description = 적으로부터 코어: 기반을 방어합니다. 구조물을 짓습니다. unit.gamma.description = 적으로부터 코어: 핵심을 방어합니다. 구조물을 짓습니다. + +lst.read = 연결된 메모리 셀에서 숫자 읽기 +lst.write = 연결된 메모리 셀에 숫자 쓰기 +lst.print = 프린트 버퍼에 텍스트 추가하기\n[accent]Print Flush[]가 사용되기 전까진 아무것도 보여주지 않습니다. +lst.draw = 드로잉 버퍼에 실행문 추가하기\n[accent]Draw Flush[]가 사용되기 전까진 아무것도 보여주지 않습니다. +lst.drawflush = 대기중인 [accent]Draw[]실행문을 디스플레이에 출력하기 +lst.printflush = 대기중인 [accent]Print[]실행문을 메시지 블록에 출력하기 +lst.getlink = 순서별로 프로세서 연결 가져오기. 0부터 시작 +lst.control = 건물 조종하기 +lst.radar = 건물 주변의 유닛 검색하기 +lst.sensor = 건물 또는 유닛의 정보 얻기 +lst.set = 변수 선언/할당하기 +lst.operation = 1~2개의 변수로 연산하기 +lst.end = 실행줄의 가장 위로 점프하기 +lst.jump = 조건부로 다른 실행문으로 점프하기 +lst.unitbind = type 옆에 있는 유닛을 지정하고, [accent]@unit[]에 저장하기 +lst.unitcontrol = 현재 지정된 유닛을 조종하기 +lst.unitradar = 현재 지정된 유닛 주변의 유닛 검색하기 +lst.unitlocate = 특정 유형의 위치/건물을 지도상에서 찾기\n지정된 유닛이 필요합니다. + +lenum.type = 건물/유닛의 타입\n예로 분배기는 [accent]@router[]를 반환할 것입니다.\n문자열이 아니라. +lenum.shoot = 특정 위치에 발사 +lenum.shootp = 목표물 속도를 예측하여 발사 +lenum.configure = 필터의 아이템같은 건물의 설정 +lenum.enabled = 블록의 활성 여부 +lenum.color = 조명 색 설정 + +lenum.always = 항상 참 +lenum.idiv = 정수 나누기 +lenum.div = 나누기\n0으로 나누면 [accent]null[]을 반환합니다. +lenum.mod = 나머지 +lenum.equal = 동치 비교. 형변환 가능\nNull이 아닌 객체가 숫자와 비교할려면 1이 되고, Null이면 0이 됩니다. +lenum.notequal = 동치 부정. 형변환 가능 +lenum.strictequal = 엄격한 동치 비교. 형변환 불가능\n[accent]null[]를 확인하는데 쓸 수 있습니다. +lenum.shl = 왼쪽으로 비트 이동 +lenum.shr = 오른쪽으로 비트 이동 +lenum.or = 비트연산자 OR +lenum.land = 논리연산자 AND +lenum.and = 비트연산자 AND +lenum.not = 비트연산자 NOT +lenum.xor = 비트연산자 XOR + +lenum.min = 두 수의 최솟값 +lenum.max = 두 수의 최댓값 +lenum.angle = 벡터의 각(도) +lenum.len = 벡터의 길이 +lenum.sin = 사인(도) +lenum.cos = 코사인(도) +lenum.tan = 탄젠트(도) +#not a typo, look up 'range notation' +lenum.rand = 범위 내 난수[0 ~ 값) +lenum.log = 자연 로그(진수) +lenum.log10 = 상수 로그 +lenum.noise = 2D 심플렉스 노이즈 +lenum.abs = 절댓값 +lenum.sqrt = 제곱근 + +lenum.any = 유닛 +lenum.ally = 아군 유닛 +lenum.attacker = 무기를 가진 유닛 +lenum.enemy = 적 유닛 +lenum.boss = 수호자 유닛 +lenum.flying = 공중 유닛 +lenum.ground = 지상 유닛 +lenum.player = 플레이어에 의해 조종된 유닛 + +lenum.ore = 광석 매장지 +lenum.damaged = 손상된 아군 건물 +lenum.spawn = 적 스폰 지점\n코어 또는 지점일 수 있음. +lenum.building = 특정 건물 집단에 속한 건물 + +lenum.core = 코어 +lenum.storage = 창고같은 저장 건물 +lenum.generator = 전력을 생산하는 건물 +lenum.factory = 자원을 변환하는 건물 +lenum.repair = 수리 지점 +lenum.rally = 지휘소 +lenum.battery = 배터리 +lenum.resupply = 보급 지점.\n[accent]"유닛 탄약 필요"[]가 활성화되었을 때만 유의미합니다. +lenum.reactor = 핵융합로/토륨 원자로 +lenum.turret = 포탑ㅁ + +sensor.in = 감지할 건물/유닛 + +radar.from = 감지를 할 건물\n감지 범위는 건물의 감지 범위에 의해 제한됩니다. +radar.target = 유닛 감지 필터 +radar.and = 추가 필터 +radar.order = 정렬 순서. 0은 반전 +radar.sort = 결과를 정렬할 측정 수단 +radar.output = 찾은 유닛을 대입할 변수 + +unitradar.target = 유닛 감지 필터 +unitradar.and = 추가 필터 +unitradar.order = 정렬 순서. 0은 반전 +unitradar.sort = 결과를 정렬할 측정 수단 +unitradar.output = 찾은 유닛을 대입할 변수 + +control.of = 조종할 건물 +control.unit = 조준할 유닛/건물 +control.shoot = 발사 여부 + +unitlocate.enemy = 적 건물 포함 여부 +unitlocate.found = 대상 발견 여부 +unitlocate.building = 찾은 건물을 대입할 변수 +unitlocate.outx = X좌표 +unitlocate.outy = Y좌표 +unitlocate.group = 찾을 건물 집단 + +lenum.stop = 이동/채광/건설 중단 +lenum.move = 특정 위치로 이동 +lenum.approach = 특정 위치로 반지름만큼 접근 +lenum.pathfind = 적 스폰 지점으로 길찾기 +lenum.target = 특정 위치에 발사 +lenum.targetp = 목표물 속도를 예측하여 발사 +lenum.itemdrop = 아이템 투하 +lenum.itemtake = 건물에서 아이템 수송 +lenum.paydrop = 현재 화물 투하 +lenum.paytake = 현재 위치에서 화물 수송 +lenum.flag = 깃발 수 설정 +lenum.mine = 특정 위치에서 채광 +lenum.build = 구조물 건설 +lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다. +lenum.within = 좌표 주변 유닛 발견 여부 +lenum.boost = 이륙 시작/중단 diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index aa26f651db12..1e1e8b6bbdc7 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -11,7 +11,7 @@ link.trello.description = Oficjalna tablica Trello z planowanym funkcjami link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania link.google-play.description = Strona w sklepie Google Play link.f-droid.description = Wykaz Katalogu F-Droid -link.wiki.description = Oficjana Wiki Mindustry +link.wiki.description = Oficjalna Wiki Mindustry link.suggestions.description = Zaproponuj nowe funkcje link.bug.description = Znalazłeś błąd? Zgłoś go tutaj linkfail = Nie udało się otworzyć linku!\nURL został skopiowany. @@ -41,7 +41,6 @@ be.ignore = Zignoruj be.noupdates = Nie znaleziono aktualizacji. be.check = Sprawdź aktualizacje -mod.featured.title = Wyszukiwarka Modów mod.featured.dialog.title = Wyszukiwarka Modów mods.browser.selected = Wybrany Mod mods.browser.add = Zainstaluj Moda @@ -90,6 +89,7 @@ joingame = Dołącz Do Gry customgame = Własna Gra newgame = Nowa Gra none = +none.found = [lightgray]<żaden znaleziony> minimap = Minimapa position = Pozycja close = Zamknij @@ -110,7 +110,6 @@ committingchanges = Zatwierdzanie Zmian done = Gotowe feature.unsupported = Twoje urządzenie nie wspiera tej funkcji. - mods.alphainfo = Pamiętaj, że mody są wersji alpha, i[scarlet] mogą być pełne błędów[].\nZgłaszaj wszystkie znalezione problemy na Mindustry GitHub lub Discord. mods = Mody mods.none = [lightgray]Nie znaleziono modów! @@ -288,6 +287,7 @@ cancel = Anuluj openlink = Otwórz Link copylink = Kopiuj Link back = Wróć +max = Max crash.export = Eksportuj logi błędów. crash.none = Nie znaleziono logów błędów. crash.exported = Logi zostały przeniesione. @@ -362,7 +362,6 @@ editor.center = Center workshop = Warsztat waves.title = Fale waves.remove = Usuń -waves.never = waves.every = co waves.waves = fal(e) waves.perspawn = co pojawienie @@ -706,6 +705,7 @@ stat.commandlimit = Limit Jednostek Zarządanych stat.abilities = Umiejętności stat.canboost = Może przyspieszyć stat.flying = Latanie +stat.ammouse = Zużycie Amunicji ability.forcefield = Pole Mocy ability.repairfield = Pole Naprawy @@ -720,6 +720,7 @@ bar.corereq = Wymagany Rdzeń bar.drillspeed = Prędkość wiertła: {0}/s bar.pumpspeed = Prędkość pompy: {0}/s bar.efficiency = Efektywność: {0}% +bar.boost = Przyspieszenie: {0}% bar.powerbalance = Moc: {0} bar.powerstored = Zmagazynowano: {0}/{1} bar.poweramount = Moc: {0} @@ -728,7 +729,6 @@ bar.powerlines = Połączenia: {0}/{1} bar.items = Przedmiotów: {0} bar.capacity = Pojemność: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = Płyn bar.heat = Ciepło bar.power = Prąd @@ -745,6 +745,7 @@ bullet.sapping = [stat]wyczerpujący bullet.homing = [stat]naprowadzający bullet.shock = [stat]piorunowy bullet.frag = [stat]fragmentacyjny +bullet.buildingdamage = [stat]{0}%[lightgray] obrażeń budynkom bullet.knockback = [stat]{0}[lightgray] odrzut bullet.pierce = [stat]{0}[lightgray]x przebicia bullet.infinitepierce = [stat]przebijający @@ -773,6 +774,7 @@ unit.items = przedmioty unit.thousands = tys. unit.millions = mln unit.billions = b +unit.pershot = /szczał category.purpose = Opis category.general = Główne category.power = Prąd @@ -842,6 +844,7 @@ setting.bridgeopacity.name = Przezroczystość mostów setting.playerchat.name = Wyświetlaj czat w grze setting.showweather.name = Pokaż pogodę public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[accent]Każdy będzie mógł dołączyć do Twojej gry.\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej. +public.confirm.really = Jeśli chcesz grać z przyjaciółmi, użyj [green]Zaproś Przyjaciela[] zamiast [scarlet]Punliczny serwer[]!\nJesteś pewny że chcesz rozpocząć grę [scarlet]publiczą[]? public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi. uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[] uiscale.cancel = Anuluj i Wyjdź @@ -916,6 +919,7 @@ keybind.toggle_menus.name = Zmiana widoczności menu keybind.chat_history_prev.name = Przewiń wiadomości w górę keybind.chat_history_next.name = Przewiń wiadomości w dół keybind.chat_scroll.name = Przewijaj Wiadomości +keybind.chat_mode.name = Zmień tryb czatu keybind.drop_unit.name = Wyrzucanie przedmiot keybind.zoom_minimap.name = Powiększenie mapy mode.help.title = Opis trybów @@ -932,6 +936,7 @@ mode.custom = Własny Tryb rules.infiniteresources = Nieskończone Zasoby rules.reactorexplosions = Eksplozje Reaktorów +rules.coreincinerates = Rdzeń Spala Przepełnienie rules.schematic = Schematy Są Dozwolone rules.wavetimer = Zegar Fal rules.waves = Fale @@ -964,6 +969,7 @@ rules.explosions = Uszkodzenia Wybuchu Klocka/Jednostki rules.ambientlight = Otaczające Światło rules.weather = Pogoda rules.weather.frequency = Częstotliwość: +rules.weather.always = Zawsze rules.weather.duration = Czas trwania: content.item.name = Przedmioty @@ -1078,18 +1084,18 @@ block.craters.name = Kratery block.sand-water.name = Woda z Piaskiem block.darksand-water.name = Woda z Ciemnym Piaskiem block.char.name = Popiół -block.dacite.name = Dacite -block.dacite-wall.name = Dacite Wall -block.dacite-boulder.name = Dacite Boulder +block.dacite.name = Dacyt +block.dacite-wall.name = Dacytowa Ściana +block.dacite-boulder.name = Dacytowy Głaz block.ice-snow.name = Lodowy Śnieg -block.stone-wall.name = Stone Wall -block.ice-wall.name = Ice Wall -block.snow-wall.name = Snow Wall -block.dune-wall.name = Dune Wall +block.stone-wall.name = Kamienna Ściana +block.ice-wall.name = Lodowa Ściana +block.snow-wall.name = Śnieżna Ściana +block.dune-wall.name = Wydmowa Ściana block.pine.name = Sosna -block.dirt.name = Dirt -block.dirt-wall.name = Dirt Wall -block.mud.name = Mud +block.dirt.name = Ziemia +block.dirt-wall.name = Ziemna Ściana +block.mud.name = Błoto block.white-tree-dead.name = Białe Martwe Drzewo block.white-tree.name = Białe Drzewo block.spore-cluster.name = Skupisko Zarodników @@ -1105,7 +1111,7 @@ block.dark-panel-4.name = Ciemny Panel 4 block.dark-panel-5.name = Ciemny Panel 5 block.dark-panel-6.name = Ciemny Panel 6 block.dark-metal.name = Ciemny Metal -block.basalt.name = Basalt +block.basalt.name = Bazalt block.hotrock.name = Gorący Kamień block.magmarock.name = Skała magmowa block.copper-wall.name = Miedziana Ściana @@ -1271,10 +1277,10 @@ hint.placeTurret = Postaw \uf861 [accent]Działka[] by bronić się przed wrogam hint.breaking = Użyj [accent]Prawego przycisku myszy[] i przeciągnij by zniszczyć bloki. hint.breaking.mobile = Aktywuj \ue817 [accent]ikonę młota[] w dolnym prawym rogu by zniszczyć bloki.\n\nPrzytrymaj swój palec i przeciągij by wybrać wiele bloków do zniszczenia. hint.research = Klikij przycisk \ue875 [accent]Badań[] by odkrwyać nowe technologie. -hint.research.mobile = Użyj przycisku \ue875 [accent]Badań[] w \ue88c [accent]Menu[] by odkrwyać nowe technologie. -hint.unitControl = Przytrzymaj [accent][[Lewy CTRL][] i [accent]kliknij[] to control by kontrolować sojusznicze jednostki i działka. +hint.research.mobile = Użyj przycisku \ue875 [accent]Badań[] w \ue88c [accent]Menu[] by odkrywać nowe technologie. +hint.unitControl = Przytrzymaj [accent][[Lewy CTRL][] i [accent]kliknij[] by kontrolować sojusznicze jednostki i działka. hint.unitControl.mobile = [accent][Kliknij dwukrotnie[] by kontrolować sojusznicze jednostki i działka. -hint.launch = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] wybierając \ue827 [accent]Mape[] w dolnym prawym rogu. +hint.launch = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] wybierając \ue827 [accent]Mapę[] w dolnym prawym rogu. hint.launch.mobile = Gdy zebrałeś wystarczająco materiałów możesz [accent]Wystrzelić[] do pobliskich sektorów klikając w \ue827 [accent]Mape[] w \ue88c [accent]Menu[]. hint.schematicSelect = Przytrzymaj [accent][[F][] by kopiować i wkleić bloki.\n\n[accent][[Środkowy przycisk myszy][] kopiuje pojedyńczy blok. hint.conveyorPathfind = Przeciągij i przytrzymaj [accent][[Lewy CTRL][] w trakcie budowania przenośników by wygenerować ścieżkę. @@ -1284,15 +1290,15 @@ hint.command = Kliknij [accent][[G][] by ukształtować formacje z pobliskich je hint.command.mobile = [accent][[Podwójne kliknięcie][] kształtuje formacje z pobliskich jednostek. hint.payloadPickup = Kliknij [accent][[[] by podnieść małe bloki lub jednostki. hint.payloadPickup.mobile = [accent]Kliknij i przytrzymaj[] mały blok by go podnieść. -hint.payloadDrop = Kliknij [accent]][] by opuścić podniesoiny towar. -hint.payloadDrop.mobile = [accent]Kliknij i przytrzymaj[] w puste miejsce by opuścić podniesoiny towar. +hint.payloadDrop = Kliknij [accent]][] by opuścić podniesiony towar. +hint.payloadDrop.mobile = [accent]Kliknij i przytrzymaj[] w puste miejsce by opuścić podniesiony towar. hint.waveFire = [accent]Strumień[] wypełniony wodą będzie gasić pobiskie pożary. -hint.generator = \uf879 [accent]Generatory Spalinowe[] spalają węgiel i przekuzują moc do pobliskich bloków.\n\nMożesz powiększyć odległość transmitowanej mocy używająć \uf87f [accent]Węzeły Prądu[]. +hint.generator = \uf879 [accent]Generatory Spalinowe[] spalają węgiel i przekazują moc do pobliskich bloków.\n\nMożesz powiększyć odległość transmitowanej mocy używająć \uf87f [accent]Węzły Prądu[]. hint.guardian = Jednostki [accent]Strażnicze[] są uzbrojone. Słaba amunicja - taka jak [accent]Miedź[] oraz [accent]Ołów[] [scarlet]nie jest efektywna[].\n\nUżyj lepszych działek takich jak \uf835 [accent]Naładowane Grafitem[] \uf861Duo/\uf859Salwa by pozbyć się strażników. hint.coreUpgrade = Rdzenie mogą być ulepszone poprzez [accent]płożenie na nich rdzeń wyższego poziomu[].\n\nPołóż  rdzeń [accent]Fundacji[] na  rdzeń:[accent]Odłamek[] core. Żadna przeszkoda ani blok nie może stać na miejscu rdzenia. hint.presetLaunch = Szare [accent]sektory[], takie jak [accent]Zamrożony Las[], to sektory do których możesz dotrzeć z każdego miejsca. Nie wymagają podbicia pobliskiego terenu.\n\n[accent]Ponumerowane sektory[], takie jak ten, [accent]są dodatkowe[]. hint.coreIncinerate = Jak rdzeń zostanie w pełni wypełniony danym przedmiotem, reszta przedmiotów tego typu zostanie [accent]spalona[]. -hint.coopCampaign = Gdy grasz [accent]kooperacyjną kampanie[], przedmioty które są produkowane na mapie trafią także [accent]dotwoich lokalnych sektorów[].\n\nWszelkie nowe badania przeprowadzone przez hosta są również przenoszone. +hint.coopCampaign = Gdy grasz [accent]kooperacyjną kampanię[], przedmioty które są produkowane na mapie trafią także [accent]do twoich lokalnych sektorów[].\n\nWszelkie nowe badania przeprowadzone przez hosta są również przenoszone. item.copper.description = Przydatny materiał budowlany. Szeroko używany w prawie każdej konstrukcji. item.copper.details = Miedź. Nienormalnie obfity metal na Serpulo. Strukturalnie słaba, chyba że zostanie wzmocniona. @@ -1351,8 +1357,8 @@ block.copper-wall.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia block.copper-wall-large.description = Tani blok obronny.\nPrzydatny do ochrony rdzenia i wieżyczek w pierwszych kilku falach.\nObejmuje wiele kratek. block.titanium-wall.description = Umiarkowanie silny blok obronny.\nZapewnia umiarkowaną ochronę przed wrogami. block.titanium-wall-large.description = Umiarkowanie silny blok obronny.\nZapewnia umiarkowaną ochronę przed wrogami.\nObejmuje wiele kratek. -block.plastanium-wall.description = Specjajny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów. -block.plastanium-wall-large.description = Specjajny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów.\nObejmuje wiele kratek. +block.plastanium-wall.description = Specjalny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów. +block.plastanium-wall-large.description = Specjalny typ ściany, który pochłania łuki elektryczne oraz blokuje automatyczne łączenie węzłów.\nObejmuje wiele kratek. block.thorium-wall.description = Silny blok obronny.\nDobra ochrona przed wrogami. block.thorium-wall-large.description = Silny blok obronny.\nDobra ochrona przed wrogami.\nObejmuje wiele kratek. block.phase-wall.description = Ściana pokryta specjalną mieszanką opartą o Włókna Fazowe, która odbija większość pocisków. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 0e597d21595a..82c7401fcd49 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -34,7 +34,7 @@ load.scripts = Scripts be.update = Uma nova versão beta está disponível: be.update.confirm = Baixar e reiniciar o jogo agora? be.updating = Atualizando... -be.ignore = Ignore +be.ignore = Ignorar be.noupdates = Nenhuma atualização encontrada. be.check = Cheque por atualizações @@ -50,7 +50,7 @@ schematic.browseworkshop = Navegar pela oficina schematic.copy = Copiar para a área de transferência schematic.copy.import = Importar da área de transferência schematic.shareworkshop = Compartilhar na Oficina -schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o Esquema +schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o esquema schematic.saved = Esquema salvo. schematic.delete.confirm = Esse esquema será apagado. Tem certeza? schematic.rename = Renomear esquema @@ -71,7 +71,7 @@ map.delete = Certeza que quer deletar o mapa "[accent]{0}[]"? level.highscore = Melhor\npontuação: [accent] {0} level.select = Seleção de fase level.mode = Modo de jogo: -coreattack = < O núcleo está sobre ataque! > +coreattack = < O núcleo está sob ataque! > nearpoint = [[ [scarlet]SAIA DO PONTO DE SPAWN IMEDIATAMENTE[] ]\nANIQUILAÇÃO IMINENTE database = Banco de dados savegame = Salvar jogo @@ -100,7 +100,7 @@ committingchanges = Enviando mudanças done = Feito feature.unsupported = Seu dispositivo não suporta essa função. -mods.alphainfo = Tenha em mente que os mods estão em alpha, e[scarlet] talvez eles contenham erros e instabilidades[].\nReporte quaisquer problemas no Discord ou GitHub do Mindustry. +mods.alphainfo = Lembre-se que o sistema de mods está em alpha, e[scarlet] que eles talvez contenham erros e instabilidades[].\nReporte quaisquer problemas no Discord ou GitHub do Mindustry. mods = Mods mods.none = [lightgray]Nenhum mod encontrado! mods.guide = Guia de mods @@ -133,7 +133,7 @@ mod.remove.confirm = Este mod será deletado. mod.author = [lightgray]Autor:[] {0} mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. Pode ocorrer uma corrupção no salvamento. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0} mod.preview.missing = Antes de publicar esse mod na oficina, você deve adicionar uma imagem de pré-visualização.\nColoque uma imagem com o nome[accent] preview.png[] na pasta do mod e tente novamente. -mod.folder.missing = Somente mods no formato de pasta serão publicados na oficina.\nPara converter qualquer Mod em uma pasta, Simplesmente descompacte seu arquivo numa pasta e delete a compactação antiga, então reinicie seu jogo ou recarregue os mods. +mod.folder.missing = Somente mods no formato de pasta serão publicados na oficina.\nPara converter qualquer Mod em uma pasta, simplesmente descompacte seu arquivo numa pasta e delete o arquivo ZIP antigo, então reinicie seu jogo ou recarregue os mods. mod.scripts.disable = Seu dispositivo não suporta mods com scripts. Você precisa desabilitar esses mods para conseguir jogar. about.button = Sobre @@ -168,11 +168,11 @@ server.kicked.nameInUse = Este nome já está sendo usado\nneste servidor. server.kicked.nameEmpty = Você deve ter pelo menos uma letra ou número no nome. server.kicked.idInUse = Você ja está neste servidor! Conectar com duas contas não é permitido. server.kicked.customClient = Este servidor não suporta versões customizadas. Baixe a versão original. -server.kicked.gameover = Fim de jogo! +server.kicked.gameover = Fim do jogo! server.kicked.serverRestarting = O servidor esta reiniciando. server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[] -host.info = O botão de [accent]Hospedar[] hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [lightgray]Wi-fi ou internet local[] pode ver este servidor na lista de servidores.\n\nSe você quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[lightgray]Nota: Se alguém esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall -join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[lightgray]Nota: Não há uma lista de servidores automáticos; Se você quer conectar ao IP de alguém, você precisa pedir o IP ao anfitrião. +host.info = O botão de [accent]Hospedar[] hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [lightgray]Wi-fi ou internet local[] pode ver este servidor na lista de servidores.\n\nSe você quiser poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é necessário.\n\n[lightgray]Nota: Se alguém está com problemas em conectar no seu servidor lan, tenha certeza que mindustry tem acesso a sua internet local nas configurações do seu firewall +join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[lightgray]Nota: Não há uma lista de servidores automáticos; Se você quiser se conectar ao IP de alguém, você precisa pedir o IP ao anfitrião. hostserver = Hospedar servidor invitefriends = Convidar amigos hostserver.mobile = Hospedar\nJogo @@ -272,7 +272,7 @@ data.import = Importar dados data.openfolder = Abrir pasta de dados data.exported = Dados exportados. data.invalid = Estes dados de jogo não são válidos. -data.import.confirm = Importar dados externos irá deletar[scarlet] todos[] os seus dados atuais.\n[accent]Isso não pode ser desfeito![]\n\nQuando sua data é importada, seu jogo ira sair imediatamente. +data.import.confirm = Importar dados externos irá deletar[scarlet] todos[] os seus dados atuais.\n[accent]Isso não pode ser desfeito![]\n\nQuando seus dados serão importados, seu jogo irá sair imediatamente. quit.confirm = Você tem certeza que quer sair? quit.confirm.tutorial = Você tem certeza que você sabe o que você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[] loading = [accent]Carregando... @@ -298,7 +298,7 @@ saveimage = Salvar\nimagem unknown = Desconhecido custom = Customizado builtin = Padrão -map.delete.confirm = Certeza que quer deletar este mapa? Isto não pode ser desfeito! +map.delete.confirm = Certeza que quer deletar este mapa? Isto não pode ser anulado! map.random = [accent]Mapa aleatório map.nospawn = Este mapa não possui nenhum núcleo para o jogador nascer! Adicione um núcleo[accent] amarelo[] para este mapa no editor. map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[scarlet] núcleos vermelhos[] no mapa no editor. @@ -324,7 +324,7 @@ editor.oregen.info = Geração de minério: editor.mapinfo = Informação do mapa editor.author = Autor: editor.description = Descrição: -editor.nodescription = Um mapa deve ter uma descrição de no mínimo 4 caracteres antes de ser publicado. +editor.nodescription = Um mapa deve ter uma descrição de ao mínimo 4 caracteres antes de ser publicado. editor.waves = Hordas: editor.rules = Regras: editor.generation = Geração: @@ -341,7 +341,7 @@ waves.waves = Horda(s) waves.perspawn = por spawn waves.shields = Escudo/Horda waves.to = para -waves.guardian = Guardian +waves.guardian = Guardião waves.preview = Pré-visualizar waves.edit = Editar... waves.copy = Copiar para área de transferência @@ -419,9 +419,9 @@ toolmode.drawteams.description = Muda o time do qual o bloco pertence. filters.empty = [lightgray]Sem filtro! Adicione um usando o botão abaixo. filter.distort = Distorcedor filter.noise = Geração aleatória -filter.enemyspawn = Enemy Spawn Select -filter.spawnpath = Path To Spawn -filter.corespawn = Core Select +filter.enemyspawn = Seleção de Spawn do Inimigo +filter.spawnpath = Caminho para o Spawn +filter.corespawn = Seleção de Núcleo filter.median = Medio filter.oremedian = Minério mediano filter.blend = Misturar @@ -475,18 +475,18 @@ locked = Trancado complete = [lightgray]Completo: requirement.wave = Alcançar a Horda {0} em {1} requirement.core = Destruir o núcleo inimigo em {0} -requirement.research = Research {0} +requirement.research = Pesquise {0} requirement.capture = Capture {0} bestwave = [lightgray]Melhor: {0} -launch.text = Launch -research.multiplayer = Only the host can research items. +launch.text = Lançar +research.multiplayer = Apenas o host pode pesquisar itens. uncover = Descobrir configure = Configurar carregamento -loadout = Loadout -resources = Resources +loadout = Carregamento +resources = Recursos bannedblocks = Blocos Banidos addall = Adicionar Todos -launch.destination = Destination: {0} +launch.destination = Destino: {0} configure.invalid = A quantidade deve ser um número entre 0 e {0}. zone.unlocked = [lightgray]{0} Desbloqueado. zone.requirement.complete = Horda {0} alcançada:\n{1} Requerimentos da zona alcançada. @@ -500,7 +500,7 @@ boss.health = Vida do Chefão connectfail = [crimson]Falha ao entrar no servidor: [accent]{0} error.unreachable = Servidor fora de alcance. error.invalidaddress = Endereço inválido. -error.timedout = Desconectado!\nTenha certeza que o anfitrião tenha feito redirecionamento de portas e que o endereço esteja correto! +error.timedout = Desconectado!\nTenha certeza que o anfitrião tenha feito o port forwarding e que o endereço esteja correto! error.mismatch = Erro de pacote:\nPossivel incompatibilidade com a versão do cliente/servidor.\nTenha certeza que você e o anfitrião tenham a última versão! error.alreadyconnected = Já conectado. error.mapnotfound = Arquivo de mapa não encontrado! @@ -508,49 +508,49 @@ error.io = Erro I/O de internet. error.any = Erro de rede desconhecido. error.bloom = Falha ao inicializar bloom.\nSeu dispositivo talvez não o suporte. -weather.rain.name = Rain -weather.snow.name = Snow -weather.sandstorm.name = Sandstorm -weather.sporestorm.name = Sporestorm -weather.fog.name = Fog +weather.rain.name = Chuva +weather.snow.name = Neve +weather.sandstorm.name = Tempestade de Areia +weather.sporestorm.name = Tempestade de Esporos +weather.fog.name = Névoa -sectors.unexplored = [lightgray]Unexplored -sectors.resources = Resources: -sectors.production = Production: -sectors.stored = Stored: -sectors.resume = Resume -sectors.launch = Launch -sectors.select = Select -sectors.nonelaunch = [lightgray]none (sun) -sectors.rename = Rename Sector -sector.missingresources = [scarlet]Insufficient Core Resources +sectors.unexplored = [lightgray]Inexplorado +sectors.resources = Recursos: +sectors.production = Produção: +sectors.stored = Armazenado: +sectors.resume = Continuar +sectors.launch = Lançar +sectors.select = Selecione +sectors.nonelaunch = [lightgray]nenhum (sun) +sectors.rename = Renomear Setor +sector.missingresources = [scarlet]Recursos Insuficientes no Núcleo planet.serpulo.name = Serpulo -planet.sun.name = Sun +planet.sun.name = Sol -sector.groundZero.name = Ground Zero -sector.craters.name = The Craters -sector.frozenForest.name = Frozen Forest -sector.ruinousShores.name = Ruinous Shores -sector.stainedMountains.name = Stained Mountains -sector.desolateRift.name = Desolate Rift -sector.nuclearComplex.name = Nuclear Production Complex -sector.overgrowth.name = Overgrowth -sector.tarFields.name = Tar Fields -sector.saltFlats.name = Salt Flats -sector.fungalPass.name = Fungal Pass +sector.groundZero.name = Marco Zero +sector.craters.name = As Crateras +sector.frozenForest.name = Floresta Congelada +sector.ruinousShores.name = Costas Ruinosas +sector.stainedMountains.name = Montanhas Manchadas +sector.desolateRift.name = Fenda Desolada +sector.nuclearComplex.name = Complexo de Prodção Nuclear +sector.overgrowth.name = Supercrescimento +sector.tarFields.name = Campos de Piche +sector.saltFlats.name = Planícies de Sal +sector.fungalPass.name = Passagem Fúngica -sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. -sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. -sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. -sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. -sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. -sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. -sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. -sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. +sector.groundZero.description = Um lugar bom para recomeçar. Baixa ameaça inimiga. Poucos recursos.\nConsiga o máximo possível de chumbo e cobre.\nContinue. +sector.frozenForest.description = Mesmo aqui, perto das montanhas, os esporos se espalharam. As temperaturas baixas não conseguirão contê-los para sempre.\n\nComeçe a aventura com energia. Construa geradores a combustão. Aprenda a usar reparadores. +sector.saltFlats.description = Nos arredores do deserto ficam as planícies de sal. Muitos recursos podem ser encontrados nesse local.\n\nO inimigo construiu um complexo de armazenamento de recursos aqui. Destrua o núcleo deles. Não deixe nada sobrando. +sector.craters.description = A água se acumulou nessa cratera, relíquias de guerras antigas. Re-conquiste a área. Colete areia. Faça metavidro. Use a água para melhorar suas brocas e torretas. +sector.ruinousShores.description = Passando o terreno desolado, está localizada a costa. Antigamente, este local abrigava uma rede de defesa costeira. Não restou muita coisa. Apenas as estruturas de defesas básicas permaneceram ilesas, o resto foi reduzido a sucata.\nContinue expandindo seus territórios, re-descubra a tecnologia. +sector.stainedMountains.description = Mais para o interior estão as montanhas, ainda não contaminadas pelos esporos.\nExtraia o titânio que é abundante nessa área. Aprenda a usá-lo.\n\nA presença inimiga é maior aqui. Não dê tempo a eles de trazerem fortes unidades. +sector.overgrowth.description = Essa área coberta por vegetação, próxima ao local de origem dos esporos.\nO inimigo estabeleceu um posto de controle aqui. Faça unidades Titan. Destrua eles. Recupere o que foi perdido. +sector.tarFields.description = Nos arredores de uma zone de produção de petróleo, entre as montanhas e o deserto. Uma das poucas áreas com reservas de piche utilizáveis.\nMesmo abandonada, essa área tem forças inimigas por perto. Não subestime-os.\n\n[lightgray]Pesquise a tecnologia de processamento de petróleo se possível. +sector.desolateRift.description = Uma zona extremamente perigosa. Uma zona com recursos abundantes, mas pouco espaço. Grande risco de destruição. Saia o quanto antes. Não se deixe levar pelo tempo entre os ataques inimigos. +sector.nuclearComplex.description = Uma antiga instalação de produção e processamento de tório, reduzida a ruínas.\n[lightgray]Pesquise sobre o tório e seu vários usos.\n\nO inimigo está presente aqui em grande número, constantemente procurando por atacantes. +sector.fungalPass.description = Uma área de transição entre altas montanhas e terras baixas, repletas de esporos. Uma pequena base de reconhecimento inimiga está aqui.\nDestrua o núcleo. settings.language = Idioma settings.data = Dados do jogo @@ -564,30 +564,30 @@ settings.graphics = Gráficos settings.cleardata = Apagar dados settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito! settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar todo os arquivos, incluindo jogos salvos, mapas, teclas personalizadas e desbloqueados.\nQuando apertar 'ok' todos os arquivos serão apagados e o jogo irá sair automaticamente. -settings.clearsaves.confirm = Are you sure you want to clear all your saves? -settings.clearsaves = Clear Saves -settings.clearresearch = Clear Research -settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? -settings.clearcampaignsaves = Clear Campaign Saves -settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? +settings.clearsaves.confirm = Você tem certeza que quer apagar todos os seus saves? +settings.clearsaves = Apagar Saves +settings.clearresearch = Apagar Pesquisas +settings.clearresearch.confirm = Você tem certeza que quer apagar todas as suas pesquisas da campanha? +settings.clearcampaignsaves = Apagar Saves da Campanha +settings.clearcampaignsaves.confirm = Você tem certeza que quer apagar todos os seus saves da campanha? paused = Pausado clear = Limpo banned = [scarlet]BANIDO -unplaceable.sectorcaptured = [scarlet]Requires captured sector +unplaceable.sectorcaptured = [scarlet]Requer captura de setor yes = Sim no = Não info.title = [accent]Informação error.title = [crimson]Ocorreu um Erro. error.crashtitle = Ocorreu um Erro -unit.nobuild = [scarlet]Unit can't build -lastaccessed = [lightgray]Last Accessed: {0} +unit.nobuild = [scarlet]Unidades não podem construir +lastaccessed = [lightgray]Último Acesso: {0} block.unknown = [lightgray]??? stat.input = Entrada stat.output = Saída stat.booster = Apoio stat.tiles = Required Tiles -stat.affinities = Affinities +stat.affinities = Afinidades stat.powercapacity = Capacidade de Energia stat.powershot = Energia/tiro stat.damage = Dano @@ -597,16 +597,16 @@ stat.itemsmoved = Velocidade de movimento stat.launchtime = Tempo entre Disparos. stat.shootrange = Alcance stat.size = Tamanho -stat.displaysize = Display Size +stat.displaysize = Tamanho do Display stat.liquidcapacity = Capacidade de Líquido stat.powerrange = Alcance da Energia -stat.linkrange = Link Range -stat.instructions = Instructions +stat.linkrange = Alcance do Link +stat.instructions = Instruções stat.powerconnections = Conexões Máximas stat.poweruse = Uso de energia -stat.powerdamage = Dano/Poder +stat.powerdamage = Dano / Poder stat.itemcapacity = Capacidade de Itens -stat.memorycapacity = Memory Capacity +stat.memorycapacity = Capacidade de Memória stat.basepowergeneration = Geração de poder base stat.productiontime = Tempo de produção stat.repairtime = Tempo de reparo total do bloco @@ -624,34 +624,35 @@ stat.inaccuracy = Imprecisão stat.shots = Tiros stat.reload = Tempo de recarga stat.ammo = Munição -stat.shieldhealth = Shield Health + +stat.shieldhealth = Vida do Escudo stat.cooldowntime = Tempo de espera -stat.explosiveness = Explosiveness -stat.basedeflectchance = Base Deflect Chance +stat.explosiveness = Explosividade +stat.basedeflectchance = Chance Base de Esquiva stat.lightningchance = Lightning Chance -stat.lightningdamage = Lightning Damage -stat.flammability = Flammability -stat.radioactivity = Radioactivity -stat.heatcapacity = HeatCapacity -stat.viscosity = Viscosity -stat.temperature = Temperature -stat.speed = Speed -stat.buildspeed = Build Speed -stat.minespeed = Mine Speed -stat.minetier = Mine Tier -stat.payloadcapacity = Payload Capacity -stat.commandlimit = Command Limit -stat.abilities = Abilities +stat.lightningdamage = Dano por Raio +stat.flammability = Inflamabilidade +stat.radioactivity = Radioatividade +stat.heatcapacity = Capacidade de Aquecimento +stat.viscosity = Viscosidade +stat.temperature = Temperatura +stat.speed = Velocidade +stat.buildspeed = Velocidade de Construção +stat.minespeed = Velocidade de Mineração +stat.minetier = Nível de Mineração +stat.payloadcapacity = Capacidade de Carga +stat.commandlimit = Limite de Comando +stat.abilities = Habilidades -ability.forcefield = Force Field -ability.repairfield = Repair Field +ability.forcefield = Campo de Força +ability.repairfield = Campo de Reparação ability.statusfield = Status Field -ability.unitspawn = {0} Factory -ability.shieldregenfield = Shield Regen Field +ability.unitspawn = {0} Fábrica +ability.shieldregenfield = Raio de Regeneração do Escudo bar.drilltierreq = Broca melhor necessária. -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = Recursos Insuficientes +bar.corereq = Base do Núcleo Necessária bar.drillspeed = Velocidade da Broca: {0}/s bar.pumpspeed = Velocidade da Bomba: {0}/s bar.efficiency = Eficiência: {0}% @@ -659,7 +660,7 @@ bar.powerbalance = Energia: {0} bar.powerstored = Armazenada: {0}/{1} bar.poweramount = Energia: {0} bar.poweroutput = Saída de energia: {0} -bar.powerlines = Connections: {0}/{1} +bar.powerlines = Conexões: {0}/{1} bar.items = Itens: {0} bar.capacity = Capacidade: {0} bar.unitcap = {0} {1}/{2} @@ -669,7 +670,7 @@ bar.heat = Aquecer bar.power = Poder bar.progress = Progresso da construção bar.input = Entrada -bar.output = Sainda +bar.output = Saída units.processorcontrol = [lightgray]Processor Controlled @@ -680,15 +681,15 @@ bullet.homing = [stat]Guiado bullet.shock = [stat]Choque bullet.frag = [stat]Fragmentação bullet.knockback = [stat]{0}[lightgray]Impulso -bullet.pierce = [stat]{0}[lightgray]x pierce -bullet.infinitepierce = [stat]pierce +bullet.pierce = [stat]{0}[lightgray]x perfuração +bullet.infinitepierce = [stat]perfuração bullet.freezing = [stat]Congelamento bullet.tarred = [stat]Grudento bullet.multiplier = [stat]{0}[lightgray]x multiplicador de munição bullet.reload = [stat]{0}[lightgray]x cadência de tiro unit.blocks = Blocos -unit.blockssquared = blocks² +unit.blockssquared = Blocos² unit.powersecond = unidades de energia por segundo unit.liquidsecond = líquido segundo unit.itemssecond = itens por segundo @@ -701,7 +702,7 @@ unit.persecond = por segundo unit.perminute = /min unit.timesspeed = x Velocidade unit.percent = % -unit.shieldhealth = shield health +unit.shieldhealth = Saúde do escudo unit.items = itens unit.thousands = k unit.millions = m @@ -711,19 +712,19 @@ category.power = Energia category.liquids = Líquidos category.items = Itens category.crafting = Entrada/Saída -category.function = Function +category.function = Função category.optional = Melhoras opcionais setting.landscape.name = Travar panorama setting.shadows.name = Sombras setting.blockreplace.name = Sugestões automáticas de blocos setting.linear.name = Filtragem linear setting.hints.name = Dicas -setting.flow.name = Display Resource Flow Rate[scarlet] (experimental) +setting.flow.name = Mostrar Fluxo de Recursos[scarlet] (experimental) setting.buildautopause.name = Pausar construções automaticamente setting.animatedwater.name = Água animada setting.animatedshields.name = Escudos animados setting.antialias.name = Filtro suavizante[lightgray] (reinicialização requerida)[] -setting.playerindicators.name = Player Indicators +setting.playerindicators.name = Indicador de Jogadores setting.indicators.name = Indicador de aliados/inimigos setting.autotarget.name = Alvo automatico setting.keyboard.name = Controles de mouse e teclado @@ -756,7 +757,7 @@ setting.smoothcamera.name = Suavizar movimentos da câmera setting.vsync.name = VSync setting.pixelate.name = Pixelizado [lightgray](Pode diminuir a performace) setting.minimap.name = Mostrar minimapa -setting.coreitems.name = Display Core Items (WIP) +setting.coreitems.name = Mostrar Itens no Núcleo (WIP) setting.position.name = Mostrar a posição do Jogador setting.musicvol.name = Volume da Música setting.atmosphere.name = Mostrar a atmosfera do planeta @@ -767,18 +768,18 @@ setting.mutesound.name = Desligar Som setting.crashreport.name = Enviar denúncias anônimas de erros setting.savecreate.name = Criar salvamentos automaticamente setting.publichost.name = Visibilidade do jogo público -setting.playerlimit.name = Player Limit +setting.playerlimit.name = Limites de Player setting.chatopacity.name = Opacidade do chat setting.lasersopacity.name = Opacidade do laser setting.bridgeopacity.name = Opacidade da ponte setting.playerchat.name = Mostrar chat em jogo public.confirm = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública. -public.beta = Note que as versões beta do jogo não podem fazer salas publicas. +public.beta = Note que as versões beta do jogo não podem fazer salas públicas. uiscale.reset = A escala da interface foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] segundos... uiscale.cancel = Cancelar e sair setting.bloom.name = Bloom keybind.title = Refazer teclas -keybinds.mobile = [scarlet]A maior parte das teclas aqui não são funcionais em dispositivos móveis. Apenas movimento básico é suportado. +keybinds.mobile = [scarlet]A maior parte das teclas aqui não são funcionais em dispositivos móveis. É unicamente suportado movimento básico. category.general.name = Geral category.view.name = Ver category.multiplayer.name = Multijogador @@ -786,7 +787,7 @@ category.blocks.name = Selecionar bloco command.attack = Atacar command.rally = Reunir command.retreat = Recuar -command.idle = Ausente +command.idle = Parado placement.blockselectkeys = \n[lightgray]Tecla: [{0}, keybind.respawn.name = Reaparecer keybind.control.name = Controlar unidade @@ -795,7 +796,7 @@ keybind.press = Pressione uma tecla... keybind.press.axis = Pressione um eixo ou tecla... keybind.screenshot.name = Captura do mapa keybind.toggle_power_lines.name = Mudar lasers -keybind.toggle_block_status.name = Mostrar a propriedade dos blocos +keybind.toggle_block_status.name = Mostrar as propriedades dos blocos keybind.move_x.name = Mover no eixo x keybind.move_y.name = Mover no eixo Y keybind.mouse_move.name = Seguir o Cursor @@ -854,25 +855,25 @@ mode.sandbox.name = Criativo mode.sandbox.description = Recursos infinitos e sem tempo para ataques. mode.editor.name = Editor mode.pvp.name = JxJ -mode.pvp.description = Lutar contra outros jogadores locais. +mode.pvp.description = Luta contra outros jogadores locais. mode.attack.name = Ataque mode.attack.description = Sem hordas, com o objetivo de destruir a base inimiga. mode.custom = Regras personalizadas rules.infiniteresources = Recursos infinitos rules.reactorexplosions = Reatores explodem -rules.schematic = Schematics Allowed +rules.schematic = Permitir Esquemas rules.wavetimer = Tempo de horda rules.waves = Hordas rules.attack = Modo de ataque rules.buildai = Habilitar construção da IA rules.enemyCheat = Recursos de IA Infinitos rules.blockhealthmultiplier = Multiplicador de vida do bloco -rules.blockdamagemultiplier = Block Damage Multiplier +rules.blockdamagemultiplier = Multiplicador de dano do bloco rules.unitbuildspeedmultiplier = Multiplicador de velocidade de criação de unidade rules.unithealthmultiplier = Multiplicador de vida de unidade rules.unitdamagemultiplier = Multiplicador de dano de Unidade -rules.enemycorebuildradius = Raio de "Não-criação" de core inimigo:[lightgray] (blocos) +rules.enemycorebuildradius = Raio de "não-criação" de core inimigo:[lightgray] (blocos) rules.wavespacing = Espaço de tempo entre hordas:[lightgray] (seg) rules.buildcostmultiplier = Multiplicador de custo de construção rules.buildspeedmultiplier = Multiplicador de velocidade de construção @@ -887,7 +888,7 @@ rules.title.unit = Unidades rules.title.experimental = Experimental rules.title.environment = Ambiente rules.lighting = Iluminação -rules.enemyLights = Enemy Lights +rules.enemyLights = Iluminação Inimiga rules.fire = Fogo rules.explosions = Dano de explosão de unidades/blocos rules.ambientlight = Luz ambiente @@ -906,13 +907,13 @@ item.coal.name = Carvão item.graphite.name = Grafite item.titanium.name = Titânio item.thorium.name = Tório -item.silicon.name = Sílicio +item.silicon.name = Silício item.plastanium.name = Plastânio item.phase-fabric.name = Tecido de fase -item.surge-alloy.name = Liga de surto -item.spore-pod.name = Cápsula de esporos +item.surge-alloy.name = Liga de súrgio +item.spore-pod.name = Pedaço de esporo item.sand.name = Areia -item.blast-compound.name = Composto de explosão +item.blast-compound.name = Composto Explosivo item.pyratite.name = Piratita item.metaglass.name = Metavidro item.scrap.name = Sucata @@ -934,7 +935,7 @@ unit.arkyid.name = Arkyid unit.toxopid.name = Toxopid unit.flare.name = Flare unit.horizon.name = Horizon -unit.zenith.name = Zenith +unit.zenith.name = Zênite unit.antumbra.name = Antumbra unit.eclipse.name = Eclipse unit.mono.name = Mono @@ -950,7 +951,7 @@ unit.omura.name = Omura unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma -unit.scepter.name = Scepter +unit.scepter.name = Sceptro unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus @@ -963,12 +964,12 @@ block.grass.name = Grama block.slag.name = Escória block.space.name = Space block.salt.name = Sal -block.salt-wall.name = Parede de Sal +block.salt-wall.name = Parede de sal block.pebbles.name = Pedrinhas block.tendrils.name = Gavinhas -block.sand-wall.name = Sand Wall +block.sand-wall.name = Muro de Areia block.spore-pine.name = Pinheiro de esporo -block.spore-wall.name = Spore Wall +block.spore-wall.name = Muro de Esporos block.boulder.name = Rochedo block.snow-boulder.name = Monte de neve block.snow-pine.name = Pinheiro com neve @@ -993,8 +994,8 @@ block.core-foundation.name = Fundação do núcleo block.core-nucleus.name = Centro do núcleo block.deepwater.name = Água profunda block.water.name = Água -block.tainted-water.name = Água contaminada -block.darksand-tainted-water.name = Água contaminada sobre areia escura +block.tainted-water.name = Água tinta +block.darksand-tainted-water.name = Água tinta sobre areia escura block.tar.name = Piche block.stone.name = Pedra block.sand.name = Areia @@ -1064,10 +1065,10 @@ block.sorter.name = Ordenador block.inverted-sorter.name = Ordenador invertido block.message.name = Mensagem block.illuminator.name = Iluminador -block.illuminator.description = Uma pequena, compacta e configurável fonte de luz. Precisa de energia para funcionar. +block.illuminator.description = Uma fonte de luz pequena, configurável e compacta. Precisa de energia para funcionar. block.overflow-gate.name = Portão de Fluxo block.underflow-gate.name = Portão de Fluxo invertido -block.silicon-smelter.name = Fundidora de silicio +block.silicon-smelter.name = Fundidora de silício block.phase-weaver.name = Palheta de fase block.pulverizer.name = Pulverizador block.cryofluid-mixer.name = Misturador de Crio Fluido @@ -1075,10 +1076,10 @@ block.melter.name = Aparelho de fusão block.incinerator.name = Incinerador block.spore-press.name = Prensa de Esporo block.separator.name = Separador -block.coal-centrifuge.name = Centrífuga de Carvão +block.coal-centrifuge.name = Centrífugador de Carvão block.power-node.name = Célula de energia block.power-node-large.name = Célula de energia grande -block.surge-tower.name = Torre de surto +block.surge-tower.name = Torre de súrgio block.diode.name = Diodo block.battery.name = Bateria block.battery-large.name = Bateria grande @@ -1105,7 +1106,7 @@ block.wave.name = Onda block.tsunami.name = Tsunami block.swarmer.name = Enxame block.salvo.name = Salvo -block.ripple.name = Morteiro +block.ripple.name = Ondulação block.phase-conveyor.name = Transportador de Fase block.bridge-conveyor.name = Esteira-Ponte block.plastanium-compressor.name = Compressor de Plastânio @@ -1143,7 +1144,7 @@ block.rtg-generator.name = Gerador GTR block.spectre.name = Espectro block.meltdown.name = Fusão block.foreshadow.name = Foreshadow -block.container.name = Contâiner +block.container.name = Contêiner block.launch-pad.name = Plataforma de lançamento block.launch-pad-large.name = Plataforma de lançamento grande block.segment.name = Segmento @@ -1168,7 +1169,7 @@ block.hyper-processor.name = Hiper Processador block.logic-display.name = Monitor Lógico block.large-logic-display.name = Monitor lógico grande block.memory-cell.name = Célula de Memória -block.memory-bank.name = Memory Bank +block.memory-bank.name = Banco de Memória team.blue.name = Azul team.crux.name = Vermelho @@ -1198,7 +1199,7 @@ tutorial.withdraw = Em algumas situações é necessário pegar itens diretament tutorial.deposit = Deposite itens em blocos arrastando da sua nave até o bloco.\n\n[accent]Deposite seu cobre de volta no núcleo.[] tutorial.waves = O[lightgray] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Construa mais torretas. tutorial.waves.mobile = O[lightgray] inimigo[] se aproxima.\n\nDefenda seu núcleo por 2 hordas. Seu drone vai atirar nos inimigos automaticamente.\nConstrua mais torretas e brocas. Minere mais cobre. -tutorial.launch = Quando você atinge uma horda específica, Você é capaz de[accent] lançar o núcleo[], deixando suas defesas para trás e[accent] obtendo todos os recursos em seu núcleo.[]\nEstes recursos podem ser usados para pesquisar novas tecnologias.\n\n[accent]Pressione o botão lançar. +tutorial.launch = Quando você atinge uma horda específica, você é capaz de[accent] lançar o núcleo[], deixando suas defesas para trás e[accent] obtendo todos os recursos em seu núcleo.[]\nEstes recursos podem ser usados para pesquisar novas tecnologias.\n\n[accent]Pressione o botão lançar. item.copper.description = O material mais básico. Usado em todos os tipos de blocos. item.lead.description = Material de começo basico. usado extensivamente em blocos de transporte de líquidos e eletrônicos. @@ -1221,14 +1222,14 @@ liquid.slag.description = Vários metais derretidos misturados juntos. Pode ser liquid.oil.description = Um líquido usado na produção de materias avançados. Pode ser convertido em carvão como combustível, ou pulverizado e incendiado como arma. liquid.cryofluid.description = A maneira mais eficiente de resfriar qualquer coisa, até seu corpo quando está calor, mas não faça isto. -block.message.description = Armazena uma mensagem. Usado para comunicação entre aliados. +block.message.description = Mostra uma mensagem. Usado para comunicação entre aliados. block.graphite-press.description = Comprime pedaços de carvão em lâminas de grafite puro. block.multi-press.description = Uma versão melhorada da prensa de grafite. Usa água e energia para processar carvão rápida e eficientemente. -block.silicon-smelter.description = Reduz areia a silicio usando carvão puro. Produz silício. +block.silicon-smelter.description = Reduz areia a silício usando carvão puro. Produz silício. block.kiln.description = Derrete chumbo e areia no composto conhecido como metavidro. Requer pequenas quantidades de energia. block.plastanium-compressor.description = Produz plastânio usando petróleo e titânio. block.phase-weaver.description = Produz tecido de fase usando tório radioativo e areia. Requer massivas quantidades de energia para funcionar. -block.alloy-smelter.description = Combina titânio, chumbo, silicio e cobre para produzir liga de surto. +block.alloy-smelter.description = Combina titânio, chumbo, silício e cobre para produzir liga de surto. block.cryofluid-mixer.description = Mistura água e pó fino de titânio para produzir criofluido. Essencial para o uso do reator a tório. block.blast-mixer.description = Quebra e mistura aglomerados de esporos com piratita para produzir composto de explosão. block.pyratite-mixer.description = Mistura carvão, chumbo e areia em piratita altamente inflamável. @@ -1238,14 +1239,14 @@ block.spore-press.description = Comprime cápsulas de esporos em petróleo. block.pulverizer.description = Esmaga sucata em areia. Util quando esta em falta de areia natural. block.coal-centrifuge.description = Solidifica petróleo em carvão. block.incinerator.description = Se livra de itens em excesso ou liquidos. -block.power-void.description = Destroi qualquer energia que entre dentro. Apenas caixa de areia. -block.power-source.description = Infinitivamente da energia. Apenas caixa de areia. -block.item-source.description = Infinivamente da itens. Apenas caixa de areia. -block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas caixa de areia. -block.liquid-source.description = Infinitivamente da Liquidos. Apenas caixa de areia. -block.liquid-void.description = Remove todos os líquidos. Apenas sandbox. -block.copper-wall.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo. -block.copper-wall-large.description = Um bloco defensivo e barato.\nUtil para proteger o núcleo e torretas no começo.\nOcupa múltiplos blocos. +block.power-void.description = Destroi qualquer energia que entra dentro. Apenas no modo sandbox. +block.power-source.description = Infinitivamente da energia. Apenas no modo sandbox. +block.item-source.description = Infinitamente dá itens. Apenas caixa de areia. +block.item-void.description = Destroi qualquer item que entre sem requerir energia. Apenas no modo sandbox. +block.liquid-source.description = Infinitivamente dá Liquidos. Apenas no modo sanbox. +block.liquid-void.description = Destroi qualquer líquidos que entrar dentro. Apenas no modo sandbox. +block.copper-wall.description = Um bloco defensivo barato.\nUtil para proteger o núcleo e torretas no começo. +block.copper-wall-large.description = Um bloco defensivo barato.\nUtil para proteger o núcleo e torretas no começo.\nOcupa múltiplos blocos. block.titanium-wall.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos. block.titanium-wall-large.description = Um bloco defensivo moderadamente forte.\nProvidencia defesa moderada contra inimigos.\nOcupa múltiplos blocos. block.plastanium-wall.description = Um tipo especial de muro que absorve arcos elétricos e bloqueia conexões automáticas de células de energia. @@ -1253,30 +1254,30 @@ block.plastanium-wall-large.description = Um tipo especial de muro que absorve a block.thorium-wall.description = Um bloco defensivo forte.\nBoa proteção contra inimigos. block.thorium-wall-large.description = Um bloco defensivo forte.\nBoa proteção contra inimigos.\nOcupa múltiplos blocos. block.phase-wall.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto. -block.phase-wall-large.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas no impacto.\nOcupa múltiplos blocos. -block.surge-wall.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-s aleatoriamente. -block.surge-wall-large.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-s aleatoriamente.\nOcupa multiplos blocos. +block.phase-wall-large.description = Um muro revestido com um composto especial baseado em tecido de fase. Desvia a maioria das balas ao impacto.\nOcupa múltiplos blocos. +block.surge-wall.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-as aleatoriamente. +block.surge-wall-large.description = Um bloco defensivo extremamente durável.\nSe carrega com eletricidade no contato com as balas, soltando-as aleatoriamente.\nOcupa multiplos blocos. block.door.description = Uma pequeda porta. Pode ser aberta e fechada ao tocar. block.door-large.description = Uma grande porta. Pode ser aberta e fechada ao tocar.\nOcupa múltiplos blocos. -block.mender.description = Periodicamente repara blocos vizinhos. Mantem as defesas reparadas em e entre ondas.\nPode usar silício para aumentar o alcance e a eficiência. -block.mend-projector.description = Uma versão melhorada do reparador. Repara blocos vizinhos.\nPode usar tecido de fase para aumentar o alcance e a eficiência. -block.overdrive-projector.description = Aumenta a velocidade de construções vizinhas.\nPode usar tecido de fase para aumentar o alcance e a eficiência. -block.force-projector.description = Cria um campo de força hexagonal ao redor de si, protegendo construções e unidades.\nSuperaquece se suportar muito dano. Pode usar líquidos para evitar superaquecimento. Pode-se usar tecido de fase para aumentar o tamanho do escudo. +block.mender.description = Periodicamente repara blocos vizinhos. Mantem as defesas reparadas em e entre ondas.\nPode usar silício para aumentar o alcance e a eficácia. +block.mend-projector.description = Uma versão melhorada do reparador. Repara blocos vizinhos.\nPode usar tecido de fase para aumentar o alcance e a eficácia. +block.overdrive-projector.description = Aumenta a velocidade de construções vizinhas.\nPode usar tecido de fase para aumentar o alcance e a eficácia. +block.force-projector.description = Cria um campo de força hexagonal ao redor de si, protegendo construções e unidades.\nAquece demais se o escudo tomar dano. Pode usar líquidos para evitar superaquecimento. Pode-se usar tecido de fase para aumentar o tamanho do escudo. block.shock-mine.description = Danifica inimigos em cima da mina. Quase invisivel ao inimigo. block.conveyor.description = Bloco de transporte de item basico. Move os itens a frente e os deposita automaticamente em torretas ou construtores. Rotacionável. block.titanium-conveyor.description = Bloco de transporte de item avançado. Move itens mais rapidos que esteiras padrões. -block.plastanium-conveyor.description = Moves items in batches.\nAccepts items at the back, and unloads them in three directions at the front. -block.junction.description = Funciona como uma ponte Para duas esteiras que estejam se cruzando. Util em situações que tenha duas esteiras diferentes carregando materiais diferentes para lugares diferentes. +block.plastanium-conveyor.description = Move os itens por grupos.\nRecebe os itens por trás, e despeja eles nas três outras direções. +block.junction.description = Funciona como uma ponte para duas esteiras que estejam se cruzando. Util em situações que tenha duas esteiras separadas carregando materiais diferentes para lugares diferentes. block.bridge-conveyor.description = Bloco de transporte de itens avancado. Possibilita o transporte de itens acima de 3 blocos de construção ou paredes. block.phase-conveyor.description = Bloco de transporte de item avançado. Usa energia para teleportar itens a uma esteira de fase sobre uma severa distancia. block.sorter.description = Filtra itens passando o selecionado para frente e os outros para os lados. block.inverted-sorter.description = Filtra os itens como um ordenador normal, porém, os itens escolhidos sairão pelas laterais. -block.router.description = Aceita itens de uma direção e os divide em 3 direções igualmente. Util para espalhar materiais da fonte para multiplos alvos. -block.distributor.description = Um roteador avançado que espalhas os itens em 7 outras direções igualmente. -block.overflow-gate.description = Uma combinação de roteador e divisor Que apenas manda para a esquerda e Direita se a frente estiver bloqueada. +block.router.description = Aceita itens de uma direção e os divide em 3 direções igualmente. Util para espalhar materiais de uma fonte para multiplos alvos. +block.distributor.description = Um roteador avançado que espalhas os itens em 7 direções igualmente. +block.overflow-gate.description = Uma combinação de roteador e divisor que apenas manda para a esquerda e direita se a frente estiver bloqueada. block.underflow-gate.description = O oposto de um portão de sobrecarga. Manda pra frente se a esquerda e a direita estiverem bloqueadas. block.mass-driver.description = Bloco de transporte de itens supremo. Coleta itens severos e atira eles em outro mass driver de uma longa distancia. -block.mechanical-pump.description = Uma bomba barata com baixa saída de líquidos, mas sem consumo de energia. +block.mechanical-pump.description = Uma bomba barata com baixa saída de líquidos, sem consumo de energia. block.rotary-pump.description = Uma bomba avançada. Bombeia mais líquido, mas requer energia. block.thermal-pump.description = A bomba final. block.conduit.description = Bloco básico de transporte de líquidos. Move líquidos para a frente. Usado em conjunto com bombas e outros canos. @@ -1290,38 +1291,38 @@ block.phase-conduit.description = Bloco avancado de transporte de liquido. Usa e block.power-node.description = Transmite energia para células conectadas. A célula vai receber energia ou alimentar qualquer bloco adjacente. block.power-node-large.description = Uma célula de energia avançada com maior alcance e mais conexões. block.surge-tower.description = Uma célula de energia com um extremo alcance mas com menos conexões disponíveis. -block.diode.description = A energia de baterias pode fluir através desse bloco em apenas uma direção, mas apenas se o outro lado possuir menos energia armazenada. +block.diode.description = A energia de baterias pode fluir através desse bloco em apenas uma direção, mas sómente se o outro lado possuir menos energia armazenada. block.battery.description = Armazena energia em tempos de energia excedente. Libera energia em tempos de déficit. block.battery-large.description = Guarda muito mais energia que uma bateria comum. block.combustion-generator.description = Gera energia queimando materiais inflamáveis, como carvão. block.thermal-generator.description = Gera energia quando colocado em lugares quentes. block.steam-generator.description = Mais eficiente que o gerador à combustão, mas requer água adicional para a geração de vapor. -block.differential-generator.description = Gera grandes quantidades de energia. Utiliza a diferença de temperatura entre o Fluido Criogênico e a Piratita. -block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos que não precisa de refriamento mas dá muito menos energia que o reator de tório. +block.differential-generator.description = Gera grandes quantidades de energia. Utiliza a diferença de temperatura entre o fluido friogênico e a piratita. +block.rtg-generator.description = Um Gerador termoelétrico de radioisótopos que não precisa de resfriamento mas dá muito menos energia que o reator de tório. block.solar-panel.description = Gera pequenas quantidades de energia do sol. block.solar-panel-large.description = Uma versão significantemente mais eficiente que o painel solar padrão. -block.thorium-reactor.description = Gera altas quantidades de energia do torio radioativo. Requer resfriamento constante. Vai explodir violentamente Se resfriamento insuficiente for fornecido. +block.thorium-reactor.description = Gera altas quantidades de energia pelo tório radioativo. Requer resfriamento constante. Explodirá violentamente se o resfriamento for insuficiente. block.impact-reactor.description = Um gerador avançado, capaz de criar quantidades enormes de energia em seu poder total. Requer uma entrada significativa de energia ao iniciar. -block.mechanical-drill.description = Uma broca barata. Quando colocado em blocos apropriados, retira itens em um ritmo lento e indefinitavamente. -block.pneumatic-drill.description = Uma broca improvisada que é mais rápida e capaz de processar materiais mais duros usando a pressão do ar -block.laser-drill.description = Possibilita a mineração ainda mais rapida usando tecnologia a laser, Mas requer poder adcionalmente torio radioativo pode ser recuperado com essa mineradora +block.mechanical-drill.description = Uma broca barata. Quando colocado nos blocos apropriados, retira itens em um ritmo lento, eternamente. +block.pneumatic-drill.description = Uma broca improvisada que é mais rápida e capaz de extrair materiais mais duros usando a pressão do ar. +block.laser-drill.description = Possibilita mineração ainda mais rapida usando tecnologia a laser, mas requer poder adicionalmente. Tório pode ser recuperado com essa mineradora. block.blast-drill.description = A melhor mineradora. Requer muita energia. -block.water-extractor.description = Extrai água subterrânea. Usado em locais sem água superficial disponível. +block.water-extractor.description = Extrai água subterrânea. Usado em locais sem água disponível na superficie. block.cultivator.description = Cultiva pequenas concentrações de esporos na atmosfera em cápsulas prontas. block.oil-extractor.description = Usa altas quantidades de energia para extrair petróleo da areia. Use quando não tiver fontes de petróleo por perto. block.core-shard.description = A primeira iteração do núcleo. Uma vez destruído, todo o contato com a região é perdido. Não deixe isso acontecer. -block.core-foundation.description = A segunda versão do núcleo. Mais bem armadurado. Armazena mais recursos. -block.core-nucleus.description = A terceira e ultima iteração do núcleo. Extremamente bem armadurada. Guarda quantidades massivas de recursos. -block.vault.description = Carrega uma alta quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[lightgray] Descarregador[] pode ser usado para recuperar esses itens do container. -block.container.description = Carrega uma baixa quantidade de itens. Usado para criar fontes Quando não tem uma necessidade constante de materiais. Um[lightgray] Descarregador[] pode ser usado para recuperar esses itens do container. +block.core-foundation.description = A segunda versão do núcleo. Armadurado melhor. Armazena mais recursos. +block.core-nucleus.description = A terceira e última versão do núcleo. Extremamente bem armadurada. Guarda quantidades massivas de recursos. +block.vault.description = Carrega uma alta quantidade de itens. Usado para criar fontes quando não há uma entrada constante de materiais. Um[lightgray] descarregador[] pode ser usado para recuperar esses itens do container. +block.container.description = Guarda uma pequena quantidade de itens. Usado para criar fontes quando não há uma entrada constante de materiais. Um[lightgray] descarregador[] pode ser usado para recuperar esses itens do container. block.unloader.description = Descarrega itens de um container, Descarrega em uma esteira ou diretamente em um bloco adjacente. O tipo de item que pode ser descarregado pode ser mudado clicando no descarregador. block.launch-pad.description = Lança montes de itens sem qualquer necessidade de um lançamento de núcleo. block.launch-pad-large.description = Uma versão melhorada da plataforma de lançamento. Guarda mais itens. Lança mais frequentemente. block.duo.description = Uma pequena torre de baixo custo. Útil contra unidades terrestres. block.scatter.description = Uma torre antiaérea essencial para a defesa. Dispara vários tiros aglomerados de chumbo, sucata ou metavidro. -block.scorch.description = Uma torre que queima qualquer unidade que estiver próxima. Altamente efetivo se for a queima-roupa. +block.scorch.description = Uma torre que queima qualquer unidade que estiver próxima. Altamente efetivo se for de perto. block.hail.description = Uma pequena torre de artilharia com grande alcance. -block.wave.description = Uma torre de tamanho médio. Lança jatos de líquidos nos seus inimigos. Automaticamente apaga incêndios se for abastecido com água ou crio fluido. +block.wave.description = Uma torre de tamanho médio. Lança jatos de líquidos nos seus inimigos. Automaticamente apaga incêndios se for abastecido com água ou fluido criogênico. block.lancer.description = Uma torre laser anti-terrestre média. Carrega e dispara poderosos feixes de energia. block.arc.description = Uma pequena torre elétrica com curto alcance. Dispara arcos de eletricidade nos seus inimigos. block.swarmer.description = Uma torre de mísseis de tamanho médio. Ataca ambos terrestre e aéreo disparando misseis teleguiados. diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index e45ccc6afa98..c6c8ecd72feb 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -41,6 +41,14 @@ be.ignore = Ignoră be.noupdates = Niciun update disponibil. be.check = Verifică updateurile +mods.browser = Browser de Moduri +mods.browser.selected = Mod selectat +mods.browser.add = Instalare +mods.browser.reinstall = Reinstal. +mods.github.open = Github +mods.browser.sortdate = Cele mai recente +mods.browser.sortstars = Cele mai multe stele + schematic = Schemă schematic.add = Salvează Schema... schematics = Scheme @@ -83,6 +91,7 @@ loadgame = Încarcă Jocul joingame = Intră în Joc customgame = Personalizat newgame = Joc Nou +none.found = [lightgray] none = minimap = Minihartă position = Poziție @@ -110,8 +119,10 @@ mods.none = [lightgray]Nu s-au găsit moduri! mods.guide = Ghid de Modding mods.report = Raportează Bug mods.openfolder = Deschide Folder +mods.viewcontent = Vezi Conținut mods.reload = Reîncarcă mods.reloadexit = Jocul se va opri ca să reîncarce modurile. +mod.installed = [[Instalat] mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Activat mod.disabled = [scarlet]Dezactivat @@ -281,6 +292,7 @@ cancel = Anulare openlink = Deschide Linkul copylink = Copiază Linkul back = Înapoi +max = Maximum crash.export = Exportă Crash Logs crash.none = Nu s-au găsit crash logs. crash.exported = Crash logs exportate. @@ -300,6 +312,7 @@ cancelbuilding = [accent][[{0}][] pt a curăța planul selectschematic = [accent][[{0}][] pt selectare+copiere pausebuilding = [accent][[{0}][] pt a face o pauză de la construit resumebuilding = [scarlet][[{0}][] pt a continua construitul +enablebuilding = [scarlet][[{0}][] pt a construi showui = Interfață ascunsă.\nApasă [accent][[{0}][] pt a vedea interfața. wave = [accent]Valul {0} wave.cap = [accent]Valul {0}/{1} @@ -355,7 +368,6 @@ editor.center = Centrează workshop = Workshop waves.title = Valuri waves.remove = Elimină -waves.never = waves.every = la fiecare waves.waves = val(uri) waves.perspawn = per apariție @@ -386,7 +398,7 @@ editor.errorload = Eroare la încărcarea fișierului. memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb editor.errorsave = Eroare la salvarea fișierului. -editor.errorimage = Aceasta este o imagine, nu o hartă.\n\nDacă vrei să imporți o hartă din versiunile 3.5/build 40, folosește butonul 'Importă Hartă Veche' din editor. +editor.errorimage = Aceasta este o imagine, nu o hartă. editor.errorlegacy = Hartă aceasta este prea veche, și folosește un format învechit care nu mai este suportat. editor.errornot = Acesta nu este un fișier cu o hartă. editor.errorheader = Acest fișier de hartă este invalid sau corupf. @@ -592,17 +604,17 @@ sector.groundZero.description = Locația optimă pt a începe încă odată. Ris sector.frozenForest.description = Chiar și aici, aproape de munți, sporii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare. sector.saltFlats.description = La periferia deșertului stau Podișurile Saline. Puține resurse pot fi găsite în această locație.\n\nInamicul a ridicat un complex de depozitare aici. Distruge-le nucleul. Nu lăsa nimic în urmă. sector.craters.description = Apa s-a acumulat în acest crater, rămășiță a vechilor războaie. Cucerește din nou zona. Adună nisip. Toarnă-l în metasticlă. Pompează apă pt a răci armele și burghiele. -sector.ruinousShores.description = După deșerturi vine țărmul. Odată, locația aceasta a avut un sistem de apărare de coastă. N-a rămas mult din el. Doar structurile de apărare cele mai simple au rămas în picioare, restul fiind redus la fier vechi.\nContinuă expansiunea înspre exterior. Redescoperă tehnologia. -sector.stainedMountains.description = Mai spre mijlocul continentului sunt munții, încă neatinși de spori.\nExtrage abundentele resurse de titan din zonă. Învață cum să-l folosești.\n\nPrezența inamicului e mai mare aici. Nu le da timp să-și trimită cele mai puternice unități. +sector.ruinousShores.description = După deșerturi vine țărmul. Odată, locația aceasta avea un sistem de apărare de coastă. N-a rămas mult din el. Doar structurile de apărare cele mai simple au rămas în picioare, restul fiind redus la fier vechi.\nContinuă expansiunea înspre exterior. Redescoperă tehnologia. +sector.stainedMountains.description = Mai spre mijlocul continentului sunt munții, încă neatinși de spori.\nExtrage abundentele resurse de titan din zonă. Învață cum să-l folosești.\n\nPrezența inamicului e mai mare aici. Nu le da timp să trimită cele mai puternice unități. sector.overgrowth.description = Această zonă este plină de buruieni, mai aproape de sursa sporilor.\nInamicul și-a stabilit un avanpost aici. Construiește unități Mace. Distruge-l. -sector.tarFields.description = O zonă aflată la periferia unui complex de producție petrolieră, între munți și deșert. Una din puținele zone cu resurse utilizabile de țiței.\nDeși abandonată, în apropierea zonei se află de forțe inamice periculoase. Nu le subestima.\n\n[lightgray]Cercetează tehnologie de procesare a petrolului pe cât posibil. +sector.tarFields.description = O zonă aflată la periferia unui complex de producție petrolieră, între munți și deșert. Una din puținele zone cu resurse utilizabile de țiței.\nDeși abandonată, în apropierea zonei se află forțe inamice periculoase. Nu le subestima.\n\n[lightgray]Cercetează tehnologia de procesare a petrolului pe cât posibil. sector.desolateRift.description = O zonă extrem de periculoasă. Multe resurse, dar puțin spațiu. Mare risc de distrugere. Pleacă curând, cât mai curând. Nu te lăsa păcălit de pauzele mari dintre atacurile inamice. sector.nuclearComplex.description = O fostă facilitate pt producerea și procesarea de toriu, redusă la ruine.\n[lightgray]Cercetează toriul și multele sale utilizări.\n\nInamicul e prezent aici în mari numere, căutând constant atacatori. sector.fungalPass.description = O zonă de tranziție dintre munții înalți și zonele joase, pline cu spori. O mică bază de recunoaștere a inamicului este localizată aici.\nDistruge-o.\nFolosește unități Dagger și Crawler. Distruge cele 2 nuclee. sector.biomassFacility.description = Originea sporilor. Aceasta este facilitatea în care au fost cercetați și produși inițial.\nCercetează tehnologia ce poate fi găsită aici. Cultivă spori pt producția de combustibil și mase plastice.\n\n[lightgray]Când facilitatea a decăzut, sporii au fost eliberați. Nimic din din ecosistemul local nu a putut concura cu un organism atât de invaziv. sector.windsweptIslands.description = Acest arhipelag izolat se află mai departe, după țărm. Datele arată că odată aveau structuri care produceau [accent]Plastaniu[].\n\nApără-te de unitățile navale ale inamicului. Construiește o bază pe insule. Cercetează fabricile necesare. sector.extractionOutpost.description = Un avanpost izolat, construit de inamic cu scopul de a lansa resurse către alte sectoare.\n\nTehnologia de transport intersectorial este esențială pt cuceririle ce urmează. Distruge baza. Cercetează platformele lor de lansare. -sector.impact0078.description = Aici se află rămășițele primei nave de transport interstelar care a intrat în acest sistem stelar.\n\nSalvează cât mai mult posibil din epavă. Cercetează orice tehnologie intactă. +sector.impact0078.description = Aici se află rămășițele primei nave de transport interstelar care a intrat în acest sistem stelar.\n\nSalvează cât de mult posibil din epavă. Cercetează orice tehnologie intactă. sector.planetaryTerminal.description = Ținta finală.\n\nAceastă bază de coastă conține o structură capabilă să lanseze nuclee către alte planete locale. Este extrem de bine păzită.\n\nProdu unități navale. Elimină inamicul cât de rapid se poate. Cercetează structura de lansare. settings.language = Limbă @@ -672,6 +684,7 @@ stat.drillspeed = Viteză Burghiu (Bază) stat.boosteffect = Efect de Îmbunătățire stat.maxunits = Maxim Unități Active stat.health = Viață +stat.armor = Armură stat.buildtime = Timp Construcție stat.maxconsecutive = Maxim Consecutive stat.buildcost = Cost Construcție @@ -690,6 +703,7 @@ stat.radioactivity = Radioactivitate stat.heatcapacity = Capacitate de Căldură stat.viscosity = Vâscozitate stat.temperature = Temperatură +stat.charge = Sarcină Electrică stat.speed = Viteză stat.buildspeed = Viteză Construcție stat.minespeed = Viteză Minare @@ -714,6 +728,7 @@ bar.corereq = Plasare pe Nucleu Necesară bar.drillspeed = Viteză Minare: {0}/s bar.pumpspeed = Viteză Pompare: {0}/s bar.efficiency = Eficiență: {0}% +bar.boost = Efect Grăbire: {0}% bar.powerbalance = Electricitate: {0}/s bar.powerstored = Stocată: {0}/{1} bar.poweramount = Electricitate: {0} @@ -781,6 +796,7 @@ setting.shadows.name = Umbre setting.blockreplace.name = Sugestii Plasare Automats setting.linear.name = Filtrare Liniară setting.hints.name = Indicii +setting.logichints.name = Indicii Procesoare Logice setting.flow.name = Afișează Rata de Curgere a lichidelor setting.buildautopause.name = Autopauză de la Construit setting.backgroundpause.name = Pune Pauză în Fundal @@ -912,6 +928,7 @@ keybind.toggle_menus.name = Pornește/Oprește Meniuri keybind.chat_history_prev.name = Istoric Chat Înapoi keybind.chat_history_next.name = Istoric Chat Mai Departe keybind.chat_scroll.name = Scroll Chat +keybind.chat_mode.name = Schimbă Modul Chatului keybind.drop_unit.name = Lasă Unitatea keybind.zoom_minimap.name = Zoom Minihartă mode.help.title = Descrierea modurilor @@ -928,6 +945,7 @@ mode.custom = Reguli Personalizate rules.infiniteresources = Resurse Infinite rules.reactorexplosions = Reactoarele Explodează +rules.coreincinerates = Nucleul Incinerează Resursele în Plus rules.schematic = Se Pot Folosi Scheme rules.wavetimer = Valuri pe Timp rules.waves = Valuri @@ -939,6 +957,8 @@ rules.blockdamagemultiplier = Multiplicatorul Deteriorării Blocurilor rules.unitbuildspeedmultiplier = Multiplicatorul Vitezei de Producere a Unităților rules.unithealthmultiplier = Multiplicatorul Vieții Unităților rules.unitdamagemultiplier = Multiplicatorul Deteriorării Unităților +rules.unitcapvariable = Nucleele Contribuie la Limita Unităților +rules.unitcap = Limita de Bază a Unităților rules.enemycorebuildradius = Interzisă Construirea în Jurul Nucleului Inamic:[lightgray] (pătrate) rules.wavespacing = Spațiul Dintre Valuri:[lightgray] (sec) rules.buildcostmultiplier = Multiplicatorul Costului Construcției @@ -1129,10 +1149,6 @@ block.armored-conveyor.name = Bandă Armată block.junction.name = Intersecție block.router.name = Router block.distributor.name = Distributor -#experimental, pot fi șterse în viitor -block.block-forge.name = Forjă de Blocuri -block.block-loader.name = Încărcător de Blocuri -block.block-unloader.name = Descărcător de Blocuri block.sorter.name = Sortator block.inverted-sorter.name = Sortator Invers block.message.name = Mesaj @@ -1233,6 +1249,10 @@ block.disassembler.name = Dezasamblator block.silicon-crucible.name = Creuzet de Silicon block.overdrive-dome.name = Dom de Suprasolicitare block.interplanetary-accelerator.name = Accelerator Interplanetar +#experimental, pot fi șterse în viitor +block.block-forge.name = Forjă de Blocuri +block.block-loader.name = Încărcător de Blocuri +block.block-unloader.name = Descărcător de Blocuri block.switch.name = Întrerupător block.micro-processor.name = Microprocesor @@ -1374,8 +1394,8 @@ block.inverted-sorter.description = Similar sortatorului standard, dar materialu block.router.description = Distribuie materialele primite în alte 3 direcții în mod egal. block.router.details = Un rău necesar. Nu folosi niciodată pt a introduce materiale în blocuri, căci vor fi blocate de produșii blocurilor. block.distributor.description = Distribuie materialele primite în alte 7 direcții în mod egal. -block.overflow-gate.description = Transportă materialele doar la stânga și dreapta dacă drumul din față este blocat. Nu poate fi folosită lângă alte porți. -block.underflow-gate.description = Opusul porții de revărsare. Transportă materialele în față dacă benzile din stânga și dreapta sunt blocate. Nu poate fi folosită lângă alte porți. +block.overflow-gate.description = Transportă materialele doar la stânga și dreapta dacă drumul din față este blocat. +block.underflow-gate.description = Opusul porții de revărsare. Transportă materialele în față dacă benzile din stânga și dreapta sunt blocate. block.mass-driver.description = Dispozitiv folosit pt transportul materialelor pe distanțe mari. Adună mai multe materiale și apoi le lansează până la un alt distributor în masă pe o rază mare. block.mechanical-pump.description = Pompează lichide din mediul înconjurător. Nu necesită electricitate. block.rotary-pump.description = Pompează lichide din mediul înconjurător. Necesită electricitate. @@ -1435,6 +1455,7 @@ block.ripple.description = Lovește cu capsule către inamici pe distanțe mari. block.cyclone.description = Trage cu grămezi explozive de material către unitățile inamice din apropiere. block.spectre.description = Trage cu gloanțe mari care penetrează scuturile inamicilor din apropiere. block.meltdown.description = Se încarcă și trage cu un laser continuu la inamicii din apropiere. Necesită răcitor pt a opera. +block.foreshadow.description = Trage către o țintă cu un glonț imens pe distanțe lungi. block.repair-point.description = Repară încontinuu cea mai deteriorată unitate din vecinătate. block.segment.description = Deteriorează și distruge proiectilele din apropiere. Laserele nu sunt afectate. block.parallax.description = Trage cu o rază tractoare care atrage aeronavele inamice, deteriorându-le. @@ -1448,10 +1469,10 @@ block.command-center.description = Controlează comportamentul unităților mili block.ground-factory.description = Produce unități de artilerie. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. block.air-factory.description = Produce unități aeriene. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. block.naval-factory.description = Produce unități navale. Unitățile produse pot fi folosite direct sau mutate în reconstructoare pt îmbunătățiri. -block.additive-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel doi. -block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel trei. -block.exponential-reconstructor.description = Îmbunătățește unitățile primite, tranformându-le în unități de nivel patru. -block.tetrative-reconstructor.description =Îmbunătățește unitățile primite, tranformându-le în unități de ltimă generație: nivelul cinci. +block.additive-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel doi. +block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel trei. +block.exponential-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel patru. +block.tetrative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de ltimă generație: nivelul cinci. block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Statusul său poate fi citit și controlat de procesoarele logice. block.micro-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. block.logic-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât microprocesorul. @@ -1495,3 +1516,127 @@ unit.omura.description = Trage cu un railgun cu gloanțe care penetrează scutur unit.alpha.description = Apără nucleul Shard de inamici. Construiește structuri. unit.beta.description = Apără nucleul Foundation de inamici. Construiește structuri. unit.gamma.description = Apără nucleul Core de inamici. Construiește structuri. + +lst.read = Citește un număr dintr-o celulă de memorie conectată. +lst.write = Scrie un număr într-o celulă de memorie conectată. +lst.print = Adaugă text în bufferul de tipărire.\nNu tipărește decât când se execută [accent]Print Flush[]. +lst.draw = Adaugă o operație în bufferul de desenare.\nNu afișează decât când se execută [accent]Draw Flush[]. +lst.drawflush = Afișează pe un monitor instrucțiunile [accent]Draw[] aflate în așteptare. +lst.printflush = Tipărește într-un bloc Mesaj instrucțiunile [accent]Print[] aflate în așteptare. +lst.getlink = Obține o conexiune a procesorului după index. Începe de la 0. +lst.control = Controlează o clădire. +lst.radar = Localizează unitățile aflate în jurul unei clădiri. Are o anumită rază de acțiune. +lst.sensor = Obține date de la o clădire sau unitate. +lst.set = Setează o variabilă. +lst.operation = Efectuează o operație pe 1-2 variabile. +lst.end = Sari la începutul listei de instrucțiuni. +lst.jump = Dacă condiția este adevărată, mergi la o altă instrucțiune. +lst.unitbind = Controlează următoarea unitate de tipul selectat și reține-o în [accent]@unit[]. +lst.unitcontrol = Controlează unitatea controlată de procesor. +lst.unitradar = Localizează unitățile din jurul unității controlate de procesor. +lst.unitlocate = Localizează o poziție/clădire specifică oriunde pe hartă.\nNecesită o unitate controlată de procesor. + +lenum.type = Tipul clădirii/unității.\nde ex.: pt orice Router, va returna [accent]@router[].\nNu e un șir de caractere. +lenum.shoot = Lovește către o locație. +lenum.shootp = Lovește către o unitate/clădire. Anticipează viteza țintei și a proiectilului. +lenum.configure = Configurașia clădirii, de ex. materialul selectat pt Sortator. +lenum.enabled = Specifică dacă clădirea este pornită. +lenum.color = Culoarea Iluminatorului. + +lenum.always = Mereu adevărat. +lenum.idiv = Împărțirea naturală a numerelor (int). +lenum.div = Împărțirea.\nReturnează [accent]null[] dacă împarți la 0. +lenum.mod = Modulo (restul împărțirii). +lenum.equal = Egal. Convertește tipurile variabilelor.\nObiectele nenule comparate cu numere devin 1, cele nule devin 0. +lenum.notequal = Nu e egal. Convertește tipurile variabilelor. +lenum.strictequal = Egalitate strictă. Nu convertește tipurile variabilelor.\nPoate fi folosit pt a verifica dacă ceva este [accent]null[]. +lenum.shl = Shift left pe biți. +lenum.shr = Shift right pe biți. +lenum.or = OR/SAU. Ține cont de biți. +lenum.land = Logical AND/ȘI logic. Nu ține cont de biți. +lenum.and = AND/ȘI. Ține cont de biți. +lenum.not = NOT. Inversează biții. +lenum.xor = XOR/disjuncție exclusivă. Ține cont de biți. + +lenum.min = Minimul a două numere. +lenum.max = Maximul a două numere. +lenum.angle = Unghiul unui vector în grade. +lenum.len = Lungimea unui vector. +lenum.sin = Sinus în grade. +lenum.cos = Cosinus în grade. +lenum.tan = Tangentă în grade. +#cea de mai jos nu-i o greșeală, caută pe net notarea intervalelor în matematică +lenum.rand = Număr aleatoriu în intervalul [0, val). +lenum.log = Logaritm natural (ln). +lenum.log10 = Logaritm în baza 10. +lenum.noise = 2D simplex noise. +lenum.abs = Valoarea absolută. +lenum.sqrt = Radical/rădăcina pătrată. + +lenum.any = Orice unitate. +lenum.ally = Unitate aliată. +lenum.attacker = Unitate cu armă. +lenum.enemy = Unitate inamică. +lenum.boss = Unitate gardian. +lenum.flying = Unitate care zboară. +lenum.ground = Unitate de artilerie. +lenum.player = Unitate controlată de un jucător. + +lenum.ore = Depozit de minereu. +lenum.damaged = Clădire aliată deteriorată. +lenum.spawn = Punct de lansare inamic.\nPoate fi un nucleu sau o poziție. +lenum.building = Clădire dintr-un grup specific. + +lenum.core = Orice nucleu. +lenum.storage = Clădire de stocare, de ex. Containerul. +lenum.generator = Clădiri care generează electricitate. +lenum.factory = Clădiri care transformă resurse. +lenum.repair = Puncte de Reparare. +lenum.rally = Centre de Comandă. +lenum.battery = Orice baterie. +lenum.resupply = Puncte de Realimentare.\nRelevant doar când [accent]"Unitățile Necesită Muniție"[] este activată. +lenum.reactor = Reactor de Toriu/Impact. +lenum.turret = Orice armă. + +sensor.in = Clădirea/unitatea care trebuie detectată. + +radar.from = Clădirea de la care detectăm.\nRaza senzorului e limitată de raza de costrucție. +radar.target = Filtru pt unitățile care trebuie detectate. +radar.and = Adaugă filtre. +radar.order = Ordinea de sortare. 0 pt a inversa ordinea. +radar.sort = Modul cum sortăm rezultatele. +radar.output = Variabila în care se va scrie unitatea detectată. + +unitradar.target = Filtru pt unitățile care trebuie detectate. +unitradar.and = Adaugă filtre. +unitradar.order = Ordinea de sortare. 0 pt a inversa ordinea. +unitradar.sort = Modul cum sortăm rezultatele. +unitradar.output = Variabila în care se reține unitatea detectată. + +control.of = Clădirea de controlat. +control.unit = Unitatea/clădirea către care se țintește. +control.shoot = Specifică dacă armele trag. + +unitlocate.enemy = Specifică dacă se detectează clădirile inamice. +unitlocate.found = Specifică dacă obiectul a fost găsit. +unitlocate.building = Clădirea detectată. +unitlocate.outx = Coordonata X a obiectului detectat. +unitlocate.outy = Coordonata Y a obiectului detectat. +unitlocate.group = Grupul clădirilor de detectat. + +lenum.stop = Oprește acțiunea curentă. Nu mișca/mina/construi. +lenum.move = Mergi la această poziție. +lenum.approach = Apropie-te la o anumită distanță de poziție. +lenum.pathfind = Găsește ruta către punctul de lansare inamic. Poate fi un nucleu. +lenum.target = Lovește către o poziție. +lenum.targetp = Lovește o țintă. Anticipează viteza țintei și a proiectilului. +lenum.itemdrop = Descarcă o bucată de material. +lenum.itemtake = Ia o bucată de material dintr-o clădire. +lenum.paydrop = Descarcă încărcătura curentă. +lenum.paytake = Ia o încărcătură de la locația curentă. +lenum.flag = Oferă o etichetă numerică unității. +lenum.mine = Minează din această locație. +lenum.build = Construiește o structură. +lenum.getblock = Obține clădirea și tipul clădirii aflate la coordonatele specificate.\nUnitatea trebuie să se afle în raza poziției.\nBlocurile solide care nu sunt clădiri vor avea tipul [accent]@solid[]. +lenum.within = Verifică dacă unitatea se află în apropierea poziției. +lenum.boost = Pornește/oprește propulsorul. diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 74c15811a725..59cc1caa9266 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -13,7 +13,7 @@ link.google-play.description = Скачать для Android с Google Play link.f-droid.description = Скачать для Android с F-Droid link.wiki.description = Официальная вики link.suggestions.description = Предложить новые возможности -link.bug.description = Нашли одну? Доложите о ней здесь +link.bug.description = Нашли ошибку? Доложите о ней здесь linkfail = Не удалось открыть ссылку!\nURL-адрес был скопирован в буфер обмена. screenshot = Скриншот сохранён в {0} screenshot.invalid = Карта слишком большая, возможно, не хватает памяти для скриншота. @@ -41,11 +41,13 @@ be.ignore = Игнорировать be.noupdates = Обновления не найдены. be.check = Проверить обновления -mod.featured.title = Обозреватель модов -mod.featured.dialog.title = Обозреватель модов +mods.browser = Браузер\nмодификаций mods.browser.selected = Выбранный мод -mods.browser.add = Установить мод -mods.github.open = Открыть GitHub страницу +mods.browser.add = Скачать +mods.browser.reinstall = Переустановить +mods.github.open = Сайт +mods.browser.sortdate = Сортировка по дате +mods.browser.sortstars = Сортировка по звёздам schematic = Схема schematic.add = Сохранить схему… @@ -64,7 +66,7 @@ schematic.saved = Схема сохранена. schematic.delete.confirm = Эта схема будет поджарена Испепелителем. schematic.rename = Переименовать схему schematic.info = {0}x{1}, {2} блоков -schematic.disabled = [scarlet]Схемы отключены[]\nНа этой [accent]карте[] или [accent]сервере запрещено использование схем. +schematic.disabled = [scarlet]Схемы отключены[]\nНа этой [accent]карте[] или [accent]сервере[] запрещено использование схем. stats = Статистика stat.wave = Волн отражено:[accent] {0} @@ -90,6 +92,7 @@ joingame = Сетевая игра customgame = Пользовательская игра newgame = Новая игра none = <ничего> +none.found = [lightgray]<ничего не найдено> minimap = Мини-карта position = Координаты close = Закрыть @@ -113,11 +116,13 @@ feature.unsupported = Ваше устройство не поддерживае mods.alphainfo = Имейте в виду, что модификации находятся в альфа-версии и [scarlet]могут содержать много ошибок[]. Докладывайте о любых проблемах, которые вы найдете в Mindustry Github. mods = Модификации mods.none = [lightgray]Модификации не найдены! -mods.guide = Руководство по модам +mods.guide = Руководство по модификациям mods.report = Доложить об ошибке mods.openfolder = Открыть папку с модификациями +mods.viewcontent = Просмотреть содержимое mods.reload = Перезагрузить mods.reloadexit = Игра будет закрыта для перезагрузки модификаций. +mod.installed = [[Установлено] mod.display = [gray]Модификация:[orange] {0} mod.enabled = [lightgray]Включён mod.disabled = [scarlet]Выключен @@ -136,15 +141,15 @@ mod.requiresrestart = Теперь игра закроется, чтобы пр mod.reloadrequired = [scarlet]Необходим перезапуск mod.import = Импортировать модификацию mod.import.file = Импортировать файл -mod.import.github = Импортировать мод с GitHub -mod.jarwarn = [scarlet]JAR-модификации по сути не безопасны.[]\nУбедитесь, что вы импортируете этот мод из надежного источника! +mod.import.github = Импортировать модификацию с GitHub +mod.jarwarn = [scarlet]JAR-модификации по сути не безопасны.[]\nУбедитесь, что вы импортируете эту модификацию из надёжного источника! mod.item.remove = Этот предмет является частью модификации [accent]«{0}[accent]»[white]. Чтобы удалить его, удалите саму модификацию. mod.remove.confirm = Эта модификация будет удалена. mod.author = [lightgray]Автор(ы):[] {0} mod.missing = В этом сохранении есть следы модификации, которая отсутствует или установлена её обновлённая версия. Может произойти повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0} mod.preview.missing = Перед публикацией этой модификации в Мастерской, вы должны добавить изображение предпросмотра.\nРазместите изображение с именем[accent] preview.png[] в папке модификации и попробуйте снова. mod.folder.missing = Модификации могут быть опубликованы в Мастерской только в виде папки.\nЧтобы конвертировать любой мод в папку, просто извлеките его из архива и удалите старый архив .zip, затем перезапустите игру или перезагрузите модификации. -mod.scripts.disable = Ваше устройство не поддерживает модификации со скриптами. Отключите такие моды, чтобы играть. +mod.scripts.disable = Ваше устройство не поддерживает модификации со скриптами. Отключите такие модификации, чтобы играть. about.button = Об игре name = Имя: @@ -287,6 +292,7 @@ cancel = Отмена openlink = Открыть ссылку copylink = Скопировать ссылку back = Назад +max = Заполнить полностью crash.export = Экспорт отчёта об ошибках crash.none = Отчёты об ошибках не найдены. crash.exported = Отчёты об ошибках экспортированы. @@ -306,6 +312,7 @@ cancelbuilding = [accent][[{0}][] для очистки плана selectschematic = [accent][[{0}][] выделить и скопировать pausebuilding = [accent][[{0}][] для приостановки строительства resumebuilding = [scarlet][[{0}][] для продолжения строительства +enablebuilding = [scarlet][[{0}][] для включения строительства showui = Интерфейс скрыт.\nНажмите [accent][[{0}][] для отображения интерфейса. wave = [accent]Волна {0} wave.cap = [accent]Волна {0}/{1} @@ -326,9 +333,9 @@ custom = Пользовательская builtin = Встроенная map.delete.confirm = Вы действительно хотите удалить эту карту? Это действие не может быть отменено! map.random = [accent]Случайная карта -map.nospawn = Эта карта не имеет ни одного ядра, в котором игрок может появиться! Добавьте[accent] оранжевое[] ядро на эту карту в редакторе. -map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте[scarlet] не оранжевое[] ядро на эту карту в редакторе. -map.nospawn.attack = У этой карты нет вражеских ядер для атаки игроком! Добавьте[scarlet] красное[] ядро на эту карту в редакторе. +map.nospawn = Эта карта не имеет ни одного ядра, в котором игрок может появиться! Добавьте [accent]оранжевое[] ядро на эту карту в редакторе. +map.nospawn.pvp = У этой карты нет вражеских ядер, в которых игрок может появиться! Добавьте [scarlet]не оранжевое[] ядро на эту карту в редакторе. +map.nospawn.attack = У этой карты нет вражеских ядер для атаки игроком! Добавьте [scarlet]красное[] ядро на эту карту в редакторе. map.invalid = Ошибка загрузки карты: повреждённый или недопустимый файл карты. workshop.update = Обновить содержимое workshop.error = Ошибка загрузки информации из Мастерской: {0} @@ -361,12 +368,11 @@ editor.center = Центрировать workshop = Мастерская waves.title = Волны waves.remove = Удалить -waves.never = ∞ waves.every = каждый waves.waves = волна(ы) waves.perspawn = за появление waves.shields = ед. щита/волну -waves.to = к +waves.to = до waves.guardian = Страж waves.preview = Предварительный просмотр waves.edit = Редактировать… @@ -390,7 +396,7 @@ editor.removeunit = Удалить боевую единицу editor.teams = Команды editor.errorload = Ошибка загрузки файла. editor.errorsave = Ошибка сохранения файла. -editor.errorimage = Это изображение, а не карта.\n\nЕсли вы хотите импортировать карту версии 3.5/40 сборки, то используйте кнопку [accent][Импортировать устаревшую карту][] в редакторе. +editor.errorimage = Это изображение, а не карта. editor.errorlegacy = Эта карта слишком старая и использует устаревший формат карты, который больше не поддерживается. editor.errornot = Это не файл карты. editor.errorheader = Этот файл карты недействителен или повреждён. @@ -678,6 +684,7 @@ stat.drillspeed = Базовая скорость бурения stat.boosteffect = Ускоряющий эффект stat.maxunits = Максимальное количество активных единиц stat.health = Прочность +stat.armor = Броня stat.buildtime = Время строительства stat.maxconsecutive = Макс. последовательность stat.buildcost = Стоимость строительства @@ -693,6 +700,7 @@ stat.lightningchance = Шанс удара молнии stat.lightningdamage = Урон молнии stat.flammability = Воспламеняемость stat.radioactivity = Радиоактивность +stat.charge = Заряд stat.heatcapacity = Теплоёмкость stat.viscosity = Вязкость stat.temperature = Температура @@ -720,6 +728,7 @@ bar.corereq = Требуется основа ядра bar.drillspeed = Скорость бурения: {0}/с bar.pumpspeed = Скорость выкачивания: {0}/с bar.efficiency = Эффективность: {0}% +bar.boost = Ускорение: {0}% bar.powerbalance = Энергия: {0}/с bar.powerstored = Накоплено: {0}/{1} bar.poweramount = Энергия: {0} @@ -787,6 +796,7 @@ setting.shadows.name = Тени setting.blockreplace.name = Автоматическая замена блоков setting.linear.name = Линейная фильтрация setting.hints.name = Подсказки +setting.logichints.name = Подсказки для логики setting.flow.name = Показывать скорость потока ресурсов setting.backgroundpause.name = Фоновая пауза setting.buildautopause.name = Автоматическая приостановка строительства @@ -918,6 +928,7 @@ keybind.toggle_menus.name = Переключение меню keybind.chat_history_prev.name = Пред. история чата keybind.chat_history_next.name = След. история чата keybind.chat_scroll.name = Прокрутка чата +keybind.chat_mode.name = Изменить режим чата keybind.drop_unit.name = Сбросить боев. ед. keybind.zoom_minimap.name = Масштабировать мини-карту mode.help.title = Описание режимов @@ -934,6 +945,7 @@ mode.custom = Пользовательские правила rules.infiniteresources = Бесконечные ресурсы (Игрок) rules.reactorexplosions = Взрывы реакторов +rules.coreincinerates = Ядро сжигает избыток ресурсов rules.schematic = Схемы разрешены rules.wavetimer = Интервал волн rules.waves = Волны @@ -1307,7 +1319,7 @@ item.sand.description = Используется в производстве д item.coal.description = Используется как топливо и в производстве обработанных материалов. item.coal.details = Похоже, что это окаменевшее растительное вещество, образовавшееся задолго до Посева. item.titanium.description = Широко используется в транспортировке жидкостей, бурах и авиации. -item.thorium.description = Используется в прочных постройках и как ядерного топлива. +item.thorium.description = Используется в прочных постройках и как ядерное топливо. item.scrap.description = Используется в плавильнях и измельчителях для получения других материалов. item.scrap.details = Остатки старых построек и единиц. item.silicon.description = Используется в солнечных панелях, сложной электронике и самонаводящихся боеприпасах для турелей. @@ -1380,8 +1392,8 @@ block.inverted-sorter.description = Работает так же, как и ст block.router.description = Равномерно распределяет входящие предметы по 3 выходящим направлениям. block.router.details = Необходимое зло. Не рекомендуется к использованию как блок ввода возле производственных зданий, т.к. может случиться затор выходным материалом. block.distributor.description = Равномерно распределяет входящие предметы по 7 выходящим направлениям. -block.overflow-gate.description = Выводит предметы по бокам, только если передний путь заблокирован. Нельзя использовать вплотную к другим затворам или шлюзам. -block.underflow-gate.description = Противоположность избыточного затвора. Выводит предметы вперёд только в том случае, если боковые пути заблокированы. Нельзя использовать вплотную к другим шлюзам или затворам. +block.overflow-gate.description = Выводит предметы по бокам, только если передний путь заблокирован. +block.underflow-gate.description = Противоположность избыточного затвора. Выводит предметы вперёд только в том случае, если боковые пути заблокированы. block.mass-driver.description = Постройка для дальней транспортировки предметов. Собирает несколько предметов и затем стреляет ими в другие катапульты. block.mechanical-pump.description = Перекачивает и выводит жидкости. Не требует энергию. block.rotary-pump.description = Перекачивает и выводит жидкости. Требует энергию. @@ -1494,11 +1506,135 @@ unit.poly.description = Автоматически восстанавливае unit.mega.description = Автоматически ремонтирует повреждённые постройки. Может переносить блоки и небольшие единицы. unit.quad.description = Сбрасывает большие бомбы на наземные цели, восстанавливая союзные постройки и повреждая врагов. Может переносить единицы среднего размера. unit.oct.description = Защищает союзников поблизости при помощи своего восстанавливающегося щита. Может переносить большинство наземных единиц. -unit.risso.description = Стреляет залпом ракет и пуль по всем врагам поблизости. +unit.risso.description = Стреляет залпами ракет и пуль по всем врагам поблизости. unit.minke.description = Стреляет зажигательными снарядами и стандартными пулями по наземным целям. unit.bryde.description = Стреляет дальнобойными артиллерийскими снарядами и ракетами по врагам. -unit.sei.description = Стреляет залпом ракет и бронебойных пуль по врагам. +unit.sei.description = Стреляет залпами ракет и бронебойных пуль по врагам. unit.omura.description = Стреляет дальнобойным пробивающим снарядом из рельсотрона по врагам. Производит единицы «Вспышка». unit.alpha.description = Защищает ядро «Осколок» от врагов. Основная строительная единица. unit.beta.description = Защищает ядро «Штаб» от врагов. Основная строительная единица. unit.gamma.description = Защищает ядро «Атом» от врагов. Основная строительная единица. + +lst.read = Считывает число из соединённой ячейки памяти. +lst.write = Записывает число в соединённую ячейку памяти. +lst.print = Добавляет текст в текстовый буфер. Ничего не отображает, пока не будет вызван [accent]Print Flush[]. +lst.draw = Добавляет операцию в буфер отрисовки. Ничего не отображает, пока не будет вызван [accent]Draw Flush[]. +lst.drawflush = Сбрасывает буфер [accent]Draw[] операций на дисплей. +lst.printflush = Сбрасывает буфер [accent]Print[] операций в блок-сообщение. +lst.getlink = Получает соединение процессора по индексу. Начинает с 0. +lst.control = Контролирует блок. +lst.radar = Обнаруживает единицы вокруг постройки с заданным радиусом. +lst.sensor = Получает данные из постройки или единицы. +lst.set = Устанавливает переменную. +lst.operation = Совершает операцию над 1-2 переменными. +lst.end = Переходит к началу стека операций. +lst.jump = Условно переходит к другой операции. +lst.unitbind = Привязывается к единице определённого типа и сохраняет её в [accent]@unit[]. +lst.unitcontrol = Управляет привязанной в данный момент единицей. +lst.unitradar = Обнаруживает единицы вокруг привязанной в данный момент единицы. +lst.unitlocate = Обнаруживает позицию/постройку определённого типа где-либо на карте. Требует привязанную единицу. + +lenum.type = Тип постройки/единицы. \nНапример, для маршрутизатора это будет [accent]@router[].\nНе строка. +lenum.shoot = Стрельба в определённую позицию. +lenum.shootp = Стрельба в единицу/постройку с расчётом скорости. +lenum.configure = Конфигурация постройки, например, предмет сортировки. +lenum.enabled = Включён ли блок. +lenum.color = Цвет осветителя. + +lenum.always = Всегда истина. +lenum.idiv = Целочисленное деление. +lenum.div = Деление.\nВозвращает [accent]null[] при делении на ноль. +lenum.mod = Остаток от деления. +lenum.equal = Равно. Приводит типы.\nНе-null объекты, по сравнению с числами, становятся 1, иначе — 0. +lenum.notequal = Не равно. Приводит типы. +lenum.strictequal = Строгое равенство. Не приводит типы.\nМожет быть использовано для проверки на [accent]null[]. +lenum.shl = Побитовый сдвиг влево. +lenum.shr = Побитовый сдвиг вправо. +lenum.or = Побитовое ИЛИ. +lenum.land = Булевое И. +lenum.and = Побитовое И. +lenum.not = Побитовое НЕ. +lenum.xor = Побитовое исключающее ИЛИ. + +lenum.min = Минимальное из двух чисел. +lenum.max = Максимальное из двух чисел. +lenum.angle = Угол вектора в градусах. +lenum.len = Длина вектора. +lenum.sin = Синус, в градусах. +lenum.cos = Косинус, в градусах. +lenum.tan = Тангенс, в градусах. +#это не ошибка, поищите 'обозначение диапазонов' +lenum.rand = Случайное число в диапазоне [0, значение). +lenum.log = Натуральный логарифм (ln). +lenum.log10 = Логарифм по основанию 10. +lenum.noise = Симплексный шум, 2D. +lenum.abs = Абсолютная величина. +lenum.sqrt = Квадратный корень. + +lenum.any = Любая единица. +lenum.ally = Дружеская единица. +lenum.attacker = Единица с оружием. +lenum.enemy = Вражеская единица. +lenum.boss = Страж. +lenum.flying = Летающая единица. +lenum.ground = Наземная единица. +lenum.player = Единица, управляемая игроком. + +lenum.ore = Источник руды. +lenum.damaged = Повреждённая дружеская постройка. +lenum.spawn = Точка появления врагов.\nМожет быть ядром или позицией на карте. +lenum.building = Постройка определённой группы. + +lenum.core = Любое ядро. +lenum.storage = Здание хранения, например, хранилище. +lenum.generator = Постройки, вырабатывающие энергию. +lenum.factory = Постройки, перерабатывающие предметы. +lenum.repair = Ремонтные пункты. +lenum.rally = Командный центр. +lenum.battery = Любой аккумулятор. +lenum.resupply = Пункты снабжения.\nАктуально только при включённом [accent]"Боев. ед. требуют боеприпасы"[]. +lenum.reactor = Импульсный/ториевый реактор. +lenum.turret = Любая турель. + +sensor.in = Постройка/единица для распознавания. + +radar.from = Постройка, от которой распознавать.\nДальность сенсора ограничена дальностью постройки. +radar.target = Фильтр для распознавания единиц. +radar.and = Дополнительные фильтры. +radar.order = Порядок сортировки. 0 для обратного. +radar.sort = Показатель для сортировки результатов. +radar.output = Переменная для записи конечной единицы. + +unitradar.target = Фильтр для распознавания единиц. +unitradar.and = Дополнительные фильтры. +unitradar.order = Порядок сортировки. 0 для обратного. +unitradar.sort = Показатель для сортировки результатов. +unitradar.output = Переменная для записи конечной единицы. + +control.of = Постройка для контролирования. +control.unit = Единица/постройка для прицеливания. +control.shoot = Стрелять ли. + +unitlocate.enemy = Обнаруживать ли вражеские постройки. +unitlocate.found = Найден ли объект. +unitlocate.building = Переменная для записи обнаруженной постройки. +unitlocate.outx = Вывод X координаты. +unitlocate.outy = Вывод Y координаты. +unitlocate.group = Группа построек для поиска. + +lenum.stop = Остановка передвижения/копания/стротельства. +lenum.move = Перемещение в определённую позицию. +lenum.approach = Приближение к позиции с указанным радиусом. +lenum.pathfind = Перемещение к точке появления врагов. +lenum.target = Стрельба в определённую позицию. +lenum.targetp = Стрельба в единицу/постройку с расчётом скорости. +lenum.itemdrop = Сбрасывание предметов. +lenum.itemtake = Взятие предметов из постройки. +lenum.paydrop = Сбрасывание текущего груза. +lenum.paytake = Взятие груза на текущей позиции. +lenum.flag = Числовой флаг единицы. +lenum.mine = Копание в позиции. +lenum.build = Строительство структур. +lenum.getblock = Распознавание блока и его типа на координатах.\nЕдиница должна находиться в пределах досягаемости.\nТвёрдые не-постройки будут иметь тип [accent]@solid[]. +lenum.within = Проверка на нахождение единицы рядом с позицией. +lenum.boost = Включение/выключение полёта. diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 930887461d4e..01b8310b1940 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -331,7 +331,7 @@ editor.generation = การเกิด: editor.ingame = แก้ไขในเกม editor.publish.workshop = เผยแพร่บน Workshop editor.newmap = แมพใหม่ -editor.center = Center +editor.center = ศูนย์กลางแมพ workshop = Workshop waves.title = Waves waves.remove = ลบ @@ -352,7 +352,7 @@ waves.none = ไม่ได้กำหนดศัตรู\nwave layouts เ wavemode.counts = จำนวน wavemode.totals = ทั้งหมด -wavemode.health = health +wavemode.health = เลือด editor.default = [lightgray]<ค่าเริ่่มต้น> details = รสยละเอียด... @@ -512,7 +512,7 @@ weather.rain.name = ฝน weather.snow.name = หิมะ weather.sandstorm.name = พายุทราย weather.sporestorm.name = พายุสปอร์ -weather.fog.name = Fog +weather.fog.name = หมอก sectors.unexplored = [lightgray]ยังไม่ได้สำรวจ sectors.resources = ทรัพยากร: @@ -523,7 +523,7 @@ sectors.launch = ส่ง sectors.select = เลือก sectors.nonelaunch = [lightgray]none (sun) sectors.rename = Rename Sector -sector.missingresources = [scarlet]Insufficient Core Resources +sector.missingresources = [scarlet]สิ่งของทำ core ไม่ครบ planet.serpulo.name = Serpulo planet.sun.name = Sun @@ -566,10 +566,10 @@ settings.clear.confirm = คุณแน่ใจหรือว่าจะเ settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ, แมพ, สิ่งที่ปลดล็อคแล้วและ keybinds.\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด? settings.clearsaves = เคลียร์เซฟ -settings.clearresearch = Clear Research -settings.clearresearch.confirm = Are you sure you want to clear all of your campaign research? -settings.clearcampaignsaves = Clear Campaign Saves -settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? +settings.clearresearch = ลบการ Research +settings.clearresearch.confirm = แน่ใจที่จะลบการ Research หรือไม่? +settings.clearcampaignsaves = ลบเซฟ Campaign +settings.clearcampaignsaves.confirm = แน่ใจที่จะลบเซฟ Campaign หรือไม่? paused = [accent]< หยุดชั่วคราว > clear = เคลียร์ banned = [scarlet]แบน @@ -580,14 +580,14 @@ info.title = ข้อมูล error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น unit.nobuild = [scarlet]ยูนิตไม่สามารถสร้างได้ -lastaccessed = [lightgray]Last Accessed: {0} +lastaccessed = [lightgray]:คนที่แตะเป็นคนสุดท้าย {0} block.unknown = [lightgray]??? stat.input = นำเข้า stat.output = ส่งออก stat.booster = บูสเตอร์ stat.tiles = ต้องการ Tiles -stat.affinities = Affinities +stat.affinities = affinities stat.powercapacity = ความจุพลังงาน stat.powershot = หน่วยพลังงาน/นัด stat.damage = ดาเมจ @@ -600,13 +600,13 @@ stat.size = ขนาด stat.displaysize = ขนาดที่โชว์ stat.liquidcapacity = จุของเหลว stat.powerrange = ระยะพลังงาน -stat.linkrange = Link Range +stat.linkrange = ระยะการเชื่อมต่อ stat.instructions = คำแนะนำ stat.powerconnections = จำนวนการเชื่อมต่อสูงสุด stat.poweruse = ใช้พลังงาน stat.powerdamage = หน่วยพลังงาน/ดาเมจ stat.itemcapacity = จุไอเท็ม -stat.memorycapacity = Memory Capacity +stat.memorycapacity = ความจุหน่วยความจำ stat.basepowergeneration = กำเนิดพลังงานพื้นฐาน stat.productiontime = เวลาที่ใช้ในการผลิต stat.repairtime = เวลาที่ใช้ในการซ่อมแซมให้สมบูรณ์ @@ -626,28 +626,28 @@ stat.reload = นัด/วินาที stat.ammo = กระสุน stat.shieldhealth = เลือดของเกราะ stat.cooldowntime = เวลา Cooldown -stat.explosiveness = Explosiveness -stat.basedeflectchance = Base Deflect Chance -stat.lightningchance = Lightning Chance -stat.lightningdamage = Lightning Damage -stat.flammability = Flammability -stat.radioactivity = Radioactivity -stat.heatcapacity = HeatCapacity +stat.explosiveness = ความแรงของระเบิด +stat.basedeflectchance = โอกาสกระสุนกระเด็นกลับ +stat.lightningchance = โอกาสที่จะเกิดสายฟ้า +stat.lightningdamage = ความแรงของสายฟ้า +stat.flammability = ความไวไฟ +stat.radioactivity = ความแรงของรังสี +stat.heatcapacity = ความจุความร้อน stat.viscosity = Viscosity -stat.temperature = Temperature -stat.speed = Speed -stat.buildspeed = Build Speed -stat.minespeed = Mine Speed -stat.minetier = Mine Tier -stat.payloadcapacity = Payload Capacity -stat.commandlimit = Command Limit -stat.abilities = Abilities +stat.temperature = อุณหภูมิ +stat.speed = ความไว +stat.buildspeed = ความไวในการก่อสร้าง +stat.minespeed = ความไวในการขุด +stat.minetier = ความแรงของเลเซอร์ขุด +stat.payloadcapacity = ความจุการขนของ +stat.commandlimit = จำนวน Unit ที่สามารถสูงสุด +stat.abilities = ทักษะ -ability.forcefield = Force Field -ability.repairfield = Repair Field -ability.statusfield = Status Field -ability.unitspawn = {0} Factory -ability.shieldregenfield = Shield Regen Field +ability.forcefield = สนามพลัง +ability.repairfield = รักษา Unit รอบข้าง +ability.statusfield = บัฟ Unit รอบข้าง +ability.unitspawn = โรงงานทำ {0} +ability.shieldregenfield = บัฟโล่รอบข้าง bar.drilltierreq = จำเป็นต้องใช้เครื่องขุดที่ดีกว่า bar.noresources = ทรัพยากรหาย @@ -671,7 +671,7 @@ bar.progress = ความคืบหน้าในการสร้าง bar.input = นำเข้า bar.output = ส่งออก -units.processorcontrol = [lightgray]Processor Controlled +units.processorcontrol = [lightgray]ถูก Processor ควบคุม bullet.damage = [stat]{0}[lightgray] ดาเมจ bullet.splashdamage = [stat]{0}[lightgray] ดาเมจกระจาย ~[stat] {1}[lightgray] ช่อง @@ -680,8 +680,8 @@ bullet.homing = [stat]ติดตาม bullet.shock = [stat]ช็อค bullet.frag = [stat]แตกออก bullet.knockback = [stat]{0}[lightgray] ดันกลับ -bullet.pierce = [stat]{0}[lightgray]x pierce -bullet.infinitepierce = [stat]pierce +bullet.pierce = [stat]{0}[lightgray]x ทะลุ +bullet.infinitepierce = [stat]ทะลุ bullet.freezing = [stat]แช่แข็ง bullet.tarred = [stat]เปื้อนน้ำมัน bullet.multiplier = [stat]{0}[lightgray]x จำนวนกระสุนต่อ 1 ไอเท็ม @@ -696,9 +696,9 @@ unit.liquidunits = หน่วยของเหลว unit.powerunits = หน่วยพลังงาน unit.degrees = องศา unit.seconds = วินาที -unit.minutes = mins +unit.minutes = นาที unit.persecond = /วินาที -unit.perminute = /min +unit.perminute = /ต่อนาที unit.timesspeed = เท่าเร็วขึ้น unit.percent = % unit.shieldhealth = เลือดเกราะ @@ -729,7 +729,7 @@ setting.autotarget.name = เล็งเป้าอัตโนมัติ setting.keyboard.name = การควบคุมแบบ เม้าส์+คีย์บอร์ด setting.touchscreen.name = การควบคุมแบบหน้าจอสัมผัส setting.fpscap.name = FPS -setting.fpscap.none = ไม่มี +setting.fpscap.none = ∞ setting.fpscap.text = {0} FPS setting.uiscale.name = ขนาด UI[lightgray] (จำเป็นต้องรีสตาร์ท)[] setting.swapdiagonal.name = การวางเป็นเส้นทแยงเสมอ @@ -803,8 +803,8 @@ keybind.pan.name = แพนวิว keybind.boost.name = บูสต์ keybind.schematic_select.name = เลือกภูมิภาค keybind.schematic_menu.name = เมนู Schematic -keybind.schematic_flip_x.name = กลับ Schematic ในแกน X -keybind.schematic_flip_y.name = กลับ Schematic ในแกน Y +keybind.schematic_flip_x.name = กลับแผนผังแกน X +keybind.schematic_flip_y.name = กลับแผนผังแกน Y keybind.category_prev.name = หมวดหมู่ก่อนหน้า keybind.category_next.name = หมวดหมู่ถ้ดไป keybind.block_select_left.name = เลือกบล็อค ซ้าย @@ -821,7 +821,7 @@ keybind.block_select_07.name = หมวดหมู่/เลือกบล็ keybind.block_select_08.name = หมวดหมู่/เลือกบล็อค 8 keybind.block_select_09.name = หมวดหมู่/เลือกบล็อค 9 keybind.block_select_10.name = หมวดหมู่/เลือกบล็อค 10 -keybind.fullscreen.name = เปิด/ปิด Fullscreen +keybind.fullscreen.name = เปิด/ปิด เต็มจอ keybind.select.name = เลือก/ยิง keybind.diagonal_placement.name = วางเป็นแนวทแยง keybind.pick.name = เลือกบล็อค @@ -861,7 +861,7 @@ mode.custom = กฎแบบกำหนดเอง rules.infiniteresources = ทรัพยากรไม่จำกัด rules.reactorexplosions = การระเบิดของ -rules.schematic = Schematics Allowed +rules.schematic = อนุญาตแผนผัง rules.wavetimer = ตัวนับเวลาปล่อยคลื่น(รอบ) rules.waves = คลื่น(รอบ) rules.attack = โหมดการโจมตี @@ -884,10 +884,10 @@ rules.title.waves = คลื่น(รอบ) rules.title.resourcesbuilding = ทรัพยากรและสิ่งก่อสร้าง rules.title.enemy = ศัตรู rules.title.unit = ยูนิต -rules.title.experimental = Experimental +rules.title.experimental = ทดลอง rules.title.environment = สิ่งแวดล้อม rules.lighting = แสง -rules.enemyLights = Enemy Lights +rules.enemyLights = ไฟศัตรู rules.fire = ไฟ rules.explosions = ดาเมจบล็อค/ยูนิตระเบิด rules.ambientlight = แสงจากแวดล้อม @@ -960,8 +960,8 @@ block.parallax.name = พาราแล็ซ block.cliff.name = หน้าผ่า block.sand-boulder.name = ก้อนหินทราย block.grass.name = หญ้า -block.slag.name = Slag -block.space.name = Space +block.slag.name = กากแร่ +block.space.name = อวกาศ block.salt.name = เกลือ block.salt-wall.name = กำแพงเกลือ block.pebbles.name = ก้อนกรวด @@ -1007,7 +1007,7 @@ block.darksand-water.name = น้ำบนทรายดำ block.char.name = ถ่าน block.dacite.name = ดาไซต์ block.dacite-wall.name = กำแพงดาไซต์ -block.dacite-boulder.name = Dacite Boulder +block.dacite-boulder.name = โขดหินดาไซต์ block.ice-snow.name = น้ำแข็งหิมะ block.stone-wall.name = กำแพงหิน block.ice-wall.name = กำแพงน้ำแข็ง @@ -1102,7 +1102,7 @@ block.power-source.name = จุดกำเนิดพลังงาน block.unloader.name = ตัวถ่ายไอเทม block.vault.name = ตู้นิรภัย block.wave.name = เวฟ -block.tsunami.name = Tsunami +block.tsunami.name = สึนามิ block.swarmer.name = สวอร์มเมอร์ block.salvo.name = ซัลโว block.ripple.name = ริปเปิล @@ -1142,11 +1142,11 @@ block.arc.name = อาร์ค block.rtg-generator.name = เครื่องกำเนิดไฟฟ้า RTG block.spectre.name = สเปคเตอร์ block.meltdown.name = เมลท์ดาวน์ -block.foreshadow.name = Foreshadow +block.foreshadow.name = ฟอร์ชาโดว์ block.container.name = ตู้เก็บของ block.launch-pad.name = ฐานส่งของ block.launch-pad-large.name = ฐานส่งของขนาดใหญ่ -block.segment.name = Segment +block.segment.name = เซ็กเมนต์ block.command-center.name = ศูนย์ควบคุม block.ground-factory.name = โรงงานภาคพื้นดิน block.air-factory.name = โรงงานภาคอากาศ diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index bdb83b4ca335..5f1154570298 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -59,8 +59,10 @@ schematic.disabled = [scarlet]Схеми вимкнені[]\nВам не доз mod.featured.title = Переглядач модифікацій mod.featured.dialog.title = Переглядач модифікацій mods.browser.selected = Обрана модифікація -mods.browser.add = Установити модифікацію -mods.github.open = Відкрити в Github +mods.browser.add = Установити +mods.github.open = Відкрити +mods.browser.sortdate = Сортувати за давністю +mods.browser.sortstars = Сортувати за кількостю зірок stats = Статистика stat.wave = Хвиль відбито:[accent] {0} @@ -85,6 +87,7 @@ joingame = Мережева гра customgame = Користувацька гра newgame = Нова гра none = <нічого> +none.found = [lightgray]<нічого не знайдено> minimap = Мінімапа position = Місцезнаходження close = Закрити @@ -278,6 +281,7 @@ cancel = Скасувати openlink = Перейти за посиланням copylink = Скопіювати посилання back = Назад +max = Макс. crash.export = Експортувати аварійні звіти crash.none = Аварійних звітів не знайдено crash.exported = Аварійні звіти експортовано @@ -351,7 +355,6 @@ editor.center = Центрувати workshop = Майстерня waves.title = Хвилі waves.remove = Видалити -waves.never = <ніколи> waves.every = кожен waves.waves = хвиля(і) waves.perspawn = за появу @@ -377,7 +380,7 @@ editor.removeunit = Видалити бойову одиницю editor.teams = Команди editor.errorload = Помилка завантаження зображення. editor.errorsave = Помилка збереження зображення. -editor.errorimage = Це зображення, а не мапа.\n\nЯкщо ви хочете імпортувати застарілу мапу, то використовуйте кнопку «Імпортувати застарілу мапу» в редакторі. +editor.errorimage = Це зображення, а не мапа. editor.errorlegacy = Ця мапа занадто стара і використовує попередній формат мапи, який більше не підтримується. editor.errornot = Це не мапа. editor.errorheader = Цей файл мапи недійсний або пошкоджений. @@ -676,6 +679,7 @@ stat.commandlimit = Максимум у загоні stat.abilities = Здібності stat.canboost = Можна прискорити stat.flying = Літає +stat.ammouse = Патронів використовує ability.forcefield = Щитове поле ability.repairfield = Ремонтувальне поле ability.statusfield = Поле підсилення @@ -688,6 +692,7 @@ bar.corereq = Необхідне основне ядро bar.drillspeed = Швидкість буріння: {0} за с. bar.pumpspeed = Швидкість викачування: {0} за с. bar.efficiency = Ефективність: {0}% +bar.boost = Підсилення: {0}% bar.powerbalance = Енергія: {0} за с. bar.powerstored = Зберігає: {0}/{1} bar.poweramount = Енергія: {0} @@ -696,7 +701,6 @@ bar.powerlines = З’єднань: {0}/{1} bar.items = Предмети: {0} bar.capacity = Місткість: {0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[одиниця вимкнена] bar.liquid = Рідина bar.heat = Нагрівання bar.power = Енергія @@ -711,6 +715,7 @@ bullet.sapping = [stat]виснажує bullet.homing = [stat]самонаведення bullet.shock = [stat]шок bullet.frag = [stat]шкода по ділянці +bullet.buildingdamage = [stat]{0}%[lightgray] шкода по будівлям bullet.knockback = [stat]{0}[lightgray] відкидання bullet.pierce = [stat]{0}[lightgray]x пробиття bullet.infinitepierce = [stat]пробиття @@ -738,6 +743,7 @@ unit.items = предм. unit.thousands = тис unit.millions = млн unit.billions = млрд +unit.pershot = за постріл category.purpose = Призначення category.general = Загальне category.power = Енергія @@ -806,6 +812,7 @@ setting.lasersopacity.name = Непрозорість лазерів енерг setting.bridgeopacity.name = Непрозорість мостів setting.playerchat.name = Показувати хмару чата над гравцями public.confirm = Ви хочете зробити цю гру загальнодоступною?\n[accent]Будь-хто може приєднатися до вашої гри.\n[lightgray]Це можна змінити в Налаштування->Гра->Загальнодоступність гри. +public.confirm.really = Якщо ви хочете грати з друзями, використовуйте [green]Запросити друзів[] замість [scarlet]Публічного серверу[]!\nВи справді хочете зробити свою гру [scarlet]публічною[]? public.beta = Зауважте, що в бета-версії гри ви не можете робити публічні ігри. uiscale.reset = Масштаб користувацького інтерфейсу було змінено.\nНатисніть «Гаразд» для підтвердження цього масштабу.\n[scarlet]Повернення налаштувань і вихід через[accent] {0}[] секунд… uiscale.cancel = Скасувати і вийти @@ -880,6 +887,7 @@ keybind.toggle_menus.name = Меню перемикання keybind.chat_history_prev.name = Попередня історія чату keybind.chat_history_next.name = Наступна історія чату keybind.chat_scroll.name = Прокрутка чату +keybind.chat_mode.name = Змінити режим чату keybind.drop_unit.name = Скинути бойову одиницю keybind.zoom_minimap.name = Збільшити мінімапу mode.help.title = Опис режимів гри @@ -895,6 +903,7 @@ mode.attack.description = Зруйнуйте ворожу базу. \n[gray]По mode.custom = Користувацькі правила rules.infiniteresources = Нескінченні ресурси rules.reactorexplosions = Вибухи реактора +rules.coreincinerates = Ядро спалює надлишкові предмети rules.schematic = Використання схем дозволено rules.wavetimer = Таймер для хвиль rules.waves = Хвилі diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index d45c16a170a9..cc33ff9bee9c 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -83,13 +83,13 @@ joingame = Tham gia trò chơi customgame = Tùy chỉnh newgame = Trò chơi mới none = -minimap = Bản đồ mini +minimap = Bản đồ nhỏ position = Vị trí close = Đóng website = Website quit = Thoát save.quit = Lưu & Thoát -maps = Maps +maps = Bản đồ maps.browse = Duyệt bản đồ continue = Tiếp tục maps.none = [lightgray]Không có bản đồ nào được tìm thấy! @@ -971,19 +971,19 @@ item.graphite.name = Than chì item.titanium.name = Titan item.thorium.name = Thorium item.silicon.name = Silicon -item.plastanium.name = Plastanium +item.plastanium.name = Nhựa item.phase-fabric.name = Phase Fabric -item.surge-alloy.name = Surge Alloy +item.surge-alloy.name = Hợp kim item.spore-pod.name = Vỏ bào tử item.sand.name = Cát item.blast-compound.name = Chất nổ -item.pyratite.name = Pyratite -item.metaglass.name = Metaglass +item.pyratite.name = Tiền chất nổ +item.metaglass.name = Thuỷ tinh item.scrap.name = Phế liệu liquid.water.name = Nước liquid.slag.name = Xỉ nóng chảy liquid.oil.name = Dầu -liquid.cryofluid.name = Cryofluid +liquid.cryofluid.name = Chất làm lạnh #Why we should translate this ??? unit.dagger.name = Dagger @@ -1050,8 +1050,8 @@ block.scrap-wall-huge.name = Tường phế liệu khổng lồ block.scrap-wall-gigantic.name = Tường phế liệu siêu khổng lồ block.thruster.name = Thruster block.kiln.name = Lò nung -block.graphite-press.name = Máy nén thang chì -block.multi-press.name = Máy nén thang chì lớn +block.graphite-press.name = Máy nén than chì +block.multi-press.name = Máy nén than chì lớn block.constructing = {0} [lightgray](Đang xây dựng) block.spawn.name = Khu vực tạo ra kẻ địch block.core-shard.name = Căn cứ: Cơ sở @@ -1120,21 +1120,21 @@ block.hail.name = Hail block.lancer.name = Lancer block.conveyor.name = Băng chuyền block.titanium-conveyor.name = Băng chuyền titan -block.plastanium-conveyor.name = Băng chuyền Plastanium -block.armored-conveyor.name = Băng chuyền bọc thép +block.plastanium-conveyor.name = Băng chuyền nhựa +block.armored-conveyor.name = Băng chuyền bọc giáp block.junction.name = Junction -block.router.name = Router -block.distributor.name = Distributor -block.sorter.name = Sorter -block.inverted-sorter.name = Sorter ngược +block.router.name = Bộ định tuyến +block.distributor.name = Bộ phân phát +block.sorter.name = Bộ lọc +block.inverted-sorter.name = Bộ lọc ngược block.message.name = Thông điệp block.illuminator.name = Đèn -block.overflow-gate.name = Overflow Gate -block.underflow-gate.name = Underflow Gate +block.overflow-gate.name = Cổng tràn +block.underflow-gate.name = Cổng tràn ngược block.silicon-smelter.name = Máy nấu silicon block.phase-weaver.name = Máy tạo Phase block.pulverizer.name = Máy nghiền -block.cryofluid-mixer.name = Máy trộn Cryofluid +block.cryofluid-mixer.name = Máy sản xuất chất làm mát block.melter.name = Máy nung chảy block.incinerator.name = Máy phân hủy block.spore-press.name = Máy nén bào tử @@ -1142,7 +1142,7 @@ block.separator.name = Máy phân tách block.coal-centrifuge.name = Máy tạo than block.power-node.name = Chốt điện block.power-node-large.name = Chốt điện lớn -block.surge-tower.name = Tháp Surge +block.surge-tower.name = Tháp điện block.diode.name = Diode pin block.battery.name = Pin block.battery-large.name = Pin lớn @@ -1151,7 +1151,7 @@ block.steam-generator.name = Máy phát điện hơi nước block.differential-generator.name = Máy phát điện vi sai block.impact-reactor.name = Lò phản ứng nhiệt hạch block.mechanical-drill.name = Máy khoan cơ khí -block.pneumatic-drill.name = Khoan khí nén +block.pneumatic-drill.name = Máy khoan khí nén block.laser-drill.name = Máy khoan laser block.water-extractor.name = Máy khoan nước block.cultivator.name = Máy nuôi cấy bào tử @@ -1163,8 +1163,8 @@ block.liquid-source.name = Nguồn chất lỏng block.liquid-void.name = Hủy chất lỏng block.power-void.name = Hủy năng lượng block.power-source.name = Vô hạn năng lượng -block.unloader.name = Unloader -block.vault.name = Vault +block.unloader.name = Điểm dỡ hàng +block.vault.name = Nhà kho block.wave.name = Wave block.tsunami.name = Tsunami block.swarmer.name = Swarmer @@ -1172,31 +1172,31 @@ block.salvo.name = Salvo block.ripple.name = Ripple block.phase-conveyor.name = Phase Conveyor block.bridge-conveyor.name = Bridge Conveyor -block.plastanium-compressor.name = Máy nén Plastanium -block.pyratite-mixer.name = Máy trộn Pyratite +block.plastanium-compressor.name = Máy sản xuất nhựa +block.pyratite-mixer.name = Máy trộn tiền chất nổ block.blast-mixer.name = Máy trộn chất nổ block.solar-panel.name = Pin mặt trời block.solar-panel-large.name = Pin mặt trời lớn block.oil-extractor.name = Máy khoan dầu block.repair-point.name = Điểm sửa chữa block.pulse-conduit.name = Ống dẫn titan -block.plated-conduit.name = Ống dẫn bọc thép +block.plated-conduit.name = Ống dẫn bọc giáp block.phase-conduit.name = Ống dẫn Phase -block.liquid-router.name = Liquid Router +block.liquid-router.name = Bộ định tuyến chất lỏng block.liquid-tank.name = Thùng chất lỏng block.liquid-junction.name = Liquid Junction block.bridge-conduit.name = Bridge Conduit block.rotary-pump.name = Bơm điện block.thorium-reactor.name = Lò phản ứng Thorium -block.mass-driver.name = Mass Driver -block.blast-drill.name = Máy khoang thủy lực +block.mass-driver.name = Máy phóng điện từ +block.blast-drill.name = Máy khoan thủy lực block.thermal-pump.name = Bơm nhiệt block.thermal-generator.name = Máy phát nhiệt điện block.alloy-smelter.name = Lò luyện hợp kim block.mender.name = Máy sửa chữa block.mend-projector.name = Máy sửa lớn -block.surge-wall.name = Tường Surge -block.surge-wall-large.name = Tường Surge lớn +block.surge-wall.name = Tường hợp kim +block.surge-wall-large.name = Tường hợp kim lớn block.cyclone.name = Cyclone block.fuse.name = Fuse block.shock-mine.name = Mìn gây sốc @@ -1220,7 +1220,7 @@ block.multiplicative-reconstructor.name = Máy nâng cấp quân đội cấp 3 block.exponential-reconstructor.name = Máy nâng cấp quân đội cấp 4 block.tetrative-reconstructor.name = Máy nâng cấp quân đội cấp 5 block.payload-conveyor.name = Băng chuyền khối hàng -block.payload-router.name = Payload Router +block.payload-router.name = Bộ định tuyến khối hàng block.disassembler.name = Máy phân tách lớn block.silicon-crucible.name = Máy nấu Silicon lớn block.overdrive-dome.name = Máy tăng tốc lớn @@ -1234,8 +1234,8 @@ block.switch.name = Công tắc block.micro-processor.name = Bộ xử lí mini block.logic-processor.name = Bộ xử lý block.hyper-processor.name = Bộ xử lý lớn -block.logic-display.name = Màng hình -block.large-logic-display.name = Màng hình lớn +block.logic-display.name = Màn hình +block.large-logic-display.name = Màn hình lớn block.memory-cell.name = Bộ nhớ block.memory-bank.name = Bộ nhớ lớn @@ -1307,41 +1307,41 @@ item.pyratite.description = Dùng trong vũ khí gây cháy và máy phát đi liquid.water.description = Dùng để làm mát máy móc và xử lý chất thải. liquid.slag.description = Dùng để tách các kim loại, hoặc phun vào kẻ thù như một loại vũ khí. -liquid.oil.description = Dùng trong sản xuất vật liệu tiên tiến và làm đạn gây cháycháy. +liquid.oil.description = Dùng trong sản xuất vật liệu tiên tiến và làm đạn gây cháy. liquid.cryofluid.description = Dùng làm chất làm mát trong lò phản ứng, súng và nhà máy. block.resupply-point.description = Cung cấp đạn đồng cho các quân lính ở gần. Không tương thích với quân lính sử dụng điện. -block.armored-conveyor.description = Vận chuyển vật phẩm về phía . Không nhận đầu vào từ phía bên. +block.armored-conveyor.description = Vận chuyển vật phẩm về phía. Không nhận đầu vào từ phía bên. block.illuminator.description = Phát sáng. block.message.description = Lưu trữ tin nhắn giao tiếp giữa đồng đội. block.graphite-press.description = Nén than thành than chì. block.multi-press.description = Nén than thành than chì. Cần nước làm chất làm mát. block.silicon-smelter.description = Tinh chế silicon từ cát và than. -block.kiln.description = Nấu chảy cát và chì thành metaglass. -block.plastanium-compressor.description = Sản xuất plastanium từ dầu và titan. +block.kiln.description = Nấu chảy cát và chì thành thuỷ tinh. +block.plastanium-compressor.description = Sản xuất nhựa từ dầu và titan. block.phase-weaver.description = Tổng hợp phase fabric từ thorium và cát. -block.alloy-smelter.description = Trộn titan, chì, silicon và đồng thành hợp kim surge. -block.cryofluid-mixer.description = Trộn nước và bột titan để sản xuất cryofluid. -block.blast-mixer.description = Tạo ra hợp chất nổ từ pyratite và vỏ bào tử. -block.pyratite-mixer.description = Trộn than, chì và cát thành pyratite. +block.alloy-smelter.description = Trộn titan, chì, silicon và đồng thành hợp kim. +block.cryofluid-mixer.description = Trộn nước và bột titan để sản xuất chất làm mát. +block.blast-mixer.description = Tạo ra hợp chất nổ từ tiền chất nổ và vỏ bào tử. +block.pyratite-mixer.description = Trộn than, chì và cát thành tiền chất nổ. block.melter.description = Nung phế liệu thành xỉ. block.separator.description = Tách xỉ thành các thành phần khoáng của nó. block.spore-press.description = Nén vỏ bào tử thành dầu. block.pulverizer.description = Nghiền phế liệu thành cát. block.coal-centrifuge.description = Biến dầu thành than. block.incinerator.description = Tiêu hủy bất kỳ vật phẩm hoặc chất lỏng nào mà nó nhận được. -block.power-void.description = Hủy tất cả năng lượng nhận được. Chỉ có trong chế độ Sandbox. -block.power-source.description = Tạo ra năng lượng mãi mãi. Chỉ có trong chế độ Sandbox. -block.item-source.description = Tạo ra vật phẩm mãi mãi. Chỉ có trong chế độ Sandbox. -block.item-void.description = Hủy mọi vật phẩm. Chỉ có trong chế độ Sandbox. -block.liquid-source.description = Tạo ra chất lỏng mãi mãi. Chỉ có trong chế độ Sandbox. -block.liquid-void.description = Loại bỏ mọi chất lỏng. Chỉ có trong chế độ Sandbox. +block.power-void.description = Hủy tất cả năng lượng nhận được. Chỉ có trong chế độ tự do. +block.power-source.description = Tạo ra năng lượng mãi mãi. Chỉ có trong chế độ tự do. +block.item-source.description = Tạo ra vật phẩm mãi mãi. Chỉ có trong chế độ tự do. +block.item-void.description = Hủy mọi vật phẩm. Chỉ có trong chế độ tự do. +block.liquid-source.description = Tạo ra chất lỏng mãi mãi. Chỉ có trong chế độ tự do. +block.liquid-void.description = Loại bỏ mọi chất lỏng. Chỉ có trong chế độ tự do. block.copper-wall.description = Bảo vệ các công trình khỏi đạn của kẻ thù. block.copper-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. block.titanium-wall.description = Bảo vệ các công trình khỏi đạn của kẻ thù. block.titanium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. -block.plastanium-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối nguồn tự động. -block.plastanium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối nguồn tự động. +block.plastanium-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối điện tự động. +block.plastanium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. Hấp thụ tia laser và tia điện. Chặn kết nối điện tự động. block.thorium-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù. block.thorium-wall-large.description = Bảo vệ nhiều công trình khỏi đạn của kẻ thù. block.phase-wall.description = Bảo vệ công trình khỏi đạn của kẻ thù, phản hầu hết đạn khi va chạm. @@ -1405,22 +1405,22 @@ block.cultivator.details = Công nghệ được phục hồi. Được sử d block.oil-extractor.description = Sử dụng lượng năng lượng năng lớn, sử dụng cát và nước để khoan dầu. block.core-shard.description = Trung tâm của căn cứ. Sau khi bị phá hủy, khu vực này sẽ bị mất. block.core-shard.details = Lần thử đầu tiên. Gọn nhẹ. Tự thay thế. Được trang bị tên lửa đẩy dùng một lần. Không được thiết kế để di chuyển giữa các hành tinh. -block.core-foundation.description = Core of the base. Well armored. Stores more resources than a Shard. +block.core-foundation.description = Trung tâm của căn cứ. Được bọc giáp. Stores more resources than a Shard. block.core-foundation.details = The second iteration. block.core-nucleus.description = Lõi của căn cứ. Bọc giáp chắc chắn. Lưu trữ lượng lớn tài nguyên. -block.core-nucleus.details = Lần thử thứ ba và lần thử cuối. -block.vault.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với Unloader. -block.container.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với Unloader. +block.core-nucleus.details = Lần thử thứ ba và lần thử cuối. +block.vault.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với điểm dỡ hàng. +block.container.description = Lưu trữ lượng lớn vật phẩm mỗi loại. Nội dung có thể được lấy ra với điểm dỡ hàng. block.unloader.description = Lấy các vật phẩm được chọn từ các ô gần đó. block.launch-pad.description = Phóng lô vật phẩm vào phân vùng. block.duo.description = Bắn xen kẽ đạn vào kẻ địch. -block.scatter.description = Bắn chì, phế liệu hoặc metaglass vào máy bay địch. +block.scatter.description = Bắn chì, phế liệu hoặc thuỷ tinh vào kẻ địch trên không. block.scorch.description = Đốt mọi kẻ địch trên mặt đất. Hiệu quả cao ở tầm gần. block.hail.description = Phóng đạn nhỏ vào kẻ địch trên mặt đất ở tầm xa. block.wave.description = Phóng một tia chất lỏng vào kẻ địch. Tự chữa cháy nếu được cung cấp nước. block.lancer.description = Tích tụ và phóng tia năng lượng mạnh vào kẻ địch trên mặt đất. block.arc.description = Phóng tia điện vào kẻ địch trên mặt đất. -block.swarmer.description = Bắn tên lửa homing vào kẻ địch. +block.swarmer.description = Bắn tên lửa truy đuổi vào kẻ địch. block.salvo.description = Bắn đạn salvo vào kẻ địch. block.fuse.description = Bắn ba đạn xuyên giáp tầm gần vào kẻ địch. block.ripple.description = Bắn cụm đạn vào kẻ địch trên mặt đất ở tầm xa. @@ -1432,7 +1432,7 @@ block.repair-point.description = Liên tục sửa chữa robot ở gần trong block.segment.description = Gây hư hại và phá hủy đạn đến. Ngoại trừ tia laser. block.parallax.description = Bắn một tia kéo máy bay địch và làm hư hỏng nó trong quá trình kéo. block.tsunami.description = Phóng một tia chất lỏng mạnh vào kẻ địch. Tự chữa cháy nếu được cung cấp nước. -block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng pyratite làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng. +block.silicon-crucible.description = Tinh chế silicon từ cát và than, sử dụng tiền chất nổ làm nguồn nhiệt phụ. Có hiệu quả cao hơn khi ở nơi nóng. block.disassembler.description = Tách xỉ thành các kim loại khác nhau với hiệu suất thấp. Có thể sản xuất thorium. block.overdrive-dome.description = Tăng tốc độ làm việc của các công trình lân cận. Sử dụng phase fabric and silicon để hoạt động. block.payload-conveyor.description = Di chuyển những khối hàng lớn, chẳng hạn như các quân lính từ nhà máy. @@ -1484,7 +1484,7 @@ unit.risso.description = Bắn chùm tên lửa và đạn lên kẻ địch t unit.minke.description = Bắn đạn và đạn thường lên kẻ địch tầm gần trên mặt đất. unit.bryde.description = Bắn đạn tầm xa và tên lửa vào kẻ địch. unit.sei.description = Bắn chùm tên lửa và đạn xuyên giáp vào kẻ địch. -unit.omura.description = Bắn đạn từ trường xuyên giáp tầm xa vào kẻ địch. Tạo nên robot báo hiệu. +unit.omura.description = Bắn đạn từ trường xuyên giáp tầm xa vào kẻ địch. Tạo nên drone báo hiệu. unit.alpha.description = Bảo vệ căn cứ cơ sở khỏi kẻ thù. Có thể xây dựng. unit.beta.description = Bảo vệ căn cứ trụ sở khỏi kẻ thù. Có thể xây dựng. unit.gamma.description = Bảo vệ căn cứ trung tâm khỏi kẻ thù. Có thể xây dựng. diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 4e5074ae4c21..d27750e645f9 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -13,6 +13,7 @@ link.google-play.description = Google Play 页面 link.f-droid.description = F-Droid 页面 link.wiki.description = Mindustry 官方 Wiki link.suggestions.description = 提出新特性的建议 +link.bug.description = 发现了 Bug ?在这里报告 linkfail = 打开链接失败!\n网址已复制到您的剪贴板。 screenshot = 屏幕截图已保存到 {0} screenshot.invalid = 地图太大,可能没有足够的内存用于截图。 @@ -22,7 +23,6 @@ gameover.pvp = [accent] {0}[]队获胜! gameover.waiting = [accent]正在更换下一张地图... highscore = [accent]新纪录! copied = 已复制 -indev.popup = [accent]6.0[]仍在[accent]测试版[].\n[lightgray]这意味着:[]\n[scarlet]- 战役玩法完全没有完成[]\n- 很多内容还没有做完\n- 大多[scarlet]单位AI[]无法正确地运行\n- 单位系统完全没有完成\n- 一切您所看到的内容都可能会移除或调整。\n\n在[accent]Github[]提交错误报告。 indev.notready = 这部分玩法还未开发完成。 indev.campaign = [accent]恭喜!您已经到达战役模式的结尾![]\n\n这是目前内容的全部。 未来的更新中将添加行星际旅行。 @@ -41,6 +41,11 @@ be.ignore = 忽略 be.noupdates = 未发现更新。 be.check = 检测更新 +mod.featured.dialog.title = 模组浏览器 (尚未完成) +mods.browser.selected = 已选模组 +mods.browser.add=安装 +mods.github.open=查看 + schematic = 蓝图 schematic.add = 保存蓝图… schematics = 蓝图 @@ -84,6 +89,7 @@ joingame = 加入游戏 customgame = 自定义游戏 newgame = 新游戏 none = <无> +none.found = [lightgray]<未找到> minimap = 小地图 position = 位置 close = 关闭 @@ -147,8 +153,12 @@ planetmap = 行星地图 launchcore = 发射核心 filename = 文件名: unlocked = 解锁了新内容! +available = 可研究新科技! completed = [accent]己研究 techtree = 科技树 +research.legacy = 发现了 [accent]5.0[] 的研究数据。\n您想要[accent]加载数据[],还是[accent]丢弃数据[]并在新战役中重新研究(建议)? +research.load = 加载 +research.discard = 丢弃 research.list = [lightgray]研究: research = 研究 researched = [lightgray]{0}己研究。 @@ -193,6 +203,7 @@ servers.local = 本地服务器 servers.remote = 远程服务器 servers.global = 全球服务器 +servers.disclaimer=社区服务器[accent]不是[]由开发者拥有或管理。\n\n服务器中可能有其他玩家制作的不适当的内容。 servers.showhidden = 显示隐藏的服务器 server.shown = 显示 server.hidden = 隐藏 @@ -230,6 +241,7 @@ disconnect.timeout = 连接超时。 disconnect.data = 读取服务器数据失败! cantconnect = 无法加入([accent]{0}[])。 connecting = [accent]连接中… +reconnecting = [accent]重新连接中… connecting.data = [accent]加载中… server.port = 端口: server.addressinuse = 地址已在使用! @@ -593,6 +605,11 @@ sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。 sector.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。 sector.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。 sector.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。 +sector.biomassFacility.description = 孢子的发源地。这里有最初研究和生产孢子的设施。\n研究这里的科技,培养孢子来制造燃料和聚合物。\n\n[lightgray]设施损毁后,孢子散播了出去,原生生态系统无法抵挡这种外来物种。 +sector.windsweptIslands.description = 海岸线之外坐落着这一串群岛。据记载这里曾有生产[accent]塑钢[]的建筑。\n\n抵御敌人的海军,在岛上建立基地,研究这些工厂。 +sector.extractionOutpost.description = 一座遥远的前哨,敌人为了向其他区域发射资源而建立。\n\n跨区域运输技术是征服这个星球不可或缺的技术。摧毁敌人基地,研究发射台。 +sector.impact0078.description = 这里有最初进入这个星系的星际运输船的遗迹。\n\n回收可以利用的资源,研究科技。 +sector.planetaryTerminal.description = 最终目标。\n\n这座滨海基地有一个可以将核心发射到其他行星的建筑,防卫森严。\n\n制造海军单位,尽快消灭敌人,研究发射建筑。 settings.language = 语言 settings.data = 游戏数据 @@ -688,6 +705,7 @@ stat.commandlimit = 指挥上限 stat.abilities = 能力 stat.canboost = 可助推 stat.flying = 可飞行 +stat.ammouse = 弹药消耗 ability.forcefield = 力墙场 ability.repairfield = 修复场 @@ -710,7 +728,6 @@ bar.powerlines = 链接: {0}/{1} bar.items = 物品:{0} bar.capacity = 容量:{0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[已达单位上限] bar.liquid = 液体 bar.heat = 热量 bar.power = 电力 @@ -727,6 +744,7 @@ bullet.sapping = [stat] 削弱 bullet.homing = [stat] 追踪 bullet.shock = [stat] 电击 bullet.frag = [stat] 分裂 +bullet.buildingdamage = [stat]{0}%[lightgray] 对建筑伤害 bullet.knockback = [stat]{0}[lightgray] 击退 bullet.pierce = [stat]{0}[lightgray]x 穿透 bullet.infinitepierce = [stat] 穿透 @@ -755,6 +773,7 @@ unit.items = 物品 unit.thousands = K unit.millions = M unit.billions = B +unit.pershot = /发 category.purpose = 介绍 category.general = 普通 category.power = 能量 @@ -822,7 +841,9 @@ setting.chatopacity.name = 聊天界面不透明度 setting.lasersopacity.name = 能量激光不透明度 setting.bridgeopacity.name = 桥梁不透明度 setting.playerchat.name = 显示玩家聊天气泡 +setting.showweather.name = 显示天气效果 public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。\n[lightgray]您之后可以在 设置->游戏->游戏公开可见 更改。 +public.confirm.really = 如果您想与朋友游玩,可以使用[green]邀请朋友[]而不是[scarlet]公开游戏[]!\n您确定要使游戏[scarlet]公开可见[]吗? public.beta = 请注意,测试版的游戏不能公开可见。 uiscale.reset = UI 缩放比例已更改。\n按下“确定”来执行缩放比例的更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。 uiscale.cancel = 取消并退出 @@ -897,6 +918,7 @@ keybind.toggle_menus.name = 显隐选项 keybind.chat_history_prev.name = 聊天记录向前 keybind.chat_history_next.name = 聊天记录向后 keybind.chat_scroll.name = 聊天记录滚动 +keybind.chat_mode.name = 切换聊天模式 keybind.drop_unit.name = 松开单位 keybind.zoom_minimap.name = 小地图缩放 mode.help.title = 模式说明 @@ -945,6 +967,7 @@ rules.explosions = 建筑/单位爆炸伤害 rules.ambientlight = 环境光 rules.weather = 气候 rules.weather.frequency = 频率: +rules.weather.always = 持续 rules.weather.duration = 时长: content.item.name = 物品 @@ -969,7 +992,6 @@ item.blast-compound.name = 爆炸混合物 item.pyratite.name = 硫 item.metaglass.name = 钢化玻璃 item.scrap.name = 废料 - liquid.water.name = 水 liquid.slag.name = 矿渣 liquid.oil.name = 石油 @@ -1271,11 +1293,15 @@ hint.payloadDrop.mobile = [accent]点住[]一个空的位置将有效载荷丢 hint.waveFire = [accent]波浪[]炮塔加水弹药会自动扑灭附近的火. hint.generator = \uf879 [accent]燃烧发电机[]燃烧煤炭并将电力传输到相邻方块.\n\n用\uf87f [accent]能量节点[]可以扩展电力传输范围. hint.guardian = [accent]Boss[]单位装甲厚重.[accent]铜[]和[accent]铅[]这类较弱的子弹对其[scarlet]作用不佳[].\n\n使用高级别炮塔或使用\uf835 [accent]石墨[]作为\uf861 双管炮及\uf859 齐射炮的弹药来消灭Boss. +hint.coreUpgrade = 核心可以通过[accent]在上面覆盖高等级核心[]进行升级。\n\n在[accent]初代核心[]上放置一个[accent]次代核心[]。确保周围没有障碍物。 +hint.presetLaunch = 灰色的[accent]降落地区[],如[accent]冰冻森林[],可以从任何区域发射,不需要占领附近的区块。\n\n[accent]数字编号的区域[],如这个,是[accent]可选的[]。 +hint.coreIncinerate = 核心存满一种物品后,再进入的同种物品会被[accent]摧毁[]。 +hint.coopCampaign = 游玩[accent]合作战役[]时,当前地图生产的资源也会被送入[accent]你本地的区域[]。\n\n新科技也会同步解锁。 item.copper.description = 用于所有类型的建筑和弹药。 item.copper.details = 铜。在塞普罗上的异常丰富的金属。不经加固,结构会较脆弱。 item.lead.description = 用于液体输送和电气结构。 -item.lead.details = 致密且呈惰性。广泛用于电池中。\n注意:可能对生物生命体有毒。虽说这里还有很多。 +item.lead.details = 致密且呈惰性。广泛用于电池中。\n注意:可能对生物生命体有毒。虽说这里已经没有多少生物了。 item.metaglass.description = 用于液体传输/储存结构。 item.graphite.description = 用于电子元件和炮塔弹药。 item.sand.description = 用于生产其他精炼材料。 @@ -1342,9 +1368,8 @@ block.door-large.description = 可以开关的墙。 block.mender.description = 定期修复附近的区块。\n可使用硅来提高范围和效率。 block.mend-projector.description = 修复其附近的区块。\n可使用相位物来提高射程和效率。 block.overdrive-projector.description = 提高附近建筑物的速度。\n可使用相位物来提高射程和效率。 -block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热,可以使用冷却液降温。相织物可用于增加护盾大小。 +block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热,可以使用冷却液降温。相位物可用于增加护盾大小。 block.shock-mine.description = 对踩到它的敌人释放电弧进行攻击。 -block.thermal-pump.description = 终级液泵。 block.conveyor.description = 将物品向前输送。 block.titanium-conveyor.description = 将物品向前输送。快于初级传送带。 block.plastanium-conveyor.description = 打包物品进行运输。\n在后方输入物品,在前方三个方向输出物品。需要多个装载和卸载点才能达到峰值载量。 diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index a6b9f10cf725..1cf73184e852 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -13,15 +13,18 @@ link.google-play.description = Google Play 商店頁面 link.f-droid.description = F-Droid 目錄頁面 link.wiki.description = 官方 Mindustry 維基 link.suggestions.description = 建議新功能 +link.bug.description = 找到臭蟲?在這裡回報 linkfail = 無法打開連結!\n我們已將該網址複製到您的剪貼簿。 screenshot = 截圖儲存到{0} screenshot.invalid = 地圖太大了,可能沒有足夠的記憶體用於截圖。 gameover = 遊戲結束 +gameover.disconnect = 斷線 gameover.pvp = [accent]{0}[]隊獲勝! +gameover.waiting = [accent]等待下一張地圖中…… highscore = [accent]新的高分紀錄! copied = 已複製。 -indev.popup = [accent]v6[] 目前仍在 in [accent]alpha[]。\n[lightgray]這代表了:[]\n[scarlet]- 戰役尚未完成[]\n- 部份內容遺失\n - 大多數的 [scarlet]單位 AI[] 無法正常運作\n- 許多單位仍未完成\n- 您看到的所有內容均可能變更或移除。\n\n請在 [accent]Github[] 上回報臭蟲或當機。 indev.notready = 這部份的遊戲尚未完成 +indev.campaign = [accent]恭喜你完成戰役了![]\n\n這是截至目前的遊戲內容。星際旅行會在未來的更新加入遊戲~ load.sound = 音效載入中 load.map = 地圖載入中 @@ -38,6 +41,14 @@ be.ignore = 忽略 be.noupdates = 沒有新的更新。 be.check = 檢查是否有新的更新 +mods.browser = 模組瀏覽器 +mods.browser.selected = 已選模組 +mods.browser.add = 安裝 +mods.github.reinstall = 重新安裝 +mods.github.open = 查看Github +mods.browser.sortdate = 以最近篩選 +mods.browser.sortstars = 以星數篩選 + schematic = 藍圖 schematic.add = 儲存藍圖…… schematics = 藍圖 @@ -57,6 +68,7 @@ schematic.rename = 重新命名藍圖 schematic.info = {0}x{1}, {2}方塊 schematic.disabled = [scarlet]藍圖被進用[]\n你不能在這個[accent]地圖[] 或 [accent]伺服器中使用藍圖. +stats = 統計 stat.wave = 打敗的波次:[accent]{0} stat.enemiesDestroyed = 摧毀的敵人:[accent]{0} stat.built = 建設的建築:[accent]{0} @@ -80,6 +92,7 @@ joingame = 多人連線 customgame = 自訂遊戲 newgame = 新遊戲 none = 〈沒有〉 +none.found = [lightgray]〈查無結果〉 minimap = 小地圖 position = 位置 close = 關閉 @@ -106,16 +119,18 @@ mods.none = [lightgray]找不到模組! mods.guide = 模組指南 mods.report = 回報錯誤 mods.openfolder = 開啟模組資料夾 +mods.viewcontent = 查看內容 mods.reload = 重新載入 mods.reloadexit = 遊戲將會結束以重新載入模組。 mod.display = [gray]模組:[orange]{0} +mod.installed = [[已安裝] mod.enabled = [lightgray]已啟用 mod.disabled = [scarlet]已禁用 mod.disable = 禁用 mod.content = 內容: mod.delete.error = 無法刪除模組,檔案可能在使用中。 mod.requiresversion = [scarlet]最低遊戲版本要求:[accent]{0} -mod.outdated = [scarlet]與 V6 不相容(無 最低遊戲版本: 105) +mod.outdated = [scarlet]與 V6 不相容(無 最低遊戲版本:105) mod.missingdependencies = [scarlet]缺少依賴關係:{0} mod.erroredcontent = [scarlet]內容錯誤 mod.errors = 載入內容時發生錯誤 @@ -143,8 +158,12 @@ planetmap = 星球地圖 launchcore = 發射核心 filename = 檔案名稱︰ unlocked = 已解鎖新內容! +available = 可研究新科技! completed = [accent]完成 techtree = 科技樹 +research.legacy = [accent]5.0[] 偵測到舊有科技資料。\n請問要[accent]載入[]資料,還是[accent]放棄[]並重置新戰役的科技樹(建議)? +research.load = 載入 +research.discard = 放棄 research.list = [lightgray]研究︰ research = 研究 researched = [lightgray]{0}研究完成。 @@ -189,6 +208,11 @@ servers.local = 區域伺服器 servers.remote = 遠端伺服器 servers.global = 社群伺服器 +servers.disclaimer = 社群伺服器[accent]不是[]由開發者擁有或管理。\n\n伺服器可能會出現由其他玩家製作的不適當內容。 +servers.showhidden = 顯示被隱藏的伺服器 +server.shown = 已顯示 +server.hidden = 已隱藏 + trace = 追蹤玩家 trace.playername = 玩家名稱:[accent]{0} trace.ip = IP:[accent]{0} @@ -222,6 +246,7 @@ disconnect.timeout = 連線逾時。 disconnect.data = 無法載入地圖資料! cantconnect = 無法加入遊戲 ([accent]{0}[]). connecting = [accent]連線中…… +reconnecting = [accent]重新連接中…… connecting.data = [accent]地圖資料載入中…… server.port = 連接埠: server.addressinuse = 該位置已被使用! @@ -245,16 +270,16 @@ save.rename.text = 新名稱: selectslot = 選取一個存檔。 slot = [accent]存檔{0} editmessage = 編輯訊息 -save.corrupted = [accent]此存檔無效或已損毀!\n如果你剛剛升級了遊戲,那麼這可能是因為存檔格式改變了而[scarlet]不是[]錯誤。 +save.corrupted = 此存檔無效或已損毀! empty = 〈空白〉 on = 開啟 off = 關閉 save.autosave = 自動存檔:{0} save.map = 地圖:{0} save.wave = 波次:{0} -save.mode = 遊戲模式: {0} +save.mode = 遊戲模式:{0} save.date = 最後存檔時間:{0} -save.playtime = 遊玩時間:{0} +save.playtime = 遊玩時間:{0} warning = 警告。 confirm = 確認 delete = 刪除 @@ -267,6 +292,10 @@ cancel = 取消 openlink = 開啟連結 copylink = 複製連結 back = 返回 +max = 最大量 +crash.export = 匯出當機報告。 +crash.none = 無當機報告。 +crash.exported = 已匯出當機報告。 data.export = 匯出數據 data.import = 匯入數據 data.openfolder = 開啟檔案資料夾 @@ -274,7 +303,7 @@ data.exported = 資料已匯出。 data.invalid = 這不是有效的遊戲資料。 data.import.confirm = 導入外部資料將會覆寫您目前[scarlet]所有的[]遊戲資料,\n[accent]此動作無法復原![]\n\n匯入資料後,您的遊戲將立刻結束。 quit.confirm = 您確定要結束嗎? -quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n可以在[accent] 設定->遊戲[] 選項中重設教學。 +quit.confirm.tutorial = 您確定您知道自己在做什麼嗎?\n可以在[accent] 設定-遊戲[] 選項中重設教學。 loading = [accent]載入中…… reloading = [accent]模組重新載入中…… saving = [accent]儲存中…… @@ -283,6 +312,8 @@ cancelbuilding = [accent][[{0}][]清除計畫 selectschematic = [accent][[{0}][]選擇並複製 pausebuilding = [accent][[{0}][]暫停建造 resumebuilding = [scarlet][[{0}][]繼續建造 +enablebuilding = [scarlet][[{0}][]啟用建造 +showui = 已隱藏介面。\n按[accent][[{0}][]顯示介面。 wave = [accent]第{0}波 wave.cap = [accent]Wave {0}/{1} wave.waiting = [lightgray]將於{0}秒後抵達 @@ -290,9 +321,11 @@ wave.waveInProgress = [lightgray]波次進行中 waiting = [lightgray]等待中…… waiting.players = 等待玩家中…… wave.enemies = [lightgray]剩下{0}個敵人 +wave.enemycores = [accent]{0}[lightgray]個敵方核心 +wave.enemycore = [accent]{0}[lightgray]個敵方核心 wave.enemy = [lightgray]剩下{0}個敵人 -wave.guardianwarn = Guardian approaching in [accent]{0}[] waves. -wave.guardianwarn.one = Guardian approaching in [accent]{0}[] wave. +wave.guardianwarn = 頭目將在[accent]{0}[]波後抵達。 +wave.guardianwarn.one = 頭目將在[accent]{0}[]波後抵達。 loadimage = 載入圖片 saveimage = 儲存圖片 unknown = 未知 @@ -305,7 +338,7 @@ map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯 map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[scarlet]紅色[]的核心。 map.invalid = 地圖載入錯誤:地圖可能已經損毀。 workshop.update = 更新項目 -workshop.error = 擷取工作坊詳細資訊時出錯: {0} +workshop.error = 擷取工作坊詳細資訊時出錯:{0} map.publish.confirm = 您確定要發布此地圖嗎?\n\n[lightgray]首先請先確定您同意 Steam 工作坊的 EULA,否則您的地圖將不會顯示! workshop.menu = 選擇您要對此項目執行的動作。 workshop.info = 項目資訊 @@ -317,17 +350,17 @@ publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意 W publish.error = 發佈項目時發生問題:{0} steam.error = Steam 服務初始化失敗。\n錯誤:{0} -editor.brush = 粉刷 +editor.brush = 筆刷 editor.openin = 在編輯器中開啟 editor.oregen = 礦石生成 editor.oregen.info = 礦石生成: editor.mapinfo = 地圖資訊 editor.author = 作者: editor.description = 描述: -editor.nodescription = 在地圖發佈前必須有至少四個字以上的敘述。 +editor.nodescription = 在地圖發佈前必須有至少四個字以上的描述。 editor.waves = 波次: editor.rules = 規則: -editor.generation = 篩選器: +editor.generation = 自動生成: editor.ingame = 在遊戲中編輯 editor.publish.workshop = 在工作坊上發佈 editor.newmap = 新地圖 @@ -335,21 +368,21 @@ editor.center = 中心 workshop = 工作坊 waves.title = 波次 waves.remove = 移除 -waves.never = 〈永遠〉 waves.every = 每 waves.waves = 波次 waves.perspawn = 每次生成 waves.shields = 護盾/波次 waves.to = 至 -waves.guardian = 守衛者 +waves.guardian = 頭目 waves.preview = 預覽 waves.edit = 編輯…… waves.copy = 複製到剪貼簿 waves.load = 從剪貼簿載入 waves.invalid = 剪貼簿中的波次無效。 -waves.copied = 波次已被複製。 -waves.none = 無自訂敵人。\n請注意,空佈局將自動替換為預設佈局。 +waves.copied = 波次已複製。 +waves.none = 無自訂敵人。\n請注意,若沒有波次佈局將自動替換為預設佈局。 +#校正用空行 wavemode.counts = 數量 wavemode.totals = 總數 wavemode.health = 生命值 @@ -361,9 +394,9 @@ editor.name = 名稱: editor.spawn = 重生單位 editor.removeunit = 移除單位 editor.teams = 隊伍 -editor.errorload = 載入檔案時發生問題:\n[accent]{0} -editor.errorsave = 儲存檔案時發生問題:\n[accent]{0} -editor.errorimage = 這是圖片檔,而非地圖。不要試圖修改副檔名讓它可以使用。\n\n如果要匯入地形圖片檔,請使用編輯器中的「匯入地形圖片檔」按鈕。 +editor.errorload = 載入檔案時發生問題。 +editor.errorsave = 儲存檔案時發生問題。 +editor.errorimage = 這是圖片檔,而非地圖。 editor.errorlegacy = 此地圖太舊,並使用不支援的舊地圖格式。 editor.errornot = 這不是地圖檔。 editor.errorheader = 此地圖檔無效或已損毀。 @@ -393,7 +426,7 @@ editor.exportimage = 匯出地形圖片檔 editor.exportimage.description = 匯出地形圖片檔 editor.loadimage = 載入圖片 editor.saveimage = 儲存圖片 -editor.unsaved = [scarlet]尚未儲存變更![]\n您確定要退出嗎? +editor.unsaved = 您確定要退出嗎?\n[scarlet](將遺失未儲存的變更)[] editor.resizemap = 調整地圖大小 editor.mapname = 地圖名稱: editor.overwrite = [accent]警告!這將會覆蓋現有的地圖。 @@ -462,6 +495,8 @@ load = 載入 save = 儲存 fps = FPS:{0} ping = 延遲:{0}毫秒 +memory = Mem: {0}mb +memory2 = Mem:\n {0}mb +\n {1}mb language.restart = 請重新啟動遊戲以使選取的語言生效。 settings = 設定 tutorial = 教學 @@ -476,31 +511,28 @@ complete = [lightgray]完成: requirement.wave = 在{1}到達第{0}波 requirement.core = 在{0}摧毀敵人核心 requirement.research = 研究 {0} +requirement.produce = 生產 {0} requirement.capture = 捕獲 {0} bestwave = [lightgray]最高波次:{0} launch.text = 發射 research.multiplayer = 只有管理者可以使用這個物品 uncover = 探索 configure = 設定 + loadout = 裝載 -resources = 資源 +resources = 資源 bannedblocks = 停用方塊 addall = 全部加入 +launch.from = 發射來源:[accent]{0} launch.destination = 目的地:{0} configure.invalid = 數值必須介於 0 到 {0}。 -zone.unlocked = [lightgray]{0}已解鎖。 -zone.requirement.complete = 到達波次{0}:\n滿足{1}區域要求。 -zone.resources = [lightgray]檢測到的資源: -zone.objective = [lightgray]目標: [accent]{0} -zone.objective.survival = 生存 -zone.objective.attack = 摧毀敵人核心 add = 新增…… boss.health = 頭目血量 -connectfail = [crimson]伺服器連線錯誤:[accent]{0} -error.unreachable = 無法連線到伺服器。請確認位置是否正確? -error.invalidaddress = 無效的位置。 -error.timedout = 連線逾時!\n確保伺服器設置了連接埠轉發且位置正確! +connectfail = [scarlet]伺服器連線錯誤:\n\n[accent]{0} +error.unreachable = 無法連線到伺服器。請確認拼字是否正確? +error.invalidaddress = 無效的網址。 +error.timedout = 連線逾時!\n確保伺服器設置了連接埠轉發且網址正確! error.mismatch = 封包錯誤:\n客戶端/伺服器版本可能不相符。\n確保客戶端和伺服器都有最新版本的 Mindustry! error.alreadyconnected = 已連線。 error.mapnotfound = 找不到地圖! @@ -517,28 +549,56 @@ weather.fog.name = 霧 sectors.unexplored = [lightgray]未探索 sectors.resources = 資源: sectors.production = 生產: +sectors.export = 出口: +sectors.time = 佔領時間: +sectors.threat = 危險性: +sectors.wave = 波次: sectors.stored = 儲存: sectors.resume = 繼續 sectors.launch = 發射 sectors.select = 選取 sectors.nonelaunch = [lightgray]無(太陽) sectors.rename = 重新命名區域 +sectors.enemybase = [scarlet]敵方基地 +sectors.vulnerable = [scarlet]易受攻擊 +sectors.underattack = [scarlet]敵軍來襲! [accent]{0}% 受損 +sectors.survives = [accent]存活 {0} 波次 +sectors.go = 進入 +sector.curcapture = 已佔領地區 +sector.curlost = 已失去該地區 sector.missingresources = [scarlet]核心資源不足 +sector.attacked = 地區 [accent]{0}[white] 遭受攻擊! +sector.lost = 地區 [accent]{0}[white] 戰敗! +#note: 校正用空行 +sector.captured = 成功佔領地區[accent]{0}[white]! + +threat.low = 低 +threat.medium = 中 +threat.high = 高 +threat.extreme = 極高 +threat.eradication = 毀滅性 + +planets = 行星 -planet.serpulo.name = Serpulo +planet.serpulo.name = 蕈孢星 planet.sun.name = 太陽 +sector.impact0078.name = 衝擊0078 sector.groundZero.name = 原點 -sector.craters.name = 火山島 +sector.craters.name = 隕石坑 sector.frozenForest.name = 冰封森林 sector.ruinousShores.name = 廢墟海岸 -sector.stainedMountains.name = 彩繪山 +sector.stainedMountains.name = 多色山脈 sector.desolateRift.name = 荒谷 -sector.nuclearComplex.name = 核能生產複合體 +sector.nuclearComplex.name = 核能電網 sector.overgrowth.name = 雜草叢生 sector.tarFields.name = 油田 sector.saltFlats.name = 鹽灘 -sector.fungalPass.name = 真菌橫行 +sector.fungalPass.name = 真菌走廊 +sector.biomassFacility.name = 生物質合成工廠 +sector.windsweptIslands.name = 風之島 +sector.extractionOutpost.name = 萃取哨站 +sector.planetaryTerminal.name = 星際發射站 sector.groundZero.description = 再次開始的最佳位置。敵人威脅程度低。資源少。\n盡可能地採集鉛與銅。\n繼續前進。 sector.frozenForest.description = 即使是在如此靠近山脈的地方,孢子也已經擴散了。如此低溫也無法永遠遏止它們。\n\n開始冒險發電。建造火力發電機。並學習使用修理單位。 @@ -551,6 +611,11 @@ sector.tarFields.description = 產油區的外圍,在山脈與沙漠之間。 sector.desolateRift.description = 非常危險的區域。資源豐富,但空間狹小。有高破壞風險。盡快離開。不要被敵人的攻擊間距太長而被愚弄。 sector.nuclearComplex.description = 曾是釷的生產與加工設施,但現在已成廢墟。\n[lightgray]研究釷及其許多用途。\n\n敵人非常多,不斷搜尋可攻擊的對象。 sector.fungalPass.description = 高山與滿是孢子的低谷間的過渡區域。這裡有敵人的小型偵察基地。\n摧毀它。\n使用匕首機甲與爬行機甲。拿下兩個核心。 +sector.biomassFacility.description = 「孢子」的發源地。這項設施是過去研究和生產該生物質的地方。\n研究遺留於此的技術。培養孢子以加工成燃料和聚合物。\n\n[lightgray]在設施損毀後,孢子散播了出去。面對如此強勢的外來種,當地生態系中沒有任何物種能與之匹敵…… +sector.windsweptIslands.description = 坐落於海岸線外的一串群島。紀錄顯示此地過去有生產[accent]塑鋼[]的建築物。抵禦敵方的海軍進攻。在島嶼上建造基地。研究這些工廠。 +sector.extractionOutpost.description = 由敵方建造的遠端哨站,用來發射資源到其他地區。\n\n跨地區運輸是征服星球不可或缺的技術。摧毀該基地。研究他們的發射台。 +sector.impact0078.description = 沉睡在此的是第一個進入本星系的星際運輸船。\n\n回收任何能利用的東西。研究任何含有的科技。 +sector.planetaryTerminal.description = 最終目標。\n\n這麼濱海基地具有能夠發射核心到其他行星的建築。 其防禦非常嚴密。\n\n生產海上單位。盡速摧毀敵人。研究該發射建築。 settings.language = 語言 settings.data = 遊戲資料 @@ -563,7 +628,7 @@ settings.sound = 音效 settings.graphics = 圖形 settings.cleardata = 清除遊戲資料…… settings.clear.confirm = 您確定要清除資料嗎?\n此動作無法復原! -settings.clearall.confirm = [scarlet]警告![]\n這會清除所有資料,包括存檔、地圖、解鎖項目和快捷鍵綁定。\n按「是」後,遊戲將刪除所有資料並自動結束。 +settings.clearall.confirm = [scarlet]警告![]\n這會清除所有資料,包括存檔、地圖、解鎖項目和快捷鍵綁定。\n按「確定」後,遊戲將刪除所有資料並自動結束。 settings.clearsaves.confirm = 您確定您想要清除所有存檔嗎? settings.clearsaves = 清除存檔 settings.clearresearch = 清除研究 @@ -573,16 +638,16 @@ settings.clearcampaignsaves.confirm = 你確定要清除所有戰役紀錄? paused = [accent](已暫停) clear = 清除 banned = [scarlet]已被封鎖 -unplaceable.sectorcaptured = [scarlet]需要已占領的地區 yes = 是 no = 否 info.title = 資訊 error.title = [crimson]發生錯誤 error.crashtitle = 發生錯誤 unit.nobuild = [scarlet]單位不能建造 -lastaccessed = [lightgray]Last Accessed: {0} +lastaccessed = [lightgray]最後使用:{0} block.unknown = [lightgray]??? +stat.description = 用途 stat.input = 輸入 stat.output = 輸出 stat.booster = 強化 @@ -601,7 +666,7 @@ stat.displaysize = 顯示大小 stat.liquidcapacity = 液體容量 stat.powerrange = 輸出範圍 stat.linkrange = 連結範圍 -stat.instructions = 介紹 +stat.instructions = 指令 stat.powerconnections = 最大連結數 stat.poweruse = 能量使用 stat.powerdamage = 能量/傷害 @@ -610,6 +675,8 @@ stat.memorycapacity = 記憶體容量 stat.basepowergeneration = 基礎能量生產 stat.productiontime = 生產時間 stat.repairtime = 方塊完全修復時間 +stat.weapons = 武器 +stat.bullet = 子彈 stat.speedincrease = 速度提升 stat.range = 範圍 stat.drilltier = 可鑽取礦物 @@ -617,6 +684,7 @@ stat.drillspeed = 基本鑽取速度 stat.boosteffect = 加速效果 stat.maxunits = 最大活躍單位 stat.health = 耐久度 +stat.armor = 裝甲 stat.buildtime = 建設時間 stat.maxconsecutive = 最大連續 stat.buildcost = 建造成本 @@ -632,6 +700,7 @@ stat.lightningchance = 燃燒機率 stat.lightningdamage = 燃燒傷害 stat.flammability = 易燃性 stat.radioactivity = 輻射性 +stat.charge = 蓄電力 stat.heatcapacity = 熱容量 stat.viscosity = 黏度 stat.temperature = 溫度 @@ -642,28 +711,32 @@ stat.minetier = 挖掘等級 stat.payloadcapacity = 負荷量 stat.commandlimit = 指令限制 stat.abilities = 能力 +stat.canboost = 可加速 +stat.flying = 飛行中 +stat.ammouse = 彈藥使用 -ability.forcefield = Force Field -ability.repairfield = Repair Field -ability.statusfield = Status Field -ability.unitspawn = {0} Factory -ability.shieldregenfield = Shield Regen Field +ability.forcefield = 防護罩 +ability.repairfield = 維修力場 +ability.statusfield = 狀態力場 +ability.unitspawn = {0}工廠 +ability.shieldregenfield = 護盾充能力場 +ability.movelightning = 移動閃電 bar.drilltierreq = 需要更好的鑽頭 bar.noresources = 缺少資源 -bar.corereq = 核心基礎需求 +bar.corereq = 需由核心升級 bar.drillspeed = 鑽頭速度:{0}/秒 bar.pumpspeed = 液體泵送速度:{0}/秒 bar.efficiency = 效率:{0}% +bar.boost = 速度加成:{0}% bar.powerbalance = 能量變化:{0} -bar.powerstored = 能量存量: {0}/{1} +bar.powerstored = 能量存量:{0}/{1} bar.poweramount = 能量:{0} bar.poweroutput = 能量輸出:{0} -bar.powerlines = 連線: {0}/{1} +bar.powerlines = 連線:{0}/{1} bar.items = 物品:{0} -bar.capacity = 容量: {0} +bar.capacity = 容量:{0} bar.unitcap = {0} {1}/{2} -bar.limitreached = [scarlet] {0} / {1}[white] {2}\n[lightgray][[unit disabled] bar.liquid = 液體 bar.heat = 熱 bar.power = 能量 @@ -676,12 +749,15 @@ units.processorcontrol = [lightgray]由微處理器控制 bullet.damage = [stat]{0}[lightgray]傷害 bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格 bullet.incendiary = [stat]燃燒 +bullet.sapping = [stat]吸血 bullet.homing = [stat]追蹤 bullet.shock = [stat]電擊 bullet.frag = [stat]破片彈 +bullet.buildingdamage = [stat]{0}%[lightgray] 建築傷害 bullet.knockback = [stat]{0}[lightgray]擊退 bullet.pierce = [stat]{0}[lightgray]×穿刺 bullet.infinitepierce = [stat]穿刺 +bullet.healpercent = [stat]{0}[lightgray]% 回復 bullet.freezing = [stat]冷凍 bullet.tarred = [stat]焦油 bullet.multiplier = [stat]{0}[lightgray]×彈藥倍數 @@ -706,6 +782,8 @@ unit.items = 物品 unit.thousands = 千 unit.millions = 百萬 unit.billions = 十億 +unit.pershot = /發 +category.purpose = 用途 category.general = 一般 category.power = 能量 category.liquids = 液體 @@ -718,7 +796,9 @@ setting.shadows.name = 陰影 setting.blockreplace.name = 方塊建造建議 setting.linear.name = 線性過濾 setting.hints.name = 提示 -setting.flow.name = 顯示資源輸送速度[scarlet] +setting.logichints.name = 邏輯提示 +setting.flow.name = 顯示資源輸送速度 +setting.backgroundpause.name = 背景執行時暫停 setting.buildautopause.name = 自動暫停建築 setting.animatedwater.name = 液體動畫 setting.animatedshields.name = 護盾動畫 @@ -747,16 +827,15 @@ setting.conveyorpathfinding.name = 自動輸送帶放置規劃 setting.sensitivity.name = 控制器靈敏度 setting.saveinterval.name = 自動存檔間隔 setting.seconds = {0}秒 -setting.blockselecttimeout.name = 跳過方塊建造時距 setting.milliseconds = {0}毫秒 setting.fullscreen.name = 全螢幕 setting.borderlesswindow.name = 無邊框視窗[lightgray](可能需要重新啟動遊戲) -setting.fps.name = 顯示FPS與Ping +setting.fps.name = 顯示FPS與延遲 setting.smoothcamera.name = 平滑攝影機 setting.vsync.name = 垂直同步 setting.pixelate.name = 像素化 setting.minimap.name = 顯示小地圖 -setting.coreitems.name = 顯示核心時間(開發中) +setting.coreitems.name = 顯示核心物品 setting.position.name = 顯示玩家位置 setting.musicvol.name = 音樂音量 setting.atmosphere.name = 顯示星球大氣層 @@ -772,7 +851,9 @@ setting.chatopacity.name = 聊天框不透明度 setting.lasersopacity.name = 雷射不透明度 setting.bridgeopacity.name = 橋透明度 setting.playerchat.name = 在遊戲中顯示聊天視窗 +setting.showweather.name = 顯示天氣動畫 public.confirm = 您想公開遊戲嗎?\n[accent]任何人都可以加入您的遊戲。\n[lightgray]之後可以在「設定」→「遊戲」→「公開遊戲可見度」中進行更改。 +public.confirm.really = 如果你想和朋友一起遊玩,可利用[green]邀請好友[]而不是[scarlet]公開伺服器[]!\n你確定要將伺服設為[scarlet]公開[]? public.beta = 請注意,該遊戲的Beta版本無法公開遊戲大廳。 uiscale.reset = 使用者介面縮放已變更\n按下「確定」確認這個比例\n[scarlet][accent] {0}[] 秒後退出並還原設定 uiscale.cancel = 取消並退出 @@ -799,8 +880,8 @@ keybind.toggle_block_status.name = 開啟方塊狀態顯示 keybind.move_x.name = 水平移動 keybind.move_y.name = 垂直移動 keybind.mouse_move.name = 跟隨滑鼠 -keybind.pan.name = Pan View -keybind.boost.name = 噴射 +keybind.pan.name = 平移鏡頭 +keybind.boost.name = 加速 keybind.schematic_select.name = 選擇區域 keybind.schematic_menu.name = 藍圖目錄 keybind.schematic_flip_x.name = X軸翻轉 @@ -836,6 +917,8 @@ keybind.menu.name = 主選單 keybind.pause.name = 暫停遊戲 keybind.pause_building.name = 暫停/繼續建造 keybind.minimap.name = 小地圖 +keybind.planet_map.name = 行星地圖 +keybind.research.name = 研究 keybind.chat.name = 聊天 keybind.player_list.name = 玩家列表 keybind.console.name = 終端機 @@ -845,6 +928,7 @@ keybind.toggle_menus.name = 切換畫面 keybind.chat_history_prev.name = 之前的聊天記錄 keybind.chat_history_next.name = 之後的聊天記錄 keybind.chat_scroll.name = 聊天記錄捲動 +keybind.chat_mode.name = 變更聊天模式 keybind.drop_unit.name = 放下單位 keybind.zoom_minimap.name = 縮放小地圖 mode.help.title = 模式說明 @@ -861,11 +945,12 @@ mode.custom = 自訂規則 rules.infiniteresources = 無限資源 rules.reactorexplosions = 反應爐爆炸 +rules.coreincinerates = 核心銷毀物品 rules.schematic = 允許使用藍圖 rules.wavetimer = 波次時間 rules.waves = 波次 rules.attack = 攻擊模式 -rules.buildai = 電腦建築 +rules.buildai = 電腦自動建築 rules.enemyCheat = 電腦無限資源 rules.blockhealthmultiplier = 建築物耐久度倍數 rules.blockdamagemultiplier = 建築物傷害倍數 @@ -887,18 +972,20 @@ rules.title.unit = 單位 rules.title.experimental = 實驗中 rules.title.environment = 環境 rules.lighting = 光照 -rules.enemyLights = Enemy Lights +rules.enemyLights = 敵方發光 rules.fire = 火 rules.explosions = 方塊/單位爆炸傷害 rules.ambientlight = 環境光照 rules.weather = 天氣 rules.weather.frequency = 頻率: +rules.weather.always = 永遠 rules.weather.duration = 持續時間: content.item.name = 物品 content.liquid.name = 液體 content.unit.name = 單位 content.block.name = 方塊 +content.sector.name = 地區 item.copper.name = 銅 item.lead.name = 鉛 @@ -922,46 +1009,47 @@ liquid.oil.name = 原油 liquid.cryofluid.name = 冷凍液 unit.dagger.name = 匕首機甲 -unit.mace.name = 權杖 +unit.mace.name = 甩棍 unit.fortress.name = 要塞 unit.nova.name = 超新星 unit.pulsar.name = 脈衝星 unit.quasar.name = 類星體 unit.crawler.name = 爬行機甲 -unit.atrax.name = Atrax -unit.spiroct.name = 尖刺 -unit.arkyid.name = Arkyid -unit.toxopid.name = Toxopid -unit.flare.name = Flare -unit.horizon.name = Horizon -unit.zenith.name = Zenith -unit.antumbra.name = Antumbra -unit.eclipse.name = Eclipse -unit.mono.name = Mono -unit.poly.name = Poly -unit.mega.name = Mega -unit.quad.name = Quad -unit.oct.name = Oct -unit.risso.name = Risso -unit.minke.name = Minke -unit.bryde.name = Bryde -unit.sei.name = Sei -unit.omura.name = Omura -unit.alpha.name = Alpha -unit.beta.name = Beta -unit.gamma.name = Gamma -unit.scepter.name = Scepter -unit.reign.name = Reign -unit.vela.name = Vela -unit.corvus.name = Corvus +unit.atrax.name = 火毒機甲 +unit.spiroct.name = 血魔機甲 +unit.arkyid.name = 魔毒蛛 +unit.toxopid.name = 鬼毒蛛 +unit.flare.name = 曳光戰機 +unit.horizon.name = 天際轟炸機 +unit.zenith.name = 穹頂飛彈艇 +unit.antumbra.name = 環蝕戰艦 +unit.eclipse.name = 全蝕戰艦 +unit.mono.name = 採礦無人機 +unit.poly.name = 建築衛機 +unit.mega.name = 修補運輸機 +unit.quad.name = 重型運輸艦 +unit.oct.name = 護盾航母 +unit.risso.name = 海豚號 +unit.minke.name = 鬚鯨號 +unit.bryde.name = 鯷鯨號 +unit.sei.name = 塞鯨號 +unit.omura.name = 角島鯨號 +unit.alpha.name = 阿爾法 +unit.beta.name = 貝塔 +unit.gamma.name = 伽瑪 +unit.scepter.name = 權杖 +unit.reign.name = 帝王 +unit.vela.name = 船帆座 +unit.corvus.name = 烏鴉座 block.resupply-point.name = 補給點 block.parallax.name = 視差 block.cliff.name = 峭壁 -block.sand-boulder.name = 沙礫 +block.sand-boulder.name = 沙礫巨岩 +block.basalt-boulder.name = 玄武岩巨石 block.grass.name = 草 block.slag.name = 熔渣 -block.space.name = Space +block.space.name = 太空 block.salt.name = 鹽 block.salt-wall.name = 鹽牆 block.pebbles.name = 卵石 @@ -1001,7 +1089,7 @@ block.sand.name = 沙 block.darksand.name = 黑沙 block.ice.name = 冰 block.snow.name = 雪 -block.craters.name = 隕石坑 +block.craters.name = 彈坑 block.sand-water.name = 沙水 block.darksand-water.name = 黑沙水 block.char.name = 燒焦 @@ -1032,7 +1120,7 @@ block.dark-panel-4.name = 黑面板 4 block.dark-panel-5.name = 黑面板 5 block.dark-panel-6.name = 黑面板 6 block.dark-metal.name = 黑金屬 -block.basalt.name = Basalt +block.basalt.name = 玄武岩 block.hotrock.name = 熱岩 block.magmarock.name = 岩漿岩 block.copper-wall.name = 銅牆 @@ -1056,7 +1144,6 @@ block.conveyor.name = 輸送帶 block.titanium-conveyor.name = 鈦輸送帶 block.plastanium-conveyor.name = 塑鋼輸送帶 block.armored-conveyor.name = 裝甲輸送帶 -block.armored-conveyor.description = 以與鈦輸送帶相同的速度移動物品,但擁有更高的防禦。除其他傳送帶外,不接受任何從側面輸入的資源。 block.junction.name = 樞紐 block.router.name = 分配器 block.distributor.name = 大型分配器 @@ -1064,7 +1151,6 @@ block.sorter.name = 分類器 block.inverted-sorter.name = 反向分類器 block.message.name = 訊息板 block.illuminator.name = 照明燈 -block.illuminator.description = 小、緊湊而且可調整的光源。需要能源來運作。 block.overflow-gate.name = 溢流器 block.underflow-gate.name = 反向溢流器 block.silicon-smelter.name = 煉矽廠 @@ -1098,12 +1184,12 @@ block.item-void.name = 物品虛空 block.liquid-source.name = 液體源 block.liquid-void.name = 液體虛空 block.power-void.name = 能量虛空 -block.power-source.name = 無限能量源 +block.power-source.name = 能量源 block.unloader.name = 裝卸器 block.vault.name = 儲存庫 block.wave.name = 波浪砲 -block.tsunami.name = Tsunami -block.swarmer.name = 群集砲 +block.tsunami.name = 海嘯 +block.swarmer.name = 蜂擁砲 block.salvo.name = 齊射砲 block.ripple.name = 波紋砲 block.phase-conveyor.name = 相織傳送帶 @@ -1142,7 +1228,7 @@ block.arc.name = 電弧砲 block.rtg-generator.name = 放射性同位素熱發電機 block.spectre.name = 鬼影砲 block.meltdown.name = 熔毀砲 -block.foreshadow.name = Foreshadow +block.foreshadow.name = 狙擊砲 block.container.name = 容器 block.launch-pad.name = 小型發射台 block.launch-pad-large.name = 大型發射台 @@ -1151,15 +1237,20 @@ block.command-center.name = 指揮中心 block.ground-factory.name = 地面工廠 block.air-factory.name = 航空工廠 block.naval-factory.name = 海軍工廠 -block.additive-reconstructor.name = 一級升級者 -block.multiplicative-reconstructor.name = 二級升級者 -block.exponential-reconstructor.name = 三級升級者 -block.tetrative-reconstructor.name = 四級升級者 +block.additive-reconstructor.name = 二級重塑者 +block.multiplicative-reconstructor.name = 三級重塑者 +block.exponential-reconstructor.name = 四級重塑者 +block.tetrative-reconstructor.name = 五級重塑者 block.payload-conveyor.name = 原料輸送帶 block.payload-router.name = 原料分配器 -block.disassembler.name = 拆裝機 +block.disassembler.name = 還原機 block.silicon-crucible.name = 矽爐 block.overdrive-dome.name = 高速拱頂 +#以下為實驗性建築,未來可能移除 experimental, may be removed +block.block-forge.name = 方塊鑄造坊 +block.block-loader.name = 方塊裝載器 +block.block-unloader.name = 方塊卸載器 +block.interplanetary-accelerator.name = 星際加速站 block.switch.name = 按鈕 block.micro-processor.name = 微處理器 @@ -1178,57 +1269,84 @@ team.derelict.name = 灰 team.green.name = 綠 team.purple.name = 紫 -tutorial.next = [lightgray]<按下以繼續> -tutorial.intro = 您已進入[scarlet] Mindustry 教學。[]\n使用[[WASD鍵]來移動.\n滾動滾輪來放大縮小畫面.\n從[accent]開採銅礦[]開始吧靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦 -tutorial.intro.mobile = 您已進入[scarlet] Mindustry 教學。[]\n滑動螢幕即可移動。\n[accent]用兩指捏[]來縮放畫面。\n從[accent]開採銅礦[]開始吧。靠近它,然後在靠近核心的位置點擊銅礦。\n\n[accent]{0}/{1}銅礦 -tutorial.drill = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n在銅礦脈上放置一個鑽頭。\n不論在哪個選單,您也可以用快速按下按鍵[accent][[2][]然後[accent][[1][]來選擇鑽頭。\n[accent]滑鼠右擊[]停止建造。 -tutorial.drill.mobile = 手動挖掘礦石的效率很低。\n[accent]鑽頭[]能夠自動挖掘礦石。\n點選右下角的鑽頭選項\n選擇[accent]機械鑽頭[].\n通過點擊將其放置在銅礦上,然後按下下方的[accent]確認標誌[]確認您的選擇\n按下[accent] X 按鈕[] 取消放置. -tutorial.blockinfo = 每個方塊都有不同的屬性。每個鑽頭只能開採特定的礦石。\n查看方塊的資訊和屬性,[accent]在建造目錄時按下"?"鈕。[]\n\n[accent]立即訪問機械鑽頭的屬性資料。[] -tutorial.conveyor = [accent]輸送帶[]能夠將物品運輸到核心。\n製作一條從鑽頭開始到核心的輸送帶。 -tutorial.conveyor.mobile = [accent]輸送帶[]能夠將物品運輸到核心。製作一條從鑽頭開始到核心的輸送帶。\n[accent]長按數秒[]並向一個方向拖動來放置直線。\n\n[accent]{0}/{1} 條輸送帶\n[accent]0/1 交付的物品 -tutorial.turret = 防禦建築是必須的以擊退[lightgray]敵人[]。\n於核心附近建造一個雙炮。 -tutorial.drillturret = 雙炮需要[accent]銅彈[]以射擊。\n在雙炮旁邊放置一個鑽頭以供應銅。 -tutorial.pause = 在戰鬥中,你可以[accent]暫停遊戲。[]\n您可以在暫停時規劃建築物並加入建造序列。\n\n[accent]按空白鍵暫停遊戲。 -tutorial.pause.mobile = 在戰鬥中,你可以[accent]暫停遊戲。[]\n您可以在暫停時規劃建築物並加入建造序列。\n\n[accent]按左上角的此按鈕暫停。 -tutorial.unpause = 現在再次按空格鍵即可取消暫停。 -tutorial.unpause.mobile = 現在再次按空格鍵即可取消暫停。 -tutorial.breaking = 方塊經常需要被拆除。\n[accent]按住右鍵[]破壞選擇區域中的所有方塊。[]\n\n[accent]使用區域選擇拆除核心左側的所有廢料方塊。 -tutorial.breaking.mobile = 方塊經常需要被拆除。\n[accent]選擇拆除模式[],然後點擊一個方塊以破壞它。\n按住螢幕幾秒鐘並向一個方向拖動以破壞一個範圍內的方塊[]。\n按下確認標記按鈕以確認拆除。\n\n[accent]使用區域選擇拆除核心左側的所有廢料方塊。 -tutorial.withdraw = 在某些情況下,直接從方塊中取出物品是必要的。\n[accent]點擊有物品的方塊[],然後[accent]點擊在方框中的物品[]以將其取出。\n可以通過[accent]點擊或長按[]來取出物品。\n\n[accent]從核心中取出一些銅。[] -tutorial.deposit = 通過將物品從船上拖到目標方塊,將物品放入方塊中。\n\n[accent]將您的銅放到核心中。[] -tutorial.waves = [lightgray]敵人[]來臨。\n\n保護核心抵抗兩波攻擊。\n建造更多的砲塔和鑽頭。開採更多的銅。 -tutorial.waves.mobile = [lightgray]敵人[]來臨。\n\n保護核心抵抗兩波攻擊。您的飛船會自動向敵人開火。\n建造更多的砲塔和鑽頭。開採更多的銅。 -tutorial.launch = 一旦您達到特定的波數, 您就可以[accent] 發射核心[],放棄防禦並[accent]獲取核心中的所有資源。[]\n這些資源可以用於研究新科技。\n\n[accent]按下發射按鈕。 +hint.skip = 跳過 +hint.desktopMove = 使用[accent][[WASD][]來移動。 +hint.zoom = 滾動 [accent]滾輪[] 來放大縮小畫面。 +hint.mine = 靠近並 [accent]點擊[] \uf8c4 銅礦以自行採礦。 +hint.desktopShoot = [accent][[點擊左鍵][]射擊。 +hint.depositItems = 從船身拖曳到核心以存放採完的礦物。 +hint.respawn = 按[accent][[V][]以重生。 +hint.respawn.mobile = 你目前在控制單位/建築。[accent]點擊左上角的頭像[]重生。 +hint.desktopPause = 按[accent][[空白鍵][]暫停、繼續遊戲。 +hint.placeDrill = 點選右下介面的 \ue85e [accent]鑽頭[]頁。選擇 \uf870 [accent]鑽頭[]並點擊畫面將鑽頭放到銅礦上。 +hint.placeDrill.mobile = 點選右下介面的 \ue85e [accent]鑽頭[]頁。選擇 \uf870 [accent]鑽頭[]並點擊畫面將鑽頭放到銅礦上。\n\n按下 \ue800 [accent]勾勾[]來確認建造。 +hint.placeConveyor = [accent]輸送帶[]能夠將物品運到其他地方。從 \ue814 [accent]運輸[]頁中點選 \uf896 [accent]輸送帶[]。\n\n按住並拖曳以建造多個輸送帶。\n[accent]滑動滾輪[]以旋轉。 +hint.placeConveyor.mobile = [accent]輸送帶[]能夠將物品運到其他地方。從 \ue814 [accent]運輸[]頁中點選 \uf896 [accent]輸送帶[]。\n\n按住畫面超過一秒後拖曳以建造多個輸送帶。 +hint.placeTurret = 建造 \uf861 [accent]砲塔[]抵禦進犯的敵軍。\n\n砲塔需要彈藥,現在則是需要 \uf838銅。\n用輸送帶和鑽頭供應砲塔。 +hint.breaking = [accent]按住右鍵[]並拖曳以破壞方塊。 +hint.breaking.mobile = 點亮右下角的 \ue817 [accent]鐵鎚[]圖案並點擊畫面可直接拆除方塊。\n\n按住畫面超過一秒後拖曳以連續摧毀多個方塊。 +hint.research = 使用 \ue875 [accent]研究[] 按鈕來研究新科技。 +hint.research.mobile = 使用 \ue875 [accent]研究[] 按鈕來研究新科技。 +hint.unitControl = 按住[accent][[L-ctrl][]並[accent]點擊[]以控制我方的機甲和砲台。 +hint.unitControl.mobile = [accent][[點擊兩下][]以控制我方的機甲和砲台。 +hint.launch = 一旦蒐集到足夠的資源,你可以透過右下角的 \ue827 [accent]地圖[]來選取你要[accent]發射[]的區域。 +hint.launch.mobile = 一旦蒐集到足夠的資源,你可以透過選單中的 \ue827 [accent]地圖[]來選取你要[accent]發射[]的區域。 +hint.schematicSelect = 按住[accent][[F][]並拖曳可以選取方塊並貼上。\n\n按下[accent][[滑鼠中鍵][]可以複製單一方塊。 +hint.conveyorPathfind = 在建造輸送帶時按下[accent][[L-Ctrl][]可以自動產生路徑。 +hint.conveyorPathfind.mobile = 啟用 \ue844 [accent]對角線模式[]可以在建造輸送帶時自動產生路徑。 +hint.boost = 按住[accent][[L-Shift][]可以帶著你的機甲一起飛越障礙物\n\n只有少數陸行機甲有推進器。 +hint.command = 按下[accent][[G][]集結附近[accent]相似類別[]的機甲進入編隊。\n\n你要先控制一台陸行機甲才能集結其他陸行機甲。 +hint.command.mobile = [accent][[點擊兩下][]你的機甲使其他機甲進入編隊。 +hint.payloadPickup = 按下 [accent][[[] 拾起小方塊或機甲。 +hint.payloadPickup.mobile = [accent]長按[]一個方塊或單位可將其拾起。 +hint.payloadDrop = 按下 [accent]][] 可以放下持有的方塊或單位。 +hint.payloadDrop.mobile = [accent]長按[]任何空白處可以放下持有的方塊或單位。 +hint.waveFire = 以[accent]水[]裝填的[accent]波浪[]會自動撲滅附近火勢。 +hint.generator = \uf879 [accent]燃燒發電機[]消耗煤炭產生能源給相鄰的方塊。\n\n使用 \uf87f [accent]能量節點[]增加電力涵蓋範圍。 +hint.guardian = [accent]頭目[]擁有厚實的裝甲。較弱的彈藥如[accent]銅[]和[accent]鉛[]並[scarlet]沒有效果[].\n\n使用更高等的砲臺或以\uf835 [accent]石墨[]配合\uf861雙砲、\uf859齊射砲摧毀頭目。 +hint.coreUpgrade = 核心可以透過在上面[accent]覆蓋一個更高等級的核心[]來升級。\n\n放置  [accent]核心:基地[] 到  [accent]核心:碎片[] 上. 確保沒有其他障礙物。 +hint.presetLaunch = 灰色的[accent]降落地區[],例如[accent]冰凍森林[],可由任何地區發射。這類地區無須由相鄰地區進攻。\n\n[accent]數字編號地區[],像是這一個,可不是完成戰役的必要條件。 +hint.coreIncinerate = 當任一物品的核心庫存滿了後,後續進入的同種資源會被[accent]銷毀[]。 +hint.coopCampaign = 遊玩[accent]多人合作戰役[]時,同地圖所生產的資源皆會被送入[accent]自己的地區[]。\n\n任何新科技也會單向同步到自己的科技。 item.copper.description = 最基本的結構材料。在各種類型的方塊中廣泛使用。 +item.copper.details = 銅,蕈孢星上異常常見的金屬。加工前結構脆弱。 item.lead.description = 一種基本的起始材料。被廣泛用於電子設備和液體運輸方塊。 +item.lead.details = 密度高、穩定。廣泛用於電池中。\n附記:可能對生物有毒性。即便這裡也沒剩多少。 item.metaglass.description = 一種超高強度的玻璃。廣泛用於液體分配和儲存。 item.graphite.description = 礦化的碳,用於彈藥和電氣元件。 item.sand.description = 一種常見的材料,廣泛用於冶煉,包括製作合金和作為助熔劑。 item.coal.description = 遠在「播種」事件前就形成的植物化石。一種常見並容易獲得的燃料。 +item.coal.details = 看似植物化石,形成時間遠早於「播種」事件。 item.titanium.description = 一種罕見的超輕金屬,被廣泛運用於運輸液體、鑽頭和飛行載具。 item.thorium.description = 一種高密度的放射性金屬,用作結構支撐和核燃料。 item.scrap.description = 舊結構和單位的殘骸。含有微量的各種金屬。 +item.scrap.details = 古老建築、兵器留下的殘骸。 item.silicon.description = 一種非常有用的半導體,被用於太陽能電池板、很多複雜的電子設備和追蹤導彈彈藥。 item.plastanium.description = 一種輕量、可延展的材料,用於高級的飛行載具和破片彈藥。 item.phase-fabric.description = 一種近乎無重量的物質,用於先進的電子設備和自修復技術。 item.surge-alloy.description = 一種具有獨特電子特性的高級合金。 item.spore-pod.description = 合成的孢子莢。合成大氣濃度的孢子做為工業用途。用於轉化為原油、爆炸物和燃料。 -item.blast-compound.description = 一種用於炸彈和爆裂物的不穩定混合物。不建議作為燃料。 -item.pyratite.description = 一種在燃燒武器中使用的極易燃物質。 +item.spore-pod.details = 充滿孢子。很可能是人造生物。會釋放對其他生物有毒的氣體。極具侵略性。特定情況下極為易燃。 +item.blast-compound.description = 用於炸彈和高爆彈的混合物。 +item.pyratite.description = 用於至燃武器和燃燒型發電機的物質。 + liquid.water.description = 最有用的液體。常用於冷卻機器和廢物處理。 liquid.slag.description = 各種不同類型的熔融金屬混合在一起的液體。可以被分解成其所組成之礦物,或作為武器向敵方單位噴灑。 liquid.oil.description = 用於進階材料製造的液體。可以轉化為煤炭作為燃料或噴灑向敵方單位後點燃作為武器。 liquid.cryofluid.description = 一種安定,無腐蝕性的液體,用水及鈦混合成。具有很高的比熱。廣泛的用作冷卻劑。 +block.resupply-point.description = 補給銅礦彈藥給附近的單位。無法用於需要電池電力的單位。 +block.armored-conveyor.description = 以與鈦輸送帶相同的速度移動物品,但擁有更高的防禦。不接受任何從側面輸入的資源。 +block.illuminator.description = 小而美的光源。 block.message.description = 儲存一條訊息。用於盟友之間的溝通。 block.graphite-press.description = 將煤炭壓縮成石墨。 block.multi-press.description = 石墨壓縮機的升級版。利用水和電力快速高效地處理煤炭。 block.silicon-smelter.description = 使用高純度焦炭還原沙子以生產矽。 block.kiln.description = 將沙子和鉛熔煉成鋼化玻璃。需要少量能量。 block.plastanium-compressor.description = 將原油和鈦壓縮製造塑鋼。 -block.phase-weaver.description = 使用放射性的釷和大量的沙子生產相織布。需要巨量能量。 -block.alloy-smelter.description = 使用鈦、鉛、矽和銅以生產波動合金。 +block.phase-weaver.description = 使用放射性的釷和大量的沙子生產相織布。 +block.alloy-smelter.description = 使用鈦、鉛、矽和銅以生產波動合金。 block.cryofluid-mixer.description = 混合水和研磨的鈦粉製造冷卻效率更高的冷凍液。對釷反應堆是必要的。 block.blast-mixer.description = 混合胞子碎塊將火焰彈變成比較不易燃但更具爆炸性的爆炸混合物。 block.pyratite-mixer.description = 混合煤、鉛和沙子混合成為易燃的火焰彈。 @@ -1236,8 +1354,8 @@ block.melter.description = 將廢料加熱到很高的溫度產生熔渣,用 block.separator.description = 將熔渣分離成各種礦物質。將其冷卻後輸出。 block.spore-press.description = 將孢子莢壓縮成原油。 block.pulverizer.description = 將廢料粉碎成沙子。當缺少天然沙時相當有用。 -block.coal-centrifuge.description = 將原油固化成煤礦。 -block.incinerator.description = 銷毀它接收到的任何多餘物品或液體。 +block.coal-centrifuge.description = 將原油固化成煤炭。 +block.incinerator.description = 銷毀所有接收的物品或液體。 block.power-void.description = 銷毀所有輸入的能量。僅限沙盒。 block.power-source.description = 無限輸出能量。僅限沙盒。 block.item-source.description = 無限輸出物品。僅限沙盒。 @@ -1262,16 +1380,17 @@ block.mender.description = 定期修復附近的建築物。在每一波之間 block.mend-projector.description = 高級的修理方塊。可選擇使用相織布增加範圍和效率。 block.overdrive-projector.description = 提高附近建築物的速度,如鑽頭和輸送帶。可選擇使用相織布增加範圍和效率。 block.force-projector.description = 在自身周圍形成一個六角形能量力場護盾,保護內部的建築物和單位免受傷害。承受太多傷害時會過熱。可選擇用冷卻液避免過熱。可以使用相織布增加護盾範圍。 -block.shock-mine.description = 傷害踩到地雷的敵人。敵人幾乎看不見。 -block.conveyor.description = 基本物品傳輸方塊。將物品向前移動並自動將它們放入砲塔或機器中。能夠旋轉方向。 +block.shock-mine.description = 傷害經過的敵人。敵人無法指定地雷攻擊,但仍會被流彈摧毀。 +block.conveyor.description = 基本物品傳輸方塊。將物品向前移動並自動將它們放入砲塔或機器中。 block.titanium-conveyor.description = 高級物品傳輸方塊。比標準輸送帶更快地移動物品。 block.plastanium-conveyor.description = 批量輸送物品。\n從後方接受物品,並向三個方向輸出。 block.junction.description = 作為兩個交叉輸送帶的橋樑。適用於兩條不同輸送帶將不同物品運送到不同位置的情況。 block.bridge-conveyor.description = 高級的物品運輸方塊。允許跨過最多3個任何地形或建築物的方塊運輸物品。 block.phase-conveyor.description = 高級物品傳輸方塊。使用能量將物品傳送到幾個方塊外連接的相織輸送帶。 -block.sorter.description = 對物品進行分類。如果物品與所選種類匹配,則允許其通過。否則,物品將從左邊和右邊輸出。 -block.inverted-sorter.description = 處理物品的方式類似於分類器,但將所選擇的物品輸出到側面。 +block.sorter.description = 對物品進行分類。如果物品與所選種類匹配,則允許其通過。否則,物品將從兩側輸出。 +block.inverted-sorter.description = 處理物品的方式類似於分類器,但將所選擇的物品輸出到側邊。 block.router.description = 接受來自一個方向的物品並將它們平均輸出到最多3個其他方向。用於將物品從一個來源分割為多個目標。\n\n[[scarlet]不建議緊貼在生產型方塊旁使用,可能導致其被產出堵塞。[] +block.router.details = 必要之惡。不建議放置在生產建築旁,不然可能會因輸出物品造成阻塞。 block.distributor.description = 高級的分配器,可將物品均分到最多7個其他方向。 block.overflow-gate.description = 如果前面被阻擋,則向左邊和右邊輸出物品。 block.underflow-gate.description = 反向的溢流器。如果側面被阻擋,則向前方輸出物品。 @@ -1299,26 +1418,29 @@ block.steam-generator.description = 比燃燒發電機更有效率,但需要 block.differential-generator.description = 利用冷卻液和燃燒火焰彈之間的溫差產生大量的能量。 block.rtg-generator.description = 一種簡單、可靠的發電機,使用放射性化合物衰變所產生的熱產生少量能量。不需要冷卻,但產生的能量比釷反應堆少。 block.solar-panel.description = 透過太陽產生少量的能量。 -block.solar-panel-large.description = 比標準太陽能板產生更多的能量,但建造起來昂貴得多。 +block.solar-panel-large.description = 透過太陽產生少量的能量。效率較普通太陽能板高。 block.thorium-reactor.description = 從高度放射性釷產生大量能量。需要持續冷卻。如果供應的冷卻劑不足,會劇烈爆炸。產生的能量取決於釷裝載量,滿載時會達到基礎發電功率。 -block.impact-reactor.description = 先進的發電機,在尖峰值效率時能產生巨量能量。需要大量的電源輸入才能啟動該過程。 +block.impact-reactor.description = 先進的發電機,在最高效率時能產生大量能量。需要先消耗大量的能源才能啟動。 block.mechanical-drill.description = 一種便宜的鑽頭。當放置在適當的方塊上時,以緩慢的速度無限期地輸出物品。只能挖掘基本的原料。 block.pneumatic-drill.description = 一種改進的鑽頭,可以挖掘鈦。比機械鑽頭挖掘的更快。 block.laser-drill.description = 通過雷射技術可以更快地挖掘,但需要能量。此外,這種鑽頭可以挖掘放射性釷。 block.blast-drill.description = 終極的鑽頭。需要大量能量。 -block.water-extractor.description = 從地下提取水。當附近沒有湖泊時可以使用它。 +block.water-extractor.description = 從地下提取水。附近沒有地面水源時使用。 block.cultivator.description = 將大氣中微小濃度的胞子培養成工業等級的孢子莢。 +block.cultivator.details = 拾回的科技。用以極高效率生產大量的生物質。可能是當初培養現在覆蓋整個蕈孢星的孢子的培養槽。 block.oil-extractor.description = 使用大量的能量、水以及沙子鑽取原油。當附近沒有直接的原油來源時使用它。 -block.core-shard.description = 初代的核心膠囊。一旦被摧毀,會失去對該地區的控制權。不要讓這種情況發生。 -block.core-foundation.description = 第二代核心。有更好的裝甲。可以儲存更多資源。 -block.core-nucleus.description = 第三代核心,也是最後一代。裝甲非常好。可以儲存大量資源。 +block.core-shard.description = 基地的中樞。一旦被摧毀,會失去對該地區的控制權。 +block.core-shard.details = 第一代核心。輕巧、能自我複製。配備單次使用的推進器。不適合用於星際旅行初代的核心。 +block.core-foundation.description = 基地的中樞。裝甲厚實。相較於碎片核心能儲存更多的資源。第二代核心。 +block.core-foundation.details = 第二代核心。 +block.core-nucleus.description = 基地的中樞。裝甲非常厚重。可以儲存極為的大量資源。 +block.core-nucleus.details = 第三,也是最後一代核心。 block.vault.description = 儲存大量的每一種物品。當物品需求非恆定時,使用它來創建緩衝。使用[lightgray]裝卸器[]以從儲存庫提取物品。 block.container.description = 儲存少量的每一種物品。當物品需求非恆定時,使用它來創建緩衝。使用[lightgray]裝卸器[]以從容器提取物品。 block.unloader.description = 將物品從容器、倉庫或核心卸載到傳輸帶上或直接卸貨到相鄰的方塊中。透過點擊卸貨器來更改要卸貨的物品類型。 block.launch-pad.description = 無需發射核心即可直接發射物品。 -block.launch-pad-large.description = 發射台的進階版。可儲存更多物品。更快的發射速度。 block.duo.description = 一種小而便宜的砲塔。 -block.scatter.description = 不可或缺的中型防空砲塔。向敵方單位噴射鉛塊、廢料或是鋼化玻璃碎片。 +block.scatter.description = 不可或缺的中型防空砲塔。向敵方單位噴射鉛塊、廢料或是鋼化玻璃彈片。 block.scorch.description = 燃燒所有靠近它的地面敵人。在近距離非常有效。 block.hail.description = 一種小型的長距離迫擊砲。 block.wave.description = 一種可以向敵人噴灑液體束的中型砲塔。提供水時可以自動滅火。 @@ -1331,5 +1453,188 @@ block.ripple.description = 極為強大的迫擊炮塔。一次向敵人發射 block.cyclone.description = 一種對空和對地的大型砲塔。向附近單位發射爆裂性的碎塊。 block.spectre.description = 一種雙炮管的巨型砲塔。向空中及地面敵人發射大型的穿甲彈。 block.meltdown.description = 一種巨型雷射砲塔。充電並發射持續性的雷射光束。需要冷卻液以運作。 +block.foreshadow.description = 在遠方狙擊單一目標。 block.repair-point.description = 持續治療附近最近的受損單位。 -block.segment.description = 傷害並摧毀來襲的砲彈。無法將雷射砲彈作為目標。 +block.segment.description = 傷害並摧毀來襲的砲彈。無法將雷射武器的光束作為目標。 +block.parallax.description = 發射牽引光束,牽引空中目標,並在此過程中損壞它們。 +block.tsunami.description = 向敵人發射強大的液體。如果提供水會自動滅火。 +block.silicon-crucible.description = 使用火焰彈作為附加熱源,從沙子和煤炭中提煉矽。在高溫地區效率更高。 +block.disassembler.description = 以低效率將熔渣分離成少量的礦物成分。可生產釷。 +block.overdrive-dome.description = 用相織布和矽增加附近建築物的速度。 +block.payload-conveyor.description = 移動大型物體,像是從工廠出來的機甲。 +block.payload-router.description = 把大型物體分配到三個方向。 +block.command-center.description = 用幾個不同的指令控制機甲的行為。 +block.ground-factory.description = 生產陸行機甲,造好的機甲可以直接使用或者是送進重塑機升級。 +block.air-factory.description = 生產空中機甲,造好的機甲可以直接使用或者是送進重塑機升級。 +block.naval-factory.description = 生產海上機甲,造好的機甲可以直接使用或者是送進重塑機升級。 +block.additive-reconstructor.description = 把送進來的機甲升到第二級。 +block.multiplicative-reconstructor.description = 把送進來的機甲升到第三級。 +block.exponential-reconstructor.description = 把送進來的機甲升到第四級。 +block.tetrative-reconstructor.description = 把送進來的機甲升到第五級。 +block.switch.description = 一個能開關的按鈕。狀態能由處理器讀取和控制。 +block.micro-processor.description = 反覆執行所有的邏輯指令。能控制機甲和建築。 +block.logic-processor.description = 反覆執行所有的邏輯指令。能控制機甲和建築。速度較微處理器快。 +block.hyper-processor.description = 反覆執行所有的邏輯指令。能控制機甲和建築。速度較邏輯處理器快。 +block.memory-cell.description = 為邏輯處理器儲存資料。 +block.memory-bank.description = 為邏輯處理器儲存資料。大容量。 +block.logic-display.description = 顯示由處理器輸出的任意圖像。 +block.large-logic-display.description = 顯示由處理器輸出的任意圖像。 +block.interplanetary-accelerator.description = 巨大的電磁砲塔。將核心加速至脫離速度以在其他星球部署。 + +unit.dagger.description = 發射普通子彈攻擊所有附近敵人。 +unit.mace.description = 噴發烈焰攻擊所有附近敵人。 +unit.fortress.description = 發射遠程迫砲攻擊地面目標。 +unit.scepter.description = 發射大量續能子彈打擊所有附近敵人。 +unit.reign.description = 發射大量穿透型子彈打擊所有附近敵人。 +unit.nova.description = 發射雷射槍對敵人造成傷害和回復友方建築。具飛行能力。 +unit.pulsar.description = 發射電弧對敵人造成傷害和回復友方建築。具飛行能力。 +unit.quasar.description = 發射能穿透的雷射光束對敵人造成傷害和回復友方建築。具飛行能力。 具備護盾。 +unit.vela.description = 發射持續數秒的強大雷射光束,能至燃敵方建築和回復友方建築。具飛行能力。 +unit.corvus.description = 發射距離極遠的強大恢復光束,在一瞬間摧毀敵方建築、單位或回復友方建築。能越過大部分地形限制。 +unit.crawler.description = 跑向敵人並自爆,造成大範圍傷害的自殺機甲。 +unit.atrax.description = 對地面目標噴出弱化敵人的熔渣。能越過大部分地形限制。 +unit.spiroct.description = 對敵人發射吸血光束。能越過大部分地形限制。 +unit.arkyid.description = 對敵人發射大量吸血光束。能越過大部分地形限制。 +unit.toxopid.description = 發射大型電爆彈和穿透型雷射。能越過大部分地形限制的大型爬行機甲。 +unit.flare.description = 以普通子彈攻擊敵人的高速戰鬥機。 +unit.horizon.description = 投放多枚炸彈轟炸地面目標。 +unit.zenith.description = 以飛彈攻擊附近敵人的戰機。 +unit.antumbra.description = 對敵人發射大量火砲的飛行戰艦。 +unit.eclipse.description = 具兩門穿透型雷射砲和大量彈幕的超級戰艦。 +unit.mono.description = 自動採集銅和鉛存入核心。 +unit.poly.description = 自動重建被摧毀的建築和協助其他單位建造。 +unit.mega.description = 自動回復受損的建築。能拾起方塊和小型地面機甲。 +unit.quad.description = 以大型炸彈轟炸地面目標,能回復友方建築並傷害敵人。能拾起中型地面機甲。 +unit.oct.description = 具保護和回復附近友軍的護盾。能拾起絕大部分地面機甲。 +unit.risso.description = 對附近所有敵人發射大量飛彈和子彈的迷你砲艇。 +unit.minke.description = 對附近陸上敵人發射大砲和普通子彈的小型迫砲艇。 +unit.bryde.description = 對敵人發射遠程高射砲彈以及飛彈的巡邏艇。 +unit.sei.description = 對敵人發射大量飛彈和穿甲彈。 +unit.omura.description = 對敵人發射遠程穿透型砲彈。建造曳光戰機。 +unit.alpha.description = 抵禦敵軍對核心:碎片的攻擊。建造建築物。 +unit.beta.description = 抵禦敵軍對核心:基地的攻擊。建造建築物。 +unit.gamma.description = 抵禦敵軍對核心:核子的攻擊。建造建築物。 + +lst.read = [accent]讀取[]記憶體中的一項數值 +lst.write = [accent]寫入[]一項數值到記憶體中 +lst.print = 將文字加入輸出的暫存中,搭配[accent]Print Flush[]使用 +lst.draw = 將圖形加入顯示的暫存中,搭配[accent]Draw Flush[]使用 +lst.drawflush = 將所有暫存的[accent]Draw[]指令推到顯示器上 +lst.printflush = 將所有暫存的[accent]Print[]指令推到訊息板上 +lst.getlink = 由連接順序回傳連接的建築,第一個從"0"開始 +lst.control = 控制一個建築 +lst.radar = 偵測建築範圍內的單位 +lst.sensor = 獲取該建築或單位的數據 +lst.set = 設一個變數 +lst.operation = 加減乘除和計算機概論 +lst.end = 跳到第一個重頭開始執行 +lst.jump = 條件式跳到其他指令執行 +lst.unitbind = 綁定下一同種單位,存入[accent]@unit[]中. +lst.unitcontrol = 控制現在綁定的單位 +lst.unitradar = 偵測綁定單位附近的單位 +lst.unitlocate = 尋找整個地圖上特定的位置/建築\n需要綁定的單位 + +lenum.type = 建築/單位種類。\n例:操控單位建造光矛砲應使用[accent]@lancer[],而非字串 +lenum.shoot = 對該位置開火 +lenum.shootp = 對指定單位/建築開火,具自瞄功能 +lenum.configure = 建築設定,如分類器、兵器工廠 +lenum.enabled = 確認該建築是否啟用 +lenum.color = 設定照明燈的顏色 + +lenum.always = 永遠 true (直接跳). +lenum.idiv = 整數除法,無條件捨去. +lenum.div = 除法.\n除以零時回傳 [accent]null[] +lenum.mod = Modulo,求餘數 +lenum.equal = 是否相等,不管資料型態。\n非null 物件和數值相比時回傳1 +lenum.notequal = 不相等,不管資料型態. +lenum.strictequal = 嚴格檢查是否相等,會看資料型態。\n可用來檢查[accent]null[] +lenum.shl = Bit-shift left. +lenum.shr = Bit-shift right. +lenum.or = Bitwise OR. +lenum.land = Logical AND. +lenum.and = Bitwise AND. +lenum.not = Bitwise flip. +lenum.xor = Bitwise XOR. + +lenum.min = Minimum of two numbers. +lenum.max = Maximum of two numbers. +lenum.angle = Angle of vector in degrees. +lenum.len = Length of vector. +lenum.sin = Sine, in degrees. +lenum.cos = Cosine, in degrees. +lenum.tan = Tangent, in degrees. +#not a typo, look up 'range notation' +lenum.rand = Random number in range [0, value). +lenum.log = Natural logarithm (ln). +lenum.log10 = Base 10 logarithm. +lenum.noise = 2D simplex noise. +lenum.abs = 取絕對值 +lenum.sqrt = 開根號 + +lenum.any = 任何單位 +lenum.ally = 友方單位 +lenum.attacker = 具武器的單位 +lenum.enemy = 敵方單位 +lenum.boss = 頭目單位 +lenum.flying = 飛行單位 +lenum.ground = 陸上單位 +lenum.player = 玩家單位 + +lenum.ore = 尋找礦物 +lenum.damaged = 尋找受損友方建築 +lenum.spawn = 敵方重生點\n可以是核心或一個位置 +lenum.building = 尋找特定建築 + +lenum.core = 任何核心 +lenum.storage = 儲藏建築 +lenum.generator = 會發電的建築 +lenum.factory = 生產加工資源的建築,如煉矽場 +lenum.repair = 維修點 +lenum.rally = 指揮中心 +lenum.battery = 電池 +lenum.resupply = 補給點\n只有在[accent]"單位需要彈藥"[]被啟用時才有效果 +lenum.reactor = 衝擊/釷反應爐 +lenum.turret = 任何砲塔 + +sensor.in = 想查閱的建築/單位 + +radar.from = 作為雷達的建築\n偵測範圍同該建築的範圍 +radar.target = 搜索條件 +radar.and = 額外條件 +radar.order = 輸出順序,1:距離最近、血量最大 +radar.sort = 篩選方式 +radar.output = 回傳該單位為變數 + +unitradar.target = 搜索條件 +unitradar.and = 額外條件 +unitradar.order = 輸出順序,1:距離最近、血量最大 +unitradar.sort = 篩選方式 +unitradar.output = 存該單位的變數 + +control.of = 要控制的建築 +control.unit = 指定的建築/單位 +control.shoot = 是否開火 + +unitlocate.enemy = 搜索敵方或友方建築 +unitlocate.found = 回傳是否找到建築 +unitlocate.building = 回傳找到的建築為變數 +unitlocate.outx = 回傳 X 座標 +unitlocate.outy = 回傳 Y 座標 +unitlocate.group = 搜索建築種類 + +lenum.stop = 停止移動/挖礦/建造 +lenum.move = 移動到指定位置 +lenum.approach = 移動到距離指定位置一段距離的地方 +lenum.pathfind = 由內建AI前往敵方重生點 +lenum.target = 射擊指定區域 +lenum.targetp = 帶自瞄射擊指定的目標 +lenum.itemdrop = 放下物品 +lenum.itemtake = 從建築拿取物品 +lenum.paydrop = 放下拾取的負載 +lenum.paytake = 拾取船身下方的單位/建築 +lenum.flag = 單位編號(可異) +lenum.mine = 挖指定位置的礦物 +lenum.build = 建造一個建築 +lenum.getblock = 獲取指定位置的建築種類和該建築\n必須在單位的範圍內\n實體障礙物,如高山會回傳[accent]@solid[] +lenum.within = 單位是否在指定範圍內 +lenum.boost = 使用推進器 diff --git a/core/assets/contributors b/core/assets/contributors index 85449e6c45d4..2b55988f2cbb 100644 --- a/core/assets/contributors +++ b/core/assets/contributors @@ -109,3 +109,8 @@ VolasYouKnow Quick-Korx Ángel Rodríguez Aguilera Catchears +younggam +simba-fs +RedRadiation +Marko Zajc +CPX MC diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 008fb1289a90..e2dcae538ffb 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -14,7 +14,6 @@ 63730=magmarock|block-magmarock-medium 63729=sand|block-sand-medium 63728=darksand|block-darksand-medium -63727=holostone|block-holostone-medium 63726=grass|block-grass-medium 63725=salt|block-salt-medium 63724=snow|block-snow-medium @@ -285,7 +284,6 @@ 63451=scepter|unit-scepter-medium 63450=reign|unit-reign-medium 63449=dirt|block-dirt-medium -63448=dirtwall|block-dirtwall-medium 63447=stone-wall|block-stone-wall-medium 63446=spore-wall|block-spore-wall-medium 63445=ice-wall|block-ice-wall-medium @@ -295,7 +293,6 @@ 63441=salt-wall|block-salt-wall-medium 63440=shale-wall|block-shale-wall-medium 63439=dirt-wall|block-dirt-wall-medium -63438=holostone-wall|block-holostone-wall-medium 63437=basalt|block-basalt-medium 63436=dacite|block-dacite-medium 63435=boulder|block-boulder-medium diff --git a/core/assets/maps/labyrinth.msav b/core/assets/maps/labyrinth.msav index d63ca28bf9d8..9087a6da89ae 100644 Binary files a/core/assets/maps/labyrinth.msav and b/core/assets/maps/labyrinth.msav differ diff --git a/core/assets/maps/mudFlats.msav b/core/assets/maps/mudFlats.msav index 1ba2e25cebe9..adca422b8379 100644 Binary files a/core/assets/maps/mudFlats.msav and b/core/assets/maps/mudFlats.msav differ diff --git a/core/assets/maps/stainedMountains.msav b/core/assets/maps/stainedMountains.msav index b5ec28c9d4b5..6e00f916b17e 100644 Binary files a/core/assets/maps/stainedMountains.msav and b/core/assets/maps/stainedMountains.msav differ diff --git a/core/assets/maps/tarFields.msav b/core/assets/maps/tarFields.msav index 04055ac8b784..c2967456f334 100644 Binary files a/core/assets/maps/tarFields.msav and b/core/assets/maps/tarFields.msav differ diff --git a/core/assets/scripts/base.js b/core/assets/scripts/base.js index 368ebff42dae..d97e6aa8f289 100755 --- a/core/assets/scripts/base.js +++ b/core/assets/scripts/base.js @@ -1,9 +1,10 @@ "use strict"; -function log(context, obj){ - Vars.mods.scripts.log(context, String(obj)) -} +let scriptName = "base.js" +let modName = "none" +const log = (context, obj) => Vars.mods.scripts.log(context, String(obj)) +const print = text => log(modName + "/" + scriptName, text) const readString = path => Vars.mods.scripts.readString(path) const readBytes = path => Vars.mods.scripts.readBytes(path) const loadMusic = path => Vars.mods.scripts.loadMusic(path) @@ -13,11 +14,20 @@ const readFile = (purpose, ext, cons) => Vars.mods.scripts.readFile(purpose, ext const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons); const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str); const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes); +const newFloats = cap => Vars.mods.getScripts().newFloats(cap); -let scriptName = "base.js" -let modName = "none" +//these are not strictly necessary, but are kept for edge cases +const run = method => new java.lang.Runnable(){run: method} +const boolf = method => new Boolf(){get: method} +const boolp = method => new Boolp(){get: method} +const floatf = method => new Floatf(){get: method} +const floatp = method => new Floatp(){get: method} +const cons = method => new Cons(){get: method} +const prov = method => new Prov(){get: method} +const func = method => new Func(){get: method} -const print = text => log(modName + "/" + scriptName, text); +const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer})) +Call = Packages.mindustry.gen.Call //js 'extend(Base, ..., {})' = java 'new Base(...) {}' function extend(/*Base, ..., def*/){ @@ -39,16 +49,3 @@ function extend(/*Base, ..., def*/){ //For backwards compatibility, use extend instead const extendContent = extend; - -//these are not strictly necessary, but are kept for edge cases -const run = method => new java.lang.Runnable(){run: method} -const boolf = method => new Boolf(){get: method} -const boolp = method => new Boolp(){get: method} -const floatf = method => new Floatf(){get: method} -const floatp = method => new Floatp(){get: method} -const cons = method => new Cons(){get: method} -const prov = method => new Prov(){get: method} -const func = method => new Func(){get: method} - -const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer})) -Call = Packages.mindustry.gen.Call diff --git a/core/assets/scripts/global.js b/core/assets/scripts/global.js index 92a7fd55621e..ac1a812efd11 100755 --- a/core/assets/scripts/global.js +++ b/core/assets/scripts/global.js @@ -2,10 +2,11 @@ "use strict"; -function log(context, obj){ - Vars.mods.scripts.log(context, String(obj)) -} +let scriptName = "base.js" +let modName = "none" +const log = (context, obj) => Vars.mods.scripts.log(context, String(obj)) +const print = text => log(modName + "/" + scriptName, text) const readString = path => Vars.mods.scripts.readString(path) const readBytes = path => Vars.mods.scripts.readBytes(path) const loadMusic = path => Vars.mods.scripts.loadMusic(path) @@ -15,11 +16,20 @@ const readFile = (purpose, ext, cons) => Vars.mods.scripts.readFile(purpose, ext const readBinFile = (purpose, ext, cons) => Vars.mods.scripts.readBinFile(purpose, ext, cons); const writeFile = (purpose, ext, str) => Vars.mods.scripts.writeFile(purpose, ext, str); const writeBinFile = (purpose, ext, bytes) => Vars.mods.scripts.writeBinFile(purpose, ext, bytes); +const newFloats = cap => Vars.mods.getScripts().newFloats(cap); -let scriptName = "base.js" -let modName = "none" +//these are not strictly necessary, but are kept for edge cases +const run = method => new java.lang.Runnable(){run: method} +const boolf = method => new Boolf(){get: method} +const boolp = method => new Boolp(){get: method} +const floatf = method => new Floatf(){get: method} +const floatp = method => new Floatp(){get: method} +const cons = method => new Cons(){get: method} +const prov = method => new Prov(){get: method} +const func = method => new Func(){get: method} -const print = text => log(modName + "/" + scriptName, text); +const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer})) +Call = Packages.mindustry.gen.Call //js 'extend(Base, ..., {})' = java 'new Base(...) {}' function extend(/*Base, ..., def*/){ @@ -42,19 +52,6 @@ function extend(/*Base, ..., def*/){ //For backwards compatibility, use extend instead const extendContent = extend; -//these are not strictly necessary, but are kept for edge cases -const run = method => new java.lang.Runnable(){run: method} -const boolf = method => new Boolf(){get: method} -const boolp = method => new Boolp(){get: method} -const floatf = method => new Floatf(){get: method} -const floatp = method => new Floatp(){get: method} -const cons = method => new Cons(){get: method} -const prov = method => new Prov(){get: method} -const func = method => new Func(){get: method} - -const newEffect = (lifetime, renderer) => new Effect.Effect(lifetime, new Effect.EffectRenderer({render: renderer})) -Call = Packages.mindustry.gen.Call - importPackage(Packages.arc) importPackage(Packages.arc.func) importPackage(Packages.arc.graphics) @@ -136,6 +133,7 @@ const PlayerLeave = Packages.mindustry.game.EventType.PlayerLeave const PlayerConnect = Packages.mindustry.game.EventType.PlayerConnect const PlayerJoin = Packages.mindustry.game.EventType.PlayerJoin const UnitChangeEvent = Packages.mindustry.game.EventType.UnitChangeEvent +const UnitUnloadEvent = Packages.mindustry.game.EventType.UnitUnloadEvent const UnitCreateEvent = Packages.mindustry.game.EventType.UnitCreateEvent const UnitDrownEvent = Packages.mindustry.game.EventType.UnitDrownEvent const UnitDestroyEvent = Packages.mindustry.game.EventType.UnitDestroyEvent @@ -164,6 +162,7 @@ const LaunchItemEvent = Packages.mindustry.game.EventType.LaunchItemEvent const SectorInvasionEvent = Packages.mindustry.game.EventType.SectorInvasionEvent const SectorLoseEvent = Packages.mindustry.game.EventType.SectorLoseEvent const WorldLoadEvent = Packages.mindustry.game.EventType.WorldLoadEvent +const FileTreeInitEvent = Packages.mindustry.game.EventType.FileTreeInitEvent const ClientLoadEvent = Packages.mindustry.game.EventType.ClientLoadEvent const ContentInitEvent = Packages.mindustry.game.EventType.ContentInitEvent const BlockInfoEvent = Packages.mindustry.game.EventType.BlockInfoEvent diff --git a/core/assets/shaders/blockbuild.frag b/core/assets/shaders/blockbuild.frag index 0c8f30135035..fe877e873b55 100644 --- a/core/assets/shaders/blockbuild.frag +++ b/core/assets/shaders/blockbuild.frag @@ -1,6 +1,5 @@ uniform sampler2D u_texture; -uniform vec4 u_color; uniform vec2 u_texsize; uniform vec2 u_uv; uniform vec2 u_uv2; @@ -38,11 +37,11 @@ void main(){ float dst = (abs(center.x - coords.x) + abs(center.y - coords.y))/2.0; if((mod(u_time / 1.5 + value, 20.0) < 15.0 && cont(t, v))){ - gl_FragColor = u_color; + gl_FragColor = v_color; }else if(dst > (1.0-u_progress) * (center.x)){ gl_FragColor = color; - }else if((dst + 1.0 > (1.0-u_progress) * (center.x)) && color.a > 0.1){ - gl_FragColor = u_color; + }else if((dst + 1.0 > (1.0-u_progress) * (center.x)) && color.a > 0.1){ + gl_FragColor = v_color; }else{ gl_FragColor = vec4(0.0); } diff --git a/core/assets/shaders/buildbeam.frag b/core/assets/shaders/buildbeam.frag new file mode 100644 index 000000000000..10801e5b188c --- /dev/null +++ b/core/assets/shaders/buildbeam.frag @@ -0,0 +1,18 @@ +#define HIGHP + +uniform sampler2D u_texture; +uniform vec2 u_texsize; +uniform vec2 u_invsize; +uniform float u_time; +uniform float u_dp; +uniform vec2 u_offset; +varying vec2 v_texCoords; + +void main(){ + vec2 T = v_texCoords.xy; + vec2 coords = (T * u_texsize) + u_offset; + vec4 color = texture2D(u_texture, T); + + color.a *= (0.37 + abs(sin(u_time / 15.0)) * .05 + 0.2 * (step(mod(coords.x / u_dp + coords.y / u_dp + u_time / 4.0, 10.0), 3.0))); + gl_FragColor = color; +} diff --git a/core/assets/sounds/pew_.ogg b/core/assets/sounds/pew_.ogg deleted file mode 100644 index 0c1df7f711cb..000000000000 Binary files a/core/assets/sounds/pew_.ogg and /dev/null differ diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index d8928a434e21..3846092846e6 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -38,6 +38,8 @@ public class Vars implements Loadable{ public static boolean loadedLogger = false, loadedFileLogger = false; /** Whether to enable various experimental features (e.g. cliffs) */ public static boolean experimental = false; + /** Name of current Steam player. */ + public static String steamPlayerName = ""; /** Maximum extra padding around deployment schematics. */ public static final int maxLoadoutSchematicPad = 5; /** Maximum schematic size.*/ @@ -50,20 +52,18 @@ public class Vars implements Loadable{ public static final Charset charset = Charset.forName("UTF-8"); /** main application name, capitalized */ public static final String appName = "Mindustry"; - /** URL for itch.io donations. */ - public static final String donationURL = "https://anuke.itch.io/mindustry/purchase"; + /** Github API URL. */ + public static final String ghApi = "https://api.github.com"; /** URL for discord invite. */ public static final String discordURL = "https://discord.gg/mindustry"; - /** URL for sending crash reports to */ + /** URL for sending crash reports to. Currently offline. */ public static final String crashReportURL = "http://192.99.169.18/report"; /** URL the links to the wiki's modding guide.*/ public static final String modGuideURL = "https://mindustrygame.github.io/wiki/modding/1-modding/"; - /** URL to the JSON file containing all the global, public servers. Not queried in BE. */ - public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers.json"; /** URL to the JSON file containing all the BE servers. Only queried in BE. */ public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json"; - /** URL to the JSON file containing all the BE servers. Only queried in the V6 alpha (will be removed once it's out). */ - public static final String serverJsonV6URL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_v6.json"; + /** URL to the JSON file containing all the stable servers. */ + public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_v6.json"; /** URL of the github issue report template.*/ public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md"; /** list of built-in servers.*/ @@ -92,8 +92,8 @@ public class Vars implements Loadable{ public static final float turnDuration = 2 * Time.toMinutes; /** chance of an invasion per turn, 1 = 100% */ public static final float baseInvasionChance = 1f / 100f; - /** how many turns have to pass before invasions start */ - public static final int invasionGracePeriod = 20; + /** how many minutes have to pass before invasions in a *captured* sector start */ + public static final float invasionGracePeriod = 20; /** min armor fraction damage; e.g. 0.05 = at least 5% damage */ public static final float minArmorDamage = 0.1f; /** launch animation duration */ @@ -345,7 +345,7 @@ public static void loadFileLogger(){ } public static void loadSettings(){ - settings.setJson(JsonIO.json()); + settings.setJson(JsonIO.json); settings.setAppName(appName); if(steam || (Version.modifier != null && Version.modifier.contains("steam"))){ diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index 2a81d1535da9..6fa84883e85e 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -32,6 +32,7 @@ public class BaseAI{ private static final Seq tmpTiles = new Seq<>(); private static int correct = 0, incorrect = 0; + private static boolean anyDrills; private int lastX, lastY, lastW, lastH; private boolean triedWalls, foundPath; @@ -200,7 +201,7 @@ private boolean tryPlace(BasePart part, int x, int y){ int cx = x - (int)rotator.x; int cy = y - (int)rotator.y; - //chekc valid placeability + //check valid placeability for(Stile tile : result.tiles){ int realX = tile.x + cx, realY = tile.y + cy; if(!Build.validPlace(tile.block, data.team, realX, realY, tile.rotation)){ @@ -208,6 +209,16 @@ private boolean tryPlace(BasePart part, int x, int y){ } Tile wtile = world.tile(realX, realY); + if(tile.block instanceof PayloadConveyor || tile.block instanceof PayloadAcceptor){ + //near a building + for(Point2 point : Edges.getEdges(tile.block.size)){ + var t = world.build(tile.x + point.x, tile.y + point.y); + if(t != null){ + return false; + } + } + } + //may intersect AI path tmpTiles.clear(); if(tile.block.solid && wtile != null && wtile.getLinkedTilesAs(tile.block, tmpTiles).contains(t -> path.contains(t.pos()))){ @@ -217,16 +228,18 @@ private boolean tryPlace(BasePart part, int x, int y){ //make sure at least X% of resource requirements are met correct = incorrect = 0; + anyDrills = false; if(part.required instanceof Item){ for(Stile tile : result.tiles){ if(tile.block instanceof Drill){ + anyDrills = true; tile.block.iterateTaken(tile.x + cx, tile.y + cy, (ex, ey) -> { Tile res = world.rawTile(ex, ey); if(res.drop() == part.required){ correct ++; - }else{ + }else if(res.drop() != null){ incorrect ++; } }); @@ -235,7 +248,7 @@ private boolean tryPlace(BasePart part, int x, int y){ } //fail if not enough fit requirements - if((float)correct / incorrect < correctPercent){ + if(anyDrills && (incorrect != 0 || correct == 0)){ return false; } @@ -262,6 +275,7 @@ private void tryWalls(){ if(spawn == null) return; for(int wx = lastX; wx <= lastX + lastW; wx++){ + outer: for(int wy = lastY; wy <= lastY + lastH; wy++){ Tile tile = world.tile(wx, wy); @@ -276,12 +290,11 @@ private void tryWalls(){ Tile o = world.tile(tile.x + p.x, tile.y + p.y); if(o != null && (o.block() instanceof PayloadAcceptor || o.block() instanceof PayloadConveyor)){ - break; + continue outer; } if(o != null && o.team() == data.team && !(o.block() instanceof Wall)){ any = true; - break; } } diff --git a/core/src/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java index 683d04cc7818..ca945b67a9b7 100644 --- a/core/src/mindustry/ai/BlockIndexer.java +++ b/core/src/mindustry/ai/BlockIndexer.java @@ -269,7 +269,6 @@ public Building findTile(Team team, float x, float y, float range, Boolf pred, boolean usePriority){ Building closest = null; float dst = 0; - float range2 = range * range; for(int rx = Math.max((int)((x - range) / tilesize / quadrantSize), 0); rx <= (int)((x + range) / tilesize / quadrantSize) && rx < quadWidth(); rx++){ for(int ry = Math.max((int)((y - range) / tilesize / quadrantSize), 0); ry <= (int)((y + range) / tilesize / quadrantSize) && ry < quadHeight(); ry++){ @@ -282,13 +281,13 @@ public Building findTile(Team team, float x, float y, float range, Boolf costTypes = Seq.with( //ground @@ -90,6 +89,11 @@ public Pathfinder(){ preloadPath(getField(state.rules.waveTeam, costGround, fieldCore)); + //preload water on naval maps + if(spawner.getSpawns().contains(t -> t.floor().isLiquid)){ + preloadPath(getField(state.rules.waveTeam, costNaval, fieldCore)); + } + start(); }); @@ -187,31 +191,6 @@ public void run(){ //total update time no longer than maxUpdate for(Flowfield data : threadList){ updateFrontier(data, maxUpdate / threadList.size); - - //TODO implement timeouts... or don't - /* - //remove flowfields that have 'timed out' so they can be garbage collected and no longer waste space - if(data.refreshRate > 0 && Time.timeSinceMillis(data.lastUpdateTime) > fieldTimeout){ - //make sure it doesn't get removed twice - data.lastUpdateTime = Time.millis(); - - Team team = data.team; - - Core.app.post(() -> { - //remove its used state - if(fieldMap[team.id] != null){ - fieldMap[team.id].remove(data.target); - fieldMapUsed[team.id].remove(data.target); - } - //remove from main thread list - mainList.remove(data); - }); - - queue.post(() -> { - //remove from this thread list with a delay - threadList.remove(data); - }); - }*/ } } @@ -287,7 +266,7 @@ public Flowfield getField(Team team, int costType, int fieldType){ } } - if(current == null || tl == impassable) return tile; + if(current == null || tl == impassable || (path.cost == costTypes.items[costGround] && current.dangerous() && !tile.dangerous())) return tile; return current; } diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index afc8ab30db92..f5930ef7f2d8 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -73,7 +73,7 @@ public void spawnEnemies(){ for(int i = 0; i < spawned; i++){ Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1); unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread)); - unit.add(); + spawnEffect(unit); } }); }else{ @@ -92,7 +92,7 @@ public void spawnEnemies(){ } } - Time.runTask(121f, () -> spawning = false); + Time.run(121f, () -> spawning = false); } public void doShockwave(float x, float y){ @@ -148,8 +148,7 @@ private void eachGroundSpawn(SpawnConsumer cons){ private void eachFlyerSpawn(Floatc2 cons){ for(Tile tile : spawns){ - float angle = Angles.angle(world.width() / 2, world.height() / 2, tile.x, tile.y); - + float angle = Angles.angle(world.width() / 2f, world.height() / 2f, tile.x, tile.y); float trns = Math.max(world.width(), world.height()) * Mathf.sqrt2 * tilesize; float spawnX = Mathf.clamp(world.width() * tilesize / 2f + Angles.trnsx(angle, trns), -margin, world.width() * tilesize + margin); float spawnY = Mathf.clamp(world.height() * tilesize / 2f + Angles.trnsy(angle, trns), -margin, world.height() * tilesize + margin); @@ -168,6 +167,7 @@ public boolean isSpawning(){ } private void reset(){ + spawning = false; spawns.clear(); for(Tile tile : world.tiles){ @@ -178,8 +178,11 @@ private void reset(){ } private void spawnEffect(Unit unit){ - Call.spawnEffect(unit.x, unit.y, unit.type); - Time.run(30f, unit::add); + unit.rotation = unit.angleTo(world.width()/2f * tilesize, world.height()/2f * tilesize); + unit.apply(StatusEffects.unmoving, 30f); + unit.add(); + + Call.spawnEffect(unit.x, unit.y, unit.rotation, unit.type); } private interface SpawnConsumer{ @@ -187,8 +190,8 @@ private interface SpawnConsumer{ } @Remote(called = Loc.server, unreliable = true) - public static void spawnEffect(float x, float y, UnitType type){ - Fx.unitSpawn.at(x, y, 0f, type); + public static void spawnEffect(float x, float y, float rotation, UnitType u){ + Fx.unitSpawn.at(x, y, rotation, u); Time.run(30f, () -> Fx.spawn.at(x, y)); } diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index ce8b5ae92dac..40a008c6c747 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -13,9 +13,12 @@ import static mindustry.Vars.*; public class BuilderAI extends AIController{ - float buildRadius = 1500; + public static float buildRadius = 1500, retreatDst = 110f, fleeRange = 370f, retreatDelay = Time.toSeconds * 2f; + boolean found = false; @Nullable Unit following; + @Nullable Teamc enemy; + float retreatTimer; @Override public void updateMovement(){ @@ -27,6 +30,7 @@ public void updateMovement(){ unit.updateBuilding = true; if(following != null){ + retreatTimer = 0f; //try to follow and mimic someone //validate follower @@ -39,9 +43,25 @@ public void updateMovement(){ //set to follower's first build plan, whatever that is unit.plans.clear(); unit.plans.addFirst(following.buildPlan()); + }else if(unit.buildPlan() == null){ + //not following anyone or building + if(timer.get(timerTarget4, 40)){ + enemy = target(unit.x, unit.y, fleeRange, true, true); + } + + //fly away from enemy when not doing anything, but only after a delay + if((retreatTimer += Time.delta) >= retreatDelay){ + if(enemy != null){ + var core = unit.closestCore(); + if(core != null && !unit.within(core, retreatDst)){ + moveTo(core, retreatDst); + } + } + } } if(unit.buildPlan() != null){ + retreatTimer = 0f; //approach request if building BuildPlan req = unit.buildPlan(); diff --git a/core/src/mindustry/ai/types/FormationAI.java b/core/src/mindustry/ai/types/FormationAI.java index 39b0c81cded9..49ca55c68b3f 100644 --- a/core/src/mindustry/ai/types/FormationAI.java +++ b/core/src/mindustry/ai/types/FormationAI.java @@ -46,10 +46,10 @@ public void updateUnit(){ unit.lookAt(unit.vel.angle()); } - Vec2 realtarget = vec.set(target).add(leader.vel.x, leader.vel.y); + Vec2 realtarget = vec.set(target).add(leader.vel); - float speed = unit.realSpeed() * unit.floorSpeedMultiplier(); - unit.approach(Mathf.arrive(unit.x, unit.y, realtarget.x, realtarget.y, unit.vel, 0f, 0.01f, speed, 1f)); + float speed = unit.realSpeed() * unit.floorSpeedMultiplier() * Time.delta; + unit.approach(Mathf.arrive(unit.x, unit.y, realtarget.x, realtarget.y, unit.vel, speed, 0f, speed, 1f).scl(1f / Time.delta)); if(unit.canMine() && leader.canMine()){ if(leader.mineTile != null && unit.validMine(leader.mineTile)){ diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index a0eb6d1fa9c7..5f7252072965 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -128,9 +128,17 @@ protected void moveTo(Position target, float circleLength, float smooth){ vec.setZero(); } + //do not move when infinite vectors are used. + if(vec.isNaN() || vec.isInfinite()) return; + unit.approach(vec); } + @Override + protected boolean checkTarget(Teamc target, float x, float y, float range){ + return false; + } + //always retarget @Override protected boolean retarget(){ diff --git a/core/src/mindustry/ai/types/RepairAI.java b/core/src/mindustry/ai/types/RepairAI.java index db20cc7d6032..23feb2a0eb8f 100644 --- a/core/src/mindustry/ai/types/RepairAI.java +++ b/core/src/mindustry/ai/types/RepairAI.java @@ -1,11 +1,16 @@ package mindustry.ai.types; +import arc.util.*; import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.world.blocks.ConstructBlock.*; public class RepairAI extends AIController{ + public static float retreatDst = 160f, fleeRange = 310f, retreatDelay = Time.toSeconds * 3f; + + @Nullable Teamc avoid; + float retreatTimer; @Override protected void updateMovement(){ @@ -29,6 +34,25 @@ protected void updateMovement(){ unit.lookAt(target); } + + //not repairing + if(!(target instanceof Building)){ + if(timer.get(timerTarget4, 40)){ + avoid = target(unit.x, unit.y, fleeRange, true, true); + } + + if((retreatTimer += Time.delta) >= retreatDelay){ + //fly away from enemy when not doing anything + if(avoid != null){ + var core = unit.closestCore(); + if(core != null && !unit.within(core, retreatDst)){ + moveTo(core, retreatDst); + } + } + } + }else{ + retreatTimer = 0f; + } } @Override diff --git a/core/src/mindustry/ai/types/SuicideAI.java b/core/src/mindustry/ai/types/SuicideAI.java index 1143f31675a1..e4c146122765 100644 --- a/core/src/mindustry/ai/types/SuicideAI.java +++ b/core/src/mindustry/ai/types/SuicideAI.java @@ -1,5 +1,6 @@ package mindustry.ai.types; +import arc.math.geom.*; import mindustry.*; import mindustry.ai.*; import mindustry.entities.*; @@ -47,14 +48,17 @@ public void updateUnit(){ //raycast for target boolean blocked = Vars.world.raycast(unit.tileX(), unit.tileY(), target.tileX(), target.tileY(), (x, y) -> { - Tile tile = Vars.world.tile(x, y); - if(tile != null && tile.build == target) return false; - if(tile != null && tile.build != null && tile.build.team != unit.team()){ - blockedByBlock = true; - return true; - }else{ - return tile == null || tile.solid(); + for(Point2 p : Geometry.d4c){ + Tile tile = Vars.world.tile(x + p.x, y + p.y); + if(tile != null && tile.build == target) return false; + if(tile != null && tile.build != null && tile.build.team != unit.team()){ + blockedByBlock = true; + return true; + }else{ + return tile == null || tile.solid(); + } } + return false; }); //shoot when there's an enemy block in the way diff --git a/core/src/mindustry/async/PhysicsProcess.java b/core/src/mindustry/async/PhysicsProcess.java index a60dab7f689b..9ad2064a7ad0 100644 --- a/core/src/mindustry/async/PhysicsProcess.java +++ b/core/src/mindustry/async/PhysicsProcess.java @@ -37,8 +37,9 @@ public void begin(){ //find Unit without bodies and assign them for(Unit entity : group){ + if(entity.type == null) continue; - if(entity.physref() == null){ + if(entity.physref == null){ PhysicsBody body = new PhysicsBody(); body.x = entity.x(); body.y = entity.y(); @@ -48,13 +49,13 @@ public void begin(){ PhysicRef ref = new PhysicRef(entity, body); refs.add(ref); - entity.physref(ref); + entity.physref = ref; physics.add(body); } //save last position - PhysicRef ref = entity.physref(); + PhysicRef ref = entity.physref; ref.body.layer = entity.type.allowLegStep ? layerLegs : diff --git a/core/src/mindustry/audio/SoundControl.java b/core/src/mindustry/audio/SoundControl.java index bed176f9724c..c7d61df9b996 100644 --- a/core/src/mindustry/audio/SoundControl.java +++ b/core/src/mindustry/audio/SoundControl.java @@ -130,7 +130,7 @@ public void update(){ Core.audio.soundBus.play(); setupFilters(); }else{ - Core.audio.soundBus.stop(); + Core.audio.soundBus.replay(); } } diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 7bc2e1867943..e9f8abf2a497 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1,8 +1,6 @@ package mindustry.content; -import arc.*; import arc.graphics.*; -import arc.graphics.g2d.*; import arc.struct.*; import mindustry.*; import mindustry.ctype.*; @@ -97,36 +95,9 @@ public class Blocks implements ContentList{ public void load(){ //region environment - air = new Floor("air"){ - { - alwaysReplace = true; - hasShadow = false; - useColor = false; - wall = this; - } - - @Override public void drawBase(Tile tile){} - @Override public void load(){} - @Override public void init(){} - @Override public boolean isHidden(){ return true; } - - @Override - public TextureRegion[] variantRegions(){ - if(variantRegions == null){ - variantRegions = new TextureRegion[]{Core.atlas.find("clear")}; - } - return variantRegions; - } - }; - - spawn = new OverlayFloor("spawn"){ - { - variants = 0; - needsSurface = false; - } - @Override - public void drawBase(Tile tile){} - }; + air = new AirBlock("air"); + + spawn = new SpawnBlock("spawn"); cliff = new Cliff("cliff"){{ inEditor = false; @@ -788,6 +759,7 @@ public void drawBase(Tile tile){} health = 130 * wallHealthMultiplier; insulated = true; absorbLasers = true; + schematicPriority = 10; }}; plastaniumWallLarge = new Wall("plastanium-wall-large"){{ @@ -796,6 +768,7 @@ public void drawBase(Tile tile){} size = 2; insulated = true; absorbLasers = true; + schematicPriority = 10; }}; thoriumWall = new Wall("thorium-wall"){{ @@ -1312,7 +1285,7 @@ public void drawBase(Tile tile){} }}; waterExtractor = new SolidPump("water-extractor"){{ - requirements(Category.production, with(Items.copper, 25, Items.graphite, 25, Items.lead, 20)); + requirements(Category.production, with(Items.copper, 30, Items.graphite, 30, Items.lead, 30)); result = Liquids.water; pumpAmount = 0.11f; size = 2; @@ -1398,6 +1371,7 @@ public void drawBase(Tile tile){} size = 3; itemCapacity = 1000; flags = EnumSet.of(BlockFlag.storage); + group = BlockGroup.transportation; }}; container = new StorageBlock("container"){{ @@ -1405,6 +1379,7 @@ public void drawBase(Tile tile){} size = 2; itemCapacity = 300; flags = EnumSet.of(BlockFlag.storage); + group = BlockGroup.transportation; }}; unloader = new Unloader("unloader"){{ @@ -1537,7 +1512,7 @@ public void drawBase(Tile tile){} shootSound = Sounds.laser; shootType = new LaserBulletType(140){{ - colors = new Color[]{Pal.lancerLaser.cpy().mul(1f, 1f, 1f, 0.4f), Pal.lancerLaser, Color.white}; + colors = new Color[]{Pal.lancerLaser.cpy().a(0.4f), Pal.lancerLaser, Color.white}; hitEffect = Fx.hitLancer; despawnEffect = Fx.none; hitSize = 4; @@ -1595,7 +1570,7 @@ public void drawBase(Tile tile){} shots = 4; burstSpacing = 5; inaccuracy = 10f; - range = 190f; + range = 200f; xRand = 6f; size = 2; health = 300 * size * size; @@ -1661,6 +1636,7 @@ public void drawBase(Tile tile){} shootEffect = Fx.shootLiquid; range = 190f; health = 250 * size * size; + flags = EnumSet.of(BlockFlag.turret, BlockFlag.extinguisher); }}; fuse = new ItemTurret("fuse"){{ @@ -1838,6 +1814,7 @@ Items.surgeAlloy, new PointBulletType(){{ shootType = new ContinuousLaserBulletType(70){{ length = 200f; hitEffect = Fx.hitMeltdown; + hitColor = Pal.meltdownHit; drawSize = 420f; incendChance = 0.4f; @@ -1992,7 +1969,7 @@ Items.surgeAlloy, new PointBulletType(){{ powerSource = new PowerSource("power-source"){{ requirements(Category.power, BuildVisibility.sandboxOnly, with()); - powerProduction = 10000f / 60f; + powerProduction = 1000000f / 60f; alwaysUnlocked = true; }}; @@ -2055,6 +2032,7 @@ Items.surgeAlloy, new PointBulletType(){{ //TODO remove launchPadLarge = new LaunchPad("launch-pad-large"){{ + requirements(Category.effect, BuildVisibility.debugOnly, ItemStack.with(Items.titanium, 200, Items.silicon, 150, Items.lead, 250, Items.plastanium, 75)); size = 4; itemCapacity = 300; launchTime = 60f * 35; @@ -2069,6 +2047,7 @@ Items.surgeAlloy, new PointBulletType(){{ hasPower = true; consumes.power(10f); buildCostMultiplier = 0.5f; + health = size * size * 80; }}; //endregion campaign @@ -2146,21 +2125,21 @@ Items.surgeAlloy, new PointBulletType(){{ //region experimental blockForge = new BlockForge("block-forge"){{ - requirements(Category.production, BuildVisibility.debugOnly, with(Items.thorium, 100)); + requirements(Category.crafting, BuildVisibility.debugOnly, with(Items.thorium, 100)); hasPower = true; consumes.power(2f); size = 3; }}; blockLoader = new BlockLoader("block-loader"){{ - requirements(Category.production, BuildVisibility.debugOnly, with(Items.thorium, 100)); + requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.thorium, 100)); hasPower = true; consumes.power(2f); size = 3; }}; blockUnloader = new BlockUnloader("block-unloader"){{ - requirements(Category.production, BuildVisibility.debugOnly, with(Items.thorium, 100)); + requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.thorium, 100)); hasPower = true; consumes.power(2f); size = 3; diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index dbed9cc7ac4c..2792146ce95b 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -155,7 +155,7 @@ public void load(){ width = 6f; height = 8f; hitEffect = Fx.flakExplosion; - splashDamage = 27f; + splashDamage = 27f * 1.5f; splashDamageRadius = 15f; }}; @@ -167,7 +167,7 @@ public void load(){ width = 6f; height = 8f; hitEffect = Fx.flakExplosion; - splashDamage = 22f; + splashDamage = 22f * 1.5f; splashDamageRadius = 24f; }}; @@ -179,10 +179,10 @@ public void load(){ width = 6f; height = 8f; hitEffect = Fx.flakExplosion; - splashDamage = 22f; + splashDamage = 22f * 1.5f; splashDamageRadius = 20f; fragBullet = flakGlassFrag; - fragBullets = 5; + fragBullets = 6; }}; fragGlassFrag = new BasicBulletType(3f, 5, "bullet"){{ @@ -212,19 +212,19 @@ public void load(){ width = 6f; height = 8f; hitEffect = Fx.flakExplosion; - splashDamage = 18f; + splashDamage = 18f * 1.5f; splashDamageRadius = 16f; fragBullet = fragGlassFrag; - fragBullets = 3; + fragBullets = 4; explodeRange = 20f; collidesGround = true; }}; fragPlastic = new FlakBulletType(4f, 6){{ splashDamageRadius = 40f; - splashDamage = 25f; + splashDamage = 25f * 1.5f; fragBullet = fragPlasticFrag; - fragBullets = 5; + fragBullets = 6; hitEffect = Fx.plasticExplosion; frontColor = Pal.plastaniumFront; backColor = Pal.plastaniumBack; @@ -235,9 +235,9 @@ public void load(){ fragExplosive = new FlakBulletType(4f, 5){{ shootEffect = Fx.shootBig; - ammoMultiplier = 4f; - splashDamage = 18f; - splashDamageRadius = 55f; + ammoMultiplier = 5f; + splashDamage = 26f * 1.5f; + splashDamageRadius = 60f; collidesGround = true; status = StatusEffects.blasted; @@ -245,9 +245,9 @@ public void load(){ }}; fragSurge = new FlakBulletType(4.5f, 13){{ - ammoMultiplier = 4f; - splashDamage = 50f; - splashDamageRadius = 40f; + ammoMultiplier = 5f; + splashDamage = 50f * 1.5f; + splashDamageRadius = 38f; lightning = 2; lightningLength = 7; shootEffect = Fx.shootBig; @@ -261,7 +261,7 @@ public void load(){ shrinkY = 0f; drag = -0.01f; splashDamageRadius = 30f; - splashDamage = 30f; + splashDamage = 30f * 1.5f; ammoMultiplier = 4f; hitEffect = Fx.blastExplosion; despawnEffect = Fx.blastExplosion; @@ -279,7 +279,7 @@ public void load(){ drag = -0.01f; homingPower = 0.08f; splashDamageRadius = 20f; - splashDamage = 20f; + splashDamage = 20f * 1.5f; makeFire = true; hitEffect = Fx.blastExplosion; status = StatusEffects.burning; @@ -291,7 +291,7 @@ public void load(){ shrinkY = 0f; drag = -0.01f; splashDamageRadius = 25f; - splashDamage = 25f; + splashDamage = 25f * 1.5f; hitEffect = Fx.blastExplosion; despawnEffect = Fx.blastExplosion; lightningDamage = 10; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 7688108ebe8a..2b5fd4220b27 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -26,17 +26,23 @@ public class Fx{ none = new Effect(0, 0f, e -> {}), unitSpawn = new Effect(30f, e -> { - if(!(e.data instanceof UnitType)) return; - - alpha(e.fin()); + if(!(e.data instanceof UnitType unit)) return; float scl = 1f + e.fout() * 2f; - UnitType unit = e.data(); TextureRegion region = unit.icon(Cicon.full); + alpha(e.fout()); + mixcol(Color.white, e.fin()); + + rect(region, e.x, e.y, 180f); + + reset(); + + alpha(e.fin()); + rect(region, e.x, e.y, - region.width * Draw.scl * scl, region.height * Draw.scl * scl, 180f); + region.width * Draw.scl * scl, region.height * Draw.scl * scl, e.rotation - 90); }), @@ -418,6 +424,16 @@ public class Fx{ Fill.circle(e.x + x, e.y + y, e.fout() * 2f); }); }), + + hitLaserBlast = new Effect(12, e -> { + color(e.color); + stroke(e.fout() * 1.5f); + + randLenVectors(e.id, 8, e.finpow() * 17f, e.rotation, 360f, (x, y) -> { + float ang = Mathf.angle(x, y); + lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f); + }); + }), hitLancer = new Effect(12, e -> { color(Color.white); @@ -429,6 +445,16 @@ public class Fx{ }); }), + hitBeam = new Effect(12, e -> { + color(e.color); + stroke(e.fout() * 2f); + + randLenVectors(e.id, 6, e.finpow() * 18f, e.rotation, 360f, (x, y) -> { + float ang = Mathf.angle(x, y); + lineAngle(e.x + x, e.y + y, ang, e.fout() * 4 + 1f); + }); + }), + hitMeltdown = new Effect(12, e -> { color(Pal.meltdownHit); stroke(e.fout() * 2f); @@ -697,6 +723,19 @@ public class Fx{ stroke(2f * e.fout()); Lines.circle(e.x, e.y, 5f * e.fout()); }), + + forceShrink = new Effect(20, e -> { + color(e.color, e.fout()); + if(renderer.animateShields){ + Fill.poly(e.x, e.y, 6, e.rotation * e.fout()); + }else{ + stroke(1.5f); + Draw.alpha(0.09f); + Fill.poly(e.x, e.y, 6, e.rotation * e.fout()); + Draw.alpha(1f); + Lines.poly(e.x, e.y, 6, e.rotation * e.fout()); + } + }).layer(Layer.shields), flakExplosionBig = new Effect(30, e -> { color(Pal.bulletYellowBack); @@ -896,7 +935,7 @@ public class Fx{ }); }), - dynamicExplosion = new Effect(30, e -> { + dynamicExplosion = new Effect(30, 100f, e -> { float intensity = e.rotation; e.scaled(5 + intensity * 2, i -> { @@ -1564,6 +1603,18 @@ public class Fx{ Fill.square(e.x, e.y, e.rotation * tilesize / 2f); }), + rotateBlock = new Effect(30, e -> { + color(Pal.accent); + alpha(e.fout() * 1); + Fill.square(e.x, e.y, e.rotation * tilesize / 2f); + }), + + lightBlock = new Effect(60, e -> { + color(e.color); + alpha(e.fout() * 1); + Fill.square(e.x, e.y, e.rotation * tilesize / 2f); + }), + overdriveBlockFull = new Effect(60, e -> { color(e.color); alpha(e.fslope() * 0.4f); diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index 65c464a249fc..bd883c3ce9da 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -74,6 +74,7 @@ public void load(){ surgeAlloy = new Item("surge-alloy", Color.valueOf("f3e979")){{ cost = 1.2f; + charge = 0.75f; }}; sporePod = new Item("spore-pod", Color.valueOf("7457ce")){{ diff --git a/core/src/mindustry/content/StatusEffects.java b/core/src/mindustry/content/StatusEffects.java index b20463a65f40..fffdee401872 100644 --- a/core/src/mindustry/content/StatusEffects.java +++ b/core/src/mindustry/content/StatusEffects.java @@ -21,7 +21,7 @@ public void load(){ burning = new StatusEffect("burning"){{ color = Pal.lightFlame; - damage = 0.12f; //over 8 seconds, this would be 60 damage + damage = 0.12f; //over 8 seconds, this would be ~60 damage effect = Fx.burning; init(() -> { @@ -29,7 +29,7 @@ public void load(){ trans(tarred, ((unit, time, newTime, result) -> { unit.damagePierce(8f); Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f)); - result.set(this, Math.min(time + newTime, 300f)); + result.set(burning, Math.min(time + newTime, 300f)); })); }); }}; @@ -45,7 +45,7 @@ public void load(){ trans(blasted, ((unit, time, newTime, result) -> { unit.damagePierce(18f); - result.set(this, time); + result.set(freezing, time); })); }); }}; @@ -72,7 +72,7 @@ public void load(){ if(unit.team == state.rules.waveTeam){ Events.fire(Trigger.shock); } - result.set(this, time); + result.set(wet, time); })); opposite(burning); }); @@ -97,7 +97,7 @@ public void load(){ trans(tarred, ((unit, time, newTime, result) -> { unit.damagePierce(8f); Fx.burning.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f)); - result.set(this, Math.min(time + newTime, 200f)); + result.set(melting, Math.min(time + newTime, 200f)); })); }); }}; @@ -161,10 +161,12 @@ public void load(){ shocked = new StatusEffect("shocked"){{ color = Pal.lancerLaser; + reactive = true; }}; blasted = new StatusEffect("blasted"){{ color = Color.valueOf("ff795e"); + reactive = true; }}; corroded = new StatusEffect("corroded"){{ diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index c0d48c1723a4..b7c5062164ee 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -117,7 +117,7 @@ public void load(){ hitSize = 13f; rotateSpeed = 3f; targetAir = false; - health = 790; + health = 800; armor = 9f; mechFrontSway = 0.55f; @@ -137,8 +137,8 @@ public void load(){ width = height = 14f; collides = true; collidesTiles = true; - splashDamageRadius = 24f; - splashDamage = 45f; + splashDamageRadius = 28f; + splashDamage = 54f; backColor = Pal.bulletYellowBack; frontColor = Pal.bulletYellow; }}; @@ -150,7 +150,7 @@ public void load(){ hitSize = 20f; rotateSpeed = 2.1f; health = 9000; - armor = 11f; + armor = 10f; canDrown = false; mechFrontSway = 1f; @@ -173,7 +173,7 @@ public void load(){ inaccuracy = 3f; shotDelay = 4f; - bullet = new BasicBulletType(7f, 50){{ + bullet = new BasicBulletType(7f, 45){{ width = 11f; height = 20f; lifetime = 25f; @@ -182,7 +182,7 @@ public void load(){ lightningLength = 6; lightningColor = Pal.surge; //standard bullet damage is far too much for lightning - lightningDamage = 20; + lightningDamage = 19; }}; }}, @@ -230,7 +230,7 @@ public void load(){ ejectEffect = Fx.casing4; shootSound = Sounds.bang; - bullet = new BasicBulletType(13f, 60){{ + bullet = new BasicBulletType(13f, 65){{ pierce = true; pierceCap = 10; width = 14f; @@ -247,7 +247,7 @@ public void load(){ fragLifeMin = 0f; fragCone = 30f; - fragBullet = new BasicBulletType(9f, 15){{ + fragBullet = new BasicBulletType(9f, 18){{ width = 10f; height = 10f; pierce = true; @@ -418,8 +418,8 @@ public void load(){ engineSize = 6f; lowAltitude = true; - health = 7000f; - armor = 7f; + health = 7200f; + armor = 8f; canBoost = true; landShake = 4f; immunities = ObjectSet.with(StatusEffects.burning); @@ -435,7 +435,7 @@ public void load(){ firstShotDelay = Fx.greenLaserChargeSmall.lifetime - 1f; - reload = 160f; + reload = 155f; recoil = 0f; chargeSound = Sounds.lasercharge2; shootSound = Sounds.beam; @@ -443,8 +443,8 @@ public void load(){ cooldownTime = 200f; bullet = new ContinuousLaserBulletType(){{ - damage = 23f; - length = 160f; + damage = 26f; + length = 170f; hitEffect = Fx.hitMeltHeal; drawSize = 420f; lifetime = 160f; @@ -454,7 +454,7 @@ public void load(){ shootEffect = Fx.greenLaserChargeSmall; - incendChance = 0.075f; + incendChance = 0.08f; incendSpread = 5f; incendAmount = 1; @@ -565,9 +565,9 @@ public void load(){ hitEffect = Fx.pulverize; lifetime = 10f; speed = 1f; - splashDamageRadius = 70f; + splashDamageRadius = 58f; instantDisappear = true; - splashDamage = 80f; + splashDamage = 85f; killShooter = true; hittable = false; collidesAir = true; @@ -698,7 +698,6 @@ public void load(){ legExtension = -15; legBaseOffset = 10f; landShake = 1f; - legSpeed = 0.1f; legLengthScl = 0.96f; rippleScale = 2f; legSpeed = 0.2f; @@ -770,7 +769,7 @@ public void load(){ width = height = 19f; collidesTiles = true; ammoMultiplier = 4f; - splashDamageRadius = 95f; + splashDamageRadius = 80f; splashDamage = 65f; backColor = Pal.sapBulletBack; frontColor = lightningColor = Pal.sapBullet; @@ -868,7 +867,7 @@ public void load(){ width = height = 25f; collidesTiles = collides = true; ammoMultiplier = 4f; - splashDamageRadius = 90f; + splashDamageRadius = 80f; splashDamage = 75f; backColor = Pal.sapBulletBack; frontColor = lightningColor = Pal.sapBullet; @@ -889,7 +888,7 @@ public void load(){ lifetime = 90f; width = height = 20f; collidesTiles = false; - splashDamageRadius = 80f; + splashDamageRadius = 70f; splashDamage = 40f; backColor = Pal.sapBulletBack; frontColor = lightningColor = Pal.sapBullet; @@ -1318,6 +1317,7 @@ public void load(){ hitSize = 32f; payloadCapacity = (3 * 3) * tilePayload; buildSpeed = 2.5f; + buildBeamOffset = 23; range = 140f; targetAir = false; targetFlag = BlockFlag.battery; @@ -1366,8 +1366,8 @@ public void load(){ collides = false; healPercent = 15f; - splashDamage = 230f; - splashDamageRadius = 120f; + splashDamage = 220f; + splashDamageRadius = 80f; }}; }}); }}; @@ -1389,6 +1389,7 @@ public void load(){ drawShields = false; commandLimit = 6; lowAltitude = true; + buildBeamOffset = 43; ammoCapacity = 1300; ammoResupplyAmount = 20; @@ -1536,7 +1537,7 @@ public void load(){ width = 15f; collidesTiles = false; ammoMultiplier = 4f; - splashDamageRadius = 60f; + splashDamageRadius = 50f; splashDamage = 80f; backColor = Pal.missileYellowBack; frontColor = Pal.missileYellow; @@ -1589,7 +1590,7 @@ public void load(){ }}; sei = new UnitType("sei"){{ - health = 10000; + health = 10500; armor = 12f; speed = 0.73f; diff --git a/core/src/mindustry/core/Control.java b/core/src/mindustry/core/Control.java index 8dd487034bf7..8109bbcd7ca9 100644 --- a/core/src/mindustry/core/Control.java +++ b/core/src/mindustry/core/Control.java @@ -74,7 +74,7 @@ public Control(){ Events.on(WorldLoadEvent.class, event -> { if(Mathf.zero(player.x) && Mathf.zero(player.y)){ - Building core = state.teams.closestCore(0, 0, player.team()); + Building core = player.bestCore(); if(core != null){ player.set(core); camera.position.set(core); diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 5b7349e78e15..aa6b19e2b527 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -57,6 +57,8 @@ public Logic(){ //when loading a 'damaged' sector, propagate the damage Events.on(SaveLoadEvent.class, e -> { if(state.isCampaign()){ + state.rules.coreIncinerates = true; + SectorInfo info = state.rules.sector.info; info.write(); @@ -79,13 +81,6 @@ public Logic(){ state.wavetime = state.rules.waveSpacing; SectorDamage.applyCalculatedDamage(); - - //make sure damaged buildings are counted - for(Tile tile : world.tiles){ - if(tile.build != null && tile.build.damaged()){ - indexer.notifyTileDamaged(tile.build); - } - } } //reset values @@ -107,6 +102,7 @@ public Logic(){ if(!(state.getSector().preset != null && !state.getSector().preset.useAI)){ state.rules.waveTeam.rules().ai = true; } + state.rules.coreIncinerates = true; state.rules.waveTeam.rules().aiTier = state.getSector().threat * 0.8f; state.rules.waveTeam.rules().infiniteResources = true; @@ -204,7 +200,7 @@ public void reset(){ } public void skipWave(){ - state.wavetime = 0; + runWave(); } public void runWave(){ @@ -275,16 +271,21 @@ private void updateWeather(){ public static void sectorCapture(){ //the sector has been conquered - waves get disabled state.rules.waves = false; - //disable attack mode - state.rules.attackMode = false; - if(state.rules.sector == null) return; + if(state.rules.sector == null){ + //disable attack mode + state.rules.attackMode = false; + return; + } state.rules.sector.info.wasCaptured = true; //fire capture event Events.fire(new SectorCaptureEvent(state.rules.sector)); + //disable attack mode + state.rules.attackMode = false; + //save, just in case if(!headless && !net.client()){ control.saves.saveSector(state.rules.sector); @@ -383,7 +384,7 @@ public void update(){ Time.update(); //weather is serverside - if(!net.client()){ + if(!net.client() && !state.isEditor()){ updateWeather(); for(TeamData data : state.teams.getActive()){ diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 32b058997bef..d89b7f8481b8 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -75,6 +75,7 @@ public NetClient(){ ConnectPacket c = new ConnectPacket(); c.name = player.name; + c.locale = Core.settings.getString("locale"); c.mods = mods.getModStrings(); c.mobile = mobile; c.versionType = Version.type; @@ -396,7 +397,6 @@ public static void entitySnapshot(short amount, short dataLen, byte[] data){ netClient.byteStream.setBytes(net.decompressSnapshot(data, dataLen)); DataInputStream input = netClient.dataStream; - //go through each entity for(int j = 0; j < amount; j++){ int id = input.readInt(); byte typeID = input.readByte(); @@ -445,11 +445,16 @@ public static void blockSnapshot(short amount, short dataLen, byte[] data){ for(int i = 0; i < amount; i++){ int pos = input.readInt(); + short block = input.readShort(); Tile tile = world.tile(pos); if(tile == null || tile.build == null){ Log.warn("Missing entity at @. Skipping block snapshot.", tile); break; } + if(tile.build.block.id != block){ + Log.warn("Block ID mismatch at @: @ != @. Skipping block snapshot.", tile, tile.build.block.id, block); + break; + } tile.build.readAll(Reads.get(input), tile.build.version()); } }catch(Exception e){ @@ -476,7 +481,7 @@ public static void stateSnapshot(float waveTime, int wave, int enemies, boolean netClient.byteStream.setBytes(net.decompressSnapshot(coreData, coreDataLen)); DataInputStream input = netClient.dataStream; - byte cores = input.readByte(); + int cores = input.readInt(); for(int i = 0; i < cores; i++){ int pos = input.readInt(); Tile tile = world.tile(pos); diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index da801cc45490..9ce38aa62a42 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -155,7 +155,7 @@ public NetServer(){ if(!extraMods.isEmpty()){ result.append("Unnecessary mods:[lightgray]\n").append("> ").append(extraMods.toString("\n> ")); } - con.kick(result.toString()); + con.kick(result.toString(), 0); } if(!admins.isWhitelisted(packet.uuid, packet.usid)){ @@ -195,6 +195,10 @@ public NetServer(){ return; } + if(packet.locale == null){ + packet.locale = "en_US"; + } + String ip = con.address; admins.updatePlayerJoined(uuid, ip, packet.name); @@ -215,6 +219,7 @@ public NetServer(){ player.con.uuid = uuid; player.con.mobile = packet.mobile; player.name = packet.name; + player.locale = packet.locale; player.color.set(packet.color).a(1f); //save admin ID but don't overwrite it @@ -824,6 +829,7 @@ public void writeBlockSnapshots() throws IOException{ sent ++; dataStream.writeInt(entity.pos()); + dataStream.writeShort(entity.block.id); entity.writeAll(Writes.get(dataStream)); if(syncStream.size() > maxSnapshotSize){ @@ -844,13 +850,15 @@ public void writeBlockSnapshots() throws IOException{ public void writeEntitySnapshot(Player player) throws IOException{ syncStream.reset(); - Seq cores = state.teams.cores(player.team()); + int sum = state.teams.present.sum(t -> t.cores.size); - dataStream.writeByte(cores.size); + dataStream.writeInt(sum); - for(CoreBuild entity : cores){ - dataStream.writeInt(entity.tile.pos()); - entity.items.write(Writes.get(dataStream)); + for(TeamData data : state.teams.present){ + for(CoreBuild entity : data.cores){ + dataStream.writeInt(entity.tile.pos()); + entity.items.write(Writes.get(dataStream)); + } } dataStream.close(); diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 4b05e83a68d4..52f99b72d537 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -2,7 +2,6 @@ import arc.*; import arc.files.*; -import arc.fx.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.graphics.gl.*; @@ -15,11 +14,15 @@ import mindustry.graphics.*; import mindustry.graphics.g3d.*; import mindustry.ui.*; +import mindustry.world.blocks.storage.CoreBlock.*; import static arc.Core.*; import static mindustry.Vars.*; public class Renderer implements ApplicationListener{ + /** These are global variables, for headless access. Cached. */ + public static float laserOpacity = 0.5f, bridgeOpacity = 0.75f; + public final BlockRenderer blocks = new BlockRenderer(); public final MinimapRenderer minimap = new MinimapRenderer(); public final OverlayRenderer overlays = new OverlayRenderer(); @@ -29,17 +32,13 @@ public class Renderer implements ApplicationListener{ public @Nullable Bloom bloom; public FrameBuffer effectBuffer = new FrameBuffer(); - public float laserOpacity = 1f; + public boolean animateShields, drawWeather = true, drawStatus; /** minZoom = zooming out, maxZoom = zooming in */ public float minZoom = 1.5f, maxZoom = 6f; - //TODO unused - private FxProcessor fx = new FxProcessor(); + private @Nullable CoreBuild landCore; private Color clearColor = new Color(0f, 0f, 0f, 1f); - private float targetscale = Scl.scl(4); - private float camerascale = targetscale; - private float landscale = 0f, landTime, weatherAlpha; - private float minZoomScl = Scl.scl(0.01f); + private float targetscale = Scl.scl(4), camerascale = targetscale, landscale, landTime, weatherAlpha, minZoomScl = Scl.scl(0.01f); private float shakeIntensity, shaketime; public Renderer(){ @@ -59,17 +58,23 @@ public void init(){ if(settings.getBool("bloom", !ios)){ setupBloom(); } + + Events.on(WorldLoadEvent.class, e -> { + landCore = player.bestCore(); + }); } @Override public void update(){ Color.white.set(1f, 1f, 1f, 1f); - Gl.clear(Gl.stencilBufferBit); float dest = Mathf.round(targetscale, 0.5f); camerascale = Mathf.lerpDelta(camerascale, dest, 0.1f); if(Mathf.equal(camerascale, dest, 0.001f)) camerascale = dest; - laserOpacity = Core.settings.getInt("lasersopacity") / 100f; + laserOpacity = settings.getInt("lasersopacity") / 100f; + bridgeOpacity = settings.getInt("bridgeopacity") / 100f; + animateShields = settings.getBool("animatedshields"); + drawStatus = Core.settings.getBool("blockstatus"); if(landTime > 0){ landTime -= Time.delta; @@ -124,11 +129,6 @@ public void dispose(){ Events.fire(new DisposeEvent()); } - @Override - public void resize(int width, int height){ - fx.resize(width, height); - } - @Override public void resume(){ if(settings.getBool("bloom") && bloom != null){ @@ -163,23 +163,6 @@ public void toggleBloom(boolean enabled){ } } - void beginFx(){ - if(!fx.hasEnabledEffects()) return; - - Draw.flush(); - fx.clear(); - fx.begin(); - } - - void endFx(){ - if(!fx.hasEnabledEffects()) return; - - Draw.flush(); - fx.end(); - fx.applyEffects(); - fx.render(0, 0, fx.getWidth(), fx.getHeight()); - } - void updateShake(float scale){ if(shaketime > 0){ float intensity = shakeIntensity * (settings.getInt("screenshake", 4) / 4f) * scale; @@ -204,7 +187,7 @@ public void draw(){ graphics.clear(clearColor); Draw.reset(); - if(Core.settings.getBool("animatedwater") || Core.settings.getBool("animatedshields")){ + if(Core.settings.getBool("animatedwater") || animateShields){ effectBuffer.resize(graphics.getWidth(), graphics.getHeight()); } @@ -224,7 +207,7 @@ public void draw(){ Draw.draw(Layer.background, this::drawBackground); Draw.draw(Layer.floor, blocks.floor::drawFloor); Draw.draw(Layer.block - 1, blocks::drawShadows); - Draw.draw(Layer.block, () -> { + Draw.draw(Layer.block - 0.09f, () -> { blocks.floor.beginDraw(); blocks.floor.drawLayer(CacheLayer.walls); blocks.floor.endDraw(); @@ -248,11 +231,16 @@ public void draw(){ Draw.draw(Layer.plans, overlays::drawBottom); - if(settings.getBool("animatedshields") && Shaders.shield != null){ + if(animateShields && Shaders.shield != null){ Draw.drawRange(Layer.shields, 1f, () -> effectBuffer.begin(Color.clear), () -> { effectBuffer.end(); effectBuffer.blit(Shaders.shield); }); + + Draw.drawRange(Layer.buildBeam, 1f, () -> effectBuffer.begin(Color.clear), () -> { + effectBuffer.end(); + effectBuffer.blit(Shaders.buildBeam); + }); } Draw.draw(Layer.overlayUI, overlays::drawTop); @@ -274,25 +262,25 @@ private void drawBackground(){ } private void drawLanding(){ - if(landTime > 0 && player.closestCore() != null){ + CoreBuild entity = landCore == null ? player.bestCore() : landCore; + if(landTime > 0 && entity != null){ float fract = landTime / Fx.coreLand.lifetime; - Building entity = player.closestCore(); TextureRegion reg = entity.block.icon(Cicon.full); float scl = Scl.scl(4f) / camerascale; float s = reg.width * Draw.scl * scl * 4f * fract; Draw.color(Pal.lightTrail); - Draw.rect("circle-shadow", entity.getX(), entity.getY(), s, s); + Draw.rect("circle-shadow", entity.x, entity.y, s, s); Angles.randLenVectors(1, (1f- fract), 100, 1000f * scl * (1f-fract), (x, y, fin, fout) -> { Lines.stroke(scl * fin); - Lines.lineAngle(entity.getX() + x, entity.getY() + y, Mathf.angle(x, y), (fin * 20 + 1f) * scl); + Lines.lineAngle(entity.x + x, entity.y + y, Mathf.angle(x, y), (fin * 20 + 1f) * scl); }); Draw.color(); Draw.mixcol(Color.white, fract); - Draw.rect(reg, entity.getX(), entity.getY(), reg.width * Draw.scl * scl, reg.height * Draw.scl * scl, fract * 135f); + Draw.rect(reg, entity.x, entity.y, reg.width * Draw.scl * scl, reg.height * Draw.scl * scl, fract * 135f); Draw.reset(); } @@ -344,6 +332,7 @@ public void takeMapScreenshot(){ FrameBuffer buffer = new FrameBuffer(w, h); + drawWeather = false; float vpW = camera.width, vpH = camera.height, px = camera.position.x, py = camera.position.y; disableUI = true; camera.width = w; @@ -369,6 +358,7 @@ public void takeMapScreenshot(){ PixmapIO.writePNG(file, fullPixmap); fullPixmap.dispose(); ui.showInfoFade(Core.bundle.format("screenshot", file.toString())); + drawWeather = true; buffer.dispose(); } diff --git a/core/src/mindustry/core/UI.java b/core/src/mindustry/core/UI.java index 1eddb7b8fcc3..82e7973dcdc2 100644 --- a/core/src/mindustry/core/UI.java +++ b/core/src/mindustry/core/UI.java @@ -108,7 +108,7 @@ public void loadSync(){ Dialog.setHideAction(() -> sequence(fadeOut(0.1f))); Tooltips.getInstance().animations = false; - Tooltips.getInstance().textProvider = text -> new Tooltip(t -> t.background(Styles.black5).margin(4f).add(text)); + Tooltips.getInstance().textProvider = text -> new Tooltip(t -> t.background(Styles.black6).margin(4f).add(text)); Core.settings.setErrorHandler(e -> { Log.err(e); @@ -214,6 +214,13 @@ public void init(){ @Override public void resize(int width, int height){ if(Core.scene == null) return; + + int[] insets = Core.graphics.getSafeInsets(); + Core.scene.marginLeft = insets[0]; + Core.scene.marginRight = insets[1]; + Core.scene.marginTop = insets[2]; + Core.scene.marginBottom = insets[3]; + Core.scene.resize(width, height); Events.fire(new ResizeEvent()); } @@ -363,6 +370,16 @@ public void showInfo(String info, Runnable listener){ }}.show(); } + public void showInfoOnHidden(String info, Runnable listener){ + new Dialog(""){{ + getCell(cont).growX(); + cont.margin(15).add(info).width(400f).wrap().get().setAlignment(Align.center, Align.center); + buttons.button("@ok", this::hide).size(110, 50).pad(4); + hidden(listener); + closeOnBack(); + }}.show(); + } + public void showStartupInfo(String info){ new Dialog(""){{ getCell(cont).growX(); @@ -526,16 +543,15 @@ public void showOkText(String title, String text, Runnable confirmed){ dialog.show(); } - //TODO move? - public static String formatAmount(int number){ - if(number >= 1_000_000_000){ + int mag = Math.abs(number); + if(mag >= 1_000_000_000){ return Strings.fixed(number / 1_000_000_000f, 1) + "[gray]" + Core.bundle.get("unit.billions") + "[]"; - }else if(number >= 1_000_000){ + }else if(mag >= 1_000_000){ return Strings.fixed(number / 1_000_000f, 1) + "[gray]" + Core.bundle.get("unit.millions") + "[]"; - }else if(number >= 10_000){ + }else if(mag >= 10_000){ return number / 1000 + "[gray]" + Core.bundle.get("unit.thousands") + "[]"; - }else if(number >= 1000){ + }else if(mag >= 1000){ return Strings.fixed(number / 1000f, 1) + "[gray]" + Core.bundle.get("unit.thousands") + "[]"; }else{ return number + ""; diff --git a/core/src/mindustry/core/Version.java b/core/src/mindustry/core/Version.java index 220e75536e3b..f5b3d2fd6b64 100644 --- a/core/src/mindustry/core/Version.java +++ b/core/src/mindustry/core/Version.java @@ -53,7 +53,7 @@ public static boolean isAtLeast(String str){ int dot = str.indexOf('.'); if(dot != -1){ int major = Strings.parseInt(str.substring(0, dot), 0), minor = Strings.parseInt(str.substring(dot + 1), 0); - return build >= major && revision >= minor; + return build > major || (build == major && revision >= minor); }else{ return build >= Strings.parseInt(str, 0); } diff --git a/core/src/mindustry/core/World.java b/core/src/mindustry/core/World.java index 92c32a6c2cc8..dcb53437c3a4 100644 --- a/core/src/mindustry/core/World.java +++ b/core/src/mindustry/core/World.java @@ -4,6 +4,7 @@ import arc.func.*; import arc.math.*; import arc.math.geom.*; +import arc.math.geom.Geometry.*; import arc.struct.*; import arc.struct.ObjectIntMap.*; import arc.util.*; @@ -268,7 +269,7 @@ public void loadSector(Sector sector){ } private void setSectorRules(Sector sector){ - state.map = new Map(StringMap.of("name", sector.planet.localizedName + "; Sector " + sector.id)); + state.map = new Map(StringMap.of("name", sector.preset == null ? sector.planet.localizedName + "; Sector " + sector.id : sector.preset.localizedName)); state.rules.sector = sector; state.rules.weather.clear(); @@ -554,10 +555,6 @@ public float getDarkness(int x, int y){ return dark; } - public interface Raycaster{ - boolean accept(int x, int y); - } - private class Context implements WorldContext{ Context(){ diff --git a/core/src/mindustry/editor/MapEditor.java b/core/src/mindustry/editor/MapEditor.java index c460d7c042a5..9b62ae40a69a 100644 --- a/core/src/mindustry/editor/MapEditor.java +++ b/core/src/mindustry/editor/MapEditor.java @@ -8,6 +8,7 @@ import arc.struct.*; import mindustry.content.*; import mindustry.editor.DrawOperation.*; +import mindustry.entities.units.*; import mindustry.game.*; import mindustry.gen.*; import mindustry.io.*; @@ -259,7 +260,7 @@ public void resize(int width, int height){ clearOp(); Tiles previous = world.tiles; - int offsetX = -(width - width()) / 2, offsetY = -(height - height()) / 2; + int offsetX = (width() - width) / 2, offsetY = (height() - height) / 2; loading = true; Tiles tiles = world.resize(width, height); @@ -275,7 +276,17 @@ public void resize(int width, int height){ if(tile.build != null && tile.isCenter()){ tile.build.x = x * tilesize + tile.block().offset; tile.build.y = y * tilesize + tile.block().offset; + + //shift links to account for map resize + Object config = tile.build.config(); + if(config != null){ + Object out = BuildPlan.pointConfig(tile.block(), config, p -> p.sub(offsetX, offsetY)); + if(out != config){ + tile.build.configureAny(out); + } + } } + }else{ tiles.set(x, y, new EditorTile(x, y, Blocks.stone.id, (short)0, (short)0)); } diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index e73442497dcc..f8622569953e 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -156,7 +156,10 @@ public MapEditorDialog(){ } platform.publish(map); - }).padTop(-3).size(swidth * 2f + 10, 60f).update(b -> b.setText(editor.tags.containsKey("steamid") ? editor.tags.get("author").equals(player.name) ? "@workshop.listing" : "@view.workshop" : "@editor.publish.workshop")); + }).padTop(-3).size(swidth * 2f + 10, 60f).update(b -> + b.setText(editor.tags.containsKey("steamid") ? + editor.tags.get("author", "").equals(steamPlayerName) ? "@workshop.listing" : "@view.workshop" : + "@editor.publish.workshop")); menu.cont.row(); } @@ -258,11 +261,14 @@ private void playtest(){ player.clearUnit(); Groups.unit.clear(); Groups.build.clear(); + Groups.weather.clear(); logic.play(); if(player.team().core() == null){ player.set(world.width() * tilesize/2f, world.height() * tilesize/2f); - player.unit(UnitTypes.alpha.spawn(player.team(), player.x, player.y)); + var unit = UnitTypes.alpha.spawn(player.team(), player.x, player.y); + unit.spawnedByCore = true; + player.unit(unit); } }); } @@ -700,8 +706,6 @@ private void rebuildBlockSelection(String searchText){ if(core != 0) return core; int synth = Boolean.compare(b1.synthetic(), b2.synthetic()); if(synth != 0) return synth; - int editorVis = Boolean.compare(b1.buildVisibility == BuildVisibility.editorOnly, b2.buildVisibility == BuildVisibility.editorOnly); - if(editorVis != 0) return editorVis; int ore = Boolean.compare(b1 instanceof OverlayFloor, b2 instanceof OverlayFloor); if(ore != 0) return ore; return Integer.compare(b1.id, b2.id); diff --git a/core/src/mindustry/editor/MapGenerateDialog.java b/core/src/mindustry/editor/MapGenerateDialog.java index f6a87f77b15c..025dbeedaf14 100644 --- a/core/src/mindustry/editor/MapGenerateDialog.java +++ b/core/src/mindustry/editor/MapGenerateDialog.java @@ -285,29 +285,31 @@ void rebuildFilters(){ void showAdd(){ BaseDialog selection = new BaseDialog("@add"); - selection.setFillParent(false); - selection.cont.defaults().size(210f, 60f); - int i = 0; - for(Prov gen : filterTypes){ - GenerateFilter filter = gen.get(); - - if((filter.isPost() && applied)) continue; + selection.cont.pane(p -> { + p.marginRight(14); + p.defaults().size(210f, 60f); + int i = 0; + for(Prov gen : filterTypes){ + GenerateFilter filter = gen.get(); + + if((filter.isPost() && applied)) continue; + + p.button(filter.name(), () -> { + filters.add(filter); + rebuildFilters(); + update(); + selection.hide(); + }); + if(++i % 2 == 0) p.row(); + } - selection.cont.button(filter.name(), () -> { - filters.add(filter); + p.button("@filter.defaultores", () -> { + maps.addDefaultOres(filters); rebuildFilters(); update(); selection.hide(); }); - if(++i % 2 == 0) selection.cont.row(); - } - - selection.cont.button("@filter.defaultores", () -> { - maps.addDefaultOres(filters); - rebuildFilters(); - update(); - selection.hide(); - }); + }).get().setScrollingDisabled(true, false); selection.addCloseButton(); selection.show(); diff --git a/core/src/mindustry/editor/MapResizeDialog.java b/core/src/mindustry/editor/MapResizeDialog.java index afb0356bfa93..9d961a42465f 100644 --- a/core/src/mindustry/editor/MapResizeDialog.java +++ b/core/src/mindustry/editor/MapResizeDialog.java @@ -9,6 +9,7 @@ public class MapResizeDialog extends BaseDialog{ public static int minSize = 50, maxSize = 500, increment = 50; + int width, height; public MapResizeDialog(MapEditor editor, Intc2 cons){ diff --git a/core/src/mindustry/editor/MapView.java b/core/src/mindustry/editor/MapView.java index 4db21dec665f..69ae67d7c9c7 100644 --- a/core/src/mindustry/editor/MapView.java +++ b/core/src/mindustry/editor/MapView.java @@ -243,14 +243,14 @@ public void draw(){ image.setImageSize(editor.width(), editor.height()); - if(!ScissorStack.push(rect.set(x, y, width, height))){ + if(!ScissorStack.push(rect.set(x, y + Core.scene.marginBottom, width, height))){ return; } Draw.color(Pal.remove); Lines.stroke(2f); Lines.rect(centerx - sclwidth / 2 - 1, centery - sclheight / 2 - 1, sclwidth + 2, sclheight + 2); - editor.renderer.draw(centerx - sclwidth / 2, centery - sclheight / 2, sclwidth, sclheight); + editor.renderer.draw(centerx - sclwidth / 2, centery - sclheight / 2 + Core.scene.marginBottom, sclwidth, sclheight); Draw.reset(); if(grid){ diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index a98d03a923e1..a71d0a2d8f18 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -190,7 +190,7 @@ void buildGroups(){ group.end = never; updateWaves(); } - }).width(100f).get().setMessageText(Core.bundle.get("waves.never")); + }).width(100f).get().setMessageText("∞"); }); t.row(); t.table(p -> { diff --git a/core/src/mindustry/entities/Damage.java b/core/src/mindustry/entities/Damage.java index 9ddca6e986e0..df4e5c3a35c8 100644 --- a/core/src/mindustry/entities/Damage.java +++ b/core/src/mindustry/entities/Damage.java @@ -6,7 +6,6 @@ import arc.math.geom.*; import arc.struct.*; import arc.util.*; -import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.core.*; import mindustry.game.EventType.*; @@ -25,11 +24,10 @@ public class Damage{ private static Rect hitrect = new Rect(); private static Vec2 tr = new Vec2(), seg1 = new Vec2(), seg2 = new Vec2(); private static Seq units = new Seq<>(); - private static GridBits bits = new GridBits(30, 30); - private static IntQueue propagation = new IntQueue(); private static IntSet collidedBlocks = new IntSet(); private static Building tmpBuilding; private static Unit tmpUnit; + private static IntFloatMap damages = new IntFloatMap(); /** Creates a dynamic explosion based on specified parameters. */ public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, boolean damage){ @@ -39,9 +37,9 @@ public static void dynamicExplosion(float x, float y, float flammability, float /** Creates a dynamic explosion based on specified parameters. */ public static void dynamicExplosion(float x, float y, float flammability, float explosiveness, float power, float radius, boolean damage, boolean fire, @Nullable Team ignoreTeam){ if(damage){ - for(int i = 0; i < Mathf.clamp(power / 20, 0, 6); i++){ - int branches = 5 + Mathf.clamp((int)(power / 30), 1, 20); - Time.run(i * 2f + Mathf.random(4f), () -> Lightning.create(Team.derelict, Pal.power, 3, x, y, Mathf.random(360f), branches + Mathf.range(2))); + for(int i = 0; i < Mathf.clamp(power / 700, 0, 8); i++){ + int length = 5 + Mathf.clamp((int)(power / 500), 1, 20); + Time.run(i * 0.8f + Mathf.random(4f), () -> Lightning.create(Team.derelict, Pal.power, 3, x, y, Mathf.random(360f), length + Mathf.range(2))); } if(fire){ @@ -116,7 +114,15 @@ public static void collideLine(Bullet hitter, Team team, Effect effect, float x, * Only enemies of the specified team are damaged. */ public static void collideLine(Bullet hitter, Team team, Effect effect, float x, float y, float angle, float length, boolean large){ - length = findLaserLength(hitter, length); + collideLine(hitter, team, effect, x, y, angle, length, large, true); + } + + /** + * Damages entities in a line. + * Only enemies of the specified team are damaged. + */ + public static void collideLine(Bullet hitter, Team team, Effect effect, float x, float y, float angle, float length, boolean large, boolean laser){ + if(laser) length = findLaserLength(hitter, length); collidedBlocks.clear(); tr.trns(angle, length); @@ -206,10 +212,10 @@ public static void collideLine(Bullet hitter, Team team, Effect effect, float x, */ public static Healthc linecast(Bullet hitter, float x, float y, float angle, float length){ tr.trns(angle, length); + + tmpBuilding = null; if(hitter.type.collidesGround){ - tmpBuilding = null; - world.raycastEachWorld(x, y, x + tr.x, y + tr.y, (cx, cy) -> { Building tile = world.build(cx, cy); if(tile != null && tile.team != hitter.team){ @@ -218,8 +224,6 @@ public static Healthc linecast(Bullet hitter, float x, float y, float angle, flo } return false; }); - - if(tmpBuilding != null) return tmpBuilding; } rect.setPosition(x, y).setSize(tr.x, tr.y); @@ -263,6 +267,14 @@ public static Healthc linecast(Bullet hitter, float x, float y, float angle, flo Units.nearbyEnemies(hitter.team, rect, cons); + if(tmpBuilding != null && tmpUnit != null){ + if(Mathf.dst2(x, y, tmpUnit.getX(), tmpUnit.getY()) <= Mathf.dst2(x, y, tmpBuilding.getX(), tmpBuilding.getY())){ + return tmpUnit; + } + }else if(tmpBuilding != null){ + return tmpBuilding; + } + return tmpUnit; } @@ -351,64 +363,85 @@ public static void damage(Team team, float x, float y, float radius, float damag if(ground){ if(!complete){ - int trad = (int)(radius / tilesize); - Tile tile = world.tileWorld(x, y); - if(tile != null){ - tileDamage(team, tile.x, tile.y, trad, damage); - } + //increase damage slightly to compensate for new algorithm + tileDamage(team, World.toTile(x), World.toTile(y), radius / tilesize, damage * 1.1f); }else{ completeDamage(team, x, y, radius, damage); } } } - public static void tileDamage(Team team, int startx, int starty, int baseRadius, float baseDamage){ - //tile damage is posted, so that destroying a block that causes a chain explosion will run in the next frame - //this prevents recursive damage calls from messing up temporary variables - Core.app.post(() -> { - - bits.clear(); - propagation.clear(); - int bitOffset = bits.width() / 2; + public static void tileDamage(Team team, int x, int y, float baseRadius, float damage){ - propagation.addFirst(PropCell.get((byte)0, (byte)0, (short)baseDamage)); - //clamp radius to fit bits - int radius = Math.min(baseRadius, bits.width() / 2); - - while(!propagation.isEmpty()){ - int prop = propagation.removeLast(); - int x = PropCell.x(prop); - int y = PropCell.y(prop); - int damage = PropCell.damage(prop); - //manhattan distance used for calculating falloff, results in a diamond pattern - int dst = Math.abs(x) + Math.abs(y); - - int scaledDamage = (int)(damage * (1f - (float)dst / radius)); - - bits.set(bitOffset + x, bitOffset + y); - Tile tile = world.tile(startx + x, starty + y); + Core.app.post(() -> { - if(scaledDamage <= 0 || tile == null) continue; + var in = world.build(x, y); + //spawned inside a multiblock. this means that damage needs to be dealt directly. + //why? because otherwise the building would absorb everything in one cell, which means much less damage than a nearby explosion. + //this needs to be compensated + if(in != null && in.team != team && in.block.size > 1 && in.health > damage){ + //deal the damage of an entire side + 1, to be equivalent with maximum 'standard' damage + in.damage(damage * (in.block.size + 1)); + //no need to continue with the explosion + return; + } - //apply damage to entity if needed - if(tile.build != null && tile.build.team != team){ - int health = (int)(tile.build.health / (tile.block().size * tile.block().size)); - if(tile.build.health > 0){ - tile.build.damage(scaledDamage); - scaledDamage -= health; + //cap radius to prevent lag + float radius = Math.min(baseRadius, 30), rad2 = radius * radius; + int rays = Mathf.ceil(radius * 2 * Mathf.pi); + double spacing = Math.PI * 2.0 / rays; + damages.clear(); + + //raycast from each angle + for(int i = 0; i <= rays; i++){ + float dealt = 0f; + int startX = x; + int startY = y; + int endX = x + (int)(Math.cos(spacing * i) * radius), endY = y + (int)(Math.sin(spacing * i) * radius); + + int xDist = Math.abs(endX - startX); + int yDist = -Math.abs(endY - startY); + int xStep = (startX < endX ? +1 : -1); + int yStep = (startY < endY ? +1 : -1); + int error = xDist + yDist; + + while(startX != endX || startY != endY){ + var build = world.build(startX, startY); + if(build != null && build.team != team){ + //damage dealt at circle edge + float edgeScale = 0.6f; + float mult = (1f-(Mathf.dst2(startX, startY, x, y) / rad2) + edgeScale) / (1f + edgeScale); + float next = damage * mult - dealt; + //register damage dealt + int p = Point2.pack(startX, startY); + damages.put(p, Math.max(damages.get(p), next)); + //register as hit + dealt += build.health; + + if(next - dealt <= 0){ + break; + } + } - if(scaledDamage <= 0) continue; + if(2 * error - yDist > xDist - 2 * error){ + error += yDist; + startX += xStep; + }else{ + error += xDist; + startY += yStep; } } + } - for(Point2 p : Geometry.d4){ - if(!bits.get(bitOffset + x + p.x, bitOffset + y + p.y)){ - propagation.addFirst(PropCell.get((byte)(x + p.x), (byte)(y + p.y), (short)scaledDamage)); - } + //apply damage + for(var e : damages){ + int cx = Point2.x(e.key), cy = Point2.y(e.key); + var build = world.build(cx, cy); + if(build != null){ + build.damage(e.value); } } }); - } private static void completeDamage(Team team, float x, float y, float radius, float damage){ @@ -429,11 +462,4 @@ private static float calculateDamage(float x, float y, float tx, float ty, float float scaled = Mathf.lerp(1f - dist / radius, 1f, falloff); return damage * scaled; } - - @Struct - static class PropCellStruct{ - byte x; - byte y; - short damage; - } } diff --git a/core/src/mindustry/entities/EntityCollisions.java b/core/src/mindustry/entities/EntityCollisions.java index 342531481064..ce492bc95d44 100644 --- a/core/src/mindustry/entities/EntityCollisions.java +++ b/core/src/mindustry/entities/EntityCollisions.java @@ -3,6 +3,7 @@ import arc.math.*; import arc.math.geom.*; import arc.struct.*; +import mindustry.content.*; import mindustry.gen.*; import mindustry.world.*; @@ -126,7 +127,7 @@ public void updatePhysics(EntityGroup group){ public static boolean legsSolid(int x, int y){ Tile tile = world.tile(x, y); - return tile == null || tile.staticDarkness() >= 2 || tile.floor().solid; + return tile == null || tile.staticDarkness() >= 2 || (tile.floor().solid && tile.block() == Blocks.air); } public static boolean waterSolid(int x, int y){ @@ -190,14 +191,10 @@ private boolean collide(float x1, float y1, float w1, float h1, float vx1, float yInvExit = y2 - (y1 + h1); } - float xEntry, yEntry; - float xExit, yExit; - - xEntry = xInvEntry / vx1; - xExit = xInvExit / vx1; - - yEntry = yInvEntry / vy1; - yExit = yInvExit / vy1; + float xEntry = xInvEntry / vx1; + float xExit = xInvExit / vx1; + float yEntry = yInvEntry / vy1; + float yExit = yInvExit / vy1; float entryTime = Math.max(xEntry, yEntry); float exitTime = Math.min(xExit, yExit); diff --git a/core/src/mindustry/entities/Units.java b/core/src/mindustry/entities/Units.java index cd602327a604..970374811b40 100644 --- a/core/src/mindustry/entities/Units.java +++ b/core/src/mindustry/entities/Units.java @@ -6,6 +6,7 @@ import arc.struct.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; +import mindustry.entities.comp.*; import mindustry.game.*; import mindustry.game.Teams.*; import mindustry.gen.*; @@ -75,7 +76,7 @@ public static int getCap(Team team){ if((team == state.rules.waveTeam && !state.rules.pvp) || (state.isCampaign() && team == state.rules.waveTeam)){ return Integer.MAX_VALUE; } - return state.rules.unitCap + indexer.getExtraUnits(team); + return Math.max(0, state.rules.unitCapVariable ? state.rules.unitCap + indexer.getExtraUnits(team) : state.rules.unitCap); } /** @return whether this player can interact with a specific tile. if either of these are null, returns true.*/ @@ -93,7 +94,7 @@ public static boolean canInteract(Player player, Building tile){ * @return whether the target is invalid */ public static boolean invalidateTarget(Posc target, Team team, float x, float y, float range){ - return target == null || (range != Float.MAX_VALUE && !target.within(x, y, range)) || (target instanceof Teamc && ((Teamc)target).team() == team) || (target instanceof Healthc && !((Healthc)target).isValid()); + return target == null || (range != Float.MAX_VALUE && !target.within(x, y, range + (target instanceof Sized hb ? hb.hitSize()/2f : 0f))) || (target instanceof Teamc t && t.team() == team) || (target instanceof Healthc h && !h.isValid()); } /** See {@link #invalidateTarget(Posc, Team, float, float, float)} */ @@ -217,7 +218,7 @@ public static Unit bestEnemy(Team team, float x, float y, float range, Boolf { - if(e.dead() || !predicate.get(e) || !e.within(x, y, range)) return; + if(e.dead() || !predicate.get(e) || !e.within(x, y, range + e.hitSize/2f)) return; float cost = sort.cost(e, x, y); if(result == null || cost < cdist){ @@ -292,7 +293,7 @@ public static void nearby(Team team, float x, float y, float width, float height /** Iterates over all units in a circle around this position. */ public static void nearby(Team team, float x, float y, float radius, Cons cons){ nearby(team, x - radius, y - radius, radius*2f, radius*2f, unit -> { - if(unit.within(x, y, radius)){ + if(unit.within(x, y, radius + unit.hitSize/2f)){ cons.get(unit); } }); diff --git a/core/src/mindustry/entities/abilities/Ability.java b/core/src/mindustry/entities/abilities/Ability.java index cb6e94547b42..c11c39360203 100644 --- a/core/src/mindustry/entities/abilities/Ability.java +++ b/core/src/mindustry/entities/abilities/Ability.java @@ -1,6 +1,7 @@ package mindustry.entities.abilities; import arc.*; +import arc.scene.ui.layout.*; import mindustry.gen.*; public abstract class Ability implements Cloneable{ @@ -16,6 +17,10 @@ public Ability copy(){ } } + public void displayBars(Unit unit, Table bars){ + + } + /** @return localized ability name; mods should override this. */ public String localized(){ return Core.bundle.get("ability." + getClass().getSimpleName().replace("Ability", "").toLowerCase()); diff --git a/core/src/mindustry/entities/abilities/ForceFieldAbility.java b/core/src/mindustry/entities/abilities/ForceFieldAbility.java index d341191a7490..38961a64337a 100644 --- a/core/src/mindustry/entities/abilities/ForceFieldAbility.java +++ b/core/src/mindustry/entities/abilities/ForceFieldAbility.java @@ -6,10 +6,12 @@ import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; +import arc.scene.ui.layout.*; import arc.util.*; import mindustry.content.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.ui.*; public class ForceFieldAbility extends Ability{ /** Shield radius. */ @@ -94,6 +96,11 @@ public void draw(Unit unit){ } } + @Override + public void displayBars(Unit unit, Table bars){ + bars.add(new Bar("stat.shieldhealth", Pal.accent, () -> unit.shield / max)).row(); + } + public void checkRadius(Unit unit){ //timer2 is used to store radius scale as an effect realRad = radiusScale * radius; diff --git a/core/src/mindustry/entities/abilities/MoveLightningAbility.java b/core/src/mindustry/entities/abilities/MoveLightningAbility.java index 17d3eaa23ae1..4cc62b7172cc 100644 --- a/core/src/mindustry/entities/abilities/MoveLightningAbility.java +++ b/core/src/mindustry/entities/abilities/MoveLightningAbility.java @@ -1,34 +1,57 @@ package mindustry.entities.abilities; +import arc.*; +import arc.audio.*; import arc.graphics.*; +import arc.graphics.g2d.*; import arc.math.*; import arc.util.*; -import arc.audio.*; import mindustry.content.*; import mindustry.entities.*; +import mindustry.entities.bullet.*; import mindustry.gen.*; public class MoveLightningAbility extends Ability{ - //Lightning damage + /** Lightning damage */ public float damage = 35f; - //Chance of firing every tick. Set >= 1 to always fire lightning every tick at max speed. + /** Chance of firing every tick. Set >= 1 to always fire lightning every tick at max speed. */ public float chance = 0.15f; - //Length of the lightning + /** Length of the lightning. <= 0 to disable */ public int length = 12; - //Speeds for when to start lightninging and when to stop getting faster + /** Speeds for when to start lightninging and when to stop getting faster */ public float minSpeed = 0.8f, maxSpeed = 1.2f; - //Lightning color + /** Lightning color */ public Color color = Color.valueOf("a9d8ff"); + /** Shifts where the lightning spawns along the Y axis */ + public float offset = 0f; + /** Jittering heat sprite like the shield on v5 Javelin */ + public String heatRegion = "error"; + /** Bullet type that is fired. Can be null */ + public @Nullable BulletType bullet; + /** Bullet angle parameters */ + public float bulletAngle = 0f, bulletSpread = 0f; public Effect shootEffect = Fx.sparkShoot; public Sound shootSound = Sounds.spark; MoveLightningAbility(){} - public MoveLightningAbility(float damage, int length, float chance, float minSpeed, float maxSpeed, Color color){ + public MoveLightningAbility(float damage, int length, float chance, float offset, float minSpeed, float maxSpeed, Color color, String heatRegion){ + this.damage = damage; + this.length = length; + this.chance = chance; + this.offset = offset; + this.minSpeed = minSpeed; + this.maxSpeed = maxSpeed; + this.color = color; + this.heatRegion = heatRegion; + } + + public MoveLightningAbility(float damage, int length, float chance, float offset, float minSpeed, float maxSpeed, Color color){ this.damage = damage; this.length = length; this.chance = chance; + this.offset = offset; this.minSpeed = minSpeed; this.maxSpeed = maxSpeed; this.color = color; @@ -38,9 +61,31 @@ public MoveLightningAbility(float damage, int length, float chance, float minSpe public void update(Unit unit){ float scl = Mathf.clamp((unit.vel().len() - minSpeed) / (maxSpeed - minSpeed)); if(Mathf.chance(Time.delta * chance * scl)){ - shootEffect.at(unit.x, unit.y, unit.rotation, color); - Lightning.create(unit.team, color, damage, unit.x + unit.vel.x, unit.y + unit.vel.y, unit.rotation, length); + float x = unit.x + Angles.trnsx(unit.rotation, offset, 0), y = unit.y + Angles.trnsy(unit.rotation, offset, 0); + + shootEffect.at(x, y, unit.rotation, color); shootSound.at(unit); + + if(length > 0){ + Lightning.create(unit.team, color, damage, x + unit.vel.x, y + unit.vel.y, unit.rotation, length); + } + + if(bullet != null){ + bullet.create(unit, unit.team, x, y, unit.rotation + bulletAngle + Mathf.range(bulletSpread)); + } + } + } + + @Override + public void draw(Unit unit){ + float scl = Mathf.clamp((unit.vel().len() - minSpeed) / (maxSpeed - minSpeed)); + TextureRegion region = Core.atlas.find(heatRegion); + if(Core.atlas.isFound(region) && scl > 0.00001f){ + Draw.color(color); + Draw.alpha(scl / 2f); + Draw.blend(Blending.additive); + Draw.rect(region, unit.x + Mathf.range(scl / 2f), unit.y + Mathf.range(scl / 2f), unit.rotation - 90); + Draw.blend(); } } } diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 73e0fb93ba80..e2a8a8b7c2c5 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -34,6 +34,10 @@ public abstract class BulletType extends Content{ public Effect smokeEffect = Fx.shootSmallSmoke; /** Sound made when hitting something or getting removed.*/ public Sound hitSound = Sounds.none; + /** Pitch of the sound made when hitting something*/ + public float hitSoundPitch = 1; + /** Volume of the sound made when hitting something*/ + public float hitSoundVolume = 1; /** Extra inaccuracy when firing. */ public float inaccuracy = 0f; /** How many bullets get created per ammo item/liquid. */ @@ -185,8 +189,9 @@ public void hit(Bullet b){ } public void hit(Bullet b, float x, float y){ + b.hit = true; hitEffect.at(x, y, b.rotation(), hitColor); - hitSound.at(b); + hitSound.at(x, y, hitSoundPitch, hitSoundVolume); Effect.shake(hitShake, hitShake, b); @@ -241,7 +246,7 @@ public void despawned(Bullet b){ Effect.shake(despawnShake, despawnShake, b); - if(fragBullet != null || splashDamageRadius > 0 || lightning > 0){ + if(!b.hit && (fragBullet != null || splashDamageRadius > 0 || lightning > 0)){ hit(b); } } @@ -268,13 +273,12 @@ public void update(Bullet b){ if(homingPower > 0.0001f && b.time >= homingDelay){ Teamc target = Units.closestTarget(b.team, b.x, b.y, homingRange, e -> (e.isGrounded() && collidesGround) || (e.isFlying() && collidesAir), t -> collidesGround); if(target != null){ - b.vel.setAngle(Mathf.slerpDelta(b.rotation(), b.angleTo(target), homingPower)); + b.vel.setAngle(Angles.moveToward(b.rotation(), b.angleTo(target), homingPower * Time.delta * 50f)); } } if(weaveMag > 0){ - float scl = Mathf.randomSeed(id, 0.9f, 1.1f); - b.vel.rotate(Mathf.sin(b.time + Mathf.PI * weaveScale/2f * scl, weaveScale * scl, weaveMag) * Time.delta); + b.vel.rotate(Mathf.sin(b.time + Mathf.PI * weaveScale/2f, weaveScale, weaveMag * (Mathf.randomSeed(b.id, 0, 1) == 1 ? -1 : 1)) * Time.delta); } if(trailChance > 0){ @@ -334,6 +338,7 @@ public Bullet create(@Nullable Entityc owner, Team team, float x, float y, float bullet.type = this; bullet.owner = owner; bullet.team = team; + bullet.time = 0f; bullet.vel.trns(angle, speed * velocityScl); if(backMove){ bullet.set(x - bullet.vel.x * Time.delta, y - bullet.vel.y * Time.delta); diff --git a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java index 9edcdb0a5cfb..43113a0a9968 100644 --- a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java +++ b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java @@ -25,7 +25,7 @@ public class ContinuousLaserBulletType extends BulletType{ public ContinuousLaserBulletType(float damage){ super(0.001f, damage); - hitEffect = Fx.hitMeltdown; + hitEffect = Fx.hitBeam; despawnEffect = Fx.none; hitSize = 4; drawSize = 420f; diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index ab6cd9dce172..1a9a92a1398f 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -23,7 +23,8 @@ public class LaserBulletType extends BulletType{ public LaserBulletType(float damage){ super(0.01f, damage); - hitEffect = Fx.hitLancer; + hitEffect = Fx.hitLaserBlast; + hitColor = colors[2]; despawnEffect = Fx.none; shootEffect = Fx.hitLancer; smokeEffect = Fx.none; diff --git a/core/src/mindustry/entities/bullet/LightningBulletType.java b/core/src/mindustry/entities/bullet/LightningBulletType.java index 585737f75848..bf16cca6600d 100644 --- a/core/src/mindustry/entities/bullet/LightningBulletType.java +++ b/core/src/mindustry/entities/bullet/LightningBulletType.java @@ -8,8 +8,8 @@ import mindustry.graphics.*; public class LightningBulletType extends BulletType{ - protected Color lightningColor = Pal.lancerLaser; - protected int lightningLength = 25, lightningLengthRand = 0; + public Color lightningColor = Pal.lancerLaser; + public int lightningLength = 25, lightningLengthRand = 0; public LightningBulletType(){ super(0.0001f, 1f); @@ -28,7 +28,7 @@ public float range(){ @Override public float estimateDPS(){ - return super.estimateDPS() * Math.max(lightningLength / 4f, 1); + return super.estimateDPS() * Math.max(lightningLength / 10f, 1); } @Override diff --git a/core/src/mindustry/entities/bullet/MissileBulletType.java b/core/src/mindustry/entities/bullet/MissileBulletType.java index 274a806f5e6c..7d8cf7b8a32b 100644 --- a/core/src/mindustry/entities/bullet/MissileBulletType.java +++ b/core/src/mindustry/entities/bullet/MissileBulletType.java @@ -15,7 +15,7 @@ public MissileBulletType(float speed, float damage, String bulletSprite){ height = 8f; hitSound = Sounds.explosion; trailChance = 0.2f; - lifetime = 49f; + lifetime = 52f; } public MissileBulletType(float speed, float damage){ diff --git a/core/src/mindustry/entities/bullet/RailBulletType.java b/core/src/mindustry/entities/bullet/RailBulletType.java index 4ddc6e36c7d6..a41d326bd86d 100644 --- a/core/src/mindustry/entities/bullet/RailBulletType.java +++ b/core/src/mindustry/entities/bullet/RailBulletType.java @@ -54,7 +54,7 @@ public void init(Bullet b){ super.init(b); b.fdata = length; - Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false); + Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false, false); float resultLen = b.fdata; Vec2 nor = Tmp.v1.set(b.vel).nor(); @@ -63,6 +63,11 @@ public void init(Bullet b){ } } + @Override + public boolean testCollision(Bullet bullet, Building tile){ + return bullet.team != tile.team; + } + @Override public void hitEntity(Bullet b, Hitboxc entity, float initialHealth){ handle(b, entity, initialHealth); diff --git a/core/src/mindustry/entities/bullet/SapBulletType.java b/core/src/mindustry/entities/bullet/SapBulletType.java index dbd30b77a898..b86476a9d797 100644 --- a/core/src/mindustry/entities/bullet/SapBulletType.java +++ b/core/src/mindustry/entities/bullet/SapBulletType.java @@ -19,7 +19,7 @@ public class SapBulletType extends BulletType{ public SapBulletType(){ speed = 0.0001f; despawnEffect = Fx.none; - pierce = false; + pierce = true; collides = false; hitSize = 0f; hittable = false; diff --git a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java index 236ede8887a1..3d89e4d272ba 100644 --- a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java +++ b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java @@ -33,6 +33,8 @@ public ShrapnelBulletType(){ @Override public void init(Bullet b){ + super.init(b); + Damage.collideLaser(b, length, hitLarge); } diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 9ebb5a01adfe..12f5428324a0 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -1,6 +1,7 @@ package mindustry.entities.comp; import arc.*; +import arc.func.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; @@ -35,12 +36,25 @@ abstract class BuilderComp implements Posc, Teamc, Rotc{ @SyncLocal Queue plans = new Queue<>(1); @SyncLocal boolean updateBuilding = true; + private transient BuildPlan lastActive; + private transient int lastSize; + private transient float buildAlpha = 0f; + public boolean canBuild(){ return type.buildSpeed > 0; } @Override public void update(){ + if(!headless){ + //visual activity update + if(lastActive != null && buildAlpha <= 0.01f){ + lastActive = null; + } + + buildAlpha = Mathf.lerpDelta(buildAlpha, activelyBuilding() ? 1f : 0f, 0.15f); + } + if(!updateBuilding || !canBuild()) return; float finalPlaceDst = state.rules.infiniteResources ? Float.MAX_VALUE : buildingRange; @@ -64,7 +78,7 @@ public void update(){ if(plans.size > 1){ int total = 0; BuildPlan req; - while((dst((req = buildPlan()).tile()) > finalPlaceDst || shouldSkip(req, core)) && total < plans.size){ + while((!within((req = buildPlan()).tile(), finalPlaceDst) || shouldSkip(req, core)) && total < plans.size){ plans.removeFirst(); plans.addLast(req); total++; @@ -72,10 +86,13 @@ public void update(){ } BuildPlan current = buildPlan(); + Tile tile = current.tile(); - if(!within(current.tile(), finalPlaceDst)) return; + lastActive = current; + buildAlpha = 1f; + if(current.breaking) lastSize = tile.block().size; - Tile tile = world.tile(current.x, current.y); + if(!within(tile, finalPlaceDst)) return; if(!(tile.build instanceof ConstructBuild cb)){ if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){ @@ -92,7 +109,7 @@ public void update(){ plans.removeFirst(); return; } - }else if((tile.team() != team && tile.team() != Team.derelict) || (!current.breaking && cb.cblock != current.block)){ + }else if((tile.team() != team && tile.team() != Team.derelict) || (!current.breaking && (cb.cblock != current.block || cb.tile != current.tile()))){ plans.removeFirst(); return; } @@ -120,10 +137,17 @@ public void update(){ /** Draw all current build plans. Does not draw the beam effect, only the positions. */ void drawBuildPlans(){ + Boolf skip = plan -> plan.progress > 0.01f || (buildPlan() == plan && plan.initialized && (within(plan.x * tilesize, plan.y * tilesize, buildingRange) || state.isEditor())); - for(BuildPlan plan : plans){ - if(plan.progress > 0.01f || (buildPlan() == plan && plan.initialized && (within(plan.x * tilesize, plan.y * tilesize, buildingRange) || state.isEditor()))) continue; - drawPlan(plan, 1f); + for(int i = 0; i < 2; i++){ + for(BuildPlan plan : plans){ + if(skip.get(plan)) continue; + if(i == 0){ + drawPlan(plan, 1f); + }else{ + drawPlanTop(plan, 1f); + } + } } Draw.reset(); @@ -137,7 +161,11 @@ void drawPlan(BuildPlan request, float alpha){ request.block.drawPlan(request, control.input.allRequests(), Build.validPlace(request.block, team, request.x, request.y, request.rotation) || control.input.requestMatches(request), alpha); + } + } + void drawPlanTop(BuildPlan request, float alpha){ + if(!request.breaking){ Draw.reset(); Draw.mixcol(Color.white, 0.24f + Mathf.absin(Time.globalTime, 6f, 0.28f)); Draw.alpha(alpha); @@ -204,7 +232,7 @@ void addBuild(BuildPlan place, boolean tail){ boolean activelyBuilding(){ //not actively building when not near the build plan if(isBuilding()){ - if(!within(buildPlan(), state.rules.infiniteResources ? Float.MAX_VALUE : buildingRange)){ + if(!state.isEditor() && !within(buildPlan(), state.rules.infiniteResources ? Float.MAX_VALUE : buildingRange)){ return false; } } @@ -218,30 +246,32 @@ BuildPlan buildPlan(){ } public void draw(){ - if(!activelyBuilding()) return; + boolean active = activelyBuilding(); + if(!active && lastActive == null) return; Draw.z(Layer.flyingUnit); - BuildPlan plan = buildPlan(); + BuildPlan plan = active ? buildPlan() : lastActive; Tile tile = world.tile(plan.x, plan.y); var core = team.core(); - if(tile == null || (!within(tile, buildingRange) && !state.isEditor())){ + if(tile == null || !within(plan, state.rules.infiniteResources ? Float.MAX_VALUE : buildingRange)){ return; } //draw remote plans. - if(core != null && !isLocal() && !(tile.block() instanceof ConstructBlock)){ + if(core != null && active && !isLocal() && !(tile.block() instanceof ConstructBlock)){ Draw.z(Layer.plans - 1f); drawPlan(plan, 0.5f); + drawPlanTop(plan, 0.5f); Draw.z(Layer.flyingUnit); } - int size = plan.breaking ? tile.block().size : plan.block.size; + int size = plan.breaking ? active ? tile.block().size : lastSize : plan.block.size; float tx = plan.drawx(), ty = plan.drawy(); - Lines.stroke(1f, Pal.accent); - float focusLen = 3.8f + Mathf.absin(Time.time, 1.1f, 0.6f); + Lines.stroke(1f, plan.breaking ? Pal.remove : Pal.accent); + float focusLen = type.buildBeamOffset + Mathf.absin(Time.time, 3f, 0.6f); float px = x + Angles.trnsx(rotation, focusLen); float py = y + Angles.trnsy(rotation, focusLen); @@ -255,16 +285,35 @@ public void draw(){ Arrays.sort(vecs, Structs.comparingFloat(vec -> -Angles.angleDist(angleTo(vec), ang))); + Vec2 close = Geometry.findClosest(x, y, vecs); + float x1 = vecs[0].x, y1 = vecs[0].y, + x2 = close.x, y2 = close.y, x3 = vecs[1].x, y3 = vecs[1].y; - Draw.alpha(1f); + Draw.z(Layer.buildBeam); + + Draw.alpha(buildAlpha); - Lines.line(px, py, x1, y1); - Lines.line(px, py, x3, y3); + if(!active && !(tile.build instanceof ConstructBuild)){ + Fill.square(plan.drawx(), plan.drawy(), size * tilesize/2f); + } + + if(renderer.animateShields){ + if(close != vecs[0] && close != vecs[1]){ + Fill.tri(px, py, x1, y1, x2, y2); + Fill.tri(px, py, x3, y3, x2, y2); + }else{ + Fill.tri(px, py, x1, y1, x3, y3); + } + }else{ + Lines.line(px, py, x1, y1); + Lines.line(px, py, x3, y3); + } - Fill.circle(px, py, 1.6f + Mathf.absin(Time.time, 0.8f, 1.5f)); + Fill.square(px, py, 1.8f + Mathf.absin(Time.time, 2.2f, 1.1f), rotation + 45); - Draw.color(); + Draw.reset(); + Draw.z(Layer.flyingUnit); } } diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index 142e89573ae1..f270929f3a29 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -43,7 +43,7 @@ @EntityDef(value = {Buildingc.class}, isFinal = false, genio = false, serialize = false) @Component(base = true) -abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, QuadTreeObject, Displayable, Senseable, Controllable{ +abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, QuadTreeObject, Displayable, Senseable, Controllable, Sized{ //region vars and initialization static final float timeToSleep = 60f * 1, timeToUncontrol = 60f * 6; static final ObjectSet tmpTiles = new ObjectSet<>(); @@ -84,8 +84,7 @@ public Building init(Tile tile, Team team, boolean shouldAdd, int rotation){ }else{ if(block.hasPower){ //reinit power graph - power.graph = new PowerGraph(); - power.graph.add(self()); + new PowerGraph().add(self()); } } this.rotation = rotation; @@ -148,7 +147,8 @@ public final void writeBase(Writes write){ write.f(health); write.b(rotation | 0b10000000); write.b(team.id); - write.b(0); //extra padding for later use + write.b(1); //version + write.b(enabled ? 1 : 0); if(items != null) items.write(write); if(power != null) power.write(write); if(liquids != null) liquids.write(write); @@ -163,7 +163,14 @@ public final void readBase(Reads read){ rotation = rot & 0b01111111; boolean legacy = true; if((rot & 0b10000000) != 0){ - read.b(); //padding + byte ver = read.b(); //version of entity save + if(ver == 1){ + byte on = read.b(); + this.enabled = on == 1; + if(!this.enabled){ + enabledControlTime = timeToUncontrol; + } + } legacy = false; } @@ -199,10 +206,13 @@ public void read(Reads read, byte revision){ public void addPlan(boolean checkPrevious){ if(!block.rebuildable || (team == state.rules.defaultTeam && state.isCampaign() && !block.isVisible())) return; + Object overrideConfig = null; + if(self() instanceof ConstructBuild entity){ //update block to reflect the fact that something was being constructed if(entity.cblock != null && entity.cblock.synthetic() && entity.wasConstructing){ block = entity.cblock; + overrideConfig = entity.lastConfig; }else{ //otherwise this was a deconstruction that was interrupted, don't want to rebuild that return; @@ -223,7 +233,7 @@ public void addPlan(boolean checkPrevious){ } } - data.blocks.addFirst(new BlockPlan(tile.x, tile.y, (short)rotation, block.id, config())); + data.blocks.addFirst(new BlockPlan(tile.x, tile.y, (short)rotation, block.id, overrideConfig == null ? config() : overrideConfig)); } /** Configure with the current, local player. */ @@ -356,6 +366,10 @@ public float efficiency(){ return power != null && (block.consumes.has(ConsumeType.power) && !block.consumes.getPower().buffered) ? power.status : 1f; } + public BlockStatus status(){ + return cons.status(); + } + /** Call when nothing is happening to the entity. This increments the internal sleep timer. */ public void sleep(){ sleepTime += Time.delta; @@ -384,6 +398,10 @@ public byte version(){ //endregion //region handler methods + public boolean canUnload(){ + return block.unloadable; + } + /** Called when an unloader takes an item. */ public void itemTaken(Item item){ @@ -518,6 +536,10 @@ public void handleLiquid(Building source, Liquid liquid, float amount){ } public void dumpLiquid(Liquid liquid){ + dumpLiquid(liquid, 2f); + } + + public void dumpLiquid(Liquid liquid, float scaling){ int dump = this.cdump; if(liquids.get(liquid) <= 0.0001f) return; @@ -533,10 +555,9 @@ public void dumpLiquid(Liquid liquid){ float ofract = other.liquids.get(liquid) / other.block.liquidCapacity; float fract = liquids.get(liquid) / block.liquidCapacity; - if(ofract < fract) transferLiquid(other, (fract - ofract) * block.liquidCapacity / 2f, liquid); + if(ofract < fract) transferLiquid(other, (fract - ofract) * block.liquidCapacity / scaling, liquid); } } - } public boolean canDumpLiquid(Building to, Liquid liquid){ @@ -749,9 +770,7 @@ public void updatePowerGraph(){ } public void powerGraphRemoved(){ - if(power == null){ - return; - } + if(power == null) return; power.graph.remove(self()); for(int i = 0; i < power.links.size; i++){ @@ -762,6 +781,10 @@ public void powerGraphRemoved(){ } power.links.clear(); } + + public boolean conductsTo(Building other){ + return !block.insulated; + } public Seq getPowerConnections(Seq out){ out.clear(); @@ -769,15 +792,16 @@ public Seq getPowerConnections(Seq out){ for(Building other : proximity){ if(other != null && other.power != null + && other.team == team && !(block.consumesPower && other.block.consumesPower && !block.outputsPower && !other.block.outputsPower) - && !power.links.contains(other.pos())){ + && conductsTo(other) && other.conductsTo(self()) && !power.links.contains(other.pos())){ out.add(other); } } for(int i = 0; i < power.links.size; i++){ Tile link = world.tile(power.links.get(i)); - if(link != null && link.build != null && link.build.power != null) out.add(link.build); + if(link != null && link.build != null && link.build.power != null && link.build.team == team) out.add(link.build); } return out; } @@ -802,14 +826,15 @@ public boolean shouldAmbientSound(){ public void drawStatus(){ if(block.enableDrawStatus && block.consumes.any()){ - float brcx = tile.drawx() + (block.size * tilesize / 2f) - (tilesize / 2f); - float brcy = tile.drawy() - (block.size * tilesize / 2f) + (tilesize / 2f); + float multiplier = block.size > 1 ? 1 : 0.64f; + float brcx = x + (block.size * tilesize / 2f) - (tilesize * multiplier / 2f); + float brcy = y - (block.size * tilesize / 2f) + (tilesize * multiplier / 2f); Draw.z(Layer.power + 1); Draw.color(Pal.gray); - Fill.square(brcx, brcy, 2.5f, 45); - Draw.color(cons.status().color); - Fill.square(brcx, brcy, 1.5f, 45); + Fill.square(brcx, brcy, 2.5f * multiplier, 45); + Draw.color(status().color); + Fill.square(brcx, brcy, 1.5f * multiplier, 45); Draw.color(); } } @@ -890,7 +915,7 @@ public void placed(){ tempTiles.clear(); Geometry.circle(tileX(), tileY(), range, (x, y) -> { Building other = world.build(x, y); - if(other != null && other.block instanceof PowerNode && ((PowerNode)other.block).linkValid(other, self()) && !PowerNode.insulated(other, self()) + if(other != null && other.block instanceof PowerNode node && node.linkValid(other, self()) && !PowerNode.insulated(other, self()) && !other.proximity().contains(this.self()) && !(block.outputsPower && proximity.contains(p -> p.power != null && p.power.graph == other.power.graph))){ tempTiles.add(other.tile); @@ -958,12 +983,13 @@ public void onDestroyed(){ int amount = items.get(item); explosiveness += item.explosiveness * amount; flammability += item.flammability * amount; + power += item.charge * amount * 100f; } } if(block.hasLiquids){ - flammability += liquids.sum((liquid, amount) -> liquid.explosiveness * amount / 2f); - explosiveness += liquids.sum((liquid, amount) -> liquid.flammability * amount / 2f); + flammability += liquids.sum((liquid, amount) -> liquid.flammability * amount / 2f); + explosiveness += liquids.sum((liquid, amount) -> liquid.explosiveness * amount / 2f); } if(block.consumes.hasPower() && block.consumes.getPower().buffered){ @@ -1252,6 +1278,11 @@ public boolean isValid(){ return tile.build == self() && !dead(); } + @Override + public float hitSize(){ + return tile.block().size * tilesize; + } + @Replace @Override public void kill(){ @@ -1285,6 +1316,8 @@ public double sense(LAccess sensor){ case health -> health; case maxHealth -> maxHealth; case efficiency -> efficiency(); + case timescale -> timeScale; + case range -> this instanceof Ranged r ? r.range() / tilesize : 0; case rotation -> rotation; case totalItems -> items == null ? 0 : items.total(); case totalLiquids -> liquids == null ? 0 : liquids.total(); @@ -1299,7 +1332,7 @@ public double sense(LAccess sensor){ case enabled -> enabled ? 1 : 0; case controlled -> this instanceof ControlBlock c ? c.isControlled() ? 1 : 0 : 0; case payloadCount -> getPayload() != null ? 1 : 0; - default -> 0; + default -> Float.NaN; //gets converted to null in logic }; } @@ -1312,14 +1345,13 @@ public Object senseObject(LAccess sensor){ case payloadType -> getPayload() instanceof UnitPayload p1 ? p1.unit.type : getPayload() instanceof BuildPayload p2 ? p2.block() : null; default -> noSensed; }; - } @Override public double sense(Content content){ - if(content instanceof Item && items != null) return items.get((Item)content); - if(content instanceof Liquid && liquids != null) return liquids.get((Liquid)content); - return 0; + if(content instanceof Item i && items != null) return items.get(i); + if(content instanceof Liquid l && liquids != null) return liquids.get(l); + return Float.NaN; //invalid sense } @Override @@ -1368,7 +1400,8 @@ public void update(){ timeScale = 1f; } - if(block.autoResetEnabled){ + if(!enabled && block.autoResetEnabled){ + noSleep(); enabledControlTime -= Time.delta; if(enabledControlTime <= 0){ diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index a51a30dfd72a..7f3d42d4e043 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -30,7 +30,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw Object data; BulletType type; float fdata; - transient boolean absorbed; + transient boolean absorbed, hit; @Override public void getCollisions(Cons consumer){ diff --git a/core/src/mindustry/entities/comp/CommanderComp.java b/core/src/mindustry/entities/comp/CommanderComp.java index 0ce8d60d101e..2842e5cc9cd2 100644 --- a/core/src/mindustry/entities/comp/CommanderComp.java +++ b/core/src/mindustry/entities/comp/CommanderComp.java @@ -80,6 +80,7 @@ void commandNearby(FormationPattern pattern, Boolf include){ void command(Formation formation, Seq units){ clearCommand(); + units.shuffle(); float spacing = hitSize * 0.8f; minFormationSpeed = type.speed; diff --git a/core/src/mindustry/entities/comp/FireComp.java b/core/src/mindustry/entities/comp/FireComp.java index 7981e061b697..89710ebdf10f 100644 --- a/core/src/mindustry/entities/comp/FireComp.java +++ b/core/src/mindustry/entities/comp/FireComp.java @@ -10,6 +10,7 @@ import mindustry.game.*; import mindustry.gen.*; import mindustry.world.*; +import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -38,13 +39,15 @@ public void update(){ control.sound.loop(Sounds.fire, this, 0.07f); } - time = Mathf.clamp(time + Time.delta, 0, lifetime()); + //faster updates -> disappears more quickly + float speedMultiplier = 1f + Math.max(state.envAttrs.get(Attribute.water) * 10f, 0); + time = Mathf.clamp(time + Time.delta * speedMultiplier, 0, lifetime); if(Vars.net.client()){ return; } - if(time >= lifetime() || tile == null){ + if(time >= lifetime || tile == null){ remove(); return; } diff --git a/core/src/mindustry/entities/comp/HitboxComp.java b/core/src/mindustry/entities/comp/HitboxComp.java index f44270ebed05..82576686fec2 100644 --- a/core/src/mindustry/entities/comp/HitboxComp.java +++ b/core/src/mindustry/entities/comp/HitboxComp.java @@ -8,7 +8,7 @@ import mindustry.gen.*; @Component -abstract class HitboxComp implements Posc, QuadTreeObject{ +abstract class HitboxComp implements Posc, Sized, QuadTreeObject{ @Import float x, y; transient float lastX, lastY, deltaX, deltaY, hitSize; @@ -28,6 +28,11 @@ public void afterRead(){ updateLastPosition(); } + @Override + public float hitSize(){ + return hitSize; + } + void getCollisions(Cons consumer){ } diff --git a/core/src/mindustry/entities/comp/MinerComp.java b/core/src/mindustry/entities/comp/MinerComp.java index 8eff7d58ce1d..1faabadef87b 100644 --- a/core/src/mindustry/entities/comp/MinerComp.java +++ b/core/src/mindustry/entities/comp/MinerComp.java @@ -80,7 +80,7 @@ public void update(){ if(core != null && within(core, mineTransferRange) && core.acceptStack(item, 1, this) == 1 && offloadImmediately()){ //add item to inventory before it is transferred - if(item() == item) addItem(item); + if(item() == item && !net.client()) addItem(item); Call.transferItemTo(self(), item, 1, mineTile.worldx() + Mathf.range(tilesize / 2f), mineTile.worldy() + Mathf.range(tilesize / 2f), core); diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index 00813e9f780f..9afd26bb9aa2 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -2,6 +2,7 @@ import arc.*; import arc.math.*; +import arc.scene.ui.layout.*; import arc.struct.*; import arc.util.*; import mindustry.*; @@ -12,6 +13,7 @@ import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.type.*; +import mindustry.ui.*; import mindustry.world.*; import mindustry.world.blocks.payloads.*; @@ -134,7 +136,9 @@ boolean dropBlock(BuildPayload payload){ int rot = (int)((rotation + 45f) / 90f) % 4; payload.place(on, rot); - if(isPlayer()) payload.build.lastAccessed = getPlayer().name; + if(getControllerName() != null){ + payload.build.lastAccessed = getControllerName(); + } Fx.unitDrop.at(tile); Fx.placeBlock.at(on.drawx(), on.drawy(), on.block().size); @@ -143,4 +147,19 @@ boolean dropBlock(BuildPayload payload){ return false; } + + void contentInfo(Table table, float itemSize, float width){ + table.clear(); + table.top().left(); + + float pad = 0; + float items = payloads.size; + if(itemSize * items + pad * items > width){ + pad = (width - (itemSize) * items) / items; + } + + for(Payload p : payloads){ + table.image(p.icon(Cicon.small)).size(itemSize).padRight(pad); + } + } } diff --git a/core/src/mindustry/entities/comp/PlayerComp.java b/core/src/mindustry/entities/comp/PlayerComp.java index 5e6c214cc6fe..ccfa3089bac5 100644 --- a/core/src/mindustry/entities/comp/PlayerComp.java +++ b/core/src/mindustry/entities/comp/PlayerComp.java @@ -43,6 +43,8 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra String name = "noname"; Color color = new Color(); + //locale should not be synced. + transient String locale = "en"; transient float deathTimer; transient String lastText = ""; transient float textFadeTime; @@ -59,6 +61,12 @@ public boolean isBuilder(){ return team.core(); } + /** @return largest/closest core, with largest cores getting priority */ + @Nullable + public CoreBuild bestCore(){ + return team.cores().min(Structs.comps(Structs.comparingInt(c -> -c.block.size), Structs.comparingFloat(c -> c.dst(x, y)))); + } + public TextureRegion icon(){ //display default icon for dead players if(dead()) return core() == null ? UnitTypes.alpha.icon(Cicon.full) : ((CoreBlock)core().block).unitType.icon(Cicon.full); @@ -112,7 +120,7 @@ public void update(){ clearUnit(); } - CoreBuild core = closestCore(); + CoreBuild core; if(!dead()){ set(unit); @@ -124,7 +132,7 @@ public void update(){ Tile tile = unit.tileOn(); unit.elevation = Mathf.approachDelta(unit.elevation, (tile != null && tile.solid()) || boosting ? 1f : 0f, 0.08f); } - }else if(core != null){ + }else if((core = bestCore()) != null){ //have a small delay before death to prevent the camera from jumping around too quickly //(this is not for balance, it just looks better this way) deathTimer += Time.delta; @@ -191,6 +199,10 @@ boolean dead(){ return unit.isNull() || !unit.isValid(); } + String ip(){ + return con == null ? "localhost" : con.address; + } + String uuid(){ return con == null ? "[LOCAL]" : con.uuid; } diff --git a/core/src/mindustry/entities/comp/ShieldComp.java b/core/src/mindustry/entities/comp/ShieldComp.java index 3ca002b28882..5a489686ffd2 100644 --- a/core/src/mindustry/entities/comp/ShieldComp.java +++ b/core/src/mindustry/entities/comp/ShieldComp.java @@ -50,6 +50,7 @@ private void rawDamage(float amount){ float shieldDamage = Math.min(Math.max(shield, 0), amount); shield -= shieldDamage; + hitTime = 1f; amount -= shieldDamage; if(amount > 0){ diff --git a/core/src/mindustry/entities/comp/Sized.java b/core/src/mindustry/entities/comp/Sized.java new file mode 100644 index 000000000000..5fd73efa42c3 --- /dev/null +++ b/core/src/mindustry/entities/comp/Sized.java @@ -0,0 +1,5 @@ +package mindustry.entities.comp; + +public interface Sized{ + float hitSize(); +} diff --git a/core/src/mindustry/entities/comp/StatusComp.java b/core/src/mindustry/entities/comp/StatusComp.java index c4ea7be07a79..744da3b386f0 100644 --- a/core/src/mindustry/entities/comp/StatusComp.java +++ b/core/src/mindustry/entities/comp/StatusComp.java @@ -55,10 +55,16 @@ void apply(StatusEffect effect, float duration){ } } - //otherwise, no opposites found, add direct effect - StatusEntry entry = Pools.obtain(StatusEntry.class, StatusEntry::new); - entry.set(effect, duration); - statuses.add(entry); + if(!effect.reactive){ + //otherwise, no opposites found, add direct effect + StatusEntry entry = Pools.obtain(StatusEntry.class, StatusEntry::new); + entry.set(effect, duration); + statuses.add(entry); + } + } + + void clearStatuses(){ + statuses.clear(); } /** Removes a status effect. */ diff --git a/core/src/mindustry/entities/comp/TimerComp.java b/core/src/mindustry/entities/comp/TimerComp.java index 26c76646d0c3..8fec3b8896ec 100644 --- a/core/src/mindustry/entities/comp/TimerComp.java +++ b/core/src/mindustry/entities/comp/TimerComp.java @@ -8,6 +8,7 @@ abstract class TimerComp{ transient Interval timer = new Interval(6); public boolean timer(int index, float time){ + if(Float.isInfinite(time)) return false; return timer.get(index, time); } } diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index e66c1131ec46..8b0dbc67fe4b 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -46,13 +46,14 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I transient Seq abilities = new Seq<>(0); private transient float resupplyTime = Mathf.random(10f); + private transient boolean wasPlayer; public void moveAt(Vec2 vector){ moveAt(vector, type.accel); } public void approach(Vec2 vector){ - vel.approachDelta(vector, type.accel * realSpeed() * floorSpeedMultiplier()); + vel.approachDelta(vector, type.accel * realSpeed()); } public void aimLook(Position pos){ @@ -81,7 +82,7 @@ public float speed(){ /** @return speed with boost multipliers factored in. */ public float realSpeed(){ - return Mathf.lerp(1f, type.canBoost ? type.boostMultiplier : 1f, elevation) * speed(); + return Mathf.lerp(1f, type.canBoost ? type.boostMultiplier : 1f, elevation) * speed() * floorSpeedMultiplier(); } /** Iterates through this unit and everything it is controlling. */ @@ -104,11 +105,14 @@ public float prefRotation(){ @Override public float range(){ - return type.range; + return type.maxRange; } @Replace public float clipSize(){ + if(isBuilding()){ + return state.rules.infiniteResources ? Float.MAX_VALUE : Math.max(type.clipSize, type.region.width) + buildingRange + tilesize*4f; + } return Math.max(type.region.width * 2f, type.clipSize); } @@ -126,6 +130,7 @@ public double sense(LAccess sensor){ case y -> World.conv(y); case team -> team.id; case shooting -> isShooting() ? 1 : 0; + case range -> range() / tilesize; case shootX -> World.conv(aimX()); case shootY -> World.conv(aimY()); case mining -> mining() ? 1 : 0; @@ -269,7 +274,7 @@ public void add(){ team.data().updateCount(type, 1); //check if over unit cap - if(count() > cap() && !spawnedByCore && !dead){ + if(count() > cap() && !spawnedByCore && !dead && !state.rules.editor){ Call.unitCapDeath(self()); team.data().updateCount(type, -1); } @@ -406,9 +411,10 @@ public void destroy(){ float explosiveness = 2f + item().explosiveness * stack().amount * 1.53f; float flammability = item().flammability * stack().amount / 1.9f; + float power = item().charge * stack().amount * 150f; if(!spawnedByCore){ - Damage.dynamicExplosion(x, y, flammability, explosiveness, 0f, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team); + Damage.dynamicExplosion(x, y, flammability, explosiveness, power, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team); } float shake = hitSize / 3f; @@ -420,7 +426,7 @@ public void destroy(){ Events.fire(new UnitDestroyEvent(self())); - if(explosiveness > 7f && isLocal()){ + if(explosiveness > 7f && (isLocal() || wasPlayer)){ Events.fire(Trigger.suicideBomb); } @@ -442,6 +448,15 @@ public void destroy(){ remove(); } + /** @return name of direct or indirect player controller. */ + @Override + public @Nullable String getControllerName(){ + if(isPlayer()) return getPlayer().name; + if(controller instanceof LogicAI ai && ai.controller != null) return ai.controller.lastAccessed; + if(controller instanceof FormationAI ai && ai.leader != null && ai.leader.isPlayer()) return ai.leader.getPlayer().name; + return null; + } + @Override public void display(Table table){ type.display(self(), table); @@ -469,6 +484,7 @@ public Player getPlayer(){ @Override public void killed(){ + wasPlayer = isLocal(); health = 0; dead = true; diff --git a/core/src/mindustry/entities/comp/VelComp.java b/core/src/mindustry/entities/comp/VelComp.java index ca04d6a40cd1..4b0272b5f4b8 100644 --- a/core/src/mindustry/entities/comp/VelComp.java +++ b/core/src/mindustry/entities/comp/VelComp.java @@ -1,6 +1,5 @@ package mindustry.entities.comp; -import arc.math.*; import arc.math.geom.*; import arc.util.*; import mindustry.annotations.Annotations.*; @@ -22,7 +21,7 @@ abstract class VelComp implements Posc{ @Override public void update(){ move(vel.x * Time.delta, vel.y * Time.delta); - vel.scl(Mathf.clamp(1f - drag * Time.delta)); + vel.scl(Math.max(1f - drag * Time.delta, 0)); } /** @return function to use for check solid state. if null, no checking is done. */ diff --git a/core/src/mindustry/entities/comp/WaterMoveComp.java b/core/src/mindustry/entities/comp/WaterMoveComp.java index f87679efdbe3..69d178f41d68 100644 --- a/core/src/mindustry/entities/comp/WaterMoveComp.java +++ b/core/src/mindustry/entities/comp/WaterMoveComp.java @@ -39,7 +39,7 @@ public void update(){ @Override @Replace public int pathType(){ - return Pathfinder.costWater; + return Pathfinder.costNaval; } @Override diff --git a/core/src/mindustry/entities/effect/MultiEffect.java b/core/src/mindustry/entities/effect/MultiEffect.java index c1b0e7e6d41f..a93c3bd2762a 100644 --- a/core/src/mindustry/entities/effect/MultiEffect.java +++ b/core/src/mindustry/entities/effect/MultiEffect.java @@ -19,13 +19,19 @@ public MultiEffect(Effect... effects){ public void init(){ for(Effect f : effects){ clip = Math.max(clip, f.clip); + lifetime = Math.max(lifetime, f.lifetime); } } @Override public void render(EffectContainer e){ + int index = 0; for(Effect f : effects){ - e.scaled(f.lifetime, f::render); + int i = ++index; + e.scaled(f.lifetime, cont -> { + cont.id = e.id + i; + f.render(cont); + }); clip = Math.max(clip, f.clip); } } diff --git a/core/src/mindustry/entities/effect/ParticleEffect.java b/core/src/mindustry/entities/effect/ParticleEffect.java index f38fc00603ef..281410ada350 100644 --- a/core/src/mindustry/entities/effect/ParticleEffect.java +++ b/core/src/mindustry/entities/effect/ParticleEffect.java @@ -16,6 +16,7 @@ public class ParticleEffect extends Effect{ //region only public float sizeFrom = 2f, sizeTo = 0f; + public float offset = 0; public String region = "circle"; //line only @@ -48,7 +49,7 @@ public void render(EffectContainer e){ }); }else{ Angles.randLenVectors(e.id, particles, length * fin + baseLength, e.rotation, cone, (x, y) -> { - Draw.rect(tex, e.x + x, e.y + y, rad, rad); + Draw.rect(tex, e.x + x, e.y + y, rad, rad, e.rotation + offset); }); } } diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index 40d509b116d8..c4fc27792af4 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -15,7 +15,7 @@ public class AIController implements UnitController{ protected static final Vec2 vec = new Vec2(); - protected static final int timerTarget = 0, timerTarget2 = 1, timerTarget3 = 2; + protected static final int timerTarget = 0, timerTarget2 = 1, timerTarget3 = 2, timerTarget4 = 3; protected Unit unit; protected Interval timer = new Interval(4); @@ -88,7 +88,7 @@ protected void pathfind(int pathTarget){ if(tile == null) return; Tile targetTile = pathfinder.getTargetTile(tile, pathfinder.getField(unit.team, costType, pathTarget)); - if(tile == targetTile || (costType == Pathfinder.costWater && !targetTile.floor().isLiquid)) return; + if(tile == targetTile || (costType == Pathfinder.costNaval && !targetTile.floor().isLiquid)) return; unit.moveAt(vec.trns(unit.angleTo(targetTile), unit.speed())); } @@ -123,7 +123,7 @@ protected void updateWeapons(){ targets[i] = findTarget(mountX, mountY, weapon.bullet.range(), weapon.bullet.collidesAir, weapon.bullet.collidesGround); } - if(Units.invalidateTarget(targets[i], unit.team, mountX, mountY, weapon.bullet.range())){ + if(checkTarget(targets[i], mountX, mountY, weapon.bullet.range())){ targets[i] = null; } } @@ -149,6 +149,10 @@ protected void updateWeapons(){ } } + protected boolean checkTarget(Teamc target, float x, float y, float range){ + return Units.invalidateTarget(target, unit.team, x, y, range); + } + protected boolean shouldShoot(){ return true; } diff --git a/core/src/mindustry/game/EventType.java b/core/src/mindustry/game/EventType.java index 3efe48932e1f..73590f36795d 100644 --- a/core/src/mindustry/game/EventType.java +++ b/core/src/mindustry/game/EventType.java @@ -68,6 +68,8 @@ public static class BlockInfoEvent{} public static class ContentInitEvent{} /** Called when the client game is first loaded. */ public static class ClientLoadEvent{} + /** Called *after* all the modded files have been added into Vars.tree */ + public static class FileTreeInitEvent{} /** Called when a game begins and the world is loaded. */ public static class WorldLoadEvent{} @@ -351,10 +353,22 @@ public UnitDrownEvent(Unit unit){ } } + /** Called when a unit is created in a reconstructor or factory. */ public static class UnitCreateEvent{ public final Unit unit; + public final Building spawner; - public UnitCreateEvent(Unit unit){ + public UnitCreateEvent(Unit unit, Building spawner){ + this.unit = unit; + this.spawner = spawner; + } + } + + /** Called when a unit is dumped from any payload block. */ + public static class UnitUnloadEvent{ + public final Unit unit; + + public UnitUnloadEvent(Unit unit){ this.unit = unit; } } diff --git a/core/src/mindustry/game/Gamemode.java b/core/src/mindustry/game/Gamemode.java index f2bb95130a16..e4c0d01c6ce1 100644 --- a/core/src/mindustry/game/Gamemode.java +++ b/core/src/mindustry/game/Gamemode.java @@ -31,7 +31,6 @@ public enum Gamemode{ rules.buildCostMultiplier = 1f; rules.buildSpeedMultiplier = 1f; rules.unitBuildSpeedMultiplier = 2f; - rules.unitHealthMultiplier = 3f; rules.attackMode = true; }, map -> map.teams.size > 1), editor(true, rules -> { diff --git a/core/src/mindustry/game/Rules.java b/core/src/mindustry/game/Rules.java index 046b2128cb85..538422fef014 100644 --- a/core/src/mindustry/game/Rules.java +++ b/core/src/mindustry/game/Rules.java @@ -28,7 +28,7 @@ public class Rules{ public boolean pvp; /** Whether to pause the wave timer until all enemies are destroyed. */ public boolean waitEnemies = false; - /** Determinates if gamemode is attack mode */ + /** Determinates if gamemode is attack mode. */ public boolean attackMode = false; /** Whether this is the editor gamemode. */ public boolean editor = false; @@ -36,7 +36,7 @@ public class Rules{ public boolean canGameOver = true; /** Whether reactors can explode and damage other blocks. */ public boolean reactorExplosions = true; - /** Whether schematics are allowed */ + /** Whether schematics are allowed. */ public boolean schematicsAllowed = true; /** Whether friendly explosions can occur and set fire/damage other blocks. */ public boolean damageExplosions = true; @@ -44,10 +44,10 @@ public class Rules{ public boolean fire = true; /** Whether units use and require ammo. */ public boolean unitAmmo = false; + /** Whether cores add to unit limit */ + public boolean unitCapVariable = true; /** How fast unit pads build units. */ public float unitBuildSpeedMultiplier = 1f; - /** How much health units start with. */ - public float unitHealthMultiplier = 1f; /** How much damage any other units deal. */ public float unitDamageMultiplier = 1f; /** How much health blocks start with. */ @@ -58,29 +58,29 @@ public class Rules{ public float buildCostMultiplier = 1f; /** Multiplier for building speed. */ public float buildSpeedMultiplier = 1f; - /** Multiplier for percentage of materials refunded when deconstructing */ + /** Multiplier for percentage of materials refunded when deconstructing. */ public float deconstructRefundMultiplier = 0.5f; /** No-build zone around enemy core radius. */ public float enemyCoreBuildRadius = 400f; /** Radius around enemy wave drop zones.*/ public float dropZoneRadius = 300f; /** Time between waves in ticks. */ - public float waveSpacing = 60 * 60 * 2; + public float waveSpacing = 2 * Time.toMinutes; /** Wave after which the player 'wins'. Used in sectors. Use a value <= 0 to disable. */ public int winWave = 0; /** Base unit cap. Can still be increased by blocks. */ public int unitCap = 0; - /** Sector for saves that have them.*/ + /** Sector for saves that have them. */ public @Nullable Sector sector; /** Spawn layout. */ public Seq spawns = new Seq<>(); - /** Starting items put in cores */ + /** Starting items put in cores. */ public Seq loadout = ItemStack.list(Items.copper, 100); /** Weather events that occur here. */ public Seq weather = new Seq<>(1); /** Blocks that cannot be placed. */ public ObjectSet bannedBlocks = new ObjectSet<>(); - /** Reveals blocks normally hidden by build visibility */ + /** Reveals blocks normally hidden by build visibility. */ public ObjectSet revealedBlocks = new ObjectSet<>(); /** Unlocked content names. Only used in multiplayer when the campaign is enabled. */ public ObjectSet researched = new ObjectSet<>(); @@ -91,20 +91,22 @@ public class Rules{ public boolean enemyLights = true; /** Ambient light color, used when lighting is enabled. */ public Color ambientLight = new Color(0.01f, 0.01f, 0.04f, 0.99f); - /** team of the player by default */ + /** team of the player by default. */ public Team defaultTeam = Team.sharded; - /** team of the enemy in waves/sectors */ + /** team of the enemy in waves/sectors. */ public Team waveTeam = Team.crux; /** name of the custom mode that this ruleset describes, or null. */ public @Nullable String modeName; - /** special tags for additional info */ + /** Whether cores incinerate items when full, just like in the campaign. */ + public boolean coreIncinerates = false; + /** special tags for additional info. */ public StringMap tags = new StringMap(); /** A team-specific ruleset. */ public static class TeamRule{ /** Whether to use building AI. */ public boolean ai; - /** TODO Tier of blocks/designs that the AI uses for building. [0, 1]*/ + /** TODO Tier of blocks/designs that the AI uses for building. [0, 1] */ public float aiTier = 1f; /** Whether, when AI is enabled, ships should be spawned from the core. */ public boolean aiCoreSpawn = true; @@ -121,7 +123,7 @@ public Rules copy(){ return JsonIO.copy(this); } - /** Returns the gamemode that best fits these rules.*/ + /** Returns the gamemode that best fits these rules. */ public Gamemode mode(){ if(pvp){ return Gamemode.pvp; @@ -137,7 +139,7 @@ public Gamemode mode(){ } /** A simple map for storing TeamRules in an efficient way without hashing. */ - public static class TeamRules implements Serializable{ + public static class TeamRules implements JsonSerializable{ final TeamRule[] values = new TeamRule[Team.all.length]; public TeamRule get(Team team){ diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index e60a1660fd21..92179b7c9cc1 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -285,7 +285,7 @@ public FrameBuffer getBuffer(Schematic schematic){ /** Creates an array of build requests from a schematic's data, centered on the provided x+y coordinates. */ public Seq toRequests(Schematic schem, int x, int y){ return schem.tiles.map(t -> new BuildPlan(t.x + x - schem.width/2, t.y + y - schem.height/2, t.rotation, t.block, t.config).original(t.x, t.y, schem.width, schem.height)) - .removeAll(s -> (!s.block.isVisible() && !(s.block instanceof CoreBlock)) || !s.block.unlockedNow()); + .removeAll(s -> (!s.block.isVisible() && !(s.block instanceof CoreBlock)) || !s.block.unlockedNow()).sort(Structs.comparingInt(s -> -s.block.schematicPriority)); } /** @return all the valid loadouts for a specific core type. */ diff --git a/core/src/mindustry/game/SectorInfo.java b/core/src/mindustry/game/SectorInfo.java index 6a15c50e963b..f49225d40301 100644 --- a/core/src/mindustry/game/SectorInfo.java +++ b/core/src/mindustry/game/SectorInfo.java @@ -63,6 +63,8 @@ public class SectorInfo{ public int spawnPosition; /** How long the player has been playing elsewhere. */ public float secondsPassed; + /** How many minutes this sector has been captured. */ + public float minutesCaptured; /** Display name. */ public @Nullable String name; /** Displayed icon. */ diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index 86ba7b632423..2b7e8625c9a0 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -18,7 +18,7 @@ * weapon equipped, ammo used, and status effects. * Each spawn group can have multiple sub-groups spawned in different areas of the map. */ -public class SpawnGroup implements Serializable{ +public class SpawnGroup implements JsonSerializable{ public static final int never = Integer.MAX_VALUE; /** The unit type spawned */ diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index 6ebf66afad89..2389b22f7df3 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -123,6 +123,7 @@ public Schematic getLastLoadout(){ } /** @return the last selected loadout for this specific core type. */ + @Nullable public Schematic getLoadout(CoreBlock core){ //for tools - schem if(schematics == null) return Loadouts.basicShard; @@ -134,7 +135,7 @@ public Schematic getLoadout(CoreBlock core){ Seq all = schematics.getLoadouts(core); Schematic schem = all.find(s -> s.file != null && s.file.nameWithoutExtension().equals(file)); - return schem == null ? all.first() : schem; + return schem == null ? all.any() ? all.first() : null : schem; } /** Runs possible events. Resets event counter. */ @@ -148,6 +149,13 @@ public void runTurn(){ for(Sector sector : planet.sectors){ if(sector.hasSave() && sector.hasBase()){ + //if it is being attacked, capture time is 0; otherwise, increment the timer + if(sector.isAttacked()){ + sector.info.minutesCaptured = 0; + }else{ + sector.info.minutesCaptured += turnDuration / 60 / 60; + } + //increment seconds passed for this sector by the time that just passed with this turn if(!sector.isBeingPlayed()){ @@ -216,9 +224,11 @@ public void runTurn(){ } //queue random invasions - if(!sector.isAttacked() && turn > invasionGracePeriod && sector.info.hasSpawns){ + if(!sector.isAttacked() && sector.info.minutesCaptured > invasionGracePeriod && sector.info.hasSpawns){ + int count = sector.near().count(Sector::hasEnemyBase); + //invasion chance depends on # of nearby bases - if(Mathf.chance(baseInvasionChance * Math.min(sector.near().count(Sector::hasEnemyBase), 1))){ + if(count > 0 && Mathf.chance(baseInvasionChance * (0.8f + (count - 1) * 0.3f))){ int waveMax = Math.max(sector.info.winWave, sector.isBeingPlayed() ? state.wave : sector.info.wave + sector.info.wavesPassed) + Mathf.random(2, 4) * 5; //assign invasion-related things diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index 651e1d01d77a..072b6e1a98f2 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -39,7 +39,6 @@ public class BlockRenderer implements Disposable{ private Seq outArray2 = new Seq<>(); private Seq shadowEvents = new Seq<>(); private IntSet procEntities = new IntSet(), procLinks = new IntSet(), procLights = new IntSet(); - private boolean displayStatus = false; public BlockRenderer(){ @@ -177,7 +176,6 @@ public void drawShadows(){ /** Process all blocks to draw. */ public void processBlocks(){ - displayStatus = Core.settings.getBool("blockstatus"); int avgx = (int)(camera.position.x / tilesize); int avgy = (int)(camera.position.y / tilesize); @@ -275,7 +273,7 @@ public void drawBlocks(){ Draw.z(Layer.block); } - if(displayStatus && block.consumes.any()){ + if(renderer.drawStatus && block.consumes.any()){ entity.drawStatus(); } } diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index b8d1f1e52283..e38fa74c821f 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -17,6 +17,22 @@ public class Drawf{ + public static void target(float x, float y, float rad, Color color){ + target(x, y, rad, 1, color); + } + + public static void target(float x, float y, float rad, float alpha, Color color){ + Lines.stroke(3f); + Draw.color(Pal.gray, alpha); + Lines.poly(x, y, 4, rad, Time.time * 1.5f); + Lines.spikes(x, y, 3f/7f * rad, 6f/7f * rad, 4, Time.time * 1.5f); + Lines.stroke(1f); + Draw.color(color, alpha); + Lines.poly(x, y, 4, rad, Time.time * 1.5f); + Lines.spikes(x, y, 3f/7f * rad, 6f/7f * rad, 4, Time.time * 1.5f); + Draw.reset(); + } + public static float text(){ float z = Draw.z(); if(renderer.pixelator.enabled()){ @@ -205,9 +221,13 @@ public static void construct(Building t, UnlockableContent content, float rotati } public static void construct(float x, float y, TextureRegion region, float rotation, float progress, float speed, float time){ + construct(x, y, region, Pal.accent, rotation, progress, speed, time); + } + + public static void construct(float x, float y, TextureRegion region, Color color, float rotation, float progress, float speed, float time){ Shaders.build.region = region; Shaders.build.progress = progress; - Shaders.build.color.set(Pal.accent); + Shaders.build.color.set(color); Shaders.build.color.a = speed; Shaders.build.time = -time / 20f; @@ -219,9 +239,13 @@ public static void construct(float x, float y, TextureRegion region, float rotat } public static void construct(Building t, TextureRegion region, float rotation, float progress, float speed, float time){ + construct(t, region, Pal.accent, rotation, progress, speed, time); + } + + public static void construct(Building t, TextureRegion region, Color color, float rotation, float progress, float speed, float time){ Shaders.build.region = region; Shaders.build.progress = progress; - Shaders.build.color.set(Pal.accent); + Shaders.build.color.set(color); Shaders.build.color.a = speed; Shaders.build.time = -time / 20f; diff --git a/core/src/mindustry/graphics/FloorRenderer.java b/core/src/mindustry/graphics/FloorRenderer.java index 3e8d4e1fcbf2..9f46b65c87fe 100644 --- a/core/src/mindustry/graphics/FloorRenderer.java +++ b/core/src/mindustry/graphics/FloorRenderer.java @@ -119,6 +119,7 @@ public void beginDraw(){ return; } + Draw.flush(); cbatch.setProjection(Core.camera.mat); cbatch.beginDraw(); diff --git a/core/src/mindustry/graphics/Layer.java b/core/src/mindustry/graphics/Layer.java index 519850a2f975..5ddea7028220 100644 --- a/core/src/mindustry/graphics/Layer.java +++ b/core/src/mindustry/graphics/Layer.java @@ -65,6 +65,9 @@ public class Layer{ //overlaied UI, like block config guides overlayUI = 120, + //build beam effects + buildBeam = 122, + //shield effects shields = 125, diff --git a/core/src/mindustry/graphics/LoadRenderer.java b/core/src/mindustry/graphics/LoadRenderer.java index ba3778a0263c..8a314b00df79 100644 --- a/core/src/mindustry/graphics/LoadRenderer.java +++ b/core/src/mindustry/graphics/LoadRenderer.java @@ -54,7 +54,7 @@ public class LoadRenderer implements Disposable{ bars = new Bar[]{ new Bar("s_proc#", OS.cores / 16f, OS.cores < 4), new Bar("c_aprog", () -> assets != null, () -> assets.getProgress(), () -> false), - new Bar("g_vtype", graphics.getGLVersion().type == Type.GLES ? 0.5f : 1f, graphics.getGLVersion().type == Type.GLES), + new Bar("g_vtype", graphics.getGLVersion().type == GlType.GLES ? 0.5f : 1f, graphics.getGLVersion().type == GlType.GLES), new Bar("s_mem#", () -> true, () -> Core.app.getJavaHeap() / 1024f / 1024f / 200f, () -> Core.app.getJavaHeap() > 1024 * 1024 * 110), new Bar("v_ver#", () -> Version.build != 0, () -> Version.build == -1 ? 0.3f : (Version.build - 103f) / 10f, () -> !Version.modifier.equals("release")), new Bar("s_osv", OS.isWindows ? 0.35f : OS.isLinux ? 0.9f : OS.isMac ? 0.5f : 0.2f, OS.isMac), diff --git a/core/src/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java index ad61d171a5ef..c3831a0d6a6b 100644 --- a/core/src/mindustry/graphics/MinimapRenderer.java +++ b/core/src/mindustry/graphics/MinimapRenderer.java @@ -96,7 +96,8 @@ public void drawEntities(float x, float y, float w, float h, float scaling, bool Draw.mixcol(unit.team().color, 1f); float scale = Scl.scl(1f) / 2f * scaling * 32f; - Draw.rect(unit.type.icon(Cicon.full), x + rx, y + ry, scale, scale, unit.rotation() - 90); + var region = unit.type.icon(Cicon.full); + Draw.rect(region, x + rx, y + ry, scale, scale * (float)region.height / region.width, unit.rotation() - 90); Draw.reset(); } diff --git a/core/src/mindustry/graphics/OverlayRenderer.java b/core/src/mindustry/graphics/OverlayRenderer.java index 2f5ea104c7fa..d811af6fbc01 100644 --- a/core/src/mindustry/graphics/OverlayRenderer.java +++ b/core/src/mindustry/graphics/OverlayRenderer.java @@ -19,6 +19,7 @@ public class OverlayRenderer{ private static final float indicatorLength = 14f; private static final float spawnerMargin = tilesize*11f; private static final Rect rect = new Rect(); + private float buildFade, unitFade; private Unit lastSelect; @@ -88,8 +89,12 @@ public void drawTop(){ Draw.rect(select.type.icon(Cicon.full), select.x(), select.y(), select.rotation() - 90); } - Lines.stroke(unitFade); - Lines.square(select.x, select.y, select.hitSize() * 1.5f, Time.time * 2f); + for(int i = 0; i < 4; i++){ + float rot = i * 90f + 45f + (-Time.time) % 360f; + float length = select.hitSize() * 1.5f + (unitFade * 2.5f); + Draw.rect("select-arrow", select.x + Angles.trnsx(rot, length), select.y + Angles.trnsy(rot, length), length / 1.9f, length / 1.9f, rot - 135f); + } + Draw.reset(); } diff --git a/core/src/mindustry/graphics/Shaders.java b/core/src/mindustry/graphics/Shaders.java index c72aa9e5b11e..8aa304065f5d 100644 --- a/core/src/mindustry/graphics/Shaders.java +++ b/core/src/mindustry/graphics/Shaders.java @@ -15,9 +15,10 @@ import static mindustry.Vars.*; public class Shaders{ - public static BlockBuild blockbuild; + public static BlockBuildShader blockbuild; public static @Nullable ShieldShader shield; - public static UnitBuild build; + public static BuildBeamShader buildBeam; + public static UnitBuildShader build; public static DarknessShader darkness; public static LightShader light; public static SurfaceShader water, mud, tar, slag, space; @@ -30,7 +31,7 @@ public class Shaders{ public static void init(){ mesh = new MeshShader(); - blockbuild = new BlockBuild(); + blockbuild = new BlockBuildShader(); try{ shield = new ShieldShader(); }catch(Throwable t){ @@ -38,7 +39,8 @@ public static void init(){ shield = null; t.printStackTrace(); } - build = new UnitBuild(); + buildBeam = new BuildBeamShader(); + build = new UnitBuildShader(); darkness = new DarknessShader(); light = new LightShader(); water = new SurfaceShader("water"); @@ -140,12 +142,16 @@ public DarknessShader(){ } } - public static class UnitBuild extends LoadShader{ + /** @deprecated transition class for mods; use UnitBuildShader instead. */ + @Deprecated + public static class UnitBuild extends UnitBuildShader{} + + public static class UnitBuildShader extends LoadShader{ public float progress, time; public Color color = new Color(); public TextureRegion region; - public UnitBuild(){ + public UnitBuildShader(){ super("unitbuild", "default"); } @@ -160,19 +166,17 @@ public void apply(){ } } - public static class BlockBuild extends LoadShader{ - public Color color = new Color(); + public static class BlockBuildShader extends LoadShader{ public float progress; public TextureRegion region = new TextureRegion(); - public BlockBuild(){ + public BlockBuildShader(){ super("blockbuild", "default"); } @Override public void apply(){ setUniformf("u_progress", progress); - setUniformf("u_color", color); setUniformf("u_uv", region.u, region.v); setUniformf("u_uv2", region.u2, region.v2); setUniformf("u_time", Time.time); @@ -186,6 +190,24 @@ public ShieldShader(){ super("shield", "screenspace"); } + @Override + public void apply(){ + setUniformf("u_dp", Scl.scl(1f)); + setUniformf("u_time", Time.time / Scl.scl(1f)); + setUniformf("u_offset", + Core.camera.position.x - Core.camera.width / 2, + Core.camera.position.y - Core.camera.height / 2); + setUniformf("u_texsize", Core.camera.width, Core.camera.height); + setUniformf("u_invsize", 1f/Core.camera.width, 1f/Core.camera.height); + } + } + + public static class BuildBeamShader extends LoadShader{ + + public BuildBeamShader(){ + super("buildbeam", "screenspace"); + } + @Override public void apply(){ setUniformf("u_dp", Scl.scl(1f)); diff --git a/core/src/mindustry/input/Binding.java b/core/src/mindustry/input/Binding.java index 0f1ecd433928..629101225948 100644 --- a/core/src/mindustry/input/Binding.java +++ b/core/src/mindustry/input/Binding.java @@ -69,6 +69,7 @@ public enum Binding implements KeyBind{ chat_history_prev(KeyCode.up), chat_history_next(KeyCode.down), chat_scroll(new Axis(KeyCode.scroll)), + chat_mode(KeyCode.tab), console(KeyCode.f8), ; diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 801ffdbbd8c1..3de5997ec4dd 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -3,11 +3,11 @@ import arc.*; import arc.Graphics.*; import arc.Graphics.Cursor.*; +import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; import arc.scene.*; -import arc.scene.event.*; import arc.scene.ui.*; import arc.scene.ui.layout.*; import arc.util.*; @@ -45,34 +45,36 @@ public class DesktopInput extends InputHandler{ /** Mouse pan speed. */ public float panScale = 0.005f, panSpeed = 4.5f, panBoostSpeed = 11f; + boolean showHint(){ + return ui.hudfrag.shown && Core.settings.getBool("hints") && selectRequests.isEmpty() && + (!isBuilding && !Core.settings.getBool("buildautopause") || player.unit().isBuilding() || !player.dead() && !player.unit().spawnedByCore()); + } + @Override public void buildUI(Group group){ - //respawn hints - group.fill(t -> { - t.visible(() -> Core.settings.getBool("hints") && ui.hudfrag.shown && !player.dead() && !player.unit().spawnedByCore() && !(Core.settings.getBool("hints") && lastSchematic != null && !selectRequests.isEmpty())); - t.bottom(); - t.table(Styles.black6, b -> { - b.defaults().left(); - b.label(() -> Core.bundle.format("respawn", Core.keybinds.get(Binding.respawn).key.toString())).style(Styles.outlineLabel); - }).margin(6f); - }); - - //building hints + //building and respawn hints group.fill(t -> { + t.color.a = 0f; + t.visible(() -> (t.color.a = Mathf.lerpDelta(t.color.a, Mathf.num(showHint()), 0.15f)) > 0.001f); t.bottom(); - t.visible(() -> { - t.color.a = Mathf.lerpDelta(t.color.a, player.unit().isBuilding() ? 1f : 0f, 0.15f); - - return ui.hudfrag.shown && Core.settings.getBool("hints") && selectRequests.isEmpty() && t.color.a > 0.01f; - }); - t.touchable(() -> t.color.a < 0.1f ? Touchable.disabled : Touchable.childrenOnly); t.table(Styles.black6, b -> { + StringBuilder str = new StringBuilder(); b.defaults().left(); - b.label(() -> Core.bundle.format(!isBuilding ? "resumebuilding" : "pausebuilding", Core.keybinds.get(Binding.pause_building).key.toString())).style(Styles.outlineLabel); - b.row(); - b.label(() -> Core.bundle.format("cancelbuilding", Core.keybinds.get(Binding.clear_building).key.toString())).style(Styles.outlineLabel); - b.row(); - b.label(() -> Core.bundle.format("selectschematic", Core.keybinds.get(Binding.schematic_select).key.toString())).style(Styles.outlineLabel); + b.label(() -> { + if(!showHint()) return str; + str.setLength(0); + if(!isBuilding && !Core.settings.getBool("buildautopause") && !player.unit().isBuilding()){ + str.append(Core.bundle.format("enablebuilding", Core.keybinds.get(Binding.pause_building).key.toString())); + }else if(player.unit().isBuilding()){ + str.append(Core.bundle.format(isBuilding ? "pausebuilding" : "resumebuilding", Core.keybinds.get(Binding.pause_building).key.toString())) + .append("\n").append(Core.bundle.format("cancelbuilding", Core.keybinds.get(Binding.clear_building).key.toString())) + .append("\n").append(Core.bundle.format("selectschematic", Core.keybinds.get(Binding.schematic_select).key.toString())); + } + if(!player.dead() && !player.unit().spawnedByCore()){ + str.append(str.length() != 0 ? "\n" : "").append(Core.bundle.format("respawn", Core.keybinds.get(Binding.respawn).key.toString())); + } + return str; + }).style(Styles.outlineLabel); }).margin(10f); }); @@ -160,14 +162,17 @@ public void drawBottom(){ drawArrow(block, cursorX, cursorY, rotation); } Draw.color(); + boolean valid = validPlace(cursorX, cursorY, block, rotation); drawRequest(cursorX, cursorY, block, rotation); - block.drawPlace(cursorX, cursorY, rotation, validPlace(cursorX, cursorY, block, rotation)); + block.drawPlace(cursorX, cursorY, rotation, valid); - if(block.saveConfig && block.lastConfig != null){ + if(block.saveConfig){ + Draw.mixcol(!valid ? Pal.breakInvalid : Color.white, (!valid ? 0.4f : 0.24f) + Mathf.absin(Time.globalTime, 6f, 0.28f)); brequest.set(cursorX, cursorY, rotation, block); brequest.config = block.lastConfig; block.drawRequestConfig(brequest, allRequests()); brequest.config = null; + Draw.reset(); } } } @@ -200,7 +205,6 @@ public void update(){ if(input.keyDown(Binding.mouse_move)){ panCam = true; } - panning = false; Core.camera.position.add(Tmp.v1.setZero().add(Core.input.axis(Binding.move_x), Core.input.axis(Binding.move_y)).nor().scl(camSpeed)); }else if(!player.dead() && !panning){ @@ -247,7 +251,7 @@ public void update(){ //zoom camera if((!Core.scene.hasScroll() || Core.input.keyDown(Binding.diagonal_placement)) && !ui.chatfrag.shown() && Math.abs(Core.input.axisTap(Binding.zoom)) > 0 - && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){ + && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!player.isBuilder() || !isPlacing() || !block.rotate) && selectRequests.isEmpty()))){ renderer.scaleCamera(Core.input.axisTap(Binding.zoom)); } @@ -370,7 +374,7 @@ void pollInput(){ int cursorY = tileY(Core.input.mouseY()); int rawCursorX = World.toTile(Core.input.mouseWorld().x), rawCursorY = World.toTile(Core.input.mouseWorld().y); - // automatically pause building if the current build queue is empty + //automatically pause building if the current build queue is empty if(Core.settings.getBool("buildautopause") && isBuilding && !player.unit().isBuilding()){ isBuilding = false; buildWasAutoPaused = true; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 65147fda5d77..638353b982bb 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -68,6 +68,14 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public Seq lineRequests = new Seq<>(); public Seq selectRequests = new Seq<>(); + public InputHandler(){ + Events.on(UnitDestroyEvent.class, e -> { + if(e.unit != null && e.unit.isPlayer() && e.unit.getPlayer().isLocal() && e.unit.type.weapons.contains(w -> w.bullet.killShooter)){ + player.shooting = false; + } + }); + } + //methods to override @Remote(called = Loc.server, unreliable = true) @@ -100,6 +108,12 @@ public static void setItem(Building build, Item item, int amount){ if(build == null || build.items == null) return; build.items.set(item, amount); } + + @Remote(called = Loc.server, unreliable = true) + public static void clearItems(Building build){ + if(build == null || build.items == null) return; + build.items.clear(); + } @Remote(called = Loc.server, unreliable = true) public static void transferItemTo(@Nullable Unit unit, Item item, int amount, float x, float y, Building build){ @@ -110,7 +124,9 @@ public static void transferItemTo(@Nullable Unit unit, Item item, int amount, fl for(int i = 0; i < Mathf.clamp(amount / 3, 1, 8); i++){ Time.run(i * 3, () -> createItemTransfer(item, amount, x, y, build, () -> {})); } - build.handleStack(item, amount, unit); + if(amount > 0){ + build.handleStack(item, amount, unit); + } } public static void createItemTransfer(Item item, int amount, float x, float y, Position to, Runnable done){ @@ -121,11 +137,11 @@ public static void createItemTransfer(Item item, int amount, float x, float y, P } @Remote(called = Loc.server, targets = Loc.both, forward = true) - public static void requestItem(Player player, Building tile, Item item, int amount){ - if(player == null || tile == null || !tile.interactable(player.team()) || !player.within(tile, buildingRange) || player.dead()) return; + public static void requestItem(Player player, Building build, Item item, int amount){ + if(player == null || build == null || !build.interactable(player.team()) || !player.within(build, buildingRange) || player.dead()) return; - if(net.server() && (!Units.canInteract(player, tile) || - !netServer.admins.allowAction(player, ActionType.withdrawItem, tile.tile(), action -> { + if(net.server() && (!Units.canInteract(player, build) || + !netServer.admins.allowAction(player, ActionType.withdrawItem, build.tile(), action -> { action.item = item; action.itemAmount = amount; }))){ @@ -134,20 +150,20 @@ public static void requestItem(Player player, Building tile, Item item, int amou //remove item for every controlling unit player.unit().eachGroup(unit -> { - Call.takeItems(tile, item, unit.maxAccepted(item), unit); + Call.takeItems(build, item, unit.maxAccepted(item), unit); if(unit == player.unit()){ - Events.fire(new WithdrawEvent(tile, player, item, amount)); + Events.fire(new WithdrawEvent(build, player, item, amount)); } }); } @Remote(targets = Loc.both, forward = true, called = Loc.server) - public static void transferInventory(Player player, Building tile){ - if(player == null || tile == null || !player.within(tile, buildingRange) || tile.items == null || player.dead()) return; + public static void transferInventory(Player player, Building build){ + if(player == null || build == null || !player.within(build, buildingRange) || build.items == null || player.dead()) return; - if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, tile) || - !netServer.admins.allowAction(player, ActionType.depositItem, tile.tile, action -> { + if(net.server() && (player.unit().stack.amount <= 0 || !Units.canInteract(player, build) || + !netServer.admins.allowAction(player, ActionType.depositItem, build.tile, action -> { action.itemAmount = player.unit().stack.amount; action.item = player.unit().item(); }))){ @@ -157,12 +173,12 @@ public static void transferInventory(Player player, Building tile){ //deposit for every controlling unit player.unit().eachGroup(unit -> { Item item = unit.item(); - int accepted = tile.acceptStack(item, unit.stack.amount, unit); + int accepted = build.acceptStack(item, unit.stack.amount, unit); - Call.transferItemTo(unit, item, accepted, unit.x, unit.y, tile); + Call.transferItemTo(unit, item, accepted, unit.x, unit.y, build); if(unit == player.unit()){ - Events.fire(new DepositEvent(tile, player, item, accepted)); + Events.fire(new DepositEvent(build, player, item, accepted)); } }); } @@ -186,22 +202,22 @@ public static void requestUnitPayload(Player player, Unit target){ } @Remote(targets = Loc.both, called = Loc.server) - public static void requestBuildPayload(Player player, Building tile){ + public static void requestBuildPayload(Player player, Building build){ if(player == null) return; Unit unit = player.unit(); Payloadc pay = (Payloadc)unit; - if(tile != null && tile.team == unit.team - && unit.within(tile, tilesize * tile.block.size * 1.2f + tilesize * 5f)){ + if(build != null && build.team == unit.team + && unit.within(build, tilesize * build.block.size * 1.2f + tilesize * 5f)){ //pick up block's payload - Payload current = tile.getPayload(); + Payload current = build.getPayload(); if(current != null && pay.canPickupPayload(current)){ - Call.pickedBuildPayload(unit, tile, false); + Call.pickedBuildPayload(unit, build, false); //pick up whole building directly - }else if(tile.block.buildVisibility != BuildVisibility.hidden && tile.canPickup() && pay.canPickup(tile)){ - Call.pickedBuildPayload(unit, tile, true); + }else if(build.block.buildVisibility != BuildVisibility.hidden && build.canPickup() && pay.canPickup(build)){ + Call.pickedBuildPayload(unit, build, true); } } } @@ -216,29 +232,29 @@ public static void pickedUnitPayload(Unit unit, Unit target){ } @Remote(targets = Loc.server, called = Loc.server) - public static void pickedBuildPayload(Unit unit, Building tile, boolean onGround){ - if(tile != null && unit instanceof Payloadc pay){ + public static void pickedBuildPayload(Unit unit, Building build, boolean onGround){ + if(build != null && unit instanceof Payloadc pay){ if(onGround){ - if(tile.block.buildVisibility != BuildVisibility.hidden && tile.canPickup() && pay.canPickup(tile)){ - pay.pickup(tile); + if(build.block.buildVisibility != BuildVisibility.hidden && build.canPickup() && pay.canPickup(build)){ + pay.pickup(build); }else{ - Fx.unitPickup.at(tile); - tile.tile.remove(); + Fx.unitPickup.at(build); + build.tile.remove(); } }else{ - Payload current = tile.getPayload(); + Payload current = build.getPayload(); if(current != null && pay.canPickupPayload(current)){ - Payload taken = tile.takePayload(); + Payload taken = build.takePayload(); if(taken != null){ pay.addPayload(taken); - Fx.unitPickup.at(tile); + Fx.unitPickup.at(build); } } } - }else if(tile != null && onGround){ - Fx.unitPickup.at(tile); - tile.tile.remove(); + }else if(build != null && onGround){ + Fx.unitPickup.at(build); + build.tile.remove(); } } @@ -285,27 +301,28 @@ public static void dropItem(Player player, float angle){ } @Remote(targets = Loc.both, called = Loc.server, forward = true, unreliable = true) - public static void rotateBlock(@Nullable Player player, Building tile, boolean direction){ - if(tile == null) return; + public static void rotateBlock(@Nullable Player player, Building build, boolean direction){ + if(build == null) return; - if(net.server() && (!Units.canInteract(player, tile) || - !netServer.admins.allowAction(player, ActionType.rotate, tile.tile(), action -> action.rotation = Mathf.mod(tile.rotation + Mathf.sign(direction), 4)))){ + if(net.server() && (!Units.canInteract(player, build) || + !netServer.admins.allowAction(player, ActionType.rotate, build.tile(), action -> action.rotation = Mathf.mod(build.rotation + Mathf.sign(direction), 4)))){ throw new ValidateException(player, "Player cannot rotate a block."); } - if(player != null) tile.lastAccessed = player.name; - tile.rotation = Mathf.mod(tile.rotation + Mathf.sign(direction), 4); - tile.updateProximity(); - tile.noSleep(); + if(player != null) build.lastAccessed = player.name; + build.rotation = Mathf.mod(build.rotation + Mathf.sign(direction), 4); + build.updateProximity(); + build.noSleep(); + Fx.rotateBlock.at(build.x, build.y, build.block.size); } @Remote(targets = Loc.both, called = Loc.both, forward = true) - public static void tileConfig(@Nullable Player player, Building tile, @Nullable Object value){ - if(tile == null) return; - if(net.server() && (!Units.canInteract(player, tile) || - !netServer.admins.allowAction(player, ActionType.configure, tile.tile, action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile."); - tile.configured(player == null || player.dead() ? null : player.unit(), value); - Core.app.post(() -> Events.fire(new ConfigEvent(tile, player, value))); + public static void tileConfig(@Nullable Player player, Building build, @Nullable Object value){ + if(build == null) return; + if(net.server() && (!Units.canInteract(player, build) || + !netServer.admins.allowAction(player, ActionType.configure, build.tile, action -> action.config = value))) throw new ValidateException(player, "Player cannot configure a tile."); + build.configured(player == null || player.dead() ? null : player.unit(), value); + Core.app.post(() -> Events.fire(new ConfigEvent(build, player, value))); } //only useful for servers or local mods, and is not replicated across clients @@ -334,7 +351,7 @@ public static void unitControl(Player player, @Nullable Unit unit){ } player.clearUnit(); - player.deathTimer = 61f; + player.deathTimer = Player.deathDelay + 1f; build.requestSpawn(player); }else if(unit == null){ //just clear the unit (is this used?) player.clearUnit(); @@ -360,7 +377,7 @@ public static void unitClear(Player player){ Fx.spawn.at(player); player.clearUnit(); - player.deathTimer = 61f; //for instant respawn + player.deathTimer = Player.deathDelay + 1f; //for instant respawn } @Remote(targets = Loc.both, called = Loc.server, forward = true) @@ -453,10 +470,10 @@ public void tryPickupPayload(){ if(target != null){ Call.requestUnitPayload(player, target); }else{ - Building tile = world.buildWorld(pay.x(), pay.y()); + Building build = world.buildWorld(pay.x(), pay.y()); - if(tile != null && tile.team == unit.team){ - Call.requestBuildPayload(player, tile); + if(build != null && build.team == unit.team){ + Call.requestBuildPayload(player, build); } } } @@ -858,8 +875,8 @@ protected void updateLine(int x1, int y1){ } /** Handles tile tap events that are not platform specific. */ - boolean tileTapped(@Nullable Building tile){ - if(tile == null){ + boolean tileTapped(@Nullable Building build){ + if(build == null){ frag.inv.hide(); frag.config.hideConfig(); return false; @@ -867,18 +884,18 @@ boolean tileTapped(@Nullable Building tile){ boolean consumed = false, showedInventory = false; //check if tapped block is configurable - if(tile.block.configurable && tile.interactable(player.team())){ + if(build.block.configurable && build.interactable(player.team())){ consumed = true; - if(((!frag.config.isShown() && tile.shouldShowConfigure(player)) //if the config fragment is hidden, show + if(((!frag.config.isShown() && build.shouldShowConfigure(player)) //if the config fragment is hidden, show //alternatively, the current selected block can 'agree' to switch config tiles - || (frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(tile)))){ - Sounds.click.at(tile); - frag.config.showConfig(tile); + || (frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(build)))){ + Sounds.click.at(build); + frag.config.showConfig(build); } //otherwise... }else if(!frag.config.hasConfigMouse()){ //make sure a configuration fragment isn't on the cursor //then, if it's shown and the current block 'agrees' to hide, hide it. - if(frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(tile)){ + if(frag.config.isShown() && frag.config.getSelectedTile().onConfigureTileTapped(build)){ consumed = true; frag.config.hideConfig(); } @@ -889,16 +906,16 @@ boolean tileTapped(@Nullable Building tile){ } //call tapped event - if(!consumed && tile.interactable(player.team())){ - tile.tapped(); + if(!consumed && build.interactable(player.team())){ + build.tapped(); } //consume tap event if necessary - if(tile.interactable(player.team()) && tile.block.consumesTap){ + if(build.interactable(player.team()) && build.block.consumesTap){ consumed = true; - }else if(tile.interactable(player.team()) && tile.block.synthetic() && !consumed){ - if(tile.block.hasItems && tile.items.total() > 0){ - frag.inv.showFor(tile); + }else if(build.interactable(player.team()) && build.block.synthetic() && !consumed){ + if(build.block.hasItems && build.items.total() > 0){ + frag.inv.showFor(build); consumed = true; showedInventory = true; } @@ -998,8 +1015,8 @@ public float mouseAngle(float x, float y){ } } - Building tile = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); - if(tile instanceof ControlBlock cont && cont.canControl() && tile.team == player.team()){ + Building build = world.buildWorld(Core.input.mouseWorld().x, Core.input.mouseWorld().y); + if(build instanceof ControlBlock cont && cont.canControl() && build.team == player.team()){ return cont.unit(); } @@ -1063,7 +1080,7 @@ public boolean canDropItem(){ return droppingItem && !canTapPlayer(Core.input.mouseWorldX(), Core.input.mouseWorldY()); } - public void tryDropItems(@Nullable Building tile, float x, float y){ + public void tryDropItems(@Nullable Building build, float x, float y){ if(!droppingItem || player.unit().stack.amount <= 0 || canTapPlayer(x, y) || state.isPaused() ){ droppingItem = false; return; @@ -1073,8 +1090,8 @@ public void tryDropItems(@Nullable Building tile, float x, float y){ ItemStack stack = player.unit().stack; - if(tile != null && tile.acceptStack(stack.item, stack.amount, player.unit()) > 0 && tile.interactable(player.team()) && tile.block.hasItems && player.unit().stack().amount > 0 && tile.interactable(player.team())){ - Call.transferInventory(player, tile); + if(build != null && build.acceptStack(stack.item, stack.amount, player.unit()) > 0 && build.interactable(player.team()) && build.block.hasItems && player.unit().stack().amount > 0 && build.interactable(player.team())){ + Call.transferInventory(player, build); }else{ Call.dropItem(player.angleTo(x, y)); } diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 8619d65d2cff..a1ca88635ac4 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -374,13 +374,7 @@ public void drawOverSelect(){ crosshairScale = Mathf.lerpDelta(crosshairScale, 1f, 0.2f); - Draw.color(Pal.remove); - Lines.stroke(1f); - - float radius = Interp.swingIn.apply(crosshairScale); - - Lines.poly(target.getX(), target.getY(), 4, 7f * radius, Time.time * 1.5f); - Lines.spikes(target.getX(), target.getY(), 3f * radius, 6f * radius, 4, Time.time * 1.5f); + Drawf.target(target.getX(), target.getY(), 7f * Interp.swingIn.apply(crosshairScale), Pal.remove); } Draw.reset(); @@ -629,8 +623,8 @@ public boolean tap(float x, float y, int count, KeyCode button){ } @Override - public void update(){ - super.update(); + public void updateState(){ + super.updateState(); if(state.isMenu()){ selectRequests.clear(); @@ -639,6 +633,11 @@ public void update(){ manualShooting = false; payloadTarget = null; } + } + + @Override + public void update(){ + super.update(); if(player.dead()){ mode = none; @@ -647,7 +646,7 @@ public void update(){ } //zoom camera - if(Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!isPlacing() || !block.rotate) && selectRequests.isEmpty()))){ + if(Math.abs(Core.input.axisTap(Binding.zoom)) > 0 && !Core.input.keyDown(Binding.rotateplaced) && (Core.input.keyDown(Binding.diagonal_placement) || ((!player.isBuilder() || !isPlacing() || !block.rotate) && selectRequests.isEmpty()))){ renderer.scaleCamera(Core.input.axisTap(Binding.zoom)); } diff --git a/core/src/mindustry/input/Placement.java b/core/src/mindustry/input/Placement.java index 874269846f43..85d14f24165a 100644 --- a/core/src/mindustry/input/Placement.java +++ b/core/src/mindustry/input/Placement.java @@ -100,7 +100,7 @@ public static void calculateNodes(Seq points, Block block, int rotation, i ++; } - if(!addedLast) result.add(base.peek()); + if(!addedLast && !base.isEmpty()) result.add(base.peek()); points.clear(); points.addAll(result); diff --git a/core/src/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java index aa395a425bb2..c8e43d5a2000 100644 --- a/core/src/mindustry/io/JsonIO.java +++ b/core/src/mindustry/io/JsonIO.java @@ -13,8 +13,9 @@ @SuppressWarnings("unchecked") public class JsonIO{ - private static CustomJson jsonBase = new CustomJson(); - private static Json json = new Json(){ + private static final CustomJson jsonBase = new CustomJson(); + + public static final Json json = new Json(){ { apply(this); } @Override @@ -39,10 +40,6 @@ protected String convertToString(Object object){ } }; - public static Json json(){ - return json; - } - public static String write(Object object){ return json.toJson(object, object.getClass()); } @@ -69,7 +66,6 @@ public static String print(String in){ } static void apply(Json json){ - json.setIgnoreUnknownFields(true); json.setElementType(Rules.class, "spawns", SpawnGroup.class); json.setElementType(Rules.class, "loadout", ItemStack.class); diff --git a/core/src/mindustry/io/MapIO.java b/core/src/mindustry/io/MapIO.java index 18f6a712bd5b..c4845247095e 100644 --- a/core/src/mindustry/io/MapIO.java +++ b/core/src/mindustry/io/MapIO.java @@ -11,6 +11,7 @@ import mindustry.game.*; import mindustry.maps.*; import mindustry.world.*; +import mindustry.world.blocks.environment.*; import mindustry.world.blocks.storage.*; import java.io.*; @@ -199,11 +200,16 @@ public static void readImage(Pixmap pixmap, Tiles tiles){ for(Point2 p : Geometry.d4){ Tile other = tiles.get(tile.x + p.x, tile.y + p.y); if(other != null && other.floor() != Blocks.air){ - tile.setFloor(other.floor()); + tile.setFloorUnder(other.floor()); break; } } } + + //default to stone floor + if(tile.floor() == Blocks.air){ + tile.setFloorUnder((Floor)Blocks.stone); + } } } } diff --git a/core/src/mindustry/io/TypeIO.java b/core/src/mindustry/io/TypeIO.java index d3172d378ed9..9e8ab187dd90 100644 --- a/core/src/mindustry/io/TypeIO.java +++ b/core/src/mindustry/io/TypeIO.java @@ -317,7 +317,11 @@ public static UnitController readController(Reads read, UnitController prev){ return player; }else if(type == 1){ //formation controller int id = read.i(); - return prev instanceof FormationAI ? prev : new FormationAI(Groups.unit.getByID(id), null); + if(prev instanceof FormationAI f){ + f.leader = Groups.unit.getByID(id); + return f; + } + return new FormationAI(Groups.unit.getByID(id), null); }else if(type == 3){ int pos = read.i(); if(prev instanceof LogicAI pai){ diff --git a/core/src/mindustry/logic/ConditionOp.java b/core/src/mindustry/logic/ConditionOp.java index 0954567c062e..54a88f4d296d 100644 --- a/core/src/mindustry/logic/ConditionOp.java +++ b/core/src/mindustry/logic/ConditionOp.java @@ -7,6 +7,7 @@ public enum ConditionOp{ lessThanEq("<=", (a, b) -> a <= b), greaterThan(">", (a, b) -> a > b), greaterThanEq(">=", (a, b) -> a >= b), + strictEqual("===", (a, b) -> false), always("always", (a, b) -> true); public static final ConditionOp[] all = values(); diff --git a/core/src/mindustry/logic/LAccess.java b/core/src/mindustry/logic/LAccess.java index 0daf9ae83f8d..4fcaba35a5da 100644 --- a/core/src/mindustry/logic/LAccess.java +++ b/core/src/mindustry/logic/LAccess.java @@ -21,11 +21,13 @@ public enum LAccess{ maxHealth, heat, efficiency, + timescale, rotation, x, y, shootX, shootY, + range, shooting, mineX, mineY, @@ -44,7 +46,8 @@ public enum LAccess{ enabled("to"), //"to" is standard for single parameter access shoot("x", "y", "shoot"), shootp(true, "unit", "shoot"), - configure(true, 30, "to"); + configure(true, 30, "to"), + color("r", "g", "b"); public final String[] params; public final boolean isObj; diff --git a/core/src/mindustry/logic/LAssembler.java b/core/src/mindustry/logic/LAssembler.java index fe1c7e1267d9..75a7b77174c2 100644 --- a/core/src/mindustry/logic/LAssembler.java +++ b/core/src/mindustry/logic/LAssembler.java @@ -13,6 +13,11 @@ public class LAssembler{ public static ObjectMap> customParsers = new ObjectMap<>(); public static final int maxTokenLength = 36; + private static final StringMap opNameChanges = StringMap.of( + "atan2", "angle", + "dst", "len" + ); + private int lastVar; /** Maps names to variable IDs. */ public ObjectMap vars = new ObjectMap<>(); @@ -28,6 +33,8 @@ public LAssembler(){ putConst("@unit", null); //reference to self putConst("@this", null); + //global tick + putConst("@tick", 0); } public static LAssembler assemble(String data, int maxInstructions){ @@ -61,8 +68,7 @@ public static Seq read(String data, int max){ String[] lines = data.split("\n"); int index = 0; for(String line : lines){ - //comments - if(line.startsWith("#") || line.isEmpty()) continue; + if(line.isEmpty()) continue; //remove trailing semicolons in case someone adds them in for no reason if(line.endsWith(";")) line = line.substring(0, line.length() - 1); @@ -72,6 +78,7 @@ public static Seq read(String data, int max){ try{ String[] arr; + if(line.startsWith("#")) continue; //yes, I am aware that this can be split with regex, but that's slow and even more incomprehensible if(line.contains(" ")){ @@ -81,7 +88,9 @@ public static Seq read(String data, int max){ for(int i = 0; i < line.length() + 1; i++){ char c = i == line.length() ? ' ' : line.charAt(i); - if(c == '"'){ + if(c == '#' && !inString){ + break; + }else if(c == '"'){ inString = !inString; }else if(c == ' ' && !inString){ tokens.add(line.substring(lastIdx, Math.min(i, lastIdx + maxTokenLength))); @@ -94,6 +103,9 @@ public static Seq read(String data, int max){ arr = new String[]{line}; } + //nothing found + if(arr.length == 0) continue; + String type = arr[0]; //legacy stuff @@ -120,6 +132,11 @@ public static Seq read(String data, int max){ } } + //fix up changed operaiton names + if(type.equals("op")){ + arr[1] = opNameChanges.get(arr[1], arr[1]); + } + LStatement st = LogicIO.read(arr); if(st != null){ diff --git a/core/src/mindustry/logic/LCanvas.java b/core/src/mindustry/logic/LCanvas.java index 92c8f61d53db..3b2e46524389 100644 --- a/core/src/mindustry/logic/LCanvas.java +++ b/core/src/mindustry/logic/LCanvas.java @@ -41,6 +41,22 @@ public static boolean useRows(){ return Core.graphics.getWidth() < Scl.scl(900f) * 1.2f; } + public static void tooltip(Cell cell, String key){ + String lkey = key.toLowerCase().replace(" ", ""); + if(Core.settings.getBool("logichints", true) && Core.bundle.has(lkey)){ + cell.get().addListener(new Tooltip(t -> t.background(Styles.black8).margin(4f).add("[lightgray]" + Core.bundle.get(lkey)).style(Styles.outlineLabel))); + } + } + + public static void tooltip(Cell cell, Enum key){ + String cl = key.getClass().getSimpleName().toLowerCase() + "." + key.name().toLowerCase(); + if(Core.bundle.has(cl)){ + tooltip(cell, cl); + }else{ + tooltip(cell, "lenum." + key.name()); + } + } + public void rebuild(){ targetWidth = useRows() ? 400f : 900f; float s = pane != null ? pane.getScrollPercentY() : 0f; @@ -283,13 +299,13 @@ public StatementElem(LStatement st){ t.add().growX(); t.button(Icon.copy, Styles.logici, () -> { - }).padRight(6).get().tapped(this::copy); + }).size(24f).padRight(6).get().tapped(this::copy); t.button(Icon.cancel, Styles.logici, () -> { remove(); dragging = null; statements.layout(); - }); + }).size(24f); t.addListener(new InputListener(){ float lastx, lasty; diff --git a/core/src/mindustry/logic/LExecutor.java b/core/src/mindustry/logic/LExecutor.java index 679383812853..6c4ec5528144 100644 --- a/core/src/mindustry/logic/LExecutor.java +++ b/core/src/mindustry/logic/LExecutor.java @@ -1,5 +1,6 @@ package mindustry.logic; +import arc.*; import arc.math.geom.*; import arc.struct.*; import arc.util.*; @@ -35,7 +36,8 @@ public class LExecutor{ varCounter = 0, varTime = 1, varUnit = 2, - varThis = 3; + varThis = 3, + varTick = 4; public static final int maxGraphicsBuffer = 256, @@ -44,6 +46,7 @@ public class LExecutor{ public LInstruction[] instructions = {}; public Var[] vars = {}; + public int[] binds; public LongSeq graphicsBuffer = new LongSeq(); public StringBuilder textBuffer = new StringBuilder(); @@ -59,6 +62,7 @@ public boolean initialized(){ public void runOnce(){ //set time vars[varTime].numval = Time.millis(); + vars[varTick].numval = Time.time; //reset to start if(vars[varCounter].numval >= instructions.length || vars[varCounter].numval < 0){ @@ -97,6 +101,10 @@ public void load(LAssembler builder){ //region utility + private static boolean invalid(double d){ + return Double.isNaN(d) || Double.isInfinite(d); + } + public Var var(int index){ //global constants have variable IDs < 0, and they are fetched from the global constants object after being negated return index < 0 ? constants.get(-index) : vars[index]; @@ -119,12 +127,12 @@ public boolean bool(int index){ public double num(int index){ Var v = var(index); - return v.isobj ? v.objval != null ? 1 : 0 : Double.isNaN(v.numval) || Double.isInfinite(v.numval) ? 0 : v.numval; + return v.isobj ? v.objval != null ? 1 : 0 : invalid(v.numval) ? 0 : v.numval; } public float numf(int index){ Var v = var(index); - return v.isobj ? v.objval != null ? 1 : 0 : Double.isNaN(v.numval) || Double.isInfinite(v.numval) ? 0 : (float)v.numval; + return v.isobj ? v.objval != null ? 1 : 0 : invalid(v.numval) ? 0 : (float)v.numval; } public int numi(int index){ @@ -138,9 +146,14 @@ public void setbool(int index, boolean value){ public void setnum(int index, double value){ Var v = var(index); if(v.constant) return; - v.numval = Double.isNaN(value) || Double.isInfinite(value) ? 0 : value; - v.objval = null; - v.isobj = false; + if(invalid(value)){ + v.objval = null; + v.isobj = true; + }else{ + v.numval = value; + v.objval = null; + v.isobj = false; + } } public void setobj(int index, Object value){ @@ -182,9 +195,6 @@ public interface LInstruction{ public static class UnitBindI implements LInstruction{ public int type; - //iteration index - private int index; - public UnitBindI(int type){ this.type = type; } @@ -195,17 +205,21 @@ public UnitBindI(){ @Override public void run(LExecutor exec){ + if(exec.binds == null || exec.binds.length != content.units().size){ + exec.binds = new int[content.units().size]; + } + //binding to `null` was previously possible, but was too powerful and exploitable if(exec.obj(type) instanceof UnitType type){ Seq seq = exec.team.data().unitCache(type); if(seq != null && seq.any()){ - index %= seq.size; - if(index < seq.size){ + exec.binds[type.id] %= seq.size; + if(exec.binds[type.id] < seq.size){ //bind to the next unit - exec.setconst(varUnit, seq.get(index)); + exec.setconst(varUnit, seq.get(exec.binds[type.id])); } - index++; + exec.binds[type.id] ++; }else{ //no units of this type found exec.setconst(varUnit, null); @@ -324,17 +338,19 @@ public UnitControlI(){ @Nullable public static LogicAI checkLogicAI(LExecutor exec, Object unitObj){ if(unitObj instanceof Unit unit && exec.obj(varUnit) == unit && unit.team == exec.team && !unit.isPlayer() && !(unit.controller() instanceof FormationAI)){ - if(!(unit.controller() instanceof LogicAI)){ - unit.controller(new LogicAI()); - ((LogicAI)unit.controller()).controller = exec.building(varThis); + if(unit.controller() instanceof LogicAI la){ + return la; + }else{ + var la = new LogicAI(); + la.controller = exec.building(varThis); + unit.controller(la); //clear old state unit.mineTile = null; unit.clearBuilding(); - return (LogicAI)unit.controller(); + return la; } - return (LogicAI)unit.controller(); } return null; } @@ -432,7 +448,7 @@ public void run(LExecutor exec){ } case build -> { if(unit.canBuild() && exec.obj(p3) instanceof Block block){ - int x = World.toTile(x1), y = World.toTile(y1); + int x = World.toTile(x1 - block.offset/tilesize), y = World.toTile(y1 - block.offset/tilesize); int rot = exec.numi(p4); //reset state of last request when necessary @@ -567,7 +583,7 @@ public void run(LExecutor exec){ int address = exec.numi(position); Building from = exec.building(target); - if(from instanceof MemoryBuild mem){ + if(from instanceof MemoryBuild mem && from.team == exec.team){ exec.setnum(output, address < 0 || address >= mem.memory.length ? 0 : mem.memory[address]); } @@ -591,7 +607,7 @@ public void run(LExecutor exec){ int address = exec.numi(position); Building from = exec.building(target); - if(from instanceof MemoryBuild mem){ + if(from instanceof MemoryBuild mem && from.team == exec.team){ if(address >= 0 && address < mem.memory.length){ mem.memory[address] = exec.num(value); @@ -618,23 +634,23 @@ public void run(LExecutor exec){ Object target = exec.obj(from); Object sense = exec.obj(type); - //TODO should remote enemy buildings be senseable? + //note that remote units/buildings can be sensed as well if(target instanceof Senseable se){ - if(sense instanceof Content){ - exec.setnum(to, se.sense(((Content)sense))); - }else if(sense instanceof LAccess){ - Object objOut = se.senseObject((LAccess)sense); + if(sense instanceof Content co){ + exec.setnum(to, se.sense(co)); + }else if(sense instanceof LAccess la){ + Object objOut = se.senseObject(la); if(objOut == Senseable.noSensed){ //numeric output - exec.setnum(to, se.sense((LAccess)sense)); + exec.setnum(to, se.sense(la)); }else{ //object output exec.setobj(to, objOut); } } }else{ - exec.setnum(to, 0); + exec.setobj(to, null); } } } @@ -750,7 +766,7 @@ public void run(LExecutor exec){ v.objval = f.objval; v.isobj = true; }else{ - v.numval = Double.isNaN(f.numval) || Double.isInfinite(f.numval) ? 0 : f.numval; + v.numval = invalid(f.numval) ? 0 : f.numval; v.isobj = false; } } @@ -772,14 +788,17 @@ public OpI(LogicOp op, int a, int b, int dest){ @Override public void run(LExecutor exec){ - if(op.unary){ + if(op == LogicOp.strictEqual){ + Var v = exec.var(a), v2 = exec.var(b); + exec.setnum(dest, v.isobj == v2.isobj && ((v.isobj && v.objval == v2.objval) || (!v.isobj && v.numval == v2.numval)) ? 1 : 0); + }else if(op.unary){ exec.setnum(dest, op.function1.get(exec.num(a))); }else{ Var va = exec.var(a); Var vb = exec.var(b); if(op.objFunction2 != null && va.isobj && vb.isobj){ - //use object function if provided, and one of the variables is an object + //use object function if both are objects exec.setnum(dest, op.objFunction2.get(exec.obj(a), exec.obj(b))); }else{ //otherwise use the numeric function @@ -855,8 +874,7 @@ public void run(LExecutor exec){ //graphics on headless servers are useless. if(Vars.headless) return; - Building build = exec.building(target); - if(build instanceof LogicDisplayBuild d){ + if(exec.building(target) instanceof LogicDisplayBuild d && d.team == exec.team){ if(d.commands.size + exec.graphicsBuffer.size < maxDisplayBuffer){ for(int i = 0; i < exec.graphicsBuffer.size; i++){ d.commands.addLast(exec.graphicsBuffer.items[i]); @@ -887,6 +905,7 @@ public void run(LExecutor exec){ String strValue = v.objval == null ? "null" : v.objval instanceof String s ? s : + v.objval == Blocks.stoneWall ? "solid" : //special alias v.objval instanceof MappableContent content ? content.name : v.objval instanceof Content ? "[content]" : v.objval instanceof Building build ? build.block.name : @@ -918,8 +937,7 @@ public PrintFlushI(){ @Override public void run(LExecutor exec){ - Building build = exec.building(target); - if(build instanceof MessageBuild d){ + if(exec.building(target) instanceof MessageBuild d && d.team == exec.team){ d.message.setLength(0); d.message.append(exec.textBuffer, 0, Math.min(exec.textBuffer.length(), maxTextBuffer)); @@ -950,8 +968,10 @@ public void run(LExecutor exec){ Var vb = exec.var(compare); boolean cmp; - if(op.objFunction != null && (va.isobj || vb.isobj)){ - //use object function if provided, and one of the variables is an object + if(op == ConditionOp.strictEqual){ + cmp = va.isobj == vb.isobj && ((va.isobj && va.objval == vb.objval) || (!va.isobj && va.numval == vb.numval)); + }else if(op.objFunction != null && va.isobj && vb.isobj){ + //use object function if both are objects cmp = op.objFunction.get(exec.obj(value), exec.obj(compare)); }else{ cmp = op.function.get(exec.num(value), exec.num(compare)); @@ -964,5 +984,37 @@ public void run(LExecutor exec){ } } + public static class WaitI implements LInstruction{ + public int value; + + public float curTime; + public double wait; + public long frameId; + + public WaitI(int value){ + this.value = value; + } + + public WaitI(){ + + } + + @Override + public void run(LExecutor exec){ + if(curTime >= exec.num(value)){ + curTime = 0f; + }else{ + //skip back to self. + exec.var(varCounter).numval --; + } + + if(Core.graphics.getFrameId() != frameId){ + curTime += Time.delta / 60f; + frameId = Core.graphics.getFrameId(); + } + } + } + + //endregion } diff --git a/core/src/mindustry/logic/LStatement.java b/core/src/mindustry/logic/LStatement.java index ea54bd833b3b..dbcee427ff45 100644 --- a/core/src/mindustry/logic/LStatement.java +++ b/core/src/mindustry/logic/LStatement.java @@ -15,6 +15,8 @@ import mindustry.logic.LExecutor.*; import mindustry.ui.*; +import static mindustry.logic.LCanvas.*; + /** * A statement is an intermediate representation of an instruction, to be used mostly in UI. * Contains all relevant variable information. */ @@ -38,13 +40,18 @@ public boolean hidden(){ //protected methods are only for internal UI layout utilities + protected void param(Cell