More lights
@@ -8,7 +8,7 @@ buildscript{
|
|||||||
}
|
}
|
||||||
|
|
||||||
dependencies{
|
dependencies{
|
||||||
classpath 'com.android.tools.build:gradle:3.4.1'
|
classpath 'com.android.tools.build:gradle:3.5.2'
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ buildscript{
|
|||||||
|
|
||||||
allprojects{
|
allprojects{
|
||||||
version = 'release'
|
version = 'release'
|
||||||
apply plugin: 'maven'
|
apply plugin: 'maven-publish'
|
||||||
group = 'com.github.Anuken'
|
group = 'com.github.Anuken'
|
||||||
|
|
||||||
ext{
|
ext{
|
||||||
|
|||||||
|
After Width: | Height: | Size: 1.7 KiB |
|
After Width: | Height: | Size: 2.3 KiB |
@@ -86,7 +86,7 @@ committingchanges = Comitting Changes
|
|||||||
done = Done
|
done = Done
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
|
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -103,7 +103,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
@@ -560,6 +560,8 @@ bar.heat = Heat
|
|||||||
bar.power = Power
|
bar.power = Power
|
||||||
bar.progress = Build Progress
|
bar.progress = Build Progress
|
||||||
bar.spawned = Units: {0}/{1}
|
bar.spawned = Units: {0}/{1}
|
||||||
|
bar.input = Input
|
||||||
|
bar.output = Output
|
||||||
|
|
||||||
bullet.damage = [stat]{0}[lightgray] damage
|
bullet.damage = [stat]{0}[lightgray] damage
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
bullet.splashdamage = [stat]{0}[lightgray] area dmg ~[stat] {1}[lightgray] tiles
|
||||||
@@ -597,7 +599,7 @@ setting.shadows.name = Shadows
|
|||||||
setting.blockreplace.name = Automatic Block Suggestions
|
setting.blockreplace.name = Automatic Block Suggestions
|
||||||
setting.linear.name = Linear Filtering
|
setting.linear.name = Linear Filtering
|
||||||
setting.hints.name = Hints
|
setting.hints.name = Hints
|
||||||
setting.buildautopause.name = Auto-pause Building
|
setting.buildautopause.name = Auto-Pause Building
|
||||||
setting.animatedwater.name = Animated Water
|
setting.animatedwater.name = Animated Water
|
||||||
setting.animatedshields.name = Animated Shields
|
setting.animatedshields.name = Animated Shields
|
||||||
setting.antialias.name = Antialias[lightgray] (requires restart)[]
|
setting.antialias.name = Antialias[lightgray] (requires restart)[]
|
||||||
@@ -622,7 +624,7 @@ setting.destroyedblocks.name = Display Destroyed Blocks
|
|||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
||||||
setting.sensitivity.name = Controller Sensitivity
|
setting.sensitivity.name = Controller Sensitivity
|
||||||
setting.saveinterval.name = Save Interval
|
setting.saveinterval.name = Save Interval
|
||||||
setting.seconds = {0} Seconds
|
setting.seconds = {0} seconds
|
||||||
setting.fullscreen.name = Fullscreen
|
setting.fullscreen.name = Fullscreen
|
||||||
setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart)
|
setting.borderlesswindow.name = Borderless Window[lightgray] (may require restart)
|
||||||
setting.fps.name = Show FPS & Ping
|
setting.fps.name = Show FPS & Ping
|
||||||
@@ -658,8 +660,9 @@ keybind.clear_building.name = Clear Building
|
|||||||
keybind.press = Press a key...
|
keybind.press = Press a key...
|
||||||
keybind.press.axis = Press an axis or key...
|
keybind.press.axis = Press an axis or key...
|
||||||
keybind.screenshot.name = Map Screenshot
|
keybind.screenshot.name = Map Screenshot
|
||||||
keybind.move_x.name = Move x
|
keybind.move_x.name = Move X
|
||||||
keybind.move_y.name = Move y
|
keybind.move_y.name = Move Y
|
||||||
|
keybind.mouse_move.name = Follow Mouse
|
||||||
keybind.schematic_select.name = Select Region
|
keybind.schematic_select.name = Select Region
|
||||||
keybind.schematic_menu.name = Schematic Menu
|
keybind.schematic_menu.name = Schematic Menu
|
||||||
keybind.schematic_flip_x.name = Flip Schematic X
|
keybind.schematic_flip_x.name = Flip Schematic X
|
||||||
@@ -679,16 +682,16 @@ keybind.pause_building.name = Pause/Resume Building
|
|||||||
keybind.minimap.name = Minimap
|
keybind.minimap.name = Minimap
|
||||||
keybind.dash.name = Dash
|
keybind.dash.name = Dash
|
||||||
keybind.chat.name = Chat
|
keybind.chat.name = Chat
|
||||||
keybind.player_list.name = Player list
|
keybind.player_list.name = Player List
|
||||||
keybind.console.name = Console
|
keybind.console.name = Console
|
||||||
keybind.rotate.name = Rotate
|
keybind.rotate.name = Rotate
|
||||||
keybind.rotateplaced.name = Rotate Existing (Hold)
|
keybind.rotateplaced.name = Rotate Existing (Hold)
|
||||||
keybind.toggle_menus.name = Toggle menus
|
keybind.toggle_menus.name = Toggle Menus
|
||||||
keybind.chat_history_prev.name = Chat history prev
|
keybind.chat_history_prev.name = Chat History Prev
|
||||||
keybind.chat_history_next.name = Chat history next
|
keybind.chat_history_next.name = Chat History Next
|
||||||
keybind.chat_scroll.name = Chat scroll
|
keybind.chat_scroll.name = Chat Scroll
|
||||||
keybind.drop_unit.name = Drop Unit
|
keybind.drop_unit.name = Drop Unit
|
||||||
keybind.zoom_minimap.name = Zoom minimap
|
keybind.zoom_minimap.name = Zoom Minimap
|
||||||
mode.help.title = Description of modes
|
mode.help.title = Description of modes
|
||||||
mode.survival.name = Survival
|
mode.survival.name = Survival
|
||||||
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
mode.survival.description = The normal mode. Limited resources and automatic incoming waves.\n[gray]Requires enemy spawns in the map to play.
|
||||||
@@ -702,6 +705,7 @@ mode.attack.description = Destroy the enemy's base. No waves.\n[gray]Requires a
|
|||||||
mode.custom = Custom Rules
|
mode.custom = Custom Rules
|
||||||
|
|
||||||
rules.infiniteresources = Infinite Resources
|
rules.infiniteresources = Infinite Resources
|
||||||
|
rules.reactorexplosions = Reactor Explosions
|
||||||
rules.wavetimer = Wave Timer
|
rules.wavetimer = Wave Timer
|
||||||
rules.waves = Waves
|
rules.waves = Waves
|
||||||
rules.attack = Attack Mode
|
rules.attack = Attack Mode
|
||||||
@@ -717,7 +721,7 @@ rules.respawntime = Respawn Time:[lightgray] (sec)
|
|||||||
rules.wavespacing = Wave Spacing:[lightgray] (sec)
|
rules.wavespacing = Wave Spacing:[lightgray] (sec)
|
||||||
rules.buildcostmultiplier = Build Cost Multiplier
|
rules.buildcostmultiplier = Build Cost Multiplier
|
||||||
rules.buildspeedmultiplier = Build Speed Multiplier
|
rules.buildspeedmultiplier = Build Speed Multiplier
|
||||||
rules.waitForWaveToEnd = Waves wait for enemies
|
rules.waitForWaveToEnd = Waves Wait for Enemies
|
||||||
rules.dropzoneradius = Drop Zone Radius:[lightgray] (tiles)
|
rules.dropzoneradius = Drop Zone Radius:[lightgray] (tiles)
|
||||||
rules.respawns = Max respawns per wave
|
rules.respawns = Max respawns per wave
|
||||||
rules.limitedRespawns = Limit Respawns
|
rules.limitedRespawns = Limit Respawns
|
||||||
@@ -888,6 +892,7 @@ block.distributor.name = Distributor
|
|||||||
block.sorter.name = Sorter
|
block.sorter.name = Sorter
|
||||||
block.inverted-sorter.name = Inverted Sorter
|
block.inverted-sorter.name = Inverted Sorter
|
||||||
block.message.name = Message
|
block.message.name = Message
|
||||||
|
block.illuminator.name = Illuminator
|
||||||
block.overflow-gate.name = Overflow Gate
|
block.overflow-gate.name = Overflow Gate
|
||||||
block.silicon-smelter.name = Silicon Smelter
|
block.silicon-smelter.name = Silicon Smelter
|
||||||
block.phase-weaver.name = Phase Weaver
|
block.phase-weaver.name = Phase Weaver
|
||||||
@@ -901,6 +906,7 @@ block.coal-centrifuge.name = Coal Centrifuge
|
|||||||
block.power-node.name = Power Node
|
block.power-node.name = Power Node
|
||||||
block.power-node-large.name = Large Power Node
|
block.power-node-large.name = Large Power Node
|
||||||
block.surge-tower.name = Surge Tower
|
block.surge-tower.name = Surge Tower
|
||||||
|
block.diode.name = Battery Diode
|
||||||
block.battery.name = Battery
|
block.battery.name = Battery
|
||||||
block.battery-large.name = Large Battery
|
block.battery-large.name = Large Battery
|
||||||
block.combustion-generator.name = Combustion Generator
|
block.combustion-generator.name = Combustion Generator
|
||||||
@@ -1004,7 +1010,7 @@ unit.eradicator.name = Eradicator
|
|||||||
unit.lich.name = Lich
|
unit.lich.name = Lich
|
||||||
unit.reaper.name = Reaper
|
unit.reaper.name = Reaper
|
||||||
tutorial.next = [lightgray]<Tap to continue>
|
tutorial.next = [lightgray]<Tap to continue>
|
||||||
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse [[WASD] to move.\n[accent]Hold [[Ctrl] while scrolling[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro = You have entered the[scarlet] Mindustry Tutorial.[]\nUse [accent][[WASD][] to move.\n[accent]Hold [[Ctrl] while scrolling[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers[] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
||||||
tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\n[accent]Right-click[] to stop building.
|
tutorial.drill = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nClick the drill tab in the bottom right.\nSelect the[accent] mechanical drill[]. Place it on a copper vein by clicking.\n[accent]Right-click[] to stop building.
|
||||||
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Mining manually is inefficient.\n[accent]Drills[] can mine automatically.\nTap the drill tab in the bottom right.\nSelect the[accent] mechanical drill[].\nPlace it on a copper vein by tapping, then press the[accent] checkmark[] below to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
||||||
@@ -1114,7 +1120,7 @@ block.sorter.description = Sorts items. If an item matches the selection, it is
|
|||||||
block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead.
|
block.inverted-sorter.description = Processes items like a standard sorter, but outputs selected items to the sides instead.
|
||||||
block.router.description = Accepts items, then outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.\n\n[scarlet]Never use next to production inputs, as they will get clogged by output.[]
|
block.router.description = Accepts items, then outputs them to up to 3 other directions equally. Useful for splitting the materials from one source to multiple targets.\n\n[scarlet]Never use next to production inputs, as they will get clogged by output.[]
|
||||||
block.distributor.description = An advanced router. Splits items to up to 7 other directions equally.
|
block.distributor.description = An advanced router. Splits items to up to 7 other directions equally.
|
||||||
block.overflow-gate.description = A combination splitter and router. Only outputs to the left and right if the front path is blocked.
|
block.overflow-gate.description = Only outputs to the left and right if the front path is blocked.
|
||||||
block.mass-driver.description = The ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. Requires power to operate.
|
block.mass-driver.description = The ultimate item transport block. Collects several items and then shoots them to another mass driver over a long range. Requires power to operate.
|
||||||
block.mechanical-pump.description = A cheap pump with slow output, but no power consumption.
|
block.mechanical-pump.description = A cheap pump with slow output, but no power consumption.
|
||||||
block.rotary-pump.description = An advanced pump. Pumps more liquid, but requires power.
|
block.rotary-pump.description = An advanced pump. Pumps more liquid, but requires power.
|
||||||
@@ -1129,6 +1135,7 @@ block.phase-conduit.description = Advanced liquid transport block. Uses power to
|
|||||||
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.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.power-node-large.description = An advanced power node with greater range.
|
||||||
block.surge-tower.description = An extremely long-range power node with fewer available connections.
|
block.surge-tower.description = An extremely long-range power node with fewer available connections.
|
||||||
|
block.diode.description = Battery power can flow through this block in only one direction, but only if the other side has less power stored.
|
||||||
block.battery.description = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit.
|
block.battery.description = Stores power as a buffer in times of surplus energy. Outputs power in times of deficit.
|
||||||
block.battery-large.description = Stores much more power than a regular battery.
|
block.battery-large.description = Stores much more power than a regular battery.
|
||||||
block.combustion-generator.description = Generates power by burning flammable materials, such as coal.
|
block.combustion-generator.description = Generates power by burning flammable materials, such as coal.
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Nahrávám prohlížecí soubor
|
|||||||
committingchanges = Provádím změny
|
committingchanges = Provádím změny
|
||||||
done = Hotovo
|
done = Hotovo
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Uploading Preview File
|
|||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Done
|
done = Done
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
@@ -1152,9 +1152,9 @@ block.spirit-factory.description = Produziert leichte Drohnen, die Erz abbauen u
|
|||||||
block.phantom-factory.description = Produziert erweiterte Drohnen, die deutlich effizienter sind als Spirit-Drohnen.
|
block.phantom-factory.description = Produziert erweiterte Drohnen, die deutlich effizienter sind als Spirit-Drohnen.
|
||||||
block.wraith-factory.description = Produziert schnelle Abfangjäger.
|
block.wraith-factory.description = Produziert schnelle Abfangjäger.
|
||||||
block.ghoul-factory.description = Produziert schwere Flächenbomber.
|
block.ghoul-factory.description = Produziert schwere Flächenbomber.
|
||||||
block.revenant-factory.description = Produziert schwere Laser-Bodeneinheiten.
|
block.revenant-factory.description = Produziert schwere Raketen basierte Flugeinheiten.
|
||||||
block.dagger-factory.description = Produziert Standard-Bodeneinheiten.
|
block.dagger-factory.description = Produziert Standard-Bodeneinheiten.
|
||||||
block.crawler-factory.description = Produces fast self-destructing swarm units.
|
block.crawler-factory.description = Produziert schnelle selbstzerstörende Schwarmeinheiten.
|
||||||
block.titan-factory.description = Produziert fortgeschrittene, gepanzerte Bodeneinheiten.
|
block.titan-factory.description = Produziert fortgeschrittene, gepanzerte Bodeneinheiten.
|
||||||
block.fortress-factory.description = Produziert schwere Artillerie-Bodeneinheiten.
|
block.fortress-factory.description = Produziert schwere Artillerie-Bodeneinheiten.
|
||||||
block.repair-point.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung.
|
block.repair-point.description = Heilt durchgehend die nächste befreundete, beschädigte Einheit in der Umgebung.
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Uploading Preview File
|
|||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Hecho
|
done = Hecho
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Eelvaate faili üleslaadimine
|
|||||||
committingchanges = Muudatuste teostamine
|
committingchanges = Muudatuste teostamine
|
||||||
done = Valmis
|
done = Valmis
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Aurrebista fitxategia igotzen
|
|||||||
committingchanges = Aldaketak aplikatzen
|
committingchanges = Aldaketak aplikatzen
|
||||||
done = Egina
|
done = Egina
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Publication du fichier d'aperçu
|
|||||||
committingchanges = Validation des modifications
|
committingchanges = Validation des modifications
|
||||||
done = Fait
|
done = Fait
|
||||||
feature.unsupported = Votre appareil ne supporte pas cette fonctionnalité.
|
feature.unsupported = Votre appareil ne supporte pas cette fonctionnalité.
|
||||||
mods.alphainfo = Gardez à l'esprit que les mods sont en alpha et[scarlet] peuvent être très buggés[].\nMerci de signaler les problèmes que vous rencontrez via le Github ou le Discord Mindustry.
|
mods.alphainfo = Gardez à l'esprit que les mods sont en alpha et[scarlet] peuvent être très buggés[].\nMerci de signaler les problèmes que vous rencontrez via le GitHub ou le Discord Mindustry.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]Aucun mod trouvé!
|
mods.none = [LIGHT_GRAY]Aucun mod trouvé!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Activer
|
|||||||
mod.requiresrestart = Le jeu va maintenant s'arrêter pour appliquer les modifications du mod.
|
mod.requiresrestart = Le jeu va maintenant s'arrêter pour appliquer les modifications du mod.
|
||||||
mod.reloadrequired = [scarlet]Rechargement requis
|
mod.reloadrequired = [scarlet]Rechargement requis
|
||||||
mod.import = Importer un mod
|
mod.import = Importer un mod
|
||||||
mod.import.github = Importer un mod Github
|
mod.import.github = Importer un mod GitHub
|
||||||
mod.remove.confirm = Ce mod sera supprimé.
|
mod.remove.confirm = Ce mod sera supprimé.
|
||||||
mod.author = [LIGHT_GRAY]Auteur:[] {0}
|
mod.author = [LIGHT_GRAY]Auteur:[] {0}
|
||||||
mod.missing = Cette sauvegarde contient des mods que vous avez récemment mis à jour ou que vous avez désinstallés. Votre sauvegarde risque d'être corrompue. Êtes-vous sûr de vouloir l'importer?\n[lightgray]Mods:\n{0}
|
mod.missing = Cette sauvegarde contient des mods que vous avez récemment mis à jour ou que vous avez désinstallés. Votre sauvegarde risque d'être corrompue. Êtes-vous sûr de vouloir l'importer?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Uploading Preview File
|
|||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Done
|
done = Done
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Mengupload File Tinjauan
|
|||||||
committingchanges = Membuat Perubahan
|
committingchanges = Membuat Perubahan
|
||||||
done = Selesai
|
done = Selesai
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Carico file di anteprima
|
|||||||
committingchanges = Applico le modifiche
|
committingchanges = Applico le modifiche
|
||||||
done = Fatto
|
done = Fatto
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Tieni a mente che queste mod sono in alpha, e[scarlet] possono avere molti bug[].\nRiporta tutti i problemi che trovi in Mindustry su Github o Discord.
|
mods.alphainfo = Tieni a mente che queste mod sono in alpha, e[scarlet] possono avere molti bug[].\nRiporta tutti i problemi che trovi in Mindustry su GitHub o Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]Nessuna mod trovata!
|
mods.none = [LIGHT_GRAY]Nessuna mod trovata!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Abilita
|
|||||||
mod.requiresrestart = .
|
mod.requiresrestart = .
|
||||||
mod.reloadrequired = [scarlet]Riavvio necessario
|
mod.reloadrequired = [scarlet]Riavvio necessario
|
||||||
mod.import = Importa una mod
|
mod.import = Importa una mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = Questa mod verrà cancellata.
|
mod.remove.confirm = Questa mod verrà cancellata.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = Questo salvataggio contiene mod che hai recentemente aggiornato o non le hai piu installate. Il salvataggio può essere corrotto. sei sicuro di volerlo caricare?\n[lightgray]Mods:\n{0}
|
mod.missing = Questo salvataggio contiene mod che hai recentemente aggiornato o non le hai piu installate. Il salvataggio può essere corrotto. sei sicuro di volerlo caricare?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = プレビューファイルをアップロードしてい
|
|||||||
committingchanges = 変更を適応中
|
committingchanges = 変更を適応中
|
||||||
done = 完了
|
done = 完了
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Mods機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 発見した問題をMindustry Githubに報告してください。
|
mods.alphainfo = Mods機能は実験的なものです。[scarlet] エラーが含まれている可能性があります[]。\n 発見した問題をMindustry GitHubに報告してください。
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]Modが見つかりませんでした!
|
mods.none = [LIGHT_GRAY]Modが見つかりませんでした!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = 有効化
|
|||||||
mod.requiresrestart = このModをインストールするためにはゲームの再起動が必要です。
|
mod.requiresrestart = このModをインストールするためにはゲームの再起動が必要です。
|
||||||
mod.reloadrequired = [scarlet]Modを有効にするには、この画面を開き直してください。
|
mod.reloadrequired = [scarlet]Modを有効にするには、この画面を開き直してください。
|
||||||
mod.import = Modをインポート
|
mod.import = Modをインポート
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = このModを削除します。
|
mod.remove.confirm = このModを削除します。
|
||||||
mod.author = [LIGHT_GRAY]著者:[] {0}
|
mod.author = [LIGHT_GRAY]著者:[] {0}
|
||||||
mod.missing = このセーブには、アップグレードされた可能性があるModsか、ここに存在しないModsが必要です。 メモリのセーブを保存する! ロードしてもよろしいですか?\n[lightgray]MODS:\n{0}
|
mod.missing = このセーブには、アップグレードされた可能性があるModsか、ここに存在しないModsが必要です。 メモリのセーブを保存する! ロードしてもよろしいですか?\n[lightgray]MODS:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Uploading Preview File
|
|||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Done
|
done = Done
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Uploading Preview File
|
|||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Done
|
done = Done
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -3,16 +3,16 @@ credits = Zasłużeni
|
|||||||
contributors = Tłumacze i pomocnicy
|
contributors = Tłumacze i pomocnicy
|
||||||
discord = Odwiedź nasz serwer Discord!
|
discord = Odwiedź nasz serwer Discord!
|
||||||
link.discord.description = Oficjalny serwer Discord Mindustry
|
link.discord.description = Oficjalny serwer Discord Mindustry
|
||||||
link.reddit.description = The Mindustry subreddit
|
link.reddit.description = Subreddit Mindustry
|
||||||
link.github.description = Kod źródłowy gry
|
link.github.description = Kod źródłowy gry
|
||||||
link.changelog.description = Informacje o aktualizacjach
|
link.changelog.description = Historia aktualizacji
|
||||||
link.dev-builds.description = Niestabilne wersje gry
|
link.dev-builds.description = Niestabilne wersje gry
|
||||||
link.trello.description = Oficjalna tablica Trello z planowanym funkcjami
|
link.trello.description = Oficjalna tablica Trello z planowanym funkcjami
|
||||||
link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania
|
link.itch.io.description = Strona itch.io z oficjanymi wersjami do pobrania
|
||||||
link.google-play.description = Strona na sklepie Google Play
|
link.google-play.description = Strona na sklepie Google Play
|
||||||
link.wiki.description = Oficjana Wiki Mindustry
|
link.wiki.description = Oficjana Wiki Mindustry
|
||||||
linkfail = Nie udało się otworzyć linku!\nURL został skopiowany.
|
linkfail = Nie udało się otworzyć linku!\nURL został skopiowany.
|
||||||
screenshot = Zapisano zdjęcie do {0}
|
screenshot = Zapisano zdjęcie w {0}
|
||||||
screenshot.invalid = Zrzut ekranu jest zbyt duży. Najprawdopodobniej brakuje miejsca w pamięci urządzenia.
|
screenshot.invalid = Zrzut ekranu jest zbyt duży. Najprawdopodobniej brakuje miejsca w pamięci urządzenia.
|
||||||
gameover = Koniec Gry
|
gameover = Koniec Gry
|
||||||
gameover.pvp = Zwyciężyła drużyna [accent]{0}[]!
|
gameover.pvp = Zwyciężyła drużyna [accent]{0}[]!
|
||||||
@@ -24,22 +24,22 @@ load.image = Obrazy
|
|||||||
load.content = Treść
|
load.content = Treść
|
||||||
load.system = System
|
load.system = System
|
||||||
load.mod = Mody
|
load.mod = Mody
|
||||||
schematic = Schematic
|
schematic = Schemat
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Zapisz schemat...
|
||||||
schematics = Schematics
|
schematics = Schematy
|
||||||
schematic.replace = A schematic by that name already exists. Replace it?
|
schematic.replace = Schemat o takiej nazwie już istnieje. Czy chcesz go zastąpić?
|
||||||
schematic.import = Import Schematic...
|
schematic.import = Importuj Schemat...
|
||||||
schematic.exportfile = Export File
|
schematic.exportfile = Eksportuj plik
|
||||||
schematic.importfile = Import File
|
schematic.importfile = Importuj plik
|
||||||
schematic.browseworkshop = Browse Workshop
|
schematic.browseworkshop = Przeglądaj Warsztat
|
||||||
schematic.copy = Copy to Clipboard
|
schematic.copy = Zapisano w schowku
|
||||||
schematic.copy.import = Import from Clipboard
|
schematic.copy.import = Importuj ze schowka
|
||||||
schematic.shareworkshop = Share on Workshop
|
schematic.shareworkshop = Podziel się na Warsztacie
|
||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Odwróć schemat
|
||||||
schematic.saved = Schematic saved.
|
schematic.saved = Schemat zapisany.
|
||||||
schematic.delete.confirm = This schematic will be utterly eradicated.
|
schematic.delete.confirm = Ten schemat zostanie kompletnie wyeliminowany.
|
||||||
schematic.rename = Rename Schematic
|
schematic.rename = Zmień nazwę schematu
|
||||||
schematic.info = {0}x{1}, {2} blocks
|
schematic.info = {0}x{1}, {2} bloków
|
||||||
stat.wave = Fale powstrzymane:[accent] {0}
|
stat.wave = Fale powstrzymane:[accent] {0}
|
||||||
stat.enemiesDestroyed = Przeciwnicy zniszczeni:[accent] {0}
|
stat.enemiesDestroyed = Przeciwnicy zniszczeni:[accent] {0}
|
||||||
stat.built = Budynki zbudowane:[accent] {0}
|
stat.built = Budynki zbudowane:[accent] {0}
|
||||||
@@ -55,7 +55,7 @@ level.select = Wybrany poziom
|
|||||||
level.mode = Tryb gry:
|
level.mode = Tryb gry:
|
||||||
showagain = Nie pokazuj tego więcej
|
showagain = Nie pokazuj tego więcej
|
||||||
coreattack = < Rdzeń jest atakowany! >
|
coreattack = < Rdzeń jest atakowany! >
|
||||||
nearpoint = [[ [scarlet]OPUŚĆ PUNKT ZRZUTU NATYCHMIAST[] ]\nnadciąga zniszczenie
|
nearpoint = [[ [scarlet]NATYCHMIAST OPUŚĆ PUNKT ZRZUTU[] ]\nnadciąga zniszczenie
|
||||||
database = Centralna baza danych
|
database = Centralna baza danych
|
||||||
savegame = Zapisz Grę
|
savegame = Zapisz Grę
|
||||||
loadgame = Wczytaj Grę
|
loadgame = Wczytaj Grę
|
||||||
@@ -64,7 +64,7 @@ customgame = Własna Gra
|
|||||||
newgame = Nowa Gra
|
newgame = Nowa Gra
|
||||||
none = <brak>
|
none = <brak>
|
||||||
minimap = Minimapa
|
minimap = Minimapa
|
||||||
position = Position
|
position = Pozycja
|
||||||
close = Zamknij
|
close = Zamknij
|
||||||
website = Strona Gry
|
website = Strona Gry
|
||||||
quit = Wyjdź
|
quit = Wyjdź
|
||||||
@@ -80,30 +80,30 @@ uploadingcontent = Przesyłanie Zawartości
|
|||||||
uploadingpreviewfile = Przesyłanie Pliku Podglądu
|
uploadingpreviewfile = Przesyłanie Pliku Podglądu
|
||||||
committingchanges = Zatwierdzanie Zmian
|
committingchanges = Zatwierdzanie Zmian
|
||||||
done = Gotowe
|
done = Gotowe
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Twoje urządzenie nie wspiera tej funkcji.
|
||||||
mods.alphainfo = Pamiętaj, że mody są wersji alpha, i[scarlet] mogą być pełne błędów[].\nZgłaszaj wszystkie znalezione problemy na Mindustry Github lub Discord.
|
mods.alphainfo = Pamiętaj, że mody są wersji alpha, i[scarlet] mogą być pełne błędów[].\nZgłaszaj wszystkie znalezione problemy na Mindustry GitHub lub Discord.
|
||||||
mods.alpha = [scarlet](Alpha)
|
mods.alpha = [scarlet](Alpha)
|
||||||
mods = Mody
|
mods = Mody
|
||||||
mods.none = [LIGHT_GRAY]Nie znaleziono modów!
|
mods.none = [LIGHT_GRAY]Nie znaleziono modów!
|
||||||
mods.guide = Modding Guide
|
mods.guide = Poradnik do modów
|
||||||
mods.report = Report Bug
|
mods.report = Zgłoś Błąd
|
||||||
mods.openfolder = Open Mod Folder
|
mods.openfolder = Otwórz folder z modami
|
||||||
mod.enabled = [lightgray]Włączony
|
mod.enabled = [lightgray]Włączony
|
||||||
mod.disabled = [scarlet]Wyłączony
|
mod.disabled = [scarlet]Wyłączony
|
||||||
mod.disable = Disable
|
mod.disable = Wyłącz
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Nie udało się usunąć moda. Plik może być w użyciu.
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Brakujące zależności: {0}
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]Brakuje zależności dla moda '{0}':[accent] {1}\n[lightgray]Najpierw trzeba ściągnąć te mody.\nMod zostanie automatycznie wyłączony.
|
||||||
mod.enable = Enable
|
mod.enable = Włącz
|
||||||
mod.requiresrestart = Gra się wyłączy aby wprowadzić zmiany moda.
|
mod.requiresrestart = Gra się wyłączy aby wprowadzić zmiany moda.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Wymagany restart
|
||||||
mod.import = Importuj Mod
|
mod.import = Importuj Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Importuj mod z GitHuba
|
||||||
mod.remove.confirm = Ten mod zostanie usunięty.
|
mod.remove.confirm = Ten mod zostanie usunięty.
|
||||||
mod.author = [LIGHT_GRAY]Autor:[] {0}
|
mod.author = [LIGHT_GRAY]Autor:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = Ten zapis zawiera mody, które zostały niedawno zaktualizowane, bądź nie są już zainstalowane. Zapis może zostać uszkodzony. Czy jesteś pewien, że chcesz go załadować?\n[lightgray]Mody:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Przed opublikowaniem tego moda na Warsztacie musisz dodać zdjęcie podglądowe.\nDodaj zdjęcie o nazwie[accent] preview.png[] do folderu moda i spróbuj jeszcze raz.
|
||||||
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
mod.folder.missing = Jedynie mody w formie folderów mogą się znaleźć na Warsztacie.\nBy zamienić moda w folder, wyciągnij go z archiwum, umieść w folderze i usuń archiwum. Później uruchom ponownie grę bądź załaduj ponownie mody.
|
||||||
about.button = O Grze
|
about.button = O Grze
|
||||||
name = Nazwa:
|
name = Nazwa:
|
||||||
noname = Najpierw wybierz [accent]nazwę gracza[]
|
noname = Najpierw wybierz [accent]nazwę gracza[]
|
||||||
@@ -125,7 +125,7 @@ server.kicked.clientOutdated = Nieaktualna gra! Zaktualizują ją!
|
|||||||
server.kicked.serverOutdated = Nieaktualny serwer! Poproś hosta o jego aktualizację.
|
server.kicked.serverOutdated = Nieaktualny serwer! Poproś hosta o jego aktualizację.
|
||||||
server.kicked.banned = Zostałeś zbanowany na tym serwerze.
|
server.kicked.banned = Zostałeś zbanowany na tym serwerze.
|
||||||
server.kicked.typeMismatch = Ten serwer jest niekompatybilny z twoją wersją gry.
|
server.kicked.typeMismatch = Ten serwer jest niekompatybilny z twoją wersją gry.
|
||||||
server.kicked.playerLimit = Serwer pełny. Poczekaj na wolny slot.
|
server.kicked.playerLimit = Serwer pełny. Poczekaj na wolne miejsce.
|
||||||
server.kicked.recentKick = Zostałeś niedawno wyrzucony.\nPoczekaj chwilę przed ponownym połączniem.
|
server.kicked.recentKick = Zostałeś niedawno wyrzucony.\nPoczekaj chwilę przed ponownym połączniem.
|
||||||
server.kicked.nameInUse = Ta nazwa jest już zajęta na tym serwerze.
|
server.kicked.nameInUse = Ta nazwa jest już zajęta na tym serwerze.
|
||||||
server.kicked.nameEmpty = Wybrana przez Ciebie nazwa jest nieprawidłowa.
|
server.kicked.nameEmpty = Wybrana przez Ciebie nazwa jest nieprawidłowa.
|
||||||
@@ -133,8 +133,8 @@ server.kicked.idInUse = Jesteś już na serwerze! Używanie tego samego konta na
|
|||||||
server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobierz oficjalną wersję.
|
server.kicked.customClient = Ten serwer nie wspomaga wersji deweloperskich. Pobierz oficjalną wersję.
|
||||||
server.kicked.gameover = Koniec gry!
|
server.kicked.gameover = Koniec gry!
|
||||||
server.versions = Twoja wersja gry:[accent] {0}[]\nWersja gry serwera:[accent] {1}[]
|
server.versions = Twoja wersja gry:[accent] {0}[]\nWersja gry serwera:[accent] {1}[]
|
||||||
host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[] i [scarlet]6568.[]\nKtokolwiek z tym samym [LIGHT_GRAY]wifi lub hotspotem[] powinien zobaczyć twój serwer.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, [accent]przekierowywanie portów[] jest potrzebne.\n\n[LIGHT_GRAY]Notka:Jeśli ktokolwiek ma problem z dołączeniem do gry, upewnij się, że udostępniłeś Mindustry dostęp do sieci.
|
host.info = Przycisk [accent]host[] hostuje serwer na porcie [scarlet]6567[] i [scarlet]6568.[]\nKażdy w tej samej sieci [LIGHT_GRAY]wifi lub hotspocie[] powinien zobaczyć twój serwer.\n\nJeśli chcesz, aby każdy z twoim IP mógł dołączyć, musisz wykonać [accent]przekierowywanie portów[].\n\n[LIGHT_GRAY]Notka:Jeśli ktokolwiek ma problem z dołączeniem do gry, upewnij się, że udostępniłeś Mindustry dostęp do sieci.
|
||||||
join.info = Tutaj możesz wpisać [accent]IP serwera[], aby dołączyć lub wyszukaj [accent]serwery w lokalnej sieci[], do których chcesz dołączyć .\nGra wieloosobowa na LAN i WAN jest wspomagana.\n\n[LIGHT_GRAY]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać się hosta o IP.
|
join.info = Tutaj możesz wpisać [accent]adres IP serwera[], aby dołączyć lub wyszukać [accent]serwerów w lokalnej sieci[], do których możesz dołączyć .\nGra wieloosobowa na LAN i WAN jest wspomagana.\n\n[LIGHT_GRAY]Notka: Nie ma automatycznej listy wszystkich serwerów; jeśli chcesz dołączyć przez IP, musisz zapytać hosta o IP.
|
||||||
hostserver = Stwórz Serwer
|
hostserver = Stwórz Serwer
|
||||||
invitefriends = Zaproś Znajomych
|
invitefriends = Zaproś Znajomych
|
||||||
hostserver.mobile = Hostuj\nGrę
|
hostserver.mobile = Hostuj\nGrę
|
||||||
@@ -217,7 +217,7 @@ warning = Uwaga.
|
|||||||
confirm = Potwierdź
|
confirm = Potwierdź
|
||||||
delete = Usuń
|
delete = Usuń
|
||||||
view.workshop = Pokaż w Warsztacie
|
view.workshop = Pokaż w Warsztacie
|
||||||
workshop.listing = Edit Workshop Listing
|
workshop.listing = Edytuj pozycję w Warsztacie
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Otwórz
|
open = Otwórz
|
||||||
customize = Dostosuj
|
customize = Dostosuj
|
||||||
@@ -237,10 +237,10 @@ quit.confirm.tutorial = Czy jesteś pewien tego co robisz?\nSamouczek może zost
|
|||||||
loading = [accent]Ładowanie...
|
loading = [accent]Ładowanie...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Reloading Mods...
|
||||||
saving = [accent]Zapisywanie...
|
saving = [accent]Zapisywanie...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] by wyczyścić plan
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] by wybrać+skopiować
|
||||||
pausebuilding = [accent][[{0}][] to pause building
|
pausebuilding = [accent][[{0}][] by wtrzymać budowę
|
||||||
resumebuilding = [scarlet][[{0}][] to resume building
|
resumebuilding = [scarlet][[{0}][] by kontynuować budowę
|
||||||
wave = [accent]Fala {0}
|
wave = [accent]Fala {0}
|
||||||
wave.waiting = Fala za {0}
|
wave.waiting = Fala za {0}
|
||||||
wave.waveInProgress = [LIGHT_GRAY]Fala w trakcie
|
wave.waveInProgress = [LIGHT_GRAY]Fala w trakcie
|
||||||
@@ -259,18 +259,18 @@ map.nospawn = Ta mapa nie zawiera żadnego rdzenia! Dodaj [ROYAL]niebieski[] rdz
|
|||||||
map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[SCARLET] inny niż niebieski[] rdzeń do mapy w edytorze.
|
map.nospawn.pvp = Ta mapa nie ma żadnego rdzenia przeciwnika, aby mogli się zrespić przeciwnicy! Dodaj[SCARLET] inny niż niebieski[] rdzeń do mapy w edytorze.
|
||||||
map.nospawn.attack = Ta mapa nie ma żadnego rdzenia przeciwnika, aby można było go zaatakować! Dodaj[SCARLET] czerwony[] rdzeń do mapy w edytorze.
|
map.nospawn.attack = Ta mapa nie ma żadnego rdzenia przeciwnika, aby można było go zaatakować! Dodaj[SCARLET] czerwony[] rdzeń do mapy w edytorze.
|
||||||
map.invalid = Błąd podczas ładowania mapy: uszkodzony lub niepoprawny plik mapy.
|
map.invalid = Błąd podczas ładowania mapy: uszkodzony lub niepoprawny plik mapy.
|
||||||
workshop.update = Update Item
|
workshop.update = Aktualizuj pozycję
|
||||||
workshop.error = Error fetching workshop details: {0}
|
workshop.error = Błąd podczas wczytywania szczegółów z Warsztatu: {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!
|
map.publish.confirm = Czy jesteś pewien, że chcesz opublikować tę mapę?\n\n[lightgray]Najpierw upewnij się, że zgadzasz się z umową EULA Warsztatu, w przeciwnym razie twoje mapy nie będą widoczne!
|
||||||
workshop.menu = Select what you would like to do with this item.
|
workshop.menu = Wybierz co chcesz zrobić z tą pozycją.
|
||||||
workshop.info = Item Info
|
workshop.info = Informacja o pozycji
|
||||||
changelog = Changelog (optional):
|
changelog = Historia aktualizacji (opcjonalna):
|
||||||
eula = Steam EULA
|
eula = Umowa EULA Steam
|
||||||
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
|
missing = Ta pozycja została przeniesiona bądź usunięta.\n[lightgray]Pozycja na Warsztacie została automatycznie odłączona.
|
||||||
publishing = [accent]Publishing...
|
publishing = [accent]Trwa publikowanie...
|
||||||
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.confirm = Czy jesteś pewien, że chcesz to opublikować?\n\n[lightgray]Najpierw upewnij się, że zgadzasz się z umową EULA Warsztatu, w przeciwnym razie twoje pozycje nie będą widoczne!
|
||||||
publish.error = Error publishing item: {0}
|
publish.error = Błąd podczas publikowania pozycji: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Nie udało się zainicjować serwisów Steam.\nBłąd: {0}
|
||||||
editor.brush = Pędzel
|
editor.brush = Pędzel
|
||||||
editor.openin = Otwórz w Edytorze
|
editor.openin = Otwórz w Edytorze
|
||||||
editor.oregen = Generacja Złóż
|
editor.oregen = Generacja Złóż
|
||||||
@@ -310,7 +310,7 @@ editor.removeunit = Usuń Jednostkę
|
|||||||
editor.teams = Drużyny
|
editor.teams = Drużyny
|
||||||
editor.errorload = Błąd podczas ładowania pliku:\n[accent]{0}
|
editor.errorload = Błąd podczas ładowania pliku:\n[accent]{0}
|
||||||
editor.errorsave = Błąd podczas zapisywania pliku:\n[accent]{0}
|
editor.errorsave = Błąd podczas zapisywania pliku:\n[accent]{0}
|
||||||
editor.errorimage = To obraz, nie mapa. Nie zmieniaj rozszeżenia spodziewając sie że to coś zmieni.\n\nJeśli chcesz zaimportować starszą mapę, użyj przycisku „importuj starszą mapę” w edytorze.
|
editor.errorimage = To obraz, nie mapa. Nie zmieniaj rozszerzenia, spodziewając się, że to coś zmieni.\n\nJeśli chcesz zaimportować starszą mapę, użyj przycisku „importuj starszą mapę” w edytorze.
|
||||||
editor.errorlegacy = Ta mapa jest zbyt stara i używa starszego formatu mapy, który nie jest już obsługiwany.
|
editor.errorlegacy = Ta mapa jest zbyt stara i używa starszego formatu mapy, który nie jest już obsługiwany.
|
||||||
editor.errornot = To nie jest plik mapy.
|
editor.errornot = To nie jest plik mapy.
|
||||||
editor.errorheader = Ten plik mapy jest nieprawidłowy lub uszkodzony.
|
editor.errorheader = Ten plik mapy jest nieprawidłowy lub uszkodzony.
|
||||||
@@ -357,7 +357,7 @@ toolmode.square = Kwadrat
|
|||||||
toolmode.square.description = Kwadratowy pędzel.
|
toolmode.square.description = Kwadratowy pędzel.
|
||||||
toolmode.eraseores = Wymaż Rudy
|
toolmode.eraseores = Wymaż Rudy
|
||||||
toolmode.eraseores.description = Usuń tylko rudy.
|
toolmode.eraseores.description = Usuń tylko rudy.
|
||||||
toolmode.fillteams = Wypełń Drużyny
|
toolmode.fillteams = Wypełnij Drużyny
|
||||||
toolmode.fillteams.description = Wypełniaj drużyny zamiast bloków.
|
toolmode.fillteams.description = Wypełniaj drużyny zamiast bloków.
|
||||||
toolmode.drawteams = Rysuj Drużyny
|
toolmode.drawteams = Rysuj Drużyny
|
||||||
toolmode.drawteams.description = Rysuj drużyny zamiast bloków.
|
toolmode.drawteams.description = Rysuj drużyny zamiast bloków.
|
||||||
@@ -411,9 +411,9 @@ abandon = Opuść
|
|||||||
abandon.text = Ta strefa i wszystkie jej surowce będą przejęte przez przeciwników.
|
abandon.text = Ta strefa i wszystkie jej surowce będą przejęte przez przeciwników.
|
||||||
locked = Zablokowane
|
locked = Zablokowane
|
||||||
complete = [LIGHT_GRAY]Ukończone:
|
complete = [LIGHT_GRAY]Ukończone:
|
||||||
requirement.wave = Reach Wave {0} in {1}
|
requirement.wave = Osiągnij falę {0} w {1}
|
||||||
requirement.core = Destroy Enemy Core in {0}
|
requirement.core = Zniszcz Rdzeń wroga w {0}
|
||||||
requirement.unlock = Unlock {0}
|
requirement.unlock = Odblokuj {0}
|
||||||
resume = Kontynuuj Strefę:\n[LIGHT_GRAY]{0}
|
resume = Kontynuuj Strefę:\n[LIGHT_GRAY]{0}
|
||||||
bestwave = [LIGHT_GRAY]Najwyższa fala: {0}
|
bestwave = [LIGHT_GRAY]Najwyższa fala: {0}
|
||||||
launch = < WYSTRZEL >
|
launch = < WYSTRZEL >
|
||||||
@@ -424,13 +424,13 @@ launch.confirm = Spowoduje to wystrzelenie wszystkich surowców w rdzeniu.\nNie
|
|||||||
launch.skip.confirm = Jeśli teraz przejdziesz do kolejnej fali, Nie biędziesz miał możliwości wystrzelenia do czasu pokonania dalszych fal.
|
launch.skip.confirm = Jeśli teraz przejdziesz do kolejnej fali, Nie biędziesz miał możliwości wystrzelenia do czasu pokonania dalszych fal.
|
||||||
uncover = Odkryj
|
uncover = Odkryj
|
||||||
configure = Skonfiguruj Ładunek
|
configure = Skonfiguruj Ładunek
|
||||||
bannedblocks = Banned Blocks
|
bannedblocks = Zabronione bloki
|
||||||
addall = Add All
|
addall = Dodaj wszystkie
|
||||||
configure.locked = [LIGHT_GRAY]Dotrzyj do fali {0}\nAby skonfigurować ładunek.
|
configure.locked = [LIGHT_GRAY]Dotrzyj do fali {0}\nAby skonfigurować ładunek.
|
||||||
configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}.
|
configure.invalid = Ilość musi być liczbą pomiędzy 0 a {0}.
|
||||||
zone.unlocked = [LIGHT_GRAY]Strefa {0} odblokowana.
|
zone.unlocked = [LIGHT_GRAY]Strefa {0} odblokowana.
|
||||||
zone.requirement.complete = Fala {0} osiągnięta:\n{1} Wymagania strefy zostały spełnione.
|
zone.requirement.complete = Fala {0} osiągnięta:\n{1} Wymagania strefy zostały spełnione.
|
||||||
zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
|
zone.config.unlocked = Ładunek odblokowany:[lightgray]\n{0}
|
||||||
zone.resources = Wykryte Zasoby:
|
zone.resources = Wykryte Zasoby:
|
||||||
zone.objective = [lightgray]Cel: [accent]{0}
|
zone.objective = [lightgray]Cel: [accent]{0}
|
||||||
zone.objective.survival = Przeżyj
|
zone.objective.survival = Przeżyj
|
||||||
@@ -487,8 +487,8 @@ settings.cleardata = Wyczyść Dane Gry...
|
|||||||
settings.clear.confirm = Czy jesteś pewien że chcesz usunąć te dane?\nPo tym nie ma powrotu!
|
settings.clear.confirm = Czy jesteś pewien że chcesz usunąć te dane?\nPo tym nie ma powrotu!
|
||||||
settings.clearall.confirm = [scarlet]UWAGA![]\nTo wykasuje wszystkie dane, włącznie z zapisanymi grami i mapami, ustawienami, i znanymi technologiami.\nKiedy naciśniesz 'ok', gra usunie wszystkie swoje dane i automatycznie wyłączy się.
|
settings.clearall.confirm = [scarlet]UWAGA![]\nTo wykasuje wszystkie dane, włącznie z zapisanymi grami i mapami, ustawienami, i znanymi technologiami.\nKiedy naciśniesz 'ok', gra usunie wszystkie swoje dane i automatycznie wyłączy się.
|
||||||
paused = [accent]< Wstrzymano >
|
paused = [accent]< Wstrzymano >
|
||||||
clear = Clear
|
clear = Wyczyść
|
||||||
banned = [scarlet]Banned
|
banned = [scarlet]Zbanowano
|
||||||
yes = Tak
|
yes = Tak
|
||||||
no = Nie
|
no = Nie
|
||||||
info.title = Informacje
|
info.title = Informacje
|
||||||
@@ -597,7 +597,7 @@ setting.difficulty.normal = Normalny
|
|||||||
setting.difficulty.hard = Trudny
|
setting.difficulty.hard = Trudny
|
||||||
setting.difficulty.insane = Szalony
|
setting.difficulty.insane = Szalony
|
||||||
setting.difficulty.name = Poziom trudności
|
setting.difficulty.name = Poziom trudności
|
||||||
setting.screenshake.name = Trzęsienie się ekranu
|
setting.screenshake.name = Wstrząsy ekranu
|
||||||
setting.effects.name = Wyświetlanie efektów
|
setting.effects.name = Wyświetlanie efektów
|
||||||
setting.destroyedblocks.name = Display Destroyed Blocks
|
setting.destroyedblocks.name = Display Destroyed Blocks
|
||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
||||||
@@ -623,7 +623,7 @@ setting.chatopacity.name = Przezroczystość czatu
|
|||||||
setting.lasersopacity.name = Przezroczystość laserów zasilających
|
setting.lasersopacity.name = Przezroczystość laserów zasilających
|
||||||
setting.playerchat.name = Wyświetlaj czat w grze
|
setting.playerchat.name = Wyświetlaj czat w grze
|
||||||
public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej.
|
public.confirm = Czy chcesz ustawić swoją grę jako publiczną?\n[lightgray]Można to później zmienić w Ustawienia->Gra->Widoczność Gry Publicznej.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Wersje beta gry nie mogą tworzyć publicznych pokoi.
|
||||||
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
|
uiscale.reset = Skala interfejsu uległa zmianie.\nNaciśnij "OK" by potwierdzić zmiany.\n[scarlet]Cofanie zmian i wyjście z gry za[accent] {0}[]
|
||||||
uiscale.cancel = Anuluj i Wyjdź
|
uiscale.cancel = Anuluj i Wyjdź
|
||||||
setting.bloom.name = Bloom
|
setting.bloom.name = Bloom
|
||||||
@@ -631,20 +631,20 @@ keybind.title = Zmień
|
|||||||
keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane.
|
keybinds.mobile = [scarlet]Większość skrótów klawiszowych nie funkcjonuje w wersji mobilnej. Tylko podstawowe poruszanie się jest wspierane.
|
||||||
category.general.name = Ogólne
|
category.general.name = Ogólne
|
||||||
category.view.name = Wyświetl
|
category.view.name = Wyświetl
|
||||||
category.multiplayer.name = Multiplayer
|
category.multiplayer.name = Wielu graczy
|
||||||
command.attack = Atakuj
|
command.attack = Atakuj
|
||||||
command.rally = Zbierz
|
command.rally = Zbierz
|
||||||
command.retreat = Wycofaj
|
command.retreat = Wycofaj
|
||||||
keybind.clear_building.name = Clear Building
|
keybind.clear_building.name = Wyczyść budynek
|
||||||
keybind.press = Naciśnij wybrany klawisz...
|
keybind.press = Naciśnij wybrany klawisz...
|
||||||
keybind.press.axis = Naciśnij oś lub klawisz...
|
keybind.press.axis = Naciśnij oś lub klawisz...
|
||||||
keybind.screenshot.name = Zrzut ekranu mapy
|
keybind.screenshot.name = Zrzut ekranu mapy
|
||||||
keybind.move_x.name = Poruszanie w poziomie
|
keybind.move_x.name = Poruszanie w poziomie
|
||||||
keybind.move_y.name = Poruszanie w pionie
|
keybind.move_y.name = Poruszanie w pionie
|
||||||
keybind.schematic_select.name = Select Region
|
keybind.schematic_select.name = Wybierz region
|
||||||
keybind.schematic_menu.name = Schematic Menu
|
keybind.schematic_menu.name = Menu schematów
|
||||||
keybind.schematic_flip_x.name = Flip Schematic X
|
keybind.schematic_flip_x.name = Obróć schemat horyzontalnie
|
||||||
keybind.schematic_flip_y.name = Flip Schematic Y
|
keybind.schematic_flip_y.name = Obróć schemat wertykalnie
|
||||||
keybind.fullscreen.name = Przełącz Pełny Ekran
|
keybind.fullscreen.name = Przełącz Pełny Ekran
|
||||||
keybind.select.name = Zaznacz
|
keybind.select.name = Zaznacz
|
||||||
keybind.diagonal_placement.name = Budowa po skosie
|
keybind.diagonal_placement.name = Budowa po skosie
|
||||||
@@ -656,7 +656,7 @@ keybind.zoom_hold.name = Inicjator przybliżania
|
|||||||
keybind.zoom.name = Przybliżanie
|
keybind.zoom.name = Przybliżanie
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pauza
|
keybind.pause.name = Pauza
|
||||||
keybind.pause_building.name = Pause/Resume Building
|
keybind.pause_building.name = Wstrzymaj/kontynuuj budowę
|
||||||
keybind.minimap.name = Minimapa
|
keybind.minimap.name = Minimapa
|
||||||
keybind.dash.name = Przyspieszenie
|
keybind.dash.name = Przyspieszenie
|
||||||
keybind.chat.name = Czat
|
keybind.chat.name = Czat
|
||||||
@@ -855,7 +855,7 @@ block.duo.name = Podwójne Działko
|
|||||||
block.scorch.name = Płomień
|
block.scorch.name = Płomień
|
||||||
block.scatter.name = Flak
|
block.scatter.name = Flak
|
||||||
block.hail.name = Grad
|
block.hail.name = Grad
|
||||||
block.lancer.name = Lancer
|
block.lancer.name = Lansjer
|
||||||
block.conveyor.name = Przenośnik
|
block.conveyor.name = Przenośnik
|
||||||
block.titanium-conveyor.name = Przenośnik Tytanowy
|
block.titanium-conveyor.name = Przenośnik Tytanowy
|
||||||
block.armored-conveyor.name = Przenośnik Opancerzony
|
block.armored-conveyor.name = Przenośnik Opancerzony
|
||||||
@@ -864,7 +864,7 @@ block.junction.name = Węzeł
|
|||||||
block.router.name = Rozdzielacz
|
block.router.name = Rozdzielacz
|
||||||
block.distributor.name = Dystrybutor
|
block.distributor.name = Dystrybutor
|
||||||
block.sorter.name = Sortownik
|
block.sorter.name = Sortownik
|
||||||
block.inverted-sorter.name = Inverted Sorter
|
block.inverted-sorter.name = Odwrotny Sortownik
|
||||||
block.message.name = Wiadomość
|
block.message.name = Wiadomość
|
||||||
block.overflow-gate.name = Brama Przepełnieniowa
|
block.overflow-gate.name = Brama Przepełnieniowa
|
||||||
block.silicon-smelter.name = Huta Krzemu
|
block.silicon-smelter.name = Huta Krzemu
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Enviando ficheiro de pré-visualização
|
|||||||
committingchanges = Enviando mudanças
|
committingchanges = Enviando mudanças
|
||||||
done = Feito
|
done = Feito
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Ativar
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Importar Mod
|
mod.import = Importar Mod
|
||||||
mod.import.github = Importar Mod da Github
|
mod.import.github = Importar Mod da GitHub
|
||||||
mod.remove.confirm = Este mod irá ser apagado.
|
mod.remove.confirm = Este mod irá ser apagado.
|
||||||
mod.author = [LIGHT_GRAY]Autor:[] {0}
|
mod.author = [LIGHT_GRAY]Autor:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -1,43 +1,43 @@
|
|||||||
credits.text = Created by [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
|
credits.text = Criado por [ROYAL]Anuken[] - [SKY]anukendev@gmail.com[]
|
||||||
credits = Créditos
|
credits = Créditos
|
||||||
contributors = Tradutores e contribuidores
|
contributors = Tradutores e contribuidores
|
||||||
discord = Junte-se ao Discord do Mindustry! (Lá nós falamos em inglês)
|
discord = Junte-se ao Discord do Mindustry! (Lá nós falamos em inglês)
|
||||||
link.discord.description = O discord oficial do Mindustry
|
link.discord.description = O discord oficial do Mindustry
|
||||||
link.reddit.description = The Mindustry subreddit
|
link.reddit.description = O subreddit do Mindustry
|
||||||
link.github.description = Código fonte do jogo.
|
link.github.description = Código fonte do jogo.
|
||||||
link.changelog.description = Lista de mudanças da atualização
|
link.changelog.description = Lista de mudanças da atualização
|
||||||
link.dev-builds.description = Desenvolvimentos Instáveis
|
link.dev-builds.description = Desenvolvimentos instáveis
|
||||||
link.trello.description = Trello Oficial para Updates Planejados
|
link.trello.description = Trello oficial para atualizações planejadas
|
||||||
link.itch.io.description = Pagina da Itch.io com os Downloads
|
link.itch.io.description = Página da Itch.io com os downloads
|
||||||
link.google-play.description = Listamento do google play store
|
link.google-play.description = Página da google play store
|
||||||
link.wiki.description = Wiki oficial do Mindustry
|
link.wiki.description = Wiki oficial do Mindustry
|
||||||
linkfail = Falha ao abrir o link\nO Url foi copiado
|
linkfail = Falha ao abrir o link\nO Url foi copiado
|
||||||
screenshot = Screenshot salvo para {0}
|
screenshot = Screenshot salvo para {0}
|
||||||
screenshot.invalid = Mapa grande demais, Potencialmente sem memória suficiente para captura.
|
screenshot.invalid = Mapa grande demais, Potencialmente sem memória suficiente para captura de tela.
|
||||||
gameover = O núcleo foi destruído.
|
gameover = O núcleo foi destruído.
|
||||||
gameover.pvp = O time[accent] {0}[] ganhou!
|
gameover.pvp = O time[accent] {0}[] ganhou!
|
||||||
highscore = [YELLOW]Novo recorde!
|
highscore = [YELLOW]Novo recorde!
|
||||||
copied = Copied.
|
copied = Copiado
|
||||||
load.sound = Sons
|
load.sound = Sons
|
||||||
load.map = Mapas
|
load.map = Mapas
|
||||||
load.image = Imagens
|
load.image = Imagens
|
||||||
load.content = Conteúdo
|
load.content = Conteúdo
|
||||||
load.system = Sistema
|
load.system = Sistema
|
||||||
load.mod = Mods
|
load.mod = Mods
|
||||||
schematic = Schematic
|
schematic = Esquema
|
||||||
schematic.add = Save Schematic...
|
schematic.add = Salvar Esquema...
|
||||||
schematics = Schematics
|
schematics = Esquemas
|
||||||
schematic.replace = A schematic by that name already exists. Replace it?
|
schematic.replace = Um Esquema com esse nome já existe. Substituí-lo?
|
||||||
schematic.import = Import Schematic...
|
schematic.import = Importar Esquema...
|
||||||
schematic.exportfile = Export File
|
schematic.exportfile = Exportar arquivo
|
||||||
schematic.importfile = Import File
|
schematic.importfile = Importar arquivo
|
||||||
schematic.browseworkshop = Browse Workshop
|
schematic.browseworkshop = Navegar pela Oficina
|
||||||
schematic.copy = Copy to Clipboard
|
schematic.copy = Copiar para a área de transferência
|
||||||
schematic.copy.import = Import from Clipboard
|
schematic.copy.import = Importar da área de transferência
|
||||||
schematic.shareworkshop = Share on Workshop
|
schematic.shareworkshop = Compartilhar na Oficina
|
||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Virar o Esquema
|
||||||
schematic.saved = Schematic saved.
|
schematic.saved = Esquema salvo.
|
||||||
schematic.delete.confirm = This schematic will be utterly eradicated.
|
schematic.delete.confirm = Esse Esquema será totalmente erradicado.
|
||||||
schematic.rename = Rename Schematic
|
schematic.rename = Rename Schematic
|
||||||
schematic.info = {0}x{1}, {2} blocks
|
schematic.info = {0}x{1}, {2} blocks
|
||||||
stat.wave = Hordas derrotadas:[accent] {0}
|
stat.wave = Hordas derrotadas:[accent] {0}
|
||||||
@@ -46,9 +46,9 @@ stat.built = Construções construídas:[accent] {0}
|
|||||||
stat.destroyed = Construções destruídas:[accent] {0}
|
stat.destroyed = Construções destruídas:[accent] {0}
|
||||||
stat.deconstructed = Construções desconstruídas:[accent] {0}
|
stat.deconstructed = Construções desconstruídas:[accent] {0}
|
||||||
stat.delivered = Recursos lançados:
|
stat.delivered = Recursos lançados:
|
||||||
stat.rank = Rank Final: [accent]{0}
|
stat.rank = Classificação Final: [accent]{0}
|
||||||
launcheditems = [accent]Itens lançados
|
launcheditems = [accent]Itens lançados
|
||||||
launchinfo = [unlaunched][[LAUNCH] your core to obtain the items indicated in blue.
|
launchinfo = [unlaunched][[LANCE] seu núcleo para obter os itens indicados em azul.
|
||||||
map.delete = Certeza que quer deletar o mapa "[accent]{0}[]"?
|
map.delete = Certeza que quer deletar o mapa "[accent]{0}[]"?
|
||||||
level.highscore = Melhor\npontuação: [accent] {0}
|
level.highscore = Melhor\npontuação: [accent] {0}
|
||||||
level.select = Seleção de Fase
|
level.select = Seleção de Fase
|
||||||
@@ -56,11 +56,11 @@ level.mode = Modo de Jogo:
|
|||||||
showagain = Não mostrar na proxima sessão
|
showagain = Não mostrar na proxima sessão
|
||||||
coreattack = < O núcleo está sobre ataque! >
|
coreattack = < O núcleo está sobre ataque! >
|
||||||
nearpoint = [[ [scarlet]SAIA DO PONTO DE SPAWN IMEDIATAMENTE[] ]\nANIQUILAÇÃO IMINENTE
|
nearpoint = [[ [scarlet]SAIA DO PONTO DE SPAWN IMEDIATAMENTE[] ]\nANIQUILAÇÃO IMINENTE
|
||||||
database = banco do núcleo
|
database = Banco de dados
|
||||||
savegame = Salvar Jogo
|
savegame = Salvar Jogo
|
||||||
loadgame = Carregar Jogo
|
loadgame = Carregar Jogo
|
||||||
joingame = Entrar no Jogo
|
joingame = Entrar no Jogo
|
||||||
customgame = Jogo Customi-/nzado
|
customgame = Jogo Customi-\nzado
|
||||||
newgame = Novo Jogo
|
newgame = Novo Jogo
|
||||||
none = <nenhum>
|
none = <nenhum>
|
||||||
minimap = Mini-Mapa
|
minimap = Mini-Mapa
|
||||||
@@ -77,63 +77,63 @@ invalid = Inválido
|
|||||||
preparingconfig = Preparando configuração
|
preparingconfig = Preparando configuração
|
||||||
preparingcontent = Preparando conteúdo
|
preparingcontent = Preparando conteúdo
|
||||||
uploadingcontent = Fazendo upload do conteúdo
|
uploadingcontent = Fazendo upload do conteúdo
|
||||||
uploadingpreviewfile = Fazendo upload do arquivo de pré visualização
|
uploadingpreviewfile = Fazendo upload do arquivo de pré-visualização
|
||||||
committingchanges = Enviando mudanças
|
committingchanges = Enviando mudanças
|
||||||
done = Feito
|
done = Feito
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Seu dispositivo não suporta essa função.
|
||||||
mods.alphainfo = Mantenha em mente que os mods estão em Alpha, e[scarlet] talvez sejam bem bugados[].\nReporte quaisquer problemas no Discord ou Github do Mindustry.
|
mods.alphainfo = Mantenha em mente que os mods estão em Alpha, e[scarlet] talvez sejam bem bugados[].\nReporte quaisquer problemas no Discord ou GitHub do Mindustry.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]Nenhum Mod encontrado!
|
||||||
mods.guide = Modding Guide
|
mods.guide = Guia de Mods
|
||||||
mods.report = Report Bug
|
mods.report = Reportar um Bug
|
||||||
mods.openfolder = Open Mod Folder
|
mods.openfolder = Abrir pasta de Mods
|
||||||
mod.enabled = [lightgray]Enabled
|
mod.enabled = [lightgray]Ativado
|
||||||
mod.disabled = [scarlet]Disabled
|
mod.disabled = [scarlet]Desativado
|
||||||
mod.disable = Disable
|
mod.disable = Desativar
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Incapaz de deletar o Mod. O arquivo talvez esteja em uso.
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Dependências ausentes: {0}
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]O Mod '{0}' está com dependências ausentes :[accent] {1}\n[lightgray]Esses Mods precisam ser baixados primeiro.\nEsse Mod será desativado automaticamente.
|
||||||
mod.enable = Enable
|
mod.enable = Ativar
|
||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = O jogo irá fechar para aplicar as mudanças do Mod.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Recarregamento necessário
|
||||||
mod.import = Import Mod
|
mod.import = Importar Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Importar Mod do GitHub
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = Esse Mod será deletado.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = Esse jogo salvo foi criado antes de você atualizar ou desinstalar um mod. O jogo salvo pode se corromper. Você tem certeza que quer carregar?\n[lightgray]Mods:\n{0}
|
||||||
mod.preview.missing = Before publishing this mod in the workshop, you must add an image preview.\nPlace an image named[accent] preview.png[] into the mod's folder and try again.
|
mod.preview.missing = Antes de publicar esse mod na Oficina, você deve adicionar uma imagem de pré-visualização.\nColoque uma imagem com o nome[accent] preview.png[] na pasta do Mod e tente novamente.
|
||||||
mod.folder.missing = Only mods in folder form can be published on the workshop.\nTo convert any mod into a folder, simply unzip its file into a folder and delete the old zip, then restart your game or reload your mods.
|
mod.folder.missing = Somente Mods no formato de pasta serão publicados na Oficina.\nPara converter qualquer Mod em uma pasta, Simplesmente descompacte seu arquivo numa pasta e delete a compactação antiga, então reinicie seu jogo ou recarregue os Mods.
|
||||||
about.button = Sobre
|
about.button = Sobre
|
||||||
name = Nome:
|
name = Nome:
|
||||||
noname = Escolha[accent] um nome[] primeiro.
|
noname = Escolha[accent] um nome[] primeiro.
|
||||||
filename = Nome do arquivo:
|
filename = Nome do arquivo:
|
||||||
unlocked = Novo bloco Desbloqueado!
|
unlocked = Novo bloco desbloqueado!
|
||||||
completed = [accent]Completado
|
completed = [accent]Completado
|
||||||
techtree = Árvore de tecnologia
|
techtree = Árvore de tecnologia
|
||||||
research.list = [LIGHT_GRAY]Pesquise:
|
research.list = [LIGHT_GRAY]Pesquise:
|
||||||
research = Pesquisa
|
research = Pesquisar
|
||||||
researched = [LIGHT_GRAY]{0} pesquisado.
|
researched = [LIGHT_GRAY]{0} Pesquisado.
|
||||||
players = {0} Jogadores Ativos
|
players = {0} Jogadores Ativos
|
||||||
players.single = {0} Jogador Ativo
|
players.single = {0} Jogador Ativo
|
||||||
server.closing = [accent]Fechando servidor...
|
server.closing = [accent]Fechando servidor...
|
||||||
server.kicked.kick = Voce foi expulso do servidor!
|
server.kicked.kick = Você foi expulso do servidor!
|
||||||
server.kicked.whitelist = Você não está na lista branca do servidor.
|
server.kicked.whitelist = Você não está na lista branca do servidor.
|
||||||
server.kicked.serverClose = Servidor Fechado.
|
server.kicked.serverClose = Servidor Fechado.
|
||||||
server.kicked.vote = Você foi expulso desse servidor. Adeus.
|
server.kicked.vote = Você foi expulso desse servidor. Adeus.
|
||||||
server.kicked.clientOutdated = Cliente desatualizado! Atualize seu jogo!
|
server.kicked.clientOutdated = Cliente desatualizado! Atualize seu jogo!
|
||||||
server.kicked.serverOutdated = Servidor desatualiado! Peça ao dono para atualizar!
|
server.kicked.serverOutdated = Servidor desatualizado! Peça ao dono para atualizar!
|
||||||
server.kicked.banned = Você foi banido do servidor.
|
server.kicked.banned = Você foi banido do servidor.
|
||||||
server.kicked.typeMismatch = Este servidor não é compatível com a sua versão.
|
server.kicked.typeMismatch = Este servidor não é compatível com a sua versão.
|
||||||
server.kicked.playerLimit = Este servidor está cheio. Espere por uma vaga.
|
server.kicked.playerLimit = Este servidor está cheio. Espere por uma vaga.
|
||||||
server.kicked.recentKick = Voce foi expulso recentemente.\nEspere para conectar de novo.
|
server.kicked.recentKick = Voce foi expulso recentemente.\nEspere para se conectar de novo.
|
||||||
server.kicked.nameInUse = Este nome já está sendo usado\nneste servidor.
|
server.kicked.nameInUse = Este nome já está sendo usado\nneste servidor.
|
||||||
server.kicked.nameEmpty = Você deve ter pelo menos uma letra ou número no nome.
|
server.kicked.nameEmpty = Você deve ter pelo menos uma letra ou número no nome.
|
||||||
server.kicked.idInUse = Você ja está neste servidor! Conectar com duas contas não é permitido.
|
server.kicked.idInUse = Você ja está neste servidor! Conectar com duas contas não é permitido.
|
||||||
server.kicked.customClient = Este servidor não suporta versões customizadas. Baixe a versão original.
|
server.kicked.customClient = Este servidor não suporta versões customizadas. Baixe a versão original.
|
||||||
server.kicked.gameover = Fim de jogo!
|
server.kicked.gameover = Fim de jogo!
|
||||||
server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[]
|
server.versions = Sua versão:[accent] {0}[]\nVersão do servidor:[accent] {1}[]
|
||||||
host.info = The [accent]Hospedar[]Botão Hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguem esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall
|
host.info = The [accent]Hospedar[]Botão Hospeda um servidor no Host[scarlet]6567[] e [scarlet]6568.[]\nQualquer um no [LIGHT_GRAY]Wi-fi Ou Internet local[] Pode ver este servidor na lista de servidores.\n\nSe voce quer poder entrar em qualquer servidor em seu ip, [accent]port forwarding[] é requerido.\n\n[LIGHT_GRAY]Note: Se alguém esta com problemas em conectar no seu servidor lan, Tenha certeza que deixou mindustry Acessar sua internet local nas configurações de firewall
|
||||||
join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[LIGHT_GRAY]Note: Não há uma lista de servidores automáticos; Se você quer conectar ao IP de alguém, você precisa pedir o IP ao anfitrião.
|
join.info = Aqui, você pode entar em um [accent]IP de servidor[] para conectar, ou descobrir [accent]servidores[] da rede local.\nAmbos os servidores LAN e WAN são suportados.\n\n[LIGHT_GRAY]Note: Não há uma lista de servidores automáticos; Se você quer conectar ao IP de alguém, você precisa pedir o IP ao anfitrião.
|
||||||
hostserver = Hospedar servidor
|
hostserver = Hospedar servidor
|
||||||
invitefriends = Convidar amigos
|
invitefriends = Convidar amigos
|
||||||
@@ -201,8 +201,8 @@ save.newslot = Nome do salvamento:
|
|||||||
save.rename = Renomear
|
save.rename = Renomear
|
||||||
save.rename.text = Novo jogo:
|
save.rename.text = Novo jogo:
|
||||||
selectslot = Selecione um lugar para salvar.
|
selectslot = Selecione um lugar para salvar.
|
||||||
slot = [accent]Slot {0}
|
slot = [accent]Conexões {0}
|
||||||
editmessage = Edit Message
|
editmessage = Editar Mensagem
|
||||||
save.corrupted = [accent]Arquivo corrompido ou inválido!
|
save.corrupted = [accent]Arquivo corrompido ou inválido!
|
||||||
empty = <vazio>
|
empty = <vazio>
|
||||||
on = Ligado
|
on = Ligado
|
||||||
@@ -216,8 +216,8 @@ save.playtime = Tempo De Jogo: {0}
|
|||||||
warning = Aviso.
|
warning = Aviso.
|
||||||
confirm = Confirmar
|
confirm = Confirmar
|
||||||
delete = Excluir
|
delete = Excluir
|
||||||
view.workshop = Ver na oficina
|
view.workshop = Ver na Oficina
|
||||||
workshop.listing = Edit Workshop Listing
|
workshop.listing = Editar a lista da Oficina
|
||||||
ok = OK
|
ok = OK
|
||||||
open = Abrir
|
open = Abrir
|
||||||
customize = Customizar
|
customize = Customizar
|
||||||
@@ -235,12 +235,12 @@ classic.export.text = [accent]Mindustry[] acabou de ter uma grande atualização
|
|||||||
quit.confirm = Você tem certeza que quer sair?
|
quit.confirm = Você tem certeza que quer sair?
|
||||||
quit.confirm.tutorial = Você tem certeza você sabe o que você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[]
|
quit.confirm.tutorial = Você tem certeza você sabe o que você esta fazendo?\nO tutorial pode ser refeito nas [accent] Configurações->Jogo->Refazer Tutorial.[]
|
||||||
loading = [accent]Carregando...
|
loading = [accent]Carregando...
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Recarregando Mods...
|
||||||
saving = [accent]Salvando...
|
saving = [accent]Salvando...
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] para cancelar a construção
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] para selecionar+copiar
|
||||||
pausebuilding = [accent][[{0}][] to pause building
|
pausebuilding = [accent][[{0}][] para parar a construção
|
||||||
resumebuilding = [scarlet][[{0}][] to resume building
|
resumebuilding = [scarlet][[{0}][] para continuar a construção
|
||||||
wave = [accent]Horda {0}
|
wave = [accent]Horda {0}
|
||||||
wave.waiting = Horda em {0}
|
wave.waiting = Horda em {0}
|
||||||
wave.waveInProgress = [LIGHT_GRAY]Horda Em Progresso
|
wave.waveInProgress = [LIGHT_GRAY]Horda Em Progresso
|
||||||
@@ -259,18 +259,18 @@ map.nospawn = Este mapa não possui nenhum núcleo para o jogador nascer! Adicio
|
|||||||
map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[SCARLET] Núcleos vermelhos[] no mapa no editor.
|
map.nospawn.pvp = Esse mapa não tem núcleos inimigos para os jogadores nascerem! Adicione[SCARLET] Núcleos vermelhos[] no mapa no editor.
|
||||||
map.nospawn.attack = Esse mapa não tem nenhum núcleo inimigo para o jogador atacar! coloque[SCARLET] Núcleos[] vermelhos no editor.
|
map.nospawn.attack = Esse mapa não tem nenhum núcleo inimigo para o jogador atacar! coloque[SCARLET] Núcleos[] vermelhos no editor.
|
||||||
map.invalid = Erro ao carregar o mapa: Arquivo de mapa invalido ou corrupto.
|
map.invalid = Erro ao carregar o mapa: Arquivo de mapa invalido ou corrupto.
|
||||||
workshop.update = Update Item
|
workshop.update = Atualizar Item
|
||||||
workshop.error = Error fetching workshop details: {0}
|
workshop.error = Erro buscando os detalhes da Oficina: {0}
|
||||||
map.publish.confirm = Você tem certeza de que quer publicar este mapa?\n\n[lightgray]Tenha certeza de que você concorda com o EULA da oficina primeiro, ou seus mapas não serão mostrados!
|
map.publish.confirm = Você tem certeza de que quer publicar este mapa?\n\n[lightgray]Tenha certeza de que você concorda com o EULA da oficina primeiro, ou seus mapas não serão mostrados!
|
||||||
workshop.menu = Select what you would like to do with this item.
|
workshop.menu = Selecione oquê você gostaria de fazer com esse Item.
|
||||||
workshop.info = Item Info
|
workshop.info = Informação do Item
|
||||||
changelog = Changelog (optional):
|
changelog = Changelog (optional):
|
||||||
eula = EULA do Steam
|
eula = EULA da Steam
|
||||||
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
|
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
|
||||||
publishing = [accent]Publishing...
|
publishing = [accent]Publishing...
|
||||||
publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure you agree to the Workshop EULA first, or your items will not show up!
|
publish.confirm = você tem certeza de que quer publicar isso?\n\n[lightgray]Primeiramente tenha certeza de que você concorda com o EULA da Oficina, ou seus itens não irão aparecer!
|
||||||
publish.error = Error publishing item: {0}
|
publish.error = Erro publicando o Item: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Falha em iniciar os serviços da Steam.\nError: {0}
|
||||||
editor.brush = Pincel
|
editor.brush = Pincel
|
||||||
editor.openin = Abrir no Editor
|
editor.openin = Abrir no Editor
|
||||||
editor.oregen = Geração de minério
|
editor.oregen = Geração de minério
|
||||||
@@ -283,7 +283,7 @@ editor.waves = Hordas:
|
|||||||
editor.rules = Regras:
|
editor.rules = Regras:
|
||||||
editor.generation = Geração:
|
editor.generation = Geração:
|
||||||
editor.ingame = Editar em jogo
|
editor.ingame = Editar em jogo
|
||||||
editor.publish.workshop = Publicar na oficina
|
editor.publish.workshop = Publicar na Oficina
|
||||||
editor.newmap = Novo mapa
|
editor.newmap = Novo mapa
|
||||||
workshop = Oficina
|
workshop = Oficina
|
||||||
waves.title = Hordas
|
waves.title = Hordas
|
||||||
@@ -294,7 +294,7 @@ waves.waves = Hordas(s)
|
|||||||
waves.perspawn = por spawn
|
waves.perspawn = por spawn
|
||||||
waves.to = para
|
waves.to = para
|
||||||
waves.boss = Chefe
|
waves.boss = Chefe
|
||||||
waves.preview = Pré visualizar
|
waves.preview = Pré-visualizar
|
||||||
waves.edit = Editar...
|
waves.edit = Editar...
|
||||||
waves.copy = Copiar para área de transferência
|
waves.copy = Copiar para área de transferência
|
||||||
waves.load = Carregar da área de transferência
|
waves.load = Carregar da área de transferência
|
||||||
@@ -396,13 +396,13 @@ width = Largura:
|
|||||||
height = Altura:
|
height = Altura:
|
||||||
menu = Menu
|
menu = Menu
|
||||||
play = Jogar
|
play = Jogar
|
||||||
campaign = Campa-/nnha
|
campaign = Campa-\nnha
|
||||||
load = Carregar
|
load = Carregar
|
||||||
save = Salvar
|
save = Salvar
|
||||||
fps = FPS: {0}
|
fps = FPS: {0}
|
||||||
ping = Ping: {0}ms
|
ping = Ping: {0}ms
|
||||||
language.restart = Por favor, reinicie seu jogo para a tradução tomar efeito.
|
language.restart = Por favor, reinicie seu jogo para a tradução tomar efeito.
|
||||||
settings = Configu-/nrações
|
settings = Configu-\nrações
|
||||||
tutorial = Tutorial
|
tutorial = Tutorial
|
||||||
tutorial.retake = Refazer Tutorial
|
tutorial.retake = Refazer Tutorial
|
||||||
editor = Editor
|
editor = Editor
|
||||||
@@ -411,9 +411,9 @@ abandon = Abandonar
|
|||||||
abandon.text = Esta zona e todos os seus recursos serão perdidos para o inimigo.
|
abandon.text = Esta zona e todos os seus recursos serão perdidos para o inimigo.
|
||||||
locked = Trancado
|
locked = Trancado
|
||||||
complete = [LIGHT_GRAY]Completo:
|
complete = [LIGHT_GRAY]Completo:
|
||||||
requirement.wave = Reach Wave {0} in {1}
|
requirement.wave = Alcançar a Horda {0} em {1}
|
||||||
requirement.core = Destroy Enemy Core in {0}
|
requirement.core = Destruir o núcleo inimigo em {0}
|
||||||
requirement.unlock = Unlock {0}
|
requirement.unlock = Desbloquear {0}
|
||||||
resume = Resumir Zona:\n[LIGHT_GRAY]{0}
|
resume = Resumir Zona:\n[LIGHT_GRAY]{0}
|
||||||
bestwave = [LIGHT_GRAY]Melhor: {0}
|
bestwave = [LIGHT_GRAY]Melhor: {0}
|
||||||
launch = Lançar
|
launch = Lançar
|
||||||
@@ -425,18 +425,18 @@ launch.skip.confirm = Se você pular a horda agora, você não será capaz de la
|
|||||||
uncover = Descobrir
|
uncover = Descobrir
|
||||||
configure = Configurar carregamento
|
configure = Configurar carregamento
|
||||||
bannedblocks = Blocos Banidos
|
bannedblocks = Blocos Banidos
|
||||||
addall = Add All
|
addall = Adicionar Todos
|
||||||
configure.locked = [LIGHT_GRAY]Alcançe a horda {0}\npara configurar o carregamento.
|
configure.locked = [LIGHT_GRAY]Alcançe a horda {0}\npara configurar o carregamento.
|
||||||
configure.invalid = A quantidade deve ser um número entre 0 e {0}.
|
configure.invalid = A quantidade deve ser um número entre 0 e {0}.
|
||||||
zone.unlocked = [LIGHT_GRAY]{0} Desbloqueado.
|
zone.unlocked = [LIGHT_GRAY]{0} Desbloqueado.
|
||||||
zone.requirement.complete = Horda {0} alcançada:\n{1} Requerimentos da zona alcançada.
|
zone.requirement.complete = Horda {0} alcançada:\n{1} Requerimentos da zona alcançada.
|
||||||
zone.config.unlocked = Loadout unlocked:[lightgray]\n{0}
|
zone.config.unlocked = Equipamento desbloqueado:[lightgray]\n{0}
|
||||||
zone.resources = Recursos detectados:
|
zone.resources = Recursos detectados:
|
||||||
zone.objective = [lightgray]Objetivo: [accent]{0}
|
zone.objective = [lightgray]Objetivo: [accent]{0}
|
||||||
zone.objective.survival = Sobreviver
|
zone.objective.survival = Sobreviver
|
||||||
zone.objective.attack = Destruir o núcleo inimigo
|
zone.objective.attack = Destruir o núcleo inimigo
|
||||||
add = Adicionar...
|
add = Adicionar...
|
||||||
boss.health = Saúde do chefe
|
boss.health = Vida do chefe
|
||||||
connectfail = [crimson]Falha ao entrar no servidor: [accent]{0}
|
connectfail = [crimson]Falha ao entrar no servidor: [accent]{0}
|
||||||
error.unreachable = Servidor inalcançável.
|
error.unreachable = Servidor inalcançável.
|
||||||
error.invalidaddress = Endereço inválido.
|
error.invalidaddress = Endereço inválido.
|
||||||
@@ -475,7 +475,7 @@ zone.nuclearComplex.description = Uma antiga instalação para produção e proc
|
|||||||
zone.fungalPass.description = Uma area de transição entre montanhas altas e baixas, terras cheias de esporos. Uma pequena base de reconhecimento inimiga está localizada aqui.\nDestrua-a.\nUse as unidades crawler e dagger. Destrua os dois núcleos.
|
zone.fungalPass.description = Uma area de transição entre montanhas altas e baixas, terras cheias de esporos. Uma pequena base de reconhecimento inimiga está localizada aqui.\nDestrua-a.\nUse as unidades crawler e dagger. Destrua os dois núcleos.
|
||||||
zone.impact0078.description = <insert description here>
|
zone.impact0078.description = <insert description here>
|
||||||
zone.crags.description = <insert description here>
|
zone.crags.description = <insert description here>
|
||||||
settings.language = Linguagem
|
settings.language = Idioma
|
||||||
settings.data = Dados do jogo
|
settings.data = Dados do jogo
|
||||||
settings.reset = Restaurar Padrões
|
settings.reset = Restaurar Padrões
|
||||||
settings.rebind = Religar
|
settings.rebind = Religar
|
||||||
@@ -485,7 +485,7 @@ settings.sound = Som
|
|||||||
settings.graphics = Gráficos
|
settings.graphics = Gráficos
|
||||||
settings.cleardata = Apagar dados...
|
settings.cleardata = Apagar dados...
|
||||||
settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito!
|
settings.clear.confirm = Certeza que quer limpar a os dados?\nOque é feito não pode ser desfeito!
|
||||||
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar toda a data, Incluindo saves, mapas, Keybinds e desbloqueados.\nQuando apertar 'ok' Vai apagar toda a data e sair automaticamente.
|
settings.clearall.confirm = [scarlet]Aviso![]\nIsso vai limpar todo os arquivos, Incluindo jogos salvos, mapas, Keybinds e desbloqueados.\nQuando apertar 'ok' todos os arquivos serão apagados e o jogo irá sair automaticamente.
|
||||||
paused = Pausado
|
paused = Pausado
|
||||||
clear = Clear
|
clear = Clear
|
||||||
banned = [scarlet]Banido
|
banned = [scarlet]Banido
|
||||||
@@ -501,10 +501,10 @@ block.unknown = [LIGHT_GRAY]???
|
|||||||
blocks.powercapacity = Capacidade de Energia
|
blocks.powercapacity = Capacidade de Energia
|
||||||
blocks.powershot = Energia/tiro
|
blocks.powershot = Energia/tiro
|
||||||
blocks.damage = Dano
|
blocks.damage = Dano
|
||||||
blocks.targetsair = Mirar no ar
|
blocks.targetsair = Mira no ar
|
||||||
blocks.targetsground = Mirar no chão
|
blocks.targetsground = Mira no chão
|
||||||
blocks.itemsmoved = Velocidade de movimento
|
blocks.itemsmoved = Velocidade de movimento
|
||||||
blocks.launchtime = Tempo entre tiros
|
blocks.launchtime = Tempo entre Disparos.
|
||||||
blocks.shootrange = Alcance
|
blocks.shootrange = Alcance
|
||||||
blocks.size = Tamanho
|
blocks.size = Tamanho
|
||||||
blocks.liquidcapacity = Capacidade de Líquido
|
blocks.liquidcapacity = Capacidade de Líquido
|
||||||
@@ -519,8 +519,8 @@ blocks.repairtime = Tempo de reparo total do bloco
|
|||||||
blocks.speedincrease = Aumento de velocidade
|
blocks.speedincrease = Aumento de velocidade
|
||||||
blocks.range = Distância
|
blocks.range = Distância
|
||||||
blocks.drilltier = Furáveis
|
blocks.drilltier = Furáveis
|
||||||
blocks.drillspeed = Velocidade da broca base
|
blocks.drillspeed = Velocidade base da Broca
|
||||||
blocks.boosteffect = Efeito do Boost
|
blocks.boosteffect = Efeito do Impulso
|
||||||
blocks.maxunits = Máximo de unidades ativas
|
blocks.maxunits = Máximo de unidades ativas
|
||||||
blocks.health = Saúde
|
blocks.health = Saúde
|
||||||
blocks.buildtime = Tempo de construção
|
blocks.buildtime = Tempo de construção
|
||||||
@@ -530,8 +530,8 @@ blocks.shots = Tiros
|
|||||||
blocks.reload = Tiros por segundo
|
blocks.reload = Tiros por segundo
|
||||||
blocks.ammo = Munição
|
blocks.ammo = Munição
|
||||||
bar.drilltierreq = Broca melhor necessária.
|
bar.drilltierreq = Broca melhor necessária.
|
||||||
bar.drillspeed = Velocidade da broca: {0}/s
|
bar.drillspeed = Velocidade da Broca: {0}/s
|
||||||
bar.pumpspeed = Pump Speed: {0}/s
|
bar.pumpspeed = Velocidade da Bomna: {0}/s
|
||||||
bar.efficiency = Eficiência: {0}%
|
bar.efficiency = Eficiência: {0}%
|
||||||
bar.powerbalance = Energia: {0}
|
bar.powerbalance = Energia: {0}
|
||||||
bar.powerstored = Armazenada: {0}/{1}
|
bar.powerstored = Armazenada: {0}/{1}
|
||||||
@@ -544,7 +544,7 @@ bar.heat = Aquecimento
|
|||||||
bar.power = Poder
|
bar.power = Poder
|
||||||
bar.progress = Progresso da construção
|
bar.progress = Progresso da construção
|
||||||
bar.spawned = Unidades: {0}/{1}
|
bar.spawned = Unidades: {0}/{1}
|
||||||
bullet.damage = [stat]{0}[lightgray] dano
|
bullet.damage = [stat]{0}[lightgray] Dano
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] Dano em área ~[stat] {1}[lightgray] Blocos
|
bullet.splashdamage = [stat]{0}[lightgray] Dano em área ~[stat] {1}[lightgray] Blocos
|
||||||
bullet.incendiary = [stat]Incendiário
|
bullet.incendiary = [stat]Incendiário
|
||||||
bullet.homing = [stat]Guiado
|
bullet.homing = [stat]Guiado
|
||||||
@@ -578,7 +578,7 @@ setting.landscape.name = Travar panorama
|
|||||||
setting.shadows.name = Sombras
|
setting.shadows.name = Sombras
|
||||||
setting.blockreplace.name = Automatic Block Suggestions
|
setting.blockreplace.name = Automatic Block Suggestions
|
||||||
setting.linear.name = Filtragem linear
|
setting.linear.name = Filtragem linear
|
||||||
setting.hints.name = Hints
|
setting.hints.name = Dicas
|
||||||
setting.animatedwater.name = Água animada
|
setting.animatedwater.name = Água animada
|
||||||
setting.animatedshields.name = Escudos animados
|
setting.animatedshields.name = Escudos animados
|
||||||
setting.antialias.name = Filtro suavizante[LIGHT_GRAY] (reinicialização requerida)[]
|
setting.antialias.name = Filtro suavizante[LIGHT_GRAY] (reinicialização requerida)[]
|
||||||
@@ -599,10 +599,10 @@ setting.difficulty.insane = Insano
|
|||||||
setting.difficulty.name = Dificuldade
|
setting.difficulty.name = Dificuldade
|
||||||
setting.screenshake.name = Balanço da Tela
|
setting.screenshake.name = Balanço da Tela
|
||||||
setting.effects.name = Efeitos
|
setting.effects.name = Efeitos
|
||||||
setting.destroyedblocks.name = Display Destroyed Blocks
|
setting.destroyedblocks.name = Mostrar Blocos Destruídos
|
||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = Posicionamento do localizador do Transportador
|
||||||
setting.sensitivity.name = Sensibilidade do Controle
|
setting.sensitivity.name = Sensibilidade do Controle
|
||||||
setting.saveinterval.name = Intervalo de autosalvamento
|
setting.saveinterval.name = Intervalo de Auto Salvamento
|
||||||
setting.seconds = {0} Segundos
|
setting.seconds = {0} Segundos
|
||||||
setting.fullscreen.name = Tela Cheia
|
setting.fullscreen.name = Tela Cheia
|
||||||
setting.borderlesswindow.name = Janela sem borda[LIGHT_GRAY] (Pode precisar reiniciar)
|
setting.borderlesswindow.name = Janela sem borda[LIGHT_GRAY] (Pode precisar reiniciar)
|
||||||
@@ -610,19 +610,19 @@ setting.fps.name = Mostrar FPS
|
|||||||
setting.vsync.name = VSync
|
setting.vsync.name = VSync
|
||||||
setting.pixelate.name = Pixelizado [LIGHT_GRAY](Pode diminuir a performace)
|
setting.pixelate.name = Pixelizado [LIGHT_GRAY](Pode diminuir a performace)
|
||||||
setting.minimap.name = Mostrar minimapa
|
setting.minimap.name = Mostrar minimapa
|
||||||
setting.position.name = Show Player Position
|
setting.position.name = Mostrar a posição do Jogador
|
||||||
setting.musicvol.name = Volume da Música
|
setting.musicvol.name = Volume da Música
|
||||||
setting.ambientvol.name = Volume do ambiente
|
setting.ambientvol.name = Volume do Ambiente
|
||||||
setting.mutemusic.name = Desligar Música
|
setting.mutemusic.name = Desligar Música
|
||||||
setting.sfxvol.name = Volume de Efeitos
|
setting.sfxvol.name = Volume de Efeitos
|
||||||
setting.mutesound.name = Desligar Som
|
setting.mutesound.name = Desligar Som
|
||||||
setting.crashreport.name = Enviar denuncias de crash anonimas
|
setting.crashreport.name = Enviar denúncias anônimas de erros
|
||||||
setting.savecreate.name = Criar salvamentos automaticamente
|
setting.savecreate.name = Criar salvamentos automaticamente
|
||||||
setting.publichost.name = Visibilidade do jogo público
|
setting.publichost.name = Visibilidade do jogo público
|
||||||
setting.chatopacity.name = Opacidade do chat
|
setting.chatopacity.name = Opacidade do chat
|
||||||
setting.lasersopacity.name = Power Laser Opacity
|
setting.lasersopacity.name = Opacidade do laser
|
||||||
setting.playerchat.name = Mostrar chat em jogo
|
setting.playerchat.name = Mostrar chat em jogo
|
||||||
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 = Você quer fazer sua partida pública?\n[accent]Qualquer um será capaz de entrar na sua partida.\n[lightgray]Isso pode ser mudado depois em Configurações->Jogo->Visibilidade da partida pública.
|
||||||
public.beta = Note that beta versions of the game cannot make public lobbies.
|
public.beta = Note that beta versions of the game cannot make public lobbies.
|
||||||
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
|
uiscale.reset = A escala da IU foi mudada.\nPressione "OK" para confirmar esta escala.\n[scarlet]Revertendo e saindo em[accent] {0}[] settings...
|
||||||
uiscale.cancel = Cancelar e sair
|
uiscale.cancel = Cancelar e sair
|
||||||
@@ -641,10 +641,10 @@ keybind.press.axis = Pressione uma Axis ou tecla...
|
|||||||
keybind.screenshot.name = Captura do mapa
|
keybind.screenshot.name = Captura do mapa
|
||||||
keybind.move_x.name = mover_x
|
keybind.move_x.name = mover_x
|
||||||
keybind.move_y.name = mover_y
|
keybind.move_y.name = mover_y
|
||||||
keybind.schematic_select.name = Select Region
|
keybind.schematic_select.name = Selecionar região
|
||||||
keybind.schematic_menu.name = Schematic Menu
|
keybind.schematic_menu.name = Menu de Esquemas
|
||||||
keybind.schematic_flip_x.name = Flip Schematic X
|
keybind.schematic_flip_x.name = girar o Esquema X
|
||||||
keybind.schematic_flip_y.name = Flip Schematic Y
|
keybind.schematic_flip_y.name = girar o Esquema Y
|
||||||
keybind.fullscreen.name = Alterar tela cheia
|
keybind.fullscreen.name = Alterar tela cheia
|
||||||
keybind.select.name = selecionar
|
keybind.select.name = selecionar
|
||||||
keybind.diagonal_placement.name = Colocação diagonal
|
keybind.diagonal_placement.name = Colocação diagonal
|
||||||
@@ -652,18 +652,18 @@ keybind.pick.name = Pegar bloco
|
|||||||
keybind.break_block.name = Quebrar bloco
|
keybind.break_block.name = Quebrar bloco
|
||||||
keybind.deselect.name = Deselecionar
|
keybind.deselect.name = Deselecionar
|
||||||
keybind.shoot.name = Atirar
|
keybind.shoot.name = Atirar
|
||||||
keybind.zoom_hold.name = segurar_zoom
|
keybind.zoom_hold.name = segurar Zoom
|
||||||
keybind.zoom.name = Zoom
|
keybind.zoom.name = Zoom
|
||||||
keybind.menu.name = Menu
|
keybind.menu.name = Menu
|
||||||
keybind.pause.name = Pausar
|
keybind.pause.name = Pausar
|
||||||
keybind.pause_building.name = Pause/Resume Building
|
keybind.pause_building.name = Parar/Resumir a construção
|
||||||
keybind.minimap.name = Minimapa
|
keybind.minimap.name = Minimapa
|
||||||
keybind.dash.name = Correr
|
keybind.dash.name = Correr
|
||||||
keybind.chat.name = Conversa
|
keybind.chat.name = Conversa
|
||||||
keybind.player_list.name = Lista_de_jogadores
|
keybind.player_list.name = Lista_de_jogadores
|
||||||
keybind.console.name = console
|
keybind.console.name = Console
|
||||||
keybind.rotate.name = Girar
|
keybind.rotate.name = Girar
|
||||||
keybind.rotateplaced.name = Rotate Existing (Hold)
|
keybind.rotateplaced.name = Girar (Segure)
|
||||||
keybind.toggle_menus.name = Ativar menus
|
keybind.toggle_menus.name = Ativar menus
|
||||||
keybind.chat_history_prev.name = Historico do chat anterior
|
keybind.chat_history_prev.name = Historico do chat anterior
|
||||||
keybind.chat_history_next.name = Historico do proximo chat
|
keybind.chat_history_next.name = Historico do proximo chat
|
||||||
@@ -781,11 +781,11 @@ block.rock.name = Rocha
|
|||||||
block.snowrock.name = Rocha com neve
|
block.snowrock.name = Rocha com neve
|
||||||
block.snow-pine.name = Pinheiro com neve
|
block.snow-pine.name = Pinheiro com neve
|
||||||
block.shale.name = Xisto
|
block.shale.name = Xisto
|
||||||
block.shale-boulder.name = Pedra de xisto
|
block.shale-boulder.name = Pedra de Xisto
|
||||||
block.moss.name = Musgo
|
block.moss.name = Musgo
|
||||||
block.shrubs.name = Arbusto
|
block.shrubs.name = Arbusto
|
||||||
block.spore-moss.name = Musgo de esporos
|
block.spore-moss.name = Musgo de Esporos
|
||||||
block.shalerocks.name = Rohas de xisto
|
block.shalerocks.name = Rochas de Xisto
|
||||||
block.scrap-wall.name = Muro de sucata
|
block.scrap-wall.name = Muro de sucata
|
||||||
block.scrap-wall-large.name = Muro grande de sucata
|
block.scrap-wall-large.name = Muro grande de sucata
|
||||||
block.scrap-wall-huge.name = Muro enorme de sucata
|
block.scrap-wall-huge.name = Muro enorme de sucata
|
||||||
@@ -839,16 +839,16 @@ block.ignarock.name = Rocha ígnea
|
|||||||
block.hotrock.name = Rocha quente
|
block.hotrock.name = Rocha quente
|
||||||
block.magmarock.name = Rocha de magma
|
block.magmarock.name = Rocha de magma
|
||||||
block.cliffs.name = Colinas
|
block.cliffs.name = Colinas
|
||||||
block.copper-wall.name = Parede de Cobre
|
block.copper-wall.name = Muro de Cobre
|
||||||
block.copper-wall-large.name = Parede de Cobre Grande
|
block.copper-wall-large.name = Muro de Cobre Grande
|
||||||
block.titanium-wall.name = Parede de titânio
|
block.titanium-wall.name = Muro de Titânio
|
||||||
block.titanium-wall-large.name = Parede de titânio grande
|
block.titanium-wall-large.name = Muro de Titânio grande
|
||||||
block.plastanium-wall.name = Plastanium Wall
|
block.plastanium-wall.name = Muro de Plastânio Grande
|
||||||
block.plastanium-wall-large.name = Large Plastanium Wall
|
block.plastanium-wall-large.name = Muro de Plastânio Grande
|
||||||
block.phase-wall.name = Parede de fase
|
block.phase-wall.name = Muro de Fase
|
||||||
block.phase-wall-large.name = Parde de fase grande
|
block.phase-wall-large.name = Muro de Fase Grande
|
||||||
block.thorium-wall.name = Parede de tório
|
block.thorium-wall.name = Muro de Tório
|
||||||
block.thorium-wall-large.name = Parede de tório grande
|
block.thorium-wall-large.name = Muro de Tório Grande
|
||||||
block.door.name = Porta
|
block.door.name = Porta
|
||||||
block.door-large.name = Porta Grande
|
block.door-large.name = Porta Grande
|
||||||
block.duo.name = Dupla
|
block.duo.name = Dupla
|
||||||
@@ -864,7 +864,7 @@ block.junction.name = Junção
|
|||||||
block.router.name = Roteador
|
block.router.name = Roteador
|
||||||
block.distributor.name = Distribuidor
|
block.distributor.name = Distribuidor
|
||||||
block.sorter.name = Ordenador
|
block.sorter.name = Ordenador
|
||||||
block.inverted-sorter.name = Inverted Sorter
|
block.inverted-sorter.name = Ordenador Invertido
|
||||||
block.message.name = Mensagem
|
block.message.name = Mensagem
|
||||||
block.overflow-gate.name = Portão Sobrecarregado
|
block.overflow-gate.name = Portão Sobrecarregado
|
||||||
block.silicon-smelter.name = Fundidora de silicio
|
block.silicon-smelter.name = Fundidora de silicio
|
||||||
@@ -917,7 +917,7 @@ block.pyratite-mixer.name = Misturador de Piratita
|
|||||||
block.blast-mixer.name = Misturador de Explosão
|
block.blast-mixer.name = Misturador de Explosão
|
||||||
block.solar-panel.name = Painel Solar
|
block.solar-panel.name = Painel Solar
|
||||||
block.solar-panel-large.name = Painel Solar Grande
|
block.solar-panel-large.name = Painel Solar Grande
|
||||||
block.oil-extractor.name = Extrator de petróleo
|
block.oil-extractor.name = Extrator de Petróleo
|
||||||
block.command-center.name = Centro de comando
|
block.command-center.name = Centro de comando
|
||||||
block.draug-factory.name = Fábrica de drone de mineração Draug
|
block.draug-factory.name = Fábrica de drone de mineração Draug
|
||||||
block.spirit-factory.name = Fábrica de drone de reparo Spirit
|
block.spirit-factory.name = Fábrica de drone de reparo Spirit
|
||||||
@@ -960,12 +960,12 @@ block.container.name = Contâiner
|
|||||||
block.launch-pad.name = Plataforma de lançamento
|
block.launch-pad.name = Plataforma de lançamento
|
||||||
block.launch-pad-large.name = Plataforma de lançamento grande
|
block.launch-pad-large.name = Plataforma de lançamento grande
|
||||||
team.blue.name = Azul
|
team.blue.name = Azul
|
||||||
team.crux.name = Vermelho
|
team.crux.name = Vermelha
|
||||||
team.sharded.name = orange
|
team.sharded.name = Estilhaçada
|
||||||
team.orange.name = Laranja
|
team.orange.name = Laranja
|
||||||
team.derelict.name = derelict
|
team.derelict.name = Abandonada
|
||||||
team.green.name = Verde
|
team.green.name = Verde
|
||||||
team.purple.name = Roxo
|
team.purple.name = Roxa
|
||||||
unit.spirit.name = Drone Spirit
|
unit.spirit.name = Drone Spirit
|
||||||
unit.draug.name = Drone minerador Draug
|
unit.draug.name = Drone minerador Draug
|
||||||
unit.phantom.name = Drone Phantom
|
unit.phantom.name = Drone Phantom
|
||||||
@@ -975,7 +975,7 @@ unit.titan.name = Titan
|
|||||||
unit.ghoul.name = Bombardeiro Ghoul
|
unit.ghoul.name = Bombardeiro Ghoul
|
||||||
unit.wraith.name = Lutador Wraith
|
unit.wraith.name = Lutador Wraith
|
||||||
unit.fortress.name = Fortaleza
|
unit.fortress.name = Fortaleza
|
||||||
unit.revenant.name = Fantasma
|
unit.revenant.name = Revenã
|
||||||
unit.eruptor.name = Eruptor
|
unit.eruptor.name = Eruptor
|
||||||
unit.chaos-array.name = Arraia do caos
|
unit.chaos-array.name = Arraia do caos
|
||||||
unit.eradicator.name = Erradicador
|
unit.eradicator.name = Erradicador
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Выгрузка файла предпросмотра
|
|||||||
committingchanges = Внесение изменений
|
committingchanges = Внесение изменений
|
||||||
done = Готово
|
done = Готово
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Имейте в виду, что модификации находятся в альфа-версии и могут содержать много ошибок[]. Докладывайте о любых проблемах, которые Вы найдете в Mindustry Github или Discord.
|
mods.alphainfo = Имейте в виду, что модификации находятся в альфа-версии и могут содержать много ошибок[]. Докладывайте о любых проблемах, которые Вы найдете в Mindustry GitHub или Discord.
|
||||||
mods.alpha = [accent](Альфа)
|
mods.alpha = [accent](Альфа)
|
||||||
mods = Модификации
|
mods = Модификации
|
||||||
mods.none = [LIGHT_GRAY]Модификации не найдены!
|
mods.none = [LIGHT_GRAY]Модификации не найдены!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Включить
|
|||||||
mod.requiresrestart = Теперь игра закроется, чтобы применить изменения в модификациях.
|
mod.requiresrestart = Теперь игра закроется, чтобы применить изменения в модификациях.
|
||||||
mod.reloadrequired = [scarlet]Необходим перезапуск
|
mod.reloadrequired = [scarlet]Необходим перезапуск
|
||||||
mod.import = Импортировать модификацию
|
mod.import = Импортировать модификацию
|
||||||
mod.import.github = Импортировать модификацию с Github
|
mod.import.github = Импортировать модификацию с GitHub
|
||||||
mod.remove.confirm = Этот мод будет удалён.
|
mod.remove.confirm = Этот мод будет удалён.
|
||||||
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
||||||
mod.missing = Это сохранение содержит модификацию, которое Вы недавно обновили или оно больше не установлено. Может случиться повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
|
mod.missing = Это сохранение содержит модификацию, которое Вы недавно обновили или оно больше не установлено. Может случиться повреждение сохранения. Вы уверены, что хотите загрузить его?\n[lightgray]Модификации:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Laddar upp förhandsgranskningsfil
|
|||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Klar
|
done = Klar
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Uploading Preview File
|
|||||||
committingchanges = Comitting Changes
|
committingchanges = Comitting Changes
|
||||||
done = Done
|
done = Done
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry Github or Discord.
|
mods.alphainfo = Keep in mind that mods are in alpha, and[scarlet] may be very buggy[].\nReport any issues you find to the Mindustry GitHub or Discord.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Mods
|
mods = Mods
|
||||||
mods.none = [LIGHT_GRAY]No mods found!
|
mods.none = [LIGHT_GRAY]No mods found!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Enable
|
|||||||
mod.requiresrestart = The game will now close to apply the mod changes.
|
mod.requiresrestart = The game will now close to apply the mod changes.
|
||||||
mod.reloadrequired = [scarlet]Reload Required
|
mod.reloadrequired = [scarlet]Reload Required
|
||||||
mod.import = Import Mod
|
mod.import = Import Mod
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Import GitHub Mod
|
||||||
mod.remove.confirm = This mod will be deleted.
|
mod.remove.confirm = This mod will be deleted.
|
||||||
mod.author = [LIGHT_GRAY]Author:[] {0}
|
mod.author = [LIGHT_GRAY]Author:[] {0}
|
||||||
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
mod.missing = This save contains mods that you have recently updated or no longer have installed. Save corruption may occur. Are you sure you want to load it?\n[lightgray]Mods:\n{0}
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = Önizleme Dosyası Yükleniyor
|
|||||||
committingchanges = Değişiklikler Uygulanıyor
|
committingchanges = Değişiklikler Uygulanıyor
|
||||||
done = Bitti
|
done = Bitti
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = Modların alfa aşamasında olduğunu ve [scarlet]oldukça hatalı olabileceklerini[] unutmayın.\nBulduğunuz sorunları Mindustry Github'ı veya Discord'una bildirin.
|
mods.alphainfo = Modların alfa aşamasında olduğunu ve [scarlet]oldukça hatalı olabileceklerini[] unutmayın.\nBulduğunuz sorunları Mindustry GitHub'ı veya Discord'una bildirin.
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = Modlar
|
mods = Modlar
|
||||||
mods.none = [LIGHT_GRAY]Hiç mod bulunamadı!
|
mods.none = [LIGHT_GRAY]Hiç mod bulunamadı!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = Etkinleştir
|
|||||||
mod.requiresrestart = Oyun mod değişikliklerini uygulamak için kapatılacak.
|
mod.requiresrestart = Oyun mod değişikliklerini uygulamak için kapatılacak.
|
||||||
mod.reloadrequired = [scarlet]Yeniden Yükleme Gerekli
|
mod.reloadrequired = [scarlet]Yeniden Yükleme Gerekli
|
||||||
mod.import = Mod İçeri Aktar
|
mod.import = Mod İçeri Aktar
|
||||||
mod.import.github = Github Modu İçeri Aktar
|
mod.import.github = GitHub Modu İçeri Aktar
|
||||||
mod.remove.confirm = Bu mod silinecek.
|
mod.remove.confirm = Bu mod silinecek.
|
||||||
mod.author = [LIGHT_GRAY]Yayıncı:[] {0}
|
mod.author = [LIGHT_GRAY]Yayıncı:[] {0}
|
||||||
mod.missing = Bu kayıt yakın zamanda güncellediğiniz ya da artık yüklü olmayan modlar içermekte. Kayıt bozulmaları yaşanabilir. Kaydı yüklemek istediğinizden emin misiniz?\n[lightgray]Modlar:\n{0}
|
mod.missing = Bu kayıt yakın zamanda güncellediğiniz ya da artık yüklü olmayan modlar içermekte. Kayıt bozulmaları yaşanabilir. Kaydı yüklemek istediğinizden emin misiniz?\n[lightgray]Modlar:\n{0}
|
||||||
|
|||||||
@@ -3,7 +3,7 @@ credits = Творці
|
|||||||
contributors = Перекладачі та помічники
|
contributors = Перекладачі та помічники
|
||||||
discord = Приєднуйтесь до Mindustry Discord!
|
discord = Приєднуйтесь до Mindustry Discord!
|
||||||
link.discord.description = Офіційний Discord сервер Mindustry
|
link.discord.description = Офіційний Discord сервер Mindustry
|
||||||
link.reddit.description = Гілка Mindustry на Reddit
|
link.reddit.description = Спільнота Mindustry на Reddit
|
||||||
link.github.description = Вихідний код гри
|
link.github.description = Вихідний код гри
|
||||||
link.changelog.description = Список змін
|
link.changelog.description = Список змін
|
||||||
link.dev-builds.description = Нестабільні версії
|
link.dev-builds.description = Нестабільні версії
|
||||||
@@ -25,17 +25,17 @@ load.content = Зміст
|
|||||||
load.system = Система
|
load.system = Система
|
||||||
load.mod = Модифікації
|
load.mod = Модифікації
|
||||||
schematic = Схема
|
schematic = Схема
|
||||||
schematic.add = Зберегти схему...
|
schematic.add = Зберегти схему…
|
||||||
schematics = Схеми
|
schematics = Схеми
|
||||||
schematic.replace = Схема з такою ж назвою вже існує. Замінити її?
|
schematic.replace = Схема з такою ж назвою вже існує. Замінити її?
|
||||||
schematic.import = Імпортувати схему...
|
schematic.import = Імпортувати схему…
|
||||||
schematic.exportfile = Експортувати файл
|
schematic.exportfile = Експортувати файл
|
||||||
schematic.importfile = Імпортувати файл
|
schematic.importfile = Імпортувати файл
|
||||||
schematic.browseworkshop = Переглянути в Майстерні
|
schematic.browseworkshop = Переглянути в Майстерні
|
||||||
schematic.copy = Копіювати в буфер обміну
|
schematic.copy = Копіювати в буфер обміну
|
||||||
schematic.copy.import = Імпортувати з клавіатури
|
schematic.copy.import = Імпортувати з клавіатури
|
||||||
schematic.shareworkshop = Поширити в Майстерні
|
schematic.shareworkshop = Поширити в Майстерні
|
||||||
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Flip Schematic
|
schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Відобразити схему
|
||||||
schematic.saved = Схема збережена.
|
schematic.saved = Схема збережена.
|
||||||
schematic.delete.confirm = Ця схема буде повністю випалена.
|
schematic.delete.confirm = Ця схема буде повністю випалена.
|
||||||
schematic.rename = Перейменувати схему.
|
schematic.rename = Перейменувати схему.
|
||||||
@@ -48,7 +48,7 @@ stat.deconstructed = Будівель декоструйовано[accent] {0}
|
|||||||
stat.delivered = Ресурсів запущено:
|
stat.delivered = Ресурсів запущено:
|
||||||
stat.rank = Фінальний рахунок: [accent]{0}
|
stat.rank = Фінальний рахунок: [accent]{0}
|
||||||
launcheditems = [accent]Запущені предмети
|
launcheditems = [accent]Запущені предмети
|
||||||
launchinfo = [unlaunched][[LAUNCH] ваше ядро для отримання предметів позначено синім кольором.
|
launchinfo = [unlaunched]Натисніть на кнопку «[[ЗАПУСК]», щоб ваше ядро отримало предмети, які виділені синім кольором.
|
||||||
map.delete = Ви впевнені, що хочете видалити мапу «[accent]{0}[]»?
|
map.delete = Ви впевнені, що хочете видалити мапу «[accent]{0}[]»?
|
||||||
level.highscore = Рекорд: [accent]{0}
|
level.highscore = Рекорд: [accent]{0}
|
||||||
level.select = Вибір мапи
|
level.select = Вибір мапи
|
||||||
@@ -80,25 +80,25 @@ uploadingcontent = Вивантаження вмісту
|
|||||||
uploadingpreviewfile = Вивантаження файлу передперегляду
|
uploadingpreviewfile = Вивантаження файлу передперегляду
|
||||||
committingchanges = Здійснення змін
|
committingchanges = Здійснення змін
|
||||||
done = Зроблено
|
done = Зроблено
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Ваш пристрій не підтримує цю особливість.
|
||||||
mods.alphainfo = Майте на увазі, що модифікації знаходяться в альфі, і [scarlet]можуть бути дуже глючними[].\nПовідомте про будь-які проблеми, які ви знайдете до Mindustry Github або Discord.
|
mods.alphainfo = Майте на увазі, що модифікації знаходяться в альфі, і [scarlet]можуть бути дуже глючними[].\nПовідомте про будь-які проблеми, які ви знайдете до Mindustry GitHub або Discord.
|
||||||
mods.alpha = [scarlet](Альфа)
|
mods.alpha = [scarlet](Альфа)
|
||||||
mods = Модифікації
|
mods = Модифікації
|
||||||
mods.none = [LIGHT_GRAY]Модифікацій не знайдено!
|
mods.none = [LIGHT_GRAY]Модифікацій не знайдено!
|
||||||
mods.guide = Посібник зі створення модифицій
|
mods.guide = Посібник зі створення модифицій
|
||||||
mods.report = Повідомити про ваду
|
mods.report = Повідомити про ваду
|
||||||
mods.openfolder = Open Mod Folder
|
mods.openfolder = Відкрити теку модифікацій
|
||||||
mod.enabled = [lightgray]Увімкнено
|
mod.enabled = [lightgray]Увімкнено
|
||||||
mod.disabled = [scarlet]Вимкнено
|
mod.disabled = [scarlet]Вимкнено
|
||||||
mod.disable = Вимкнути
|
mod.disable = Вимкнути
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = Неможливо видалити модифікацію. Файл, можливо, використовується.
|
||||||
mod.missingdependencies = [scarlet]Missing dependencies: {0}
|
mod.missingdependencies = [scarlet]Відсутні залежності: {0}
|
||||||
mod.nowdisabled = [scarlet]Mod '{0}' is missing dependencies:[accent] {1}\n[lightgray]These mods need to be downloaded first.\nThis mod will be automatically disabled.
|
mod.nowdisabled = [scarlet]Модифікації '{0}' не вистачає залежностей:[accent] {1}\n[lightgray]Ці модифікації потрібно завантажити спочатку.\nЦя модифікація буду автоматично вимкнена.
|
||||||
mod.enable = Увімкнути
|
mod.enable = Увімкнути
|
||||||
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
|
mod.requiresrestart = А тепер гра закриється, щоб застосувати зміни модифікацій.
|
||||||
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
mod.reloadrequired = [scarlet]Потрібно перезавантаження
|
||||||
mod.import = Імпортувати модифікацію
|
mod.import = Імпортувати модифікацію
|
||||||
mod.import.github = Import Github Mod
|
mod.import.github = Імпортувати модификацію з Ґітгаб
|
||||||
mod.remove.confirm = Цю модифікацію буде видалено.
|
mod.remove.confirm = Цю модифікацію буде видалено.
|
||||||
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
mod.author = [LIGHT_GRAY]Автор:[] {0}
|
||||||
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
mod.missing = Це збереження містить модифікації, які ви нещодавно оновили або більше не встановлювали. Збереження може зіпсуватися. Ви впевнені, що хочете завантажити його?\n[lightgray]Модифікації:\n{0}
|
||||||
@@ -229,13 +229,13 @@ data.export = Експортувати дані
|
|||||||
data.import = Импортувати дані
|
data.import = Импортувати дані
|
||||||
data.exported = Дані імпортовано.
|
data.exported = Дані імпортовано.
|
||||||
data.invalid = Це не дійсні ігрові дані.
|
data.invalid = Це не дійсні ігрові дані.
|
||||||
data.import.confirm = Імпорт зовнішніх даних видалить[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється.
|
data.import.confirm = Імпорт зовнішніх даних перезапише[scarlet] ВСІ[] ваші поточні ігрові дані.\n[accent]Це неможливо скасувати![]\n\nЩойно дані імпортуються, гра негайно закриється.
|
||||||
classic.export = Експортувати класичні дані
|
classic.export = Експортувати класичні дані
|
||||||
classic.export.text = Класичне (версія 3.5 збірка 40) збереження або мапа були знайдені. Ви хочете експортувати ці дані в домашню теку телефону, для використання у застосунку Mindustry Classic?
|
classic.export.text = Класичне (версія 3.5 збірка 40) збереження або мапа були знайдені. Ви хочете експортувати ці дані в домашню теку телефону, для використання у застосунку Mindustry Classic?
|
||||||
quit.confirm = Ви впевнені, що хочете вийти?
|
quit.confirm = Ви впевнені, що хочете вийти?
|
||||||
quit.confirm.tutorial = Ви впевнені, що хочете вийти з навчання?
|
quit.confirm.tutorial = Ви впевнені, що хочете вийти з навчання?
|
||||||
loading = [accent]Завантаження…
|
loading = [accent]Завантаження…
|
||||||
reloading = [accent]Reloading Mods...
|
reloading = [accent]Перезавантаження модифікацій…
|
||||||
saving = [accent]Збереження…
|
saving = [accent]Збереження…
|
||||||
cancelbuilding = [accent][[{0}][] to clear plan
|
cancelbuilding = [accent][[{0}][] to clear plan
|
||||||
selectschematic = [accent][[{0}][] to select+copy
|
selectschematic = [accent][[{0}][] to select+copy
|
||||||
@@ -259,18 +259,18 @@ map.nospawn = Ця мапа не має жодного ядра для появ
|
|||||||
map.nospawn.pvp = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [SCARLET]не помаранчеве[] ядро до цієї мапи в редакторі.
|
map.nospawn.pvp = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [SCARLET]не помаранчеве[] ядро до цієї мапи в редакторі.
|
||||||
map.nospawn.attack = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [SCARLET]червоне[] ядро до цієї мапи в редакторі.
|
map.nospawn.attack = У цієї мапи немає ворожих ядер, в яких гравець може з’явитися! Додайте [SCARLET]червоне[] ядро до цієї мапи в редакторі.
|
||||||
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
map.invalid = Помилка завантаження мапи: пошкоджений або невірний файл мапи.
|
||||||
workshop.update = Update Item
|
workshop.update = Оновити предмет
|
||||||
workshop.error = Error fetching workshop details: {0}
|
workshop.error = Помилка при отриманні інформації з Майстерні: {0}
|
||||||
map.publish.confirm = Ви дійсно хочете опублікувати цю мапу?\n\n[lightgray]Переконайтеся, що спершу ви згодні з Ліцензійною угодою Steam, або ваші мапи не з’являться!
|
map.publish.confirm = Ви дійсно хочете опублікувати цю мапу?\n\n[lightgray]Переконайтеся, що спершу ви згодні з Ліцензійною угодою Steam, або ваші мапи не з’являться!
|
||||||
workshop.menu = Select what you would like to do with this item.
|
workshop.menu = Виберіть, що ви хочете зробити з цим предметом.
|
||||||
workshop.info = Item Info
|
workshop.info = Інформація про предмет
|
||||||
changelog = Changelog (optional):
|
changelog = Журнал змін (за бажанням):
|
||||||
eula = Ліцензійна угода
|
eula = Ліцензійна угода
|
||||||
missing = This item has been deleted or moved.\n[lightgray]The workshop listing has now been automatically un-linked.
|
missing = Цей предмет було видалено або переміщено.\n[lightgray]Список Майстерні тепер автоматично від’єднано.
|
||||||
publishing = [accent]Publishing...
|
publishing = [accent]Публікація…
|
||||||
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.confirm = Ви дійсно хочете опублікувати це?\n\n[lightgray]Переконайтеся, що ви спочатку погоджуєтеся з EULA Майстерні, або ваші предмети не з’являться!
|
||||||
publish.error = Error publishing item: {0}
|
publish.error = Сталася помилка при публікації предмета: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Не вдалося ініціалізувати сервіси Steam.\nПомилка: {0}
|
||||||
editor.brush = Пензлик
|
editor.brush = Пензлик
|
||||||
editor.openin = Відкрити в редакторі
|
editor.openin = Відкрити в редакторі
|
||||||
editor.oregen = Генерація руд
|
editor.oregen = Генерація руд
|
||||||
@@ -302,7 +302,7 @@ waves.invalid = Недійсні хвилі у буфері обміну.
|
|||||||
waves.copied = Хвилі скопійовані.
|
waves.copied = Хвилі скопійовані.
|
||||||
waves.none = Вороги не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею.
|
waves.none = Вороги не були встановлені.\nЗазначимо, що пусті хвилі будуть автоматично замінені звичайною хвилею.
|
||||||
editor.default = [lightgray]<За замовчуванням>
|
editor.default = [lightgray]<За замовчуванням>
|
||||||
details = Деталі...
|
details = Деталі…
|
||||||
edit = Редагувати…
|
edit = Редагувати…
|
||||||
editor.name = Назва:
|
editor.name = Назва:
|
||||||
editor.spawn = Створити бойову одиницю
|
editor.spawn = Створити бойову одиницю
|
||||||
@@ -509,7 +509,7 @@ blocks.shootrange = Діапазон дії
|
|||||||
blocks.size = Розмір
|
blocks.size = Розмір
|
||||||
blocks.liquidcapacity = Місткість рідини
|
blocks.liquidcapacity = Місткість рідини
|
||||||
blocks.powerrange = Діапазон передачі енергії
|
blocks.powerrange = Діапазон передачі енергії
|
||||||
blocks.powerconnections = Max Connections
|
blocks.powerconnections = Максимальна кількість з’єднань
|
||||||
blocks.poweruse = Енергії використовує
|
blocks.poweruse = Енергії використовує
|
||||||
blocks.powerdamage = Енергія/урон
|
blocks.powerdamage = Енергія/урон
|
||||||
blocks.itemcapacity = Місткість предметів
|
blocks.itemcapacity = Місткість предметів
|
||||||
@@ -523,17 +523,17 @@ blocks.drillspeed = Базова швидкість буріння
|
|||||||
blocks.boosteffect = Прискорювальний ефект
|
blocks.boosteffect = Прискорювальний ефект
|
||||||
blocks.maxunits = Максимальна кількість активних одиниць
|
blocks.maxunits = Максимальна кількість активних одиниць
|
||||||
blocks.health = Здоров’я
|
blocks.health = Здоров’я
|
||||||
blocks.buildtime = Час будівництва
|
blocks.buildtime = Час будування
|
||||||
blocks.buildcost = Вартість будування
|
blocks.buildcost = Вартість будування
|
||||||
blocks.inaccuracy = Розкид
|
blocks.inaccuracy = Розкид
|
||||||
blocks.shots = Постріли
|
blocks.shots = Постріли
|
||||||
blocks.reload = Постріли/секунду
|
blocks.reload = Постріли/секунду
|
||||||
blocks.ammo = Боєприпаси
|
blocks.ammo = Боєприпаси
|
||||||
bar.drilltierreq = Потребується кращий бур
|
bar.drilltierreq = Потребується кращий бур
|
||||||
bar.drillspeed = Швидкість буріння: {0}/с
|
bar.drillspeed = Швидкість буріння: {0} за с.
|
||||||
bar.pumpspeed = Pump Speed: {0}/s
|
bar.pumpspeed = Швидкість викачування: {0} за с.
|
||||||
bar.efficiency = Ефективність: {0}%
|
bar.efficiency = Ефективність: {0}%
|
||||||
bar.powerbalance = Енергія: {0}/с
|
bar.powerbalance = Енергія: {0} за с.
|
||||||
bar.powerstored = Зберігає: {0}/{1}
|
bar.powerstored = Зберігає: {0}/{1}
|
||||||
bar.poweramount = Енергія: {0}
|
bar.poweramount = Енергія: {0}
|
||||||
bar.poweroutput = Вихідна енергія: {0}
|
bar.poweroutput = Вихідна енергія: {0}
|
||||||
@@ -542,7 +542,7 @@ bar.capacity = Місткість: {0}
|
|||||||
bar.liquid = Рідина
|
bar.liquid = Рідина
|
||||||
bar.heat = Нагрівання
|
bar.heat = Нагрівання
|
||||||
bar.power = Енергія
|
bar.power = Енергія
|
||||||
bar.progress = Хід будівництва
|
bar.progress = Хід будування
|
||||||
bar.spawned = Бойов. од.: {0}/{1}
|
bar.spawned = Бойов. од.: {0}/{1}
|
||||||
bullet.damage = [stat]{0}[lightgray] шкода
|
bullet.damage = [stat]{0}[lightgray] шкода
|
||||||
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] блок.
|
bullet.splashdamage = [stat]{0}[lightgray] шкода по ділянці ~[stat] {1}[lightgray] блок.
|
||||||
@@ -556,27 +556,27 @@ bullet.tarred = [stat]дьогтьовий
|
|||||||
bullet.multiplier = [stat]{0}[lightgray]x патронів
|
bullet.multiplier = [stat]{0}[lightgray]x патронів
|
||||||
bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджання
|
bullet.reload = [stat]{0}[lightgray]x швидкість перезаряджання
|
||||||
unit.blocks = блоки
|
unit.blocks = блоки
|
||||||
unit.powersecond = одиниць енергії/секунду
|
unit.powersecond = одиниць енергії за секунду
|
||||||
unit.liquidsecond = рідких одиниць/секунду
|
unit.liquidsecond = одиниць рідини за секунду
|
||||||
unit.itemssecond = предметів/секунду
|
unit.itemssecond = предметів за секунду
|
||||||
unit.liquidunits = рідинних одиниць
|
unit.liquidunits = одиниць рідини
|
||||||
unit.powerunits = енергетичних одиниць
|
unit.powerunits = одиниць енергії
|
||||||
unit.degrees = град.
|
unit.degrees = град.
|
||||||
unit.seconds = сек.
|
unit.seconds = с
|
||||||
unit.persecond = /сек
|
unit.persecond = за секунду
|
||||||
unit.timesspeed = x швидкість
|
unit.timesspeed = x швидкість
|
||||||
unit.percent = %
|
unit.percent = %
|
||||||
unit.items = предм.
|
unit.items = предм.
|
||||||
category.general = Загальні
|
category.general = Загальне
|
||||||
category.power = Енергетичні
|
category.power = Енергія
|
||||||
category.liquids = Рідини
|
category.liquids = Рідини
|
||||||
category.items = Предмети
|
category.items = Предмети
|
||||||
category.crafting = Введення/виведення
|
category.crafting = Виробництво
|
||||||
category.shooting = Стрільба
|
category.shooting = Стрільба
|
||||||
category.optional = Додаткові поліпшення
|
category.optional = Додаткові поліпшення
|
||||||
setting.landscape.name = Тільки альбомний(гозинтальний) режим
|
setting.landscape.name = Тільки альбомний(гозинтальний) режим
|
||||||
setting.shadows.name = Тіні
|
setting.shadows.name = Тіні
|
||||||
setting.blockreplace.name = Automatic Block Suggestions
|
setting.blockreplace.name = Пропозиції щодо автоматичної заміни блоків
|
||||||
setting.linear.name = Лінійна фільтрація
|
setting.linear.name = Лінійна фільтрація
|
||||||
setting.hints.name = Hints
|
setting.hints.name = Hints
|
||||||
setting.animatedwater.name = Анімована вода
|
setting.animatedwater.name = Анімована вода
|
||||||
@@ -599,18 +599,18 @@ setting.difficulty.insane = Неможлива
|
|||||||
setting.difficulty.name = Складність:
|
setting.difficulty.name = Складність:
|
||||||
setting.screenshake.name = Тряска екрану
|
setting.screenshake.name = Тряска екрану
|
||||||
setting.effects.name = Ефекти
|
setting.effects.name = Ефекти
|
||||||
setting.destroyedblocks.name = Display Destroyed Blocks
|
setting.destroyedblocks.name = Показувати зруйновані блоки
|
||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = Пошук шляху для встановлення конвейерівConveyor Placement Pathfinding
|
||||||
setting.sensitivity.name = Чутливість контролера
|
setting.sensitivity.name = Чутливість контролера
|
||||||
setting.saveinterval.name = Інтервал збереження
|
setting.saveinterval.name = Інтервал збереження
|
||||||
setting.seconds = {0} сек.
|
setting.seconds = {0} с
|
||||||
setting.fullscreen.name = Повноекранний режим
|
setting.fullscreen.name = Повноекранний режим
|
||||||
setting.borderlesswindow.name = Вікно без полів[lightgray] (може потребувати перезапуску)
|
setting.borderlesswindow.name = Вікно без полів[lightgray] (може потребувати перезапуску)
|
||||||
setting.fps.name = Показувати FPS
|
setting.fps.name = Показувати FPS і затримку до сервера
|
||||||
setting.vsync.name = Вертикальна синхронізація
|
setting.vsync.name = Вертикальна синхронізація
|
||||||
setting.pixelate.name = Пікселізація[lightgray] (вимикає анімації)
|
setting.pixelate.name = Пікселізація[lightgray] (вимикає анімації)
|
||||||
setting.minimap.name = Показувати міні-мапу
|
setting.minimap.name = Показувати міні-мапу
|
||||||
setting.position.name = Show Player Position
|
setting.position.name = Показувати координати гравця
|
||||||
setting.musicvol.name = Гучність музики
|
setting.musicvol.name = Гучність музики
|
||||||
setting.ambientvol.name = Звуки навколишнього середовища
|
setting.ambientvol.name = Звуки навколишнього середовища
|
||||||
setting.mutemusic.name = Заглушити музику
|
setting.mutemusic.name = Заглушити музику
|
||||||
@@ -635,16 +635,16 @@ category.multiplayer.name = Мережева гра
|
|||||||
command.attack = Атакувати
|
command.attack = Атакувати
|
||||||
command.rally = Точка збору
|
command.rally = Точка збору
|
||||||
command.retreat = Відступити
|
command.retreat = Відступити
|
||||||
keybind.clear_building.name = Clear Building
|
keybind.clear_building.name = Очистити план будування
|
||||||
keybind.press = Натисніть клавішу…
|
keybind.press = Натисніть клавішу…
|
||||||
keybind.press.axis = Натисніть клавішу…
|
keybind.press.axis = Натисніть клавішу…
|
||||||
keybind.screenshot.name = Зняток мапи
|
keybind.screenshot.name = Зняток мапи
|
||||||
keybind.move_x.name = Рух по осі x
|
keybind.move_x.name = Рух по осі X
|
||||||
keybind.move_y.name = Рух по осі y
|
keybind.move_y.name = Рух по осі Y
|
||||||
keybind.schematic_select.name = Select Region
|
keybind.schematic_select.name = Вибрати ділянку
|
||||||
keybind.schematic_menu.name = Schematic Menu
|
keybind.schematic_menu.name = Меню схем
|
||||||
keybind.schematic_flip_x.name = Flip Schematic X
|
keybind.schematic_flip_x.name = Відобразити по осі X
|
||||||
keybind.schematic_flip_y.name = Flip Schematic Y
|
keybind.schematic_flip_y.name = Відобразити по осі Y
|
||||||
keybind.fullscreen.name = Повноекранний
|
keybind.fullscreen.name = Повноекранний
|
||||||
keybind.select.name = Вибір/Постріл
|
keybind.select.name = Вибір/Постріл
|
||||||
keybind.diagonal_placement.name = Діагональне розміщення
|
keybind.diagonal_placement.name = Діагональне розміщення
|
||||||
@@ -656,14 +656,14 @@ keybind.zoom_hold.name = Керування масштабом
|
|||||||
keybind.zoom.name = Приблизити
|
keybind.zoom.name = Приблизити
|
||||||
keybind.menu.name = Меню
|
keybind.menu.name = Меню
|
||||||
keybind.pause.name = Пауза
|
keybind.pause.name = Пауза
|
||||||
keybind.pause_building.name = Pause/Resume Building
|
keybind.pause_building.name = Призупинити/Продовжити будування
|
||||||
keybind.minimap.name = Мінімапа
|
keybind.minimap.name = Мінімапа
|
||||||
keybind.dash.name = Прискоритися/Літати
|
keybind.dash.name = Прискоритися & летіітати
|
||||||
keybind.chat.name = Чат
|
keybind.chat.name = Чат
|
||||||
keybind.player_list.name = Список гравців
|
keybind.player_list.name = Список гравців
|
||||||
keybind.console.name = Консоль
|
keybind.console.name = Консоль
|
||||||
keybind.rotate.name = Обертати
|
keybind.rotate.name = Обертати
|
||||||
keybind.rotateplaced.name = Обертати існуюче (утримуйте)
|
keybind.rotateplaced.name = Обертати існуюче (прокручуйте)
|
||||||
keybind.toggle_menus.name = Меню перемикання
|
keybind.toggle_menus.name = Меню перемикання
|
||||||
keybind.chat_history_prev.name = Попередня історія чату
|
keybind.chat_history_prev.name = Попередня історія чату
|
||||||
keybind.chat_history_next.name = Наступна історія чату
|
keybind.chat_history_next.name = Наступна історія чату
|
||||||
@@ -695,7 +695,7 @@ rules.unitdamagemultiplier = Множник шкоди бойових одини
|
|||||||
rules.enemycorebuildradius = Радіус захисту для ворожого ядра:[lightgray] (блоків)
|
rules.enemycorebuildradius = Радіус захисту для ворожого ядра:[lightgray] (блоків)
|
||||||
rules.respawntime = Час відродження:[lightgray] (sec)
|
rules.respawntime = Час відродження:[lightgray] (sec)
|
||||||
rules.wavespacing = Інтервал хвиль:[lightgray] (sec)
|
rules.wavespacing = Інтервал хвиль:[lightgray] (sec)
|
||||||
rules.buildcostmultiplier = Множник затрат на будівництво
|
rules.buildcostmultiplier = Множник затрат на будування
|
||||||
rules.buildspeedmultiplier = Множник швидкості будування
|
rules.buildspeedmultiplier = Множник швидкості будування
|
||||||
rules.waitForWaveToEnd = Хвилі чекають на ворогів
|
rules.waitForWaveToEnd = Хвилі чекають на ворогів
|
||||||
rules.dropzoneradius = Радіус зони висадки:[lightgray] (блоків)
|
rules.dropzoneradius = Радіус зони висадки:[lightgray] (блоків)
|
||||||
@@ -703,7 +703,7 @@ rules.respawns = Максимальна кількість відроджень
|
|||||||
rules.limitedRespawns = Обмеження відроджень
|
rules.limitedRespawns = Обмеження відроджень
|
||||||
rules.title.waves = Хвилі
|
rules.title.waves = Хвилі
|
||||||
rules.title.respawns = Відродження
|
rules.title.respawns = Відродження
|
||||||
rules.title.resourcesbuilding = Ресурси & будівництво
|
rules.title.resourcesbuilding = Ресурси & будування
|
||||||
rules.title.player = Гравці
|
rules.title.player = Гравці
|
||||||
rules.title.enemy = Вороги
|
rules.title.enemy = Вороги
|
||||||
rules.title.unit = Бойов. од.
|
rules.title.unit = Бойов. од.
|
||||||
@@ -836,15 +836,15 @@ block.dark-panel-5.name = Темна панель 5
|
|||||||
block.dark-panel-6.name = Темна панель 6
|
block.dark-panel-6.name = Темна панель 6
|
||||||
block.dark-metal.name = Темний метал
|
block.dark-metal.name = Темний метал
|
||||||
block.ignarock.name = Магматичні гірські породи
|
block.ignarock.name = Магматичні гірські породи
|
||||||
block.hotrock.name = Гарячий Камінь
|
block.hotrock.name = Гарячий камінь
|
||||||
block.magmarock.name = Магмовий камінь
|
block.magmarock.name = Магмовий камінь
|
||||||
block.cliffs.name = Скелі
|
block.cliffs.name = Скелі
|
||||||
block.copper-wall.name = Мідна стіна
|
block.copper-wall.name = Мідна стіна
|
||||||
block.copper-wall-large.name = Велика мідна стіна
|
block.copper-wall-large.name = Велика мідна стіна
|
||||||
block.titanium-wall.name = Титанова стіна
|
block.titanium-wall.name = Титанова стіна
|
||||||
block.titanium-wall-large.name = Велика титанова стіна
|
block.titanium-wall-large.name = Велика титанова стіна
|
||||||
block.plastanium-wall.name = Plastanium Wall
|
block.plastanium-wall.name = Пластанієва стіна
|
||||||
block.plastanium-wall-large.name = Large Plastanium Wall
|
block.plastanium-wall-large.name = Велика пластанієва стіна
|
||||||
block.phase-wall.name = Фазова стіна
|
block.phase-wall.name = Фазова стіна
|
||||||
block.phase-wall-large.name = Велика фазова стіна
|
block.phase-wall-large.name = Велика фазова стіна
|
||||||
block.thorium-wall.name = Торієва стіна
|
block.thorium-wall.name = Торієва стіна
|
||||||
@@ -899,11 +899,11 @@ block.omega-mech-pad.name = Реконструктор «Омега»
|
|||||||
block.tau-mech-pad.name = Реконструктор «Тау»
|
block.tau-mech-pad.name = Реконструктор «Тау»
|
||||||
block.conduit.name = Трубопровід
|
block.conduit.name = Трубопровід
|
||||||
block.mechanical-pump.name = Механічна помпа
|
block.mechanical-pump.name = Механічна помпа
|
||||||
block.item-source.name = Джерело предметів
|
block.item-source.name = Нескінченне джерело предметів
|
||||||
block.item-void.name = Предметний вакуум
|
block.item-void.name = Предметний вакуум
|
||||||
block.liquid-source.name = Рідке джерело
|
block.liquid-source.name = Нескінченне джерело рідин
|
||||||
block.power-void.name = Енергетичний вакуум
|
block.power-void.name = Енергетичний вакуум
|
||||||
block.power-source.name = Джерело енергії
|
block.power-source.name = Нескінченне джерело енергії
|
||||||
block.unloader.name = Розвантажувач
|
block.unloader.name = Розвантажувач
|
||||||
block.vault.name = Сховище
|
block.vault.name = Сховище
|
||||||
block.wave.name = Хвиля
|
block.wave.name = Хвиля
|
||||||
@@ -982,8 +982,8 @@ unit.eradicator.name = Випалювач
|
|||||||
unit.lich.name = Лич
|
unit.lich.name = Лич
|
||||||
unit.reaper.name = Жнець
|
unit.reaper.name = Жнець
|
||||||
tutorial.next = [lightgray]<Натисніть для продовження>
|
tutorial.next = [lightgray]<Натисніть для продовження>
|
||||||
tutorial.intro = Ви розпочали[scarlet] навчання по Mindustry.[]\nРозпочність з[accent] видобування міді[]. Використовуйте [[WASD] для руху.\n[accent] Утримуйте [[Ctrl] під час прокрутки миші[] для приближення і віддалення. Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді
|
tutorial.intro = Ви розпочали[scarlet] навчання по Mindustry.[]\nРозпочніть з[accent] видобування міді[]. Використовуйте [[WASD] для руху.\n[accent] Утримуйте [[Ctrl] під час прокрутки миші[] для приближення і віддалення. Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді
|
||||||
tutorial.intro.mobile = You have entered the[scarlet] Mindustry Tutorial.[]\nSwipe the screen to move.\n[accent]Pinch with 2 fingers [] to zoom in and out.\nBegin by[accent] mining copper[]. Move close to it, then tap a copper ore vein near your core to do this.\n\n[accent]{0}/{1} copper
|
tutorial.intro.mobile = Ви розпочали[scarlet] навчання по Mindustry.[]\nПроведіть екраном, щоб рухатися.\n[accent] Зведіть або розведіть 2 пальця [] для приближення і віддалення відповідно.\nз[accent] видобування міді.[] Наблизьтесь, а потім натисність на мідну жилу біля вашого ядра, щоб зробити це.\n\n[accent]{0}/{1} міді
|
||||||
tutorial.drill = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисніть на вкладку свердла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\n[accent]Натисніть ПКМ[], щоб зупинити будування.
|
tutorial.drill = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисніть на вкладку свердла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням.\n[accent]Натисніть ПКМ[], щоб зупинити будування.
|
||||||
tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent] галочку[] нижче, щоб підтвердити розміщення to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
tutorial.drill.mobile = Добування вручну неефективне.\n[accent]Бури []можуть добувати автоматично.\nНатисність на вкладку сведла знизу зправа.\nВиберіть[accent] механічний бур[]. Розмістіть його на мідній жилі натисканням, потім натисність на [accent] галочку[] нижче, щоб підтвердити розміщення to confirm your selection.\nPress the[accent] X button[] to cancel placement.
|
||||||
tutorial.blockinfo = Кожен блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисність на кнопку «?», коли Ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура прямо зараз.[]
|
tutorial.blockinfo = Кожен блок має різні характеристики. Кожний бур може видобувати тільки певні руди.\nЩоб переглянути інформацію та характеристики блока,[accent] натисність на кнопку «?», коли Ви вибрали блок у меню будування.[]\n\n[accent]Перегляньте характеристику Механічного бура прямо зараз.[]
|
||||||
@@ -991,8 +991,8 @@ tutorial.conveyor = [accent]Конвеєри[] використовуються
|
|||||||
tutorial.conveyor.mobile = [accent]Конвеєри[] використовується для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви вибрали.\nВикористовуйте колесо прокрутки, щоб обертати блоки перед їх розміщенням\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено
|
tutorial.conveyor.mobile = [accent]Конвеєри[] використовується для транспортування предметів до ядра.\nЗробіть лінію конвеєрів від бура до ядра.\n[accent] Розмістить у лінію, утримуючи палець кілька секунд[] і тягніть у напрямку, який Ви вибрали.\nВикористовуйте колесо прокрутки, щоб обертати блоки перед їх розміщенням\n[accent]{0}/{1} конвеєрів, які розміщені в лінію\n[accent]0/1 предмет доставлено
|
||||||
tutorial.turret = Оборонні споруди повинні бути побудовані для відбиття[lightgray] ворогів[].\nПобудуйте[accent] башточку «Подвійна»[] біля вашої бази.
|
tutorial.turret = Оборонні споруди повинні бути побудовані для відбиття[lightgray] ворогів[].\nПобудуйте[accent] башточку «Подвійна»[] біля вашої бази.
|
||||||
tutorial.drillturret = «Подвійна» потребує [accent] мідні боєприпаси []для стрільби.\nРозмістіть бур біля башточки\nПроведіть конвеєри до башточки, щоб заповнити її боєприпасами.\n\n[accent]Доставлено боєприпасів: 0/1
|
tutorial.drillturret = «Подвійна» потребує [accent] мідні боєприпаси []для стрільби.\nРозмістіть бур біля башточки\nПроведіть конвеєри до башточки, щоб заповнити її боєприпасами.\n\n[accent]Доставлено боєприпасів: 0/1
|
||||||
tutorial.pause = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будівництво під час паузи.\n\n[accent]Натисність пробіл для павзи.tutorial.launch
|
tutorial.pause = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]Натисність пробіл для павзи.tutorial.launch
|
||||||
tutorial.pause.mobile = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будівництво під час паузи.\n\n[accent]атисніть кнопку зліва вгорі для павзи.
|
tutorial.pause.mobile = Під час бою ви можете[accent] поставити на павзу гру.[]\nВи можете зробити чергу на будування під час паузи.\n\n[accent]атисніть кнопку зліва вгорі для павзи.
|
||||||
tutorial.unpause = Тепер натисність пробіл, щоб зняти павзу.
|
tutorial.unpause = Тепер натисність пробіл, щоб зняти павзу.
|
||||||
tutorial.unpause.mobile = Тепер натисність туди ще раз, щоб зняти павзу.
|
tutorial.unpause.mobile = Тепер натисність туди ще раз, щоб зняти павзу.
|
||||||
tutorial.breaking = Блоки часто повинні бути знищені.\n[accent]Утримуючи ПКМ[] Ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні.
|
tutorial.breaking = Блоки часто повинні бути знищені.\n[accent]Утримуючи ПКМ[] Ви знищите всі виділені блоки.[]\n\n[accent]Необхідно знищити всі стіни з металобрухту ліворуч від вашого ядра використовуючи видалення у зоні.
|
||||||
@@ -1022,17 +1022,17 @@ liquid.water.description = Найкорисніша рідина. Зазвича
|
|||||||
liquid.slag.description = Різні види розплавленого металу змішуються між собою. Може бути відокремлений від складових корисних копалин або розпорошений на ворожі частини як зброя.
|
liquid.slag.description = Різні види розплавленого металу змішуються між собою. Може бути відокремлений від складових корисних копалин або розпорошений на ворожі частини як зброя.
|
||||||
liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена в вугілля в якості палива або використана як куля.
|
liquid.oil.description = Рідина, яка використовується у виробництві сучасних матеріалів. Може бути перетворена в вугілля в якості палива або використана як куля.
|
||||||
liquid.cryofluid.description = Інертна, не роз’їдаюча рідина, створена з води та титану. Володіє надзвичайно високою пропускною спроможністю. Широко використовується в якості охолоджуючої рідини.
|
liquid.cryofluid.description = Інертна, не роз’їдаюча рідина, створена з води та титану. Володіє надзвичайно високою пропускною спроможністю. Широко використовується в якості охолоджуючої рідини.
|
||||||
mech.alpha-mech.description = Стандартний керований мех. Заснований на бойовій одиниці «Кинджал», з оновленими бронею та можливостями будівництва. Наносить більше шкоди, ніж «Дротик».
|
mech.alpha-mech.description = Стандартний керований мех. Заснований на бойовій одиниці «Кинджал», з оновленими бронею та можливостями будування. Наносить більше шкоди, ніж «Дротик».
|
||||||
mech.delta-mech.description = Швидкий, легкоброньований мех, зроблений для тактики «атакуй і біжи». Наносить мало шкоди будівлям, але може дуже швидко вбити великі групи підрозділів противника своєю дуговою блискавкою.
|
mech.delta-mech.description = Швидкий, легкоброньований мех, зроблений для тактики «атакуй і біжи». Наносить мало шкоди будівлям, але може дуже швидко вбити великі групи підрозділів противника своєю дуговою блискавкою.
|
||||||
mech.tau-mech.description = Мех підтримки. Ремонтує союзні блоки, стріляючи по них. Може зцілювати союзників у радіусі його ремонтної здатності.
|
mech.tau-mech.description = Мех підтримки. Ремонтує союзні блоки, стріляючи по них. Може зцілювати союзників у радіусі його ремонтної здатності.
|
||||||
mech.omega-mech.description = Об’ємний і добре броньований мех, зроблений для фронтових штурмів. Його броня може перекрити до 90% пошкоджень, що надходять.
|
mech.omega-mech.description = Об’ємний і добре броньований мех, зроблений для фронтових штурмів. Його броня може перекрити до 90% пошкоджень, що надходять.
|
||||||
mech.dart-ship.description = Стандартний корабель управління. Розумно швидкий і легкий, але має мало наступальних можливостей і низьку швидкість видобутку.
|
mech.dart-ship.description = Стандартний корабель управління. Розумно швидкий і легкий, але має мало наступальних можливостей і низьку швидкість видобутку.
|
||||||
mech.javelin-ship.description = Корабель для стратегії атакуй та біжи». Хоча спочатку він повільний, потім вже може розганятися до великих швидкостей і літати над ворожими форпостами, завдаючи великої кількості шкоди своїми блискавками та ракетами.
|
mech.javelin-ship.description = Корабель для стратегії атакуй та біжи». Хоча спочатку він повільний, потім вже може розганятися до великих швидкостей і літати над ворожими форпостами, завдаючи великої кількості шкоди своїми блискавками та ракетами.
|
||||||
mech.trident-ship.description = Важкий бомбардувальник, побудований для будівництва та знищення ворожих укріплень. Дуже добре броньований.
|
mech.trident-ship.description = Важкий бомбардувальник, побудований для будування та знищення ворожих укріплень. Дуже добре броньований.
|
||||||
mech.glaive-ship.description = Великий, добре броньований бойовий корабель. Оснащений запальним ретранслятором. Високо маневрений.
|
mech.glaive-ship.description = Великий, добре броньований бойовий корабель. Оснащений запальним ретранслятором. Високо маневрений.
|
||||||
unit.draug.description = Примітивний дрон, який добуває ресурси. Дешевий для виробництва. Автоматично видобуває мідь і свинець поблизу. Доставляє видобуті ресурси до найближчого ядра.
|
unit.draug.description = Примітивний дрон, який добуває ресурси. Дешевий для виробництва. Автоматично видобуває мідь і свинець поблизу. Доставляє видобуті ресурси до найближчого ядра.
|
||||||
unit.spirit.description = Модифікований «Драугр», призначений для ремонту замість видобутку. Автоматично відновлює будь-які пошкоджені блоки.
|
unit.spirit.description = Модифікований «Драугр», призначений для ремонту замість видобутку. Автоматично відновлює будь-які пошкоджені блоки.
|
||||||
unit.phantom.description = Вдосконалений безпілотник. Йде за користувачами. Допомагає в будівництві блоків.
|
unit.phantom.description = Вдосконалений безпілотник. Йде за користувачами. Допомагає в будуванні блоків.
|
||||||
unit.dagger.description = Базовий мех(бойова одиниця). Дешевий у виробництві. Нездоланні при використанні в натовпі.
|
unit.dagger.description = Базовий мех(бойова одиниця). Дешевий у виробництві. Нездоланні при використанні в натовпі.
|
||||||
unit.crawler.description = Наземна одиниця, що складається зі стертої рами з високими вибуховими речовинами, прив’язаними зверху. Не особливо міцний. Вибухає при контакті з ворогами.
|
unit.crawler.description = Наземна одиниця, що складається зі стертої рами з високими вибуховими речовинами, прив’язаними зверху. Не особливо міцний. Вибухає при контакті з ворогами.
|
||||||
unit.titan.description = Вдосконалений броньований наземний блок. Нападає як на наземні, так і повітряні цілі. Оснащений двома мініатюрними вогнеметами класу Випалювач.
|
unit.titan.description = Вдосконалений броньований наземний блок. Нападає як на наземні, так і повітряні цілі. Оснащений двома мініатюрними вогнеметами класу Випалювач.
|
||||||
@@ -1067,8 +1067,8 @@ block.copper-wall.description = Дешевий захисний блок.\nКо
|
|||||||
block.copper-wall-large.description = Дешевий захисний блок.\nКорисна для захисту ядра та башточок у перші кілька хвиль.\nОхоплює кілька плиток.
|
block.copper-wall-large.description = Дешевий захисний блок.\nКорисна для захисту ядра та башточок у перші кілька хвиль.\nОхоплює кілька плиток.
|
||||||
block.titanium-wall.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів.
|
block.titanium-wall.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів.
|
||||||
block.titanium-wall-large.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів.\nОхоплює кілька плиток.
|
block.titanium-wall-large.description = Відносно сильний захисний блок.\nЗабезпечує помірний захист від ворогів.\nОхоплює кілька плиток.
|
||||||
block.plastanium-wall.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections.
|
block.plastanium-wall.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з'єднання енергетичних вузлів.
|
||||||
block.plastanium-wall-large.description = A special type of wall that absorbs electric arcs and blocks automatic power node connections.\nSpans multiple tiles.
|
block.plastanium-wall-large.description = Особливий тип стіни, який поглинає електричні дуги і блокує автоматичні з'єднання вузлів живлення.\nОхоплює кілька плиток.
|
||||||
block.thorium-wall.description = Сильний захисний блок.\nГідний захист від ворогів.
|
block.thorium-wall.description = Сильний захисний блок.\nГідний захист від ворогів.
|
||||||
block.thorium-wall-large.description = Сильний захисний блок.\nГідний захист від ворогів.\nОхоплює кілька плиток.
|
block.thorium-wall-large.description = Сильний захисний блок.\nГідний захист від ворогів.\nОхоплює кілька плиток.
|
||||||
block.phase-wall.description = Стіна, покрита спеціальним світловідбиваючим складом, який базується на фазовій тканині. Відхиляє більшість куль при ударі.
|
block.phase-wall.description = Стіна, покрита спеціальним світловідбиваючим складом, який базується на фазовій тканині. Відхиляє більшість куль при ударі.
|
||||||
@@ -1104,7 +1104,7 @@ block.liquid-junction.description = Діє як міст для двох кан
|
|||||||
block.bridge-conduit.description = Розширений блок транспортування рідини. Дозволяє транспортувати рідину до 3 плиток будь-якої місцевості чи будівлі.
|
block.bridge-conduit.description = Розширений блок транспортування рідини. Дозволяє транспортувати рідину до 3 плиток будь-якої місцевості чи будівлі.
|
||||||
block.phase-conduit.description = Розширений блок транспортування рідини. Використовує енергію для транспортування рідин до підключеного фазового каналу через декілька плиток.
|
block.phase-conduit.description = Розширений блок транспортування рідини. Використовує енергію для транспортування рідин до підключеного фазового каналу через декілька плиток.
|
||||||
block.power-node.description = Передає живлення на підключені вузли. Вузол буде отримувати живлення від будь-яких сусідніх блоків або подавати живлення до них.
|
block.power-node.description = Передає живлення на підключені вузли. Вузол буде отримувати живлення від будь-яких сусідніх блоків або подавати живлення до них.
|
||||||
block.power-node-large.description = Удосконалений вузол живлення з більшим діапазоном і більшою кількістю підключень.
|
block.power-node-large.description = Удосконалений вузол живлення з більшим діапазоном.
|
||||||
block.surge-tower.description = Надзвичайно дальний вузол живлення з меншою кількістю доступних з’єднань.
|
block.surge-tower.description = Надзвичайно дальний вузол живлення з меншою кількістю доступних з’єднань.
|
||||||
block.battery.description = Зберігає енергію як буфер в часи надлишкової енергії. Виводить енергію у періоди дефіциту.
|
block.battery.description = Зберігає енергію як буфер в часи надлишкової енергії. Виводить енергію у періоди дефіциту.
|
||||||
block.battery-large.description = Зберігає набагато більше енергії, ніж звичайний акумулятор.
|
block.battery-large.description = Зберігає набагато більше енергії, ніж звичайний акумулятор.
|
||||||
|
|||||||
@@ -81,7 +81,7 @@ uploadingpreviewfile = 正在上传预览文件
|
|||||||
committingchanges = 提交更改
|
committingchanges = 提交更改
|
||||||
done = 已完成
|
done = 已完成
|
||||||
feature.unsupported = Your device does not support this feature.
|
feature.unsupported = Your device does not support this feature.
|
||||||
mods.alphainfo = 请注意在测试版本中的模组[scarlet]可能有缺陷[]。\n在 Mindustry Github 或 Discord上报告你发现的问题。
|
mods.alphainfo = 请注意在测试版本中的模组[scarlet]可能有缺陷[]。\n在 Mindustry GitHub 或 Discord上报告你发现的问题。
|
||||||
mods.alpha = [accent](测试版)
|
mods.alpha = [accent](测试版)
|
||||||
mods = 模组
|
mods = 模组
|
||||||
mods.none = [LIGHT_GRAY]无模组!
|
mods.none = [LIGHT_GRAY]无模组!
|
||||||
@@ -98,7 +98,7 @@ mod.enable = 启用
|
|||||||
mod.requiresrestart = 需要重启使模组生效。
|
mod.requiresrestart = 需要重启使模组生效。
|
||||||
mod.reloadrequired = [scarlet]需要重启
|
mod.reloadrequired = [scarlet]需要重启
|
||||||
mod.import = 导入模组
|
mod.import = 导入模组
|
||||||
mod.import.github = 导入 Github 模组
|
mod.import.github = 导入 GitHub 模组
|
||||||
mod.remove.confirm = 此模组将被删除。
|
mod.remove.confirm = 此模组将被删除。
|
||||||
mod.author = [LIGHT_GRAY]作者:[] {0}
|
mod.author = [LIGHT_GRAY]作者:[] {0}
|
||||||
mod.missing = 此存档包含更新后的模组或不再使用的模组。存档可能会损坏。确定要加载它吗?\n[lightgray]模组:\n{0}
|
mod.missing = 此存档包含更新后的模组或不再使用的模组。存档可能会损坏。确定要加载它吗?\n[lightgray]模组:\n{0}
|
||||||
|
|||||||
@@ -18,12 +18,14 @@ gameover = 遊戲結束
|
|||||||
gameover.pvp = [accent]{0}[]隊獲勝!
|
gameover.pvp = [accent]{0}[]隊獲勝!
|
||||||
highscore = [accent]新的高分紀錄!
|
highscore = [accent]新的高分紀錄!
|
||||||
copied = 已複製。
|
copied = 已複製。
|
||||||
|
|
||||||
load.sound = 音效載入中
|
load.sound = 音效載入中
|
||||||
load.map = 地圖載入中
|
load.map = 地圖載入中
|
||||||
load.image = 圖片載入中
|
load.image = 圖片載入中
|
||||||
load.content = 內容載入中
|
load.content = 內容載入中
|
||||||
load.system = 系統載入中
|
load.system = 系統載入中
|
||||||
load.mod = 模組載入中
|
load.mod = 模組載入中
|
||||||
|
|
||||||
schematic = 藍圖
|
schematic = 藍圖
|
||||||
schematic.add = 儲存藍圖...
|
schematic.add = 儲存藍圖...
|
||||||
schematics = 藍圖
|
schematics = 藍圖
|
||||||
@@ -40,6 +42,7 @@ schematic.saved = 藍圖已保存。
|
|||||||
schematic.delete.confirm = 該藍圖將被完全清除。
|
schematic.delete.confirm = 該藍圖將被完全清除。
|
||||||
schematic.rename = 重新命名藍圖
|
schematic.rename = 重新命名藍圖
|
||||||
schematic.info = {0}x{1}, {2}方塊
|
schematic.info = {0}x{1}, {2}方塊
|
||||||
|
|
||||||
stat.wave = 打敗的波次:[accent]{0}
|
stat.wave = 打敗的波次:[accent]{0}
|
||||||
stat.enemiesDestroyed = 摧毀的敵人:[accent]{0}
|
stat.enemiesDestroyed = 摧毀的敵人:[accent]{0}
|
||||||
stat.built = 建設的建築:[accent]{0}
|
stat.built = 建設的建築:[accent]{0}
|
||||||
@@ -47,6 +50,7 @@ stat.destroyed = 摧毀的建築:[accent]{0}
|
|||||||
stat.deconstructed = 拆除的建築:[accent]{0}
|
stat.deconstructed = 拆除的建築:[accent]{0}
|
||||||
stat.delivered = 發射的核心資源:
|
stat.delivered = 發射的核心資源:
|
||||||
stat.rank = 最終排名:[accent]{0}
|
stat.rank = 最終排名:[accent]{0}
|
||||||
|
|
||||||
launcheditems = [accent]已發射的物品
|
launcheditems = [accent]已發射的物品
|
||||||
launchinfo = [unlaunched][[LAUNCH]你的核心以獲得藍字部分的物品。
|
launchinfo = [unlaunched][[LAUNCH]你的核心以獲得藍字部分的物品。
|
||||||
map.delete = 確認要刪除「[accent]{0}[]」地圖嗎?
|
map.delete = 確認要刪除「[accent]{0}[]」地圖嗎?
|
||||||
@@ -81,29 +85,30 @@ uploadingpreviewfile = 上傳預覽文件
|
|||||||
committingchanges = 提交變更
|
committingchanges = 提交變更
|
||||||
done = 完成
|
done = 完成
|
||||||
feature.unsupported = 您的設備不支持此功能。
|
feature.unsupported = 您的設備不支持此功能。
|
||||||
mods.alphainfo = 請記住,模組仍處於Alpha狀態,[scarlet]可能會有很多BUG[].\n向Mindustry Github或Discord報告發現的任何問題。
|
mods.alphainfo = 請記住,模組仍處於Alpha狀態,[scarlet]可能會有很多BUG[].\n向Mindustry GitHub或Discord報告發現的任何問題。
|
||||||
mods.alpha = [accent](Alpha)
|
mods.alpha = [accent](Alpha)
|
||||||
mods = 模組
|
mods = 模組
|
||||||
mods.none = [lightgray]找不到模組!
|
mods.none = [lightgray]找不到模組!
|
||||||
mods.guide = 模組指南
|
mods.guide = 模組指南
|
||||||
mods.report = 回報錯誤
|
mods.report = 回報錯誤
|
||||||
mods.openfolder = Open Mod Folder
|
mods.openfolder = 開啟模組資料夾
|
||||||
mod.enabled = [lightgray]已啟用
|
mod.enabled = [lightgray]已啟用
|
||||||
mod.disabled = [scarlet]已禁用
|
mod.disabled = [scarlet]已禁用
|
||||||
|
mod.enable = 啟用
|
||||||
mod.disable = 禁用
|
mod.disable = 禁用
|
||||||
mod.delete.error = Unable to delete mod. File may be in use.
|
mod.delete.error = 無法刪除模組,檔案可能在使用中。
|
||||||
mod.missingdependencies = [scarlet]缺少依賴項目: {0}
|
mod.missingdependencies = [scarlet]缺少依賴項目: {0}
|
||||||
mod.nowdisabled = [scarlet]「{0}'」模組缺少依賴項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。
|
mod.nowdisabled = [scarlet]「{0}'」模組缺少依賴項目:[accent] {1}\n[lightgray]必須先下載這些模組。\n此模組將被自動禁用。
|
||||||
mod.enable = 啟用
|
|
||||||
mod.requiresrestart = 遊戲將立即關閉以套用模組變更。
|
mod.requiresrestart = 遊戲將立即關閉以套用模組變更。
|
||||||
mod.reloadrequired = [scarlet]需要重新載入
|
mod.reloadrequired = [scarlet]需要重新載入
|
||||||
mod.import = 匯入模組
|
mod.import = 匯入模組
|
||||||
mod.import.github = 匯入Github模組
|
mod.import.github = 匯入GitHub模組
|
||||||
mod.remove.confirm = 該模組將被刪除。
|
mod.remove.confirm = 該模組將被刪除。
|
||||||
mod.author = [lightgray]作者:[] {0}
|
mod.author = [lightgray]作者:[] {0}
|
||||||
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
|
mod.missing = 此存檔含有您最近更新或不再安裝的模組。可能會發生存檔損毀。您確定要載入嗎?\n[lightgray]模組:\n{0}
|
||||||
mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。
|
mod.preview.missing = 在工作坊發佈這個模組前,您必須添加預覽圖。\n在該模組的資料夾中放置一個名為[accent] preview.png[]的圖片並重試。
|
||||||
mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾,只需將其文件解壓縮到資料夾並刪除舊的.zip檔,然後重新啟動遊戲或重新載入模組。
|
mod.folder.missing = 只有資料夾形式的模組可以在工作坊上發布。\n要將模組轉換為資料夾,只需將其文件解壓縮到資料夾並刪除舊的.zip檔,然後重新啟動遊戲或重新載入模組。
|
||||||
|
|
||||||
about.button = 關於
|
about.button = 關於
|
||||||
name = 名稱:
|
name = 名稱:
|
||||||
noname = 請先選擇一個[accent]玩家名稱[]。
|
noname = 請先選擇一個[accent]玩家名稱[]。
|
||||||
@@ -270,7 +275,7 @@ missing = 此項目已被刪除或移動。\n[lightgray]工作坊列表現在已
|
|||||||
publishing = [accent]發佈中...
|
publishing = [accent]發佈中...
|
||||||
publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意Workshop EULA,否則您的項目將不會顯示!
|
publish.confirm = 您確定要發布嗎?\n\n[lightgray]首先確定您同意Workshop EULA,否則您的項目將不會顯示!
|
||||||
publish.error = 發佈項目時出錯: {0}
|
publish.error = 發佈項目時出錯: {0}
|
||||||
steam.error = Failed to initialize Steam services.\nError: {0}
|
steam.error = Steam 服務初始化失敗.\n錯誤: {0}
|
||||||
editor.brush = 粉刷
|
editor.brush = 粉刷
|
||||||
editor.openin = 在編輯器中開啟
|
editor.openin = 在編輯器中開啟
|
||||||
editor.oregen = 礦石生成
|
editor.oregen = 礦石生成
|
||||||
@@ -347,6 +352,7 @@ editor.overwrite = [accent]警告!這將會覆蓋現有的地圖。
|
|||||||
editor.overwrite.confirm = [scarlet]警告![]同名地圖存在,確定要覆蓋現有地圖?
|
editor.overwrite.confirm = [scarlet]警告![]同名地圖存在,確定要覆蓋現有地圖?
|
||||||
editor.exists = 具有該名稱的地圖已經存在。
|
editor.exists = 具有該名稱的地圖已經存在。
|
||||||
editor.selectmap = 選取要載入的地圖:
|
editor.selectmap = 選取要載入的地圖:
|
||||||
|
|
||||||
toolmode.replace = 取代
|
toolmode.replace = 取代
|
||||||
toolmode.replace.description = 僅繪製在實體方塊上。
|
toolmode.replace.description = 僅繪製在實體方塊上。
|
||||||
toolmode.replaceall = 全部取代
|
toolmode.replaceall = 全部取代
|
||||||
@@ -361,6 +367,7 @@ toolmode.fillteams = 填充團隊
|
|||||||
toolmode.fillteams.description = 填充團隊而不是方塊。
|
toolmode.fillteams.description = 填充團隊而不是方塊。
|
||||||
toolmode.drawteams = Draw Teams
|
toolmode.drawteams = Draw Teams
|
||||||
toolmode.drawteams.description = 繪製團隊而不是方塊。
|
toolmode.drawteams.description = 繪製團隊而不是方塊。
|
||||||
|
|
||||||
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。
|
filters.empty = [lightgray]沒有過濾器!使用下面的按鈕添加一個。
|
||||||
filter.distort = 扭曲
|
filter.distort = 扭曲
|
||||||
filter.noise = 雜訊
|
filter.noise = 雜訊
|
||||||
@@ -392,6 +399,7 @@ filter.option.floor2 = 次要地板
|
|||||||
filter.option.threshold2 = 次要閾值
|
filter.option.threshold2 = 次要閾值
|
||||||
filter.option.radius = 半徑
|
filter.option.radius = 半徑
|
||||||
filter.option.percentile = 百分比
|
filter.option.percentile = 百分比
|
||||||
|
|
||||||
width = 寬度:
|
width = 寬度:
|
||||||
height = 長度:
|
height = 長度:
|
||||||
menu = 主選單
|
menu = 主選單
|
||||||
@@ -407,6 +415,7 @@ tutorial = 教學
|
|||||||
tutorial.retake = 重置教學
|
tutorial.retake = 重置教學
|
||||||
editor = 地圖編輯器
|
editor = 地圖編輯器
|
||||||
mapeditor = 地圖編輯器
|
mapeditor = 地圖編輯器
|
||||||
|
|
||||||
abandon = 放棄
|
abandon = 放棄
|
||||||
abandon.text = 此區域及其所有資源將會丟失給敵人。
|
abandon.text = 此區域及其所有資源將會丟失給敵人。
|
||||||
locked = 鎖定
|
locked = 鎖定
|
||||||
@@ -437,6 +446,7 @@ zone.objective.survival = 生存
|
|||||||
zone.objective.attack = 摧毀敵人核心
|
zone.objective.attack = 摧毀敵人核心
|
||||||
add = 新增...
|
add = 新增...
|
||||||
boss.health = 頭目血量
|
boss.health = 頭目血量
|
||||||
|
|
||||||
connectfail = [crimson]伺服器連線錯誤:[accent]{0}
|
connectfail = [crimson]伺服器連線錯誤:[accent]{0}
|
||||||
error.unreachable = 無法到達伺服器。請確認位址是否正確?
|
error.unreachable = 無法到達伺服器。請確認位址是否正確?
|
||||||
error.invalidaddress = 無效的位址。
|
error.invalidaddress = 無效的位址。
|
||||||
@@ -447,6 +457,7 @@ error.mapnotfound = 找不到地圖!
|
|||||||
error.io = 網絡輸出入錯誤。
|
error.io = 網絡輸出入錯誤。
|
||||||
error.any = 未知網絡錯誤。
|
error.any = 未知網絡錯誤。
|
||||||
error.bloom = 初始化特效失敗.\n您的設備可能不支援它
|
error.bloom = 初始化特效失敗.\n您的設備可能不支援它
|
||||||
|
|
||||||
zone.groundZero.name = 零號地區
|
zone.groundZero.name = 零號地區
|
||||||
zone.desertWastes.name = 沙漠荒原
|
zone.desertWastes.name = 沙漠荒原
|
||||||
zone.craters.name = 隕石坑
|
zone.craters.name = 隕石坑
|
||||||
@@ -461,6 +472,7 @@ zone.saltFlats.name = 鹽沼
|
|||||||
zone.impact0078.name = 衝擊 0078
|
zone.impact0078.name = 衝擊 0078
|
||||||
zone.crags.name = 岩壁
|
zone.crags.name = 岩壁
|
||||||
zone.fungalPass.name = 真菌隘口
|
zone.fungalPass.name = 真菌隘口
|
||||||
|
|
||||||
zone.groundZero.description = 再次開始的最佳位置。敵人威脅度低。資源少。\n盡可能的收集更多的鉛和銅。\n繼續前進。
|
zone.groundZero.description = 再次開始的最佳位置。敵人威脅度低。資源少。\n盡可能的收集更多的鉛和銅。\n繼續前進。
|
||||||
zone.frozenForest.description = 即使這裡更靠近山脈,孢子也已經擴散到這裡了。嚴寒的溫度不可能永遠禁錮它們。\n\n開始進入能源的世界。建造燃燒發電機。學會使用修理方塊。
|
zone.frozenForest.description = 即使這裡更靠近山脈,孢子也已經擴散到這裡了。嚴寒的溫度不可能永遠禁錮它們。\n\n開始進入能源的世界。建造燃燒發電機。學會使用修理方塊。
|
||||||
zone.desertWastes.description = 這些荒原規模巨大,難以預測,並且與廢棄的結構交錯在一起。\n此地區存在著煤炭。燃燒它以獲得能源或合成石墨。\n\n[lightgray]無法保證此地圖的著陸位置。
|
zone.desertWastes.description = 這些荒原規模巨大,難以預測,並且與廢棄的結構交錯在一起。\n此地區存在著煤炭。燃燒它以獲得能源或合成石墨。\n\n[lightgray]無法保證此地圖的著陸位置。
|
||||||
@@ -475,6 +487,7 @@ zone.nuclearComplex.description = 以前生產和加工釷的設施已變成廢
|
|||||||
zone.fungalPass.description = 高山與被孢子纏繞的低地之間的過渡區域。一個小的敵人偵察基地位於這裡。\n破壞它。\n使用匕首機甲和爬行機甲單位來摧毀兩個核心。
|
zone.fungalPass.description = 高山與被孢子纏繞的低地之間的過渡區域。一個小的敵人偵察基地位於這裡。\n破壞它。\n使用匕首機甲和爬行機甲單位來摧毀兩個核心。
|
||||||
zone.impact0078.description = <在此處輸入說明>
|
zone.impact0078.description = <在此處輸入說明>
|
||||||
zone.crags.description = <在此輸入說明>
|
zone.crags.description = <在此輸入說明>
|
||||||
|
|
||||||
settings.language = 語言
|
settings.language = 語言
|
||||||
settings.data = 遊戲數據
|
settings.data = 遊戲數據
|
||||||
settings.reset = 重設為預設設定
|
settings.reset = 重設為預設設定
|
||||||
@@ -509,7 +522,7 @@ blocks.shootrange = 範圍
|
|||||||
blocks.size = 尺寸
|
blocks.size = 尺寸
|
||||||
blocks.liquidcapacity = 液體容量
|
blocks.liquidcapacity = 液體容量
|
||||||
blocks.powerrange = 輸出範圍
|
blocks.powerrange = 輸出範圍
|
||||||
blocks.powerconnections = Max Connections
|
blocks.powerconnections = 最大連接數
|
||||||
blocks.poweruse = 能量使用
|
blocks.poweruse = 能量使用
|
||||||
blocks.powerdamage = 能量/傷害
|
blocks.powerdamage = 能量/傷害
|
||||||
blocks.itemcapacity = 物品容量
|
blocks.itemcapacity = 物品容量
|
||||||
@@ -529,9 +542,10 @@ blocks.inaccuracy = 誤差
|
|||||||
blocks.shots = 射擊數
|
blocks.shots = 射擊數
|
||||||
blocks.reload = 射擊次數/秒
|
blocks.reload = 射擊次數/秒
|
||||||
blocks.ammo = 彈藥
|
blocks.ammo = 彈藥
|
||||||
|
|
||||||
bar.drilltierreq = 需要更好的鑽頭
|
bar.drilltierreq = 需要更好的鑽頭
|
||||||
bar.drillspeed = 鑽頭速度:{0}/秒
|
bar.drillspeed = 鑽頭速度:{0}/秒
|
||||||
bar.pumpspeed = Pump Speed: {0}/s
|
bar.pumpspeed = 液體泵送速度:{0}/s
|
||||||
bar.efficiency = 效率:{0}%
|
bar.efficiency = 效率:{0}%
|
||||||
bar.powerbalance = 能量變化:{0}
|
bar.powerbalance = 能量變化:{0}
|
||||||
bar.powerstored = 能量存量: {0}/{1}
|
bar.powerstored = 能量存量: {0}/{1}
|
||||||
@@ -544,6 +558,9 @@ bar.heat = 熱
|
|||||||
bar.power = 能量
|
bar.power = 能量
|
||||||
bar.progress = 建造進度
|
bar.progress = 建造進度
|
||||||
bar.spawned = 單位:{0}/{1}
|
bar.spawned = 單位:{0}/{1}
|
||||||
|
bar.input = 能量輸入
|
||||||
|
bar.output = 能量輸出
|
||||||
|
|
||||||
bullet.damage = [stat]{0}[lightgray]傷害
|
bullet.damage = [stat]{0}[lightgray]傷害
|
||||||
bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
|
bullet.splashdamage = [stat]{0}[lightgray]範圍傷害 ~[stat] {1}[lightgray]格
|
||||||
bullet.incendiary = [stat]燃燒
|
bullet.incendiary = [stat]燃燒
|
||||||
@@ -555,6 +572,7 @@ bullet.freezing = [stat]冷凍
|
|||||||
bullet.tarred = [stat]焦油
|
bullet.tarred = [stat]焦油
|
||||||
bullet.multiplier = [stat]{0}[lightgray]×彈藥倍數
|
bullet.multiplier = [stat]{0}[lightgray]×彈藥倍數
|
||||||
bullet.reload = [stat]{0}[lightgray]×射擊速率
|
bullet.reload = [stat]{0}[lightgray]×射擊速率
|
||||||
|
|
||||||
unit.blocks = 方塊
|
unit.blocks = 方塊
|
||||||
unit.powersecond = 能量單位/秒
|
unit.powersecond = 能量單位/秒
|
||||||
unit.liquidsecond = 液體單位/秒
|
unit.liquidsecond = 液體單位/秒
|
||||||
@@ -574,9 +592,10 @@ category.items = 物品
|
|||||||
category.crafting = 需求
|
category.crafting = 需求
|
||||||
category.shooting = 射擊
|
category.shooting = 射擊
|
||||||
category.optional = 可選的強化
|
category.optional = 可選的強化
|
||||||
|
|
||||||
setting.landscape.name = 鎖定水平畫面
|
setting.landscape.name = 鎖定水平畫面
|
||||||
setting.shadows.name = 陰影
|
setting.shadows.name = 陰影
|
||||||
setting.blockreplace.name = Automatic Block Suggestions
|
setting.blockreplace.name = 方塊建造建議
|
||||||
setting.linear.name = 線性過濾
|
setting.linear.name = 線性過濾
|
||||||
setting.hints.name = 提示
|
setting.hints.name = 提示
|
||||||
setting.animatedwater.name = 水動畫
|
setting.animatedwater.name = 水動畫
|
||||||
@@ -599,8 +618,8 @@ setting.difficulty.insane = 瘋狂
|
|||||||
setting.difficulty.name = 難度:
|
setting.difficulty.name = 難度:
|
||||||
setting.screenshake.name = 畫面抖動
|
setting.screenshake.name = 畫面抖動
|
||||||
setting.effects.name = 顯示特效
|
setting.effects.name = 顯示特效
|
||||||
setting.destroyedblocks.name = Display Destroyed Blocks
|
setting.destroyedblocks.name = 顯示被破壞的方塊
|
||||||
setting.conveyorpathfinding.name = Conveyor Placement Pathfinding
|
setting.conveyorpathfinding.name = 自動輸送帶放置規劃
|
||||||
setting.sensitivity.name = 控制器靈敏度
|
setting.sensitivity.name = 控制器靈敏度
|
||||||
setting.saveinterval.name = 自動存檔間隔
|
setting.saveinterval.name = 自動存檔間隔
|
||||||
setting.seconds = {0}秒
|
setting.seconds = {0}秒
|
||||||
@@ -681,6 +700,7 @@ mode.pvp.description = 和其他玩家競爭、戰鬥。
|
|||||||
mode.attack.name = 進攻
|
mode.attack.name = 進攻
|
||||||
mode.attack.description = 沒有波次,目標是摧毀敵人的基地。
|
mode.attack.description = 沒有波次,目標是摧毀敵人的基地。
|
||||||
mode.custom = 自訂規則
|
mode.custom = 自訂規則
|
||||||
|
|
||||||
rules.infiniteresources = 無限資源
|
rules.infiniteresources = 無限資源
|
||||||
rules.wavetimer = 波次時間
|
rules.wavetimer = 波次時間
|
||||||
rules.waves = 波次
|
rules.waves = 波次
|
||||||
@@ -707,6 +727,7 @@ rules.title.resourcesbuilding = 資源與建築
|
|||||||
rules.title.player = 玩家
|
rules.title.player = 玩家
|
||||||
rules.title.enemy = 敵人
|
rules.title.enemy = 敵人
|
||||||
rules.title.unit = 單位
|
rules.title.unit = 單位
|
||||||
|
|
||||||
content.item.name = 物品
|
content.item.name = 物品
|
||||||
content.liquid.name = 液體
|
content.liquid.name = 液體
|
||||||
content.unit.name = 單位
|
content.unit.name = 單位
|
||||||
@@ -732,6 +753,7 @@ liquid.water.name = 水
|
|||||||
liquid.slag.name = 熔渣
|
liquid.slag.name = 熔渣
|
||||||
liquid.oil.name = 原油
|
liquid.oil.name = 原油
|
||||||
liquid.cryofluid.name = 冷凍液
|
liquid.cryofluid.name = 冷凍液
|
||||||
|
|
||||||
mech.alpha-mech.name = 阿爾法
|
mech.alpha-mech.name = 阿爾法
|
||||||
mech.alpha-mech.weapon = 重型機關槍
|
mech.alpha-mech.weapon = 重型機關槍
|
||||||
mech.alpha-mech.ability = 自修復
|
mech.alpha-mech.ability = 自修復
|
||||||
@@ -879,6 +901,7 @@ block.coal-centrifuge.name = 煤炭離心機
|
|||||||
block.power-node.name = 能量節點
|
block.power-node.name = 能量節點
|
||||||
block.power-node-large.name = 大型能量節點
|
block.power-node-large.name = 大型能量節點
|
||||||
block.surge-tower.name = 波動塔
|
block.surge-tower.name = 波動塔
|
||||||
|
block.diode.name = 二極體
|
||||||
block.battery.name = 電池
|
block.battery.name = 電池
|
||||||
block.battery-large.name = 大型電池
|
block.battery-large.name = 大型電池
|
||||||
block.combustion-generator.name = 燃燒發電機
|
block.combustion-generator.name = 燃燒發電機
|
||||||
@@ -1106,6 +1129,7 @@ block.phase-conduit.description = 高級的液體運輸方塊。使用能量將
|
|||||||
block.power-node.description = 將能量傳輸到相連的節點。該節點將從任何相鄰方塊接收能量或向任何相鄰方塊供應能量。
|
block.power-node.description = 將能量傳輸到相連的節點。該節點將從任何相鄰方塊接收能量或向任何相鄰方塊供應能量。
|
||||||
block.power-node-large.description = 具有更大範圍和更多連接的高級電源節點。
|
block.power-node-large.description = 具有更大範圍和更多連接的高級電源節點。
|
||||||
block.surge-tower.description = 具有兩個可用連接的超遠程能量節點。
|
block.surge-tower.description = 具有兩個可用連接的超遠程能量節點。
|
||||||
|
block.diode.description = 電池中的電力在這個方塊中只能有一個固定的流向,並且只有在另一側的能量較少時才會通過。
|
||||||
block.battery.description = 有能量剩餘時存儲電力並在能量短缺時提供能量。
|
block.battery.description = 有能量剩餘時存儲電力並在能量短缺時提供能量。
|
||||||
block.battery-large.description = 比普通電池存儲更多的能量。
|
block.battery-large.description = 比普通電池存儲更多的能量。
|
||||||
block.combustion-generator.description = 透過燃燒原油或可燃物品以產生能量。
|
block.combustion-generator.description = 透過燃燒原油或可燃物品以產生能量。
|
||||||
@@ -1165,3 +1189,4 @@ block.omega-mech-pad.description = 改裝現在的船隻,換成龐大、具有
|
|||||||
block.javelin-ship-pad.description = 改裝現在的船隻,換成具有閃電武器、強大而快速的攔截機。\n站在上面雙擊機坪以使用它。
|
block.javelin-ship-pad.description = 改裝現在的船隻,換成具有閃電武器、強大而快速的攔截機。\n站在上面雙擊機坪以使用它。
|
||||||
block.trident-ship-pad.description = 改裝現在的船隻,換成具有相當不錯裝甲的重型轟炸機。\n站在上面雙擊機坪以使用它。
|
block.trident-ship-pad.description = 改裝現在的船隻,換成具有相當不錯裝甲的重型轟炸機。\n站在上面雙擊機坪以使用它。
|
||||||
block.glaive-ship-pad.description = 改裝現在的船隻,換成具有重裝甲的砲艇。\n站在上面雙擊機坪以使用它。
|
block.glaive-ship-pad.description = 改裝現在的船隻,換成具有重裝甲的砲艇。\n站在上面雙擊機坪以使用它。
|
||||||
|
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 738 B After Width: | Height: | Size: 742 B |
|
Before Width: | Height: | Size: 735 KiB After Width: | Height: | Size: 736 KiB |
|
Before Width: | Height: | Size: 260 KiB After Width: | Height: | Size: 260 KiB |
|
Before Width: | Height: | Size: 891 KiB After Width: | Height: | Size: 891 KiB |
@@ -48,7 +48,7 @@ public class Blocks implements ContentList{
|
|||||||
melter, separator, sporePress, pulverizer, incinerator, coalCentrifuge,
|
melter, separator, sporePress, pulverizer, incinerator, coalCentrifuge,
|
||||||
|
|
||||||
//sandbox
|
//sandbox
|
||||||
powerVoid, powerSource, itemSource, liquidSource, itemVoid, message, light,
|
powerSource, powerVoid, itemSource, itemVoid, liquidSource, message, illuminator,
|
||||||
|
|
||||||
//defense
|
//defense
|
||||||
scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet
|
scrapWall, scrapWallLarge, scrapWallHuge, scrapWallGigantic, thruster, //ok, these names are getting ridiculous, but at least I don't have humongous walls yet
|
||||||
@@ -63,7 +63,7 @@ public class Blocks implements ContentList{
|
|||||||
|
|
||||||
//power
|
//power
|
||||||
combustionGenerator, thermalGenerator, turbineGenerator, differentialGenerator, rtgGenerator, solarPanel, largeSolarPanel, thoriumReactor,
|
combustionGenerator, thermalGenerator, turbineGenerator, differentialGenerator, rtgGenerator, solarPanel, largeSolarPanel, thoriumReactor,
|
||||||
impactReactor, battery, batteryLarge, powerNode, powerNodeLarge, surgeTower,
|
impactReactor, battery, batteryLarge, powerNode, powerNodeLarge, surgeTower, diode,
|
||||||
|
|
||||||
//production
|
//production
|
||||||
mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator,
|
mechanicalDrill, pneumaticDrill, laserDrill, blastDrill, waterExtractor, oilExtractor, cultivator,
|
||||||
@@ -537,7 +537,7 @@ public class Blocks implements ContentList{
|
|||||||
hasPower = true;
|
hasPower = true;
|
||||||
|
|
||||||
consumes.power(4f);
|
consumes.power(4f);
|
||||||
consumes.items(new ItemStack(Items.titanium, 2), new ItemStack(Items.lead, 4), new ItemStack(Items.silicon, 3), new ItemStack(Items.copper, 3));
|
consumes.items(new ItemStack(Items.copper, 3), new ItemStack(Items.lead, 4), new ItemStack(Items.titanium, 2), new ItemStack(Items.silicon, 3));
|
||||||
}};
|
}};
|
||||||
|
|
||||||
cryofluidMixer = new LiquidConverter("cryofluidmixer"){{
|
cryofluidMixer = new LiquidConverter("cryofluidmixer"){{
|
||||||
@@ -713,11 +713,11 @@ public class Blocks implements ContentList{
|
|||||||
//endregion
|
//endregion
|
||||||
//region sandbox
|
//region sandbox
|
||||||
|
|
||||||
powerVoid = new PowerVoid("power-void"){{
|
powerSource = new PowerSource("power-source"){{
|
||||||
requirements(Category.power, BuildVisibility.sandboxOnly, ItemStack.with());
|
requirements(Category.power, BuildVisibility.sandboxOnly, ItemStack.with());
|
||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
}};
|
}};
|
||||||
powerSource = new PowerSource("power-source"){{
|
powerVoid = new PowerVoid("power-void"){{
|
||||||
requirements(Category.power, BuildVisibility.sandboxOnly, ItemStack.with());
|
requirements(Category.power, BuildVisibility.sandboxOnly, ItemStack.with());
|
||||||
alwaysUnlocked = true;
|
alwaysUnlocked = true;
|
||||||
}};
|
}};
|
||||||
@@ -736,8 +736,11 @@ public class Blocks implements ContentList{
|
|||||||
message = new MessageBlock("message"){{
|
message = new MessageBlock("message"){{
|
||||||
requirements(Category.effect, ItemStack.with(Items.graphite, 5));
|
requirements(Category.effect, ItemStack.with(Items.graphite, 5));
|
||||||
}};
|
}};
|
||||||
light = new LightBlock("light"){{
|
illuminator = new LightBlock("illuminator"){{
|
||||||
requirements(Category.effect, ItemStack.with(Items.graphite, 5));
|
requirements(Category.effect, ItemStack.with(Items.graphite, 5));
|
||||||
|
color = Color.valueOf("7d93ff");
|
||||||
|
brightness = 0.6f;
|
||||||
|
radius = 80f;
|
||||||
consumes.power(0.05f);
|
consumes.power(0.05f);
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1014,6 +1017,7 @@ public class Blocks implements ContentList{
|
|||||||
pulseConduit = new Conduit("pulse-conduit"){{
|
pulseConduit = new Conduit("pulse-conduit"){{
|
||||||
requirements(Category.liquid, ItemStack.with(Items.titanium, 2, Items.metaglass, 1));
|
requirements(Category.liquid, ItemStack.with(Items.titanium, 2, Items.metaglass, 1));
|
||||||
liquidCapacity = 16f;
|
liquidCapacity = 16f;
|
||||||
|
liquidPressure = 1.025f;
|
||||||
health = 90;
|
health = 90;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
@@ -1069,6 +1073,10 @@ public class Blocks implements ContentList{
|
|||||||
laserRange = 30f;
|
laserRange = 30f;
|
||||||
}};
|
}};
|
||||||
|
|
||||||
|
diode = new PowerDiode("diode"){{
|
||||||
|
requirements(Category.power, ItemStack.with(Items.silicon, 10, Items.plastanium, 5, Items.metaglass, 10));
|
||||||
|
}};
|
||||||
|
|
||||||
battery = new Battery("battery"){{
|
battery = new Battery("battery"){{
|
||||||
requirements(Category.power, ItemStack.with(Items.copper, 4, Items.lead, 20));
|
requirements(Category.power, ItemStack.with(Items.copper, 4, Items.lead, 20));
|
||||||
consumes.powerBuffered(4000f);
|
consumes.powerBuffered(4000f);
|
||||||
|
|||||||
@@ -215,10 +215,12 @@ public class TechTree implements ContentList{
|
|||||||
node(combustionGenerator, () -> {
|
node(combustionGenerator, () -> {
|
||||||
node(powerNode, () -> {
|
node(powerNode, () -> {
|
||||||
node(powerNodeLarge, () -> {
|
node(powerNodeLarge, () -> {
|
||||||
|
node(diode, () -> {
|
||||||
node(surgeTower, () -> {
|
node(surgeTower, () -> {
|
||||||
|
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
});
|
||||||
|
|
||||||
node(battery, () -> {
|
node(battery, () -> {
|
||||||
node(batteryLarge, () -> {
|
node(batteryLarge, () -> {
|
||||||
|
|||||||
@@ -189,7 +189,6 @@ public class Zones implements ContentList{
|
|||||||
startingItems = list(copper, 250, lead, 100);
|
startingItems = list(copper, 250, lead, 100);
|
||||||
conditionWave = 15;
|
conditionWave = 15;
|
||||||
launchPeriod = 10;
|
launchPeriod = 10;
|
||||||
requirements = with(new ZoneWave(ruinousShores, 20));
|
|
||||||
resources = with(copper, scrap, lead, coal, titanium, thorium, sand);
|
resources = with(copper, scrap, lead, coal, titanium, thorium, sand);
|
||||||
requirements = with(
|
requirements = with(
|
||||||
new ZoneWave(ruinousShores, 20),
|
new ZoneWave(ruinousShores, 20),
|
||||||
|
|||||||
@@ -103,6 +103,7 @@ public class EditorTile extends Tile{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(floor.isLiquid) return;
|
||||||
if(overlayID() == overlay) return;
|
if(overlayID() == overlay) return;
|
||||||
op(OpType.overlay, this.overlay.id);
|
op(OpType.overlay, this.overlay.id);
|
||||||
super.setOverlayID(overlay);
|
super.setOverlayID(overlay);
|
||||||
|
|||||||
@@ -186,7 +186,7 @@ public class WaveInfoDialog extends FloatingDialog{
|
|||||||
}).width(80f);
|
}).width(80f);
|
||||||
|
|
||||||
a.add(" + ");
|
a.add(" + ");
|
||||||
a.addField(Strings.fixed(Math.max((Mathf.isZero(group.unitScaling) ? 0 : 1f / group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
|
a.addField(Strings.fixed(Math.max((Mathf.zero(group.unitScaling) ? 0 : 1f / group.unitScaling), 0), 2), TextFieldFilter.floatsOnly, text -> {
|
||||||
if(Strings.canParsePositiveFloat(text)){
|
if(Strings.canParsePositiveFloat(text)){
|
||||||
group.unitScaling = 1f / Strings.parseFloat(text);
|
group.unitScaling = 1f / Strings.parseFloat(text);
|
||||||
updateWaves();
|
updateWaves();
|
||||||
@@ -217,10 +217,11 @@ public class WaveInfoDialog extends FloatingDialog{
|
|||||||
|
|
||||||
void showUpdate(SpawnGroup group){
|
void showUpdate(SpawnGroup group){
|
||||||
FloatingDialog dialog = new FloatingDialog("");
|
FloatingDialog dialog = new FloatingDialog("");
|
||||||
dialog.setFillParent(false);
|
dialog.setFillParent(true);
|
||||||
|
dialog.cont.pane(p -> {
|
||||||
int i = 0;
|
int i = 0;
|
||||||
for(UnitType type : content.units()){
|
for(UnitType type : content.units()){
|
||||||
dialog.cont.addButton(t -> {
|
p.addButton(t -> {
|
||||||
t.left();
|
t.left();
|
||||||
t.addImage(type.icon(io.anuke.mindustry.ui.Cicon.medium)).size(40f).padRight(2f);
|
t.addImage(type.icon(io.anuke.mindustry.ui.Cicon.medium)).size(40f).padRight(2f);
|
||||||
t.add(type.localizedName);
|
t.add(type.localizedName);
|
||||||
@@ -230,8 +231,9 @@ public class WaveInfoDialog extends FloatingDialog{
|
|||||||
dialog.hide();
|
dialog.hide();
|
||||||
buildGroups();
|
buildGroups();
|
||||||
}).pad(2).margin(12f).fillX();
|
}).pad(2).margin(12f).fillX();
|
||||||
if(++i % 3 == 0) dialog.cont.row();
|
if(++i % 3 == 0) p.row();
|
||||||
}
|
}
|
||||||
|
});
|
||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -34,39 +34,36 @@ public interface BuilderTrait extends Entity, TeamTrait{
|
|||||||
default void updateBuilding(){
|
default void updateBuilding(){
|
||||||
float finalPlaceDst = state.rules.infiniteResources ? Float.MAX_VALUE : placeDistance;
|
float finalPlaceDst = state.rules.infiniteResources ? Float.MAX_VALUE : placeDistance;
|
||||||
Unit unit = (Unit)this;
|
Unit unit = (Unit)this;
|
||||||
|
|
||||||
//remove already completed build requests
|
//remove already completed build requests
|
||||||
removal.clear();
|
removal.clear();
|
||||||
for(BuildRequest req : buildQueue()){
|
removal.addAll(buildQueue());
|
||||||
removal.add(req);
|
|
||||||
}
|
|
||||||
|
|
||||||
buildQueue().clear();
|
Structs.filter(buildQueue(), req -> {
|
||||||
|
Tile tile = world.tile(req.x, req.y);
|
||||||
|
return tile == null || (req.breaking && tile.block() == Blocks.air) || (!req.breaking && (tile.rotation() == req.rotation || !req.block.rotate) && tile.block() == req.block);
|
||||||
|
});
|
||||||
|
|
||||||
for(BuildRequest request : removal){
|
TileEntity core = unit.getClosestCore();
|
||||||
Tile tile = world.tile(request.x, request.y);
|
|
||||||
|
|
||||||
if(!(tile == null || (request.breaking && tile.block() == Blocks.air) ||
|
//nothing to build.
|
||||||
(!request.breaking && (tile.rotation() == request.rotation || !request.block.rotate) && tile.block() == request.block))){
|
if(buildRequest() == null) return;
|
||||||
buildQueue().addLast(request);
|
|
||||||
|
//find the next build request
|
||||||
|
if(buildQueue().size > 1){
|
||||||
|
int total = 0;
|
||||||
|
BuildRequest req;
|
||||||
|
while((dst((req = buildRequest()).tile()) > finalPlaceDst || shouldSkip(req, core)) && total < buildQueue().size){
|
||||||
|
buildQueue().removeFirst();
|
||||||
|
buildQueue().addLast(req);
|
||||||
|
total++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
BuildRequest current = buildRequest();
|
BuildRequest current = buildRequest();
|
||||||
|
|
||||||
if(current == null){
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
Tile tile = world.tile(current.x, current.y);
|
Tile tile = world.tile(current.x, current.y);
|
||||||
|
|
||||||
if(dst(tile) > finalPlaceDst){
|
|
||||||
if(buildQueue().size > 1){
|
|
||||||
buildQueue().removeFirst();
|
|
||||||
buildQueue().addLast(current);
|
|
||||||
}
|
|
||||||
return;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!(tile.block() instanceof BuildBlock)){
|
if(!(tile.block() instanceof BuildBlock)){
|
||||||
if(!current.initialized && canCreateBlocks() && !current.breaking && Build.validPlace(getTeam(), current.x, current.y, current.block, current.rotation)){
|
if(!current.initialized && canCreateBlocks() && !current.breaking && Build.validPlace(getTeam(), current.x, current.y, current.block, current.rotation)){
|
||||||
Call.beginPlace(getTeam(), current.x, current.y, current.block, current.rotation);
|
Call.beginPlace(getTeam(), current.x, current.y, current.block, current.rotation);
|
||||||
@@ -78,8 +75,6 @@ public interface BuilderTrait extends Entity, TeamTrait{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
TileEntity core = unit.getClosestCore();
|
|
||||||
|
|
||||||
if(tile.entity instanceof BuildEntity && !current.initialized){
|
if(tile.entity instanceof BuildEntity && !current.initialized){
|
||||||
Core.app.post(() -> Events.fire(new BuildSelectEvent(tile, unit.getTeam(), this, current.breaking)));
|
Core.app.post(() -> Events.fire(new BuildSelectEvent(tile, unit.getTeam(), this, current.breaking)));
|
||||||
current.initialized = true;
|
current.initialized = true;
|
||||||
@@ -111,9 +106,17 @@ public interface BuilderTrait extends Entity, TeamTrait{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
current.stuck = Mathf.equal(current.progress, entity.progress);
|
||||||
current.progress = entity.progress;
|
current.progress = entity.progress;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** @return whether this request should be skipped, in favor of the next one. */
|
||||||
|
default boolean shouldSkip(BuildRequest request, @Nullable TileEntity core){
|
||||||
|
//requests that you have at least *started* are considered
|
||||||
|
if(state.rules.infiniteResources || request.breaking || !request.initialized || core == null) return false;
|
||||||
|
return request.stuck && !core.items.has(request.block.requirements);
|
||||||
|
}
|
||||||
|
|
||||||
/** Returns the queue for storing build requests. */
|
/** Returns the queue for storing build requests. */
|
||||||
Queue<BuildRequest> buildQueue();
|
Queue<BuildRequest> buildQueue();
|
||||||
|
|
||||||
@@ -287,8 +290,8 @@ public interface BuilderTrait extends Entity, TeamTrait{
|
|||||||
|
|
||||||
/** Last progress.*/
|
/** Last progress.*/
|
||||||
public float progress;
|
public float progress;
|
||||||
/** Whether construction has started for this request.*/
|
/** Whether construction has started for this request, and other special variables.*/
|
||||||
public boolean initialized, worldContext = true;
|
public boolean initialized, worldContext = true, stuck;
|
||||||
|
|
||||||
/** Visual scale. Used only for rendering.*/
|
/** Visual scale. Used only for rendering.*/
|
||||||
public float animScale = 0f;
|
public float animScale = 0f;
|
||||||
|
|||||||
@@ -592,6 +592,11 @@ public class Player extends Unit implements BuilderMinerTrait, ShooterTrait{
|
|||||||
movement.x += xa * speed;
|
movement.x += xa * speed;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
if(Core.input.keyDown(Binding.mouse_move)){
|
||||||
|
movement.x += Mathf.clamp((Core.input.mouseX() - Core.graphics.getWidth() / 2) * 0.005f, -1, 1) * speed;
|
||||||
|
movement.y += Mathf.clamp((Core.input.mouseY() - Core.graphics.getHeight() / 2) * 0.005f, -1, 1) * speed;
|
||||||
|
}
|
||||||
|
|
||||||
Vector2 vec = Core.input.mouseWorld(control.input.getMouseX(), control.input.getMouseY());
|
Vector2 vec = Core.input.mouseWorld(control.input.getMouseX(), control.input.getMouseY());
|
||||||
pointerX = vec.x;
|
pointerX = vec.x;
|
||||||
pointerY = vec.y;
|
pointerY = vec.y;
|
||||||
|
|||||||
@@ -87,6 +87,11 @@ public class TileEntity extends BaseEntity implements TargetTrait, HealthTrait{
|
|||||||
return Time.delta() * timeScale;
|
return Time.delta() * timeScale;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Base efficiency. If this entity has non-buffered power, returns the power %, otherwise returns 1. */
|
||||||
|
public float efficiency(){
|
||||||
|
return power != null && !block.consumes.getPower().buffered ? power.status : 1f;
|
||||||
|
}
|
||||||
|
|
||||||
/** Call when nothing is happening to the entity. This increments the internal sleep timer. */
|
/** Call when nothing is happening to the entity. This increments the internal sleep timer. */
|
||||||
public void sleep(){
|
public void sleep(){
|
||||||
sleepTime += Time.delta();
|
sleepTime += Time.delta();
|
||||||
|
|||||||
@@ -27,7 +27,8 @@ public class EventType{
|
|||||||
drown,
|
drown,
|
||||||
exclusionDeath,
|
exclusionDeath,
|
||||||
suicideBomb,
|
suicideBomb,
|
||||||
openWiki
|
openWiki,
|
||||||
|
teamCoreDamage
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class WinEvent{}
|
public static class WinEvent{}
|
||||||
|
|||||||
@@ -30,7 +30,7 @@ public class LoopControl{
|
|||||||
data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.2f);
|
data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.2f);
|
||||||
|
|
||||||
boolean play = data.curVolume > 0.01f;
|
boolean play = data.curVolume > 0.01f;
|
||||||
float pan = Mathf.isZero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total);
|
float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total);
|
||||||
if(data.soundID <= 0){
|
if(data.soundID <= 0){
|
||||||
if(play){
|
if(play){
|
||||||
data.soundID = sound.loop(data.curVolume, 1f, pan);
|
data.soundID = sound.loop(data.curVolume, 1f, pan);
|
||||||
|
|||||||
@@ -25,6 +25,8 @@ public class Rules{
|
|||||||
public boolean pvp;
|
public boolean pvp;
|
||||||
/** Whether enemy units drop random items on death. */
|
/** Whether enemy units drop random items on death. */
|
||||||
public boolean unitDrops = true;
|
public boolean unitDrops = true;
|
||||||
|
/** Whether reactors can explode and damage other blocks. */
|
||||||
|
public boolean reactorExplosions = true;
|
||||||
/** How fast unit pads build units. */
|
/** How fast unit pads build units. */
|
||||||
public float unitBuildSpeedMultiplier = 1f;
|
public float unitBuildSpeedMultiplier = 1f;
|
||||||
/** How much health units start with. */
|
/** How much health units start with. */
|
||||||
|
|||||||
@@ -20,15 +20,19 @@ public class LightRenderer{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public void add(float x, float y, float radius, Color color, float opacity){
|
public void add(float x, float y, float radius, Color color, float opacity){
|
||||||
|
float res = color.toFloatBits();
|
||||||
add(() -> {
|
add(() -> {
|
||||||
Draw.color(color, opacity);
|
Draw.color(res);
|
||||||
|
Draw.alpha(opacity);
|
||||||
Draw.rect("circle-shadow", x, y, radius * 2, radius * 2);
|
Draw.rect("circle-shadow", x, y, radius * 2, radius * 2);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|
||||||
public void add(float x, float y, TextureRegion region, Color color, float opacity){
|
public void add(float x, float y, TextureRegion region, Color color, float opacity){
|
||||||
|
float res = color.toFloatBits();
|
||||||
add(() -> {
|
add(() -> {
|
||||||
Draw.color(color, opacity);
|
Draw.color(res);
|
||||||
|
Draw.alpha(opacity);
|
||||||
Draw.rect(region, x, y);
|
Draw.rect(region, x, y);
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -67,7 +67,7 @@ public class OverlayRenderer{
|
|||||||
if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f)
|
if(!rect.setSize(Core.camera.width * 0.9f, Core.camera.height * 0.9f)
|
||||||
.setCenter(Core.camera.position.x, Core.camera.position.y).contains(mechpad.x, mechpad.y)){
|
.setCenter(Core.camera.position.x, Core.camera.position.y).contains(mechpad.x, mechpad.y)){
|
||||||
|
|
||||||
Tmp.v1.set(mechpad.worldx(), mechpad.worldy()).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength);
|
Tmp.v1.set(mechpad.drawx(), mechpad.drawy()).sub(Core.camera.position.x, Core.camera.position.y).setLength(indicatorLength);
|
||||||
|
|
||||||
Lines.stroke(2f, ((MechPad) mechpad.block()).mech.engineColor);
|
Lines.stroke(2f, ((MechPad) mechpad.block()).mech.engineColor);
|
||||||
Lines.lineAngle(Core.camera.position.x + Tmp.v1.x, Core.camera.position.y + Tmp.v1.y, Tmp.v1.angle(), 0.5f);
|
Lines.lineAngle(Core.camera.position.x + Tmp.v1.x, Core.camera.position.y + Tmp.v1.y, Tmp.v1.angle(), 0.5f);
|
||||||
|
|||||||
@@ -9,6 +9,8 @@ import io.anuke.arc.input.KeyCode;
|
|||||||
public enum Binding implements KeyBind{
|
public enum Binding implements KeyBind{
|
||||||
move_x(new Axis(KeyCode.A, KeyCode.D), "general"),
|
move_x(new Axis(KeyCode.A, KeyCode.D), "general"),
|
||||||
move_y(new Axis(KeyCode.S, KeyCode.W)),
|
move_y(new Axis(KeyCode.S, KeyCode.W)),
|
||||||
|
mouse_move(KeyCode.MOUSE_BACK),
|
||||||
|
dash(KeyCode.SHIFT_LEFT),
|
||||||
select(KeyCode.MOUSE_LEFT),
|
select(KeyCode.MOUSE_LEFT),
|
||||||
deselect(KeyCode.MOUSE_RIGHT),
|
deselect(KeyCode.MOUSE_RIGHT),
|
||||||
break_block(KeyCode.MOUSE_RIGHT),
|
break_block(KeyCode.MOUSE_RIGHT),
|
||||||
@@ -22,7 +24,6 @@ public enum Binding implements KeyBind{
|
|||||||
schematic_flip_x(KeyCode.Z),
|
schematic_flip_x(KeyCode.Z),
|
||||||
schematic_flip_y(KeyCode.X),
|
schematic_flip_y(KeyCode.X),
|
||||||
schematic_menu(KeyCode.T),
|
schematic_menu(KeyCode.T),
|
||||||
dash(KeyCode.SHIFT_LEFT),
|
|
||||||
zoom_hold(KeyCode.CONTROL_LEFT, "view"),
|
zoom_hold(KeyCode.CONTROL_LEFT, "view"),
|
||||||
zoom(new Axis(KeyCode.SCROLL)),
|
zoom(new Axis(KeyCode.SCROLL)),
|
||||||
menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE),
|
menu(Core.app.getType() == ApplicationType.Android ? KeyCode.BACK : KeyCode.ESCAPE),
|
||||||
|
|||||||
@@ -50,9 +50,9 @@ public class DesktopInput extends InputHandler{
|
|||||||
b.defaults().left();
|
b.defaults().left();
|
||||||
b.label(() -> Core.bundle.format(!player.isBuilding ? "resumebuilding" : "pausebuilding", Core.keybinds.get(Binding.pause_building).key.toString())).style(Styles.outlineLabel);
|
b.label(() -> Core.bundle.format(!player.isBuilding ? "resumebuilding" : "pausebuilding", Core.keybinds.get(Binding.pause_building).key.toString())).style(Styles.outlineLabel);
|
||||||
b.row();
|
b.row();
|
||||||
b.add(Core.bundle.format("cancelbuilding", Core.keybinds.get(Binding.clear_building).key.toString())).style(Styles.outlineLabel);
|
b.label(() -> Core.bundle.format("cancelbuilding", Core.keybinds.get(Binding.clear_building).key.toString())).style(Styles.outlineLabel);
|
||||||
b.row();
|
b.row();
|
||||||
b.add(Core.bundle.format("selectschematic", Core.keybinds.get(Binding.schematic_select).key.toString())).style(Styles.outlineLabel);
|
b.label(() -> Core.bundle.format("selectschematic", Core.keybinds.get(Binding.schematic_select).key.toString())).style(Styles.outlineLabel);
|
||||||
}).margin(10f);
|
}).margin(10f);
|
||||||
});
|
});
|
||||||
|
|
||||||
@@ -61,7 +61,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
t.bottom();
|
t.bottom();
|
||||||
t.table(Styles.black6, b -> {
|
t.table(Styles.black6, b -> {
|
||||||
b.defaults().left();
|
b.defaults().left();
|
||||||
b.add(Core.bundle.format("schematic.flip",
|
b.label( () -> Core.bundle.format("schematic.flip",
|
||||||
Core.keybinds.get(Binding.schematic_flip_x).key.toString(),
|
Core.keybinds.get(Binding.schematic_flip_x).key.toString(),
|
||||||
Core.keybinds.get(Binding.schematic_flip_y).key.toString())).style(Styles.outlineLabel);
|
Core.keybinds.get(Binding.schematic_flip_y).key.toString())).style(Styles.outlineLabel);
|
||||||
b.row();
|
b.row();
|
||||||
|
|||||||
@@ -4,7 +4,7 @@ import io.anuke.arc.util.serialization.*;
|
|||||||
import io.anuke.arc.util.serialization.Json.*;
|
import io.anuke.arc.util.serialization.Json.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.ctype.MappableContent;
|
import io.anuke.mindustry.ctype.*;
|
||||||
import io.anuke.mindustry.game.*;
|
import io.anuke.mindustry.game.*;
|
||||||
import io.anuke.mindustry.type.*;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
@@ -31,6 +31,10 @@ public class JsonIO{
|
|||||||
}
|
}
|
||||||
};
|
};
|
||||||
|
|
||||||
|
public static Json json(){
|
||||||
|
return json;
|
||||||
|
}
|
||||||
|
|
||||||
public static String write(Object object){
|
public static String write(Object object){
|
||||||
return json.toJson(object, object.getClass());
|
return json.toJson(object, object.getClass());
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -10,10 +10,9 @@ import io.anuke.arc.func.*;
|
|||||||
import io.anuke.arc.graphics.*;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.util.ArcAnnotate.*;
|
import io.anuke.arc.util.ArcAnnotate.*;
|
||||||
import io.anuke.arc.util.*;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.arc.util.reflect.Field;
|
|
||||||
import io.anuke.arc.util.reflect.*;
|
|
||||||
import io.anuke.arc.util.serialization.*;
|
import io.anuke.arc.util.serialization.*;
|
||||||
import io.anuke.arc.util.serialization.Json.*;
|
import io.anuke.arc.util.serialization.Json.*;
|
||||||
|
import io.anuke.arc.util.serialization.Jval.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.content.*;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.content.TechTree.*;
|
import io.anuke.mindustry.content.TechTree.*;
|
||||||
@@ -182,7 +181,7 @@ public class ContentParser{
|
|||||||
}else if(child.name.equals("liquid")){
|
}else if(child.name.equals("liquid")){
|
||||||
block.consumes.add((Consume)parser.readValue(ConsumeLiquid.class, child));
|
block.consumes.add((Consume)parser.readValue(ConsumeLiquid.class, child));
|
||||||
}else if(child.name.equals("power")){
|
}else if(child.name.equals("power")){
|
||||||
if(child.isDouble()){
|
if(child.isNumber()){
|
||||||
block.consumes.power(child.asFloat());
|
block.consumes.power(child.asFloat());
|
||||||
}else{
|
}else{
|
||||||
block.consumes.add((Consume)parser.readValue(ConsumePower.class, child));
|
block.consumes.add((Consume)parser.readValue(ConsumePower.class, child));
|
||||||
@@ -342,10 +341,7 @@ public class ContentParser{
|
|||||||
init();
|
init();
|
||||||
}
|
}
|
||||||
|
|
||||||
//add comments starting with //, but ignore links
|
JsonValue value = parser.fromJson(null, Jval.read(json).toString(Jformat.plain));
|
||||||
json = json.replace("http://", "http:~~").replace("https://", "https:~~").replaceAll("//.*?\n","\n").replace("http:~~", "http://").replace("https:~~", "https://");
|
|
||||||
|
|
||||||
JsonValue value = parser.fromJson(null, json);
|
|
||||||
if(!parsers.containsKey(type)){
|
if(!parsers.containsKey(type)){
|
||||||
throw new SerializationException("No parsers for content type '" + type + "'");
|
throw new SerializationException("No parsers for content type '" + type + "'");
|
||||||
}
|
}
|
||||||
@@ -363,7 +359,7 @@ public class ContentParser{
|
|||||||
|
|
||||||
private <T> T make(Class<T> type){
|
private <T> T make(Class<T> type){
|
||||||
try{
|
try{
|
||||||
java.lang.reflect.Constructor<T> cons = type.getDeclaredConstructor();
|
Constructor<T> cons = type.getDeclaredConstructor();
|
||||||
cons.setAccessible(true);
|
cons.setAccessible(true);
|
||||||
return cons.newInstance();
|
return cons.newInstance();
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
@@ -373,7 +369,7 @@ public class ContentParser{
|
|||||||
|
|
||||||
private <T> T make(Class<T> type, String name){
|
private <T> T make(Class<T> type, String name){
|
||||||
try{
|
try{
|
||||||
java.lang.reflect.Constructor<T> cons = type.getDeclaredConstructor(String.class);
|
Constructor<T> cons = type.getDeclaredConstructor(String.class);
|
||||||
cons.setAccessible(true);
|
cons.setAccessible(true);
|
||||||
return cons.newInstance(name);
|
return cons.newInstance(name);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
@@ -383,7 +379,7 @@ public class ContentParser{
|
|||||||
|
|
||||||
private <T> Prov<T> supply(Class<T> type){
|
private <T> Prov<T> supply(Class<T> type){
|
||||||
try{
|
try{
|
||||||
java.lang.reflect.Constructor<T> cons = type.getDeclaredConstructor();
|
Constructor<T> cons = type.getDeclaredConstructor();
|
||||||
return () -> {
|
return () -> {
|
||||||
try{
|
try{
|
||||||
return cons.newInstance();
|
return cons.newInstance();
|
||||||
@@ -459,7 +455,7 @@ public class ContentParser{
|
|||||||
Field field = metadata.field;
|
Field field = metadata.field;
|
||||||
try{
|
try{
|
||||||
field.set(object, parser.readValue(field.getType(), metadata.elementType, child, metadata.keyType));
|
field.set(object, parser.readValue(field.getType(), metadata.elementType, child, metadata.keyType));
|
||||||
}catch(ReflectionException ex){
|
}catch(IllegalAccessException ex){
|
||||||
throw new SerializationException("Error accessing field: " + field.getName() + " (" + type.getName() + ")", ex);
|
throw new SerializationException("Error accessing field: " + field.getName() + " (" + type.getName() + ")", ex);
|
||||||
}catch(SerializationException ex){
|
}catch(SerializationException ex){
|
||||||
ex.addTrace(field.getName() + " (" + type.getName() + ")");
|
ex.addTrace(field.getName() + " (" + type.getName() + ")");
|
||||||
|
|||||||
@@ -354,7 +354,7 @@ public class Mods implements Loadable{
|
|||||||
FileHandle folder = contentRoot.child(type.name().toLowerCase() + "s");
|
FileHandle folder = contentRoot.child(type.name().toLowerCase() + "s");
|
||||||
if(folder.exists()){
|
if(folder.exists()){
|
||||||
for(FileHandle file : folder.list()){
|
for(FileHandle file : folder.list()){
|
||||||
if(file.extension().equals("json")){
|
if(file.extension().equals("json") || file.extension().equals("hjson") || file.extension().equals("js")){
|
||||||
runs.add(new LoadRun(type, file, mod));
|
runs.add(new LoadRun(type, file, mod));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -63,7 +63,7 @@ public class Bar extends Element{
|
|||||||
if(fraction == null) return;
|
if(fraction == null) return;
|
||||||
|
|
||||||
float computed = Mathf.clamp(fraction.get());
|
float computed = Mathf.clamp(fraction.get());
|
||||||
if(!Mathf.isEqual(lastValue, computed)){
|
if(!Mathf.equal(lastValue, computed)){
|
||||||
blink = 1f;
|
blink = 1f;
|
||||||
lastValue = computed;
|
lastValue = computed;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -135,13 +135,11 @@ public class CustomRulesDialog extends FloatingDialog{
|
|||||||
number("$rules.dropzoneradius", false, f -> rules.dropZoneRadius = f * tilesize, () -> rules.dropZoneRadius / tilesize, () -> true);
|
number("$rules.dropzoneradius", false, f -> rules.dropZoneRadius = f * tilesize, () -> rules.dropZoneRadius / tilesize, () -> true);
|
||||||
|
|
||||||
title("$rules.title.respawns");
|
title("$rules.title.respawns");
|
||||||
//limited respawns don't work on PvP, commented out until they're fixed
|
|
||||||
//check("$rules.limitedRespawns", b -> rules.limitedRespawns = b, () -> rules.limitedRespawns);
|
|
||||||
//number("$rules.respawns", true, f -> rules.respawns = (int)f, () -> rules.respawns, () -> rules.limitedRespawns);
|
|
||||||
number("$rules.respawntime", f -> rules.respawnTime = f * 60f, () -> rules.respawnTime / 60f);
|
number("$rules.respawntime", f -> rules.respawnTime = f * 60f, () -> rules.respawnTime / 60f);
|
||||||
|
|
||||||
title("$rules.title.resourcesbuilding");
|
title("$rules.title.resourcesbuilding");
|
||||||
check("$rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources);
|
check("$rules.infiniteresources", b -> rules.infiniteResources = b, () -> rules.infiniteResources);
|
||||||
|
check("$rules.reactorexplosions", b -> rules.reactorExplosions = b, () -> rules.reactorExplosions);
|
||||||
number("$rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources);
|
number("$rules.buildcostmultiplier", false, f -> rules.buildCostMultiplier = f, () -> rules.buildCostMultiplier, () -> !rules.infiniteResources);
|
||||||
number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier);
|
number("$rules.buildspeedmultiplier", f -> rules.buildSpeedMultiplier = f, () -> rules.buildSpeedMultiplier);
|
||||||
|
|
||||||
|
|||||||
@@ -32,14 +32,14 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
|
|
||||||
loadServers();
|
loadServers();
|
||||||
|
|
||||||
buttons.add().width(60f);
|
if(!steam) buttons.add().width(60f);
|
||||||
buttons.add().growX();
|
buttons.add().growX().width(-1);
|
||||||
|
|
||||||
addCloseButton();
|
addCloseButton();
|
||||||
|
|
||||||
buttons.add().growX();
|
buttons.add().growX().width(-1);
|
||||||
if(!steam){
|
if(!steam){
|
||||||
buttons.addButton("?", () -> ui.showInfo("$join.info")).size(60f, 64f);
|
buttons.addButton("?", () -> ui.showInfo("$join.info")).size(60f, 64f).width(-1);
|
||||||
}
|
}
|
||||||
|
|
||||||
add = new FloatingDialog("$joingame.title");
|
add = new FloatingDialog("$joingame.title");
|
||||||
@@ -271,7 +271,7 @@ public class JoinDialog extends FloatingDialog{
|
|||||||
|
|
||||||
Cell cell = ((Table)pane.getParent()).getCell(button);
|
Cell cell = ((Table)pane.getParent()).getCell(button);
|
||||||
|
|
||||||
if(!Mathf.isEqual(cell.minWidth(), pw)){
|
if(!Mathf.equal(cell.minWidth(), pw)){
|
||||||
cell.width(pw);
|
cell.width(pw);
|
||||||
cell.padLeft(pad);
|
cell.padLeft(pad);
|
||||||
pane.getParent().invalidateHierarchy();
|
pane.getParent().invalidateHierarchy();
|
||||||
|
|||||||
@@ -218,7 +218,7 @@ public class SettingsMenuDialog extends SettingsDialog{
|
|||||||
control.setInput(new MobileInput());
|
control.setInput(new MobileInput());
|
||||||
}
|
}
|
||||||
}*/
|
}*/
|
||||||
game.sliderPref("saveinterval", 60, 10, 5 * 120, i -> Core.bundle.format("setting.seconds", i));
|
game.sliderPref("saveinterval", 60, 10, 5 * 120, 10, i -> Core.bundle.format("setting.seconds", i));
|
||||||
|
|
||||||
if(!mobile){
|
if(!mobile){
|
||||||
game.checkPref("crashreport", true);
|
game.checkPref("crashreport", true);
|
||||||
@@ -360,8 +360,12 @@ public class SettingsMenuDialog extends SettingsDialog{
|
|||||||
|
|
||||||
keyDown(key -> {
|
keyDown(key -> {
|
||||||
if(key == KeyCode.ESCAPE || key == KeyCode.BACK){
|
if(key == KeyCode.ESCAPE || key == KeyCode.BACK){
|
||||||
|
if(prefs.getChildren().first() != menu){
|
||||||
|
back();
|
||||||
|
}else{
|
||||||
hide();
|
hide();
|
||||||
}
|
}
|
||||||
|
}
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -42,10 +42,6 @@ public class HudFragment extends Fragment{
|
|||||||
private boolean shown = true;
|
private boolean shown = true;
|
||||||
private float dsize = 47.2f;
|
private float dsize = 47.2f;
|
||||||
|
|
||||||
private float coreAttackTime;
|
|
||||||
private float lastCoreHP;
|
|
||||||
private Team lastTeam;
|
|
||||||
private float coreAttackOpacity = 0f;
|
|
||||||
private long lastToast;
|
private long lastToast;
|
||||||
|
|
||||||
public void build(Group parent){
|
public void build(Group parent){
|
||||||
@@ -284,44 +280,29 @@ public class HudFragment extends Fragment{
|
|||||||
parent.fill(t -> {
|
parent.fill(t -> {
|
||||||
t.touchable(Touchable.disabled);
|
t.touchable(Touchable.disabled);
|
||||||
float notifDuration = 240f;
|
float notifDuration = 240f;
|
||||||
|
float[] coreAttackTime = {0};
|
||||||
|
float[] coreAttackOpacity = {0};
|
||||||
|
|
||||||
Events.on(StateChangeEvent.class, event -> {
|
Events.on(Trigger.teamCoreDamage, () -> {
|
||||||
if(event.to == State.menu || event.from == State.menu){
|
coreAttackTime[0] = notifDuration;
|
||||||
coreAttackTime = 0f;
|
|
||||||
lastCoreHP = Float.NaN;
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
t.top().visible(() -> {
|
t.top().visible(() -> {
|
||||||
if(state.is(State.menu) || state.teams.get(player.getTeam()).cores.size == 0 || state.teams.get(player.getTeam()).cores.first().entity == null){
|
if(state.is(State.menu) || state.teams.get(player.getTeam()).cores.size == 0 || state.teams.get(player.getTeam()).cores.first().entity == null){
|
||||||
coreAttackTime = 0f;
|
coreAttackTime[0] = 0f;
|
||||||
return false;
|
return false;
|
||||||
}
|
}
|
||||||
|
|
||||||
float curr = state.teams.get(player.getTeam()).cores.first().entity.health;
|
t.getColor().a = coreAttackOpacity[0];
|
||||||
|
if(coreAttackTime[0] > 0){
|
||||||
if(lastTeam != player.getTeam()){
|
coreAttackOpacity[0] = Mathf.lerpDelta(coreAttackOpacity[0], 1f, 0.1f);
|
||||||
lastCoreHP = curr;
|
|
||||||
lastTeam = player.getTeam();
|
|
||||||
return false;
|
|
||||||
}
|
|
||||||
|
|
||||||
if(!Float.isNaN(lastCoreHP) && curr < lastCoreHP){
|
|
||||||
coreAttackTime = notifDuration;
|
|
||||||
}
|
|
||||||
lastCoreHP = curr;
|
|
||||||
|
|
||||||
t.getColor().a = coreAttackOpacity;
|
|
||||||
if(coreAttackTime > 0){
|
|
||||||
coreAttackOpacity = Mathf.lerpDelta(coreAttackOpacity, 1f, 0.1f);
|
|
||||||
}else{
|
}else{
|
||||||
coreAttackOpacity = Mathf.lerpDelta(coreAttackOpacity, 0f, 0.1f);
|
coreAttackOpacity[0] = Mathf.lerpDelta(coreAttackOpacity[0], 0f, 0.1f);
|
||||||
}
|
}
|
||||||
|
|
||||||
coreAttackTime -= Time.delta();
|
coreAttackTime[0] -= Time.delta();
|
||||||
lastTeam = player.getTeam();
|
|
||||||
|
|
||||||
return coreAttackOpacity > 0;
|
return coreAttackOpacity[0] > 0;
|
||||||
});
|
});
|
||||||
t.table(Tex.button, top -> top.add("$coreattack").pad(2)
|
t.table(Tex.button, top -> top.add("$coreattack").pad(2)
|
||||||
.update(label -> label.getColor().set(Color.orange).lerp(Color.scarlet, Mathf.absin(Time.time(), 2f, 1f)))).touchable(Touchable.disabled);
|
.update(label -> label.getColor().set(Color.orange).lerp(Color.scarlet, Mathf.absin(Time.time(), 2f, 1f)))).touchable(Touchable.disabled);
|
||||||
|
|||||||
@@ -207,7 +207,8 @@ public class Block extends BlockStorage{
|
|||||||
if(tile == null || tile.entity == null || tile.entity.power == null) return out;
|
if(tile == null || tile.entity == null || tile.entity.power == null) return out;
|
||||||
|
|
||||||
for(Tile other : tile.entity.proximity()){
|
for(Tile other : tile.entity.proximity()){
|
||||||
if(other != null && other.entity != null && other.entity.power != null && !(consumesPower && other.block().consumesPower && !outputsPower && !other.block().outputsPower)
|
if(other != null && other.entity != null && other.entity.power != null
|
||||||
|
&& !(consumesPower && other.block().consumesPower && !outputsPower && !other.block().outputsPower)
|
||||||
&& !tile.entity.power.links.contains(other.pos())){
|
&& !tile.entity.power.links.contains(other.pos())){
|
||||||
out.add(other);
|
out.add(other);
|
||||||
}
|
}
|
||||||
@@ -221,11 +222,7 @@ public class Block extends BlockStorage{
|
|||||||
}
|
}
|
||||||
|
|
||||||
protected float getProgressIncrease(TileEntity entity, float baseTime){
|
protected float getProgressIncrease(TileEntity entity, float baseTime){
|
||||||
float progressIncrease = 1f / baseTime * entity.delta();
|
return 1f / baseTime * entity.delta() * entity.efficiency();
|
||||||
if(hasPower){
|
|
||||||
progressIncrease *= entity.power.satisfaction; // Reduced increase in case of low power
|
|
||||||
}
|
|
||||||
return progressIncrease;
|
|
||||||
}
|
}
|
||||||
|
|
||||||
/** @return whether this block should play its active sound.*/
|
/** @return whether this block should play its active sound.*/
|
||||||
@@ -370,6 +367,16 @@ public class Block extends BlockStorage{
|
|||||||
return sum;
|
return sum;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float percentSolid(int x, int y){
|
||||||
|
Tile tile = world.tile(x, y);
|
||||||
|
if(tile == null) return 0;
|
||||||
|
float sum = 0;
|
||||||
|
for(Tile other : tile.getLinkedTilesAs(this, tempTiles)){
|
||||||
|
sum += !other.floor.isLiquid ? 1f : 0f;
|
||||||
|
}
|
||||||
|
return sum / size / size;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public String localizedName(){
|
public String localizedName(){
|
||||||
return localizedName;
|
return localizedName;
|
||||||
@@ -536,8 +543,8 @@ public class Block extends BlockStorage{
|
|||||||
boolean buffered = cons.buffered;
|
boolean buffered = cons.buffered;
|
||||||
float capacity = cons.capacity;
|
float capacity = cons.capacity;
|
||||||
|
|
||||||
bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("bar.poweramount", Float.isNaN(entity.power.satisfaction * capacity) ? "<ERROR>" : (int)(entity.power.satisfaction * capacity)) :
|
bars.add("power", entity -> new Bar(() -> buffered ? Core.bundle.format("bar.poweramount", Float.isNaN(entity.power.status * capacity) ? "<ERROR>" : (int)(entity.power.status * capacity)) :
|
||||||
Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> Mathf.isZero(cons.requestedPower(entity)) && entity.power.graph.getPowerProduced() + entity.power.graph.getBatteryStored() > 0f ? 1f : entity.power.satisfaction));
|
Core.bundle.get("bar.power"), () -> Pal.powerBar, () -> Mathf.zero(cons.requestedPower(entity)) && entity.power.graph.getPowerProduced() + entity.power.graph.getBatteryStored() > 0f ? 1f : entity.power.status));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasItems && configurable){
|
if(hasItems && configurable){
|
||||||
@@ -598,7 +605,7 @@ public class Block extends BlockStorage{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(consumes.hasPower() && consumes.getPower().buffered){
|
if(consumes.hasPower() && consumes.getPower().buffered){
|
||||||
power += tile.entity.power.satisfaction * consumes.getPower().capacity;
|
power += tile.entity.power.status * consumes.getPower().capacity;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasLiquids){
|
if(hasLiquids){
|
||||||
|
|||||||
@@ -28,6 +28,7 @@ public abstract class BlockStorage extends UnlockableContent{
|
|||||||
|
|
||||||
public int itemCapacity = 10;
|
public int itemCapacity = 10;
|
||||||
public float liquidCapacity = 10f;
|
public float liquidCapacity = 10f;
|
||||||
|
public float liquidPressure = 1f;
|
||||||
|
|
||||||
public final BlockStats stats = new BlockStats();
|
public final BlockStats stats = new BlockStats();
|
||||||
public final BlockBars bars = new BlockBars();
|
public final BlockBars bars = new BlockBars();
|
||||||
@@ -150,7 +151,7 @@ public abstract class BlockStorage extends UnlockableContent{
|
|||||||
|
|
||||||
if(next.block().acceptLiquid(next, tile, liquid, 0f)){
|
if(next.block().acceptLiquid(next, tile, liquid, 0f)){
|
||||||
float ofract = next.entity.liquids.get(liquid) / next.block().liquidCapacity;
|
float ofract = next.entity.liquids.get(liquid) / next.block().liquidCapacity;
|
||||||
float fract = tile.entity.liquids.get(liquid) / liquidCapacity;
|
float fract = tile.entity.liquids.get(liquid) / liquidCapacity * liquidPressure;
|
||||||
float flow = Math.min(Mathf.clamp((fract - ofract) * (1f)) * (liquidCapacity), tile.entity.liquids.get(liquid));
|
float flow = Math.min(Mathf.clamp((fract - ofract) * (1f)) * (liquidCapacity), tile.entity.liquids.get(liquid));
|
||||||
flow = Math.min(flow, next.block().liquidCapacity - next.entity.liquids.get(liquid) - 0.001f);
|
flow = Math.min(flow, next.block().liquidCapacity - next.entity.liquids.get(liquid) - 0.001f);
|
||||||
|
|
||||||
|
|||||||
@@ -318,6 +318,31 @@ public class Tile implements Position, TargetTrait{
|
|||||||
return null;
|
return null;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public Tile getNearbyLink(int rotation){
|
||||||
|
if(rotation == 0) return world.ltile(x + 1, y);
|
||||||
|
if(rotation == 1) return world.ltile(x, y + 1);
|
||||||
|
if(rotation == 2) return world.ltile(x - 1, y);
|
||||||
|
if(rotation == 3) return world.ltile(x, y - 1);
|
||||||
|
return null;
|
||||||
|
}
|
||||||
|
|
||||||
|
// ▲ ▲ ▼ ▼ ◀ ▶ ◀ ▶ B A
|
||||||
|
public Tile front(){
|
||||||
|
return getNearbyLink((rotation + 4) % 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Tile right(){
|
||||||
|
return getNearbyLink((rotation + 3) % 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Tile back(){
|
||||||
|
return getNearbyLink((rotation + 2) % 4);
|
||||||
|
}
|
||||||
|
|
||||||
|
public Tile left(){
|
||||||
|
return getNearbyLink((rotation + 1) % 4);
|
||||||
|
}
|
||||||
|
|
||||||
public boolean interactable(Team team){
|
public boolean interactable(Team team){
|
||||||
return getTeam() == Team.derelict || team == getTeam();
|
return getTeam() == Team.derelict || team == getTeam();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -108,12 +108,12 @@ public class ForceProjector extends Block{
|
|||||||
Effects.effect(Fx.reactorsmoke, tile.drawx() + Mathf.range(tilesize / 2f), tile.drawy() + Mathf.range(tilesize / 2f));
|
Effects.effect(Fx.reactorsmoke, tile.drawx() + Mathf.range(tilesize / 2f), tile.drawy() + Mathf.range(tilesize / 2f));
|
||||||
}
|
}
|
||||||
|
|
||||||
entity.warmup = Mathf.lerpDelta(entity.warmup, entity.power.satisfaction, 0.1f);
|
entity.warmup = Mathf.lerpDelta(entity.warmup, entity.efficiency(), 0.1f);
|
||||||
|
|
||||||
/*
|
/*
|
||||||
if(entity.power.satisfaction < relativePowerDraw){
|
if(entity.power.status < relativePowerDraw){
|
||||||
entity.warmup = Mathf.lerpDelta(entity.warmup, 0f, 0.15f);
|
entity.warmup = Mathf.lerpDelta(entity.warmup, 0f, 0.15f);
|
||||||
entity.power.satisfaction = 0f;
|
entity.power.status = 0f;
|
||||||
if(entity.warmup <= 0.09f){
|
if(entity.warmup <= 0.09f){
|
||||||
entity.broken = true;
|
entity.broken = true;
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -70,7 +70,7 @@ public class MendProjector extends Block{
|
|||||||
|
|
||||||
entity.phaseHeat = Mathf.lerpDelta(entity.phaseHeat, Mathf.num(entity.cons.optionalValid()), 0.1f);
|
entity.phaseHeat = Mathf.lerpDelta(entity.phaseHeat, Mathf.num(entity.cons.optionalValid()), 0.1f);
|
||||||
|
|
||||||
if(entity.cons.optionalValid() && entity.timer.get(timerUse, useTime) && entity.power.satisfaction > 0){
|
if(entity.cons.optionalValid() && entity.timer.get(timerUse, useTime) && entity.efficiency() > 0){
|
||||||
entity.cons.trigger();
|
entity.cons.trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -90,7 +90,7 @@ public class MendProjector extends Block{
|
|||||||
if(other == null) continue;
|
if(other == null) continue;
|
||||||
|
|
||||||
if(other.getTeamID() == tile.getTeamID() && !healed.contains(other.pos()) && other.entity != null && other.entity.health < other.entity.maxHealth()){
|
if(other.getTeamID() == tile.getTeamID() && !healed.contains(other.pos()) && other.entity != null && other.entity.health < other.entity.maxHealth()){
|
||||||
other.entity.healBy(other.entity.maxHealth() * (healPercent + entity.phaseHeat * phaseBoost) / 100f * entity.power.satisfaction);
|
other.entity.healBy(other.entity.maxHealth() * (healPercent + entity.phaseHeat * phaseBoost) / 100f * entity.efficiency());
|
||||||
Effects.effect(Fx.healBlockFull, Tmp.c1.set(color).lerp(phase, entity.phaseHeat), other.drawx(), other.drawy(), other.block().size);
|
Effects.effect(Fx.healBlockFull, Tmp.c1.set(color).lerp(phase, entity.phaseHeat), other.drawx(), other.drawy(), other.block().size);
|
||||||
healed.add(other.pos());
|
healed.add(other.pos());
|
||||||
}
|
}
|
||||||
@@ -134,7 +134,7 @@ public class MendProjector extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawLight(Tile tile){
|
public void drawLight(Tile tile){
|
||||||
renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.power.satisfaction, color, 0.7f * tile.entity.power.satisfaction);
|
renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.efficiency(), color, 0.7f * tile.entity.efficiency());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -68,7 +68,7 @@ public class OverdriveProjector extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawLight(Tile tile){
|
public void drawLight(Tile tile){
|
||||||
renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.power.satisfaction, color, 0.7f * tile.entity.power.satisfaction);
|
renderer.lights.add(tile.drawx(), tile.drawy(), 50f * tile.entity.efficiency(), color, 0.7f * tile.entity.efficiency());
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -79,13 +79,13 @@ public class OverdriveProjector extends Block{
|
|||||||
|
|
||||||
entity.phaseHeat = Mathf.lerpDelta(entity.phaseHeat, Mathf.num(entity.cons.optionalValid()), 0.1f);
|
entity.phaseHeat = Mathf.lerpDelta(entity.phaseHeat, Mathf.num(entity.cons.optionalValid()), 0.1f);
|
||||||
|
|
||||||
if(entity.timer.get(timerUse, useTime) && entity.power.satisfaction > 0){
|
if(entity.timer.get(timerUse, useTime) && entity.efficiency() > 0){
|
||||||
entity.cons.trigger();
|
entity.cons.trigger();
|
||||||
}
|
}
|
||||||
|
|
||||||
if(entity.charge >= reload){
|
if(entity.charge >= reload){
|
||||||
float realRange = range + entity.phaseHeat * phaseRangeBoost;
|
float realRange = range + entity.phaseHeat * phaseRangeBoost;
|
||||||
float realBoost = (speedBoost + entity.phaseHeat * speedBoostPhase) * entity.power.satisfaction;
|
float realBoost = (speedBoost + entity.phaseHeat * speedBoostPhase) * entity.efficiency();
|
||||||
|
|
||||||
entity.charge = 0f;
|
entity.charge = 0f;
|
||||||
|
|
||||||
|
|||||||
@@ -47,6 +47,6 @@ public class PowerTurret extends CooledTurret{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
protected float baseReloadSpeed(Tile tile){
|
protected float baseReloadSpeed(Tile tile){
|
||||||
return tile.isEnemyCheat() ? 1f : tile.entity.power.satisfaction;
|
return tile.isEnemyCheat() ? 1f : tile.entity.power.status;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -200,7 +200,7 @@ public class Conveyor extends Block implements Autotiler{
|
|||||||
|
|
||||||
if(maxmove > minmove){
|
if(maxmove > minmove){
|
||||||
pos.y += maxmove;
|
pos.y += maxmove;
|
||||||
if(Mathf.isEqual(pos.x, 0, 0.1f)){
|
if(Mathf.equal(pos.x, 0, 0.1f)){
|
||||||
pos.x = 0f;
|
pos.x = 0f;
|
||||||
}
|
}
|
||||||
pos.x = Mathf.lerpDelta(pos.x, 0, 0.1f);
|
pos.x = Mathf.lerpDelta(pos.x, 0, 0.1f);
|
||||||
|
|||||||
@@ -45,18 +45,7 @@ public class ItemBridge extends Block{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void configured(Tile tile, Player player, int value){
|
public void configured(Tile tile, Player player, int value){
|
||||||
ItemBridgeEntity entity = tile.entity();
|
tile.<ItemBridgeEntity>entity().link = value;
|
||||||
|
|
||||||
if(world.tile(entity.link) != null && world.tile(entity.link).entity instanceof ItemBridgeEntity){
|
|
||||||
ItemBridgeEntity oe = world.tile(entity.link).entity();
|
|
||||||
oe.incoming.remove(tile.pos());
|
|
||||||
}
|
|
||||||
|
|
||||||
entity.link = value;
|
|
||||||
|
|
||||||
if(world.tile(value) != null && world.tile(value).entity instanceof ItemBridgeEntity){
|
|
||||||
((ItemBridgeEntity)world.tile(value).entity).incoming.add(tile.pos());
|
|
||||||
}
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -195,8 +184,9 @@ public class ItemBridge extends Block{
|
|||||||
tryDump(tile);
|
tryDump(tile);
|
||||||
entity.uptime = 0f;
|
entity.uptime = 0f;
|
||||||
}else{
|
}else{
|
||||||
|
((ItemBridgeEntity)world.tile(entity.link).entity).incoming.add(tile.pos());
|
||||||
|
|
||||||
if(entity.cons.valid() && (!hasPower || Mathf.isZero(1f - entity.power.satisfaction))){
|
if(entity.cons.valid() && Mathf.zero(1f - entity.efficiency())){
|
||||||
entity.uptime = Mathf.lerpDelta(entity.uptime, 1f, 0.04f);
|
entity.uptime = Mathf.lerpDelta(entity.uptime, 1f, 0.04f);
|
||||||
}else{
|
}else{
|
||||||
entity.uptime = Mathf.lerpDelta(entity.uptime, 0f, 0.02f);
|
entity.uptime = Mathf.lerpDelta(entity.uptime, 0f, 0.02f);
|
||||||
|
|||||||
@@ -32,7 +32,7 @@ public class LiquidBridge extends ItemBridge{
|
|||||||
if(entity.cons.valid()){
|
if(entity.cons.valid()){
|
||||||
float alpha = 0.04f;
|
float alpha = 0.04f;
|
||||||
if(hasPower){
|
if(hasPower){
|
||||||
alpha *= entity.power.satisfaction; // Exceed boot time unless power is at max.
|
alpha *= entity.efficiency(); // Exceed boot time unless power is at max.
|
||||||
}
|
}
|
||||||
entity.uptime = Mathf.lerpDelta(entity.uptime, 1f, alpha);
|
entity.uptime = Mathf.lerpDelta(entity.uptime, 1f, alpha);
|
||||||
}else{
|
}else{
|
||||||
|
|||||||
@@ -77,7 +77,7 @@ public class MassDriver extends Block{
|
|||||||
|
|
||||||
//reload regardless of state
|
//reload regardless of state
|
||||||
if(entity.reload > 0f){
|
if(entity.reload > 0f){
|
||||||
entity.reload = Mathf.clamp(entity.reload - entity.delta() / reloadTime * entity.power.satisfaction);
|
entity.reload = Mathf.clamp(entity.reload - entity.delta() / reloadTime * entity.efficiency());
|
||||||
}
|
}
|
||||||
|
|
||||||
//cleanup waiting shooters that are not valid
|
//cleanup waiting shooters that are not valid
|
||||||
@@ -113,7 +113,7 @@ public class MassDriver extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
//align to shooter rotation
|
//align to shooter rotation
|
||||||
entity.rotation = Mathf.slerpDelta(entity.rotation, tile.angleTo(entity.currentShooter()), rotateSpeed * entity.power.satisfaction);
|
entity.rotation = Mathf.slerpDelta(entity.rotation, tile.angleTo(entity.currentShooter()), rotateSpeed * entity.efficiency());
|
||||||
}else if(entity.state == DriverState.shooting){
|
}else if(entity.state == DriverState.shooting){
|
||||||
//if there's nothing to shoot at OR someone wants to shoot at this thing, bail
|
//if there's nothing to shoot at OR someone wants to shoot at this thing, bail
|
||||||
if(!hasLink || (!entity.waitingShooters.isEmpty() && (itemCapacity - entity.items.total() >= minDistribute))){
|
if(!hasLink || (!entity.waitingShooters.isEmpty() && (itemCapacity - entity.items.total() >= minDistribute))){
|
||||||
@@ -133,7 +133,7 @@ public class MassDriver extends Block{
|
|||||||
if(entity.reload <= 0.0001f){
|
if(entity.reload <= 0.0001f){
|
||||||
|
|
||||||
//align to target location
|
//align to target location
|
||||||
entity.rotation = Mathf.slerpDelta(entity.rotation, targetRotation, rotateSpeed * entity.power.satisfaction);
|
entity.rotation = Mathf.slerpDelta(entity.rotation, targetRotation, rotateSpeed * entity.efficiency());
|
||||||
|
|
||||||
//fire when it's the first in the queue and angles are ready.
|
//fire when it's the first in the queue and angles are ready.
|
||||||
if(other.currentShooter() == tile &&
|
if(other.currentShooter() == tile &&
|
||||||
|
|||||||
@@ -17,7 +17,7 @@ import io.anuke.mindustry.world.meta.*;
|
|||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class ImpactReactor extends PowerGenerator{
|
public class ImpactReactor extends PowerGenerator{
|
||||||
protected int timerUse = timers++;
|
protected int timerUse = timers++;
|
||||||
@@ -71,11 +71,11 @@ public class ImpactReactor extends PowerGenerator{
|
|||||||
public void update(Tile tile){
|
public void update(Tile tile){
|
||||||
FusionReactorEntity entity = tile.entity();
|
FusionReactorEntity entity = tile.entity();
|
||||||
|
|
||||||
if(entity.cons.valid() && entity.power.satisfaction >= 0.99f){
|
if(entity.cons.valid() && entity.power.status >= 0.99f){
|
||||||
boolean prevOut = getPowerProduction(tile) <= consumes.getPower().requestedPower(entity);
|
boolean prevOut = getPowerProduction(tile) <= consumes.getPower().requestedPower(entity);
|
||||||
|
|
||||||
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, warmupSpeed);
|
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, warmupSpeed);
|
||||||
if(Mathf.isEqual(entity.warmup, 1f, 0.001f)){
|
if(Mathf.equal(entity.warmup, 1f, 0.001f)){
|
||||||
entity.warmup = 1f;
|
entity.warmup = 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -116,6 +116,12 @@ public class ImpactReactor extends PowerGenerator{
|
|||||||
Draw.color();
|
Draw.color();
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawLight(Tile tile){
|
||||||
|
float fract = tile.<FusionReactorEntity>entity().warmup;
|
||||||
|
renderer.lights.add(tile.drawx(), tile.drawy(), (110f + Mathf.absin(5, 5f)) * fract, Tmp.c1.set(plasma2).lerp(plasma1, Mathf.absin(7f, 0.2f)), 0.8f * fract);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextureRegion[] generateIcons(){
|
public TextureRegion[] generateIcons(){
|
||||||
return new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name)};
|
return new TextureRegion[]{Core.atlas.find(name + "-bottom"), Core.atlas.find(name)};
|
||||||
|
|||||||
@@ -1,22 +1,36 @@
|
|||||||
package io.anuke.mindustry.world.blocks.power;
|
package io.anuke.mindustry.world.blocks.power;
|
||||||
|
|
||||||
import io.anuke.arc.graphics.*;
|
import io.anuke.arc.graphics.*;
|
||||||
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.mindustry.world.*;
|
import io.anuke.mindustry.world.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.renderer;
|
import static io.anuke.mindustry.Vars.renderer;
|
||||||
|
|
||||||
public class LightBlock extends Block{
|
public class LightBlock extends Block{
|
||||||
protected Color color = Color.royal;
|
protected Color color = Color.royal;
|
||||||
|
protected float brightness = 0.5f;
|
||||||
protected float radius = 200f;
|
protected float radius = 200f;
|
||||||
|
protected int topRegion;
|
||||||
|
|
||||||
public LightBlock(String name){
|
public LightBlock(String name){
|
||||||
super(name);
|
super(name);
|
||||||
hasPower = true;
|
hasPower = true;
|
||||||
update = true;
|
update = true;
|
||||||
|
topRegion = reg("-top");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Tile tile){
|
||||||
|
super.draw(tile);
|
||||||
|
Draw.blend(Blending.additive);
|
||||||
|
Draw.color(color, tile.entity.efficiency() * 0.3f);
|
||||||
|
Draw.rect(reg(topRegion), tile.drawx(), tile.drawy());
|
||||||
|
Draw.color();
|
||||||
|
Draw.blend();
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void drawLight(Tile tile){
|
public void drawLight(Tile tile){
|
||||||
renderer.lights.add(tile.drawx(), tile.drawy(), radius, color, 0.5f * tile.entity.power.satisfaction);
|
renderer.lights.add(tile.drawx(), tile.drawy(), radius, color, brightness * tile.entity.efficiency());
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,39 +1,37 @@
|
|||||||
package io.anuke.mindustry.world.blocks.power;
|
package io.anuke.mindustry.world.blocks.power;
|
||||||
|
|
||||||
import io.anuke.arc.*;
|
import io.anuke.arc.*;
|
||||||
import io.anuke.arc.graphics.Color;
|
import io.anuke.arc.graphics.*;
|
||||||
import io.anuke.arc.graphics.g2d.*;
|
import io.anuke.arc.graphics.g2d.*;
|
||||||
import io.anuke.arc.math.Mathf;
|
import io.anuke.arc.math.*;
|
||||||
import io.anuke.arc.math.geom.Vector2;
|
import io.anuke.arc.math.geom.*;
|
||||||
import io.anuke.arc.util.Time;
|
import io.anuke.arc.util.*;
|
||||||
import io.anuke.mindustry.content.Fx;
|
import io.anuke.mindustry.content.*;
|
||||||
import io.anuke.mindustry.entities.Damage;
|
import io.anuke.mindustry.entities.*;
|
||||||
import io.anuke.mindustry.entities.Effects;
|
import io.anuke.mindustry.entities.type.*;
|
||||||
import io.anuke.mindustry.entities.type.TileEntity;
|
|
||||||
import io.anuke.mindustry.game.EventType.*;
|
import io.anuke.mindustry.game.EventType.*;
|
||||||
import io.anuke.mindustry.gen.*;
|
import io.anuke.mindustry.gen.*;
|
||||||
import io.anuke.mindustry.graphics.Pal;
|
import io.anuke.mindustry.graphics.*;
|
||||||
import io.anuke.mindustry.type.Item;
|
import io.anuke.mindustry.type.*;
|
||||||
import io.anuke.mindustry.type.Liquid;
|
import io.anuke.mindustry.ui.*;
|
||||||
import io.anuke.mindustry.ui.Bar;
|
import io.anuke.mindustry.world.*;
|
||||||
import io.anuke.mindustry.world.Tile;
|
|
||||||
import io.anuke.mindustry.world.consumers.*;
|
import io.anuke.mindustry.world.consumers.*;
|
||||||
import io.anuke.mindustry.world.meta.BlockStat;
|
import io.anuke.mindustry.world.meta.*;
|
||||||
import io.anuke.mindustry.world.meta.StatUnit;
|
|
||||||
|
|
||||||
import java.io.*;
|
import java.io.*;
|
||||||
|
|
||||||
import static io.anuke.mindustry.Vars.tilesize;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class NuclearReactor extends PowerGenerator{
|
public class NuclearReactor extends PowerGenerator{
|
||||||
protected final int timerFuel = timers++;
|
protected final int timerFuel = timers++;
|
||||||
|
|
||||||
protected final Vector2 tr = new Vector2();
|
protected final Vector2 tr = new Vector2();
|
||||||
|
|
||||||
|
protected Color lightColor = Color.valueOf("b174f1");
|
||||||
protected Color coolColor = new Color(1, 1, 1, 0f);
|
protected Color coolColor = new Color(1, 1, 1, 0f);
|
||||||
protected Color hotColor = Color.valueOf("ff9575a3");
|
protected Color hotColor = Color.valueOf("ff9575a3");
|
||||||
protected float itemDuration = 120; //time to consume 1 fuel
|
protected float itemDuration = 120; //time to consume 1 fuel
|
||||||
protected float heating = 0.01f; //heating per frame * fullness
|
protected float heating = 0.005f; //heating per frame * fullness
|
||||||
protected float smokeThreshold = 0.3f; //threshold at which block starts smoking
|
protected float smokeThreshold = 0.3f; //threshold at which block starts smoking
|
||||||
protected int explosionRadius = 40;
|
protected int explosionRadius = 40;
|
||||||
protected int explosionDamage = 1350;
|
protected int explosionDamage = 1350;
|
||||||
@@ -127,7 +125,7 @@ public class NuclearReactor extends PowerGenerator{
|
|||||||
|
|
||||||
int fuel = entity.items.get(consumes.<ConsumeItems>get(ConsumeType.item).items[0].item);
|
int fuel = entity.items.get(consumes.<ConsumeItems>get(ConsumeType.item).items[0].item);
|
||||||
|
|
||||||
if(fuel < 5 && entity.heat < 0.5f) return;
|
if((fuel < 5 && entity.heat < 0.5f) || !state.rules.reactorExplosions) return;
|
||||||
|
|
||||||
Effects.shake(6f, 16f, tile.worldx(), tile.worldy());
|
Effects.shake(6f, 16f, tile.worldx(), tile.worldy());
|
||||||
Effects.effect(Fx.nuclearShockwave, tile.worldx(), tile.worldy());
|
Effects.effect(Fx.nuclearShockwave, tile.worldx(), tile.worldy());
|
||||||
@@ -152,6 +150,13 @@ public class NuclearReactor extends PowerGenerator{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawLight(Tile tile){
|
||||||
|
NuclearReactorEntity entity = tile.entity();
|
||||||
|
float fract = entity.productionEfficiency;
|
||||||
|
renderer.lights.add(tile.drawx(), tile.drawy(), (90f + Mathf.absin(5, 5f)) * fract, Tmp.c1.set(lightColor).lerp(Color.scarlet, entity.heat), 0.6f * fract);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void draw(Tile tile){
|
public void draw(Tile tile){
|
||||||
super.draw(tile);
|
super.draw(tile);
|
||||||
|
|||||||
@@ -0,0 +1,89 @@
|
|||||||
|
package io.anuke.mindustry.world.blocks.power;
|
||||||
|
|
||||||
|
import io.anuke.arc.Core;
|
||||||
|
import io.anuke.arc.math.Mathf;
|
||||||
|
import io.anuke.mindustry.ui.Bar;
|
||||||
|
import io.anuke.arc.util.Eachable;
|
||||||
|
import io.anuke.mindustry.ui.Cicon;
|
||||||
|
import io.anuke.mindustry.world.Tile;
|
||||||
|
import io.anuke.mindustry.world.Block;
|
||||||
|
import io.anuke.arc.graphics.g2d.Draw;
|
||||||
|
import io.anuke.mindustry.graphics.Pal;
|
||||||
|
import io.anuke.arc.graphics.g2d.TextureRegion;
|
||||||
|
import io.anuke.mindustry.entities.traits.BuilderTrait;
|
||||||
|
|
||||||
|
public class PowerDiode extends Block{
|
||||||
|
protected TextureRegion arrow;
|
||||||
|
|
||||||
|
public PowerDiode(String name){
|
||||||
|
super(name);
|
||||||
|
rotate = true;
|
||||||
|
update = true;
|
||||||
|
solid = true;
|
||||||
|
insulated = true;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void update(Tile tile){
|
||||||
|
super.update(tile);
|
||||||
|
|
||||||
|
if(!tile.back().block().hasPower || !tile.front().block().hasPower) return;
|
||||||
|
|
||||||
|
PowerGraph backGraph = tile.back().entity.power.graph;
|
||||||
|
PowerGraph frontGraph = tile.front().entity.power.graph;
|
||||||
|
if(backGraph == frontGraph) return;
|
||||||
|
|
||||||
|
// 0f - 1f of battery capacity in use
|
||||||
|
float backStored = backGraph.getBatteryStored() / backGraph.getTotalBatteryCapacity();
|
||||||
|
float frontStored = frontGraph.getBatteryStored() / frontGraph.getTotalBatteryCapacity();
|
||||||
|
|
||||||
|
// try to send if the back side has more % capacity stored than the front side
|
||||||
|
if(backStored > frontStored) {
|
||||||
|
// send half of the difference
|
||||||
|
float amount = backGraph.getBatteryStored() * (backStored - frontStored) / 2;
|
||||||
|
// prevent sending more than the front can handle
|
||||||
|
amount = Mathf.clamp(amount, 0, frontGraph.getTotalBatteryCapacity() * (1 - frontStored));
|
||||||
|
|
||||||
|
backGraph.useBatteries(amount);
|
||||||
|
frontGraph.chargeBatteries(amount);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
// battery % of the graph on either side, defaults to zero
|
||||||
|
protected float bar(Tile tile){
|
||||||
|
return tile.block().hasPower ? tile.entity.power.graph.getBatteryStored() / tile.entity.power.graph.getTotalBatteryCapacity() : 0f;
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setBars(){
|
||||||
|
super.setBars();
|
||||||
|
|
||||||
|
bars.add("back", entity -> new Bar("bar.input", Pal.lighterOrange, () -> bar(entity.tile.back())) );
|
||||||
|
bars.add("front", entity -> new Bar("bar.output", Pal.lighterOrange, () -> bar(entity.tile.front())) );
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void load(){
|
||||||
|
super.load();
|
||||||
|
arrow = Core.atlas.find(name + "-arrow");
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void draw(Tile tile){
|
||||||
|
Draw.rect(region, tile.drawx(), tile.drawy(), 0);
|
||||||
|
Draw.rect(arrow, tile.drawx(), tile.drawy(), rotate ? tile.rotation() * 90 : 0);
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void drawRequestRegion(BuilderTrait.BuildRequest req, Eachable<BuilderTrait.BuildRequest> list) {
|
||||||
|
TextureRegion reg = icon(Cicon.full);
|
||||||
|
Draw.rect(icon(Cicon.full), req.drawx(), req.drawy(),
|
||||||
|
reg.getWidth() * req.animScale * Draw.scl,
|
||||||
|
reg.getHeight() * req.animScale * Draw.scl,
|
||||||
|
0);
|
||||||
|
Draw.rect(arrow, req.drawx(), req.drawy(),
|
||||||
|
arrow.getWidth() * req.animScale * Draw.scl,
|
||||||
|
arrow.getHeight() * req.animScale * Draw.scl,
|
||||||
|
!rotate ? 0 : req.rotation * 90);
|
||||||
|
}
|
||||||
|
}
|
||||||
@@ -47,9 +47,9 @@ public class PowerGraph{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public float getSatisfaction(){
|
public float getSatisfaction(){
|
||||||
if(Mathf.isZero(lastPowerProduced)){
|
if(Mathf.zero(lastPowerProduced)){
|
||||||
return 0f;
|
return 0f;
|
||||||
}else if(Mathf.isZero(lastPowerNeeded)){
|
}else if(Mathf.zero(lastPowerNeeded)){
|
||||||
return 1f;
|
return 1f;
|
||||||
}
|
}
|
||||||
return Mathf.clamp(lastPowerProduced / lastPowerNeeded);
|
return Mathf.clamp(lastPowerProduced / lastPowerNeeded);
|
||||||
@@ -83,7 +83,7 @@ public class PowerGraph{
|
|||||||
for(Tile battery : batteries){
|
for(Tile battery : batteries){
|
||||||
Consumers consumes = battery.block().consumes;
|
Consumers consumes = battery.block().consumes;
|
||||||
if(consumes.hasPower()){
|
if(consumes.hasPower()){
|
||||||
totalAccumulator += battery.entity.power.satisfaction * consumes.getPower().capacity;
|
totalAccumulator += battery.entity.power.status * consumes.getPower().capacity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return totalAccumulator;
|
return totalAccumulator;
|
||||||
@@ -94,7 +94,7 @@ public class PowerGraph{
|
|||||||
for(Tile battery : batteries){
|
for(Tile battery : batteries){
|
||||||
if(battery.block().consumes.hasPower()){
|
if(battery.block().consumes.hasPower()){
|
||||||
ConsumePower power = battery.block().consumes.getPower();
|
ConsumePower power = battery.block().consumes.getPower();
|
||||||
totalCapacity += (1f - battery.entity.power.satisfaction) * power.capacity;
|
totalCapacity += (1f - battery.entity.power.status) * power.capacity;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return totalCapacity;
|
return totalCapacity;
|
||||||
@@ -112,14 +112,14 @@ public class PowerGraph{
|
|||||||
|
|
||||||
public float useBatteries(float needed){
|
public float useBatteries(float needed){
|
||||||
float stored = getBatteryStored();
|
float stored = getBatteryStored();
|
||||||
if(Mathf.isEqual(stored, 0f)) return 0f;
|
if(Mathf.equal(stored, 0f)) return 0f;
|
||||||
|
|
||||||
float used = Math.min(stored, needed);
|
float used = Math.min(stored, needed);
|
||||||
float consumedPowerPercentage = Math.min(1.0f, needed / stored);
|
float consumedPowerPercentage = Math.min(1.0f, needed / stored);
|
||||||
for(Tile battery : batteries){
|
for(Tile battery : batteries){
|
||||||
Consumers consumes = battery.block().consumes;
|
Consumers consumes = battery.block().consumes;
|
||||||
if(consumes.hasPower()){
|
if(consumes.hasPower()){
|
||||||
battery.entity.power.satisfaction *= (1f-consumedPowerPercentage);
|
battery.entity.power.status *= (1f-consumedPowerPercentage);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
return used;
|
return used;
|
||||||
@@ -129,14 +129,14 @@ public class PowerGraph{
|
|||||||
float capacity = getBatteryCapacity();
|
float capacity = getBatteryCapacity();
|
||||||
//how much of the missing in each battery % is charged
|
//how much of the missing in each battery % is charged
|
||||||
float chargedPercent = Math.min(excess/capacity, 1f);
|
float chargedPercent = Math.min(excess/capacity, 1f);
|
||||||
if(Mathf.isEqual(capacity, 0f)) return 0f;
|
if(Mathf.equal(capacity, 0f)) return 0f;
|
||||||
|
|
||||||
for(Tile battery : batteries){
|
for(Tile battery : batteries){
|
||||||
Consumers consumes = battery.block().consumes;
|
Consumers consumes = battery.block().consumes;
|
||||||
if(consumes.hasPower()){
|
if(consumes.hasPower()){
|
||||||
ConsumePower consumePower = consumes.getPower();
|
ConsumePower consumePower = consumes.getPower();
|
||||||
if(consumePower.capacity > 0f){
|
if(consumePower.capacity > 0f){
|
||||||
battery.entity.power.satisfaction += (1f-battery.entity.power.satisfaction) * chargedPercent;
|
battery.entity.power.status += (1f-battery.entity.power.status) * chargedPercent;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -145,26 +145,26 @@ public class PowerGraph{
|
|||||||
|
|
||||||
public void distributePower(float needed, float produced){
|
public void distributePower(float needed, float produced){
|
||||||
//distribute even if not needed. this is because some might be requiring power but not using it; it updates consumers
|
//distribute even if not needed. this is because some might be requiring power but not using it; it updates consumers
|
||||||
float coverage = Mathf.isZero(needed) && Mathf.isZero(produced) ? 0f : Mathf.isZero(needed) ? 1f : Math.min(1, produced / needed);
|
float coverage = Mathf.zero(needed) && Mathf.zero(produced) ? 0f : Mathf.zero(needed) ? 1f : Math.min(1, produced / needed);
|
||||||
for(Tile consumer : consumers){
|
for(Tile consumer : consumers){
|
||||||
Consumers consumes = consumer.block().consumes;
|
Consumers consumes = consumer.block().consumes;
|
||||||
if(consumes.hasPower()){
|
if(consumes.hasPower()){
|
||||||
ConsumePower consumePower = consumes.getPower();
|
ConsumePower consumePower = consumes.getPower();
|
||||||
if(consumePower.buffered){
|
if(consumePower.buffered){
|
||||||
if(!Mathf.isZero(consumePower.capacity)){
|
if(!Mathf.zero(consumePower.capacity)){
|
||||||
// Add an equal percentage of power to all buffers, based on the global power coverage in this graph
|
// Add an equal percentage of power to all buffers, based on the global power coverage in this graph
|
||||||
float maximumRate = consumePower.requestedPower(consumer.entity) * coverage * consumer.entity.delta();
|
float maximumRate = consumePower.requestedPower(consumer.entity) * coverage * consumer.entity.delta();
|
||||||
consumer.entity.power.satisfaction = Mathf.clamp(consumer.entity.power.satisfaction + maximumRate / consumePower.capacity);
|
consumer.entity.power.status = Mathf.clamp(consumer.entity.power.status + maximumRate / consumePower.capacity);
|
||||||
}
|
}
|
||||||
}else{
|
}else{
|
||||||
//valid consumers get power as usual
|
//valid consumers get power as usual
|
||||||
if(otherConsumersAreValid(consumer, consumePower)){
|
if(otherConsumersAreValid(consumer, consumePower)){
|
||||||
consumer.entity.power.satisfaction = coverage;
|
consumer.entity.power.status = coverage;
|
||||||
}else{ //invalid consumers get an estimate, if they were to activate
|
}else{ //invalid consumers get an estimate, if they were to activate
|
||||||
consumer.entity.power.satisfaction = Math.min(1, produced / (needed + consumePower.usage * consumer.entity.delta()));
|
consumer.entity.power.status = Math.min(1, produced / (needed + consumePower.usage * consumer.entity.delta()));
|
||||||
//just in case
|
//just in case
|
||||||
if(Float.isNaN(consumer.entity.power.satisfaction)){
|
if(Float.isNaN(consumer.entity.power.status)){
|
||||||
consumer.entity.power.satisfaction = 0f;
|
consumer.entity.power.status = 0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -176,9 +176,9 @@ public class PowerGraph{
|
|||||||
if(Core.graphics.getFrameId() == lastFrameUpdated){
|
if(Core.graphics.getFrameId() == lastFrameUpdated){
|
||||||
return;
|
return;
|
||||||
}else if(!consumers.isEmpty() && consumers.first().isEnemyCheat()){
|
}else if(!consumers.isEmpty() && consumers.first().isEnemyCheat()){
|
||||||
//when cheating, just set satisfaction to 1
|
//when cheating, just set status to 1
|
||||||
for(Tile tile : consumers){
|
for(Tile tile : consumers){
|
||||||
tile.entity.power.satisfaction = 1f;
|
tile.entity.power.status = 1f;
|
||||||
}
|
}
|
||||||
|
|
||||||
return;
|
return;
|
||||||
@@ -198,7 +198,7 @@ public class PowerGraph{
|
|||||||
return;
|
return;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Mathf.isEqual(powerNeeded, powerProduced)){
|
if(!Mathf.equal(powerNeeded, powerProduced)){
|
||||||
if(powerNeeded > powerProduced){
|
if(powerNeeded > powerProduced){
|
||||||
powerProduced += useBatteries(powerNeeded - powerProduced);
|
powerProduced += useBatteries(powerNeeded - powerProduced);
|
||||||
}else if(powerProduced > powerNeeded){
|
}else if(powerProduced > powerNeeded){
|
||||||
|
|||||||
@@ -19,6 +19,8 @@ import io.anuke.mindustry.world.meta.*;
|
|||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
public class PowerNode extends PowerBlock{
|
public class PowerNode extends PowerBlock{
|
||||||
|
protected static boolean returnValue = false;
|
||||||
|
|
||||||
protected ObjectSet<PowerGraph> graphs = new ObjectSet<>();
|
protected ObjectSet<PowerGraph> graphs = new ObjectSet<>();
|
||||||
protected Vector2 t1 = new Vector2(), t2 = new Vector2();
|
protected Vector2 t1 = new Vector2(), t2 = new Vector2();
|
||||||
protected TextureRegion laser, laserEnd;
|
protected TextureRegion laser, laserEnd;
|
||||||
@@ -305,7 +307,7 @@ public class PowerNode extends PowerBlock{
|
|||||||
|
|
||||||
public boolean overlaps(@Nullable Tile src, @Nullable Tile other){
|
public boolean overlaps(@Nullable Tile src, @Nullable Tile other){
|
||||||
if(src == null || other == null) return true;
|
if(src == null || other == null) return true;
|
||||||
return overlaps(src.drawx(), src.drawy(), other, laserRange * tilesize);
|
return Intersector.overlaps(Tmp.cr1.set(src.worldx() + offset(), src.worldy() + offset(), laserRange * tilesize), Tmp.r1.setSize(size * tilesize).setCenter(other.worldx() + offset(), other.worldy() + offset()));
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void drawLaser(Tile tile, Tile target){
|
protected void drawLaser(Tile tile, Tile target){
|
||||||
@@ -339,11 +341,9 @@ public class PowerNode extends PowerBlock{
|
|||||||
}
|
}
|
||||||
|
|
||||||
public static boolean insulated(int x, int y, int x2, int y2){
|
public static boolean insulated(int x, int y, int x2, int y2){
|
||||||
final Boolean[] bool = {false};
|
returnValue = false;
|
||||||
insulators(x, y, x2, y2, cause -> {
|
insulators(x, y, x2, y2, cause -> returnValue = true);
|
||||||
bool[0] = true;
|
return returnValue;
|
||||||
});
|
|
||||||
return bool[0];
|
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void insulators(int x, int y, int x2, int y2, Cons<Tile> iterator){
|
public static void insulators(int x, int y, int x2, int y2, Cons<Tile> iterator){
|
||||||
|
|||||||
@@ -257,9 +257,7 @@ public class Drill extends Block{
|
|||||||
speed = liquidBoostIntensity;
|
speed = liquidBoostIntensity;
|
||||||
}
|
}
|
||||||
|
|
||||||
if(hasPower){
|
speed *= entity.efficiency(); // Drill slower when not at full power
|
||||||
speed *= entity.power.satisfaction; // Drill slower when not at full power
|
|
||||||
}
|
|
||||||
|
|
||||||
entity.lastDrillSpeed = (speed * entity.dominantItems * entity.warmup) / (drillTime + hardnessDrillMultiplier * entity.dominantItem.hardness);
|
entity.lastDrillSpeed = (speed * entity.dominantItems * entity.warmup) / (drillTime + hardnessDrillMultiplier * entity.dominantItem.hardness);
|
||||||
entity.warmup = Mathf.lerpDelta(entity.warmup, speed, warmupSpeed);
|
entity.warmup = Mathf.lerpDelta(entity.warmup, speed, warmupSpeed);
|
||||||
|
|||||||
@@ -79,7 +79,7 @@ public class Fracker extends SolidPump{
|
|||||||
}
|
}
|
||||||
|
|
||||||
super.update(tile);
|
super.update(tile);
|
||||||
entity.accumulator += entity.delta() * entity.power.satisfaction;
|
entity.accumulator += entity.delta() * entity.efficiency();
|
||||||
}else{
|
}else{
|
||||||
tryDumpLiquid(tile, result);
|
tryDumpLiquid(tile, result);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -38,10 +38,8 @@ public class LiquidConverter extends GenericCrafter{
|
|||||||
ConsumeLiquidBase cl = consumes.get(ConsumeType.liquid);
|
ConsumeLiquidBase cl = consumes.get(ConsumeType.liquid);
|
||||||
|
|
||||||
if(tile.entity.cons.valid()){
|
if(tile.entity.cons.valid()){
|
||||||
float use = Math.min(cl.amount * entity.delta(), liquidCapacity - entity.liquids.get(outputLiquid.liquid));
|
float use = Math.min(cl.amount * entity.delta(), liquidCapacity - entity.liquids.get(outputLiquid.liquid)) * entity.efficiency();
|
||||||
if(hasPower){
|
|
||||||
use *= entity.power.satisfaction; // Produce less liquid if power is not maxed
|
|
||||||
}
|
|
||||||
useContent(tile, outputLiquid.liquid);
|
useContent(tile, outputLiquid.liquid);
|
||||||
entity.progress += use / cl.amount / craftTime;
|
entity.progress += use / cl.amount / craftTime;
|
||||||
entity.liquids.add(outputLiquid.liquid, use);
|
entity.liquids.add(outputLiquid.liquid, use);
|
||||||
|
|||||||
@@ -119,10 +119,7 @@ public class Pump extends LiquidBlock{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(tile.entity.cons.valid() && liquidDrop != null){
|
if(tile.entity.cons.valid() && liquidDrop != null){
|
||||||
float maxPump = Math.min(liquidCapacity - tile.entity.liquids.total(), tiles * pumpAmount * tile.entity.delta() / size / size);
|
float maxPump = Math.min(liquidCapacity - tile.entity.liquids.total(), tiles * pumpAmount * tile.entity.delta() / size / size) * tile.entity.efficiency();
|
||||||
if(hasPower){
|
|
||||||
maxPump *= tile.entity.power.satisfaction; // Produce slower if not at full power
|
|
||||||
}
|
|
||||||
tile.entity.liquids.add(liquidDrop, maxPump);
|
tile.entity.liquids.add(liquidDrop, maxPump);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class SolidPump extends Pump{
|
|||||||
@Override
|
@Override
|
||||||
public void drawPlace(int x, int y, int rotation, boolean valid){
|
public void drawPlace(int x, int y, int rotation, boolean valid){
|
||||||
if(attribute != null){
|
if(attribute != null){
|
||||||
drawPlaceText(Core.bundle.formatFloat("bar.efficiency", (sumAttribute(attribute, x, y) + 1f) * 100, 1), x, y, valid);
|
drawPlaceText(Core.bundle.formatFloat("bar.efficiency", (sumAttribute(attribute, x, y) + 1f) * 100 * percentSolid(x, y), 1), x, y, valid);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -51,7 +51,7 @@ public class SolidPump extends Pump{
|
|||||||
super.setBars();
|
super.setBars();
|
||||||
bars.add("efficiency", entity -> new Bar(() ->
|
bars.add("efficiency", entity -> new Bar(() ->
|
||||||
Core.bundle.formatFloat("bar.efficiency",
|
Core.bundle.formatFloat("bar.efficiency",
|
||||||
((((SolidPumpEntity)entity).boost + 1f) * ((SolidPumpEntity)entity).warmup) * 100, 1),
|
((((SolidPumpEntity)entity).boost + 1f) * ((SolidPumpEntity)entity).warmup) * 100 * percentSolid(entity.tile.x, entity.tile.y), 1),
|
||||||
() -> Pal.ammo,
|
() -> Pal.ammo,
|
||||||
() -> ((SolidPumpEntity)entity).warmup));
|
() -> ((SolidPumpEntity)entity).warmup));
|
||||||
}
|
}
|
||||||
@@ -101,7 +101,7 @@ public class SolidPump extends Pump{
|
|||||||
fraction += entity.boost;
|
fraction += entity.boost;
|
||||||
|
|
||||||
if(tile.entity.cons.valid() && typeLiquid(tile) < liquidCapacity - 0.001f){
|
if(tile.entity.cons.valid() && typeLiquid(tile) < liquidCapacity - 0.001f){
|
||||||
float maxPump = Math.min(liquidCapacity - typeLiquid(tile), pumpAmount * entity.delta() * fraction * entity.power.satisfaction);
|
float maxPump = Math.min(liquidCapacity - typeLiquid(tile), pumpAmount * entity.delta() * fraction * entity.efficiency());
|
||||||
tile.entity.liquids.add(result, maxPump);
|
tile.entity.liquids.add(result, maxPump);
|
||||||
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, 0.02f);
|
entity.warmup = Mathf.lerpDelta(entity.warmup, 1f, 0.02f);
|
||||||
if(Mathf.chance(entity.delta() * updateEffectChance))
|
if(Mathf.chance(entity.delta() * updateEffectChance))
|
||||||
|
|||||||
@@ -135,6 +135,14 @@ public class CoreBlock extends StorageBlock{
|
|||||||
return tile.entity instanceof StorageBlockEntity;
|
return tile.entity instanceof StorageBlockEntity;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public float handleDamage(Tile tile, float amount){
|
||||||
|
if(player != null && tile.getTeam() == player.getTeam()){
|
||||||
|
Events.fire(Trigger.teamCoreDamage);
|
||||||
|
}
|
||||||
|
return amount;
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public boolean canBreak(Tile tile){
|
public boolean canBreak(Tile tile){
|
||||||
return false;
|
return false;
|
||||||
|
|||||||
@@ -100,7 +100,7 @@ public class RepairPoint extends Block{
|
|||||||
if(entity.target != null && (entity.target.isDead() || entity.target.dst(tile) > repairRadius || entity.target.health >= entity.target.maxHealth())){
|
if(entity.target != null && (entity.target.isDead() || entity.target.dst(tile) > repairRadius || entity.target.health >= entity.target.maxHealth())){
|
||||||
entity.target = null;
|
entity.target = null;
|
||||||
}else if(entity.target != null && entity.cons.valid()){
|
}else if(entity.target != null && entity.cons.valid()){
|
||||||
entity.target.health += repairSpeed * Time.delta() * entity.strength * entity.power.satisfaction;
|
entity.target.health += repairSpeed * Time.delta() * entity.strength * entity.efficiency();
|
||||||
entity.target.clampHealth();
|
entity.target.clampHealth();
|
||||||
entity.rotation = Mathf.slerpDelta(entity.rotation, entity.angleTo(entity.target), 0.5f);
|
entity.rotation = Mathf.slerpDelta(entity.rotation, entity.angleTo(entity.target), 0.5f);
|
||||||
targetIsBeingRepaired = true;
|
targetIsBeingRepaired = true;
|
||||||
|
|||||||
@@ -159,8 +159,8 @@ public class UnitFactory extends Block{
|
|||||||
}
|
}
|
||||||
|
|
||||||
if(entity.cons.valid() || tile.isEnemyCheat()){
|
if(entity.cons.valid() || tile.isEnemyCheat()){
|
||||||
entity.time += entity.delta() * entity.speedScl * Vars.state.rules.unitBuildSpeedMultiplier * entity.power.satisfaction;
|
entity.time += entity.delta() * entity.speedScl * Vars.state.rules.unitBuildSpeedMultiplier * entity.efficiency();
|
||||||
entity.buildTime += entity.delta() * entity.power.satisfaction * Vars.state.rules.unitBuildSpeedMultiplier;
|
entity.buildTime += entity.delta() * entity.efficiency() * Vars.state.rules.unitBuildSpeedMultiplier;
|
||||||
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 1f, 0.05f);
|
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 1f, 0.05f);
|
||||||
}else{
|
}else{
|
||||||
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 0f, 0.05f);
|
entity.speedScl = Mathf.lerpDelta(entity.speedScl, 0f, 0.05f);
|
||||||
|
|||||||
@@ -42,7 +42,7 @@ public class ConsumePower extends Consume{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void update(TileEntity entity){
|
public void update(TileEntity entity){
|
||||||
// Nothing to do since PowerGraph directly updates entity.power.satisfaction
|
// Nothing to do since PowerGraph directly updates entity.power.status
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -50,7 +50,7 @@ public class ConsumePower extends Consume{
|
|||||||
if(buffered){
|
if(buffered){
|
||||||
return true;
|
return true;
|
||||||
}else{
|
}else{
|
||||||
return entity.power.satisfaction > 0f;
|
return entity.power.status > 0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -71,7 +71,7 @@ public class ConsumePower extends Consume{
|
|||||||
public float requestedPower(TileEntity entity){
|
public float requestedPower(TileEntity entity){
|
||||||
if(entity.tile.entity == null) return 0f;
|
if(entity.tile.entity == null) return 0f;
|
||||||
if(buffered){
|
if(buffered){
|
||||||
return (1f-entity.power.satisfaction)*capacity;
|
return (1f-entity.power.status)*capacity;
|
||||||
}else{
|
}else{
|
||||||
try{
|
try{
|
||||||
return usage * Mathf.num(entity.block.shouldConsume(entity.tile));
|
return usage * Mathf.num(entity.block.shouldConsume(entity.tile));
|
||||||
|
|||||||
@@ -41,9 +41,9 @@ public class AmmoListValue<T extends UnlockableContent> implements StatValue{
|
|||||||
sep(bt, Core.bundle.format("bullet.splashdamage", (int)type.splashDamage, Strings.fixed(type.splashDamageRadius / tilesize, 1)));
|
sep(bt, Core.bundle.format("bullet.splashdamage", (int)type.splashDamage, Strings.fixed(type.splashDamageRadius / tilesize, 1)));
|
||||||
}
|
}
|
||||||
|
|
||||||
if(!Mathf.isEqual(type.ammoMultiplier, 1f))
|
if(!Mathf.equal(type.ammoMultiplier, 1f))
|
||||||
sep(bt, Core.bundle.format("bullet.multiplier", (int)type.ammoMultiplier));
|
sep(bt, Core.bundle.format("bullet.multiplier", (int)type.ammoMultiplier));
|
||||||
if(!Mathf.isEqual(type.reloadMultiplier, 1f))
|
if(!Mathf.equal(type.reloadMultiplier, 1f))
|
||||||
sep(bt, Core.bundle.format("bullet.reload", Strings.fixed(type.reloadMultiplier, 1)));
|
sep(bt, Core.bundle.format("bullet.reload", Strings.fixed(type.reloadMultiplier, 1)));
|
||||||
|
|
||||||
if(type.knockback > 0){
|
if(type.knockback > 0){
|
||||||
|
|||||||
@@ -13,7 +13,7 @@ public class PowerModule extends BlockModule{
|
|||||||
* Blocks will work at a reduced efficiency if this is not equal to 1.0f.
|
* Blocks will work at a reduced efficiency if this is not equal to 1.0f.
|
||||||
* In case of buffered consumers, this is the percentage of power stored in relation to the maximum capacity.
|
* In case of buffered consumers, this is the percentage of power stored in relation to the maximum capacity.
|
||||||
*/
|
*/
|
||||||
public float satisfaction = 0.0f;
|
public float status = 0.0f;
|
||||||
public PowerGraph graph = new PowerGraph();
|
public PowerGraph graph = new PowerGraph();
|
||||||
public IntArray links = new IntArray();
|
public IntArray links = new IntArray();
|
||||||
|
|
||||||
@@ -23,7 +23,7 @@ public class PowerModule extends BlockModule{
|
|||||||
for(int i = 0; i < links.size; i++){
|
for(int i = 0; i < links.size; i++){
|
||||||
stream.writeInt(links.get(i));
|
stream.writeInt(links.get(i));
|
||||||
}
|
}
|
||||||
stream.writeFloat(satisfaction);
|
stream.writeFloat(status);
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -32,7 +32,7 @@ public class PowerModule extends BlockModule{
|
|||||||
for(int i = 0; i < amount; i++){
|
for(int i = 0; i < amount; i++){
|
||||||
links.add(stream.readInt());
|
links.add(stream.readInt());
|
||||||
}
|
}
|
||||||
satisfaction = stream.readFloat();
|
status = stream.readFloat();
|
||||||
if(Float.isNaN(satisfaction) || Float.isInfinite(satisfaction)) satisfaction = 0f;
|
if(Float.isNaN(status) || Float.isInfinite(status)) status = 0f;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -40,7 +40,7 @@ task dist(type: Jar, dependsOn: classes){
|
|||||||
from {configurations.compile.collect {zipTree(it)}}
|
from {configurations.compile.collect {zipTree(it)}}
|
||||||
from files(project.assetsDir)
|
from files(project.assetsDir)
|
||||||
|
|
||||||
archiveName = "${appName}.jar"
|
archiveFileName = "${appName}.jar"
|
||||||
|
|
||||||
manifest{
|
manifest{
|
||||||
attributes 'Main-Class': project.mainClassName
|
attributes 'Main-Class': project.mainClassName
|
||||||
@@ -163,8 +163,8 @@ PackrConfig.Platform.values().each{ platform ->
|
|||||||
|
|
||||||
task "zip${platform.toString()}"(type: Zip){
|
task "zip${platform.toString()}"(type: Zip){
|
||||||
from "build/packr/output"
|
from "build/packr/output"
|
||||||
archiveName "${generateDeployName(platform.toString())}.zip"
|
archiveFileName = "${generateDeployName(platform.toString())}.zip"
|
||||||
destinationDir(file("../deploy"))
|
destinationDirectory = (file("../deploy"))
|
||||||
|
|
||||||
doLast{
|
doLast{
|
||||||
delete{
|
delete{
|
||||||
|
|||||||
@@ -35,7 +35,6 @@ import java.util.*;
|
|||||||
|
|
||||||
import static io.anuke.mindustry.Vars.*;
|
import static io.anuke.mindustry.Vars.*;
|
||||||
|
|
||||||
|
|
||||||
public class DesktopLauncher extends ClientLauncher{
|
public class DesktopLauncher extends ClientLauncher{
|
||||||
public final static String discordID = "610508934456934412";
|
public final static String discordID = "610508934456934412";
|
||||||
|
|
||||||
|
|||||||
@@ -1,3 +1,3 @@
|
|||||||
org.gradle.daemon=true
|
org.gradle.daemon=true
|
||||||
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
org.gradle.jvmargs=-Xms256m -Xmx1024m
|
||||||
archash=60e1edbc61f05c329019d0c5479672a298a9706c
|
archash=68a64d9e8a3016ad433d0959be78f6acdcdaa385
|
||||||
|
|||||||
@@ -1,5 +1,5 @@
|
|||||||
distributionBase=GRADLE_USER_HOME
|
distributionBase=GRADLE_USER_HOME
|
||||||
distributionPath=wrapper/dists
|
distributionPath=wrapper/dists
|
||||||
distributionUrl=https\://services.gradle.org/distributions/gradle-5.5-bin.zip
|
distributionUrl=https\://services.gradle.org/distributions/gradle-6.0-bin.zip
|
||||||
zipStoreBase=GRADLE_USER_HOME
|
zipStoreBase=GRADLE_USER_HOME
|
||||||
zipStorePath=wrapper/dists
|
zipStorePath=wrapper/dists
|
||||||
|
|||||||
@@ -1,4 +1,20 @@
|
|||||||
#!/usr/bin/env bash
|
#!/usr/bin/env sh
|
||||||
|
|
||||||
|
#
|
||||||
|
# Copyright 2015 the original author or authors.
|
||||||
|
#
|
||||||
|
# Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
# you may not use this file except in compliance with the License.
|
||||||
|
# You may obtain a copy of the License at
|
||||||
|
#
|
||||||
|
# https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
#
|
||||||
|
# Unless required by applicable law or agreed to in writing, software
|
||||||
|
# distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
# WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
# See the License for the specific language governing permissions and
|
||||||
|
# limitations under the License.
|
||||||
|
#
|
||||||
|
|
||||||
##############################################################################
|
##############################################################################
|
||||||
##
|
##
|
||||||
@@ -28,7 +44,7 @@ APP_NAME="Gradle"
|
|||||||
APP_BASE_NAME=`basename "$0"`
|
APP_BASE_NAME=`basename "$0"`
|
||||||
|
|
||||||
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
# Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
DEFAULT_JVM_OPTS=""
|
DEFAULT_JVM_OPTS='"-Xmx64m" "-Xms64m"'
|
||||||
|
|
||||||
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
# Use the maximum available, or set MAX_FD != -1 to use that value.
|
||||||
MAX_FD="maximum"
|
MAX_FD="maximum"
|
||||||
|
|||||||
@@ -1,3 +1,19 @@
|
|||||||
|
@rem
|
||||||
|
@rem Copyright 2015 the original author or authors.
|
||||||
|
@rem
|
||||||
|
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
|
@rem you may not use this file except in compliance with the License.
|
||||||
|
@rem You may obtain a copy of the License at
|
||||||
|
@rem
|
||||||
|
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||||
|
@rem
|
||||||
|
@rem Unless required by applicable law or agreed to in writing, software
|
||||||
|
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
|
@rem See the License for the specific language governing permissions and
|
||||||
|
@rem limitations under the License.
|
||||||
|
@rem
|
||||||
|
|
||||||
@if "%DEBUG%" == "" @echo off
|
@if "%DEBUG%" == "" @echo off
|
||||||
@rem ##########################################################################
|
@rem ##########################################################################
|
||||||
@rem
|
@rem
|
||||||
@@ -14,7 +30,7 @@ set APP_BASE_NAME=%~n0
|
|||||||
set APP_HOME=%DIRNAME%
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
@rem Add default JVM options here. You can also use JAVA_OPTS and GRADLE_OPTS to pass JVM options to this script.
|
||||||
set DEFAULT_JVM_OPTS=
|
set DEFAULT_JVM_OPTS="-Xmx64m" "-Xms64m"
|
||||||
|
|
||||||
@rem Find java.exe
|
@rem Find java.exe
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|||||||
@@ -39,7 +39,8 @@ public class IOSLauncher extends IOSApplication.Delegate{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void showFileChooser(boolean open, String extension, Cons<FileHandle> cons){
|
public void showFileChooser(boolean open, String extension, Cons<FileHandle> cons){
|
||||||
UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController((NSArray)null);
|
UIDocumentBrowserViewController cont = new UIDocumentBrowserViewController((NSArray<NSString>)null);
|
||||||
|
|
||||||
|
|
||||||
NSArray<UIBarButtonItem> arr = new NSArray<>(new UIBarButtonItem(Core.bundle.get("cancel"), UIBarButtonItemStyle.Plain,
|
NSArray<UIBarButtonItem> arr = new NSArray<>(new UIBarButtonItem(Core.bundle.get("cancel"), UIBarButtonItemStyle.Plain,
|
||||||
uiBarButtonItem -> cont.dismissViewController(true, () -> {})));
|
uiBarButtonItem -> cont.dismissViewController(true, () -> {})));
|
||||||
@@ -58,6 +59,112 @@ public class IOSLauncher extends IOSApplication.Delegate{
|
|||||||
if(documentURLs.size() < 1) return;
|
if(documentURLs.size() < 1) return;
|
||||||
|
|
||||||
cont.dismissViewController(true, () -> {});
|
cont.dismissViewController(true, () -> {});
|
||||||
|
NSFileCoordinator coord = new NSFileCoordinator(null);
|
||||||
|
|
||||||
|
try{
|
||||||
|
coord.coordinateReadingItem(documentURLs.get(0), NSFileCoordinatorReadingOptions.None, url -> {
|
||||||
|
if(url.startAccessingSecurityScopedResource()){
|
||||||
|
try{
|
||||||
|
controller.importDocument(url, new NSURL(getDocumentsDirectory() + "/document"), UIDocumentBrowserImportMode.Copy, (result, error) -> {
|
||||||
|
if(error != null){
|
||||||
|
ui.showErrorMessage("Import error.\n" + error.getLocalizedFailureReason() + "\n" + error.getLocalizedDescription());
|
||||||
|
}else{
|
||||||
|
try{
|
||||||
|
cons.get(Core.files.absolute(url.getPath()));
|
||||||
|
}catch(Throwable t){
|
||||||
|
ui.showException(t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
});
|
||||||
|
}catch(Throwable t){
|
||||||
|
ui.showException(t);
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
|
||||||
|
try{
|
||||||
|
int[] tread = {0};
|
||||||
|
|
||||||
|
cons.get(new FileHandle(url.getPath()){
|
||||||
|
@Override
|
||||||
|
public InputStream read(){
|
||||||
|
NSInputStream stream = new NSInputStream(url);
|
||||||
|
|
||||||
|
return new InputStream(){
|
||||||
|
byte[] tmp = {0};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read() throws IOException{
|
||||||
|
read(tmp);
|
||||||
|
return tmp[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read(byte[] bytes, int offset, int length){
|
||||||
|
int read = (int)stream.read(bytes, offset, length);
|
||||||
|
tread[0] += read;
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Core.app.post(() -> Core.app.post(() -> Core.app.post(() -> ui.showInfo("Read " + tread[0]))));
|
||||||
|
//cons.get(new FileHandle(url.getAbsoluteString()));
|
||||||
|
}catch(Throwable t){
|
||||||
|
ui.showException(t);
|
||||||
|
|
||||||
|
try{
|
||||||
|
cons.get(new FileHandle(url.getPath()));
|
||||||
|
}catch(Throwable t2){
|
||||||
|
ui.showException(t2);
|
||||||
|
|
||||||
|
try{
|
||||||
|
cons.get(new FileHandle(url.getAbsoluteURL().getPath()));
|
||||||
|
}catch(Throwable t3){
|
||||||
|
ui.showException(t3);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}*/
|
||||||
|
}else{
|
||||||
|
ui.showErrorMessage("Failed to access file.");
|
||||||
|
}
|
||||||
|
|
||||||
|
/*
|
||||||
|
try{
|
||||||
|
int[] tread = {0};
|
||||||
|
|
||||||
|
cons.get(new FileHandle(url.getPath()){
|
||||||
|
@Override
|
||||||
|
public InputStream read(){
|
||||||
|
NSInputStream stream = new NSInputStream(url);
|
||||||
|
|
||||||
|
return new InputStream(){
|
||||||
|
byte[] tmp = {0};
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read() throws IOException{
|
||||||
|
read(tmp);
|
||||||
|
return tmp[0];
|
||||||
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public int read(byte[] bytes, int offset, int length){
|
||||||
|
int read = (int)stream.read(bytes, offset, length);
|
||||||
|
tread[0] += read;
|
||||||
|
return read;
|
||||||
|
}
|
||||||
|
};
|
||||||
|
}
|
||||||
|
});
|
||||||
|
Core.app.post(() -> Core.app.post(() -> Core.app.post(() -> ui.showInfo("Read " + tread[0]))));
|
||||||
|
}catch(Throwable t){
|
||||||
|
ui.showException(t);
|
||||||
|
}*/
|
||||||
|
});
|
||||||
|
}catch(Throwable t){
|
||||||
|
ui.showException(t);
|
||||||
|
}
|
||||||
|
/*
|
||||||
|
|
||||||
try{
|
try{
|
||||||
controller.importDocument(documentURLs.get(0), new NSURL(getDocumentsDirectory() + "/document"), UIDocumentBrowserImportMode.Copy, (url, error) -> {
|
controller.importDocument(documentURLs.get(0), new NSURL(getDocumentsDirectory() + "/document"), UIDocumentBrowserImportMode.Copy, (url, error) -> {
|
||||||
@@ -73,7 +180,7 @@ public class IOSLauncher extends IOSApplication.Delegate{
|
|||||||
});
|
});
|
||||||
}catch(Throwable t){
|
}catch(Throwable t){
|
||||||
ui.showException(t);
|
ui.showException(t);
|
||||||
}
|
}*/
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -83,7 +190,7 @@ public class IOSLauncher extends IOSApplication.Delegate{
|
|||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void didImportDocument(UIDocumentBrowserViewController controller, NSURL sourceURL, NSURL destinationURL){
|
public void didImportDocument(UIDocumentBrowserViewController controller, NSURL sourceURL, NSURL destinationURL){
|
||||||
cons.get(Core.files.absolute(destinationURL.getAbsoluteString()));
|
//cons.get(Core.files.absolute(destinationURL.getAbsoluteString()));
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
@@ -104,24 +211,22 @@ public class IOSLauncher extends IOSApplication.Delegate{
|
|||||||
|
|
||||||
cont.setDelegate(new ChooserDelegate());
|
cont.setDelegate(new ChooserDelegate());
|
||||||
|
|
||||||
// DispatchQueue.getMainQueue().sync(() -> {
|
|
||||||
UIApplication.getSharedApplication().getKeyWindow().getRootViewController().presentViewController(cont, true, () -> {});
|
UIApplication.getSharedApplication().getKeyWindow().getRootViewController().presentViewController(cont, true, () -> {});
|
||||||
// });
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shareFile(FileHandle file){
|
public void shareFile(FileHandle file){
|
||||||
|
try{
|
||||||
Log.info("Attempting to share file " + file);
|
Log.info("Attempting to share file " + file);
|
||||||
FileHandle to = Core.files.absolute(getDocumentsDirectory()).child(file.name());
|
FileHandle to = Core.files.absolute(getDocumentsDirectory()).child(file.name());
|
||||||
file.copyTo(to);
|
file.copyTo(to);
|
||||||
|
|
||||||
NSURL url = new NSURL(to.file());
|
NSURL url = new NSURL(to.file());
|
||||||
UIActivityViewController p = new UIActivityViewController(Collections.singletonList(url), null);
|
UIActivityViewController p = new UIActivityViewController(Collections.singletonList(url), null);
|
||||||
|
UIApplication.getSharedApplication().getKeyWindow().getRootViewController().presentViewController(p, true, () -> Log.info("Success! Presented {0}", to));
|
||||||
//DispatchQueue.getMainQueue().sync(() -> {
|
}catch(Throwable t){
|
||||||
UIApplication.getSharedApplication().getKeyWindow().getRootViewController()
|
ui.showException(t);
|
||||||
.presentViewController(p, true, () -> Log.info("Success! Presented {0}", to));
|
}
|
||||||
//});
|
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -51,8 +51,8 @@ task dist(type: Jar){
|
|||||||
|
|
||||||
task dzip(type: Zip){
|
task dzip(type: Zip){
|
||||||
from getServerFolder()
|
from getServerFolder()
|
||||||
archiveName "${generateDeployName('server')}.zip"
|
archiveFileName = "${generateDeployName('server')}.zip"
|
||||||
destinationDir(file("../deploy/"))
|
destinationDirectory = file("../deploy/")
|
||||||
|
|
||||||
finalizedBy 'cleanup'
|
finalizedBy 'cleanup'
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -8,6 +8,8 @@ import io.anuke.arc.util.*;
|
|||||||
import io.anuke.arc.util.Timer;
|
import io.anuke.arc.util.Timer;
|
||||||
import io.anuke.arc.util.CommandHandler.*;
|
import io.anuke.arc.util.CommandHandler.*;
|
||||||
import io.anuke.arc.util.Timer.*;
|
import io.anuke.arc.util.Timer.*;
|
||||||
|
import io.anuke.arc.util.serialization.*;
|
||||||
|
import io.anuke.arc.util.serialization.JsonValue.*;
|
||||||
import io.anuke.mindustry.*;
|
import io.anuke.mindustry.*;
|
||||||
import io.anuke.mindustry.core.GameState.*;
|
import io.anuke.mindustry.core.GameState.*;
|
||||||
import io.anuke.mindustry.core.*;
|
import io.anuke.mindustry.core.*;
|
||||||
@@ -59,7 +61,8 @@ public class ServerControl implements ApplicationListener{
|
|||||||
"crashreport", false,
|
"crashreport", false,
|
||||||
"port", port,
|
"port", port,
|
||||||
"logging", true,
|
"logging", true,
|
||||||
"socket", false
|
"socket", false,
|
||||||
|
"globalrules", "{reactorExplosions: false}"
|
||||||
);
|
);
|
||||||
|
|
||||||
Log.setLogger(new LogHandler(){
|
Log.setLogger(new LogHandler(){
|
||||||
@@ -142,6 +145,7 @@ public class ServerControl implements ApplicationListener{
|
|||||||
Events.on(GameOverEvent.class, event -> {
|
Events.on(GameOverEvent.class, event -> {
|
||||||
if(inExtraRound) return;
|
if(inExtraRound) return;
|
||||||
info("Game over!");
|
info("Game over!");
|
||||||
|
displayStatus();
|
||||||
|
|
||||||
if(Core.settings.getBool("shuffle")){
|
if(Core.settings.getBool("shuffle")){
|
||||||
if(maps.all().size > 0){
|
if(maps.all().size > 0){
|
||||||
@@ -251,6 +255,7 @@ public class ServerControl implements ApplicationListener{
|
|||||||
try{
|
try{
|
||||||
world.loadMap(result, result.applyRules(lastMode));
|
world.loadMap(result, result.applyRules(lastMode));
|
||||||
state.rules = result.applyRules(preset);
|
state.rules = result.applyRules(preset);
|
||||||
|
applyRules();
|
||||||
logic.play();
|
logic.play();
|
||||||
|
|
||||||
info("Map loaded.");
|
info("Map loaded.");
|
||||||
@@ -299,29 +304,7 @@ public class ServerControl implements ApplicationListener{
|
|||||||
});
|
});
|
||||||
|
|
||||||
handler.register("status", "Display server status.", arg -> {
|
handler.register("status", "Display server status.", arg -> {
|
||||||
if(state.is(State.menu)){
|
displayStatus();
|
||||||
info("Status: &rserver closed");
|
|
||||||
}else{
|
|
||||||
info("Status:");
|
|
||||||
info(" &lyPlaying on map &fi{0}&fb &lb/&ly Wave {1}", Strings.capitalize(world.getMap().name()), state.wave);
|
|
||||||
|
|
||||||
if(state.rules.waves){
|
|
||||||
info("&ly {0} enemies.", unitGroups[Team.crux.ordinal()].size());
|
|
||||||
}else{
|
|
||||||
info("&ly {0} seconds until next wave.", (int)(state.wavetime / 60));
|
|
||||||
}
|
|
||||||
|
|
||||||
info(" &ly{0} FPS, {1} MB used.", (int)(60f / Time.delta()), Core.app.getJavaHeap() / 1024 / 1024);
|
|
||||||
|
|
||||||
if(playerGroup.size() > 0){
|
|
||||||
info(" &lyPlayers: {0}", playerGroup.size());
|
|
||||||
for(Player p : playerGroup.all()){
|
|
||||||
info(" &y{0} / {1}", p.name, p.uuid);
|
|
||||||
}
|
|
||||||
}else{
|
|
||||||
info(" &lyNo players connected.");
|
|
||||||
}
|
|
||||||
}
|
|
||||||
});
|
});
|
||||||
|
|
||||||
handler.register("mods", "Display all loaded mods.", arg -> {
|
handler.register("mods", "Display all loaded mods.", arg -> {
|
||||||
@@ -369,6 +352,58 @@ public class ServerControl implements ApplicationListener{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
|
handler.register("rules", "[remove/add] [name] [value...]", "List, remove or add global rules. These will apply regardless of map.", arg -> {
|
||||||
|
String rules = Core.settings.getString("globalrules");
|
||||||
|
JsonValue base = JsonIO.json().fromJson(null, rules);
|
||||||
|
|
||||||
|
if(arg.length == 0){
|
||||||
|
Log.info("&lyRules:\n{0}", JsonIO.print(rules));
|
||||||
|
}else if(arg.length == 1){
|
||||||
|
Log.err("Invalid usage. Specify which rule to remove or add.");
|
||||||
|
}else{
|
||||||
|
if(!(arg[0].equals("remove") || arg[0].equals("add"))){
|
||||||
|
Log.err("Invalid usage. Either add or remove rules.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
boolean remove = arg[0].equals("remove");
|
||||||
|
if(remove){
|
||||||
|
if(base.has(arg[1])){
|
||||||
|
Log.info("Rule &lc'{0}'&lg removed.", arg[1]);
|
||||||
|
base.remove(arg[1]);
|
||||||
|
}else{
|
||||||
|
Log.err("Rule not defined, so not removed.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
if(arg.length < 3){
|
||||||
|
Log.err("Missing last argument. Specify which value to set the rule to.");
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
try{
|
||||||
|
JsonValue value = new JsonReader().parse(arg[2]);
|
||||||
|
value.name = arg[1];
|
||||||
|
|
||||||
|
JsonValue parent = new JsonValue(ValueType.object);
|
||||||
|
parent.addChild(value);
|
||||||
|
|
||||||
|
JsonIO.json().readField(state.rules, value.name, parent);
|
||||||
|
if(base.has(value.name)){
|
||||||
|
base.remove(value.name);
|
||||||
|
}
|
||||||
|
base.addChild(arg[1], value);
|
||||||
|
Log.info("Changed rule: &ly{0}", value.toString().replace("\n", " "));
|
||||||
|
}catch(Throwable e){
|
||||||
|
Log.err("Error parsing rule JSON", e);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
Core.settings.putSave("globalrules", base.toString());
|
||||||
|
Call.onSetRules(state.rules);
|
||||||
|
}
|
||||||
|
});
|
||||||
|
|
||||||
handler.register("fillitems", "[team]", "Fill the core with items.", arg -> {
|
handler.register("fillitems", "[team]", "Fill the core with items.", arg -> {
|
||||||
if(!state.is(State.playing)){
|
if(!state.is(State.playing)){
|
||||||
err("Not playing. Host first.");
|
err("Not playing. Host first.");
|
||||||
@@ -765,6 +800,41 @@ public class ServerControl implements ApplicationListener{
|
|||||||
mods.each(p -> p.registerClientCommands(netServer.clientCommands));
|
mods.each(p -> p.registerClientCommands(netServer.clientCommands));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private void applyRules(){
|
||||||
|
try{
|
||||||
|
JsonValue value = JsonIO.json().fromJson(null, Core.settings.getString("globalrules"));
|
||||||
|
JsonIO.json().readFields(state.rules, value);
|
||||||
|
}catch(Throwable t){
|
||||||
|
Log.err("Error applying custom rules, proceeding without them.", t);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
|
private void displayStatus() {
|
||||||
|
if(state.is(State.menu)){
|
||||||
|
info("Status: &rserver closed");
|
||||||
|
}else{
|
||||||
|
info("Status:");
|
||||||
|
info(" &lyPlaying on map &fi{0}&fb &lb/&ly Wave {1}", Strings.capitalize(world.getMap().name()), state.wave);
|
||||||
|
|
||||||
|
if(state.rules.waves){
|
||||||
|
info("&ly {0} enemies.", unitGroups[Team.crux.ordinal()].size());
|
||||||
|
}else{
|
||||||
|
info("&ly {0} seconds until next wave.", (int)(state.wavetime / 60));
|
||||||
|
}
|
||||||
|
|
||||||
|
info(" &ly{0} FPS, {1} MB used.", (int)(60f / Time.delta()), Core.app.getJavaHeap() / 1024 / 1024);
|
||||||
|
|
||||||
|
if(playerGroup.size() > 0){
|
||||||
|
info(" &lyPlayers: {0}", playerGroup.size());
|
||||||
|
for(Player p : playerGroup.all()){
|
||||||
|
info(" &y{0} / {1}", p.name, p.uuid);
|
||||||
|
}
|
||||||
|
}else{
|
||||||
|
info(" &lyNo players connected.");
|
||||||
|
}
|
||||||
|
}
|
||||||
|
}
|
||||||
|
|
||||||
private void readCommands(){
|
private void readCommands(){
|
||||||
|
|
||||||
Scanner scan = new Scanner(System.in);
|
Scanner scan = new Scanner(System.in);
|
||||||
@@ -819,6 +889,7 @@ public class ServerControl implements ApplicationListener{
|
|||||||
run.run();
|
run.run();
|
||||||
logic.play();
|
logic.play();
|
||||||
state.rules = world.getMap().applyRules(lastMode);
|
state.rules = world.getMap().applyRules(lastMode);
|
||||||
|
applyRules();
|
||||||
|
|
||||||
for(Player p : players){
|
for(Player p : players){
|
||||||
if(p.con == null) continue;
|
if(p.con == null) continue;
|
||||||
|
|||||||
@@ -50,6 +50,6 @@ public class DirectConsumerTests extends PowerTestFixture{
|
|||||||
consumerTile.entity.update();
|
consumerTile.entity.update();
|
||||||
graph.update();
|
graph.update();
|
||||||
|
|
||||||
assertEquals(expectedSatisfaction, consumerTile.entity.power.satisfaction);
|
assertEquals(expectedSatisfaction, consumerTile.entity.power.status);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -20,7 +20,7 @@ import static org.junit.jupiter.api.DynamicTest.dynamicTest;
|
|||||||
* All tests are run with a fixed delta of 0.5 so delta considerations can be tested as well.
|
* All tests are run with a fixed delta of 0.5 so delta considerations can be tested as well.
|
||||||
* Additionally, each PowerGraph::update() call will have its own thread frame, i.e. the method will never be called twice within the same frame.
|
* Additionally, each PowerGraph::update() call will have its own thread frame, i.e. the method will never be called twice within the same frame.
|
||||||
* Both of these constraints are handled by FakeThreadHandler within PowerTestFixture.
|
* Both of these constraints are handled by FakeThreadHandler within PowerTestFixture.
|
||||||
* Any expected power amount (produced, consumed, buffered) should be affected by FakeThreadHandler.fakeDelta but satisfaction should not!
|
* Any expected power amount (produced, consumed, buffered) should be affected by FakeThreadHandler.fakeDelta but status should not!
|
||||||
*/
|
*/
|
||||||
public class ItemLiquidGeneratorTests extends PowerTestFixture{
|
public class ItemLiquidGeneratorTests extends PowerTestFixture{
|
||||||
|
|
||||||
|
|||||||
@@ -16,7 +16,7 @@ import static org.junit.jupiter.api.DynamicTest.dynamicTest;
|
|||||||
* All tests are run with a fixed delta of 0.5 so delta considerations can be tested as well.
|
* All tests are run with a fixed delta of 0.5 so delta considerations can be tested as well.
|
||||||
* Additionally, each PowerGraph::update() call will have its own thread frame, i.e. the method will never be called twice within the same frame.
|
* Additionally, each PowerGraph::update() call will have its own thread frame, i.e. the method will never be called twice within the same frame.
|
||||||
* Both of these constraints are handled by FakeThreadHandler within PowerTestFixture.
|
* Both of these constraints are handled by FakeThreadHandler within PowerTestFixture.
|
||||||
* Any power amount (produced, consumed, buffered) should be affected by Time.delta() but satisfaction should not!
|
* Any power amount (produced, consumed, buffered) should be affected by Time.delta() but status should not!
|
||||||
*/
|
*/
|
||||||
public class PowerTests extends PowerTestFixture{
|
public class PowerTests extends PowerTestFixture{
|
||||||
|
|
||||||
@@ -29,9 +29,9 @@ public class PowerTests extends PowerTestFixture{
|
|||||||
class PowerGraphTests{
|
class PowerGraphTests{
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the satisfaction of a single consumer after a single update of the power graph which contains a single producer.
|
* Tests the status of a single consumer after a single update of the power graph which contains a single producer.
|
||||||
* <p>
|
* <p>
|
||||||
* Assumption: When the consumer requests zero power, satisfaction does not change. Default is 0.0f.
|
* Assumption: When the consumer requests zero power, status does not change. Default is 0.0f.
|
||||||
*/
|
*/
|
||||||
@TestFactory
|
@TestFactory
|
||||||
DynamicTest[] directConsumerSatisfactionIsAsExpected(){
|
DynamicTest[] directConsumerSatisfactionIsAsExpected(){
|
||||||
@@ -61,13 +61,13 @@ public class PowerTests extends PowerTestFixture{
|
|||||||
assertEquals(producedPower * Time.delta(), powerGraph.getPowerProduced(), Mathf.FLOAT_ROUNDING_ERROR);
|
assertEquals(producedPower * Time.delta(), powerGraph.getPowerProduced(), Mathf.FLOAT_ROUNDING_ERROR);
|
||||||
assertEquals(requiredPower * Time.delta(), powerGraph.getPowerNeeded(), Mathf.FLOAT_ROUNDING_ERROR);
|
assertEquals(requiredPower * Time.delta(), powerGraph.getPowerNeeded(), Mathf.FLOAT_ROUNDING_ERROR);
|
||||||
|
|
||||||
// Update and check for the expected power satisfaction of the consumer
|
// Update and check for the expected power status of the consumer
|
||||||
powerGraph.update();
|
powerGraph.update();
|
||||||
assertEquals(expectedSatisfaction, directConsumerTile.entity.power.satisfaction, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Satisfaction of direct consumer did not match");
|
assertEquals(expectedSatisfaction, directConsumerTile.entity.power.status, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Satisfaction of direct consumer did not match");
|
||||||
}
|
}
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Tests the satisfaction of a single direct consumer after a single update of the power graph which contains a single producer and a single battery.
|
* Tests the status of a single direct consumer after a single update of the power graph which contains a single producer and a single battery.
|
||||||
* The used battery is created with a maximum capacity of 100 and receives ten power per tick.
|
* The used battery is created with a maximum capacity of 100 and receives ten power per tick.
|
||||||
*/
|
*/
|
||||||
@TestFactory
|
@TestFactory
|
||||||
@@ -101,14 +101,14 @@ public class PowerTests extends PowerTestFixture{
|
|||||||
}
|
}
|
||||||
float maxCapacity = 100f;
|
float maxCapacity = 100f;
|
||||||
Tile batteryTile = createFakeTile(0, 2, createFakeBattery(maxCapacity));
|
Tile batteryTile = createFakeTile(0, 2, createFakeBattery(maxCapacity));
|
||||||
batteryTile.entity.power.satisfaction = initialBatteryCapacity / maxCapacity;
|
batteryTile.entity.power.status = initialBatteryCapacity / maxCapacity;
|
||||||
|
|
||||||
powerGraph.add(batteryTile);
|
powerGraph.add(batteryTile);
|
||||||
|
|
||||||
powerGraph.update();
|
powerGraph.update();
|
||||||
assertEquals(expectedBatteryCapacity / maxCapacity, batteryTile.entity.power.satisfaction, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Expected battery satisfaction did not match");
|
assertEquals(expectedBatteryCapacity / maxCapacity, batteryTile.entity.power.status, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Expected battery status did not match");
|
||||||
if(directConsumerTile != null){
|
if(directConsumerTile != null){
|
||||||
assertEquals(expectedSatisfaction, directConsumerTile.entity.power.satisfaction, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Satisfaction of direct consumer did not match");
|
assertEquals(expectedSatisfaction, directConsumerTile.entity.power.status, Mathf.FLOAT_ROUNDING_ERROR, parameterDescription + ": Satisfaction of direct consumer did not match");
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@@ -124,13 +124,13 @@ public class PowerTests extends PowerTestFixture{
|
|||||||
powerGraph.add(consumerTile);
|
powerGraph.add(consumerTile);
|
||||||
powerGraph.update();
|
powerGraph.update();
|
||||||
|
|
||||||
assertEquals(1.0f, consumerTile.entity.power.satisfaction, Mathf.FLOAT_ROUNDING_ERROR);
|
assertEquals(1.0f, consumerTile.entity.power.status, Mathf.FLOAT_ROUNDING_ERROR);
|
||||||
|
|
||||||
powerGraph.remove(producerTile);
|
powerGraph.remove(producerTile);
|
||||||
powerGraph.add(consumerTile);
|
powerGraph.add(consumerTile);
|
||||||
powerGraph.update();
|
powerGraph.update();
|
||||||
|
|
||||||
assertEquals(0.0f, consumerTile.entity.power.satisfaction, Mathf.FLOAT_ROUNDING_ERROR);
|
assertEquals(0.0f, consumerTile.entity.power.status, Mathf.FLOAT_ROUNDING_ERROR);
|
||||||
if(consumerTile.block().consumes.hasPower()){
|
if(consumerTile.block().consumes.hasPower()){
|
||||||
ConsumePower consumePower = consumerTile.block().consumes.getPower();
|
ConsumePower consumePower = consumerTile.block().consumes.getPower();
|
||||||
assertFalse(consumePower.valid(consumerTile.entity()));
|
assertFalse(consumePower.valid(consumerTile.entity()));
|
||||||
|
|||||||