diff --git a/.github/workflows/deployment.yml b/.github/workflows/deployment.yml index ae8466d9f4..633357c68c 100644 --- a/.github/workflows/deployment.yml +++ b/.github/workflows/deployment.yml @@ -5,8 +5,12 @@ on: tags: - 'v*' +permissions: {} jobs: deploy: + permissions: + contents: write # for release creation (svenstaro/upload-release-action) + runs-on: ubuntu-latest steps: diff --git a/.github/workflows/pr.yml b/.github/workflows/pr.yml index cb26450637..4cc2f6d88f 100644 --- a/.github/workflows/pr.yml +++ b/.github/workflows/pr.yml @@ -2,6 +2,9 @@ name: Pull Request Tests on: [pull_request, workflow_dispatch] +permissions: + contents: read # to fetch code (actions/checkout) + jobs: testPR: runs-on: ubuntu-latest diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 1c6126996a..71a34cae6a 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -2,8 +2,12 @@ name: Tests on: [push, workflow_dispatch] +permissions: {} jobs: runPush: + permissions: + contents: write # for Update bundles + runs-on: ubuntu-latest steps: diff --git a/core/assets-raw/fontgen/config.json b/core/assets-raw/fontgen/config.json index 0a31462a8d..dffb86e36f 100644 --- a/core/assets-raw/fontgen/config.json +++ b/core/assets-raw/fontgen/config.json @@ -1055,6 +1055,20 @@ "search": [ "defense" ] + }, + { + "uid": "99aa5c8f6bbe4d96a3f422a60ff065a9", + "css": "planet", + "code": 59443, + "src": "custom_icons", + "selected": true, + "svg": { + "path": "M343.8 0L312.5 31.3 281.3 62.5 218.8 62.5 187.5 93.8 156.3 125 125 156.3 93.8 187.5 62.5 218.8 62.5 281.3 31.3 312.5 0 343.8 0 406.3 0 468.8 0 531.3 0 593.8 0 656.3 31.3 687.5 62.5 718.8 62.5 781.3 93.8 812.5 125 843.8 156.3 875 187.5 906.3 218.8 937.5 281.3 937.5 312.5 968.8 343.8 1000 406.3 1000 468.8 1000 531.3 1000 593.8 1000 656.3 1000 687.5 968.8 718.8 937.5 781.3 937.5 812.5 906.3 843.8 875 875 843.8 906.3 812.5 937.5 781.3 937.5 718.8 968.8 687.5 1000 656.3 1000 593.8 1000 531.3 1000 468.8 1000 406.3 1000 343.8 968.8 312.5 937.5 281.3 937.5 218.8 906.3 187.5 875 156.3 843.8 125 812.5 93.8 781.3 62.5 718.8 62.5 687.5 31.3 656.3 0 593.8 0 531.3 0 468.8 0 406.3 0 343.8 0ZM406.3 62.5L437.5 93.8 468.8 125 531.3 125 562.5 156.3 562.5 218.8 593.8 250 625 281.3 656.3 312.5 687.5 343.8 718.8 375 781.3 375 843.8 375 906.3 375 937.5 406.3 937.5 468.8 937.5 531.3 937.5 593.8 906.3 625 875 656.3 875 718.8 843.8 750 812.5 781.3 781.3 812.5 750 843.8 718.8 875 656.3 875 625 906.3 593.8 937.5 531.3 937.5 500 906.3 468.8 875 437.5 843.8 437.5 781.3 468.8 750 500 718.8 531.3 687.5 562.5 656.3 562.5 593.8 562.5 531.3 531.3 500 500 468.8 468.8 437.5 406.3 437.5 343.8 437.5 281.3 437.5 250 468.8 218.8 500 187.5 531.3 156.3 562.5 125 593.8 93.8 625 62.5 593.8 62.5 531.3 62.5 468.8 62.5 406.3 93.8 375 125 343.8 125 281.3 156.3 250 187.5 218.8 218.8 187.5 250 156.3 281.3 125 343.8 125 375 93.8 406.3 62.5ZM718.8 562.5L687.5 593.8 687.5 656.3 718.8 687.5 781.3 687.5 812.5 656.3 812.5 593.8 781.3 562.5 718.8 562.5Z", + "width": 1000 + }, + "search": [ + "planet" + ] } ] } \ No newline at end of file diff --git a/core/assets-raw/sprites/blocks/distribution/cross-full.png b/core/assets-raw/sprites/blocks/distribution/cross-full.png new file mode 100644 index 0000000000..916e18cfd2 Binary files /dev/null and b/core/assets-raw/sprites/blocks/distribution/cross-full.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png b/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png index e023e20061..47e4ed20c9 100644 Binary files a/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png and b/core/assets-raw/sprites/blocks/distribution/inverted-sorter.png differ diff --git a/core/assets-raw/sprites/blocks/distribution/sorter.png b/core/assets-raw/sprites/blocks/distribution/sorter.png index a4c8b37e59..8bbe0fb50a 100644 Binary files a/core/assets-raw/sprites/blocks/distribution/sorter.png and b/core/assets-raw/sprites/blocks/distribution/sorter.png differ diff --git a/core/assets-raw/sprites/blocks/production/disassembler-bottom.png b/core/assets-raw/sprites/blocks/production/disassembler-bottom.png new file mode 100644 index 0000000000..7337b1d716 Binary files /dev/null and b/core/assets-raw/sprites/blocks/production/disassembler-bottom.png differ diff --git a/core/assets-raw/sprites/blocks/production/disassembler-liquid.png b/core/assets-raw/sprites/blocks/production/disassembler-liquid.png deleted file mode 100644 index 88006fc498..0000000000 Binary files a/core/assets-raw/sprites/blocks/production/disassembler-liquid.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/production/disassembler-spinner.png b/core/assets-raw/sprites/blocks/production/disassembler-spinner.png index 8a7c2bd606..8fe3e32526 100644 Binary files a/core/assets-raw/sprites/blocks/production/disassembler-spinner.png and b/core/assets-raw/sprites/blocks/production/disassembler-spinner.png differ diff --git a/core/assets-raw/sprites/blocks/production/disassembler.png b/core/assets-raw/sprites/blocks/production/disassembler.png index 4e4a4d3433..ce6ded3a03 100644 Binary files a/core/assets-raw/sprites/blocks/production/disassembler.png and b/core/assets-raw/sprites/blocks/production/disassembler.png differ diff --git a/core/assets-raw/sprites/blocks/production/melter-bottom.png b/core/assets-raw/sprites/blocks/production/melter-bottom.png new file mode 100644 index 0000000000..a2dd7b5e0c Binary files /dev/null and b/core/assets-raw/sprites/blocks/production/melter-bottom.png differ diff --git a/core/assets-raw/sprites/blocks/production/melter-liquid.png b/core/assets-raw/sprites/blocks/production/melter-liquid.png deleted file mode 100644 index 19d66fa18a..0000000000 Binary files a/core/assets-raw/sprites/blocks/production/melter-liquid.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/production/melter.png b/core/assets-raw/sprites/blocks/production/melter.png index 304f7119a5..90e833e2f5 100644 Binary files a/core/assets-raw/sprites/blocks/production/melter.png and b/core/assets-raw/sprites/blocks/production/melter.png differ diff --git a/core/assets-raw/sprites/blocks/production/separator-bottom.png b/core/assets-raw/sprites/blocks/production/separator-bottom.png new file mode 100644 index 0000000000..a100086fe3 Binary files /dev/null and b/core/assets-raw/sprites/blocks/production/separator-bottom.png differ diff --git a/core/assets-raw/sprites/blocks/production/separator-liquid.png b/core/assets-raw/sprites/blocks/production/separator-liquid.png deleted file mode 100644 index 0f81574062..0000000000 Binary files a/core/assets-raw/sprites/blocks/production/separator-liquid.png and /dev/null differ diff --git a/core/assets-raw/sprites/blocks/production/separator-spinner.png b/core/assets-raw/sprites/blocks/production/separator-spinner.png index e09e119c3d..0ab52e41dc 100644 Binary files a/core/assets-raw/sprites/blocks/production/separator-spinner.png and b/core/assets-raw/sprites/blocks/production/separator-spinner.png differ diff --git a/core/assets-raw/sprites/blocks/production/separator.png b/core/assets-raw/sprites/blocks/production/separator.png index cefbb02633..20c9e6b72f 100644 Binary files a/core/assets-raw/sprites/blocks/production/separator.png and b/core/assets-raw/sprites/blocks/production/separator.png differ diff --git a/core/assets-raw/sprites/blocks/sandbox/item-source.png b/core/assets-raw/sprites/blocks/sandbox/item-source.png index 98dc16ac3c..21c254cba5 100644 Binary files a/core/assets-raw/sprites/blocks/sandbox/item-source.png and b/core/assets-raw/sprites/blocks/sandbox/item-source.png differ diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index bb43c8b28d..aa8e185e92 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -90,7 +90,7 @@ stats.destroyed = Buildings Destroyed stats.deconstructed = Buildings Deconstructed stats.playtime = Time Played -globalitems = [accent]Total Items +globalitems = [accent]Planet Items map.delete = Are you sure you want to delete the map "[accent]{0}[]"? level.highscore = High Score: [accent]{0} level.select = Level Select @@ -176,6 +176,10 @@ filename = File Name: unlocked = New content unlocked! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Completed techtree = Tech Tree techtree.select = Tech Tree Selection @@ -762,8 +766,7 @@ sector.ravine.name = Ravine sector.caldera-erekir.name = Caldera sector.onset.description = The tutorial sector. This objective has not been created yet. Await further information. -#TODO - no shield breaker anymore. -sector.aegis.description = The enemy is protected by shields. An experimental shield breaker module has been detected in this sector.\nLocate this structure. Supply it with tungsten ammunition and destroy the enemy base. +sector.aegis.description = This sector contains deposits of tungsten.\nResearch the [accent]Impact Drill[] to mine this resource, and destroy the enemy base in the area. sector.lake.description = This sector's slag lake greatly limits viable units. A hover unit is the only option.\nResearch the [accent]ship fabricator[] and produce an [accent]elude[] unit as soon as possible. sector.intersect.description = Scans suggest that this sector will be attacked from multiple sides soon after landing.\nSet up defenses quickly and expand as soon as possible.\n[accent]Mech[] units will be required for the area's rough terrain. sector.atlas.description = This sector contains varied terrain and will require a variety of units to attack effectively.\nUpgraded units may also be necessary to get past some of the tougher enemy bases detected here.\nResearch the [accent]Electrolyzer[] and the [accent]Tank Refabricator[]. @@ -1158,7 +1161,7 @@ rules.wavetimer = Wave Timer rules.wavesending = Wave Sending rules.waves = Waves rules.attack = Attack Mode -rules.rtsai = RTS AI +rules.rtsai = RTS AI [scarlet](WIP) rules.rtsminsquadsize = Min Squad Size rules.rtsmaxsquadsize = Max Squad Size rules.rtsminattackweight = Min Attack Weight diff --git a/core/assets/bundles/bundle_be.properties b/core/assets/bundles/bundle_be.properties index bccc888ada..f4a8f7b5a9 100644 --- a/core/assets/bundles/bundle_be.properties +++ b/core/assets/bundles/bundle_be.properties @@ -173,6 +173,10 @@ filename = Iмя файла: unlocked = Новы кантэнт адмыкнуты! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Завершаны techtree = Дрэва\n тэхналогій techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_bg.properties b/core/assets/bundles/bundle_bg.properties index 6c91ff2860..cea40931c2 100644 --- a/core/assets/bundles/bundle_bg.properties +++ b/core/assets/bundles/bundle_bg.properties @@ -176,6 +176,10 @@ filename = Име на файл: unlocked = Отйлючихте нови неща! available = Можете да проучите нови технологии! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Завършено techtree = Tech Tree techtree.select = Tech Tree Selection @@ -742,7 +746,7 @@ sector.impact0078.description = Тук лежат останките от пър sector.planetaryTerminal.description = Крайна цел.\n\nТази крайбрежна база съдържа структура, създадена с цел междупланетарен транспорт на ядра, макар и само в рамките на локалната звездна система. Тази локация има изключително висока защита.\n\nИзползвайте военноморски единици. Елиминирайте врага възможно най - бързо. Проучете изстрелващата структура sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_ca.properties b/core/assets/bundles/bundle_ca.properties index 1cc4616564..d2701326df 100644 --- a/core/assets/bundles/bundle_ca.properties +++ b/core/assets/bundles/bundle_ca.properties @@ -176,6 +176,10 @@ filename = Nom del fitxer: unlocked = S’ha desblocat contingut nou! available = Hi ha una recerca disponible nova! unlock.incampaign = < Desbloca en el mode campanya per a veure’n més detalls. > +campaign.select = Trieu la campanya inicial +campaign.none = [lightgray]Trieu en quin planeta voleu començar.\nEs pot canviar en qualsevol moment. +campaign.erekir = [accent]Recomanat per a jugadors novells.[]\n\nContingut revisat nou. Una campanya de progressió més o menys lineal.\n\nMapes de qualitat més alta i experiència més satisfactòria. +campaign.serpulo = [scarlet]No recomanat per a jugadors novells.[]\n\nContingut antic; l’experiència clàssica. Campanya més oberta.\n\nPotser els mapes i mecàniques de la campanya no estan massa equilibrats. Contingut en general menys polit que el d’Erekir. completed = [accent]Completat techtree = Arbre tecnològic techtree.select = Selecció de l’arbre tecnològic @@ -1149,7 +1153,7 @@ rules.coreincinerates = El nucli incinera els excedents rules.disableworldprocessors = Desactiva els processadors integrats rules.schematic = Permetre l’ús d’esquemes rules.wavetimer = Temporitzador d’onades -rules.wavesending = Wave Sending +rules.wavesending = Enviament d’onades rules.waves = Onades rules.attack = Mode d’atac rules.rtsai = IA avançada (RTS AI) @@ -1934,92 +1938,92 @@ block.core-bastion.description = Nucli de la base. Blindat. Quan es destrueix, e block.core-citadel.description = Nucli de la base. Molt ben blindat. Emmagatzema més recursos que un nucli Bastió. block.core-acropolis.description = Nucli de la base. Excepcionalment ben blindat. Emmagatzema més recursos que un nucli Ciutadella. block.breach.description = Dispara munició perforant de beril·li o tungstè als objectius enemics. -block.diffuse.description = Fires a burst of bullets in a wide cone. Pushes enemy targets back. -block.sublimate.description = Fires a continuous jet of flame at enemy targets. Pierces armor. -block.titan.description = Fires a massive explosive artillery shell at ground targets. Requires hydrogen. -block.afflict.description = Fires a massive charged orb of fragmentary flak. Requires heating. -block.disperse.description = Fires bursts of flak at aerial targets. -block.lustre.description = Fires a slow-moving single-target laser at enemy targets. -block.scathe.description = Launches a powerful missile at ground targets over vast distances. -block.smite.description = Fires bursts of piercing, lightning-emitting bullets. -block.malign.description = Fires a barrage of homing laser charges at enemy targets. Requires extensive heating. -block.silicon-arc-furnace.description = Refines silicon from sand and graphite. -block.oxidation-chamber.description = Converts beryllium and ozone into oxide. Emits heat as a by-product. -block.electric-heater.description = Heats facing blocks. Requires large amounts of power. -block.slag-heater.description = Heats facing blocks. Requires slag. -block.phase-heater.description = Heats facing blocks. Requires phase fabric. -block.heat-redirector.description = Redirects accumulated heat to other blocks. -block.electrolyzer.description = Converts water into hydrogen and ozone gas. -block.atmospheric-concentrator.description = Concentrates nitrogen from the atmosphere. Requires heat. -block.surge-crucible.description = Forms surge alloy from slag and silicon. Requires heat. -block.phase-synthesizer.description = Synthesizes phase fabric from thorium, sand, and ozone. Requires heat. -block.carbide-crucible.description = Fuses graphite and tungsten into carbide. Requires heat. -block.cyanogen-synthesizer.description = Synthesizes cyanogen from arkycite and graphite. Requires heat. -block.slag-incinerator.description = Incinerates non-volatile items or liquids. Requires slag. -block.vent-condenser.description = Condenses vent gases into water. Consumes power. -block.plasma-bore.description = When placed facing an ore wall, outputs items indefinitely. Requires small amounts of power. -block.large-plasma-bore.description = A larger plasma bore. Capable of mining tungsten and thorium. Requires hydrogen and power. -block.cliff-crusher.description = Crushes walls, outputting sand indefinitely. Requires power. Efficiency varies based on type of wall. -block.impact-drill.description = When placed on ore, outputs items in bursts indefinitely. Requires power and water. -block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. -block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. -block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. -block.reinforced-liquid-tank.description = Stores a large amount of fluids. -block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. -block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. -block.reinforced-pump.description = Pumps and outputs liquids. Requires hydrogen. -block.beryllium-wall.description = Protects structures from enemy projectiles. -block.beryllium-wall-large.description = Protects structures from enemy projectiles. -block.tungsten-wall.description = Protects structures from enemy projectiles. -block.tungsten-wall-large.description = Protects structures from enemy projectiles. -block.carbide-wall.description = Protects structures from enemy projectiles. -block.carbide-wall-large.description = Protects structures from enemy projectiles. -block.reinforced-surge-wall.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.reinforced-surge-wall-large.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.shielded-wall.description = Protects structures from enemy projectiles. Deploys a shield that absorbs most projectiles when power is provided. Conducts power. -block.blast-door.description = A wall that opens when allied ground units are in range. Cannot be manually controlled. -block.duct.description = Moves items forward. Only capable of storing a single item. -block.armored-duct.description = Moves items forward. Does not accept non-duct inputs from the sides. -block.duct-router.description = Distributes items equally across three directions. Only accepts items from the back side. Can be configured as an item sorter. -block.overflow-duct.description = Only outputs items to the sides if the front path is blocked. -block.duct-bridge.description = Moves items over structures and terrain. -block.duct-unloader.description = Unloads the selected item from the block behind it. Cannot unload from cores. -block.underflow-duct.description = Opposite of an overflow duct. Outputs to the front if the left and right paths are blocked. -block.reinforced-liquid-junction.description = Acts as a junction between two crossing conduits. -block.surge-conveyor.description = Moves items in batches. Can be sped up with power. Conducts power. -block.surge-router.description = Equally distributes items in three directions from surge conveyors. Can be sped up with power. Conducts power. -block.unit-cargo-loader.description = Constructs cargo drones. Drones automatically distribute items to Cargo Unload Points with a matching filter. -block.unit-cargo-unload-point.description = Acts as an unloading point for cargo drones. Accepts items that match the selected filter. -block.beam-node.description = Transmits power to other blocks orthogonally. Stores a small amount of power. -block.beam-tower.description = Transmits power to other blocks orthogonally. Stores a large amount of power. Long-range. -block.turbine-condenser.description = Generates power when placed on vents. Produces a small amount of water. -block.chemical-combustion-chamber.description = Generates power from arkycite and ozone. -block.pyrolysis-generator.description = Generates large amounts of power from arkycite and slag. Produces water as a byproduct. -block.flux-reactor.description = Generates large amounts of power when heated. Requires cyanogen as a stabilizer. Power output and cyanogen requirements are proportional to heat input.\nExplodes if insufficient cyanogen is provided. -block.neoplasia-reactor.description = Uses arkycite, water and phase fabric to generate large amounts of power. Produces heat and dangerous neoplasm as a byproduct.\nExplodes violently if neoplasm is not removed from the reactor via conduits. -block.build-tower.description = Automatically rebuilds structures in range and assists other units in construction. -block.regen-projector.description = Slowly repairs allied structures in a square perimeter. Requires hydrogen. -block.reinforced-container.description = Stores a small amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. -block.reinforced-vault.description = Stores a large amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. -block.tank-fabricator.description = Constructs Stell units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.ship-fabricator.description = Constructs Elude units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.mech-fabricator.description = Constructs Merui units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.tank-assembler.description = Assembles large tanks out of inputted blocks and units. Output tier may be increased by adding modules. -block.ship-assembler.description = Assembles large ships out of inputted blocks and units. Output tier may be increased by adding modules. -block.mech-assembler.description = Assembles large mechs out of inputted blocks and units. Output tier may be increased by adding modules. -block.tank-refabricator.description = Upgrades inputted tank units to the second tier. -block.ship-refabricator.description = Upgrades inputted ship units to the second tier. -block.mech-refabricator.description = Upgrades inputted mech units to the second tier. -block.prime-refabricator.description = Upgrades inputted units to the third tier. -block.basic-assembler-module.description = Increases assembler tier when placed next to a construction boundary. Requires power. Can be used as a payload input. -block.small-deconstructor.description = Deconstructs inputted structures and units. Returns 100% of the build cost. -block.reinforced-payload-conveyor.description = Moves payloads forward. -block.reinforced-payload-router.description = Distributes payloads into adjacent blocks. Functions as a sorter when a filter is set. -block.payload-mass-driver.description = Long-range payload transport structure. Shoots received payloads to linked payload mass drivers. -block.unit-repair-tower.description = Repairs all units in its vicinity. Requires ozone. -block.radar.description = Gradually uncovers terrain and enemy units in a large radius. Requires power. -block.shockwave-tower.description = Damages and destroys enemy projectiles in a radius. Requires cyanogen. +block.diffuse.description = Dispara una ràfega de bales en forma de con. Empeny enrere els objectius enemics. +block.sublimate.description = Dispara una flama continua de foc als objectius enemics. Perfora els blindatges. +block.titan.description = Dispara projectils explosius enormes als objectius terrestres. Necessita hidrogen. +block.afflict.description = Dispara una bola enorme carregada amb artilleria antiaèria de fragmentació. Requereix escalfor. +block.disperse.description = Dispara ràfegues d’artilleria als objectius aeris. +block.lustre.description = Dispara un làser lent que pot apuntar un sol objectiu enemic. +block.scathe.description = Llança un míssil als objectius terrestres a llarga distància. +block.smite.description = Dispara ràfegues de bales perforadors i que emeten llum. +block.malign.description = Dispara una cortina de càrregues làser teledirigides als objectius enemics. Necessita molta escalfor. +block.silicon-arc-furnace.description = Refina silici a partir de sorra i grafit. +block.oxidation-chamber.description = Converteix el beril·li i l’ozó en òxid. Emet escalfor com a subproducte. +block.electric-heater.description = Escalfa els blocs als que està orientat. Necessita grans quantitats d’energia. +block.slag-heater.description = Escalfa els blocs als que està orientat. Requereix escòria. +block.phase-heater.description = Escalfa els blocs als que està orientat. Requereix teixit de fase. +block.heat-redirector.description = Redirigeix l’escalfor acumulada a altres blocs. +block.electrolyzer.description = Converteix l’aigua en hidrogen i gas ozó. +block.atmospheric-concentrator.description = Concentra el nitrogen de l’atmosfera. Requereix escalfor. +block.surge-crucible.description = Genera aliatge electrificable a partir d’escòria i silici. Necessita escalfor. +block.phase-synthesizer.description = Sintetitza teixit de fase a partir de tori, sorra i ozó. Necessita escalfor. +block.carbide-crucible.description = Combina grafit i tungstè per obtenir-ne carbur. Necessita escalfor. +block.cyanogen-synthesizer.description = Sintetitza cianogen a partir d’arquicita i grafit. Necessita escalfor. +block.slag-incinerator.description = Incinera elements no volàtils o líquids. Necessita escòria. +block.vent-condenser.description = Condensa els gasos procedents de conductes de ventilació en aigua. Consumeix energia. +block.plasma-bore.description = Quan es posa orientat a un mur de mineral, en treu recursos indefinidament. Requereix una mica d’energia per funcionar. +block.large-plasma-bore.description = Una perforadora de plasma grossa. Pot extraure tungstè i tori. Requereix hidrogen i energia. +block.cliff-crusher.description = Trenca murs, extraient-ne sorra indefinidament. Necessita energia. La seva eficàcia depèn del tipus de mur. +block.impact-drill.description = Quan es posa a sobre de minerals, n’extrau indefinidament. Necessita energia i aigua. +block.eruption-drill.description = Una perforadora d’impacte millorada. Pot extraure tori. Necessita hidrogen. +block.reinforced-conduit.description = Impulsa i fa circular els fluids. No accepta entrades des dels laterals si no és a través de conductes. +block.reinforced-liquid-router.description = Distribueix fluids a tots els seus costats. +block.reinforced-junction.description = Actua com a dues canonades independents que es creuen. +block.reinforced-liquid-tank.description = Emmagatzema una gran quantitat de fluid. +block.reinforced-liquid-container.description = Emmagatzema fluids. +block.reinforced-bridge-conduit.description = Transporta fluids per sota de les estructures i del terreny. +block.reinforced-pump.description = Bombeja i extrau líquids. Requereix hidrogen. +block.beryllium-wall.description = Protegeix les estructures dels projectils enemics. +block.beryllium-wall-large.description = Protegeix les estructures dels projectils enemics. +block.tungsten-wall.description = Protegeix les estructures dels projectils enemics. +block.tungsten-wall-large.description = Protegeix les estructures dels projectils enemics. +block.carbide-wall.description = Protegeix les estructures dels projectils enemics. +block.carbide-wall-large.description = Protegeix les estructures dels projectils enemics. +block.reinforced-surge-wall.description = Protegeix les estructures dels projectils enemics, llançant descàrregues elèctriques periòdicament quan els projectils impacten. +block.reinforced-surge-wall-large.description = Protegeix les estructures dels projectils enemics, llançant descàrregues elèctriques periòdicament quan els projectils impacten. +block.shielded-wall.description = Protegeix les estructures dels projectils enemics. Genera un escut que absorbeix la majoria quan se li proporciona energia. Condueix l’electricitat. +block.blast-door.description = Un mur que s’obre quan hi ha un aliat terrestre a prop. No es pot controlar manualment. +block.duct.description = Mou els elements. Només pot emmagatzemar un sol element. +block.armored-duct.description = Mou elements. No accepta entrades pels laterals si no és a través de conductes. +block.duct-router.description = Distribueix els elements en tres direccions. Només accepta elements a través de la part posterior. Es pot configurar com a classificador d’elements. +block.overflow-duct.description = Només treu elements pels costats si la sortida del davant està blocada. +block.duct-bridge.description = Mou elements per sota de les estructures i del terreny. +block.duct-unloader.description = Descarrega l’element seleccionat del bloc del darrera. No pot descarregar-los dels nuclis. +block.underflow-duct.description = Actua a l’inrevés d’una porta de desbordament. Els elements surten per la part del davant si els dos laterals estan blocats. +block.reinforced-liquid-junction.description = Actua com a dos conductes independents que es creuen. +block.surge-conveyor.description = Mou elements en grans quantitats. Es pot accelerar amb energia. Condueix l’electricitat. +block.surge-router.description = Distribueix els elements en tres direccions a partir de cintes electrificades. Es poden accelerar amb energia. Condueix l’electricitat. +block.unit-cargo-loader.description = Construeix drons de càrrega. Els drons distribueixen automàticament els elements als punts de càrrega i descàrrega que coincideixin amb el filtre. +block.unit-cargo-unload-point.description = Actua com un punt de descàrrega per als drons de càrrega. Accepta elements que coincideixin amb el filtre. +block.beam-node.description = Transmet energia a altres blocs ortogonalment. Emmagatzema una petita quantitat d’energia. +block.beam-tower.description = Transmet energia a altres blocs ortogonalment. Emmagatzema una gran quantitat d’energia. Té un abast gran. +block.turbine-condenser.description = Genera energia quan es situa en conductes de ventilació. Produeix una petita quantitat d’aigua. +block.chemical-combustion-chamber.description = Genera energia a partir d’arquicita i ozó. +block.pyrolysis-generator.description = Genera grans quantitats d’energia a partir d’arquicita i escòria. Produeix aigua com a subproducte. +block.flux-reactor.description = Genera grans quantitats d’energia quan se l’escalfa. Necessita cianogen com a estabilitzador. La sortida d’energia i el cianogen necessari són proporcionals a l’escalfor d’entrada.\nExplota si no té prou cianogen. +block.neoplasia-reactor.description = Fa servir arquicita, aigua i teixit de fase per generar grans quantitats d’energia. Produeix escalfor i quantitats perilloses de neoplasma com a subproducte.\nExplota de manera violenta si el neoplasma no s’extrau del redactor amb canonades. +block.build-tower.description = Reconstrueix automàticament les estructures que estiguin a l’abast i ajuda a construir a altres unitats. +block.regen-projector.description = Repara a poc a poc les estructures aliades dins d’un perímetre quadrat. Necessita hidrogen. +block.reinforced-container.description = Emmagatzema una quantitat petita d’elements. Els continguts es poden recuperar amb descarregadors. No augmenta l’emmagatzematge del nucli. +block.reinforced-vault.description = Emmgatzema una gran quantitat d’elements. Els continguts es poden recuperar amb descarregadors. No augmenta l’emmagatzematge del nucli. +block.tank-fabricator.description = Construeix unitats Stell. Les unitats produïdes es poden fer servir directament o bé portar-les a les refabricadores per millorar-les. +block.ship-fabricator.description = Construeix unitats Elude. Les unitats produïdes es poden fer servir directament o bé portar-les a les refabricadores per millorar-les. +block.mech-fabricator.description = Construeix unitats Merui. Les unitats produïdes es poden fer servir directament o bé portar-les a les refabricadores per millorar-les. +block.tank-assembler.description = Munta tancs grossos a partir de blocs i unitats d’entrada. El nivell de sortida es pot millorar si s’hi afegeixen mòduls. +block.ship-assembler.description = Munta naus grosses a partir de blocs i unitats d’entrada. El nivell de sortida es pot millorar si s’hi afegeixen mòduls. +block.mech-assembler.description = Munta meques grosses a partir de blocs i unitats d’entrada. El nivell de sortida es pot millorar si s’hi afegeixen mòduls. +block.tank-refabricator.description = Millora els tancs d’entrada al segon nivell. +block.ship-refabricator.description = Millora les naus d’entrada al segon nivell. +block.mech-refabricator.description = Millora les meques d’entrada al segon nivell. +block.prime-refabricator.description = Millora les unitats d’entrada al tercer nivell. +block.basic-assembler-module.description = Augmenta el nivell de muntatge quan es situa al costat d’una vora de construcció. Necessita energia. Es pot fer servir com a punt d’entrada per al transport de blocs. +block.small-deconstructor.description = Desmunta les unitats i estructures d’entrada. Recupera el 100 % del cost de construcció. +block.reinforced-payload-conveyor.description = Mou els blocs i les unitats. +block.reinforced-payload-router.description = Distribueix els blocs als blocs adjacents. Funciona com un classificador si s’estableix un filtre. +block.payload-mass-driver.description = Estructura de transport de blocs i unitats de llarg abast. Dispara la càrrega rebuda a altres torres de transport a distància enllaçades. +block.unit-repair-tower.description = Repara totes les unitats a prop. Necessita ozó. +block.radar.description = Escaneja el terreny gradualment i localitza unitats enemigues a gran distància. Necessita energia. +block.shockwave-tower.description = Danya i destrueix projectils enemics dintre del seu abast. Requereix cianogen. unit.dagger.description = Dispara munició estàndard a tots els enemics propers. unit.mace.description = Dispara flames a tots els enemics propers. @@ -2058,7 +2062,7 @@ unit.retusa.description = Dispara torpedes guiats als enemics propers. Repara un unit.oxynoe.description = Dispara rajos de flames als enemics propers que reparen també les estructures aliades. També apunta i destrueix projectils enemics amb una torreta de defensa. unit.cyerce.description = Dispara grups de míssils rastrejadors. Repara unitats aliades. unit.aegires.description = Electrocuta totes les unitats enemigues que entren al seu camp d’energia. Repara tots els aliats. -unit.navanax.description = Dispara projectils explosius EMP que danyen significativament les xarxes d’energia enemigues i que reparen les estructures aliades. Fon els enemics propers amb 4 torretes làser autònomes. +unit.navanax.description = Dispara projectils explosius PEM que danyen significativament les xarxes d’energia enemigues i que reparen les estructures aliades. Fon els enemics propers amb 4 torretes làser autònomes. unit.stell.description = Dispara munició estàndard als objectius enemics. unit.locus.description = Dispara munició alternant als objectius enemics. unit.precept.description = Dispara una ràfega de munició perforadora als objectius enemics. @@ -2092,7 +2096,7 @@ lst.set = Estableix una variable. lst.operation = Executa una operació amb 1 o 2 variables. lst.end = Salta al principi de la llista d’instruccions. lst.wait = Espera el nombre indicat de segons. -lst.stop = Halt execution of this processor. +lst.stop = Para l’execució d’aquest processador. lst.lookup = Busca un tipus d’element, líquid, unitat o bloc per ID.\nEs pot comptar la quantitat total d’elements del tipus indicat amb:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] lst.jump = Salta a una altra instrucció si es compleixen les condicions. lst.unitbind = Enllaça amb la següent unitat d’un determinat tipus i la guarda en [accent]@unit[]. diff --git a/core/assets/bundles/bundle_cs.properties b/core/assets/bundles/bundle_cs.properties index ba3345860e..778e6611e3 100644 --- a/core/assets/bundles/bundle_cs.properties +++ b/core/assets/bundles/bundle_cs.properties @@ -176,6 +176,10 @@ filename = Název souboru: unlocked = Byl odemmknut nový blok! available = Je zpřístupněn nový výzkum! unlock.incampaign = < Odemkni v kampani pro více detailů > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Dokončeno[] techtree = Technologie techtree.select = Tech Tree Selection @@ -692,7 +696,7 @@ sector.lost = Sektor [accent]{0}[white] ztracen! :( sector.captured = Sektor [accent]{0}[white]polapen! :) sector.changeicon = Změnit Ikonu sector.noswitch.title = Unable to Switch Sectors -sector.noswitch = You may not switch sectors while an existing sector is under attack.\n\nSector: [accent]{0}[] on [accent]{1}[] +sector.noswitch = Sektory nelze přepnut, pokud je stávající sektor pod útokem.\n\nSektor: [accent]{0}[] na [accent]{1}[] sector.view = View Sector threat.low = Nízké @@ -744,7 +748,7 @@ sector.impact0078.description = Zde leží zbytky mezihvězdné lodi, která vst sector.planetaryTerminal.description = Konečný cíl.\n\nTato pobřežní základna obsahuje konstrukce schopné vyslat jádra na okolní planety. Je mimořádně dobře opevněna.\n\nVyrob námořní jednotky. Odstraň nepřítele tak rychle, jak umíš. Vyzkoumej vysílací konstrukci. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_da.properties b/core/assets/bundles/bundle_da.properties index 701daf98d1..acc6f37691 100644 --- a/core/assets/bundles/bundle_da.properties +++ b/core/assets/bundles/bundle_da.properties @@ -173,6 +173,10 @@ filename = Fil navn: unlocked = Nyt indhold tilgængeligt! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Færdiggjort techtree = Teknologi træ techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_de.properties b/core/assets/bundles/bundle_de.properties index acab0e2578..2e1ea9cbdd 100644 --- a/core/assets/bundles/bundle_de.properties +++ b/core/assets/bundles/bundle_de.properties @@ -176,6 +176,10 @@ filename = Dateiname: unlocked = Neuer Inhalt freigeschaltet! available = Neue Forschung möglich unlock.incampaign = < Für Details in Kampagne freischalten > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Abgeschlossen techtree = Forschung techtree.select = Tech Tree Selection @@ -747,7 +751,7 @@ sector.planetaryTerminal.description = Das Endziel.\n\nDiese Uferbasis besitzt e sector.onset.name = Der Anfang sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index c88cb24579..849ac3bdef 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -176,6 +176,10 @@ filename = Nombre del archivo: unlocked = ¡Nuevo contenido desbloqueado! available = ¡Nueva investigación disponible! unlock.incampaign = < Descúbrelo en el modo campaña para ver más detalles > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Completado techtree = Investigaciones tecnológicas techtree.select = Selección de esquemas de tecnologías diff --git a/core/assets/bundles/bundle_et.properties b/core/assets/bundles/bundle_et.properties index 3f0e224f8e..96b42556cb 100644 --- a/core/assets/bundles/bundle_et.properties +++ b/core/assets/bundles/bundle_et.properties @@ -173,6 +173,10 @@ filename = Failinimi: unlocked = Uus sisu! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Olemas techtree = Uurimispuu techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_eu.properties b/core/assets/bundles/bundle_eu.properties index c8d2eed32d..e5e2d520f2 100644 --- a/core/assets/bundles/bundle_eu.properties +++ b/core/assets/bundles/bundle_eu.properties @@ -173,6 +173,10 @@ filename = Fitxategi-izena: unlocked = Eduki berria desblokeatuta! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Ikertua techtree = Teknologia zuhaitza techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_fi.properties b/core/assets/bundles/bundle_fi.properties index 83666b2a10..af85aaa732 100644 --- a/core/assets/bundles/bundle_fi.properties +++ b/core/assets/bundles/bundle_fi.properties @@ -173,6 +173,10 @@ filename = Tiedostonimi: unlocked = Uutta sisältöä avattu! available = Uusia tutkimuksia saatavilla! unlock.incampaign = < Avaa polussa saadaksesi yksityiskohtia > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Suoritettu techtree = Edistyspuu techtree.select = Edistyspuun valinta @@ -733,7 +737,7 @@ sector.impact0078.description = Täällä lepäävät tähtienvälisen aluksen, sector.planetaryTerminal.description = Viimeinen kohde.\n\nTämä rannikkotukikohta sisältää rakennuksen, joka pystyy laukaisemaan ytimiä paikallisille planeetoille. Se on vartioitu äärimmäisen hyvin.\n\nRakenna laivayksiköitä. Eliminoi vihollinen mahdollisimman pian. Tutki laukaisurakennus. sector.onset.name = Alku sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_fil.properties b/core/assets/bundles/bundle_fil.properties index 4d3309b3a6..77d61b84ba 100644 --- a/core/assets/bundles/bundle_fil.properties +++ b/core/assets/bundles/bundle_fil.properties @@ -173,6 +173,10 @@ filename = File Name: unlocked = Bagong content na na-unlock! available = Bagong research na available! unlock.incampaign = < I-unlock sa campaign para sa detalye > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Completed techtree = Tech Tree techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Dito nakalatag ang mga labi ng interstellar tran sector.planetaryTerminal.description = Ang huling target.\n\nAng coastal base na ito ay naglalaman ng isang istraktura na may kakayahang maglunsad ng mga Core sa mga lokal na planeta. Ito ay napakahusay na binabantayan.\n\nGumawa ng mga yunit ng hukbong-dagat. Tanggalin ang kalaban sa lalong madaling panahon. Magsaliksik sa istraktura ng paglulunsad. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index ce0fafee68..2a498d35f3 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -176,6 +176,10 @@ filename = Nom du fichier : unlocked = Nouveau contenu débloqué ! available = Nouvelle recherche disponible ! unlock.incampaign = < Débloquer dans la campagne pour plus de détails > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Complété techtree = Arbre technologique techtree.select = Sélection de l'Arbre technologique diff --git a/core/assets/bundles/bundle_hu.properties b/core/assets/bundles/bundle_hu.properties index 8a6b822113..e72588fade 100644 --- a/core/assets/bundles/bundle_hu.properties +++ b/core/assets/bundles/bundle_hu.properties @@ -175,6 +175,10 @@ filename = Fájl név: unlocked = Új tartalom kinyitva! available = Új kutatás áll rendelkezésre! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Kész techtree = Tech Tree techtree.select = Tech Tree Selection @@ -742,7 +746,7 @@ sector.impact0078.description = Itt fekszenek a roncsai az első csillagközi ű sector.planetaryTerminal.description = A végső célpont.\n\nEzen a vízparti bázison található egy olyan építmény, amely képes magokat kilőni közeli bolygókra. Folyamatosan őrzik.\n\nKészíts vízi egységeket! Ártalmatlanítsd az ellenséget amilyen gyorsan tudod! Fedezd fel a kilövőszerkezetet! sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_id_ID.properties b/core/assets/bundles/bundle_id_ID.properties index f183c4ad31..cb497b02c6 100644 --- a/core/assets/bundles/bundle_id_ID.properties +++ b/core/assets/bundles/bundle_id_ID.properties @@ -176,6 +176,10 @@ filename = Nama File: unlocked = Konten baru terbuka! available = Penelitian baru tersedia! unlock.incampaign = < Buka dalam kampanye untuk detail lebih lanjut > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Terselesaikan techtree = Pohon Teknologi techtree.select = Pemilihan Pohon Teknologi diff --git a/core/assets/bundles/bundle_it.properties b/core/assets/bundles/bundle_it.properties index 23d4fdfaeb..e08e961b70 100644 --- a/core/assets/bundles/bundle_it.properties +++ b/core/assets/bundles/bundle_it.properties @@ -174,6 +174,10 @@ filename = Nome File: unlocked = Nuovo contenuto sbloccato! available = Nuova scoperta disponibile! unlock.incampaign = < Scopri in campagnia per ulteriori informazioni > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Completato techtree = Albero Scoperte techtree.select = Seleziona albero delle scoperte diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index f7baf48b49..3875eb748d 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -176,6 +176,10 @@ filename = ファイル名: unlocked = 新しい要素をアンロック! available = 新しい研究が利用可能です! unlock.incampaign = < 詳細はキャンペーンでアンロックしてください > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]完了 techtree = テックツリー techtree.select = Tech Tree Selection @@ -744,7 +748,7 @@ sector.impact0078.description = ここには、最初にこの星系に入った sector.planetaryTerminal.description = 最終目標です。\n\nこの沿岸基地には、コアを他の惑星に打ち上げることが出来る建造物があります。しかし、極めて堅固に守られています。\n\n海軍ユニットを生産し、可及的速やかに敵を排除してください。\nそして、発射場を研究しましょう。 sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 8744de9e43..ce73255784 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -176,6 +176,10 @@ filename = 파일 이름: unlocked = 새로운 콘텐츠가 해금되었습니다! available = 새로운 콘텐츠 해금이 가능합니다! unlock.incampaign = < 해금 후 상세정보 열람이 가능합니다 > +campaign.select = 캠페인 시작지점 선택하기 +campaign.none = [lightgray]시작할 행성을 선택하십시오.\n언제든지 전환할 수 있습니다. +campaign.erekir = [accent]신규 플레이어에게 추천합니다.[]\n\n보다 새롭고 세련된 컨텐츠. 대부분 순차적으로 캠페인이 진행됩니다.\n\n더 높은 완성도의 지도와 다채로운 경험. +campaign.serpulo = [scarlet]신규 플레이어에게 권장되지 않습니다.[]\n\n오래된 컨텐츠: 고전적인 경험. 좀 더 개방적이죠.\n\n잠재적으로 불균형한 지도와 캠페인 메커니즘. 덜 세련됩니다. completed = [accent]완료됨 techtree = 연구 기록 techtree.select = 연구 기록 선택 @@ -753,7 +757,7 @@ sector.basin.name = 유역 sector.marsh.name = 습지 sector.peaks.name = 산봉우리 sector.ravine.name = 협곡 -sector.caldera-erekir.name = Caldera +sector.caldera-erekir.name = 칼데라 sector.onset.description = 튜토리얼 지역. 아직 목표가 만들어지지 않았습니다. 정보를 더 기다리십시오. sector.aegis.description = 적은 방어막으로 보호받고 있습니다. 이 구역에서 실험적인 방어막 차단기 모듈이 감지되었습니다.\n이 구조물을 찾으십시오. 텅스텐을 공급해 방어막 차단기를 가동하고 적의 기지를 파괴하십시오. sector.lake.description = 이 지역의 광재 호수는 기체의 활동범위를 크게 제한시킵니다. 호버 유닛이 유일한 선택지입니다.\n[accent]함선 재구성기[]를 연구하고 [accent]일루드[]를 가능한 한 빨리 생산하십시오. @@ -1147,7 +1151,7 @@ rules.coreincinerates = 코어 방화 비허용 rules.disableworldprocessors = 월드 프로세서 비활성화 rules.schematic = 설계도 허용 rules.wavetimer = 시간 제한이 있는 단계 -rules.wavesending = Wave Sending +rules.wavesending = 단계 넘김 rules.waves = 단계 rules.attack = 공격 모드 rules.rtsai = RTS AI @@ -2085,7 +2089,7 @@ lst.set = 변수 선언/할당 lst.operation = 1~2개의 변수로 연산 lst.end = 실행줄의 가장 위로 건너뜀 lst.wait = 일정 시간(초) 동안 대기 -lst.stop = Halt execution of this processor. +lst.stop = 이 프로세서의 실행 중지 lst.lookup = id를 통해 특정 유형의 아이템/액체/기체/블록 조회\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[]\n...로 각 유형의 총 갯수를 알 수 있습니다. lst.jump = 조건부로 다른 실행문으로 건너뜀 lst.unitbind = type 옆에 있는 기체를 지정하고, [accent]@unit[]에 저장 diff --git a/core/assets/bundles/bundle_lt.properties b/core/assets/bundles/bundle_lt.properties index 3a8930fbc5..164736bba3 100644 --- a/core/assets/bundles/bundle_lt.properties +++ b/core/assets/bundles/bundle_lt.properties @@ -173,6 +173,10 @@ filename = Failo pavadinimas: unlocked = Atrakintas naujas turinys! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Išrasta techtree = Technologijų Medis techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_nl.properties b/core/assets/bundles/bundle_nl.properties index 1b9b60cf01..4154ef0678 100644 --- a/core/assets/bundles/bundle_nl.properties +++ b/core/assets/bundles/bundle_nl.properties @@ -173,6 +173,10 @@ filename = Bestandsnaam: unlocked = Nieuwe inhoud ontgrendeld! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Voltooid techtree = Tech boom techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_nl_BE.properties b/core/assets/bundles/bundle_nl_BE.properties index fe77123b2f..623e5f4357 100644 --- a/core/assets/bundles/bundle_nl_BE.properties +++ b/core/assets/bundles/bundle_nl_BE.properties @@ -173,6 +173,10 @@ filename = Bestandsnaam: unlocked = Ontgrendeld! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Voltooid techtree = Technische vooruitgang techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_pl.properties b/core/assets/bundles/bundle_pl.properties index 85c8dac712..da34d72458 100644 --- a/core/assets/bundles/bundle_pl.properties +++ b/core/assets/bundles/bundle_pl.properties @@ -176,6 +176,10 @@ filename = Nazwa Pliku: unlocked = Odblokowano nową zawartość! available = Nowe Odkrycie dostępne unlock.incampaign = < Odblokuj w kampanii dla szczegółów > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Ukończony techtree = Drzewo Techno-\nlogiczne techtree.select = Wybór Drzewa Technologicznego @@ -314,11 +318,11 @@ open = Otwórz customize = Dostosuj zasady cancel = Anuluj command = Komenda -command.mine = Mine -command.repair = Repair -command.rebuild = Rebuild -command.assist = Assist Player -command.move = Move +command.mine = Kop +command.repair = Naprawiaj +command.rebuild = Odbudowywuj +command.assist = Asystuj Graczowi +command.move = Przemieść openlink = Otwórz Link copylink = Kopiuj Link back = Wróć @@ -590,25 +594,25 @@ research.multiplayer = Tylko host może odkrywać przedmioty. map.multiplayer = Tylko host może widzieć sektory uncover = Odkryj configure = Skonfiguruj Ładunek -objective.research.name = Research -objective.produce.name = Obtain -objective.item.name = Obtain Item -objective.coreitem.name = Core Item -objective.buildcount.name = Build Count -objective.unitcount.name = Unit Count -objective.destroyunits.name = Destroy Units -objective.timer.name = Timer -objective.destroyblock.name = Destroy Block -objective.destroyblocks.name = Destroy Blocks -objective.destroycore.name = Destroy Core -objective.commandmode.name = Command Mode -objective.flag.name = Flag -marker.shapetext.name = Shape Text -marker.minimap.name = Minimap -marker.shape.name = Shape -marker.text.name = Text -marker.background = Background -marker.outline = Outline +objective.research.name = Zbadaj +objective.produce.name = Zdobądź +objective.item.name = Zdobądź Przedmiot +objective.coreitem.name = Item ze Rdzenia +objective.buildcount.name = Liczba Budynków +objective.unitcount.name = Liczba Jednostek +objective.destroyunits.name = Zniszcz Jednostki +objective.timer.name = Stoper +objective.destroyblock.name = Zniszcz Blok +objective.destroyblocks.name = Zniszcz Bloki +objective.destroycore.name = Zniszcz Rdzeń +objective.commandmode.name = Tryb Poleceń +objective.flag.name = Oznaczenie +marker.shapetext.name = Dostosuj Tekst +marker.minimap.name = Minimapa +marker.shape.name = Figura +marker.text.name = Tekst +marker.background = Tło +marker.outline = Kontur objective.research = [accent]Zbadaj:\n[]{0}[lightgray]{1} objective.produce = [accent]Zdobądź:\n[]{0}[lightgray]{1} objective.destroyblock = [accent]Zniszcz:\n[]{0}[lightgray]{1} @@ -741,26 +745,26 @@ sector.extractionOutpost.description = Odległa placówka zbudowana przez wroga sector.impact0078.description = Tutaj leżą pozostałości międzygwiezdnego statku transportowego, który jako pierwszy wszedł do tego układu.\n\nWydobądź jak najwięcej z wraku. Zbadaj każdą nienaruszoną technologię. sector.planetaryTerminal.description = Ostatni cel.\n\nTa baza przybrzeżna zawiera strukturę zdolną do wystrzeliwania rdzeni na lokalne planety. Jest wyjątkowo dobrze strzeżona.\n\nProdukuj jednostki morskie. Jak najszybciej wyeliminuj wroga. Zbadaj tą strukturę. -sector.onset.name = The Onset -sector.aegis.name = Aegis -sector.lake.name = Name -sector.intersect.name = Intersect +sector.onset.name = Początek +sector.aegis.name = Egida +sector.lake.name = Jezioro +sector.intersect.name = Przecięcie sector.atlas.name = Atlas -sector.split.name = Split -sector.basin.name = Basin -sector.marsh.name = Marsh -sector.peaks.name = Peaks -sector.ravine.name = Ravine -sector.caldera-erekir.name = Caldera +sector.split.name = Rozłam +sector.basin.name = Dorzecze +sector.marsh.name = Bagno +sector.peaks.name = Szczyty +sector.ravine.name = Wąwóz +sector.caldera-erekir.name = Kaldera sector.onset.description = Samouczkowy sektor. Cel nie został jeszcze ustalony. Oczekuj dalszych informacji. -sector.aegis.description = The enemy is protected by shields. An experimental shield breaker module has been detected in this sector.\nLocate this structure. Supply it with tungsten ammunition and destroy the enemy base. -sector.lake.description = This sector's slag lake greatly limits viable units. A hover unit is the only option.\nResearch the [accent]ship fabricator[] and produce an [accent]elude[] unit as soon as possible. -sector.intersect.description = Scans suggest that this sector will be attacked from multiple sides soon after landing.\nSet up defenses quickly and expand as soon as possible.\n[accent]Mech[] units will be required for the area's rough terrain. -sector.atlas.description = This sector contains varied terrain and will require a variety of units to attack effectively.\nUpgraded units may also be necessary to get past some of the tougher enemy bases detected here.\nResearch the [accent]Electrolyzer[] and the [accent]Tank Refabricator[]. -sector.split.description = The minimal enemy presence in this sector makes it perfect for testing new transport tech. -sector.basin.description = {Temporary}\n\nThe last sector for now. Consider this a challenge level - more sectors will be added in a later release. -sector.ravine.description = No enemy cores detected in the sector, although it's an important transportation route for the enemy. Expect variety of enemy forces.\nProduce [accent]surge alloy[]. Construct [accent]Afflict[] turrets. -sector.caldera-erekir.description = Temporary description. +sector.aegis.description = Wróg jest chroniony przez tarcze. Prototyp Niszczyciela tacz znajduje się na tym sektorze.\n Znajdź go. Wypełnij go wolframem i zniszcz tarcze wrogów. +sector.lake.description = Jezioro żużlu znajdujące się na tym sektorze znacznie ogranicza rodzaje jednostek, jakich można użyć. Statki są jedyną sensowną opcją. Odkryj [accent] Fabrykator Statków[] i wytwórz [accent] Wymykacze[] najszybciej jak się da. +sector.intersect.description = Skany wskazują na możliwe ataki od razu po wylądowanium. Przeciwnik może zaatakować z wielu stron.\nPrzygotuj obronę i infrastrukturę tak szybko jak to możliwe.\n[accent]Mechy[] będą potrzebne aby poruszać się w tak trudnym terenie. +sector.atlas.description = Ten sektor zawiera zróżnicowany teren i do skutecznego ataku będzie trzeba użyć różnych jednostek.\nKonieczne może być uzycie ulepszonych jednostek ze względu na silne bazy wroga.\nZbadaj [accent]Elektrolizer[] oraz [accent]Fabrykę Czołgów[]. +sector.split.description = Minimalna obecność wroga w tym sektorze czyni go idealnym do testowania nowych technologii transportowych. +sector.basin.description = {Tymczasowe}\n\nPóki co to ostatni sektor. Potraktuj to jako wyzwanie - więcej sektorów zostanie dodana w późniejszych wersjach. +sector.ravine.description = W tym sektorze nie wykryto rdzeni wroga, jednakże jest on ważnym szlakiem transportowym dla wroga. Spodziewaj się różnorodnych przeciwnikó.\nWyprodukuj [accent]elektrum[]. Zbuduj działka [accent]Cios. +sector.caldera-erekir.description = Tymczasowy opis. status.burning.name = Podpalenie status.freezing.name = Zamrożenie @@ -807,7 +811,7 @@ error.title = [crimson]Wystąpił błąd error.crashtitle = Wystąpił błąd unit.nobuild = [scarlet]Jednostka nie może budować lastaccessed = [lightgray]Ostatnia interakcja: {0} -lastcommanded = [lightgray]Last Commanded: {0} +lastcommanded = [lightgray]Ostatnio zarządzane: {0} block.unknown = [lightgray]??? stat.showinmap = @@ -919,7 +923,7 @@ bar.capacity = Pojemność: {0} bar.unitcap = {0} {1}/{2} bar.liquid = Płyn bar.heat = Ciepło -bar.instability = Instability +bar.instability = Niestabilność bar.heatamount = Ciepło: {0} bar.heatpercent = Ciepło: {0} ({1}%) bar.power = Prąd @@ -1145,7 +1149,7 @@ rules.coreincinerates = Rdzeń Spala Nadmiarowe Przedmioty rules.disableworldprocessors = Wyłącz Procesor Świata rules.schematic = Zezwalaj na schematy rules.wavetimer = Zegar Fal -rules.wavesending = Wave Sending +rules.wavesending = Wysyłanie Fal rules.waves = Fale rules.attack = Tryb Ataku rules.rtsai = RTS SI @@ -1529,11 +1533,11 @@ block.large-constructor.name = Duży Konstruktor block.large-constructor.description = Produkuje struktury do rozmiaru 4x4 kratek. block.deconstructor.name = Dekonstruktor block.deconstructor.description = Dekonstruuje struktury i jednostki. Zwraca 100% kosztów budowy. -block.payload-loader.name = Ładownik Ładunku +block.payload-loader.name = Punkt Załadunkowy block.payload-loader.description = Ładuje płyny i surowce do bloków. -block.payload-unloader.name = Rozładowywacz Ładunku +block.payload-unloader.name = Punkt Rozładunkowy block.payload-unloader.description = Rozładowuje płyny i surowce z bloków. -block.heat-source.name = Heat Source +block.heat-source.name = Źródło Ciepła block.heat-source.description = A 1x1 block that gives virtualy infinite heat. block.empty.name = Pusty @@ -1617,7 +1621,7 @@ block.shielded-wall.name = Osłonowy Mur block.radar.name = Radar block.build-tower.name = Wieża Budownicza block.regen-projector.name = Projektor Regeneracji -block.shockwave-tower.name = Shockwave Tower +block.shockwave-tower.name = Wieża Antybalistyczna block.shield-projector.name = Projektor Ochronny block.large-shield-projector.name = Duży Projektor Ochronny block.armored-duct.name = Opancerzona Rura Próżniowa @@ -1668,7 +1672,7 @@ block.ship-assembler.name = Monter Statków block.mech-assembler.name = Monter Mechów block.reinforced-payload-conveyor.name = Wzmocniony Przenośnik Ładunku block.reinforced-payload-router.name = Wzmocniony Rozdzielacz Ładunku -block.payload-mass-driver.name = Ładunkowa Katapulta Masy +block.payload-mass-driver.name = Katapula Ładunku block.small-deconstructor.name = Mały Dekonstruktor block.canvas.name = Płótno block.world-processor.name = Procesor Świata @@ -1678,12 +1682,12 @@ block.mech-fabricator.name = Fabryka Mechów block.ship-fabricator.name = Fabryka Statków block.prime-refabricator.name = Główny Refabrykator block.unit-repair-tower.name = Wieża Napraw -block.diffuse.name = Dyfuzor +block.diffuse.name = Dystruptor block.basic-assembler-module.name = Podstawowy Moduł Montażowy -block.smite.name = Smite +block.smite.name = Karciciel block.malign.name = Malign -block.flux-reactor.name = Flux Reactor -block.neoplasia-reactor.name = Neoplasia Reactor +block.flux-reactor.name = Reaktor Strumieniowy +block.neoplasia-reactor.name = Reaktor neoplazmowy block.switch.name = Przełącznik block.micro-processor.name = Mikroprocesor @@ -1740,8 +1744,8 @@ hint.presetLaunch = Szare [accent]sektory[], takie jak [accent]Zamrożony Las[], hint.presetDifficulty = Ten sektor ma [scarlet]wysoki poziom zagrożenia przez wroga[].\nWystrzeliwanie do takich sektorów jest [accent]nie zalecane[] bez odpowiedniej technologii i przygotowania. hint.coreIncinerate = Jak rdzeń zostanie w pełni wypełniony danym przedmiotem, reszta przedmiotów tego typu zostanie [accent]spalona[]. hint.coopCampaign = Gdy grasz w trybie [accent]kooperacyjnej kampanii[], 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. -hint.factoryControl = To set a unit factory's [accent]output destination[], click a factory block while in command mode, then right-click a location.\nUnits produced by it will automatically move there. -hint.factoryControl.mobile = To set a unit factory's [accent]output destination[], tap a factory block while in command mode, then tap a location.\nUnits produced by it will automatically move there. +hint.factoryControl = Aby ustawić punkt docelowy dla [accent]wyprodukowanych jednostek[], kliknij lewym przyciskiem na fabrykę w trybie poleceń, a następnie prawym przyciskiem w miejsce docelowe.\nWyprodukowane przez nią jednostki automatycznie się tam przemieszczą. +hint.factoryControl.mobile = Aby ustawić punkt docelowy dla [accent]wyprodukowanych jednoste[], dotknij fabryki w trybie poleceń, a następnie miejsce docelowe.\nWyprodukowane przez nią jednostki automatycznie się tam przemieszczą. item.copper.description = Używany we wszystkich rodzajach budowli i uzbrojeń. item.copper.details = Miedź. Niesamowicie obfity metal na Serpulo. Strukturalnie słaby, chyba że zostanie wzmocniony. @@ -1764,22 +1768,22 @@ item.spore-pod.description = Syntetyczne zarodniki, które mogą być przekszta item.spore-pod.details = Prawdopodobnie syntetyczna forma życia.\nUwaga: Emitują gazy toksyczne dla innych organizmów biologicznych. Wyjątkowo inwazyjne. W pewnych warunkach silnie łatwopalne. item.blast-compound.description = Używany w bombach i amunicji wybuchowej.\n\n[lightgray]Uwaga: Powstaje podczas syntezy z zarodników i innych lotnych substancji. Używanie go jako materiał energetyczny jest niezalecane.[] item.pyratite.description = Używany w broniach zapalających oraz generatorach spalinowych.\n\n[lightgray]Uwaga: Ołów w nim zawarty może zatruwać atmosferę.[] -item.beryllium.description = Used in many types of construction and ammunition on Erekir. -item.tungsten.description = Used in drills, armor and ammunition. Required in the construction of more advanced structures. -item.oxide.description = Used as a heat conductor and insulator for power. -item.carbide.description = Used in advanced structures, heavier units, and ammunition. +item.beryllium.description = Używany jako materiał budowlany oraz amunicja na Erekirze. +item.tungsten.description = Używany w wiertłach i infrastrukturze wojennej. Jest konieczny do budowy bardziej zaawansowanej infrastruktury. +item.oxide.description = Używany jako przewodnik ciepła i izolator mocy. +item.carbide.description = Używany w zaawansowanych strukturach, ciężkich jednostkach oraz jako amunicja. liquid.water.description = Powszechnie używana do schładzania budowli i przetwarzania odpadów. liquid.slag.description = Wiele różnych metali stopionych i zmieszanych razem.\n\nMoże zostać rozdzielony na jego metale składowe lub wystrzelony we wrogie jednostki. liquid.oil.description = Używany w do produkcji złożonych materiałów.\n\nMoże zostać przetworzony na węgiel, lub wystrzelony we wrogów przez wieżyczkę. liquid.cryofluid.description = Obojętna, niekorozyjna ciecz utworzona z wody i tytanu.\n\nUżywana jako chłodziwo w reaktorach, rekonstruktorach i wieżyczkach. -liquid.arkycite.description = Used in chemical reactions for power generation and material synthesis. -liquid.ozone.description = Used as an oxidizing agent in material production, and as fuel. Moderately explosive. -liquid.hydrogen.description = Used in resource extraction, unit production and structure repair. Flammable. -liquid.cyanogen.description = Used for ammunition, construction of advanced units, and various reactions in advanced blocks. Highly flammable. -liquid.nitrogen.description = Used in resource extraction, gas creation and unit production. Inert. -liquid.neoplasm.description = A dangerous biological byproduct of the Neoplasia reactor. Quickly spreads to any adjacent water-containing block it touches, damaging them in the process. Viscous. -liquid.neoplasm.details = Neoplasm. An uncontrollable mass of rapidly-dividing synthetic cells with a sludge-like consistency. Heat-resistant. Extremely dangerous to any structures involving water.\n\nToo complex and unstable for standard analysis. Potential applications unknown. Incineration in slag pools is recommended. +liquid.arkycite.description = Stosowany w reakcjach chemicznych. Używany do wytwarzania energii i syntezy materiałów. +liquid.ozone.description = Stosowany jako utleniacz w produkcji materiałów oraz jako paliwo. Średnio wybuchowy. +liquid.hydrogen.description = Używany do wydobywania surowców, produkcji jednostek oraz dp naprawy struktur. Łatwopalny. +liquid.cyanogen.description = Używany jako amunicja oraz materiał do produkcji zaawansowanych jednostek czy też jako składnik różnych reakcji w zaawansowanych strukturach. Bardzo łatwopalny. +liquid.nitrogen.description = Używany do wydobycia surowców, tworzenia gazów oraz produkcji jednostek. Obojętny. +liquid.neoplasm.description = Niebezpieczny biologiczny odpad powstający poprzez działanie reaktora neoplazmowego. Łatwo się rozprzestrzenia na bloki zawierające wodę niszcząc je. Lepki. +liquid.neoplasm.details = Neoplazma. Niekontrolowana masa szybko dzielących się komórek syntetycznych o konsystencji szlamu. Odporna na ciepło. Niesamowicie niebezpieczna dla wszelkich struktur zawierających wodę.\n\nZbyt skomplikowana i niestabilna do standardowej analizy. Potencjalne zastosowania póki co nie znane. Zaleca się spalanie w jeziorach żużlowych. block.derelict = \uf77e [lightgray]Wrak block.armored-conveyor.description = Przesyła przedmioty z taką samą szybkością co Tytanowy Przenośnik, ale jest bardziej odporny. Wejściami bocznymi mogą być tylko inne przenośniki. @@ -1837,7 +1841,7 @@ block.phase-conveyor.description = Zaawansowany blok transportowy dla przedmiot block.sorter.description = Sortuje przedmioty. Jeśli przedmiot pasuje to przechodzi dalej, jeśli nie - to przechodzi na boki. block.inverted-sorter.description = Sortuje przedmioty jak zwykły sortownik, ale odpowiednie surowce wyciągane są na boki. block.router.description = Akceptuje przedmioty z jednego miejsca i rozdziela je do trzech innych kierunków. Przydatne w rozdzielaniu materiałów z jednego źródła do wielu celów.\n\n[scarlet]Nigdy nie używaj przy punkcje wejścia materiałów produkcyjnych, ponieważ zostaną one zatkane przez materiały wyjściowe.[] -block.router.details = Nieuniknione zło. Nie zaleca się stosowania obok nakładów produkcyjnych, ponieważ zostaną one zatkane. +block.router.details = Nieuniknione zło. Nie zaleca się stosowania obok zakładów produkcyjnych, ponieważ zostaną one zatkane. block.distributor.description = Zaawansowany rozdzielacz, rozdzielający przedmioty do 7 innych kierunków. block.overflow-gate.description = Rozdzielacz, który przerzuca przedmioty, kiedy główna droga jest przepełniona. block.underflow-gate.description = Odwrotność bramy przepełnieniowej, który przepuszcza przedmioty główną drogą, gdy boczne drogi są przepełnione. @@ -1933,93 +1937,93 @@ block.payload-propulsion-tower.description = Konstrukcja o dużym zasięgu do tr block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. -block.breach.description = Fires piercing beryllium or tungsten ammunition at enemy targets. -block.diffuse.description = Fires a burst of bullets in a wide cone. Pushes enemy targets back. -block.sublimate.description = Fires a continuous jet of flame at enemy targets. Pierces armor. -block.titan.description = Fires a massive explosive artillery shell at ground targets. Requires hydrogen. -block.afflict.description = Fires a massive charged orb of fragmentary flak. Requires heating. -block.disperse.description = Fires bursts of flak at aerial targets. -block.lustre.description = Fires a slow-moving single-target laser at enemy targets. -block.scathe.description = Launches a powerful missile at ground targets over vast distances. -block.smite.description = Fires bursts of piercing, lightning-emitting bullets. -block.malign.description = Fires a barrage of homing laser charges at enemy targets. Requires extensive heating. -block.silicon-arc-furnace.description = Refines silicon from sand and graphite. -block.oxidation-chamber.description = Converts beryllium and ozone into oxide. Emits heat as a by-product. -block.electric-heater.description = Heats facing blocks. Requires large amounts of power. -block.slag-heater.description = Heats facing blocks. Requires slag. -block.phase-heater.description = Heats facing blocks. Requires phase fabric. -block.heat-redirector.description = Redirects accumulated heat to other blocks. -block.electrolyzer.description = Converts water into hydrogen and ozone gas. -block.atmospheric-concentrator.description = Concentrates nitrogen from the atmosphere. Requires heat. -block.surge-crucible.description = Forms surge alloy from slag and silicon. Requires heat. -block.phase-synthesizer.description = Synthesizes phase fabric from thorium, sand, and ozone. Requires heat. -block.carbide-crucible.description = Fuses graphite and tungsten into carbide. Requires heat. -block.cyanogen-synthesizer.description = Synthesizes cyanogen from arkycite and graphite. Requires heat. -block.slag-incinerator.description = Incinerates non-volatile items or liquids. Requires slag. -block.vent-condenser.description = Condenses vent gases into water. Consumes power. -block.plasma-bore.description = When placed facing an ore wall, outputs items indefinitely. Requires small amounts of power. -block.large-plasma-bore.description = A larger plasma bore. Capable of mining tungsten and thorium. Requires hydrogen and power. -block.cliff-crusher.description = Crushes walls, outputting sand indefinitely. Requires power. Efficiency varies based on type of wall. -block.impact-drill.description = When placed on ore, outputs items in bursts indefinitely. Requires power and water. -block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. -block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. -block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. -block.reinforced-liquid-tank.description = Stores a large amount of fluids. -block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. -block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. -block.reinforced-pump.description = Pumps and outputs liquids. Requires hydrogen. -block.beryllium-wall.description = Protects structures from enemy projectiles. -block.beryllium-wall-large.description = Protects structures from enemy projectiles. -block.tungsten-wall.description = Protects structures from enemy projectiles. -block.tungsten-wall-large.description = Protects structures from enemy projectiles. -block.carbide-wall.description = Protects structures from enemy projectiles. -block.carbide-wall-large.description = Protects structures from enemy projectiles. -block.reinforced-surge-wall.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.reinforced-surge-wall-large.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.shielded-wall.description = Protects structures from enemy projectiles. Deploys a shield that absorbs most projectiles when power is provided. Conducts power. -block.blast-door.description = A wall that opens when allied ground units are in range. Cannot be manually controlled. -block.duct.description = Moves items forward. Only capable of storing a single item. -block.armored-duct.description = Moves items forward. Does not accept non-duct inputs from the sides. -block.duct-router.description = Distributes items equally across three directions. Only accepts items from the back side. Can be configured as an item sorter. -block.overflow-duct.description = Only outputs items to the sides if the front path is blocked. -block.duct-bridge.description = Moves items over structures and terrain. -block.duct-unloader.description = Unloads the selected item from the block behind it. Cannot unload from cores. -block.underflow-duct.description = Opposite of an overflow duct. Outputs to the front if the left and right paths are blocked. -block.reinforced-liquid-junction.description = Acts as a junction between two crossing conduits. -block.surge-conveyor.description = Moves items in batches. Can be sped up with power. Conducts power. -block.surge-router.description = Equally distributes items in three directions from surge conveyors. Can be sped up with power. Conducts power. -block.unit-cargo-loader.description = Constructs cargo drones. Drones automatically distribute items to Cargo Unload Points with a matching filter. -block.unit-cargo-unload-point.description = Acts as an unloading point for cargo drones. Accepts items that match the selected filter. -block.beam-node.description = Transmits power to other blocks orthogonally. Stores a small amount of power. -block.beam-tower.description = Transmits power to other blocks orthogonally. Stores a large amount of power. Long-range. -block.turbine-condenser.description = Generates power when placed on vents. Produces a small amount of water. -block.chemical-combustion-chamber.description = Generates power from arkycite and ozone. -block.pyrolysis-generator.description = Generates large amounts of power from arkycite and slag. Produces water as a byproduct. -block.flux-reactor.description = Generates large amounts of power when heated. Requires cyanogen as a stabilizer. Power output and cyanogen requirements are proportional to heat input.\nExplodes if insufficient cyanogen is provided. -block.neoplasia-reactor.description = Uses arkycite, water and phase fabric to generate large amounts of power. Produces heat and dangerous neoplasm as a byproduct.\nExplodes violently if neoplasm is not removed from the reactor via conduits. -block.build-tower.description = Automatically rebuilds structures in range and assists other units in construction. -block.regen-projector.description = Slowly repairs allied structures in a square perimeter. Requires hydrogen. -block.reinforced-container.description = Stores a small amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. -block.reinforced-vault.description = Stores a large amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. -block.tank-fabricator.description = Constructs Stell units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.ship-fabricator.description = Constructs Elude units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.mech-fabricator.description = Constructs Merui units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.tank-assembler.description = Assembles large tanks out of inputted blocks and units. Output tier may be increased by adding modules. -block.ship-assembler.description = Assembles large ships out of inputted blocks and units. Output tier may be increased by adding modules. -block.mech-assembler.description = Assembles large mechs out of inputted blocks and units. Output tier may be increased by adding modules. -block.tank-refabricator.description = Upgrades inputted tank units to the second tier. -block.ship-refabricator.description = Upgrades inputted ship units to the second tier. -block.mech-refabricator.description = Upgrades inputted mech units to the second tier. -block.prime-refabricator.description = Upgrades inputted units to the third tier. -block.basic-assembler-module.description = Increases assembler tier when placed next to a construction boundary. Requires power. Can be used as a payload input. -block.small-deconstructor.description = Deconstructs inputted structures and units. Returns 100% of the build cost. -block.reinforced-payload-conveyor.description = Moves payloads forward. -block.reinforced-payload-router.description = Distributes payloads into adjacent blocks. Functions as a sorter when a filter is set. -block.payload-mass-driver.description = Long-range payload transport structure. Shoots received payloads to linked payload mass drivers. -block.unit-repair-tower.description = Repairs all units in its vicinity. Requires ozone. -block.radar.description = Gradually uncovers terrain and enemy units in a large radius. Requires power. -block.shockwave-tower.description = Damages and destroys enemy projectiles in a radius. Requires cyanogen. +block.breach.description = Strzela przebijającymi kulami z berylu bądź wolframu we wrogie cele. +block.diffuse.description = Strzela serią pocisków na szerokim obszarze. Odpycha wrogie cele. +block.sublimate.description = Pali wrogie cele ciągłym płomieniem. Przebija pancerz. +block.titan.description = Wystrzeliwuje potężne pociski artyleryjskie w cele naziemne. Potrzebuje wodoru do działania. +block.afflict.description = Strzela masywną fragmentacyjną kulą. Wymaga podgrzewania. +block.disperse.description = Celne i szybkostrzelne działo przeciwlotnicze. +block.lustre.description = Strzela powolnym pojedynczym laserem we wrogie cele. +block.scathe.description = Wystrzeliwuje potężną rakietę w cele naziemne na gigantyczne odległości. +block.smite.description = Strzela salwami przebijających, uwalniających błyskawice pocisków. +block.malign.description = Zasypuje przeciwników dziesiątkami pocisków naprowadzających mogących uwolnić lasery. Wymaga silnego ogrzewania. +block.silicon-arc-furnace.description = Otrzymuje krzem z piasku i grafitu. +block.oxidation-chamber.description = Spala beryl w ozonie uzyskując tlenek. Wytwarza ciepło jako produkt uboczny. +block.electric-heater.description = Ogrzewa bloki naprzeciw, używając do tego sporych ilośći prądu. +block.slag-heater.description = Ogrzewa bloki naprzeciw, używając do tego żużlu. +block.phase-heater.description = Ogrzewa bloki naprzeciw, używając do tego włókna fazowego. +block.heat-redirector.description = Przekazuje zebrane ciepło do bloku naprzeciw. +block.electrolyzer.description = Poddaje wodę elektrolizie, uzyskując wodór i ozon w postaci gazowej. +block.atmospheric-concentrator.description = Koncentruje azot z atmosfery, używając do tego ciepła. +block.surge-crucible.description = Odlewa stop elektrum z żużlu i krzemu pobierając ciepło. Dostarczając większe ilości ciepła można zwiększyć wydajność procesu. +block.phase-synthesizer.description = Używa toru, piasku i ozonu do wytworzenia włókna fazowego, pobierając jednocześnie ciepło. +block.carbide-crucible.description = Wytwarza węglik z grafitu i wolframu pobierając przy tym ciepło. +block.cyanogen-synthesizer.description = Syntetyzuje cyjan z arkycytu i grafitu używając ciepła. +block.slag-incinerator.description = Niszczy przedmioty bądź płyny używając żużlu. Niezalecane wprowadzanie gazów. +block.vent-condenser.description = Skrapla parę wodną z gejzeru. +block.plasma-bore.description = Wydobywa rudę znajdującą się na ścianach. Wymaga minimalnej ilości prądu. Ilość rudy wydobytej co cykl zależy od ilości bloków rudy naprzeciw wiertła. +block.large-plasma-bore.description = Większe wiertło plazmowe. Wydobywa rudę znajdującą się na ścianach. Wymaga większej ilości prądu i dodatkowo wodoru, ale może wydobyć wolfram i tor. Ilość rudy wydobytej co cykl zależy od ilości bloków rudy naprzeciw wiertła. +block.cliff-crusher.description = Kruszy ściany, uzyskując w ten sposób piasek. Wydajność zależy od rodzaju ściany. Wymaga prądu. +block.impact-drill.description = Kiedy stoi na rudzie, wydobywa surowce seriami. Wymaga prądu i wody. +block.eruption-drill.description = Ulepszona wersja wiertła wybuchowego. Zdolne do wydobycia toru. Potrzebuje wodoru do działania. +block.reinforced-conduit.description = Służy do przemieszczania płynów i gazów. Od boku można podłączyć tylko inne rury. +block.reinforced-liquid-router.description = Równo rozdziela płyn do wszystkich podłączonych rur. +block.reinforced-junction.description = Pozwala na przecięcie się dwóch rur, bez mieszania ich zawartości. +block.reinforced-liquid-tank.description = Przechowuje duże ilości płynów. +block.reinforced-liquid-container.description = Przechowuje umiarkowane ilości płynów. +block.reinforced-bridge-conduit.description = Transportuje płyny nad rozmaitymi przeszkodami. +block.reinforced-pump.description = Pompuje płyny. Nie wymaga prądu, ale potrzebuje wodoru. +block.beryllium-wall.description = Chroni budynki przed wrogimi pociskami. +block.beryllium-wall-large.description = Chroni budynki przed wrogimi pociskami. +block.tungsten-wall.description = Chroni budynki przed wrogimi pociskami. +block.tungsten-wall-large.description = Chroni budynki przed wrogimi pociskami. +block.carbide-wall.description = Chroni budynki przed wrogimi pociskami. +block.carbide-wall-large.description = Chroni budynki przed wrogimi pociskami. +block.reinforced-surge-wall.description = Chroni budynki przed wrogimi pociskami. Losowo uwalnia błyskawice +block.reinforced-surge-wall-large.description = Chroni budynki przed wrogimi pociskami. Losowo uwalnia błyskawice +block.shielded-wall.description = Chroni budynki przed wrogimi pociskami. Posiada tarczę, która może absorbować pociski. Przewodzi prąd. +block.blast-door.description = AOtwierają się kiedy sojusznicze jednostki są w pobliżu. Nie można ich kontrolować ręcznie. +block.duct.description = Transportuje przedmioty. Może przechować tylko jeden. +block.armored-duct.description = Transportuje przedmioty. Może przechować tylko jeden. Od boku nie akceptuje innego wejścia niż rura. +block.duct-router.description = Po równo rozdziela przedmioty w trzech kierunkach. Akceptuje wprowadzenie przedmiotów tylko od tyłu. Może zostać ustawiony jako sortownik. +block.overflow-duct.description = Odprowadza przedmioty na boki, kiedy droga z przodu jest zapełniona. +block.duct-bridge.description = Transportuje przedmioty nad różnymi przeszkodami. +block.duct-unloader.description = Rozładowuje wybrany przedmiot z bloku z tyłu. Nie może wyjmować przedmiotów ze rdzenia. +block.underflow-duct.description = Odwrotność przepełnieniowej rury próżniowej. Przepuszcza przedmioty do przodu tylko tak boczne wyjścia są zapełnione. +block.reinforced-liquid-junction.description = Pozwala na przecięcie się dwóch rur, bez mieszania ich zawartości. +block.surge-conveyor.description = Przenosi przedmioty partiami. Może być przyspieszony przy użyciu prądu. Przewodzi prąd. +block.surge-router.description = Równomiernie rozdziela przedmioty w trzy różne strony. Montowany na elektrumowych przenośnikach. Może być przyspieszony przy użyciu prądu. Przewodzi prąd. +block.unit-cargo-loader.description = Tworzy Składaki, które automatycznie rozdzielają przedmioty do Punktów Rozładunku z pasującym filtrem. +block.unit-cargo-unload-point.description = Pełni funkcję punktu rozładunkowego dla Składaków. Przyjmuje przedmioty pasujące do wybranego filtra. +block.beam-node.description = Przesyła prąd prostopadłymi promieniami do innych struktur. Przechowuje niewielką ilość energii. +block.beam-tower.description = Przesyła prąd prostopadłymi promieniami do innych struktur. Przechowuje bardzo duże ilości energii. Działa na dużą odległość. +block.turbine-condenser.description = Po postawieniu na gejzerze produkuje prąd oraz niewielkie ilości wody. +block.chemical-combustion-chamber.description = Produkuje prąd używając do tego ozonu i arkycytu. +block.pyrolysis-generator.description = Wytwarza duże ilości prądu z żużlu i arkycytu. Woda jest produktem ubocznym. +block.flux-reactor.description = Generuje ogromne ilości prądu. Wymaga silnego ogrzewania. Cyjan używany jest jako stabilizator. Moc wyjściowa i zapotrzebowanie na cyjan jest proporcjonalne do zapewnionego ogrzewania.\nWybucha w przypadku niedostarczenia wystarczającej ilości cyjanu. +block.neoplasia-reactor.description = Używa arkycytu, wody oraz włókna fazowego aby generować ogromne ilości prądu. Wydziela ciepło oraz neoplazmę jako produkt uboczny.\nGwałtownie wybucha w przypadku nieodprowadzenia neoplazmy przy użyciu rur. +block.build-tower.description = Automatycznie odbudowuje struktury w swoim zasięgu i pomaga innym jednostkom budować. +block.regen-projector.description = Powoli naprawia sojusznicze jednostki w obrębie kwadratu. Wymaga wodoru. +block.reinforced-container.description = Przechowuje małe ilości przedmiotów. Zawartość może być wyjęta poprzez użycie rozładowywacza lub ekstraktora. Nie powiększa pojemności rdzenia. +block.reinforced-vault.description = Przechowuje duże ilości przedmiotów. Zawartość może być wyjęta poprzez użycie rozładowywacza lub ekstraktora. Nie powiększa pojemności rdzenia. +block.tank-fabricator.description = Produkuje czołgi Stal. Wytworzone jednostki mogą zostać użyte do walki, bądź przeniesione do konstruktorów w celu ulepszenia. +block.ship-fabricator.description = Produkuje statki Elude. Wytworzone jednostki mogą zostać użyte do walki, bądź przeniesione do konstruktorów w celu ulepszenia. +block.mech-fabricator.description = Produkuje mechy Merui. Wytworzone jednostki mogą zostać użyte do walki, bądź przeniesione do konstruktorów w celu ulepszenia. +block.tank-assembler.description = Składa duże czołgi z jednostek i bloków. Poziom wyjściowego czołgu może zostać zwiększony poprzez postawienie modułu. +block.ship-assembler.description = Składa duże statki z jednostek i bloków. Poziom wyjściowego statku może zostać zwiększony poprzez postawienie modułu. +block.mech-assembler.description = Składa duże mechy z jednostek i bloków. Poziom wyjściowego mechu może zostać zwiększony poprzez postawienie modułu. +block.tank-refabricator.description = Ulepsza czołgi do drugiego poziomu. +block.ship-refabricator.description = Ulepsza statki do drugiego poziomu. +block.mech-refabricator.description = Ulepsza mechy do drugiego poziomu. +block.prime-refabricator.description = Ulepsza jednostki do trzeciego poziomu. +block.basic-assembler-module.description = Zwiększa poziom składanych jednostek, kiedy jest postawiony obok miejsca budowy. Wymaga prądu, ale może dostarczyć materiały do składania. +block.small-deconstructor.description = Niszczy wprowadzone budynki i jednostki. Zwraca wszystkie materiały użyte do budowy. +block.reinforced-payload-conveyor.description = Transportuje ładunek. +block.reinforced-payload-router.description = Rozdziela ładunek pomiędzy podłączone bloki. Jeśli filtr jest ustawiony, działa jak sortownik. +block.payload-mass-driver.description = Blok pozwalający na transport ładunku na dalekie odległości. Wystrzeliwuje otrzymany ładunek do podłączonej katapulty. +block.unit-repair-tower.description = Naprawia wszystkie jednostki w jego zasięgu, używając ozonu. +block.radar.description = Stopniowo odkrywa teren i wrogie jednostki. Wymaga prądu. +block.shockwave-tower.description = Uszkadza i niszczy wrogie pociski, używając cyjanu. unit.dagger.description = Lądowa jednostka ofensywna, strzelająca standardowymi pociskami we wrogie jednostki. unit.mace.description = Lądowa jednostka ofensywna, miotająca strumieniami ognia we wrogie jednostki. @@ -2064,26 +2068,30 @@ unit.gamma.description = Lotnicza jednostka administracyjna, której wyjątkowo unit.retusa.description = Morska jednostka wsparcia, wystrzeliwująca leczące sojuszników naprowadzające torpedy we wrogie jednostki. unit.oxynoe.description = Morska jednostka wsparcia, wystrzeliwująca strumienie ognia leczące sojusznicze jednostki i budynki. Specjalne działo obronne niszczy także nadlatujące rakiety i pociski. unit.cyerce.description = Morska jednostka wsparcia, wystrzeliwująca kapsuły kasetowe oraz naprawiająca sojusznicze jednostki za pomocą działek naprawczych. -unit.aegires.description = Morska jednostka wsparcia. Razi wszystkie wrogie jednostki i budowle swoim leczącym energetycznym. Potrafi jednocześnie naprawiać sojusznicze jednostki i niszczyć wrogie pociski. +unit.aegires.description = Morska jednostka wsparcia. Razi wszystkie wrogie jednostki i budowle swoją leczniczą błyskawicą. Potrafi jednocześnie naprawiać sojusznicze jednostki i niszczyć wrogie pociski. unit.navanax.description = Morska jednostka wsparcia. Posiada automatyczne działka laserowe. Może także atakować bombami elektromagnetycznymi, które potrafią przyspieszyć sojusznicze budynki. -unit.stell.description = Fires standard bullets at enemy targets. -unit.locus.description = Fires alternating bullets at enemy targets. -unit.precept.description = Fires piercing cluster bullets at enemy targets. -unit.vanquish.description = Fires large piercing splitting bullets at enemy targets. -unit.conquer.description = Fires large piercing cascades of bullets at enemy targets. -unit.merui.description = Fires long-range artillery at enemy ground targets. Can step over most terrain. -unit.cleroi.description = Fires dual shells at enemy targets. Targets enemy projectiles with point defense turrets. Can step over most terrain. -unit.anthicus.description = Fires long-range homing missiles at enemy targets. Can step over most terrain. -unit.tecta.description = Fires homing plasma missiles at enemy targets. Protects itself with a directional shield. Can step over most terrain. -unit.collaris.description = Fires long-range fragmenting artillery at enemy targets. Can step over most terrain. -unit.elude.description = Fires pairs of homing bullets at enemy targets. Can float over bodies of liquid. -unit.avert.description = Fires twisting pairs of bullets at enemy targets. -unit.obviate.description = Fires twisting pairs of lightning orbs at enemy targets. -unit.quell.description = Fires long-range homing missiles at enemy targets. Suppresses enemy structure repair blocks. -unit.disrupt.description = Fires long-range homing suppression missiles at enemy targets. Suppresses enemy structure repair blocks. -unit.evoke.description = Builds structures to defend the Bastion core. Repairs structures with a beam. -unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam. -unit.emanate.description = Builds structures to defend the Acropolis core. Repairs structures with beams. + +unit.stell.description = Ostrzeliwuje wrogów zwykłymi pociskami. +unit.locus.description = Strzela naprzemiennymi pociskami w przeciwników. +unit.precept.description = Strzela pociskami odłamkowymi z jednego działa. +unit.vanquish.description = Wystrzeliwuje ogromne pociski odłamkowe. +unit.conquer.description = Wystrzeliwuje ogromne przebijające serie pocisków we wrogie cele. + +unit.merui.description = Wystrzeliwuje pociski o dalekim zasięgu w cele naziemne. Teren w większości przypadków nie stanowi przeszkody. +unit.cleroi.description = Wystrzeliwuje podwójne pociski we wrogie cele. Namierza wrogie pociski przy pomocy dział. Teren w większości przypadków nie stanowi przeszkody. +unit.anthicus.description = Strzela naprowadzającymi pociskami dalekiego zasięgu we wrogie cele. Teren w większości przypadków nie stanowi przeszkody. +unit.tecta.description = Strzela samonaprowadzającymi plazmowymi pociskami we wrogie cele. Chroni się tarczą siłową umieszczoną z przodu. Teren w większości przypadków nie stanowi przeszkody. +unit.collaris.description = Wystrzeliwuje pociski odłamkowe na bardzo dużą odległość. Teren w większości przypadków nie stanowi przeszkody. + +unit.elude.description = Strzela parami pocisków samonaprowadzających we wrogie cele. Moze unosić się nad cieczami. +unit.avert.description = Wystrzeliwuje skręcające się pary pocisków w cele wroga. +unit.obviate.description = Wystrzeliwuje skręcające się pary kul energii produkujących wyładowania w cele wroga. +unit.quell.description = Wystrzeliwuje pociski naprowadzające w cele wroga. Blokuje naprawianie się wrogich struktur. +unit.disrupt.description = Wystrzeliwuje dalekosiężne pociski naprowadzające w cele wroga. Blokuje naprawianie się wrogich struktur. + +unit.evoke.description = Lotnicza jednostka aministracyjna zdolna do wydobycia surowców, budowy oraz naprawy struktur przy użyciu wiązek naprawczych. Broni rdzenia Bastion budując struktury. +unit.incite.description = Lotnicza jednostka aministracyjna zdolna do wydobycia surowców, budowy oraz naprawy struktur przy użyciu wiązek naprawczych. Nieco lepsza od poprzedniej wersji. Broni rdzenia Cytadela budując struktury. +unit.emanate.description = Lotnicza jednostka aministracyjna zdolna do wydobycia surowców, budowy oraz naprawy struktur przy użyciu wiązek naprawczych. Znacznie lepsza od poprzednich wersji. Broni rdzenia Akropol budując struktury. lst.read = Wczytuje liczbę z połączonej komórki pamięci. lst.write = Zapisuje liczbę do połączonej komórki pamięci. @@ -2099,7 +2107,7 @@ lst.set = Ustawia zmienną. lst.operation = Wykonuje operację na 1-2 zmiennych. lst.end = Przeskakuje na początek stosu instrukcji. lst.wait = Czeka określoną liczbę sekund. -lst.stop = Halt execution of this processor. +lst.stop = Zatrzymaj wykonywanie instrukcji tego procesora. lst.lookup = Znajduje typ przedmiotu/cieczy/jednostki/bloku poprzez ID.\nCałkowite zliczenia każdego typu można uzyskać za pomocą:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] lst.jump = Warunkowo przeskakuje do innego stanu. lst.unitbind = Powiązuje z następną jednostką danego typu i przechowuje ją w [accent]@unit[]. @@ -2267,5 +2275,5 @@ lenum.build = Buduj strukturę. lenum.getblock = Pobierz budynek i typ ze współrzędnych.\nJednostka musi być w zasięgu pozycji.\nSolidne niebudynki będą miały typ [accent]@solid[]. lenum.within = Sprawdź czy jednostka jest w pobliżu pozycji. lenum.boost = Zacznij/zakończ przyspieszać. -onset.commandmode = Hold [accent]shift[] to enter [accent]command mode[].\n[accent]Left-click and drag[] to select units.\n[accent]Right-click[] to order selected units to move or attack. -onset.commandmode.mobile = Press the [accent]command button[] to enter [accent]command mode[].\nHold down a finger, then [accent]drag[] to select units.\n[accent]Tap[] to order selected units to move or attack. +onset.commandmode = Przytrzymaj [accent]shift[] aby wejść do [accent]trybu poleceń[].\n[accent]Kliknij lewy przycisk myszy i przeciągnij[] aby wybrac jednostki.\n[accent]Kliknij prawy przycisk myszy[] aby rozkazać jednostkom się przemieścić lub zaatakować. +onset.commandmode.mobile = Naciśnij [accent]przycisk poleceń[] aby wejść do [accent]trybu poleceń[].\nPrzytrzymaj palec, a następnie [accent]przeciągnij[] aby zaznaczyć jednostki.\n[accent]Kliknij[] aby rozkazać jednostkom się przemieścić lub zaatakować. diff --git a/core/assets/bundles/bundle_pt_BR.properties b/core/assets/bundles/bundle_pt_BR.properties index 0e055a14c1..298eb9c43d 100644 --- a/core/assets/bundles/bundle_pt_BR.properties +++ b/core/assets/bundles/bundle_pt_BR.properties @@ -176,6 +176,10 @@ filename = Nome do arquivo: unlocked = Novo bloco desbloqueado! available = Nova pesquisa disponível! unlock.incampaign = < Desbloqueie na campanha para mais detalhes > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Completado techtree = Árvore Tecnológica techtree.select = Seleção de Árvore Tecnológica diff --git a/core/assets/bundles/bundle_pt_PT.properties b/core/assets/bundles/bundle_pt_PT.properties index fb39a4253a..56c93d93c5 100644 --- a/core/assets/bundles/bundle_pt_PT.properties +++ b/core/assets/bundles/bundle_pt_PT.properties @@ -173,6 +173,10 @@ filename = Nome do ficheiro: unlocked = Novo bloco Desbloqueado! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Completado techtree = Árvore de tecnologia techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 152715c979..95e42a9412 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -176,6 +176,10 @@ filename = Nume Fișier: unlocked = Nou conținut deblocat! available = Poți cerceta noi tehnologii! unlock.incampaign = < Deblochează în campanie pt detalii > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Finalizat techtree = Cercetează techtree.select = Tech Tree Selection @@ -744,7 +748,7 @@ sector.impact0078.description = Aici se află rămășițele primei nave de tran 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index a6e9891366..e32105a111 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -176,6 +176,10 @@ filename = Имя файла: unlocked = Новый контент разблокирован! available = Доступно новое исследование! unlock.incampaign = < Разблокируйте в кампании для подробностей > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Завершено techtree = Дерево\n технологий techtree.select = Выбор дерева технологий @@ -743,7 +747,7 @@ sector.impact0078.description = Здесь лежат остатки межзв sector.planetaryTerminal.description = Конечная цель.\n\nЭта береговая база содержит сооружение, способное запускать ядра к окрестным планетам. Оно крайне хорошо охраняется.\n\nПроизведите морские единицы. Уничтожьте врага как можно скорее. Изучите пусковую конструкцию. sector.onset.name = Начало sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_sr.properties b/core/assets/bundles/bundle_sr.properties index 9083083da3..c74a12ec8d 100644 --- a/core/assets/bundles/bundle_sr.properties +++ b/core/assets/bundles/bundle_sr.properties @@ -14,9 +14,9 @@ link.f-droid.description = F-Droid stranica igre link.wiki.description = Zvanična Mindustry vikipedia link.suggestions.description = Preloži nove dodatke link.bug.description = Pronašao si grešku? Prijavi je ovde -linkopen = This server has sent you a link. Are you sure you want to open it?\n\n[sky]{0} +linkopen = Ovaj server vam je poslao link. Da li ste sigurni da ga želite otvoriti?\n\n[sky]{0} linkfail = Nemoguće otvoriti link!\nURL adresa je iskopirana -screenshot = Snimak ekrana snimljen {0} +screenshot = Snimanje ekrana izvršeno {0} screenshot.invalid = Mapa je prevelika, moguće je da nema dovoljno memorije za snimanje ekrana. gameover = Igra gotova. gameover.disconnect = Prekini vezu @@ -169,13 +169,17 @@ mod.scripts.disable = Vaš uređaj ne podržava modove sa skriptama. Onemogućit about.button = Više Informacija name = Ime: noname = Izaberite [accent] ime igrača[] prvo. -search = Search: +search = Pretraži: planetmap = Mapa Planete launchcore = Lansirajte Jezgro filename = Ime datoteke: unlocked = Novi sadržaj otključan! available = Nova tehnologija dostupna za izučavanje! unlock.incampaign = < Otključajte u kampanji za više detalja > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Završeno. techtree = Drvo Tehnologija techtree.select = Izbor Drveća Tehnologija @@ -234,14 +238,14 @@ server.shown = Prikazano server.hidden = Skriveno viewplayer = Viewing Player: [accent]{0} -trace = Trace Player -trace.playername = Player name: [accent]{0} +trace = Nadgledaj Igrača +trace.playername = Ime igrača: [accent]{0} trace.ip = IP: [accent]{0} trace.id = ID: [accent]{0} -trace.mobile = Mobile Client: [accent]{0} -trace.modclient = Custom Client: [accent]{0} -trace.times.joined = Times Joined: [accent]{0} -trace.times.kicked = Times Kicked: [accent]{0} +trace.mobile = Telefonski Klijent: [accent]{0} +trace.modclient = Svojehodni Klijent: [accent]{0} +trace.times.joined = Puta Povezano: [accent]{0} +trace.times.kicked = Puta Izbačeno: [accent]{0} invalidid = Invalid client ID! Submit a bug report. server.bans = Bans server.bans.none = No banned players found! @@ -256,7 +260,7 @@ server.version = [gray]v{0} {1} server.custombuild = [accent]Svjojehodna Verzija confirmban = Da li ste sigurni da želite da [scarlet]trajno[] izbacite "{0}[white]"? confirmkick = Da li ste sigurni da želite da izbacite "{0}[white]"? -confirmvotekick = Are you sure you want to vote-kick "{0}[white]"? +confirmvotekick = Da li ste sigurni da želite putem glasova da izbacite "{0}[white]"? confirmunban = Are you sure you want to unban this player? confirmadmin = Da li ste sigurni da želite da pretvorite "{0}[white]" u administratora? confirmunadmin = Da li ste sigurni da želite ukloni čin administratora sa "{0}[white]"? @@ -307,7 +311,7 @@ save.playtime = Vreme igre: {0} warning = Upozorenje. confirm = Potvrdi delete = Izbriši -view.workshop = View In Workshop +view.workshop = Pogledaj u radionici workshop.listing = Edit Workshop Listing ok = OK open = Otvori @@ -327,8 +331,8 @@ objective = Zadatak crash.export = Export Crash Logs crash.none = No crash logs found. crash.exported = Crash logs exported. -data.export = Export Data -data.import = Import Data +data.export = Izvezi Podatke +data.import = Uvezi Podatke data.openfolder = Open Data Folder data.exported = Data exported. data.invalid = This isn't valid game data. @@ -356,7 +360,7 @@ wave.enemycore = [accent]{0}[lightgray] Neprijateljskog Jezgra wave.enemy = [lightgray]{0} Neprijatelj Ostalo wave.guardianwarn = Čuvar dolazi za [accent]{0}[] talasa. wave.guardianwarn.one = Čuvar dolazi za [accent]{0}[] talas. -loadimage = Load Image +loadimage = Nareži Sliku saveimage = Sačuvaj Sliku unknown = Nepoznato custom = Tkana @@ -372,13 +376,13 @@ 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): -updatedesc = Overwrite Title & Description +changelog = Lista Promena (nije neophodna): +updatedesc = Prereži Ime i Opis 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... +publishing = [accent]Objavljivanje... 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} +publish.error = Greška pri objavljivanju: {0} steam.error = Failed to initialize Steam services.\nError: {0} editor.planet = Planeta: editor.sector = Sektor: @@ -386,7 +390,7 @@ editor.seed = Seme: editor.cliffs = Zidovi u Litice editor.brush = Četka -editor.openin = Open In Editor +editor.openin = Otvori u Editoru editor.oregen = Generacija Rude editor.oregen.info = Generacija Rude: editor.mapinfo = Informacije o Mapi @@ -397,9 +401,9 @@ editor.waves = Talasi: editor.rules = Pravila: editor.generation = Generisanje: editor.objectives = Zadaci -editor.ingame = Edit In-Game +editor.ingame = Izmeni "U Igri" editor.playtest = Testiranje -editor.publish.workshop = Publish On Workshop +editor.publish.workshop = Objavi u Radionicu editor.newmap = Nova Mapa editor.center = Centar editor.search = Pretraži Mape... @@ -409,9 +413,9 @@ editor.filters.type = Tip Mape: editor.filters.search = Pretraži U: editor.filters.author = Autor editor.filters.description = Opis -editor.shiftx = Shift X -editor.shifty = Shift Y -workshop = Workshop +editor.shiftx = Pomeri X +editor.shifty = Pomeri Y +workshop = Radionica waves.title = Talasi waves.remove = Ukloni waves.every = svakih @@ -502,8 +506,8 @@ toolmode.replace = Zamena toolmode.replace.description = Samo crtaj na čvrstim blokovima. toolmode.replaceall = Zameni Sve toolmode.replaceall.description = Zameni sve blokove na mapi. -toolmode.orthogonal = Orthogonal -toolmode.orthogonal.description = Draws only orthogonal lines. +toolmode.orthogonal = Ortogonalno +toolmode.orthogonal.description = Crta u samo ortogonalnim crtama. toolmode.square = Kocka toolmode.square.description = Kockasta četka. toolmode.eraseores = Obriši Rude @@ -517,7 +521,7 @@ toolmode.underliquid.description = Crtaj podove ispod tečnosti. filters.empty = [lightgray]Nema filtera! Dodaj jedan preko dugmati ispod. -filter.distort = Distort +filter.distort = Poremeti filter.noise = Noise filter.enemyspawn = Odabir Neprijateljske Tvorbe filter.spawnpath = Put od Tvorbe @@ -531,7 +535,7 @@ filter.rivernoise = River Noise filter.mirror = Ogledalo filter.clear = Očisti filter.option.ignore = Ignoriši -filter.scatter = Scatter +filter.scatter = Razbaci filter.terrain = Teren filter.option.scale = Razmera @@ -590,8 +594,8 @@ requirement.onsector = Sleti Na Sektor: {0} launch.text = Lansiraj research.multiplayer = Only the host can research items. map.multiplayer = Only the host can view sectors. -uncover = Uncover -configure = Configure Loadout +uncover = Razotkrij +configure = Configuriši Zalihe objective.research.name = Izuči objective.produce.name = Dobij objective.item.name = Preuzmi Materijal @@ -643,7 +647,7 @@ add = Dodaj... guardian = Čuvar connectfail = [scarlet]Greška u povezivanju:\n\n[accent]{0} -error.unreachable = Server unreachable.\nIs the address spelled correctly? +error.unreachable = Server je nedostižan.\nDa li je adresa ispravno napisana? error.invalidaddress = Adresa nije validna. 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! @@ -749,10 +753,10 @@ sector.intersect.name = Raskrsnica sector.atlas.name = Atlas sector.split.name = Split sector.basin.name = Sliv -sector.marsh.name = Marsh -sector.peaks.name = Peaks -sector.ravine.name = Ravine -sector.caldera-erekir.name = Caldera +sector.marsh.name = Bara +sector.peaks.name = Vrhovi +sector.ravine.name = Klisura +sector.caldera-erekir.name = Kaldera sector.onset.description = Tutorijalni sektor. Ovaj zadatak još nije izrađen. Sakečajte za dodatne informacije. sector.aegis.description = Neprijatelj je zaštićen pomoću štita. Eksperimentalni razbijač štitova je uočen u sektoru.\nLocirajte ovu građevinu. Transportujte je sa volframskom municijom i uništite neprijateljsku bazu. sector.lake.description = Istopljen metali u ovom sektoru smanjuje količinu korisnih jedinica. Lebdeća jedinica je jedina opcija.\nIzuči [accent]fabrikator brodova[] i proizvedi [accent]izvrda[] jedinicu što pre moguće. @@ -768,7 +772,7 @@ status.freezing.name = Zamrzavanje status.wet.name = Mokar status.muddy.name = Blatnjav status.melting.name = Topljenje -status.sapped.name = Sapped +status.sapped.name = Sapiran status.electrified.name = Elektrifikovan status.spore-slowed.name = Usporen Sporama status.tarred.name = Tarred @@ -788,27 +792,27 @@ settings.controls = Kontrole settings.game = Igra settings.sound = Zvuk settings.graphics = Grafika -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.cleardata = Rasčisti podatke igre... +settings.clear.confirm = Da li ste sigurni da želite rasčistiti ove podatke?\nŠta je bilo ne može se vratiti! +settings.clearall.confirm = [scarlet]UPOZORENJE![]\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.clearresearch = Očisti Izučavanja +settings.clearresearch.confirm = Da li ste sigurni da želite obrisati sva izučavanja unutar kampanje? settings.clearcampaignsaves = Clear Campaign Saves settings.clearcampaignsaves.confirm = Are you sure you want to clear all of your campaign saves? paused = [accent]< Pauzirano > -clear = Clear +clear = Očisti banned = [scarlet]Nedozvoljeno -unsupported.environment = [scarlet]Unsupported Environment +unsupported.environment = [scarlet]Ne Podržava Prirodnu Sredinu yes = Da no = Ne info.title = Informacije error.title = [scarlet]Greška se desila error.crashtitle = Greška se desila unit.nobuild = [scarlet]Jedinica ne može graditi -lastaccessed = [lightgray]Last Accessed: {0} -lastcommanded = [lightgray]Last Commanded: {0} +lastaccessed = [lightgray]Poslednji Pristupio: {0} +lastcommanded = [lightgray]Poslednji Upravljao: {0} block.unknown = [lightgray]??? stat.showinmap = @@ -897,7 +901,7 @@ ability.statusfield = {0} Statusno polje ability.unitspawn = {0} Fabrika ability.shieldregenfield = Brzina obnove štita ability.movelightning = Munje pri kretanju -ability.shieldarc = Shield Arc +ability.shieldarc = Lučni Štit ability.energyfield = Energetsko Polje: [accent]{0}[] štete ~ [accent]{1}[] polja / [accent]{2}[] maksimalnih meta bar.onlycoredeposit = Only Core Depositing Allowed @@ -981,15 +985,15 @@ category.crafting = Ulaz/izlaz category.function = Funkcija category.optional = Dotatna Poboljšanja setting.skipcoreanimation.name = Preskoči animacije sletanja i poletanja Jezgra. -setting.landscape.name = Lock Landscape +setting.landscape.name = Zaključaj Orijentaciju setting.shadows.name = Senke setting.blockreplace.name = Automatski Predlogi Blokova -setting.linear.name = Linear Filtering +setting.linear.name = Linearni Filteri setting.hints.name = Hints setting.logichints.name = Logic Hints setting.backgroundpause.name = Pauziraj u Pozadini setting.buildautopause.name = Automatski Pauziraj Gradnju -setting.doubletapmine.name = Double-Tap to Mine +setting.doubletapmine.name = Pritisni Dva Puta za Iskopavanje setting.commandmodehold.name = Drži za Upravljački Mod setting.modcrashdisable.name = Disable Mods On Startup Crash setting.animatedwater.name = Animirana Površina @@ -1012,9 +1016,9 @@ setting.difficulty.hard = Hard setting.difficulty.insane = Insane setting.difficulty.name = Difficulty: setting.screenshake.name = Screen Shake -setting.bloomintensity.name = Bloom Intensity -setting.bloomblur.name = Bloom Blur -setting.effects.name = Display Effects +setting.bloomintensity.name = Bloom Intezitet +setting.bloomblur.name = Bloom Magliranje +setting.effects.name = Prikazuj Efekte setting.destroyedblocks.name = Prikazuj Uništene Blokove setting.blockstatus.name = Prikazuj Status Blokova setting.conveyorpathfinding.name = Conveyor Placement Pathfinding @@ -1028,41 +1032,41 @@ setting.borderlesswindow.name.windows = Ceo Bezgranični Ekran setting.borderlesswindow.description = Restartovanje je zahtevano da bi se učitale promene. setting.fps.name = Prikazuj FPS i Ping setting.console.name = Osposobi Konzolu -setting.smoothcamera.name = Smooth Camera +setting.smoothcamera.name = Glatka Kamera setting.vsync.name = VSync -setting.pixelate.name = Pixelate +setting.pixelate.name = Pikselizuj setting.minimap.name = Prikaži Minimapu -setting.coreitems.name = Display Core Items +setting.coreitems.name = Prikaži Materijale Unutar Jezgra setting.position.name = Prikaži Poziciju Igrača setting.mouseposition.name = Prilaži Poziciju Miša setting.musicvol.name = Jačina Muzike setting.atmosphere.name = Prikaži Atmosferu Planete setting.ambientvol.name = Jačina Zvuka Ambijenta setting.mutemusic.name = Mute Music -setting.sfxvol.name = SFX Volume +setting.sfxvol.name = Jačina Zvučnih Efekata setting.mutesound.name = Mute Sound setting.crashreport.name = Send Anonymous Crash Reports setting.savecreate.name = Auto-Create Saves -setting.publichost.name = Public Game Visibility +setting.publichost.name = Vidljivost Javne Igre setting.playerlimit.name = Limit Igrača -setting.chatopacity.name = Chat Opacity -setting.lasersopacity.name = Power Laser Opacity -setting.bridgeopacity.name = Bridge Opacity -setting.playerchat.name = Display Player Bubble Chat +setting.chatopacity.name = Prozirnost Četa +setting.lasersopacity.name = Prozirnost Energetskih Lasera +setting.bridgeopacity.name = Prozirnost Mostova +setting.playerchat.name = Prikazuj Čet Mehure Igrača setting.showweather.name = Show Weather Graphics setting.hidedisplays.name = Hide Logic Displays -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.confirm = Da li ste sigurni da želite da vam igra bude javna?\n[accent]Svako će moći se pridruži vašoj igri.\n[lightgray]Ovo se može posle promeniti u Podešavanja->Igra->Vidljivost Javne Igre. +public.confirm.really = Ako hoćete da igrate sa prijateljima, koristite [green]Pozovi Prijatelje[] umesto [scarlet]Javnog servera[]!\nDa li ste sigurni da želite da vam igra bude [scarlet]javna[]? 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 +uiscale.cancel = Obustavi i Izađi setting.bloom.name = Bloom keybind.title = Rebind Keys keybinds.mobile = [scarlet]Most keybinds here are not functional on mobile. Only basic movement is supported. category.general.name = General category.view.name = View category.multiplayer.name = Multiplayer -category.blocks.name = Block Select +category.blocks.name = Biranje Blokova placement.blockselectkeys = \n[lightgray]Key: [{0}, keybind.respawn.name = Respawn keybind.control.name = Kontrološi Jedinicu @@ -1079,25 +1083,25 @@ keybind.pan.name = Pan View keybind.boost.name = Boost keybind.command_mode.name = Upravljački Mod keybind.schematic_select.name = Izageri 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.schematic_menu.name = Menu Šema +keybind.schematic_flip_x.name = Okreni Šemu X +keybind.schematic_flip_y.name = Okreni Šemu Y +keybind.category_prev.name = Prethodna Kategorija +keybind.category_next.name = Sledeća Kategorija 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.block_select_up.name = Odabir Bloka Gore +keybind.block_select_down.name = Odabir Bloka Dole +keybind.block_select_01.name = Kategorija/Blok Odabir 1 +keybind.block_select_02.name = Kategorija/Blok Odabir 2 +keybind.block_select_03.name = Kategorija/Blok Odabir 3 +keybind.block_select_04.name = Kategorija/Blok Odabir 4 +keybind.block_select_05.name = Kategorija/Blok Odabir 5 +keybind.block_select_06.name = Kategorija/Blok Odabir 6 +keybind.block_select_07.name = Kategorija/Blok Odabir 7 +keybind.block_select_08.name = Kategorija/Blok Odabir 8 +keybind.block_select_09.name = Kategorija/Blok Odabir 9 +keybind.block_select_10.name = Kategorija/Blok Odabir 10 keybind.fullscreen.name = Toggle Fullscreen keybind.select.name = Izaberi/Pucaj keybind.diagonal_placement.name = Diagonalo Postavljanje @@ -1117,12 +1121,12 @@ keybind.research.name = Izuči keybind.block_info.name = O Bloku keybind.chat.name = Čet keybind.player_list.name = Lista Igrača -keybind.console.name = Console -keybind.rotate.name = Rotate -keybind.rotateplaced.name = Rotate Existing (Hold) +keybind.console.name = Konzola +keybind.rotate.name = Rotiraj +keybind.rotateplaced.name = Rotiraj Postojeće (Drži) keybind.toggle_menus.name = Toggle Menus -keybind.chat_history_prev.name = Chat History Prev -keybind.chat_history_next.name = Chat History Next +keybind.chat_history_prev.name = Istorija Četa (Prethodna) +keybind.chat_history_next.name = Istorija Četa (Naredna) keybind.chat_scroll.name = Chat Scroll keybind.chat_mode.name = Change Chat Mode keybind.drop_unit.name = Drop Unit @@ -1146,7 +1150,7 @@ rules.coreincinerates = Core Incinerates Overflow rules.disableworldprocessors = Onesposobi Svetovne Procesore rules.schematic = Šeme Su Dozvoljene rules.wavetimer = Wave Timer -rules.wavesending = Wave Sending +rules.wavesending = Slanje Talasa rules.waves = Talasi rules.attack = Mod Napada rules.rtsai = RTS AI @@ -1200,8 +1204,8 @@ rules.weather.duration = Dužina: content.item.name = Materijali content.liquid.name = Tečnosti content.unit.name = Jedinice -content.block.name = Blocks -content.status.name = Status Effects +content.block.name = Blokovi +content.status.name = Statusni Efekti content.sector.name = Sektori content.team.name = Factions wallore = (Zid) @@ -1234,7 +1238,7 @@ liquid.slag.name = Šljaka liquid.oil.name = Nafta liquid.cryofluid.name = Kriotečnost liquid.neoplasm.name = Neoplazma -liquid.arkycite.name = Arkycite +liquid.arkycite.name = Lučar liquid.gallium.name = Gallium liquid.ozone.name = Ozon liquid.hydrogen.name = Vodonik @@ -1522,12 +1526,12 @@ block.large-constructor.name = Vekiki Zidar block.large-constructor.description = Proizvodi građevine do 4x4 veličine. block.deconstructor.name = Deconstructor block.deconstructor.description = Razgrađuje građevine i jedinice koje uđu unutra. Vraća se 100% cene gradnje. -block.payload-loader.name = Payload Loader -block.payload-loader.description = Load liquids and items into blocks. -block.payload-unloader.name = Payload Unloader -block.payload-unloader.description = Unloads liquids and items from blocks. +block.payload-loader.name = Punilac Tovara +block.payload-loader.description = Puni u blokove tečnosti i materijale. +block.payload-unloader.name = Praznilac Tovara +block.payload-unloader.description = Prazni iz blokova tečnosti i materijale. block.heat-source.name = Izvor Toplote -block.heat-source.description = 1x1 blok koji tehnički proizvodi beskonačno toplote. +block.heat-source.description = 1x1 blok koji tehnički proizvodi beskonačno toplote. Isključivo za Sandbox mod. block.empty.name = Prazno block.rhyolite-crater.name = Riolitni Krateri block.rough-rhyolite.name = Grub Riolit @@ -1536,18 +1540,18 @@ block.yellow-stone.name = Žuta Stena block.carbon-stone.name = Ugljenična Stena block.ferric-stone.name = Železna Stena block.ferric-craters.name = Železni Krateri -block.beryllic-stone.name = Beryllic Stone +block.beryllic-stone.name = Berilijumska Stena block.crystalline-stone.name = Kristalinska Stena block.crystal-floor.name = Kristalni Pod block.yellow-stone-plates.name = Ploče Žute Stene block.red-stone.name = Crvena Stena block.dense-red-stone.name = Gusta Crvena Stena block.red-ice.name = Crveni Led -block.arkycite-floor.name = Arkycite Floor -block.arkyic-stone.name = Arkyic Stone +block.arkycite-floor.name = Lučarni Pod +block.arkyic-stone.name = Lučarna Stena block.rhyolite-vent.name = Riolitni Gejzir block.carbon-vent.name = Ugljenični Gejzir -block.arkyic-vent.name = Arkyic Vent +block.arkyic-vent.name = Lučarni Gejzir block.yellow-stone-vent.name = Gejzir Žute Stene block.red-stone-vent.name = Gejzir Crvene Stene block.redmat.name = Redmat @@ -1558,8 +1562,8 @@ block.yellow-stone-wall.name = Zid Žute Stene block.rhyolite-wall.name = Riolitni Zid block.carbon-wall.name = Ugljenični Zid block.ferric-stone-wall.name = Zid Železne Stene -block.beryllic-stone-wall.name = Beryllic Stone Wall -block.arkyic-wall.name = Arkyic Wall +block.beryllic-stone-wall.name = Zid Berilijumske Stene +block.arkyic-wall.name = Lučarni Zid block.crystalline-stone-wall.name = Zid Kristalinske Stene block.red-ice-wall.name = Zid Crvenog Leda block.red-stone-wall.name = Zid Crvene Stene @@ -1569,9 +1573,9 @@ block.pur-bush.name = Pur Bush block.yellowcoral.name = Žuti Koral block.carbon-boulder.name = Ugljenični Kamen block.ferric-boulder.name = Železni Kamen -block.beryllic-boulder.name = Beryllic Boulder -block.yellow-stone-boulder.name = Yellow Stone Boulder -block.arkyic-boulder.name = Arkyic Boulder +block.beryllic-boulder.name = Berilijumski Kamen +block.yellow-stone-boulder.name = Kamen Žute Stene +block.arkyic-boulder.name = Lučarni Kamen block.crystal-cluster.name = Crystal Cluster block.vibrant-crystal-cluster.name = Vibrant Crystal Cluster block.crystal-blocks.name = Kristalni Blokovi @@ -1615,7 +1619,7 @@ block.large-shield-projector.name = Veliki Projektor Štita block.armored-duct.name = Oklopljeni Kanal block.overflow-duct.name = Prelivni Kanal block.underflow-duct.name = Podlivni Kanal -block.duct-unloader.name = Duct Unloader +block.duct-unloader.name = Kanalni Praznilac block.surge-conveyor.name = Impulsna Traka block.surge-router.name = Impulsni Ruter block.unit-cargo-loader.name = Utovarivač Tovarnih Jedinica @@ -1627,9 +1631,9 @@ block.reinforced-bridge-conduit.name = Armirana Mostna Cev block.reinforced-liquid-router.name = Armirani Tečni Ruter block.reinforced-liquid-container.name = Armirani Tečni Rezervoar block.reinforced-liquid-tank.name = Armirani Tečni Tanker -block.beam-node.name = Beam Node -block.beam-tower.name = Beam Tower -block.beam-link.name = Beam Link +block.beam-node.name = Snopna Dioda +block.beam-tower.name = Snopni Toranj +block.beam-link.name = Snopni Link block.turbine-condenser.name = Turbinski Kondezator block.chemical-combustion-chamber.name = Elektrana Hemijskog Sagorevanja block.pyrolysis-generator.name = Pirolizna Elektrana @@ -1638,7 +1642,7 @@ block.cliff-crusher.name = Planinolom block.plasma-bore.name = Plasma Bore block.large-plasma-bore.name = Large Plasma Bore block.impact-drill.name = Udarna Drobilica -block.eruption-drill.name = Eruption Drill +block.eruption-drill.name = Eruptivna Drobilica block.core-bastion.name = Jezgro: Bastilja block.core-citadel.name = Core Citadel block.core-acropolis.name = Core Acropolis @@ -1660,7 +1664,7 @@ block.ship-assembler.name = Monter Brodova block.mech-assembler.name = Monter Mečana block.reinforced-payload-conveyor.name = Armirana Tovarna Traka block.reinforced-payload-router.name = Armirani Tovarni Ruter -block.payload-mass-driver.name = Payload Mass Driver +block.payload-mass-driver.name = Tovarni Akcelerator block.small-deconstructor.name = Small Deconstructor block.canvas.name = Kanvas block.world-processor.name = Svetovni Procesor @@ -1756,131 +1760,131 @@ item.spore-pod.description = Prerađuje se u naftu ili plastiku, može se spalji item.spore-pod.details = Spore. Verovatno sintetički obliki života. Emituje gasove otrovne po ostali život. Ekstremno invazivne. Visoko zapaljive u određenim uslovima. item.blast-compound.description = Koristi se za bombe i eksplozivnu municiju. item.pyratite.description = Koristi se kao zapaljiva municija i odlično gorivo za elektrane. -item.beryllium.description = Used in many types of construction and ammunition on Erekir. -item.tungsten.description = Used in drills, armor and ammunition. Required in the construction of more advanced structures. -item.oxide.description = Used as a heat conductor and insulator for power. -item.carbide.description = Used in advanced structures, heavier units, and ammunition. +item.beryllium.description = Korišćen u raznim građevinama i municiji na Erekir-u. +item.tungsten.description = Korišćena u drobilicama, oklopu i kao municija. Potrebna za gradnju naprednijih građevina. +item.oxide.description = Korišćen kao preusmeravač toplote i električni izolator. +item.carbide.description = Korišćena u naprednim građevinama, većim jedinicama i municiji. liquid.water.description = Koristi se za hlađenje mašina i preradu otpada. liquid.slag.description = Može se preraditi u Razdvajačima u druge resurse, može se sipati na neprijatelje kao oružje. liquid.oil.description = Koristi se za proizvodnju naprednih materijala. Može se koristi kao pojačivač vatre ako se sipa na neprijatelja dok gori. liquid.cryofluid.description = Rashladna tečnost za fabrike, reaktore i topove. liquid.arkycite.description = Used in chemical reactions for power generation and material synthesis. -liquid.ozone.description = Used as an oxidizing agent in material production, and as fuel. Moderately explosive. -liquid.hydrogen.description = Used in resource extraction, unit production and structure repair. Flammable. -liquid.cyanogen.description = Used for ammunition, construction of advanced units, and various reactions in advanced blocks. Highly flammable. -liquid.nitrogen.description = Used in resource extraction, gas creation and unit production. Inert. -liquid.neoplasm.description = A dangerous biological byproduct of the Neoplasia reactor. Quickly spreads to any adjacent water-containing block it touches, damaging them in the process. Viscous. -liquid.neoplasm.details = Neoplasm. An uncontrollable mass of rapidly-dividing synthetic cells with a sludge-like consistency. Heat-resistant. Extremely dangerous to any structures involving water.\n\nToo complex and unstable for standard analysis. Potential applications unknown. Incineration in slag pools is recommended. +liquid.ozone.description = Korišćen kao oksidaciono sredstvo za proizvodnju materijala, i kao gorivo. Srednje eksplozivan. +liquid.hydrogen.description = Korišćen za iskopavanje ruda, proizvodnju jedinica i za popravke. Zapaljiv. +liquid.cyanogen.description = Korišćena za izgradnju većih jedinica, kao municija i za razne reakcije u naprednim građevinama. Izuzetno Zapaljiv. +liquid.nitrogen.description = Korišćen za iskopavanje ruda, proizvodnju gasova i proizvodnju jedinica. Inertan. +liquid.neoplasm.description = Opasni biološki njusproizvod Neoplasia reaktora. Brzo se širi na svaki povezani blok koji sadrži vodu koju dotakne, oštećuju ih u procesu. Viskozna. +liquid.neoplasm.details = Neoplazma. An uncontrollable mass of rapidly-dividing synthetic cells with a sludge-like consistency. Heat-resistant. Extremely dangerous to any structures involving water.\n\nToo complex and unstable for standard analysis. Potential applications unknown. Incineration in slag pools is recommended. block.derelict = [lightgray]Zabačen -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.armored-conveyor.description = Usmerava materijale ispred. Nema prijema sa bokova. +block.illuminator.description = Osvetljava okolinu. +block.message.description = Skladišti poruku radi komunikacije među saveznicima. +block.graphite-press.description = Pritiska ugalj, pretvarajući ga u grafit. +block.multi-press.description = Pritiska ugalj, pretvarajući ga u grafit. Zahteva vodu za hlađenje. +block.silicon-smelter.description = Rafinira silicijum iz peska i uglja. +block.kiln.description = Topi pesak i olovo u meta-staklo. +block.plastanium-compressor.description = Proizvodi plastanijum iz nafte i titanijuma. block.phase-weaver.description = Synthesizes phase fabric from thorium and sand. block.surge-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.cryofluid-mixer.description = Meša vodu sa finom titanijumskom prašinom u kriotečnost. +block.blast-mixer.description = Proizvodi eksplozivnu smešu iz piratita i kapsula spora. +block.pyratite-mixer.description = Meša ugalj, pesak i olovo u piratit. 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 = 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 = Bezkrajno ispušta energiju. Sandbox only. -block.item-source.description = Infinitely outputs items. Sandbox only. -block.item-void.description = Destroys any items. Sandbox only. -block.liquid-source.description = Bezkrajno ispušta tečnosti. Sandbox only. -block.liquid-void.description = Uništava svaku tečnost. Sandbox only. -block.payload-source.description = Infinitely outputs payloads. Sandbox only. -block.payload-void.description = Destroys any payloads. Sandbox only. -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.spore-press.description = Pritiska kapsule spora, pretvarajući je u naftu. +block.pulverizer.description = Drobi opiljke u fini pesak. +block.coal-centrifuge.description = Transformiše naftu u ugalj. +block.incinerator.description = Spaljuje svaki materijal ili tečnost koju primi. +block.power-void.description = Negira svu povezanu energiju. Isključivo za Sandbox mod. +block.power-source.description = Bezkrajno ispušta energiju. Isključivo za Sandbox mod. +block.item-source.description = Bezkrajno ispušta materijale. Isključivo za Sandbox mod. +block.item-void.description = Uništava svaki ubačeni materijal. Isključivo za Sandbox mod. +block.liquid-source.description = Bezkrajno ispušta tečnosti. Isključivo za Sandbox mod. +block.liquid-void.description = Uništava svaku ubačenu tečnost. Isključivo za Sandbox mod. +block.payload-source.description = Bezkrajno ispušta tovar. Isključivo za Sandbox mod. +block.payload-void.description = Uništava sav ubačen tovar. Isključivo za Sandbox mod. +block.copper-wall.description = Štiti građevine od neprijateljskih projektila. +block.copper-wall-large.description = Štiti građevine od neprijateljskih projektila. +block.titanium-wall.description = Štiti građevine od neprijateljskih projektila. +block.titanium-wall-large.description = Štiti građevine od neprijateljskih projektila. +block.plastanium-wall.description = Štiti građevine od neprijateljskih projektila. Upija lasere i električne udare. Ne dopušta automatska povezivanja energije. +block.plastanium-wall-large.description = Štiti građevine od neprijateljskih projektila. Upija lasere i električne udare. Ne dopušta automatska povezivanja energije. +block.thorium-wall.description = Štiti građevine od neprijateljskih projektila. +block.thorium-wall-large.description = Štiti građevine od neprijateljskih projektila. +block.phase-wall.description = Štiti građevine od neprijateljskih projektila, odbijajući većinu metaka pri udaru. +block.phase-wall-large.description = Štiti građevine od neprijateljskih projektila, odbijajući većinu metaka pri udaru. +block.surge-wall.description = Štiti građevine od neprijateljskih projektila, povremeno uzrokavajući električne udare pri kontaktu. +block.surge-wall-large.description = Štiti građevine od neprijateljskih projektila, povremeno uzrokavajući električne udare pri kontaktu. +block.door.description = Zid koji se može otvarati i zatvarati. +block.door-large.description = Zid koji se može otvarati i zatvarati. +block.mender.description = Povremeno popravlja blokove u okolini.\nMože koristiti silicijum da poveća domet i efikasnost. +block.mend-projector.description = Popravlja blokove u okolini.\nMože koristiti faznu tkaninu da poveća domet i efikasnost. +block.overdrive-projector.description = Ubrzava okolne građevine.\nMože koristiti faznu tkaninu da poveća domet i efikasnost. 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.shock-mine.description = Oslobađa električne udare pri kontaktu sa neprijateljskim jedinicama. +block.conveyor.description = Usmerava materijale ispred. +block.titanium-conveyor.description = Usmerava materijale ispredd. Brži od standardnog transportera. +block.plastanium-conveyor.description = Usmerava materijale ispred u bačvama. Prima materijale od pozadi, I izbacuje na tri strane spreda. Zahteva više ulaznih i izlaznih tačaka za maksimalni protok. 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. -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. -block.impulse-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-container.description = Stores a sizeable amount of liquid. Outputs to all sides, similarly to a liquid router. -block.liquid-tank.description = Stores a large amount of liquid. Outputs to all sides, similarly to a liquid router. +block.bridge-conveyor.description = Prebacuje materijale preko terena i građevina. +block.phase-conveyor.description = Momentalno prebacuje materijale preko terena i građevina. Veći domet nego premostna traka, ali zahteva energiju. +block.sorter.description = Ako je prijemni materijal slaže sa izabranim, ide napred. U suprotnosti, materijal ide sa strane. +block.inverted-sorter.description = Kao standardni sorter, ali izabrani materijali idu sa strane. +block.router.description = Distribuiše primljene materijale podjednako u 3 pravca. +block.router.details = Neophodno zlo. Predlaže se da se ne postavlja pored proizvodnog prijema, pošto će nastati zastoj od proizvoda. +block.distributor.description = Distribuiše primljene materijale podjednako u 7 pravaca. +block.overflow-gate.description = Samo otpušta materijale sa strane u slučaju da je prednja strana nepropusna. +block.underflow-gate.description = Suprostnost nadlivne kapije. Otpušta materijale napred samo kad su obe strane nepropusne. +block.mass-driver.description = Visoko-dometna tranportna građevina za materijale. Skuplja bačve materijala i ispaljuje ih na druge akceleratore. +block.mechanical-pump.description = Pumpa tečnosti. Ne zahteva energiju. +block.rotary-pump.description = Pumpa tečnosti. Zahteva energiju. +block.impulse-pump.description = Pumpa tečnosti. +block.conduit.description = Usmerava tečnosti ka zadatom pravcu. Korišćen sa drugim cevima i pumpama. +block.pulse-conduit.description = Usmerava tečnosti ka zadatom pravcu. Ima veći kapacitet i brže prenosi od standardnih cevi. +block.plated-conduit.description = Usmerava tečnosti ka zadatom pravcu. Does not accept input from the sides. Ne curi. +block.liquid-router.description = Prima tečnosti iz jednog pravca i otpušta podjednako u 3 pravca. Takođe može da skladišti nešto tečnosti. +block.liquid-container.description = Skladišti dobru količinu tečnosti. Slično tečnom ruteru, otpušta u svaki pravac. +block.liquid-tank.description = Skladišti veliku količinu tečnosti. Slično tečnom ruteru, otpušta u svaki pravac. 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 = A long-range power node with fewer available connections. +block.bridge-conduit.description = Prebacuje tečnosti preko terena ili građevina. +block.phase-conduit.description = Momentalno prebacuje tečnosti preko terena i građevina. Veći domet nego premostna cev, ali zahteva energiju. +block.power-node.description = Distribuiše energiju sa drugim čvorovima. Čvor takođe šalje i prima energiju sa susednim blokovima. +block.power-node-large.description = Napredni čvor sa većim dometom. +block.surge-tower.description = Dugo-dometni čvor sa samo nekoliko dostupnih povezivanja. 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 = 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 = 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 = Provides a small amount of power from the sun. More efficient than the standard solar panel. +block.battery.description = Skladišti višak energije. Otpušta energiju kad je deficit. +block.battery-large.description = Skladišti višak energije. Otpušta energiju kad je deficit. Veći kapacitet od standardne baterije. +block.combustion-generator.description = Stvara energiju prilikom sagorevanja zapaljivih materijala, potput uglja. +block.thermal-generator.description = Stvara energiju kada se nalazim u toploj sredini. +block.steam-generator.description = Stvara energiju prilikom sagorevanja zapaljivih materijala i sa tim vode u paru. +block.differential-generator.description = Stvara velku količinu energije. Koristi temperaturnu razliku između kriotečnosti i zapaljenog piratita. +block.rtg-generator.description = Koristi toplotu pri polakom razlaganju radioaktivnih elemenata za proizvodnju energije. +block.solar-panel.description = Proizvodi malu količinu energije od sunca. +block.solar-panel-large.description = Proizvodi malu količinu energije od sunca, ali više od standardnog panela. 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 atmospheric spores into spore pods. +block.mechanical-drill.description = Kada je postavljeno na rudi, polako i trajno otpušta materijale. Može samo iskopavati jednostavne resurse. +block.pneumatic-drill.description = Poboljšana drobilica, može iskopavati titanijm. Otkopava brže nego mehanička drobilica. +block.laser-drill.description = Omugućava još brže iskopavanje pomoću tehnologije lasera, ali zahteva energiju. Može iskopavati torijum. +block.blast-drill.description = Najefikasnija drobilica. Zahteva veliku količinu energije. +block.water-extractor.description = Prikuplja podzemne vode. Korišćeno na mestima bez nadzemne vode. +block.cultivator.description = Prikuplja malu količinu atmosfernih kultura spora u kapsule spora. 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 = Core of the base. Once destroyed, the sector is lost. +block.core-shard.description = Jezgro baze. Jednom uništeno gubi se sector. 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.description = Jezgro baze. Dobro oklopljeno. Skladišti više resursa nego Krhotina. 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.description = Jezgro baze. Veoma dobro oklopljeno. Skladišti veliku količinu resursa. 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.vault.description = Skladišti veliku količinu od svake vrste materijala. Contents can be retrieved with an unloader. +block.container.description = Skladišti malu količinu od svake vrste materijala. Contents can be retrieved with an unloader. +block.unloader.description = Istovaruje određeni materijal iz obližnih blokova. +block.launch-pad.description = Lansira bačve resursa u izabrani sektor. block.launch-pad.details = Sub-orbital system for point-to-point transportation of resources. Payload pods are fragile and incapable of surviving re-entry. -block.duo.description = Fires alternating bullets at enemies. +block.duo.description = Ispaljuje metke naizmenično na neprijatelje. 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 = Fires small shells at ground enemies over long distances. @@ -1888,29 +1892,29 @@ block.wave.description = Fires streams of liquid at enemies. Automatically extin 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.salvo.description = Ispaljuje brze rafale na neprijatelje. 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. Prioritizes enemies with higher max health. -block.repair-point.description = Continuously repairs the closest damaged unit in its vicinity. +block.repair-point.description = Stalno popravlja najbližu oštećenu jedinicu u okolini. 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.silicon-crucible.description = Rafiniše silicijum iz peska i uglja, korišteći piratit kao dodatni izvor toplote. Efikasnija u toploj sredini. 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.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.overdrive-dome.description = Ubrzava rad okolnih građevina. Za rad zahteva silicijum i faznu tkaninu. +block.payload-conveyor.description = Usmerava tovar, potput jedinica iz fabrika. +block.payload-router.description = Deli tovarni skup u 3 pravca. +block.ground-factory.description = Proizvodi zemne jedinice. Proizvod se može odmah koristiti, ili pomeren u rekonstruktore za doradu. +block.air-factory.description = Proizvodi vazdušne jedinice. Proizvod se može odmah koristiti, ili pomeren u rekonstruktore za doradu. +block.naval-factory.description = Proizvodi morske jedinice. Proizvod se može odmah koristiti, ili pomeren u rekonstruktore za doradu. +block.additive-reconstructor.description = Dorađuje ubačene jedinice u drugi tier. +block.multiplicative-reconstructor.description = Dorađuje ubačene jedinice u treći tier. +block.exponential-reconstructor.description = Dorađuje ubačene jedinice u četvrti tier. +block.tetrative-reconstructor.description = Dorađuje ubačene jedinice u peti i konačni 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. @@ -1922,11 +1926,11 @@ block.large-logic-display.description = Displays arbitrary graphics from a logic block.interplanetary-accelerator.description = A massive electromagnetic railgun tower. Accelerates cores to escape velocity for interplanetary deployment. block.repair-turret.description = Continuously repairs the closest damaged unit in its vicinity. Optionally accepts coolant. block.payload-propulsion-tower.description = Long-range payload transport structure. Shoots payloads to other linked payload propulsion towers. -block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. -block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. -block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. +block.core-bastion.description = Jezgro baze. Oklopljeno. Jednom uništeno gubi se sektor. +block.core-citadel.description = Jezgro baze. Izuzetno dobro oklopljeno. Skladišti više resursa od Bastilje jezgra. +block.core-acropolis.description = Jezgro baze. Izvrsno dobro oklopljeno. Skladišti više resursa od Citadele jezgra. block.breach.description = Fires piercing beryllium or tungsten ammunition at enemy targets. -block.diffuse.description = Fires a burst of bullets in a wide cone. Pushes enemy targets back. +block.diffuse.description = Ispaljuje rafale metaka u širokom uglu. Gura neprijateljske jedinice nazad. block.sublimate.description = Fires a continuous jet of flame at enemy targets. Pierces armor. block.titan.description = Fires a massive explosive artillery shell at ground targets. Requires hydrogen. block.afflict.description = Fires a massive charged orb of fragmentary flak. Requires heating. @@ -1935,81 +1939,81 @@ block.lustre.description = Fires a slow-moving single-target laser at enemy targ block.scathe.description = Launches a powerful missile at ground targets over vast distances. block.smite.description = Fires bursts of piercing, lightning-emitting bullets. block.malign.description = Fires a barrage of homing laser charges at enemy targets. Requires extensive heating. -block.silicon-arc-furnace.description = Refines silicon from sand and graphite. -block.oxidation-chamber.description = Converts beryllium and ozone into oxide. Emits heat as a by-product. -block.electric-heater.description = Heats facing blocks. Requires large amounts of power. +block.silicon-arc-furnace.description = Rafiniše silicijum iz peska i grafita. +block.oxidation-chamber.description = Pretvara berilijum i ozom u kiseonik. Ispušta toplotu kao njusproizvod. +block.electric-heater.description = Greje usmerene blokove. Zahteva veliku količinu energije. block.slag-heater.description = Heats facing blocks. Requires slag. -block.phase-heater.description = Heats facing blocks. Requires phase fabric. -block.heat-redirector.description = Redirects accumulated heat to other blocks. -block.electrolyzer.description = Converts water into hydrogen and ozone gas. -block.atmospheric-concentrator.description = Concentrates nitrogen from the atmosphere. Requires heat. -block.surge-crucible.description = Forms surge alloy from slag and silicon. Requires heat. -block.phase-synthesizer.description = Synthesizes phase fabric from thorium, sand, and ozone. Requires heat. -block.carbide-crucible.description = Fuses graphite and tungsten into carbide. Requires heat. -block.cyanogen-synthesizer.description = Synthesizes cyanogen from arkycite and graphite. Requires heat. +block.phase-heater.description = Greje usmerene blokove. Zahteva faznu tkaninu. +block.heat-redirector.description = Preusmerava sakupljenu toplotu u druge blokove. +block.electrolyzer.description = Deli vodu na gasove vodonik i ozon. +block.atmospheric-concentrator.description = Koncentriše azot iz atmosfere. Zahteva toplotu. +block.surge-crucible.description = Forms surge alloy from slag and silicon. Zahteva toplotu. +block.phase-synthesizer.description = Synthesizes phase fabric from thorium, sand, and ozone. Zahteva toplotu. +block.carbide-crucible.description = Pretvara volfram i grafit u karbid. Zahteva toplotu. +block.cyanogen-synthesizer.description = Synthesizes cyanogen from arkycite and graphite. Zahteva toplotu. block.slag-incinerator.description = Incinerates non-volatile items or liquids. Requires slag. -block.vent-condenser.description = Condenses vent gases into water. Consumes power. -block.plasma-bore.description = When placed facing an ore wall, outputs items indefinitely. Requires small amounts of power. +block.vent-condenser.description = Kondezuje ventilacione gasove u vodu. Koristi energiju. +block.plasma-bore.description = Kada je postavljeno u smeru zidne rude, beskonačno ispušta materijale. Zahteva malo energije. block.large-plasma-bore.description = A larger plasma bore. Capable of mining tungsten and thorium. Requires hydrogen and power. -block.cliff-crusher.description = Crushes walls, outputting sand indefinitely. Requires power. Efficiency varies based on type of wall. -block.impact-drill.description = When placed on ore, outputs items in bursts indefinitely. Requires power and water. -block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. -block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. -block.reinforced-liquid-router.description = Distributes fluids equally to all sides. +block.cliff-crusher.description = Beskonačno ispušta pesak lomeći stene. Zahteva energiju. Efikasnost zavisi od vrste zida. +block.impact-drill.description = Kada je postavljeno na rudi, beskonačno ispušta materijale u bačvama. Zahteva energiju i vodu. +block.eruption-drill.description = Poboljšana udarna drobilica. Može iskopavati torijum. Zahteva vodonik +block.reinforced-conduit.description = Usmerava tečnosti napred. Ne prihvata unos sa strane od blokova koje nisu cevi. +block.reinforced-liquid-router.description = Jednako distribuiše tečnosti u svim pravcima. block.reinforced-junction.description = Acts as a bridge for two crossing conduits. -block.reinforced-liquid-tank.description = Stores a large amount of fluids. -block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. -block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. -block.reinforced-pump.description = Pumps and outputs liquids. Requires hydrogen. -block.beryllium-wall.description = Protects structures from enemy projectiles. -block.beryllium-wall-large.description = Protects structures from enemy projectiles. -block.tungsten-wall.description = Protects structures from enemy projectiles. -block.tungsten-wall-large.description = Protects structures from enemy projectiles. -block.carbide-wall.description = Protects structures from enemy projectiles. -block.carbide-wall-large.description = Protects structures from enemy projectiles. -block.reinforced-surge-wall.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.reinforced-surge-wall-large.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.shielded-wall.description = Protects structures from enemy projectiles. Deploys a shield that absorbs most projectiles when power is provided. Conducts power. -block.blast-door.description = A wall that opens when allied ground units are in range. Cannot be manually controlled. -block.duct.description = Moves items forward. Only capable of storing a single item. -block.armored-duct.description = Moves items forward. Does not accept non-duct inputs from the sides. -block.duct-router.description = Distributes items equally across three directions. Only accepts items from the back side. Can be configured as an item sorter. -block.overflow-duct.description = Only outputs items to the sides if the front path is blocked. -block.duct-bridge.description = Moves items over structures and terrain. -block.duct-unloader.description = Unloads the selected item from the block behind it. Cannot unload from cores. -block.underflow-duct.description = Opposite of an overflow duct. Outputs to the front if the left and right paths are blocked. +block.reinforced-liquid-tank.description = Skladišti veliku količinu tečnosti. +block.reinforced-liquid-container.description = Skladišti dobru količinu tečnosti. +block.reinforced-bridge-conduit.description = Prenosi tečnosti preko terena i građevina. +block.reinforced-pump.description = Pumpa tečnosti. Zahteva vodonik. +block.beryllium-wall.description = Štiti građevine od neprijateljskih projektila. +block.beryllium-wall-large.description = Štiti građevine od neprijateljskih projektila. +block.tungsten-wall.description = Štiti građevine od neprijateljskih projektila. +block.tungsten-wall-large.description = Štiti građevine od neprijateljskih projektila. +block.carbide-wall.description = Štiti građevine od neprijateljskih projektila. +block.carbide-wall-large.description = Štiti građevine od neprijateljskih projektila. +block.reinforced-surge-wall.description = Štiti građevine od neprijateljskih projektila, povremeno uzrokavajući električne udare pri kontaktu. +block.reinforced-surge-wall-large.description = Štiti građevine od neprijateljskih projektila, povremeno uzrokavajući električne udare pri kontaktu. +block.shielded-wall.description = Štiti građevine od neprijateljskih projektila. Stvara štit koji može primiti većinu metaka kada ima dovoljno energije. Provodi energiju. +block.blast-door.description = Zid koji se otvara kada su savezničke jedinice u blizini. Nemoguće je upravljati je ručno. +block.duct.description = Usmerava materijale ispred. +block.armored-duct.description = Usmerava materijale ispred. Ne prihvata unos sa strane od blokova koji nisu kanali. +block.duct-router.description = Distribuiše materijale podjednako sa 3 strane. Prihvata materijale samo otpozadi. Može da se podesi kao sorter. +block.overflow-duct.description = Samo otpušta materijale sa strane u slučaju da je prednja strana nepropusna. +block.duct-bridge.description = Prenosi materijale preko terena i građevina. +block.duct-unloader.description = Istovaruje materijale od bloka iza. Ne može istovarivati iz jezgra. +block.underflow-duct.description = Suprostnost nadlivnog kanala. Otpušta materijale napred samo kad su obe strane nepropusne. block.reinforced-liquid-junction.description = Acts as a junction between two crossing conduits. -block.surge-conveyor.description = Moves items in batches. Can be sped up with power. Conducts power. -block.surge-router.description = Equally distributes items in three directions from surge conveyors. Can be sped up with power. Conducts power. +block.surge-conveyor.description = Usmerava materijale u bačvama. Može se ubrzati sa energijom. Provodi energiju. +block.surge-router.description = Distribuiše materijale iz impulsnih traka podjednako sa 3 strane. Može se ubrzati sa energijom. Provodi energiju. block.unit-cargo-loader.description = Constructs cargo drones. Drones automatically distribute items to Cargo Unload Points with a matching filter. block.unit-cargo-unload-point.description = Acts as an unloading point for cargo drones. Accepts items that match the selected filter. -block.beam-node.description = Transmits power to other blocks orthogonally. Stores a small amount of power. -block.beam-tower.description = Transmits power to other blocks orthogonally. Stores a large amount of power. Long-range. -block.turbine-condenser.description = Generates power when placed on vents. Produces a small amount of water. -block.chemical-combustion-chamber.description = Generates power from arkycite and ozone. +block.beam-node.description = Prenosi energiju na druge blokove ortogonalno. Skladišti malu količinu energije. +block.beam-tower.description = Prenosi energiju na druge blokove ortogonalno. Skladišti veću količinu energije. Dugog dometa. +block.turbine-condenser.description = Proizvodi energiju kada je na ventilu. Proizvodi malu količinu vode. +block.chemical-combustion-chamber.description = Proizvodi energiju od lučara i ozona. block.pyrolysis-generator.description = Generates large amounts of power from arkycite and slag. Produces water as a byproduct. -block.flux-reactor.description = Generates large amounts of power when heated. Requires cyanogen as a stabilizer. Power output and cyanogen requirements are proportional to heat input.\nExplodes if insufficient cyanogen is provided. -block.neoplasia-reactor.description = Uses arkycite, water and phase fabric to generate large amounts of power. Produces heat and dangerous neoplasm as a byproduct.\nExplodes violently if neoplasm is not removed from the reactor via conduits. -block.build-tower.description = Automatically rebuilds structures in range and assists other units in construction. +block.flux-reactor.description = Proizvodi veliku količinu energije iz primljene toplote. Zahteva cianogen kao stabilizator. Dobijena energija i potreban cianogen su srazmerni sa količinom toplote.\nU slučaju nedovoljnog cianogena dolazi do ekplozije. +block.neoplasia-reactor.description = Koristi lučar, faznu tkaninu i vodu da proizvede veliku količinu energije. Proizvodi toplotu i opasnu neoplazmu kao njusproizvod.\nDolazi do jake eksplozije ako neoplasma se ne ispusti iz reaktora pomoću cevi. +block.build-tower.description = Automatski gradi uništene građevine i pomaže drugim jedinicama u izgradnji novih. block.regen-projector.description = Slowly repairs allied structures in a square perimeter. Requires hydrogen. block.reinforced-container.description = Stores a small amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. block.reinforced-vault.description = Stores a large amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. -block.tank-fabricator.description = Constructs Stell units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.ship-fabricator.description = Constructs Elude units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.mech-fabricator.description = Constructs Merui units. Outputted units can be used directly, or moved into refabricators for upgrading. +block.tank-fabricator.description = Proizvodi Stell jedinice. Proizvod se može odmah koristiti, ili pomeren u refabrikatore za doradu. +block.ship-fabricator.description = Proizvodi Elude jedinice. Proizvod se može odmah koristiti, ili pomeren u refabrikatore za doradu. +block.mech-fabricator.description = Proizvodi Merui jedinice. Proizvod se može odmah koristiti, ili pomeren u refabrikatore za doradu. block.tank-assembler.description = Assembles large tanks out of inputted blocks and units. Output tier may be increased by adding modules. block.ship-assembler.description = Assembles large ships out of inputted blocks and units. Output tier may be increased by adding modules. block.mech-assembler.description = Assembles large mechs out of inputted blocks and units. Output tier may be increased by adding modules. -block.tank-refabricator.description = Upgrades inputted tank units to the second tier. -block.ship-refabricator.description = Upgrades inputted ship units to the second tier. -block.mech-refabricator.description = Upgrades inputted mech units to the second tier. -block.prime-refabricator.description = Upgrades inputted units to the third tier. +block.tank-refabricator.description = Dorađuje ubačene tenkovske jedinice u drugi tier. +block.ship-refabricator.description = Dorađuje ubačene brodne jedinice u drugi tier. +block.mech-refabricator.description = Dorađuje ubačene mečanske jedinice u drugi tier. +block.prime-refabricator.description = Dorađuje ubačene jedinice u treći tier. block.basic-assembler-module.description = Increases assembler tier when placed next to a construction boundary. Requires power. Can be used as a payload input. block.small-deconstructor.description = Deconstructs inputted structures and units. Returns 100% of the build cost. -block.reinforced-payload-conveyor.description = Moves payloads forward. +block.reinforced-payload-conveyor.description = Usmeruje tovar ispred. block.reinforced-payload-router.description = Distributes payloads into adjacent blocks. Functions as a sorter when a filter is set. block.payload-mass-driver.description = Long-range payload transport structure. Shoots received payloads to linked payload mass drivers. -block.unit-repair-tower.description = Repairs all units in its vicinity. Requires ozone. +block.unit-repair-tower.description = Popravlja sve jedinice u blizine. Zahteva ozon. block.radar.description = Gradually uncovers terrain and enemy units in a large radius. Requires power. block.shockwave-tower.description = Damages and destroys enemy projectiles in a radius. Requires cyanogen. diff --git a/core/assets/bundles/bundle_sv.properties b/core/assets/bundles/bundle_sv.properties index 33f75bee78..bdb83233bd 100644 --- a/core/assets/bundles/bundle_sv.properties +++ b/core/assets/bundles/bundle_sv.properties @@ -173,6 +173,10 @@ filename = Filnamn: unlocked = Nytt innehåll upplåst! available = Ny forskning tillgänglig! unlock.incampaign = < Lås upp i kampanjen för detaljer > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Avklarad techtree = Teknologiträd techtree.select = Teknologiträd Väljare @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 32223230ff..2e7efc97b0 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -176,6 +176,10 @@ filename = ชื่อไฟล์: unlocked = เนื้อหาใหม่ปลดล็อก! available = มีการวิจัยใหม่พร้อมปลดล็อก! unlock.incampaign = < ปลดล็อกในแคมเปญเพื่อดูรายละเอียด > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]วิจัยแล้ว techtree = ต้นไม้เทคโนโลยี techtree.select = เลือกต้นไม้เทคโนโลยี @@ -744,7 +748,7 @@ sector.impact0078.description = ณ ที่แห่งนี้คือเ sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น sector.onset.name = การเริ่มต้น sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_tk.properties b/core/assets/bundles/bundle_tk.properties index bfcb0f072a..65d1b12ddb 100644 --- a/core/assets/bundles/bundle_tk.properties +++ b/core/assets/bundles/bundle_tk.properties @@ -173,6 +173,10 @@ filename = File Name: unlocked = Yeni yapi acildi!! available = New research available! unlock.incampaign = < Unlock in campaign for details > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Completed techtree = Tech Tree techtree.select = Tech Tree Selection @@ -733,7 +737,7 @@ sector.impact0078.description = Here lie remnants of the interstellar transport 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. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 1574709241..52b7d0b4a2 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -176,6 +176,10 @@ filename = Dosya Adı: unlocked = Yeni içerik açıldı! available = Yeni Araştırma Mümkün! unlock.incampaign = < Detaylar için Mücadelede Araştır > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Tamamlandı techtree = Teknoloji Ağacı techtree.select = Teknoloji Ağacı Seç diff --git a/core/assets/bundles/bundle_uk_UA.properties b/core/assets/bundles/bundle_uk_UA.properties index 2755a93b18..8ed0079c3d 100644 --- a/core/assets/bundles/bundle_uk_UA.properties +++ b/core/assets/bundles/bundle_uk_UA.properties @@ -176,6 +176,10 @@ filename = Назва файлу: unlocked = Доступний новий вміст! available = Нове дослідження доступно! unlock.incampaign = < Розблокуйте в кампанії для отримання подробиць > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Завершено techtree = Дерево технологій techtree.select = Вибір дерева технологій diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index 20e4c87231..3f890a8ced 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -176,6 +176,10 @@ filename = Tên tệp: unlocked = Đã mở khóa nội dung mới! available = Đã có mục nghiên cứu mới! unlock.incampaign = < Mở khóa trong chiến dịch để biết chi tiết > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]Hoàn tất techtree = Tiến trình techtree.select = Tech Tree Selection @@ -744,7 +748,7 @@ sector.impact0078.description = Đây là tàn tích của tàu vận chuyển g sector.planetaryTerminal.description = Mục tiêu cuối cùng.\n\nCăn cứ ven biển này chứa một cấu trúc có khả năng phóng căn cứ tới các hành tinh địa phương. Nó được bảo vệ cực kỳ cẩn thận.\n\nSản xuất quân lính hải quân. Loại bỏ kẻ thù càng nhanh càng tốt. Nghiên cứu cấu trúc phóng. sector.onset.name = The Onset sector.aegis.name = Aegis -sector.lake.name = Name +sector.lake.name = Lake sector.intersect.name = Intersect sector.atlas.name = Atlas sector.split.name = Split diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index e24b3c5432..7b9dc363ce 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -14,7 +14,7 @@ link.f-droid.description = F-Droid 页面 link.wiki.description = Mindustry 官方 Wiki link.suggestions.description = 提出新特性的建议 link.bug.description = 发现了 Bug ?在这里报告 -linkopen = This server has sent you a link. Are you sure you want to open it?\n\n[sky]{0} +linkopen = 这个服务器向您发送了一条链接,你确定想要打开它吗?\n\n[sky]{0} linkfail = 打开链接失败!\n网址已复制到您的剪贴板。 screenshot = 屏幕截图已保存到 {0} screenshot.invalid = 地图太大,可能没有足够的内存用于截图。 @@ -169,13 +169,17 @@ mod.scripts.disable = 您的设备不支持含有脚本的模组,必须禁用 about.button = 关于 name = 名字: noname = 先取一个[accent]玩家名称[]。 -search = Search: +search = 搜索: planetmap = 行星地图 launchcore = 发射核心 filename = 文件名: unlocked = 解锁了新内容! available = 可研究新科技! unlock.incampaign = < 在战役中解锁以显示详情 > +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]己研究 techtree = 科技树 techtree.select = 切换科技树 @@ -232,7 +236,7 @@ servers.disclaimer = 社区服务器[accent]并非[]由开发者拥有或管理 servers.showhidden = 显示隐藏的服务器 server.shown = 显示 server.hidden = 隐藏 -viewplayer = Viewing Player: [accent]{0} +viewplayer = 查看玩家: [accent]{0} trace = 跟踪玩家 trace.playername = 玩家名称:[accent]{0} @@ -727,42 +731,42 @@ sector.planetaryTerminal.name = 行星发射终端 sector.coastline.name = 边际海湾 sector.navalFortress.name = 海军要塞 -sector.groundZero.description = 踏上旅程的最佳位置。 这里的敌人威胁很小,但资源也少。 \n\n尽你所能收集铅和铜,出发吧! -sector.frozenForest.description = 一个靠近山脉的地方。 哪怕是在这里,也有了孢子扩散的痕迹。 \n连极寒也无法长久地约束它们。 \n\n开始运用电力,建造火力发电机并学会使用修理器。 -sector.saltFlats.description = 盐碱荒滩,位于沙漠的边缘地带,几乎没有什么资源。 \n敌人在这里建立了一个资源存储区。 \n\n摧毁他们的核心,片甲不留。 -sector.craters.description = 这片陨石地带有积水,它也是旧时战争的遗迹。 \n\n夺下该区块,收集沙子冶炼玻璃。 \n用水泵抽水加速炮塔和钻头。 -sector.ruinousShores.description = 穿过荒地就是海滩。 \n这里曾经有一条海岸防线,但现在已所剩无几。 \n一些基础的防御建筑还完好无损,除此之外都变成了废墟。 \n\n继续向外扩张并研究科技。 -sector.stainedMountains.description = 深入内陆地区便是山脉,这里目前还未被孢子污染。 \n敌人势力更加强大,别给他们的精锐部队留下喘息之机。\n\n这一地区分布着丰富的钛,试着开采并利用它。 -sector.overgrowth.description = 这里的孢子靠近它最初的发源地,因此得以疯狂生长。 \n\n敌人在此处建立了一个前哨站,建造尖刀单位来摧毁它。 -sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。 它是为数不多蕴藏了石油的地区之一。 \n尽管这里一片废墟,附近仍有一些危险的敌方单位。 不要低估他们。 \n\n[lightgray]尽你所能研究石油加工技术。 -sector.desolateRift.description = 非常危险的区块,资源丰富但空间狭窄,敌人也十分危险。 \n\n尽快发展与防御,不要因敌人的进攻间隔太长而掉以轻心。 -sector.nuclearComplex.description = 曾用来生产加工钍的设施,如今已变成了废墟。 \n这里有大量的敌人,不断搜寻着入侵者。\n\n[lightgray]研究钍以及它的各种用途。 -sector.fungalPass.description = 一边是高山,另一边是孢子丛生的平原。 \n这里有一个敌方的小型侦察基地,摧毁它。 \n\n使用尖刀和爬虫单位,摧毁两个核心。 -sector.biomassFacility.description = 孢子的发源地,有研究和生产孢子的原始设施。 \n[lightgray]设施损毁后,孢子散播了出去,原生生态系统完全无法抵挡这种外来物种。 \n\n研究这里的科技,培养孢子来制造燃料和聚合物。 -sector.windsweptIslands.description = 海岸线之外坐落着这一串群岛。 据记载这里曾有生产[accent]塑钢[]的建筑。\n\n抵御敌人的海军,在岛上建立基地,研究生产建筑。 -sector.extractionOutpost.description = 一座遥远的前哨,敌人建造它向其他区块发射资源。 \n跨区块运输是征服这个星球不可或缺的一项技术。 \n\n摧毁敌方基地,研究发射台。 -sector.impact0078.description = 最初进入这个星系的星际运输船,残骸留在了这里。 \n\n尽量回收可以利用的资源,研究科技。 -sector.planetaryTerminal.description = 最终目标。 \n这座滨海基地有一个可以将核心发射到其他行星的建筑,防卫森严。 \n\n制造海军单位,尽快消灭敌人,研究发射建筑。 +sector.groundZero.description = 踏上旅程的最佳位置。 这里的敌人威胁很小,但资源也少。\n\n尽你所能收集铅和铜,出发吧! +sector.frozenForest.description = 一个靠近山脉的地方。 哪怕是在这里,也有了孢子扩散的痕迹。\n连极寒也无法长久地约束它们。\n\n开始运用电力,建造火力发电机并学会使用修理器。 +sector.saltFlats.description = 盐碱荒滩,位于沙漠的边缘地带,几乎没有什么资源。\n敌人在这里建立了一个资源存储区。\n\n摧毁他们的核心,片甲不留。 +sector.craters.description = 这片陨石地带有积水,它也是旧时战争的遗迹。\n\n夺下该区块,收集沙子冶炼玻璃。\n用水泵抽水加速炮塔和钻头。 +sector.ruinousShores.description = 穿过荒地就是海滩。\n这里曾经有一条海岸防线,但现在已所剩无几。\n一些基础的防御建筑还完好无损,除此之外都变成了废墟。\n\n继续向外扩张并研究科技。 +sector.stainedMountains.description = 深入内陆地区便是山脉,这里目前还未被孢子污染。\n敌人势力更加强大,别给他们的精锐部队留下喘息之机。\n\n这一地区分布着丰富的钛,试着开采并利用它。 +sector.overgrowth.description = 这里的孢子靠近它最初的发源地,因此得以疯狂生长。\n\n敌人在此处建立了一个前哨站,建造尖刀单位来摧毁它。 +sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。 它是为数不多蕴藏了石油的地区之一。\n尽管这里一片废墟,附近仍有一些危险的敌方单位。 不要低估他们。\n\n[lightgray]尽你所能研究石油加工技术。 +sector.desolateRift.description = 非常危险的区块,资源丰富但空间狭窄,敌人也十分危险。\n\n尽快发展与防御,不要因敌人的进攻间隔太长而掉以轻心。 +sector.nuclearComplex.description = 曾用来生产加工钍的设施,如今已变成了废墟。\n这里有大量的敌人,不断搜寻着入侵者。\n\n[lightgray]研究钍以及它的各种用途。 +sector.fungalPass.description = 一边是高山,另一边是孢子丛生的平原。\n这里有一个敌方的小型侦察基地,摧毁它。\n\n使用尖刀和爬虫单位,摧毁两个核心。 +sector.biomassFacility.description = 孢子的发源地,有研究和生产孢子的原始设施。\n[lightgray]设施损毁后,孢子散播了出去,原生生态系统完全无法抵挡这种外来物种。\n\n研究这里的科技,培养孢子来制造燃料和聚合物。 +sector.windsweptIslands.description = 海岸线之外坐落着这一串群岛。 据记载这里曾有生产[accent]塑钢[]的建筑。\n\n抵御敌人的海军,在岛上建立基地,研究生产建筑。 +sector.extractionOutpost.description = 一座遥远的前哨,敌人建造它向其他区块发射资源。\n跨区块运输是征服这个星球不可或缺的一项技术。\n\n摧毁敌方基地,研究发射台。 +sector.impact0078.description = 最初进入这个星系的星际运输船,残骸留在了这里。\n\n尽量回收可以利用的资源,研究科技。 +sector.planetaryTerminal.description = 最终目标。\n这座滨海基地有一个可以将核心发射到其他行星的建筑,防卫森严。\n\n制造海军单位,尽快消灭敌人,研究发射建筑。 sector.onset.name = 始发地区 sector.aegis.name = 庇护前哨 sector.lake.name = 岩浆湖 sector.intersect.name = 交错丘陵 sector.atlas.name = 风化山脉 sector.split.name = 横断山谷 -sector.basin.name = 芳油盆地 -sector.marsh.name = Marsh -sector.peaks.name = Peaks -sector.ravine.name = Ravine -sector.caldera-erekir.name = Caldera -sector.onset.description = 教学区块。区块目标未设立,等待进一步指示。 +sector.basin.name = 风蚀盆地 +sector.marsh.name = 芳油湿地 +sector.peaks.name = 横堑峰峦 +sector.ravine.name = 贫瘠峡谷 +sector.caldera-erekir.name = 破碎火山 +sector.onset.description = 教学区块。 区块目标未设立,等待进一步指示。 sector.aegis.description = 敌人被护盾保护着,不过这里也探测到一台实验性的护盾破坏器。\n找到它,并为它输送一些钨作为弹药,然后摧毁敌方基地。 sector.lake.description = 这个区块的岩浆湖限制了大部分单位的移动,悬浮单位是唯一选择。\n尽快研究[accent]飞船制造厂[]并生产一个[accent]挣脱[]。 sector.intersect.description = 扫描显示,这个区块在着陆后不久将受到多方向的攻击。\n迅速建立防御并尽快扩张。\n[accent]机甲[]单位可用于在这里的崎岖地形活动。 sector.atlas.description = 这个区块包含了各种地形,需要多兵种配合进行有效进攻。\n这里发现的一些更为坚固的敌方基地需要使用高级单位摧毁。\n研究[accent]电解机[]和[accent]坦克重构厂[]。 sector.split.description = 这个区块的敌人数量很少,非常适合测试新的运输技术。 -sector.basin.description = {临时}\n目前的最终区块。把它当作一个挑战 - 更多的区块将在之后发布。 -sector.ravine.description = No enemy cores detected in the sector, although it's an important transportation route for the enemy. Expect variety of enemy forces.\nProduce [accent]surge alloy[]. Construct [accent]Afflict[] turrets. -sector.caldera-erekir.description = Temporary description. +sector.basin.description = 这个区块探测到了大量敌人。\n快速生产单位并俘获敌人核心以在此地立足。 +sector.ravine.description = 这个区块虽然是敌人的重要运输路线,但在该区域内未检测到敌方核心。 预计会有各种各样的敌军。\n尽快生产[accent]巨浪合金[]并建筑[accent]劫难[]炮塔。 +sector.caldera-erekir.description = 暂无描述。 status.burning.name = 燃烧 status.freezing.name = 冻结 @@ -898,7 +902,7 @@ ability.statusfield = {0}状态场 ability.unitspawn = {0}单位工厂 ability.shieldregenfield = 护盾再生场 ability.movelightning = 闪电助推器 -ability.shieldarc = Shield Arc +ability.shieldarc = 弧形护盾 ability.energyfield = 能量场:[accent]{0}[]伤害~[accent]{1}[]格/[accent]{2}[]目标 bar.onlycoredeposit = 仅核心可丢入资源 @@ -1147,7 +1151,7 @@ rules.coreincinerates = 核心焚烧 rules.disableworldprocessors = 禁用世界处理器 rules.schematic = 允许使用蓝图 rules.wavetimer = 波次计时器 -rules.wavesending = Wave Sending +rules.wavesending = 波次可跳波 rules.waves = 波次 rules.attack = 进攻模式 rules.rtsai = RTS AI @@ -1228,13 +1232,13 @@ item.beryllium.name = 铍 item.tungsten.name = 钨 item.oxide.name = 氧化物 item.carbide.name = 碳化物 -item.dormant-cyst.name = Dormant Cyst +item.dormant-cyst.name = 休眠囊肿 liquid.water.name = 水 liquid.slag.name = 矿渣 liquid.oil.name = 石油 liquid.cryofluid.name = 冷冻液 -liquid.neoplasm.name = Neoplasm +liquid.neoplasm.name = 瘤液 liquid.arkycite.name = 芳油 liquid.gallium.name = 镓 liquid.ozone.name = 臭氧 @@ -1303,7 +1307,7 @@ unit.assembly-drone.name = 装配无人机 unit.latum.name = Latum unit.renale.name = Renale -block.parallax.name = 差扰光束 +block.parallax.name = 差扰 block.cliff.name = 悬崖 block.sand-boulder.name = 砂岩 block.basalt-boulder.name = 玄武岩石块 @@ -1454,7 +1458,7 @@ block.vault.name = 仓库 block.wave.name = 波浪 block.tsunami.name = 海啸 block.swarmer.name = 蜂群 -block.salvo.name = 齐射炮 +block.salvo.name = 齐射 block.ripple.name = 浪涌 block.phase-conveyor.name = 相织布传送带桥 block.bridge-conveyor.name = 传送带桥 @@ -1498,7 +1502,7 @@ block.meltdown.name = 熔毁 block.foreshadow.name = 厄兆 block.container.name = 容器 block.launch-pad.name = 发射台 -block.segment.name = 裂解光束 +block.segment.name = 裂解 block.ground-factory.name = 陆军工厂 block.air-factory.name = 空军工厂 block.naval-factory.name = 海军工厂 @@ -1679,7 +1683,7 @@ block.basic-assembler-module.name = 基本装配厂模块 block.smite.name = 天谴 block.malign.name = 魔灵 block.flux-reactor.name = 通量反应堆 -block.neoplasia-reactor.name = Neoplasia Reactor +block.neoplasia-reactor.name = 瘤变反应堆 block.switch.name = 开关 block.micro-processor.name = 微型处理器 @@ -1761,22 +1765,22 @@ item.spore-pod.description = 用于转化成石油、 爆炸混合物或作为 item.spore-pod.details = 孢子。 可能是人工合成的生命形式,释放对其他生物有毒的气体,极具侵略性。 在某些条件下高度易燃。 item.blast-compound.description = 用作炸弹或爆炸性弹药。 item.pyratite.description = 用于火焰发射类武器和使用燃料的发电设备。 -item.beryllium.description = Used in many types of construction and ammunition on Erekir. -item.tungsten.description = Used in drills, armor and ammunition. Required in the construction of more advanced structures. -item.oxide.description = Used as a heat conductor and insulator for power. -item.carbide.description = Used in advanced structures, heavier units, and ammunition. +item.beryllium.description = 用于埃里克尔的多种建筑和弹药。 +item.tungsten.description = 用于钻头、 装甲和弹药。 用于建造更先进的建筑。 +item.oxide.description = 用作热导体和绝缘体。 +item.carbide.description = 用于先进的建筑、 重型单位和弹药。 liquid.water.description = 用于冷却机器和废物处理。 liquid.slag.description = 在分离器中提炼成金属成分,或作为武器弹药喷向敌人。 liquid.oil.description = 用于先进材料生产和喷射类武器。 liquid.cryofluid.description = 用作反应堆、 炮塔和工厂的冷却剂。 -liquid.arkycite.description = Used in chemical reactions for power generation and material synthesis. -liquid.ozone.description = Used as an oxidizing agent in material production, and as fuel. Moderately explosive. -liquid.hydrogen.description = Used in resource extraction, unit production and structure repair. Flammable. -liquid.cyanogen.description = Used for ammunition, construction of advanced units, and various reactions in advanced blocks. Highly flammable. -liquid.nitrogen.description = Used in resource extraction, gas creation and unit production. Inert. -liquid.neoplasm.description = A dangerous biological byproduct of the Neoplasia reactor. Quickly spreads to any adjacent water-containing block it touches, damaging them in the process. Viscous. -liquid.neoplasm.details = Neoplasm. An uncontrollable mass of rapidly-dividing synthetic cells with a sludge-like consistency. Heat-resistant. Extremely dangerous to any structures involving water.\n\nToo complex and unstable for standard analysis. Potential applications unknown. Incineration in slag pools is recommended. +liquid.arkycite.description = 用于发电和合成材料的化学反应。 +liquid.ozone.description = 用作材料生产的氧化剂和燃料。 有一定爆炸性。 +liquid.hydrogen.description = 用于资源开采、 单位生产和结构修复。 易燃。 +liquid.cyanogen.description = 用于构建高级建筑和单位,也用作弹药。 高度易燃。 +liquid.nitrogen.description = 用于资源开采、 气体生产和单位生产。 +liquid.neoplasm.description = 瘤变反应堆产出的危险生物性副产物。 会很快扩散至它能接触到的含水方块并破坏它们。 有粘性。 +liquid.neoplasm.details = 瘤液。 由一种无法控制并快速分裂的合成细胞团组成,具有污泥状的粘稠度。 耐热。 对任何含有水的结构极为危险。\n\n从标准分析来看过于复杂和不稳定,潜在的应用未知。 建议在矿渣池中焚毁。 block.derelict = \uf77e[lightgray]废墟 block.armored-conveyor.description = 向前运输物品,不接受侧面输入,除非来自其他传送带。 @@ -1788,7 +1792,7 @@ block.silicon-smelter.description = 将沙和煤炭精炼为硅。 block.kiln.description = 将沙和铅熔炼为钢化玻璃。 block.plastanium-compressor.description = 用石油和钛生产塑钢。 block.phase-weaver.description = 用钍和沙合成相织布。 -block.surge-smelter.description = 将钛、 铅、 硅和铜熔成成巨浪合金。 +block.surge-smelter.description = 将钛、 铅、 硅和铜熔炼成巨浪合金。 block.cryofluid-mixer.description = 将水和细钛粉混合制成冷冻液。 block.blast-mixer.description = 利用硫化物和孢子荚生产爆炸混合物。 block.pyratite-mixer.description = 把煤炭、 铅和沙子混合成硫化物。 @@ -1820,14 +1824,14 @@ block.surge-wall.description = 保护己方建筑,挡下敌方炮弹。 受攻 block.surge-wall-large.description = 保护己方建筑,挡下敌方炮弹。 受攻击时间断释放电弧。 block.door.description = 可以开关的墙。 block.door-large.description = 可以开关的墙。 -block.mender.description = 定期修复附近的建筑。 \n可使用硅提高范围和效率。 -block.mend-projector.description = 定期修复附近的建筑。 \n可使用相织布提高范围和效率。 -block.overdrive-projector.description = 提升附近建筑的工作效率。 \n可使用相织布提高范围和效率。 -block.force-projector.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.titanium-conveyor.description = 向前运输物品,比初级传送带更快。 -block.plastanium-conveyor.description = 打包物品进行运输。 \n从后方输入物品,三个方向输出物品。 需要多个装载和卸载点才能达到最大吞吐量。 +block.plastanium-conveyor.description = 打包物品进行运输。\n从后方输入物品,三个方向输出物品。 需要多个装载和卸载点才能达到最大吞吐量。 block.junction.description = 两条交叉传送带的桥梁。 block.bridge-conveyor.description = 跨越任意地形或建筑运输物品。 block.phase-conveyor.description = 跨越任意地形或建筑即时运输物品。 比传送带桥范围更大,但需要电力。 @@ -1846,7 +1850,7 @@ block.conduit.description = 向前传输液体。 与泵或者其他导管联合 block.pulse-conduit.description = 向前传输液体。 比普通导管传输液体更快,且能储存更多液体。 block.plated-conduit.description = 向前传输液体,不接受侧面输入。 不会发生泄露。 block.liquid-router.description = 接受一个方向的液体输入,并平均输出到其他3个方向。 可以储存一定量的液体。 -block.liquid-container.description = 储存可观数量的液体,并像液体路由器一样朝各个方向输出液体。 +block.liquid-container.description = 储存数量可观的液体,并像液体路由器一样朝各个方向输出液体。 block.liquid-tank.description = 储存大量的液体,并像液体路由器一样朝各个方向输出液体。 block.liquid-junction.description = 两条交叉导管的桥梁。 block.bridge-conduit.description = 跨越任意地形或建筑物传输液体。 @@ -1927,153 +1931,153 @@ block.large-logic-display.description = 显示处理器中绘制的各种图形 block.interplanetary-accelerator.description = 一个巨大的电磁轨道加速器。 将核心加速至逃逸速度以进行星际部署。 block.repair-turret.description = 持续修复范围内受损的单位。 可以用冷却液强化。 block.payload-propulsion-tower.description = 远距载荷运送建筑。 向相连的其他载荷驱动器发射载荷。 -block.core-bastion.description = Core of the base. Armored. Once destroyed, the sector is lost. -block.core-citadel.description = Core of the base. Very well armored. Stores more resources than a Bastion core. -block.core-acropolis.description = Core of the base. Exceptionally well armored. Stores more resources than a Citadel core. -block.breach.description = Fires piercing beryllium or tungsten ammunition at enemy targets. -block.diffuse.description = Fires a burst of bullets in a wide cone. Pushes enemy targets back. -block.sublimate.description = Fires a continuous jet of flame at enemy targets. Pierces armor. -block.titan.description = Fires a massive explosive artillery shell at ground targets. Requires hydrogen. -block.afflict.description = Fires a massive charged orb of fragmentary flak. Requires heating. -block.disperse.description = Fires bursts of flak at aerial targets. -block.lustre.description = Fires a slow-moving single-target laser at enemy targets. -block.scathe.description = Launches a powerful missile at ground targets over vast distances. -block.smite.description = Fires bursts of piercing, lightning-emitting bullets. -block.malign.description = Fires a barrage of homing laser charges at enemy targets. Requires extensive heating. -block.silicon-arc-furnace.description = Refines silicon from sand and graphite. -block.oxidation-chamber.description = Converts beryllium and ozone into oxide. Emits heat as a by-product. -block.electric-heater.description = Heats facing blocks. Requires large amounts of power. -block.slag-heater.description = Heats facing blocks. Requires slag. -block.phase-heater.description = Heats facing blocks. Requires phase fabric. -block.heat-redirector.description = Redirects accumulated heat to other blocks. -block.electrolyzer.description = Converts water into hydrogen and ozone gas. -block.atmospheric-concentrator.description = Concentrates nitrogen from the atmosphere. Requires heat. -block.surge-crucible.description = Forms surge alloy from slag and silicon. Requires heat. -block.phase-synthesizer.description = Synthesizes phase fabric from thorium, sand, and ozone. Requires heat. -block.carbide-crucible.description = Fuses graphite and tungsten into carbide. Requires heat. -block.cyanogen-synthesizer.description = Synthesizes cyanogen from arkycite and graphite. Requires heat. -block.slag-incinerator.description = Incinerates non-volatile items or liquids. Requires slag. -block.vent-condenser.description = Condenses vent gases into water. Consumes power. -block.plasma-bore.description = When placed facing an ore wall, outputs items indefinitely. Requires small amounts of power. -block.large-plasma-bore.description = A larger plasma bore. Capable of mining tungsten and thorium. Requires hydrogen and power. -block.cliff-crusher.description = Crushes walls, outputting sand indefinitely. Requires power. Efficiency varies based on type of wall. -block.impact-drill.description = When placed on ore, outputs items in bursts indefinitely. Requires power and water. -block.eruption-drill.description = An improved impact drill. Capable of mining thorium. Requires hydrogen. -block.reinforced-conduit.description = Moves fluids forward. Doesn't accept non-conduit inputs to the sides. -block.reinforced-liquid-router.description = Distributes fluids equally to all sides. -block.reinforced-junction.description = Acts as a bridge for two crossing conduits. -block.reinforced-liquid-tank.description = Stores a large amount of fluids. -block.reinforced-liquid-container.description = Stores a sizeable amount of fluids. -block.reinforced-bridge-conduit.description = Transports fluids over structures and terrain. -block.reinforced-pump.description = Pumps and outputs liquids. Requires hydrogen. -block.beryllium-wall.description = Protects structures from enemy projectiles. -block.beryllium-wall-large.description = Protects structures from enemy projectiles. -block.tungsten-wall.description = Protects structures from enemy projectiles. -block.tungsten-wall-large.description = Protects structures from enemy projectiles. -block.carbide-wall.description = Protects structures from enemy projectiles. -block.carbide-wall-large.description = Protects structures from enemy projectiles. -block.reinforced-surge-wall.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.reinforced-surge-wall-large.description = Protects structures from enemy projectiles, periodically launching electric arcs upon projectile contact. -block.shielded-wall.description = Protects structures from enemy projectiles. Deploys a shield that absorbs most projectiles when power is provided. Conducts power. -block.blast-door.description = A wall that opens when allied ground units are in range. Cannot be manually controlled. -block.duct.description = Moves items forward. Only capable of storing a single item. -block.armored-duct.description = Moves items forward. Does not accept non-duct inputs from the sides. -block.duct-router.description = Distributes items equally across three directions. Only accepts items from the back side. Can be configured as an item sorter. -block.overflow-duct.description = Only outputs items to the sides if the front path is blocked. -block.duct-bridge.description = Moves items over structures and terrain. -block.duct-unloader.description = Unloads the selected item from the block behind it. Cannot unload from cores. -block.underflow-duct.description = Opposite of an overflow duct. Outputs to the front if the left and right paths are blocked. -block.reinforced-liquid-junction.description = Acts as a junction between two crossing conduits. -block.surge-conveyor.description = Moves items in batches. Can be sped up with power. Conducts power. -block.surge-router.description = Equally distributes items in three directions from surge conveyors. Can be sped up with power. Conducts power. -block.unit-cargo-loader.description = Constructs cargo drones. Drones automatically distribute items to Cargo Unload Points with a matching filter. -block.unit-cargo-unload-point.description = Acts as an unloading point for cargo drones. Accepts items that match the selected filter. -block.beam-node.description = Transmits power to other blocks orthogonally. Stores a small amount of power. -block.beam-tower.description = Transmits power to other blocks orthogonally. Stores a large amount of power. Long-range. -block.turbine-condenser.description = Generates power when placed on vents. Produces a small amount of water. -block.chemical-combustion-chamber.description = Generates power from arkycite and ozone. -block.pyrolysis-generator.description = Generates large amounts of power from arkycite and slag. Produces water as a byproduct. -block.flux-reactor.description = Generates large amounts of power when heated. Requires cyanogen as a stabilizer. Power output and cyanogen requirements are proportional to heat input.\nExplodes if insufficient cyanogen is provided. -block.neoplasia-reactor.description = Uses arkycite, water and phase fabric to generate large amounts of power. Produces heat and dangerous neoplasm as a byproduct.\nExplodes violently if neoplasm is not removed from the reactor via conduits. -block.build-tower.description = Automatically rebuilds structures in range and assists other units in construction. -block.regen-projector.description = Slowly repairs allied structures in a square perimeter. Requires hydrogen. -block.reinforced-container.description = Stores a small amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. -block.reinforced-vault.description = Stores a large amount of items. Contents can be retrieved via unloaders. Does not increase core storage capacity. -block.tank-fabricator.description = Constructs Stell units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.ship-fabricator.description = Constructs Elude units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.mech-fabricator.description = Constructs Merui units. Outputted units can be used directly, or moved into refabricators for upgrading. -block.tank-assembler.description = Assembles large tanks out of inputted blocks and units. Output tier may be increased by adding modules. -block.ship-assembler.description = Assembles large ships out of inputted blocks and units. Output tier may be increased by adding modules. -block.mech-assembler.description = Assembles large mechs out of inputted blocks and units. Output tier may be increased by adding modules. -block.tank-refabricator.description = Upgrades inputted tank units to the second tier. -block.ship-refabricator.description = Upgrades inputted ship units to the second tier. -block.mech-refabricator.description = Upgrades inputted mech units to the second tier. -block.prime-refabricator.description = Upgrades inputted units to the third tier. -block.basic-assembler-module.description = Increases assembler tier when placed next to a construction boundary. Requires power. Can be used as a payload input. -block.small-deconstructor.description = Deconstructs inputted structures and units. Returns 100% of the build cost. -block.reinforced-payload-conveyor.description = Moves payloads forward. -block.reinforced-payload-router.description = Distributes payloads into adjacent blocks. Functions as a sorter when a filter is set. -block.payload-mass-driver.description = Long-range payload transport structure. Shoots received payloads to linked payload mass drivers. -block.unit-repair-tower.description = Repairs all units in its vicinity. Requires ozone. -block.radar.description = Gradually uncovers terrain and enemy units in a large radius. Requires power. -block.shockwave-tower.description = Damages and destroys enemy projectiles in a radius. Requires cyanogen. +block.core-bastion.description = 基地的核心。 拥有装甲。 一旦被摧毁,此区块就会丢失。 +block.core-citadel.description = 基地的核心。 装甲优良。 容量比城堡核心更大。 +block.core-acropolis.description = 基地的核心。 装甲极佳。 容量比堡垒核心更大。 +block.breach.description = 向敌人发射铍或钨穿透子弹。 +block.diffuse.description = 向前方锥形区域发射子弹。 并把敌人击退。 +block.sublimate.description = 向敌人持续喷射火焰。 穿透敌方装甲。 +block.titan.description = 向地面敌人发射巨大的爆炸炮弹。 需要氢气。 +block.afflict.description = 向敌人发射巨大的带电碎片弹。 需要热量。 +block.disperse.description = 向空中敌人发射高射炮弹。 +block.lustre.description = 向敌人发射慢速单目标的激光。 +block.scathe.description = 向远距离地面敌人发射威力强大的导弹。 +block.smite.description = 向敌人发射放电穿透子弹。 +block.malign.description = 向敌方发射一连串的激光导弹。 需要大量的热量。 +block.silicon-arc-furnace.description = 将沙和石墨精炼成硅。 +block.oxidation-chamber.description = 将铍和臭氧转化为氧化物。 副产出热量。 +block.electric-heater.description = 加热朝向的建筑。 需要大量电力。 +block.slag-heater.description = 加热朝向的建筑。 需要矿渣。 +block.phase-heater.description = 加热朝向的建筑。 需要相织布。 +block.heat-redirector.description = 将累积的热量传输到其他建筑。 +block.electrolyzer.description = 将水电解为氢和臭氧气体。 +block.atmospheric-concentrator.description = 从大气中浓缩氮气。 需要热量。 +block.surge-crucible.description = 将矿渣和硅合成巨浪合金。 需要热量。 +block.phase-synthesizer.description = 将钍、沙子和臭氧合成相织布。 需要热量。 +block.carbide-crucible.description = 将石墨和钨熔化为碳化物。 需要热量。 +block.cyanogen-synthesizer.description = 将芳油和石墨合成氰。 需要热量。 +block.slag-incinerator.description = 焚烧稳定的物品和液体。 需要矿渣。 +block.vent-condenser.description = 将排出的水蒸气冷凝成水。 消耗电力。 +block.plasma-bore.description = 面向矿壁放置时,以缓慢的速度无限产出物品。 需要少量电力。 +block.large-plasma-bore.description = 更大的等离子钻机。 能够开采钨和钍。 需要氢气和电力。 +block.cliff-crusher.description = 粉碎墙壁,以缓慢的速度无限产出沙子。 需要电力。 效率因墙的类型而异。 +block.impact-drill.description = 放置在矿物上时,以缓慢的速度无限产出物品。 需要电力和水。 +block.eruption-drill.description = 改进过的冲击钻头。 能够开采钍。 需要氢。 +block.reinforced-conduit.description = 向前传输流体。 不接受侧面的非导管输入。 +block.reinforced-liquid-router.description = 将流体平均分配到所有侧面方向。 +block.reinforced-junction.description = 两条交叉物品管道的桥梁。 +block.reinforced-liquid-tank.description = 储存大量的流体。 +block.reinforced-liquid-container.description = 储存数量可观的流体。 +block.reinforced-bridge-conduit.description = 跨越任意地形或建筑物传输流体。 +block.reinforced-pump.description = 泵送液体。 需要氢气。 +block.beryllium-wall.description = 保护己方建筑,挡下敌方炮弹。 +block.beryllium-wall-large.description = 保护己方建筑,挡下敌方炮弹。 +block.tungsten-wall.description = 保护己方建筑,挡下敌方炮弹。 +block.tungsten-wall-large.description = 保护己方建筑,挡下敌方炮弹。 +block.carbide-wall.description = 保护己方建筑,挡下敌方炮弹。 +block.carbide-wall-large.description = 保护己方建筑,挡下敌方炮弹。 +block.reinforced-surge-wall.description = 保护己方建筑,挡下敌方炮弹。 受攻击时间断释放电弧。 +block.reinforced-surge-wall-large.description = 保护己方建筑,挡下敌方炮弹。 受攻击时间断释放电弧。 +block.shielded-wall.description = 保护己方建筑,挡下敌方炮弹。 创建一个力场,并在通电时吸收大部分炮弹。 需要电力。 +block.blast-door.description = 当己方地面单位在范围内时自动打开的墙。 无法手动控制。 +block.duct.description = 向前运输物品。 只能存储一个物品。 +block.armored-duct.description = 向前运输物品。 不接受侧面的非管道输入。 +block.duct-router.description = 将物品平均分配到其它3个方向。 只接受背面的物品。 可被配置为分类器。 +block.overflow-duct.description = 当前方被堵塞时才会向两侧输出,用于处理多余的物品。 +block.duct-bridge.description = 跨越任意地形或建筑物传输物品。 +block.duct-unloader.description = 从背后的建筑卸载指定物品。 无法从核心卸载。 +block.underflow-duct.description = 与溢流管道相反。 当两侧均堵塞时才向前运输。 +block.reinforced-liquid-junction.description = 两条交叉强化导管的桥梁。 +block.surge-conveyor.description = 打包物品进行运输。 可以用电力加速。 需要电力。 +block.surge-router.description = 从合金传送带上的物品平均分配到其它3个方向。 可以用电力加速。 需要电力。 +block.unit-cargo-loader.description = 建造货运无人机。 无人机通过需求自动将物品分配到单位物流卸载点。 +block.unit-cargo-unload-point.description = 作为货运无人机的卸货点。接受需求的物品。 +block.beam-node.description = 向其他互相垂直的节点传输电力。 存储少量电力。 +block.beam-tower.description = 向其他互相垂直的节点传输电力。 存储大量电力。 连接距离远。 +block.turbine-condenser.description = 当放置在喷口上时产生电力。 同时产生少量水。 +block.chemical-combustion-chamber.description = 利用芳油和臭氧发电。 +block.pyrolysis-generator.description = 使用矿渣热解芳油产生大量电力。 同时产生水。 +block.flux-reactor.description = 在加热时产生大量电力。 需要氰气作为稳定剂。 电力输出和氰气需求与热量输入成比例。\n如果提供的氰气不足则会爆炸。 +block.neoplasia-reactor.description = 利用芳油、水和相织物产生大量电力。 同时产生热量和危险的瘤液。\n如果瘤液未通过导管从反应堆中移除,则会剧烈爆炸。 +block.build-tower.description = 自动重建范围内的建筑,并在其他单位进行建造时提供协助。 +block.regen-projector.description = 在方形范围内缓慢修复己方建筑。 需要氢气。 +block.reinforced-container.description = 少量存储各种类型的物品。 可使用卸载器卸载物品。 不会增加核心存储容量。 +block.reinforced-vault.description = 大量存储各种类型的物品。 可使用卸载器卸载物品。 不会增加核心存储容量。 +block.tank-fabricator.description = 生产坦克单位。 产出的单位可以直接投入战场,也可以送入重构工厂进行升级。 +block.ship-fabricator.description = 生产飞船单位。 产出的单位可以直接投入战场,也可以送入重构工厂进行升级。 +block.mech-fabricator.description = 生产机甲单位。 产出的单位可以直接投入战场,也可以送入重构工厂进行升级。 +block.tank-assembler.description = 利用输入的方块和单位组装大型坦克。 可以通过添加基本装配厂模块来增加输出等级。 +block.ship-assembler.description = 利用输入的方块和单位组装大型飞船。 可以通过添加基本装配厂模块来增加输出等级。 +block.mech-assembler.description = 利用输入的方块和单位组装大型机甲。 可以通过添加基本装配厂模块来增加输出等级。 +block.tank-refabricator.description = 将输入的坦克单位升级到第二级。 +block.ship-refabricator.description = 将输入的飞船单位升级到第二级。 +block.mech-refabricator.description = 将输入的机甲单位升级到第二级。 +block.prime-refabricator.description = 将输入的单位升级到第三级。 +block.basic-assembler-module.description = 当放置在构造边界旁边时,增加输出等级。 需要电力。 可以用作载荷输入。 +block.small-deconstructor.description = 解构方块和单位,返还100%资源。 +block.reinforced-payload-conveyor.description = 向前运输载荷。 +block.reinforced-payload-router.description = 将载荷向3个方向轮流输出。设置载荷时可用作分类器。 +block.payload-mass-driver.description = 远距离荷载运输建筑。 向相连的其它载荷质量驱动器发射载荷。 +block.unit-repair-tower.description = 修复附近的所有单位。 需要臭氧。 +block.radar.description = 逐渐发现大范围内的地形和敌人单位。 需要电力。 +block.shockwave-tower.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 = 保护终代核心,可建造建筑。 -unit.retusa.description = 向附近的敌人发射追踪鱼雷,并修复己方单位。 -unit.oxynoe.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 = 保护终代核心,可建造建筑。 +unit.retusa.description = 向敌人发射追踪鱼雷,并修复己方单位。 +unit.oxynoe.description = 向敌人发射火焰束,并修复己方建筑。 搭载一台单点防御炮塔,能够防御来袭的子弹。 unit.cyerce.description = 向敌人发射追踪集束导弹,并修复己方单位。 unit.aegires.description = 产生能量场,使范围内的敌方建筑与单位受到电击,对己方则进行修复。 unit.navanax.description = 发射大型电磁爆弹,对敌方电网造成显著破坏并修复己方建筑。 搭载4台自动激光炮台,能熔化靠近的敌人。 -unit.stell.description = Fires standard bullets at enemy targets. -unit.locus.description = Fires alternating bullets at enemy targets. -unit.precept.description = Fires piercing cluster bullets at enemy targets. -unit.vanquish.description = Fires large piercing splitting bullets at enemy targets. -unit.conquer.description = Fires large piercing cascades of bullets at enemy targets. -unit.merui.description = Fires long-range artillery at enemy ground targets. Can step over most terrain. -unit.cleroi.description = Fires dual shells at enemy targets. Targets enemy projectiles with point defense turrets. Can step over most terrain. -unit.anthicus.description = Fires long-range homing missiles at enemy targets. Can step over most terrain. -unit.tecta.description = Fires homing plasma missiles at enemy targets. Protects itself with a directional shield. Can step over most terrain. -unit.collaris.description = Fires long-range fragmenting artillery at enemy targets. Can step over most terrain. -unit.elude.description = Fires pairs of homing bullets at enemy targets. Can float over bodies of liquid. -unit.avert.description = Fires twisting pairs of bullets at enemy targets. -unit.obviate.description = Fires twisting pairs of lightning orbs at enemy targets. -unit.quell.description = Fires long-range homing missiles at enemy targets. Suppresses enemy structure repair blocks. -unit.disrupt.description = Fires long-range homing suppression missiles at enemy targets. Suppresses enemy structure repair blocks. -unit.evoke.description = Builds structures to defend the Bastion core. Repairs structures with a beam. -unit.incite.description = Builds structures to defend the Citadel core. Repairs structures with a beam. -unit.emanate.description = Builds structures to defend the Acropolis core. Repairs structures with beams. +unit.stell.description = 向敌人发射普通子弹。 +unit.locus.description = 向敌人交替发射子弹。 +unit.precept.description = 向敌人发射穿透性集束子弹。 +unit.vanquish.description = 向敌人发射大型穿透性分裂子弹。 +unit.conquer.description = 向敌人发射大量穿透性子弹。 +unit.merui.description = 向地面敌人发射远程火炮。 可以跨越大多数地形。 +unit.cleroi.description = 向敌人发射双发炮弹。 搭载一台单点防御炮塔,能够防御来袭的子弹。 可以跨越大多数地形。 +unit.anthicus.description = 向敌人远距离发射追踪导弹。 可以跨越大多数地形。 +unit.tecta.description = 向敌人发射等离子追踪导弹。 用它前方的护盾保护自己。 可以跨越大多数地形。 +unit.collaris.description = 向敌人远距离发射分裂火炮。 可以跨越大多数地形。 +unit.elude.description = 向敌人发射螺旋状追踪子弹。 可以在液体上悬浮。 +unit.avert.description = 向敌人发射螺旋状扭曲子弹。 +unit.obviate.description = 向敌人发射螺旋状闪电球。 +unit.quell.description = 向敌人远距离发射追踪导弹。 能够压制敌方修复建筑。 +unit.disrupt.description = 向敌人远距离发射压制性追踪导弹。 能够压制敌方修复建筑。 +unit.evoke.description = 保护城堡核心,可建造建筑。 使用激光束修复建筑。 +unit.incite.description = 保护堡垒核心,可建造建筑。 使用激光束修复建筑。 +unit.emanate.description = 保护卫城核心,可建造建筑。 使用一对激光束修复建筑。 lst.read = 从连接的内存读取数字 lst.write = 向连接的内存写入数字 @@ -2089,7 +2093,7 @@ lst.set = 给变量赋值 lst.operation = 使用1至2个参数执行运算/函数 lst.end = 跳转至第一条指令 lst.wait = 等待指定的秒数 -lst.stop = Halt execution of this processor. +lst.stop = 停止该处理器的运行 lst.lookup = 根据ID查阅一种物品/液体/单位/建筑\n各个分类中的项目总数是\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] lst.jump = 根据条件判断,决定是否跳转至另一条指令 lst.unitbind = 绑定某个类型的下一个单位,或直接绑定指定的单位\n并保存至[accent]@unit[] diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 7cffe9854b..477e78d51a 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -176,6 +176,10 @@ filename = 檔案名稱︰ unlocked = 已解鎖新內容! available = 可研究新科技! unlock.incampaign = <在戰役中解鎖> +campaign.select = Select Starting Campaign +campaign.none = [lightgray]Select a planet to start on.\nThis can be switched at any time. +campaign.erekir = [accent]Recommended for new players.[]\n\nNewer, more polished content. Mostly linear campaign progression.\n\nHigher quality maps and overall experience. +campaign.serpulo = [scarlet]Not recommended for new players.[]\n\nOlder content; the classic experience. More open-ended.\n\nPotentially unbalanced maps and campaign mechanics. Less polished. completed = [accent]完成 techtree = 科技樹 techtree.select = 選擇科技樹 diff --git a/core/assets/fonts/font.woff b/core/assets/fonts/font.woff index c031c478de..92cf31f69a 100644 Binary files a/core/assets/fonts/font.woff and b/core/assets/fonts/font.woff differ diff --git a/core/assets/fonts/icon.ttf b/core/assets/fonts/icon.ttf index badd3e3b66..9359cde43a 100644 Binary files a/core/assets/fonts/icon.ttf and b/core/assets/fonts/icon.ttf differ diff --git a/core/assets/maps/caldera-erekir.msav b/core/assets/maps/caldera-erekir.msav index c1011788b0..a0f2611f2b 100644 Binary files a/core/assets/maps/caldera-erekir.msav and b/core/assets/maps/caldera-erekir.msav differ diff --git a/core/assets/maps/erekirwavemap.msav b/core/assets/maps/erekirwavemap.msav index 51ccd0d166..fc2ce40a0a 100644 Binary files a/core/assets/maps/erekirwavemap.msav and b/core/assets/maps/erekirwavemap.msav differ diff --git a/core/assets/maps/peaks.msav b/core/assets/maps/peaks.msav index d6e6f58d54..2413b06126 100644 Binary files a/core/assets/maps/peaks.msav and b/core/assets/maps/peaks.msav differ diff --git a/core/assets/sounds/ui/press.ogg b/core/assets/sounds/ui/press.ogg index 7085dc00a0..419cd38847 100644 Binary files a/core/assets/sounds/ui/press.ogg and b/core/assets/sounds/ui/press.ogg differ diff --git a/core/assets/sprites/planets/erekir.png b/core/assets/sprites/planets/erekir.png new file mode 100644 index 0000000000..f3e887205a Binary files /dev/null and b/core/assets/sprites/planets/erekir.png differ diff --git a/core/assets/sprites/planets/serpulo.png b/core/assets/sprites/planets/serpulo.png new file mode 100644 index 0000000000..b90097673e Binary files /dev/null and b/core/assets/sprites/planets/serpulo.png differ diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index a6b71198a9..4abe276b01 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -316,7 +316,8 @@ public class Vars implements Loadable{ logicVars = new GlobalVars(); javaPath = new Fi(OS.prop("java.home")).child("bin/java").exists() ? new Fi(OS.prop("java.home")).child("bin/java").absolutePath() : - Core.files.local("jre/bin/java").exists() ? Core.files.local("jre/bin/java").absolutePath() : + Core.files.local("jre/bin/java").exists() ? Core.files.local("jre/bin/java").absolutePath() : // Unix + Core.files.local("jre/bin/java.exe").exists() ? Core.files.local("jre/bin/java.exe").absolutePath() : // Windows "java"; state = new GameState(); diff --git a/core/src/mindustry/ai/RtsAI.java b/core/src/mindustry/ai/RtsAI.java index 1d0befd241..8e20579158 100644 --- a/core/src/mindustry/ai/RtsAI.java +++ b/core/src/mindustry/ai/RtsAI.java @@ -26,8 +26,8 @@ public class RtsAI{ static final Seq squad = new Seq<>(false); static final IntSet used = new IntSet(); static final IntSet assignedTargets = new IntSet(); - static final float squadRadius = 120f; - static final int timeUpdate = 0, timerSpawn = 1; + static final float squadRadius = 140f; + static final int timeUpdate = 0, timerSpawn = 1, maxTargetsChecked = 15; //in order of priority?? static final BlockFlag[] flags = {BlockFlag.generator, BlockFlag.factory, BlockFlag.core, BlockFlag.battery}; @@ -259,6 +259,10 @@ public class RtsAI{ weights.clear(); + //only check a maximum number of targets to prevent hammering the CPU with estimateStats calls + targets.shuffle(); + targets.truncate(maxTargetsChecked); + for(var target : targets){ weights.put(target, estimateStats(x, y, target.x, target.y, dps, health)); } @@ -281,6 +285,7 @@ public class RtsAI{ return result; } + //TODO extremely slow especially with many squads. float estimateStats(float fromX, float fromY, float x, float y, float selfDps, float selfHealth){ float[] health = {0f}, dps = {0f}; float extraRadius = 50f; diff --git a/core/src/mindustry/ai/types/CommandAI.java b/core/src/mindustry/ai/types/CommandAI.java index 9fdd534af6..8b8b1bb744 100644 --- a/core/src/mindustry/ai/types/CommandAI.java +++ b/core/src/mindustry/ai/types/CommandAI.java @@ -67,8 +67,28 @@ public class CommandAI extends AIController{ return; } + //acquiring naval targets isn't supported yet, so use the fallback dumb AI + if(unit.team.isAI() && unit.team.rules().rtsAi && unit.type.naval){ + if(fallback == null) fallback = new GroundAI(); + + if(fallback.unit() != unit) fallback.unit(unit); + fallback.updateUnit(); + return; + } + updateVisuals(); - updateTargeting(); + //only autotarget if the unit supports it + if(targetPos == null || unit.type.autoFindTarget){ + updateTargeting(); + }else if(attackTarget == null){ + //if the unit does not have an attack target, is currently moving, and does not have autotargeting, stop attacking stuff + target = null; + for(var mount : unit.mounts){ + if(mount.weapon.controllable){ + mount.target = null; + } + } + } if(attackTarget != null && invalid(attackTarget)){ attackTarget = null; @@ -170,7 +190,7 @@ public class CommandAI extends AIController{ public void hit(Bullet bullet){ if(unit.team.isAI() && bullet.owner instanceof Teamc teamc && teamc.team() != unit.team && attackTarget == null && //can only counter-attack every few seconds to prevent rapidly changing targets - !(teamc instanceof Unit u && !u.checkTarget(unit.type.targetAir, unit.type.targetGround)) && timer.get(timerTarget4, 60f * 12f)){ + !(teamc instanceof Unit u && !u.checkTarget(unit.type.targetAir, unit.type.targetGround)) && timer.get(timerTarget4, 60f * 10f)){ commandTarget(teamc, true); } } @@ -216,6 +236,8 @@ public class CommandAI extends AIController{ pathId = Vars.controlPath.nextTargetId(); } + + /* //TODO ひどい diff --git a/core/src/mindustry/ai/types/DefenderAI.java b/core/src/mindustry/ai/types/DefenderAI.java index d16e1ac907..01c38e69c6 100644 --- a/core/src/mindustry/ai/types/DefenderAI.java +++ b/core/src/mindustry/ai/types/DefenderAI.java @@ -28,7 +28,8 @@ public class DefenderAI extends AIController{ public Teamc findTarget(float x, float y, float range, boolean air, boolean ground){ //Sort by max health and closer target. - var result = Units.closest(unit.team, x, y, Math.max(range, 400f), u -> !u.dead() && u.type != unit.type && u.targetable(unit.team), (u, tx, ty) -> -u.maxHealth + Mathf.dst2(u.x, u.y, tx, ty) / 6400f); + var result = Units.closest(unit.team, x, y, Math.max(range, 400f), u -> !u.dead() && u.type != unit.type && u.targetable(unit.team) && u.type.playerControllable, + (u, tx, ty) -> -u.maxHealth + Mathf.dst2(u.x, u.y, tx, ty) / 6400f); if(result != null) return result; //return core if found diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 078bd625b0..40194443c1 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -8,8 +8,8 @@ import mindustry.entities.*; import mindustry.entities.abilities.*; import mindustry.entities.bullet.*; import mindustry.entities.effect.*; -import mindustry.entities.part.*; import mindustry.entities.part.DrawPart.*; +import mindustry.entities.part.*; import mindustry.entities.pattern.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -1042,7 +1042,7 @@ public class Blocks{ craftTime = 10f; hasLiquids = hasPower = true; - drawer = new DrawMulti(new DrawDefault(), new DrawLiquidRegion()); + drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(), new DrawDefault()); consumePower(1f); consumeItem(Items.scrap, 1); @@ -1062,6 +1062,8 @@ public class Blocks{ consumePower(1.1f); consumeLiquid(Liquids.slag, 4f / 60f); + + drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(), new DrawRegion("-spinner", 3, true), new DrawDefault()); }}; disassembler = new Separator("disassembler"){{ @@ -1080,6 +1082,8 @@ public class Blocks{ consumePower(4f); consumeItem(Items.scrap); consumeLiquid(Liquids.slag, 0.12f); + + drawer = new DrawMulti(new DrawRegion("-bottom"), new DrawLiquidTile(), new DrawRegion("-spinner", 3, true), new DrawDefault()); }}; sporePress = new GenericCrafter("spore-press"){{ @@ -2135,6 +2139,8 @@ public class Blocks{ liquidRouter = new LiquidRouter("liquid-router"){{ requirements(Category.liquid, with(Items.graphite, 4, Items.metaglass, 2)); liquidCapacity = 20f; + underBullets = true; + solid = false; }}; liquidContainer = new LiquidRouter("liquid-container"){{ @@ -2226,6 +2232,7 @@ public class Blocks{ liquidPadding = 3f/4f; researchCostMultiplier = 3; underBullets = true; + solid = false; }}; reinforcedLiquidContainer = new LiquidRouter("reinforced-liquid-container"){{ @@ -5746,7 +5753,6 @@ public class Blocks{ requirements(Category.logic, with(Items.copper, 90, Items.lead, 50, Items.silicon, 50)); instructionsPerTick = 2; - size = 1; }}; @@ -5754,9 +5760,7 @@ public class Blocks{ requirements(Category.logic, with(Items.lead, 320, Items.silicon, 80, Items.graphite, 60, Items.thorium, 50)); instructionsPerTick = 8; - range = 8 * 22; - size = 2; }}; @@ -5801,7 +5805,7 @@ public class Blocks{ }}; canvas = new CanvasBlock("canvas"){{ - requirements(Category.logic, BuildVisibility.debugOnly, with(Items.silicon, 50)); + requirements(Category.logic, BuildVisibility.shown, with(Items.silicon, 40, Items.graphite, 10)); canvasSize = 12; padding = 7f / 4f * 2f; diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 1b84922fec..85de3a272c 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -54,10 +54,10 @@ public class Fx{ unitSpawn = new Effect(30f, e -> { if(!(e.data instanceof UnitType unit)) return; - float scl = 1f + e.fout() * 2f; - TextureRegion region = unit.fullIcon; + float scl = (1f + e.fout() * 2f) * region.scl(); + alpha(e.fout()); mixcol(Color.white, e.fin()); @@ -67,7 +67,7 @@ public class Fx{ alpha(e.fin()); - rect(region, e.x, e.y, region.width * Draw.scl * scl, region.height * Draw.scl * scl, e.rotation - 90); + rect(region, e.x, e.y, region.width * scl, region.height * scl, e.rotation - 90); }), unitCapKill = new Effect(80f, e -> { diff --git a/core/src/mindustry/content/Planets.java b/core/src/mindustry/content/Planets.java index 3487f3a6b1..027e30280c 100644 --- a/core/src/mindustry/content/Planets.java +++ b/core/src/mindustry/content/Planets.java @@ -64,6 +64,7 @@ public class Planets{ lightDstFrom = 0.2f; clearSectorOnLose = true; defaultCore = Blocks.coreBastion; + iconColor = Color.valueOf("ff9266"); hiddenItems.addAll(Items.serpuloItems).removeAll(Items.erekirItems); //TODO SHOULD there be lighting? @@ -104,7 +105,9 @@ public class Planets{ generator = new TantrosPlanetGenerator(); meshLoader = () -> new HexMesh(this, 4); accessible = false; + visible = false; atmosphereColor = Color.valueOf("3db899"); + iconColor = Color.valueOf("597be3"); startSector = 10; atmosphereRadIn = -0.01f; atmosphereRadOut = 0.3f; @@ -114,7 +117,6 @@ public class Planets{ }; }}; - //TODO hide beryllium and others on load in rules serpulo = new Planet("serpulo", sun, 1f, 3){{ generator = new SerpuloPlanetGenerator(); meshLoader = () -> new HexMesh(this, 6); @@ -139,6 +141,7 @@ public class Planets{ r.attributes.clear(); r.showSpawns = false; }; + iconColor = Color.valueOf("7d4dff"); atmosphereColor = Color.valueOf("3c1b8f"); atmosphereRadIn = 0.02f; atmosphereRadOut = 0.3f; @@ -154,10 +157,6 @@ public class Planets{ gen.carbonChance = 0.1f; gen.ferricChance = 0f; }); - - //define launch candidates after all planets initialize - //TODO how will it use the nucleus??? - serpulo.launchCandidates.add(erekir); } private static Planet makeAsteroid(String name, Planet parent, Block base, Block tint, float tintThresh, int pieces, float scale, Cons cgen){ @@ -171,11 +170,12 @@ public class Planets{ accessible = false; clipRadius = 2f; defaultEnv = Env.space; - + icon = "commandRally"; generator = new AsteroidGenerator(); cgen.get((AsteroidGenerator)generator); meshLoader = () -> { + iconColor = tint.mapColor; Color tinted = tint.mapColor.cpy().a(1f - tint.mapColor.a); Seq meshes = new Seq<>(); Color color = base.mapColor; diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index aef00856f5..933f0e6c45 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -93,6 +93,8 @@ public class TechTree{ public Seq objectives = new Seq<>(); /** Nodes that depend on this node. */ public final Seq children = new Seq<>(); + /** Planet associated with this tech node. Null to auto-detect, or use Serpulo if no associated planet is found. */ + public @Nullable Planet planet; public TechNode(@Nullable TechNode parent, UnlockableContent content, ItemStack[] requirements){ if(parent != null){ diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 6b31f85f79..6dc10a4534 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -83,7 +83,7 @@ public class Renderer implements ApplicationListener{ camera = new Camera(); Shaders.init(); - Events.on(ResetEvent.class, e -> { + Events.on(ResetEvent.class, e -> { shakeTime = shakeIntensity = 0f; camShakeOffset.setZero(); }); @@ -484,7 +484,7 @@ public class Renderer implements ApplicationListener{ TextureRegion reg = block.fullIcon; float scl = Scl.scl(4f) / camerascale; float shake = 0f; - float s = reg.width * Draw.scl * scl * 3.6f * Interp.pow2Out.apply(fout); + float s = reg.width * reg.scl() * scl * 3.6f * Interp.pow2Out.apply(fout); float rotation = Interp.pow2In.apply(fout) * 135f, x = build.x + Mathf.range(shake), y = build.y + Mathf.range(shake); float thrustOpen = 0.25f; float thrusterFrame = fin >= thrustOpen ? 1f : fin / thrustOpen; diff --git a/core/src/mindustry/editor/MapRenderer.java b/core/src/mindustry/editor/MapRenderer.java index 367c40ccc7..7c6a28db6f 100644 --- a/core/src/mindustry/editor/MapRenderer.java +++ b/core/src/mindustry/editor/MapRenderer.java @@ -119,7 +119,7 @@ public class MapRenderer implements Disposable{ if(wall != Blocks.air && useSyntheticWall){ region = !center ? clearEditor : getIcon(wall, idxWall); - float width = region.width * Draw.scl, height = region.height * Draw.scl, ox = wall.offset + (tilesize - width) / 2f, oy = wall.offset + (tilesize - height) / 2f; + float width = region.width * region.scl(), height = region.height * region.scl(), ox = wall.offset + (tilesize - width) / 2f, oy = wall.offset + (tilesize - height) / 2f; //force fit to tile if(overlay.wallOre && !wall.synthetic()){ @@ -152,8 +152,8 @@ public class MapRenderer implements Disposable{ region = ((Cliff)Blocks.cliff).editorCliffs[tile.data & 0xff]; } - offsetX = tilesize / 2f - region.width / 2f * Draw.scl; - offsetY = tilesize / 2f - region.height / 2f * Draw.scl; + offsetX = tilesize / 2f - region.width * region.scl() / 2f; + offsetY = tilesize / 2f - region.height * region.scl() / 2f; }else if((wall == Blocks.air || overlay.wallOre) && !overlay.isAir()){ if(floor.isLiquid){ mesh.setColor(Tmp.c1.set(1f, 1f, 1f, floor.overlayAlpha)); @@ -163,7 +163,7 @@ public class MapRenderer implements Disposable{ region = clearEditor; } - float width = region.width * Draw.scl, height = region.height * Draw.scl; + float width = region.width * region.scl(), height = region.height * region.scl(); if(!wall.synthetic() && wall != Blocks.air && !wall.isMultiblock()){ offsetX = offsetY = 0f; width = height = tilesize; diff --git a/core/src/mindustry/entities/Damage.java b/core/src/mindustry/entities/Damage.java index 705b9d26c7..b7285392e5 100644 --- a/core/src/mindustry/entities/Damage.java +++ b/core/src/mindustry/entities/Damage.java @@ -466,7 +466,7 @@ public class Damage{ } /** Damages all entities and blocks in a radius that are enemies of the team. */ - public static void damage(Team team, float x, float y, float radius, float damage, boolean complete, boolean air, boolean ground, boolean scaled, Bullet source){ + public static void damage(Team team, float x, float y, float radius, float damage, boolean complete, boolean air, boolean ground, boolean scaled, @Nullable Bullet source){ Cons cons = entity -> { if(entity.team == team || !entity.checkTarget(air, ground) || !entity.hittable() || !entity.within(x, y, radius + (scaled ? entity.hitSize / 2f : 0f))){ return; @@ -474,6 +474,9 @@ public class Damage{ float amount = calculateDamage(scaled ? Math.max(0, entity.dst(x, y) - entity.type.hitSize/2) : entity.dst(x, y), radius, damage); entity.damage(amount); + if(source != null){ + entity.controller().hit(source); + } //TODO better velocity displacement float dst = vec.set(entity.x - x, entity.y - y).len(); entity.vel.add(vec.setLength((1f - dst / radius) * 2f / entity.mass())); @@ -504,9 +507,7 @@ public class Damage{ } public static void tileDamage(Team team, int x, int y, float baseRadius, float damage, @Nullable Bullet source){ - Core.app.post(() -> { - 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. diff --git a/core/src/mindustry/entities/EntityCollisions.java b/core/src/mindustry/entities/EntityCollisions.java index 2bf034b95b..7343b7ff59 100644 --- a/core/src/mindustry/entities/EntityCollisions.java +++ b/core/src/mindustry/entities/EntityCollisions.java @@ -16,11 +16,8 @@ public class EntityCollisions{ private static final float seg = 1f; //tile collisions - private Rect tmp = new Rect(); - private Vec2 vector = new Vec2(); - private Vec2 l1 = new Vec2(); - private Rect r1 = new Rect(); - private Rect r2 = new Rect(); + private Vec2 vector = new Vec2(), l1 = new Vec2(); + private Rect r1 = new Rect(), r2 = new Rect(), tmp = new Rect(); //entity collisions private Seq arrOut = new Seq<>(Hitboxc.class); diff --git a/core/src/mindustry/entities/comp/LaunchCoreComp.java b/core/src/mindustry/entities/comp/LaunchCoreComp.java index b28e3657b8..32ae057e16 100644 --- a/core/src/mindustry/entities/comp/LaunchCoreComp.java +++ b/core/src/mindustry/entities/comp/LaunchCoreComp.java @@ -43,7 +43,8 @@ abstract class LaunchCoreComp implements Drawc, Timedc{ Draw.z(Layer.weather - 1); TextureRegion region = block.fullIcon; - float rw = region.width * Draw.scl * scale, rh = region.height * Draw.scl * scale; + scale *= region.scl(); + float rw = region.width * scale, rh = region.height * scale; Draw.alpha(alpha); Draw.rect(region, cx, cy, rw, rh, rotation - 45); diff --git a/core/src/mindustry/entities/comp/PayloadComp.java b/core/src/mindustry/entities/comp/PayloadComp.java index 54e2011855..c9730fb3ab 100644 --- a/core/src/mindustry/entities/comp/PayloadComp.java +++ b/core/src/mindustry/entities/comp/PayloadComp.java @@ -69,7 +69,7 @@ abstract class PayloadComp implements Posc, Rotc, Hitboxc, Unitc{ } boolean canPickup(Building build){ - return payloadUsed() + build.block.size * build.block.size * Vars.tilesize * Vars.tilesize <= type.payloadCapacity + 0.001f && build.canPickup(); + return payloadUsed() + build.block.size * build.block.size * Vars.tilesize * Vars.tilesize <= type.payloadCapacity + 0.001f && build.canPickup() && build.team == team; } boolean canPickupPayload(Payload pay){ diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 6d538cf7d8..1ce32a6867 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -63,6 +63,12 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I } + public void updateBoosting(boolean boost){ + if(!type.canBoost) return; + + elevation = Mathf.approachDelta(elevation, type.canBoost ? Mathf.num(boost || onSolid() || (isFlying() && !canLand())) : 0f, type.riseSpeed); + } + /** Move based on preferred unit movement type. */ public void movePref(Vec2 movement){ if(type.omniMovement){ diff --git a/core/src/mindustry/game/Gamemode.java b/core/src/mindustry/game/Gamemode.java index 303bcc5dc9..d48bc956fd 100644 --- a/core/src/mindustry/game/Gamemode.java +++ b/core/src/mindustry/game/Gamemode.java @@ -23,7 +23,7 @@ public enum Gamemode{ rules.waveTimer = true; rules.waveSpacing = 2f * Time.toMinutes; - rules.teams.get(rules.waveTeam).infiniteResources = true; + rules.waveTeam.rules().infiniteResources = true; }, map -> map.teams.size > 1), pvp(rules -> { rules.pvp = true; diff --git a/core/src/mindustry/game/Objectives.java b/core/src/mindustry/game/Objectives.java index 2fde65c4a2..af420636b6 100644 --- a/core/src/mindustry/game/Objectives.java +++ b/core/src/mindustry/game/Objectives.java @@ -25,6 +25,7 @@ public class Objectives{ @Override public String display(){ return Core.bundle.format("requirement.research", + //TODO broken for multi tech nodes. (content.techNode == null || content.techNode.parent == null || content.techNode.parent.content.unlocked()) && !(content instanceof Item) ? (content.emoji() + " " + content.localizedName) : "???"); } diff --git a/core/src/mindustry/game/Team.java b/core/src/mindustry/game/Team.java index 7d0cf5b5d8..a855fea83c 100644 --- a/core/src/mindustry/game/Team.java +++ b/core/src/mindustry/game/Team.java @@ -107,7 +107,7 @@ public class Team implements Comparable{ /** @return whether this team is supposed to be AI-controlled. */ public boolean isAI(){ - return (state.rules.waves || state.rules.attackMode) && this == state.rules.waveTeam && !state.rules.pvp; + return (state.rules.waves || state.rules.attackMode) && this != state.rules.defaultTeam && !state.rules.pvp; } /** @return whether this team is solely comprised of AI (with no players possible). */ diff --git a/core/src/mindustry/game/Universe.java b/core/src/mindustry/game/Universe.java index eba7987876..8993da4929 100644 --- a/core/src/mindustry/game/Universe.java +++ b/core/src/mindustry/game/Universe.java @@ -278,21 +278,6 @@ public class Universe{ save(); } - /** This method is expensive to call; only do so sparingly. */ - public ItemSeq getGlobalResources(){ - ItemSeq count = new ItemSeq(); - - for(Planet planet : content.planets()){ - for(Sector sector : planet.sectors){ - if(sector.hasSave()){ - count.add(sector.items()); - } - } - } - - return count; - } - public void updateNetSeconds(int value){ netSeconds = value; } diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index 4e01e5179b..95f78bcc44 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -21,7 +21,9 @@ public class Drawf{ /** Bleeds a mod pixmap if linear filtering is enabled. */ public static void checkBleed(Pixmap pixmap){ - if(Core.settings.getBool("linear", true)) Pixmaps.bleed(pixmap); + if(Core.settings.getBool("linear", true)){ + Pixmaps.bleed(pixmap); + } } //TODO offset unused @@ -400,8 +402,8 @@ public class Drawf{ float scl = 8f * scale * Draw.scl, rot = Mathf.angle(x2 - x, y2 - y); float vx = Mathf.cosDeg(rot) * scl, vy = Mathf.sinDeg(rot) * scl; - Draw.rect(start, x, y, start.width * scale * Draw.scl, start.height * scale * Draw.scl, rot + 180); - Draw.rect(end, x2, y2, end.width * scale * Draw.scl, end.height * scale * Draw.scl, rot); + Draw.rect(start, x, y, start.width * scale * start.scl(), start.height * scale * start.scl(), rot + 180); + Draw.rect(end, x2, y2, end.width * scale * end.scl(), end.height * scale * end.scl(), rot); Lines.stroke(12f * scale); Lines.line(line, x + vx, y + vy, x2 - vx, y2 - vy, false); diff --git a/core/src/mindustry/graphics/MenuRenderer.java b/core/src/mindustry/graphics/MenuRenderer.java index 967f818f5f..949d03f914 100644 --- a/core/src/mindustry/graphics/MenuRenderer.java +++ b/core/src/mindustry/graphics/MenuRenderer.java @@ -243,12 +243,12 @@ public class MenuRenderer implements Disposable{ TextureRegion icon = flyerType.fullIcon; - float size = Math.max(icon.width, icon.height) * Draw.scl * 1.6f; - flyers((x, y) -> { Draw.rect(icon, x - 12f, y - 13f, flyerRot - 90); }); + float size = Math.max(icon.width, icon.height) * icon.scl() * 1.6f; + flyers((x, y) -> { Draw.rect("circle-shadow", x, y, size, size); }); diff --git a/core/src/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java index 3636c0c342..c28a44b7ec 100644 --- a/core/src/mindustry/graphics/MinimapRenderer.java +++ b/core/src/mindustry/graphics/MinimapRenderer.java @@ -123,7 +123,7 @@ public class MinimapRenderer{ rect.set((dx - sz) * tilesize, (dy - sz) * tilesize, sz * 2 * tilesize, sz * 2 * tilesize); for(Unit unit : units){ - if(unit.inFogTo(player.team())) continue; + if(unit.inFogTo(player.team()) || !unit.type.drawMinimap) continue; float rx = !withLabels ? (unit.x - rect.x) / rect.width * w : unit.x / (world.width() * tilesize) * w; float ry = !withLabels ? (unit.y - rect.y) / rect.width * h : unit.y / (world.height() * tilesize) * h; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 7cc6693cf6..8f3495431e 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -1653,20 +1653,26 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public void drawArrow(Block block, int x, int y, int rotation, boolean valid){ float trns = (block.size / 2) * tilesize; int dx = Geometry.d4(rotation).x, dy = Geometry.d4(rotation).y; + float offsetx = x * tilesize + block.offset + dx*trns; + float offsety = y * tilesize + block.offset + dy*trns; Draw.color(!valid ? Pal.removeBack : Pal.accentBack); - Draw.rect(Core.atlas.find("place-arrow"), - x * tilesize + block.offset + dx*trns, - y * tilesize + block.offset - 1 + dy*trns, - Core.atlas.find("place-arrow").width * Draw.scl, - Core.atlas.find("place-arrow").height * Draw.scl, rotation * 90 - 90); + TextureRegion regionArrow = Core.atlas.find("place-arrow"); + + Draw.rect(regionArrow, + offsetx, + offsety - 1, + regionArrow.width * regionArrow.scl(), + regionArrow.height * regionArrow.scl(), + rotation * 90 - 90); Draw.color(!valid ? Pal.remove : Pal.accent); - Draw.rect(Core.atlas.find("place-arrow"), - x * tilesize + block.offset + dx*trns, - y * tilesize + block.offset + dy*trns, - Core.atlas.find("place-arrow").width * Draw.scl, - Core.atlas.find("place-arrow").height * Draw.scl, rotation * 90 - 90); + Draw.rect(regionArrow, + offsetx, + offsety, + regionArrow.width * regionArrow.scl(), + regionArrow.height * regionArrow.scl(), + rotation * 90 - 90); } void iterateLine(int startX, int startY, int endX, int endY, Cons cons){ diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 25189e1943..9a2d758e64 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -80,6 +80,7 @@ public class ContentParser{ put(Blending.class, (type, data) -> field(Blending.class, data)); put(CacheLayer.class, (type, data) -> field(CacheLayer.class, data)); put(Attribute.class, (type, data) -> Attribute.get(data.asString())); + put(BuildVisibility.class, (type, data) -> field(BuildVisibility.class, data)); put(Schematic.class, (type, data) -> { Object result = fieldOpt(Loadouts.class, data); if(result != null){ @@ -380,6 +381,11 @@ public class ContentParser{ } } + //try to parse Rect as array + if(type == Rect.class && jsonData.isArray() && jsonData.size == 4){ + return (T)new Rect(jsonData.get(0).asFloat(), jsonData.get(1).asFloat(), jsonData.get(2).asFloat(), jsonData.get(3).asFloat()); + } + if(Content.class.isAssignableFrom(type)){ ContentType ctype = contentTypes.getThrow(type, () -> new IllegalArgumentException("No content type for class: " + type.getSimpleName())); String prefix = currentMod != null ? currentMod.name + "-" : ""; diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 151796555d..042020f0d8 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -40,6 +40,7 @@ public class Mods implements Loadable{ private ObjectSet specialFolders = ObjectSet.with("bundles", "sprites", "sprites-override"); private int totalSprites; + private static ObjectFloatMap textureResize = new ObjectFloatMap<>(); private MultiPacker packer; private ModClassLoader mainLoader = new ModClassLoader(getClass().getClassLoader()); @@ -83,7 +84,7 @@ public class Mods implements Loadable{ /** @return the loaded mod found by class, or null if not found. */ public @Nullable LoadedMod getMod(Class type){ - return mods.find(m -> m.enabled() && m.main != null && m.main.getClass() == type); + return mods.find(m -> m.main != null && m.main.getClass() == type); } /** Imports an external mod file. Folders are not supported here. */ @@ -180,7 +181,8 @@ public class Mods implements Loadable{ } private void packSprites(Seq sprites, LoadedMod mod, boolean prefix, Seq> tasks){ - boolean linear = Core.settings.getBool("linear", true); + boolean bleed = Core.settings.getBool("linear", true) && !mod.meta.pregenerated; + float textureScale = mod.meta.texturescale; for(Fi file : sprites){ String name = file.nameWithoutExtension(); @@ -204,12 +206,16 @@ public class Mods implements Loadable{ try{ Pixmap pix = new Pixmap(file.readBytes()); //only bleeds when linear filtering is on at startup - if(linear){ + if(bleed){ Pixmaps.bleed(pix, 2); } //this returns a *runnable* which actually packs the resulting pixmap; this has to be done synchronously outside the method return () -> { - packer.add(getPage(file), (prefix ? mod.name + "-" : "") + name, new PixmapRegion(pix)); + String fullName = (prefix ? mod.name + "-" : "") + name; + packer.add(getPage(file), fullName, new PixmapRegion(pix)); + if(textureScale != 1.0f){ + textureResize.put(fullName, textureScale); + } pix.dispose(); }; }catch(Exception e){ @@ -336,7 +342,7 @@ public class Mods implements Loadable{ if(c instanceof UnlockableContent u && c.minfo.mod != null){ u.load(); u.loadIcon(); - if(u.generateIcons){ + if(u.generateIcons && !c.minfo.mod.meta.pregenerated){ u.createIcons(packer); } } @@ -344,13 +350,15 @@ public class Mods implements Loadable{ } Log.debug("Time to generate icons: @", Time.elapsed()); - packer.printStats(); - //dispose old atlas data Core.atlas = packer.flush(filter, new TextureAtlas()); + textureResize.each(e -> Core.atlas.find(e.key).scale = e.value); + Core.atlas.setErrorRegion("error"); Log.debug("Total pages: @", Core.atlas.getTextures().size); + + packer.printStats(); } packer.dispose(); @@ -1141,6 +1149,10 @@ public class Mods implements Loadable{ public boolean java; /** If true, -outline regions for units are kept when packing. Only use if you know exactly what you are doing. */ public boolean keepOutlines; + /** To rescale textures with a different size. Represents the size in pixels of the sprite of a 1x1 block. */ + public float texturescale = 1.0f; + /** If true, bleeding is skipped and no content icons are generated. */ + public boolean pregenerated; public String displayName(){ return displayName == null ? name : displayName; @@ -1174,6 +1186,7 @@ public class Mods implements Loadable{ ", minGameVersion='" + minGameVersion + '\'' + ", hidden=" + hidden + ", repo=" + repo + + ", texturescale=" + texturescale + '}'; } } diff --git a/core/src/mindustry/type/CellLiquid.java b/core/src/mindustry/type/CellLiquid.java index 0eb19b01fd..3874cd3efd 100644 --- a/core/src/mindustry/type/CellLiquid.java +++ b/core/src/mindustry/type/CellLiquid.java @@ -19,7 +19,7 @@ public class CellLiquid extends Liquid{ public int cells = 8; public @Nullable Liquid spreadTarget; - public float maxSpread = 0.5f, spreadConversion = 1f, spreadDamage = 0.1f, removeScaling = 0.25f; + public float maxSpread = 0.75f, spreadConversion = 1f, spreadDamage = 0.1f, removeScaling = 0.25f; public CellLiquid(String name, Color color){ super(name, color); diff --git a/core/src/mindustry/type/Item.java b/core/src/mindustry/type/Item.java index bb481dfb09..36bd65ef59 100644 --- a/core/src/mindustry/type/Item.java +++ b/core/src/mindustry/type/Item.java @@ -47,6 +47,8 @@ public class Item extends UnlockableContent implements Senseable{ /** If true, this material is used by buildings. If false, this material will be incinerated in certain cores. */ public boolean buildable = true; public boolean hidden = false; + /** For mods. Adds this item to the listed planets' hidden items Seq. */ + public @Nullable Planet[] hiddenOnPlanets; public Item(String name, Color color){ super(name); @@ -57,6 +59,17 @@ public class Item extends UnlockableContent implements Senseable{ this(name, new Color(Color.black)); } + @Override + public void init(){ + super.init(); + + if(hiddenOnPlanets != null){ + for(Planet planet : hiddenOnPlanets){ + planet.hiddenItems.add(this); + } + } + } + @Override public boolean isHidden(){ return hidden; diff --git a/core/src/mindustry/type/Planet.java b/core/src/mindustry/type/Planet.java index 4ecb8fc586..f42da7f475 100644 --- a/core/src/mindustry/type/Planet.java +++ b/core/src/mindustry/type/Planet.java @@ -89,6 +89,8 @@ public class Planet extends UnlockableContent{ public Color lightColor = Color.white.cpy(); /** Atmosphere tint for landable planets. */ public Color atmosphereColor = new Color(0.3f, 0.7f, 1.0f); + /** Icon for appearance in planet list. */ + public Color iconColor = Color.white.cpy(); /** Whether this planet has an atmosphere. */ public boolean hasAtmosphere = true; /** Whether to allow users to specify a custom launch schematic for this map. */ @@ -107,6 +109,8 @@ public class Planet extends UnlockableContent{ public boolean prebuildBase = true; /** If true, waves are created on sector loss. TODO remove. */ public boolean allowWaves = false; + /** Icon as displayed in the planet selection dialog. This is a string, as drawables are null at load time. */ + public String icon = "planet"; /** Default core block for launching. */ public Block defaultCore = Blocks.coreShard; /** Sets up rules on game load for any sector on this planet. */ @@ -119,7 +123,7 @@ public class Planet extends UnlockableContent{ public Seq children = new Seq<>(); /** Default root node shown when the tech tree is opened here. */ public @Nullable TechNode techTree; - /** Planets that can be launched to from this one. Made mutual in init(). */ + /** TODO remove? Planets that can be launched to from this one. Made mutual in init(). */ public Seq launchCandidates = new Seq<>(); /** Items not available on this planet. */ public Seq hiddenItems = new Seq<>(); @@ -169,6 +173,10 @@ public class Planet extends UnlockableContent{ } } + public @Nullable Sector getStartSector(){ + return sectors.size == 0 ? null : sectors.get(startSector); + } + public void applyRules(Rules rules){ ruleSetter.get(rules); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 58a9ae756a..b0d26ae353 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -212,6 +212,8 @@ public class UnitType extends UnlockableContent{ bounded = true, /** if true, this unit is detected as naval - do NOT assign this manually! Initialized in init() */ naval = false, + /** if false, RTS AI controlled units do not automatically attack things while moving. This is automatically assigned. */ + autoFindTarget = true, /** if true, this modded unit always has a -outline region generated for its base. Normally, outlines are ignored if there are no top = false weapons. */ alwaysCreateOutline = false, @@ -226,7 +228,9 @@ public class UnitType extends UnlockableContent{ /** if false, the unit shield (usually seen in waves) is not drawn. */ drawShields = true, /** if false, the unit body is not drawn. */ - drawBody = true; + drawBody = true, + /** if false, the unit is not drawn on the minimap. */ + drawMinimap = true; /** The default AI controller to assign on creation. */ public Prov aiController = () -> !flying ? new GroundAI() : new FlyingAI(); @@ -686,6 +690,9 @@ public class UnitType extends UnlockableContent{ lightRadius = Math.max(60f, hitSize * 2.3f); } + //if a status effects slows a unit when firing, don't shoot while moving. + autoFindTarget = !weapons.contains(w -> w.shootStatus.speedMultiplier < 0.99f); + clipSize = Math.max(clipSize, lightRadius * 1.1f); singleTarget = weapons.size <= 1 && !forceMultiTarget; @@ -905,6 +912,8 @@ public class UnitType extends UnlockableContent{ public void createIcons(MultiPacker packer){ super.createIcons(packer); + sample = constructor.get(); + var toOutline = new Seq(); getRegionsToOutline(toOutline); @@ -945,7 +954,6 @@ public class UnitType extends UnlockableContent{ } } - //TODO test if(sample instanceof Tankc){ PixmapRegion pix = Core.atlas.getPixmap(treadRegion); @@ -1012,7 +1020,7 @@ public class UnitType extends UnlockableContent{ //find reconstructor var rec = (Reconstructor)content.blocks().find(b -> b instanceof Reconstructor re && re.upgrades.contains(u -> u[1] == this)); - if(rec != null && Structs.find(rec.consumers, i -> i instanceof ConsumeItems) instanceof ConsumeItems ci){ + if(rec != null && rec.findConsumer(i -> i instanceof ConsumeItems) instanceof ConsumeItems ci){ if(prevReturn != null){ prevReturn[0] = rec.upgrades.find(u -> u[1] == this)[0]; } @@ -1266,7 +1274,7 @@ public class UnitType extends UnlockableContent{ public void drawSoftShadow(float x, float y, float rotation, float alpha){ Draw.color(0, 0, 0, 0.4f * alpha); float rad = 1.6f; - float size = Math.max(region.width, region.height) * Draw.scl; + float size = Math.max(region.width, region.height) * region.scl(); Draw.rect(softShadowRegion, x, y, size * rad * Draw.xscl, size * rad * Draw.yscl, rotation - 90); Draw.color(); } @@ -1285,11 +1293,12 @@ public class UnitType extends UnlockableContent{ size, size, unit.rotation); Draw.mixcol(); - size = (3f + Mathf.absin(Time.time, 5f, 1f)) * unit.itemTime + 0.5f; + size = ((3f + Mathf.absin(Time.time, 5f, 1f)) * unit.itemTime + 0.5f) * 2; Draw.color(Pal.accent); Draw.rect(itemCircleRegion, unit.x + Angles.trnsx(unit.rotation + 180f, itemOffsetY), - unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY), size * 2, size * 2); + unit.y + Angles.trnsy(unit.rotation + 180f, itemOffsetY), + size, size); if(unit.isLocal() && !renderer.pixelator.enabled()){ Fonts.outline.draw(unit.stack.amount + "", @@ -1401,7 +1410,7 @@ public class UnitType extends UnlockableContent{ for(int side : Mathf.signs){ Tmp.v1.set(xOffset * side, yOffset).rotate(unit.rotation - 90); - Draw.rect(region, unit.x + Tmp.v1.x / 4f, unit.y + Tmp.v1.y / 4f, treadRect.width / 4f, region.height / 4f, unit.rotation - 90); + Draw.rect(region, unit.x + Tmp.v1.x / 4f, unit.y + Tmp.v1.y / 4f, treadRect.width / 4f, region.height * region.scale / 4f, unit.rotation - 90); } } } @@ -1413,7 +1422,7 @@ public class UnitType extends UnlockableContent{ Leg[] legs = unit.legs(); - float ssize = footRegion.width * Draw.scl * 1.5f; + float ssize = footRegion.width * footRegion.scl() * 1.5f; float rotation = unit.baseRotation(); float invDrown = 1f - unit.drownTime; @@ -1448,10 +1457,10 @@ public class UnitType extends UnlockableContent{ Draw.rect(footRegion, leg.base.x, leg.base.y, position.angleTo(leg.base)); } - Lines.stroke(legRegion.height * Draw.scl * flips); + Lines.stroke(legRegion.height * legRegion.scl() * flips); Lines.line(legRegion, position.x, position.y, leg.joint.x, leg.joint.y, false); - Lines.stroke(legBaseRegion.height * Draw.scl * flips); + Lines.stroke(legBaseRegion.height * legRegion.scl() * flips); Lines.line(legBaseRegion, leg.joint.x + Tmp.v1.x, leg.joint.y + Tmp.v1.y, leg.base.x, leg.base.y, false); if(jointRegion.found()){ @@ -1526,8 +1535,8 @@ public class UnitType extends UnlockableContent{ Draw.rect(legRegion, unit.x + Angles.trnsx(mech.baseRotation(), extension * i - boostTrns, -boostTrns*i), unit.y + Angles.trnsy(mech.baseRotation(), extension * i - boostTrns, -boostTrns*i), - legRegion.width * i * Draw.scl, - legRegion.height * Draw.scl - Math.max(-sin * i, 0) * legRegion.height * 0.5f * Draw.scl, + legRegion.width * legRegion.scl() * i, + legRegion.height * legRegion.scl() * (1 - Math.max(-sin * i, 0) * 0.5f), mech.baseRotation() - 90 + 35f*i*e); } diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 0edd2387d0..6870046bd9 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -31,6 +31,8 @@ public class Weapon implements Cloneable{ public BulletType bullet = Bullets.placeholder; /** shell ejection effect */ public Effect ejectEffect = Fx.none; + /** whether weapon should appear in the stats of a unit with this weapon */ + public boolean display = true; /** whether to consume ammo when ammo is enabled in rules */ public boolean useAmmo = true; /** whether to create a flipped copy of this weapon upon initialization. default: true */ @@ -147,7 +149,7 @@ public class Weapon implements Cloneable{ } public boolean hasStats(UnitType u){ - return true; + return display; } public void addStats(UnitType u, Table t){ diff --git a/core/src/mindustry/type/unit/MissileUnitType.java b/core/src/mindustry/type/unit/MissileUnitType.java index 7142064995..33b06aa6b6 100644 --- a/core/src/mindustry/type/unit/MissileUnitType.java +++ b/core/src/mindustry/type/unit/MissileUnitType.java @@ -37,6 +37,7 @@ public class MissileUnitType extends UnitType{ fogRadius = 2f; loopSound = Sounds.missileTrail; loopSoundVolume = 0.05f; + drawMinimap = false; //TODO weapon configs, etc? } } diff --git a/core/src/mindustry/type/weapons/BuildWeapon.java b/core/src/mindustry/type/weapons/BuildWeapon.java index 4ca1e55483..40bfa667e1 100644 --- a/core/src/mindustry/type/weapons/BuildWeapon.java +++ b/core/src/mindustry/type/weapons/BuildWeapon.java @@ -22,14 +22,10 @@ public class BuildWeapon extends Weapon{ rotate = true; noAttack = true; predictTarget = false; + display = false; bullet = new BulletType(); } - @Override - public boolean hasStats(UnitType u){ - return false; - } - @Override public void update(Unit unit, WeaponMount mount){ mount.shoot = false; diff --git a/core/src/mindustry/ui/LiquidDisplay.java b/core/src/mindustry/ui/LiquidDisplay.java index 416a865336..d0982374ab 100644 --- a/core/src/mindustry/ui/LiquidDisplay.java +++ b/core/src/mindustry/ui/LiquidDisplay.java @@ -21,7 +21,7 @@ public class LiquidDisplay extends Table{ this.perSecond = perSecond; add(new Stack(){{ - add(new Image(liquid.uiIcon)); + add(new Image(liquid.uiIcon).setScaling(Scaling.fit)); if(amount != 0){ Table t = new Table().left().bottom(); diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index 0f8a613e88..d1a5f4a4fa 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -1,8 +1,10 @@ package mindustry.ui.dialogs; import arc.*; +import arc.assets.loaders.TextureLoader.*; import arc.func.*; import arc.graphics.*; +import arc.graphics.Texture.*; import arc.graphics.g2d.*; import arc.graphics.gl.*; import arc.input.*; @@ -69,6 +71,8 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ public Table sectorTop = new Table(), notifs = new Table(), expandTable = new Table(); public Label hoverLabel = new Label(""); + private Texture[] planetTextures; + public PlanetDialog(){ super("", Styles.fullDialog); @@ -87,8 +91,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ //clear all except first, which is the last sector. newPresets.truncate(1); }else if(selected != null){ - selected = null; - updateSelected(); + selectSector(null); }else{ Core.app.post(() -> hide()); } @@ -160,6 +163,54 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ }); shown(this::setup); + + //show selection of Erekir/Serpulo campaign if the user has no bases, and hasn't selected yet (essentially a "have they played campaign before" check) + shown(() -> { + if(!settings.getBool("campaignselect") && !content.planets().contains(p -> p.sectors.contains(s -> s.hasBase()))){ + var diag = new BaseDialog("@campaign.select"); + + Planet[] selected = {null}; + var group = new ButtonGroup<>(); + group.setMinCheckCount(0); + state.planet = Planets.sun; + Planet[] choices = {Planets.serpulo, Planets.erekir}; + int i = 0; + for(var planet : choices){ + TextureRegion tex = new TextureRegion(planetTextures[i]); + + diag.cont.button(b -> { + b.top(); + b.add(planet.localizedName).color(Pal.accent).style(Styles.outlineLabel); + b.row(); + b.image(new TextureRegionDrawable(tex)).grow().scaling(Scaling.fit); + }, Styles.togglet, () -> selected[0] = planet).size(Core.app.isMobile() ? 220f : 320f).group(group); + i ++; + } + + diag.cont.row(); + diag.cont.label(() -> selected[0] == null ? "@campaign.none" : "@campaign." + selected[0].name).labelAlign(Align.center).style(Styles.outlineLabel).width(440f).wrap().colspan(2); + + diag.buttons.button("@ok", Icon.ok, () -> { + state.planet = selected[0]; + lookAt(state.planet.getStartSector()); + selectSector(state.planet.getStartSector()); + settings.put("campaignselect", true); + diag.hide(); + }).size(300f, 64f).disabled(b -> selected[0] == null); + + app.post(() -> diag.show()); + } + }); + + planetTextures = new Texture[2]; + String[] names = {"sprites/planets/serpulo.png", "sprites/planets/erekir.png"}; + for(int i = 0; i < names.length; i++){ + int fi = i; + assets.load(names[i], Texture.class, new TextureParameter(){{ + minFilter = magFilter = TextureFilter.linear; + }}).loaded = t -> planetTextures[fi] = t; + assets.finishLoadingAsset(names[i]); + } } /** show with no limitations, just as a map. */ @@ -551,17 +602,14 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ buttons, //planet selection new Table(t -> { - t.right(); + t.top().left(); if(content.planets().count(this::selectable) > 1){ - t.table(Styles.black6, pt -> { - pt.add("@planets").color(Pal.accent); - pt.row(); - pt.image().growX().height(4f).pad(6f).color(Pal.accent); - pt.row(); + t.table(Tex.pane, pt -> { + pt.margin(4f); for(int i = 0; i < content.planets().size; i++){ Planet planet = content.planets().get(i); if(selectable(planet)){ - pt.button(planet.localizedName, Styles.flatTogglet, () -> { + pt.button(planet.localizedName, Icon.icons.get(planet.icon + "Small", Icon.icons.get(planet.icon, Icon.commandRallySmall)), Styles.flatTogglet, () -> { selected = null; launchSector = null; if(state.planet != planet){ @@ -570,7 +618,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ rebuildExpand(); } settings.put("lastplanet", planet.name); - }).width(200).height(40).growX().update(bb -> bb.setChecked(state.planet == planet)); + }).width(190).height(40).growX().update(bb -> bb.setChecked(state.planet == planet)).with(w -> w.marginLeft(10f)).get().getChildren().get(1).setColor(planet.iconColor); pt.row(); } } @@ -943,6 +991,11 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ } } + void selectSector(Sector sector){ + selected = sector; + updateSelected(); + } + void updateSelected(){ Sector sector = selected; Table stable = sectorTop; @@ -1128,8 +1181,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ dialog.buttons.button("@sector.view", Icon.eyeSmall, () -> { dialog.hide(); lookAt(attacked); - selected = attacked; - updateSelected(); + selectSector(attacked); }); dialog.show(); diff --git a/core/src/mindustry/ui/dialogs/ResearchDialog.java b/core/src/mindustry/ui/dialogs/ResearchDialog.java index 698789b849..b22315dfc5 100644 --- a/core/src/mindustry/ui/dialogs/ResearchDialog.java +++ b/core/src/mindustry/ui/dialogs/ResearchDialog.java @@ -116,60 +116,7 @@ public class ResearchDialog extends BaseDialog{ if(currPlanet != null && currPlanet.techTree != null){ switchTree(currPlanet.techTree); } - - items = new ItemSeq(){ - //store sector item amounts for modifications - ObjectMap cache = new ObjectMap<>(); - - { - //add global counts of each sector - for(Planet planet : content.planets()){ - for(Sector sector : planet.sectors){ - if(sector.hasBase()){ - ItemSeq cached = sector.items(); - cache.put(sector, cached); - cached.each((item, amount) -> { - values[item.id] += Math.max(amount, 0); - total += Math.max(amount, 0); - }); - } - } - } - } - - //this is the only method that actually modifies the sequence itself. - @Override - public void add(Item item, int amount){ - //only have custom removal logic for when the sequence gets items taken out of it (e.g. research) - if(amount < 0){ - //remove items from each sector's storage, one by one - - //negate amount since it's being *removed* - this makes it positive - amount = -amount; - - //% that gets removed from each sector - double percentage = (double)amount / get(item); - int[] counter = {amount}; - cache.each((sector, seq) -> { - if(counter[0] == 0) return; - - //amount that will be removed - int toRemove = Math.min((int)Math.ceil(percentage * seq.get(item)), counter[0]); - - //actually remove it from the sector - sector.removeItem(item, toRemove); - seq.remove(item, toRemove); - - counter[0] -= toRemove; - }); - - //negate again to display correct number - amount = -amount; - } - - super.add(item, amount); - } - }; + rebuildItems(); checkNodes(root); treeLayout(); @@ -240,6 +187,68 @@ public class ResearchDialog extends BaseDialog{ }); } + public void rebuildItems(){ + items = new ItemSeq(){ + //store sector item amounts for modifications + ObjectMap cache = new ObjectMap<>(); + + { + //first, find a planet associated with the current tech tree + Planet rootPlanet = lastNode.planet != null ? lastNode.planet : content.planets().find(p -> p.techTree == lastNode); + + //if there is no root, fall back to serpulo + if(rootPlanet == null) rootPlanet = Planets.serpulo; + + //add global counts of each sector + for(Sector sector : rootPlanet.sectors){ + if(sector.hasBase()){ + ItemSeq cached = sector.items(); + cache.put(sector, cached); + cached.each((item, amount) -> { + values[item.id] += Math.max(amount, 0); + total += Math.max(amount, 0); + }); + } + } + } + + //this is the only method that actually modifies the sequence itself. + @Override + public void add(Item item, int amount){ + //only have custom removal logic for when the sequence gets items taken out of it (e.g. research) + if(amount < 0){ + //remove items from each sector's storage, one by one + + //negate amount since it's being *removed* - this makes it positive + amount = -amount; + + //% that gets removed from each sector + double percentage = (double)amount / get(item); + int[] counter = {amount}; + cache.each((sector, seq) -> { + if(counter[0] == 0) return; + + //amount that will be removed + int toRemove = Math.min((int)Math.ceil(percentage * seq.get(item)), counter[0]); + + //actually remove it from the sector + sector.removeItem(item, toRemove); + seq.remove(item, toRemove); + + counter[0] -= toRemove; + }); + + //negate again to display correct number + amount = -amount; + } + + super.add(item, amount); + } + }; + + itemDisplay.rebuild(items); + } + public @Nullable TechNode getPrefRoot(){ Planet currPlanet = ui.planet.isShown() ? ui.planet.state.planet : @@ -253,6 +262,8 @@ public class ResearchDialog extends BaseDialog{ root = new TechTreeNode(node, null); lastNode = node; view.rebuildAll(); + + rebuildItems(); } public void rebuildTree(TechNode node){ diff --git a/core/src/mindustry/ui/fragments/MenuFragment.java b/core/src/mindustry/ui/fragments/MenuFragment.java index bd8f34d3b1..567475678e 100644 --- a/core/src/mindustry/ui/fragments/MenuFragment.java +++ b/core/src/mindustry/ui/fragments/MenuFragment.java @@ -12,6 +12,7 @@ import arc.scene.ui.*; import arc.scene.ui.ImageButton.*; import arc.scene.ui.TextButton.*; import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.core.*; import mindustry.game.EventType.*; @@ -26,6 +27,7 @@ public class MenuFragment{ private Table container, submenu; private Button currentMenu; private MenuRenderer renderer; + private Seq customButtons = new Seq<>(); public void build(Group parent){ renderer = new MenuRenderer(); @@ -40,16 +42,21 @@ public class MenuFragment{ parent.fill((x, y, w, h) -> renderer.render()); parent.fill(c -> { - container = c; - c.name = "menu container"; + c.pane(Styles.noBarPane, cont -> { + container = cont; + cont.name = "menu container"; - if(!mobile){ - buildDesktop(); - Events.on(ResizeEvent.class, event -> buildDesktop()); - }else{ - buildMobile(); - Events.on(ResizeEvent.class, event -> buildMobile()); - } + if(!mobile){ + c.left(); + buildDesktop(); + Events.on(ResizeEvent.class, event -> buildDesktop()); + }else{ + buildMobile(); + Events.on(ResizeEvent.class, event -> buildMobile()); + } + }).with(pane -> { + pane.setOverscroll(false, false); + }).grow(); }); parent.fill(c -> c.bottom().right().button(Icon.discord, new ImageButtonStyle(){{ @@ -63,8 +70,6 @@ public class MenuFragment{ fontColor = Color.white; up = infoBanner; }}, ui.about::show).size(84, 45).name("info")); - - }else if(becontrol.active()){ parent.fill(c -> c.bottom().right().button("@be.check", Icon.refresh, () -> { ui.loadfrag.show(); @@ -83,7 +88,7 @@ public class MenuFragment{ parent.fill((x, y, w, h) -> { TextureRegion logo = Core.atlas.find("logo"); float width = Core.graphics.getWidth(), height = Core.graphics.getHeight() - Core.scene.marginTop; - float logoscl = Scl.scl(1); + float logoscl = Scl.scl(1) * logo.scale; float logow = Math.min(logo.width * logoscl, Core.graphics.getWidth() - Scl.scl(20)); float logoh = logow * (float)logo.height / logo.width; @@ -116,23 +121,28 @@ public class MenuFragment{ mods = new MobileButton(Icon.book, "@mods", ui.mods::show), exit = new MobileButton(Icon.exit, "@quit", () -> Core.app.exit()); + Seq customs = customButtons.map(b -> new MobileButton(b.icon, b.text, b.runnable == null ? () -> {} : b.runnable)); + if(!Core.graphics.isPortrait()){ container.marginTop(60f); container.add(play); container.add(join); container.add(custom); container.add(maps); + // add odd custom buttons + for(int i = 1; i < customs.size; i += 2){ + container.add(customs.get(i)); + } container.row(); - container.table(table -> { - table.defaults().set(container.defaults()); - - table.add(editor); - table.add(tools); - - table.add(mods); - if(!ios) table.add(exit); - }).colspan(4); + container.add(editor); + container.add(tools); + container.add(mods); + // add even custom buttons (before the exit button) + for(int i = 0; i < customs.size; i += 2){ + container.add(customs.get(i)); + } + if(!ios) container.add(exit); }else{ container.marginTop(0f); container.add(play); @@ -144,13 +154,13 @@ public class MenuFragment{ container.add(editor); container.add(tools); container.row(); - - container.table(table -> { - table.defaults().set(container.defaults()); - - table.add(mods); - if(!ios) table.add(exit); - }).colspan(2); + container.add(mods); + // add custom buttons + for(int i = 0; i < customs.size; i++){ + container.add(customs.get(i)); + if(i % 2 == 0) container.row(); + } + if(!ios) container.add(exit); } } @@ -168,23 +178,23 @@ public class MenuFragment{ t.name = "buttons"; buttons(t, - new Buttoni("@play", Icon.play, - new Buttoni("@campaign", Icon.play, () -> checkPlay(ui.planet::show)), - new Buttoni("@joingame", Icon.add, () -> checkPlay(ui.join::show)), - new Buttoni("@customgame", Icon.terrain, () -> checkPlay(ui.custom::show)), - new Buttoni("@loadgame", Icon.download, () -> checkPlay(ui.load::show)) + new MenuButton("@play", Icon.play, + new MenuButton("@campaign", Icon.play, () -> checkPlay(ui.planet::show)), + new MenuButton("@joingame", Icon.add, () -> checkPlay(ui.join::show)), + new MenuButton("@customgame", Icon.terrain, () -> checkPlay(ui.custom::show)), + new MenuButton("@loadgame", Icon.download, () -> checkPlay(ui.load::show)) ), - new Buttoni("@database.button", Icon.menu, - new Buttoni("@schematics", Icon.paste, ui.schematics::show), - new Buttoni("@database", Icon.book, ui.database::show), - new Buttoni("@about.button", Icon.info, ui.about::show) + new MenuButton("@database.button", Icon.menu, + new MenuButton("@schematics", Icon.paste, ui.schematics::show), + new MenuButton("@database", Icon.book, ui.database::show), + new MenuButton("@about.button", Icon.info, ui.about::show) ), - new Buttoni("@editor", Icon.terrain, () -> checkPlay(ui.maps::show)), steam ? new Buttoni("@workshop", Icon.steam, platform::openWorkshop) : null, - new Buttoni("@mods", Icon.book, ui.mods::show), - new Buttoni("@settings", Icon.settings, ui.settings::show), - new Buttoni("@quit", Icon.exit, Core.app::exit) + new MenuButton("@editor", Icon.terrain, () -> checkPlay(ui.maps::show)), steam ? new MenuButton("@workshop", Icon.steam, platform::openWorkshop) : null, + new MenuButton("@mods", Icon.book, ui.mods::show), + new MenuButton("@settings", Icon.settings, ui.settings::show) ); - + buttons(t, customButtons.toArray(MenuButton.class)); + buttons(t, new MenuButton("@quit", Icon.exit, Core.app::exit)); }).width(width).growY(); container.table(background, t -> { @@ -199,7 +209,6 @@ public class MenuFragment{ } private void checkPlay(Runnable run){ - if(!mods.hasContentErrors()){ run.run(); }else{ @@ -222,8 +231,8 @@ public class MenuFragment{ submenu.actions(Actions.alpha(1f), Actions.alpha(0f, 0.2f, Interp.fade), Actions.run(() -> submenu.clearChildren())); } - private void buttons(Table t, Buttoni... buttons){ - for(Buttoni b : buttons){ + private void buttons(Table t, MenuButton... buttons){ + for(MenuButton b : buttons){ if(b == null) continue; Button[] out = {null}; out[0] = t.button(b.text, b.icon, Styles.flatToggleMenut, () -> { @@ -251,24 +260,56 @@ public class MenuFragment{ } } - private static class Buttoni{ - final Drawable icon; - final String text; - final Runnable runnable; - final Buttoni[] submenu; + /** Adds a custom button to the menu. */ + public void addButton(String text, Drawable icon, Runnable callback){ + addButton(new MenuButton(text, icon, callback)); + } - public Buttoni(String text, Drawable icon, Runnable runnable){ + /** Adds a custom button to the menu. */ + public void addButton(String text, Runnable callback){ + addButton(text, Styles.none, callback); + } + + /** + * Adds a custom button to the menu. + * If {@link MenuButton#submenu} is null or the player is on mobile, {@link MenuButton#runnable} is invoked on click. + * Otherwise, {@link MenuButton#submenu} is shown. + */ + public void addButton(MenuButton button){ + customButtons.add(button); + } + + /** Represents a menu button definition. */ + public static class MenuButton{ + public final Drawable icon; + public final String text; + /** Runnable ran when the button is clicked. Ignored on desktop if {@link #submenu} is not null. */ + public final Runnable runnable; + /** Submenu shown when this button is clicked. Used instead of {@link #runnable} on desktop. */ + public final @Nullable MenuButton[] submenu; + + /** Constructs a simple menu button, which behaves the same way on desktop and mobile. */ + public MenuButton(String text, Drawable icon, Runnable runnable){ this.icon = icon; this.text = text; this.runnable = runnable; this.submenu = null; } - public Buttoni(String text, Drawable icon, Buttoni... buttons){ + /** Constructs a button that runs the runnable when clicked on mobile or shows the submenu on desktop. */ + public MenuButton(String text, Drawable icon, Runnable runnable, MenuButton... submenu){ + this.icon = icon; + this.text = text; + this.runnable = runnable; + this.submenu = submenu; + } + + /** Comstructs a desktop-only button; used internally. */ + MenuButton(String text, Drawable icon, MenuButton... submenu){ this.icon = icon; this.text = text; this.runnable = () -> {}; - this.submenu = buttons; + this.submenu = submenu; } } } diff --git a/core/src/mindustry/world/blocks/campaign/LaunchPad.java b/core/src/mindustry/world/blocks/campaign/LaunchPad.java index 062a0d80f1..a41ca50edc 100644 --- a/core/src/mindustry/world/blocks/campaign/LaunchPad.java +++ b/core/src/mindustry/world/blocks/campaign/LaunchPad.java @@ -229,7 +229,8 @@ public class LaunchPad extends Block{ Draw.z(Layer.weather - 1); TextureRegion region = blockOn() instanceof mindustry.world.blocks.campaign.LaunchPad p ? p.podRegion : Core.atlas.find("launchpod"); - float rw = region.width * Draw.scl * scale, rh = region.height * Draw.scl * scale; + scale *= region.scl(); + float rw = region.width * scale, rh = region.height * scale; Draw.alpha(alpha); Draw.rect(region, cx, cy, rw, rh, rotation); diff --git a/core/src/mindustry/world/blocks/distribution/Conveyor.java b/core/src/mindustry/world/blocks/distribution/Conveyor.java index b8e70f42f5..68532002dc 100644 --- a/core/src/mindustry/world/blocks/distribution/Conveyor.java +++ b/core/src/mindustry/world/blocks/distribution/Conveyor.java @@ -73,7 +73,7 @@ public class Conveyor extends Block implements Autotiler{ if(bits == null) return; TextureRegion region = regions[bits[0]][0]; - Draw.rect(region, plan.drawx(), plan.drawy(), region.width * bits[1] * Draw.scl, region.height * bits[2] * Draw.scl, plan.rotation * 90); + Draw.rect(region, plan.drawx(), plan.drawy(), region.width * bits[1] * region.scl(), region.height * bits[2] * region.scl(), plan.rotation * 90); } @Override diff --git a/core/src/mindustry/world/blocks/distribution/DirectionBridge.java b/core/src/mindustry/world/blocks/distribution/DirectionBridge.java index 3749462af0..581cd672f7 100644 --- a/core/src/mindustry/world/blocks/distribution/DirectionBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DirectionBridge.java @@ -134,16 +134,16 @@ public class DirectionBridge extends Block{ cy = (y1 + y2)/2f, len = Math.max(Math.abs(x1 - x2), Math.abs(y1 - y2)) - size * tilesize; - Draw.rect(bridgeRegion, cx, cy, len, bridgeRegion.height * Draw.scl, angle); + Draw.rect(bridgeRegion, cx, cy, len, bridgeRegion.height * bridgeRegion.scl(), angle); if(liquidColor != null){ Draw.color(liquidColor, liquidColor.a * Renderer.bridgeOpacity); - Draw.rect(bridgeLiquidRegion, cx, cy, len, bridgeLiquidRegion.height * Draw.scl, angle); + Draw.rect(bridgeLiquidRegion, cx, cy, len, bridgeLiquidRegion.height * bridgeLiquidRegion.scl(), angle); Draw.color(); Draw.alpha(Renderer.bridgeOpacity); } if(bridgeBotRegion.found()){ Draw.color(0.4f, 0.4f, 0.4f, 0.4f * Renderer.bridgeOpacity); - Draw.rect(bridgeBotRegion, cx, cy, len, bridgeBotRegion.height * Draw.scl, angle); + Draw.rect(bridgeBotRegion, cx, cy, len, bridgeBotRegion.height * bridgeBotRegion.scl(), angle); Draw.reset(); } Draw.alpha(Renderer.bridgeOpacity); diff --git a/core/src/mindustry/world/blocks/distribution/Duct.java b/core/src/mindustry/world/blocks/distribution/Duct.java index c738270dde..3b5f0ef678 100644 --- a/core/src/mindustry/world/blocks/distribution/Duct.java +++ b/core/src/mindustry/world/blocks/distribution/Duct.java @@ -179,7 +179,7 @@ public class Duct extends Block implements Autotiler{ ((source.block.rotate && source.front() == this && source.block.hasItems && source.block.isDuct) || Edges.getFacingEdge(source.tile(), tile).relativeTo(tile) == rotation) : //standard acceptance - do not accept from front - !(source.block.rotate && next == source) && Math.abs(Edges.getFacingEdge(source.tile, tile).relativeTo(tile.x, tile.y) - rotation) != 2 + !(source.block.rotate && next == source) && Edges.getFacingEdge(source.tile, tile) != null && Math.abs(Edges.getFacingEdge(source.tile, tile).relativeTo(tile.x, tile.y) - rotation) != 2 ); } diff --git a/core/src/mindustry/world/blocks/distribution/Sorter.java b/core/src/mindustry/world/blocks/distribution/Sorter.java index b37195173c..a400ef8c20 100644 --- a/core/src/mindustry/world/blocks/distribution/Sorter.java +++ b/core/src/mindustry/world/blocks/distribution/Sorter.java @@ -1,5 +1,6 @@ package mindustry.world.blocks.distribution; +import arc.*; import arc.graphics.g2d.*; import arc.math.*; import arc.scene.ui.layout.*; @@ -49,6 +50,11 @@ public class Sorter extends Block{ return build == null || build.sortItem == null ? 0 : build.sortItem.color.rgba(); } + @Override + protected TextureRegion[] icons(){ + return new TextureRegion[]{Core.atlas.find("source-bottom"), region}; + } + public class SorterBuild extends Building{ public @Nullable Item sortItem; @@ -63,15 +69,16 @@ public class Sorter extends Block{ @Override public void draw(){ - super.draw(); if(sortItem == null){ - Draw.rect("cross", x, y); + Draw.rect("cross-full", x, y); }else{ Draw.color(sortItem.color); - Draw.rect("center", x, y); + Fill.square(x, y, tilesize/2f - 0.00001f); Draw.color(); } + + super.draw(); } @Override diff --git a/core/src/mindustry/world/blocks/environment/SeaBush.java b/core/src/mindustry/world/blocks/environment/SeaBush.java index 8dfe08663b..23315d1652 100644 --- a/core/src/mindustry/world/blocks/environment/SeaBush.java +++ b/core/src/mindustry/world/blocks/environment/SeaBush.java @@ -28,7 +28,7 @@ public class SeaBush extends Prop{ int lobes = rand.random(lobesMin, lobesMax); for(int i = 0; i < lobes; i++){ float ba = i / (float)lobes * 360f + offset + rand.range(spread), angle = ba + Mathf.sin(Time.time + rand.random(0, timeRange), rand.random(sclMin, sclMax), rand.random(magMin, magMax)); - float w = region.width * Draw.scl, h = region.height * Draw.scl; + float w = region.width * region.scl(), h = region.height * region.scl(); var region = Angles.angleDist(ba, 225f) <= botAngle ? botRegion : this.region; Draw.rect(region, diff --git a/core/src/mindustry/world/blocks/environment/Seaweed.java b/core/src/mindustry/world/blocks/environment/Seaweed.java index 3d9cd1aa37..bc1c852f90 100644 --- a/core/src/mindustry/world/blocks/environment/Seaweed.java +++ b/core/src/mindustry/world/blocks/environment/Seaweed.java @@ -19,7 +19,7 @@ public class Seaweed extends Prop{ x = tile.worldx(), y = tile.worldy(), rotmag = 3f, rotscl = 0.5f, rot = Mathf.randomSeedRange(tile.pos(), 20f) - 45 + Mathf.sin(Time.time + x, 50f * rotscl, 0.5f * rotmag) + Mathf.sin(Time.time - y, 65f * rotscl, 0.9f* rotmag) + Mathf.sin(Time.time + y - x, 85f * rotscl, 0.9f* rotmag), - w = region.width * Draw.scl, h = region.height * Draw.scl, + w = region.width * region.scl(), h = region.height * region.scl(), scl = 30f, mag = 0.3f; Draw.rectv(region, x, y, w, h, rot, vec -> vec.add( diff --git a/core/src/mindustry/world/blocks/environment/TreeBlock.java b/core/src/mindustry/world/blocks/environment/TreeBlock.java index d33c1afc30..9bc7cc1732 100644 --- a/core/src/mindustry/world/blocks/environment/TreeBlock.java +++ b/core/src/mindustry/world/blocks/environment/TreeBlock.java @@ -23,7 +23,7 @@ public class TreeBlock extends Block{ float x = tile.worldx(), y = tile.worldy(), rot = Mathf.randomSeed(tile.pos(), 0, 4) * 90 + Mathf.sin(Time.time + x, 50f, 0.5f) + Mathf.sin(Time.time - y, 65f, 0.9f) + Mathf.sin(Time.time + y - x, 85f, 0.9f), - w = region.width * Draw.scl, h = region.height * Draw.scl, + w = region.width * region.scl(), h = region.height * region.scl(), scl = 30f, mag = 0.2f; if(shadow.found()){ diff --git a/core/src/mindustry/world/blocks/environment/WobbleProp.java b/core/src/mindustry/world/blocks/environment/WobbleProp.java index 1663faf80e..6c2670db78 100644 --- a/core/src/mindustry/world/blocks/environment/WobbleProp.java +++ b/core/src/mindustry/world/blocks/environment/WobbleProp.java @@ -18,7 +18,7 @@ public class WobbleProp extends Prop{ public void drawBase(Tile tile){ var region = variants > 0 ? variantRegions[Mathf.randomSeed(tile.pos(), 0, Math.max(0, variantRegions.length - 1))] : this.region; - Draw.rectv(region, tile.worldx(), tile.worldy(), region.width * Draw.scl, region.height * Draw.scl, 0, vec -> vec.add( + Draw.rectv(region, tile.worldx(), tile.worldy(), region.width * region.scl(), region.height * region.scl(), 0, vec -> vec.add( Mathf.sin(vec.y*3 + Time.time, wscl, wmag) + Mathf.sin(vec.x*3 - Time.time, 70 * wtscl, 0.8f * wmag2), Mathf.cos(vec.x*3 + Time.time + 8, wscl + 6f, wmag * 1.1f) + Mathf.sin(vec.y*3 - Time.time, 50 * wtscl, 0.2f * wmag2) )); diff --git a/core/src/mindustry/world/blocks/liquid/LiquidRouter.java b/core/src/mindustry/world/blocks/liquid/LiquidRouter.java index 67b5b289ad..d0b000739d 100644 --- a/core/src/mindustry/world/blocks/liquid/LiquidRouter.java +++ b/core/src/mindustry/world/blocks/liquid/LiquidRouter.java @@ -9,9 +9,7 @@ public class LiquidRouter extends LiquidBlock{ public LiquidRouter(String name){ super(name); - - underBullets = true; - solid = false; + solid = true; noUpdateDisabled = true; canOverdrive = false; floating = true; diff --git a/core/src/mindustry/world/blocks/logic/CanvasBlock.java b/core/src/mindustry/world/blocks/logic/CanvasBlock.java index feb17ccfa0..09ef5c373c 100644 --- a/core/src/mindustry/world/blocks/logic/CanvasBlock.java +++ b/core/src/mindustry/world/blocks/logic/CanvasBlock.java @@ -21,7 +21,7 @@ import static mindustry.Vars.*; public class CanvasBlock extends Block{ public float padding = 0f; public int canvasSize = 8; - public int[] palette = {0x634b7dff, 0xc45d9f_ff, 0xe39aac_ff, 0xf0dab1_ff, 0x6461c2_ff, 0x2ba9b4_ff, 0x93d4b5_ff, 0xf0f6e8_ff}; + public int[] palette = {0x362944_ff, 0xc45d9f_ff, 0xe39aac_ff, 0xf0dab1_ff, 0x6461c2_ff, 0x2ba9b4_ff, 0x93d4b5_ff, 0xf0f6e8_ff}; public int bitsPerPixel; public IntIntMap colorToIndex = new IntIntMap(); diff --git a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java index 04a7fbf19f..0bd7c0c7ad 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadConveyor.java @@ -197,26 +197,28 @@ public class PayloadConveyor extends Block{ float glow = Math.max((dst - (Math.abs(fract() - 0.5f) * 2)) / dst, 0); Draw.mixcol(team.color, glow); - float trnext = fract() * size * tilesize, trprev = size * tilesize * (fract() - 1), rot = rotdeg(); - - TextureRegion clipped = clipRegion(tile.getHitbox(Tmp.r1), tile.getHitbox(Tmp.r2).move(trnext, 0), topRegion); float s = tilesize * size; + float trnext = s * fract(), trprev = s * (fract() - 1), rot = rotdeg(); //next - Tmp.v1.set((s- clipped.width *Draw.scl) + clipped.width /2f*Draw.scl - s/2f, s- clipped.height *Draw.scl + clipped.height /2f*Draw.scl - s/2f).rotate(rot); + TextureRegion clipped = clipRegion(tile.getHitbox(Tmp.r1), tile.getHitbox(Tmp.r2).move(trnext, 0), topRegion); + float widthNext = (s - clipped.width * clipped.scl()) * 0.5f; + float heightNext = (s - clipped.height * clipped.scl()) * 0.5f; + Tmp.v1.set(widthNext, heightNext).rotate(rot); Draw.rect(clipped, x + Tmp.v1.x, y + Tmp.v1.y, rot); - clipped = clipRegion(tile.getHitbox(Tmp.r1), tile.getHitbox(Tmp.r2).move(trprev, 0), topRegion); - //prev - Tmp.v1.set(- s/2f + clipped.width /2f*Draw.scl, - s/2f + clipped.height /2f*Draw.scl).rotate(rot); + clipped = clipRegion(tile.getHitbox(Tmp.r1), tile.getHitbox(Tmp.r2).move(trprev, 0), topRegion); + float widthPrev = (clipped.width * clipped.scl() - s) * 0.5f; + float heightPrev = (clipped.height * clipped.scl() - s) * 0.5f; + Tmp.v1.set(widthPrev, heightPrev).rotate(rot); Draw.rect(clipped, x + Tmp.v1.x, y + Tmp.v1.y, rot); for(int i = 0; i < 4; i++){ if(blends(i) && i != rotation){ Draw.alpha(1f - Interp.pow5In.apply(fract())); //prev from back - Tmp.v1.set(- s/2f + clipped.width /2f*Draw.scl, - s/2f + clipped.height /2f*Draw.scl).rotate(i * 90 + 180); + Tmp.v1.set(widthPrev, heightPrev).rotate(i * 90 + 180); Draw.rect(clipped, x + Tmp.v1.x, y + Tmp.v1.y, i * 90 + 180); } } @@ -331,6 +333,7 @@ public class PayloadConveyor extends Block{ TextureRegion out = Tmp.tr1; out.set(region.texture); + out.scale = region.scale; if(overlaps){ float w = region.u2 - region.u; diff --git a/core/src/mindustry/world/blocks/power/VariableReactor.java b/core/src/mindustry/world/blocks/power/VariableReactor.java index ae9aa1c693..891a25d573 100644 --- a/core/src/mindustry/world/blocks/power/VariableReactor.java +++ b/core/src/mindustry/world/blocks/power/VariableReactor.java @@ -78,7 +78,7 @@ public class VariableReactor extends PowerGenerator{ public void updateTile(){ heat = calculateHeat(sideHeat); - productionEfficiency = Mathf.clamp(heat / maxHeat) * efficiency; + productionEfficiency = efficiency; warmup = Mathf.lerpDelta(warmup, productionEfficiency > 0 ? 1f : 0f, warmupSpeed); if(instability >= 1f){ diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index e7d33cbf80..dc66658461 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -39,9 +39,9 @@ public class AttributeCrafter extends GenericCrafter{ addBar("efficiency", (AttributeCrafterBuild entity) -> new Bar( - () -> Core.bundle.format("bar.efficiency", (int)(entity.efficiencyScale() * 100 * displayEfficiencyScale)), + () -> Core.bundle.format("bar.efficiency", (int)(entity.efficiencyMultiplier() * 100 * displayEfficiencyScale)), () -> Pal.lightOrange, - entity::efficiencyScale)); + entity::efficiencyMultiplier)); } @Override @@ -62,10 +62,10 @@ public class AttributeCrafter extends GenericCrafter{ @Override public float getProgressIncrease(float base){ - return super.getProgressIncrease(base) * efficiencyScale(); + return super.getProgressIncrease(base) * efficiencyMultiplier(); } - public float efficiencyScale(){ + public float efficiencyMultiplier(){ return baseEfficiency + Math.min(maxBoost, boostScale * attrsum) + attribute.env(); } diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 4a9b65f9b8..fd4e76a9d8 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -237,6 +237,19 @@ public class GenericCrafter extends Block{ dumpOutputs(); } + @Override + public float getProgressIncrease(float baseTime){ + //limit progress increase by maximum amount of liquid it can produce + float scaling = 1f; + if(outputLiquids != null){ + for(var s : outputLiquids){ + scaling = Math.min(scaling, (liquidCapacity - liquids.get(s.liquid)) / (s.amount * edelta())); + } + } + + return super.getProgressIncrease(baseTime) * scaling; + } + public float warmupTarget(){ return 1f; } diff --git a/core/src/mindustry/world/blocks/production/Separator.java b/core/src/mindustry/world/blocks/production/Separator.java index 79d3741691..fd387d6960 100644 --- a/core/src/mindustry/world/blocks/production/Separator.java +++ b/core/src/mindustry/world/blocks/production/Separator.java @@ -1,17 +1,16 @@ package mindustry.world.blocks.production; -import arc.*; import arc.graphics.g2d.*; import arc.math.*; import arc.util.*; import arc.util.io.*; -import mindustry.annotations.Annotations.*; +import mindustry.entities.units.*; import mindustry.gen.*; -import mindustry.graphics.*; import mindustry.logic.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.consumers.*; +import mindustry.world.draw.*; import mindustry.world.meta.*; /** @@ -23,9 +22,7 @@ public class Separator extends Block{ public ItemStack[] results; public float craftTime; - public @Load("@-liquid") TextureRegion liquidRegion; - public @Load("@-spinner") TextureRegion spinnerRegion; - public float spinnerSpeed = 3f; + public DrawBlock drawer = new DrawDefault(); public Separator(String name){ super(name); @@ -51,6 +48,23 @@ public class Separator extends Block{ consItems = findConsumer(c -> c instanceof ConsumeItems); } + @Override + public void load(){ + super.load(); + + drawer.load(this); + } + + @Override + public void drawPlanRegion(BuildPlan plan, Eachable list){ + drawer.drawPlan(this, plan, list); + } + + @Override + public TextureRegion[] icons(){ + return drawer.finalIcons(this); + } + public class SeparatorBuild extends Building{ public float progress; public float totalProgress; @@ -81,13 +95,28 @@ public class Separator extends Block{ @Override public void draw(){ - super.draw(); + drawer.draw(this); + } - Drawf.liquid(liquidRegion, x, y, liquids.currentAmount() / liquidCapacity, liquids.current().color); + @Override + public void drawLight(){ + super.drawLight(); + drawer.drawLight(this); + } - if(Core.atlas.isFound(spinnerRegion)){ - Draw.rect(spinnerRegion, x, y, totalProgress * spinnerSpeed); - } + @Override + public float warmup(){ + return warmup; + } + + @Override + public float progress(){ + return progress; + } + + @Override + public float totalProgress(){ + return totalProgress; } @Override diff --git a/core/src/mindustry/world/blocks/sandbox/ItemSource.java b/core/src/mindustry/world/blocks/sandbox/ItemSource.java index 06afbd3e66..0a7461a7ec 100644 --- a/core/src/mindustry/world/blocks/sandbox/ItemSource.java +++ b/core/src/mindustry/world/blocks/sandbox/ItemSource.java @@ -1,5 +1,6 @@ package mindustry.world.blocks.sandbox; +import arc.*; import arc.graphics.g2d.*; import arc.scene.ui.layout.*; import arc.util.*; @@ -45,6 +46,11 @@ public class ItemSource extends Block{ stats.add(Stat.output, itemsPerSecond, StatUnit.itemsSecond); } + @Override + protected TextureRegion[] icons(){ + return new TextureRegion[]{Core.atlas.find("source-bottom"), region}; + } + @Override public void drawPlanConfig(BuildPlan plan, Eachable list){ drawPlanConfigCenter(plan, plan.config, "center", true); @@ -61,15 +67,15 @@ public class ItemSource extends Block{ @Override public void draw(){ - super.draw(); - if(outputItem == null){ - Draw.rect("cross", x, y); + Draw.rect("cross-full", x, y); }else{ Draw.color(outputItem.color); - Draw.rect("center", x, y); + Fill.square(x, y, tilesize/2f - 0.00001f); Draw.color(); } + + super.draw(); } @Override diff --git a/core/src/mindustry/world/blocks/storage/Unloader.java b/core/src/mindustry/world/blocks/storage/Unloader.java index 85b0ed8667..a707676222 100644 --- a/core/src/mindustry/world/blocks/storage/Unloader.java +++ b/core/src/mindustry/world/blocks/storage/Unloader.java @@ -89,11 +89,11 @@ public class Unloader extends Block{ //sort so it gives priority for blocks that can only either receive or give (not both), and then by load, and then by last use //highest = unload from, lowest = unload to int unloadPriority = Boolean.compare(x.canUnload && !x.canLoad, y.canUnload && !y.canLoad); //priority to receive if it cannot give - if (unloadPriority != 0) return unloadPriority; + if(unloadPriority != 0) return unloadPriority; int loadPriority = Boolean.compare(x.canUnload || !x.canLoad, y.canUnload || !y.canLoad); //priority to give if it cannot receive - if (loadPriority != 0) return loadPriority; + if(loadPriority != 0) return loadPriority; int loadFactor = Float.compare(x.loadFactor, y.loadFactor); - if (loadFactor != 0) return loadFactor; + if(loadFactor != 0) return loadFactor; return Integer.compare(y.lastUsed, x.lastUsed); //inverted }; diff --git a/core/src/mindustry/world/draw/DrawHeatRegion.java b/core/src/mindustry/world/draw/DrawHeatRegion.java index 8b2ccd129d..7c42f9c228 100644 --- a/core/src/mindustry/world/draw/DrawHeatRegion.java +++ b/core/src/mindustry/world/draw/DrawHeatRegion.java @@ -12,10 +12,15 @@ import mindustry.world.blocks.production.HeatCrafter.*; public class DrawHeatRegion extends DrawBlock{ public Color color = new Color(1f, 0.22f, 0.22f, 0.8f); public float pulse = 0.3f, pulseScl = 10f; + public float layer = Layer.blockAdditive; public TextureRegion heat; public String suffix = "-glow"; + public DrawHeatRegion(float layer){ + this.layer = layer; + } + public DrawHeatRegion(String suffix){ this.suffix = suffix; } @@ -27,13 +32,16 @@ public class DrawHeatRegion extends DrawBlock{ public void draw(Building build){ Draw.z(Layer.blockAdditive); if(build instanceof HeatCrafterBuild hc && hc.heat > 0){ + + float z = Draw.z(); + if(layer > 0) Draw.z(layer); Draw.blend(Blending.additive); Draw.color(color, Mathf.clamp(hc.heat / hc.heatRequirement()) * (color.a * (1f - pulse + Mathf.absin(pulseScl, pulse)))); Draw.rect(heat, build.x, build.y); Draw.blend(); Draw.color(); + Draw.z(z); } - Draw.z(Layer.block); } @Override diff --git a/core/src/mindustry/world/draw/DrawPlasma.java b/core/src/mindustry/world/draw/DrawPlasma.java index 2b5a47caeb..7cb5c81a73 100644 --- a/core/src/mindustry/world/draw/DrawPlasma.java +++ b/core/src/mindustry/world/draw/DrawPlasma.java @@ -33,7 +33,7 @@ public class DrawPlasma extends DrawFlame{ public void draw(Building build){ Draw.blend(Blending.additive); for(int i = 0; i < regions.length; i++){ - float r = ((float)regions[i].width * Draw.scl - 3f + Mathf.absin(Time.time, 2f + i * 1f, 5f - i * 0.5f)); + float r = ((float)regions[i].width * regions[i].scl() - 3f + Mathf.absin(Time.time, 2f + i * 1f, 5f - i * 0.5f)); Draw.color(plasma1, plasma2, (float)i / regions.length); Draw.alpha((0.3f + Mathf.absin(Time.time, 2f + i * 2f, 0.3f + i * 0.05f)) * build.warmup()); diff --git a/core/src/mindustry/world/draw/DrawRegion.java b/core/src/mindustry/world/draw/DrawRegion.java index 492310eafb..6ef9259105 100644 --- a/core/src/mindustry/world/draw/DrawRegion.java +++ b/core/src/mindustry/world/draw/DrawRegion.java @@ -21,6 +21,17 @@ public class DrawRegion extends DrawBlock{ this.suffix = suffix; } + public DrawRegion(String suffix, float rotateSpeed){ + this.suffix = suffix; + this.rotateSpeed = rotateSpeed; + } + + public DrawRegion(String suffix, float rotateSpeed, boolean spinSprite){ + this.suffix = suffix; + this.spinSprite = spinSprite; + this.rotateSpeed = rotateSpeed; + } + public DrawRegion(){ } diff --git a/core/src/mindustry/world/meta/BuildVisibility.java b/core/src/mindustry/world/meta/BuildVisibility.java index d09940abe3..ee84452779 100644 --- a/core/src/mindustry/world/meta/BuildVisibility.java +++ b/core/src/mindustry/world/meta/BuildVisibility.java @@ -2,19 +2,19 @@ package mindustry.world.meta; import arc.func.*; import mindustry.*; -import mindustry.content.*; -public enum BuildVisibility{ - hidden(() -> false), - shown(() -> true), - debugOnly(() -> false), - editorOnly(() -> Vars.state.rules.editor), - sandboxOnly(() -> Vars.state == null || Vars.state.rules.infiniteResources), - campaignOnly(() -> Vars.state == null || Vars.state.isCampaign()), - lightingOnly(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()), - berylliumOnly(() -> !Vars.state.rules.hiddenBuildItems.contains(Items.beryllium)), - ammoOnly(() -> Vars.state == null || Vars.state.rules.unitAmmo), - fogOnly(() -> Vars.state == null || Vars.state.rules.fog || Vars.state.rules.editor); +public class BuildVisibility{ + public static final BuildVisibility + + hidden = new BuildVisibility(() -> false), + shown = new BuildVisibility(() -> true), + debugOnly = new BuildVisibility(() -> false), + editorOnly = new BuildVisibility(() -> Vars.state.rules.editor), + sandboxOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.infiniteResources), + campaignOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.isCampaign()), + lightingOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.lighting || Vars.state.isCampaign()), + ammoOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.unitAmmo), + fogOnly = new BuildVisibility(() -> Vars.state == null || Vars.state.rules.fog || Vars.state.rules.editor); private final Boolp visible; @@ -22,7 +22,7 @@ public enum BuildVisibility{ return visible.get(); } - BuildVisibility(Boolp visible){ + public BuildVisibility(Boolp visible){ this.visible = visible; } } diff --git a/jitpack.yml b/jitpack.yml index 5bfaf0f47e..ba04fbf8f9 100644 --- a/jitpack.yml +++ b/jitpack.yml @@ -1,8 +1,8 @@ jdk: - openjdk16 before_install: - - wget https://github.com/sormuras/bach/raw/master/install-jdk.sh - - source install-jdk.sh --feature 16 + - wget https://github.com/sormuras/bach/raw/releases/11/install-jdk.sh + - source install-jdk.sh --feature 17 - jshell --version install: - ./gradlew publishToMavenLocal diff --git a/servers_be.json b/servers_be.json index bbaa7b980b..1429cc4273 100644 --- a/servers_be.json +++ b/servers_be.json @@ -20,7 +20,11 @@ "address": "n1.yeet.ml:6574" }, { - "name":"Phoenix-Network", - "address":["be.phoenix-network.dev"] + "name": "Phoenix-Network", + "address": ["be.phoenix-network.dev"] + }, + { + "name": "Darkdustry", + "address": ["darkdustry.tk"] } ] diff --git a/servers_v6.json b/servers_v6.json index fd3d6f67de..c462348361 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -13,7 +13,7 @@ }, { "name": "Omega Hub", - "address": ["n5.yeet.ml", "n1.yeet.ml:6568","n5.yeet.ml:6569" , "n1.yeet.ml:6570" ,"n1.yeet.ml:6571", "n1.yeet.ml:6609"] + "address": ["n1.mindustry.me:6614","n1.mindustry.me:6568","n1.mindustry.me:6612","n1.mindustry.me:6570","n1.mindustry.me:6609"] }, { "name": "EasyPlay", @@ -111,10 +111,6 @@ "name": "CxZx", "address": ["usfr2.forcehost.net:25578"] }, - { - "name": "Mindustry Español", - "address": ["n1.xpdustry.fr:6001"] - }, { "name": "CreateDustry", "address": ["129.151.64.81:26032"] @@ -135,12 +131,12 @@ "name": "Shard", "address": ["59.12.120.171"] }, - { - "name": "OMNIDUSTRY", - "address": ["109.94.209.233"] - } { "name": "New Campaign Like", "address": ["n5.yeet.ml:6568"] }, + { + "name": "AlternightBR", + "address": ["mindustrypt.ga:8300"] + } ] diff --git a/servers_v7.json b/servers_v7.json index 2b507d8b6d..f25eb45e11 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -1,5 +1,8 @@ [ - + { + "name": "Mindustry Español", + "address": ["n1.xpdustry.fr:6001"] + }, { "name": "mindustry.pl", "address": ["0.baseduser.eu.org:6966", "0.baseduser.eu.org:6666", "0.baseduser.eu.org:6000"] @@ -8,6 +11,10 @@ "name": "SynapseOS", "address": ["0nera.ru:7777", "185.178.45.224:7777"] }, + { + "name": "Voiddustry", + "address": ["45.144.66.250:6566"] + }, { "name": "C.A.M.S.", "address": ["0.baseduser.eu.org:42001", "0.baseduser.eu.org:42002"] @@ -26,7 +33,7 @@ }, { "name": "Omega Hub", - "address": ["n1.yeet.ml:6572", "n1.yeet.ml:6573", "n1.yeet.ml:6604", "n5.yeet.ml:6605", "n5.yeet.ml:6606", "n1.yeet.ml:6608","n1.yeet.ml:6599", "n1.yeet.ml:6567"] + "address": ["n1.mindustry.me:6572","n1.mindustry.me:6573","n1.mindustry.me:6574","n1.mindustry.me:6604","n1.mindustry.me:6569","n1.mindustry.me:6611","n1.mindustry.me:6610","n1.mindustry.me:6599","n1.mindustry.me","n1.mindustry.me:6608"] }, { "name": "KMWStudios", @@ -94,7 +101,7 @@ }, { "name": "Fish", - "address": ["170.187.144.235"] + "address": ["170.187.144.235", "45.79.203.155"] }, { "name": "Harders", @@ -102,7 +109,7 @@ }, { "name": "OMNIDUSTRY", - "address": ["109.94.209.233:6568","109.94.209.233:6569","109.94.209.233:6570","109.94.209.233:6571","109.94.209.233:6572","109.94.209.233:6573","109.94.209.233:6574"] + "address": ["109.94.209.233","109.94.209.233:6568","109.94.209.233:6569","109.94.209.233:6570","109.94.209.233:6571","109.94.209.233:6572","109.94.209.233:6573","109.94.209.233:6574"] }, { "name": "The Devil", @@ -110,10 +117,22 @@ }, { "name": "Eradicationdustry", - "address": ["n1.yeet.ml:6577", "n1.yeet.ml:6576", "n1.yeet.ml:6602", "n1.yeet.ml:6669", "eradicationmindustry.yeet.ml:9547"] + "address": ["n1.yeet.ml:6577", "n1.yeet.ml:6576", "n1.yeet.ml:6602", "n1.yeet.ml:6669", "eradicationmindustry.yeet.ml:9547", "n1.yeet.ml:6593"] }, { - "name": "AlternightBR", - "address": ["mindustry.ga:6567","mindustry.ga:6565","mindustry.ga:7770","mindustry.ga:6564","mindustry.ga:6566"] - } + "name": "AlternightBrasil", + "address": ["mindustrypt.ga:6567","mindustrypt.ga:6565","mindustrypt.ga:7770","mindustrypt.ga:6564","mindustrypt.ga:6566","mindustrypt.ga:6568"] + }, + { + "name": "Vanilla", + "address": ["130.162.228.202"] + }, + { + "name": "LightDustry", + "address": ["own-formerly.craft.playit.gg:26618", "lightdusy.ddns.net:6567", "lightdusy.ddns.net:6568", "209.25.142.180:39065"] + }, + { + "name": "Simply", + "address": ["178.203.202.107"] + } ] diff --git a/tools/src/mindustry/tools/IconConverter.java b/tools/src/mindustry/tools/IconConverter.java index bb320a4114..3b0c0d7c13 100644 --- a/tools/src/mindustry/tools/IconConverter.java +++ b/tools/src/mindustry/tools/IconConverter.java @@ -10,6 +10,14 @@ public class IconConverter{ float width, height; public static void main(String[] __){ + /* + Process for adding an icon to the font: + 1. Have an SVG ready, possibly created with this tool. + 2. Go to Fontello and load the config.json from core/assets-raw/fontgen/config.json + 3. Drag the SVG in. + 4. Export the config and font file, replace the old config. + 5. Take the font (ttf) from the zip, open it in FontForge, and merge it into font.woff and icon.ttf. Usually, you would do view -> go to (the 0x unicode index). + **/ Log.info("Converting icons..."); Time.mark();