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{
|
||||||
|
|||||||
BIN
core/assets-raw/sprites/blocks/power/diode-arrow.png
Normal file
|
After Width: | Height: | Size: 1.7 KiB |
BIN
core/assets-raw/sprites/blocks/power/diode.png
Normal file
|
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,15 +1010,15 @@ 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.
|
||||||
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
tutorial.blockinfo = Each block has different stats. Each drill can only mine certain ores.\nTo check a block's info and stats,[accent] tap the "?" button while selecting it in the build menu.[]\n\n[accent]Access the Mechanical Drill's stats now.[]
|
||||||
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\nUse the scrollwheel to rotate blocks before placing them.\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
|
tutorial.conveyor = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent]Hold down the mouse to place in a line.[]\nHold[accent] CTRL[] while selecting a line to place diagonally.\nUse the scrollwheel to rotate blocks before placing them.\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
|
||||||
tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
|
tutorial.conveyor.mobile = [accent]Conveyors[] are used to transport items to the core.\nMake a line of conveyors from the drill to the core.\n[accent] Place in a line by holding down your finger for a few seconds[] and dragging in a direction.\n\n[accent]Place 2 conveyors with the line tool, then deliver an item into the core.
|
||||||
tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base.
|
tutorial.turret = Once an item enters your core, it can be used for building.\nKeep in mind that not all items can be used for building.\nItems that are not used for building, such as[accent] coal[] or[accent] scrap[], cannot be put into the core.\nDefensive structures must be built to repel the[lightgray] enemy[].\nBuild a[accent] duo turret[] near your base.
|
||||||
tutorial.drillturret = Duo turrets require[accent] copper ammo []to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1
|
tutorial.drillturret = Duo turrets require[accent] copper ammo[] to shoot.\nPlace a drill near the turret.\nLead conveyors into the turret to supply it with copper.\n\n[accent]Ammo delivered: 0/1
|
||||||
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
tutorial.pause = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press space to pause.
|
||||||
tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause.
|
tutorial.pause.mobile = During battle, you are able to[accent] pause the game.[]\nYou may queue buildings while paused.\n\n[accent]Press this button in the top left to pause.
|
||||||
tutorial.unpause = Now press space again to unpause.
|
tutorial.unpause = Now press space again to unpause.
|
||||||
@@ -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,8 +215,10 @@ public class TechTree implements ContentList{
|
|||||||
node(combustionGenerator, () -> {
|
node(combustionGenerator, () -> {
|
||||||
node(powerNode, () -> {
|
node(powerNode, () -> {
|
||||||
node(powerNodeLarge, () -> {
|
node(powerNodeLarge, () -> {
|
||||||
node(surgeTower, () -> {
|
node(diode, () -> {
|
||||||
|
node(surgeTower, () -> {
|
||||||
|
|
||||||
|
});
|
||||||
});
|
});
|
||||||
});
|
});
|
||||||
|
|
||||||
|
|||||||
@@ -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,21 +217,23 @@ 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);
|
||||||
int i = 0;
|
dialog.cont.pane(p -> {
|
||||||
for(UnitType type : content.units()){
|
int i = 0;
|
||||||
dialog.cont.addButton(t -> {
|
for(UnitType type : content.units()){
|
||||||
t.left();
|
p.addButton(t -> {
|
||||||
t.addImage(type.icon(io.anuke.mindustry.ui.Cicon.medium)).size(40f).padRight(2f);
|
t.left();
|
||||||
t.add(type.localizedName);
|
t.addImage(type.icon(io.anuke.mindustry.ui.Cicon.medium)).size(40f).padRight(2f);
|
||||||
}, () -> {
|
t.add(type.localizedName);
|
||||||
lastType = type;
|
}, () -> {
|
||||||
group.type = type;
|
lastType = type;
|
||||||
dialog.hide();
|
group.type = type;
|
||||||
buildGroups();
|
dialog.hide();
|
||||||
}).pad(2).margin(12f).fillX();
|
buildGroups();
|
||||||
if(++i % 3 == 0) dialog.cont.row();
|
}).pad(2).margin(12f).fillX();
|
||||||
}
|
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. */
|
||||||
@@ -65,7 +67,7 @@ public class Rules{
|
|||||||
public boolean attackMode = false;
|
public boolean attackMode = false;
|
||||||
/** Whether this is the editor gamemode. */
|
/** Whether this is the editor gamemode. */
|
||||||
public boolean editor = false;
|
public boolean editor = false;
|
||||||
/** Whether the tutorial is enabled. False by default.*/
|
/** Whether the tutorial is enabled. False by default. */
|
||||||
public boolean tutorial = false;
|
public boolean tutorial = false;
|
||||||
/** Starting items put in cores */
|
/** Starting items put in cores */
|
||||||
public Array<ItemStack> loadout = Array.with(ItemStack.with(Items.copper, 100));
|
public Array<ItemStack> loadout = Array.with(ItemStack.with(Items.copper, 100));
|
||||||
|
|||||||
@@ -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,7 +360,11 @@ public class SettingsMenuDialog extends SettingsDialog{
|
|||||||
|
|
||||||
keyDown(key -> {
|
keyDown(key -> {
|
||||||
if(key == KeyCode.ESCAPE || key == KeyCode.BACK){
|
if(key == KeyCode.ESCAPE || key == KeyCode.BACK){
|
||||||
hide();
|
if(prefs.getChildren().first() != menu){
|
||||||
|
back();
|
||||||
|
}else{
|
||||||
|
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
|
||||||
|
|||||||
BIN
gradle/wrapper/gradle-wrapper.jar
vendored
2
gradle/wrapper/gradle-wrapper.properties
vendored
@@ -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
|
||||||
|
|||||||
20
gradlew
vendored
@@ -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"
|
||||||
|
|||||||
184
gradlew.bat
vendored
@@ -1,84 +1,100 @@
|
|||||||
@if "%DEBUG%" == "" @echo off
|
@rem
|
||||||
@rem ##########################################################################
|
@rem Copyright 2015 the original author or authors.
|
||||||
@rem
|
@rem
|
||||||
@rem Gradle startup script for Windows
|
@rem Licensed under the Apache License, Version 2.0 (the "License");
|
||||||
@rem
|
@rem you may not use this file except in compliance with the License.
|
||||||
@rem ##########################################################################
|
@rem You may obtain a copy of the License at
|
||||||
|
@rem
|
||||||
@rem Set local scope for the variables with windows NT shell
|
@rem https://www.apache.org/licenses/LICENSE-2.0
|
||||||
if "%OS%"=="Windows_NT" setlocal
|
@rem
|
||||||
|
@rem Unless required by applicable law or agreed to in writing, software
|
||||||
set DIRNAME=%~dp0
|
@rem distributed under the License is distributed on an "AS IS" BASIS,
|
||||||
if "%DIRNAME%" == "" set DIRNAME=.
|
@rem WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
|
||||||
set APP_BASE_NAME=%~n0
|
@rem See the License for the specific language governing permissions and
|
||||||
set APP_HOME=%DIRNAME%
|
@rem limitations under the License.
|
||||||
|
@rem
|
||||||
@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=
|
@if "%DEBUG%" == "" @echo off
|
||||||
|
@rem ##########################################################################
|
||||||
@rem Find java.exe
|
@rem
|
||||||
if defined JAVA_HOME goto findJavaFromJavaHome
|
@rem Gradle startup script for Windows
|
||||||
|
@rem
|
||||||
set JAVA_EXE=java.exe
|
@rem ##########################################################################
|
||||||
%JAVA_EXE% -version >NUL 2>&1
|
|
||||||
if "%ERRORLEVEL%" == "0" goto init
|
@rem Set local scope for the variables with windows NT shell
|
||||||
|
if "%OS%"=="Windows_NT" setlocal
|
||||||
echo.
|
|
||||||
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
set DIRNAME=%~dp0
|
||||||
echo.
|
if "%DIRNAME%" == "" set DIRNAME=.
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
set APP_BASE_NAME=%~n0
|
||||||
echo location of your Java installation.
|
set APP_HOME=%DIRNAME%
|
||||||
|
|
||||||
goto fail
|
@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="-Xmx64m" "-Xms64m"
|
||||||
:findJavaFromJavaHome
|
|
||||||
set JAVA_HOME=%JAVA_HOME:"=%
|
@rem Find java.exe
|
||||||
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
if defined JAVA_HOME goto findJavaFromJavaHome
|
||||||
|
|
||||||
if exist "%JAVA_EXE%" goto init
|
set JAVA_EXE=java.exe
|
||||||
|
%JAVA_EXE% -version >NUL 2>&1
|
||||||
echo.
|
if "%ERRORLEVEL%" == "0" goto init
|
||||||
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
|
||||||
echo.
|
echo.
|
||||||
echo Please set the JAVA_HOME variable in your environment to match the
|
echo ERROR: JAVA_HOME is not set and no 'java' command could be found in your PATH.
|
||||||
echo location of your Java installation.
|
echo.
|
||||||
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
goto fail
|
echo location of your Java installation.
|
||||||
|
|
||||||
:init
|
goto fail
|
||||||
@rem Get command-line arguments, handling Windows variants
|
|
||||||
|
:findJavaFromJavaHome
|
||||||
if not "%OS%" == "Windows_NT" goto win9xME_args
|
set JAVA_HOME=%JAVA_HOME:"=%
|
||||||
|
set JAVA_EXE=%JAVA_HOME%/bin/java.exe
|
||||||
:win9xME_args
|
|
||||||
@rem Slurp the command line arguments.
|
if exist "%JAVA_EXE%" goto init
|
||||||
set CMD_LINE_ARGS=
|
|
||||||
set _SKIP=2
|
echo.
|
||||||
|
echo ERROR: JAVA_HOME is set to an invalid directory: %JAVA_HOME%
|
||||||
:win9xME_args_slurp
|
echo.
|
||||||
if "x%~1" == "x" goto execute
|
echo Please set the JAVA_HOME variable in your environment to match the
|
||||||
|
echo location of your Java installation.
|
||||||
set CMD_LINE_ARGS=%*
|
|
||||||
|
goto fail
|
||||||
:execute
|
|
||||||
@rem Setup the command line
|
:init
|
||||||
|
@rem Get command-line arguments, handling Windows variants
|
||||||
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
|
||||||
|
if not "%OS%" == "Windows_NT" goto win9xME_args
|
||||||
@rem Execute Gradle
|
|
||||||
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
:win9xME_args
|
||||||
|
@rem Slurp the command line arguments.
|
||||||
:end
|
set CMD_LINE_ARGS=
|
||||||
@rem End local scope for the variables with windows NT shell
|
set _SKIP=2
|
||||||
if "%ERRORLEVEL%"=="0" goto mainEnd
|
|
||||||
|
:win9xME_args_slurp
|
||||||
:fail
|
if "x%~1" == "x" goto execute
|
||||||
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
|
||||||
rem the _cmd.exe /c_ return code!
|
set CMD_LINE_ARGS=%*
|
||||||
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
|
||||||
exit /b 1
|
:execute
|
||||||
|
@rem Setup the command line
|
||||||
:mainEnd
|
|
||||||
if "%OS%"=="Windows_NT" endlocal
|
set CLASSPATH=%APP_HOME%\gradle\wrapper\gradle-wrapper.jar
|
||||||
|
|
||||||
:omega
|
@rem Execute Gradle
|
||||||
|
"%JAVA_EXE%" %DEFAULT_JVM_OPTS% %JAVA_OPTS% %GRADLE_OPTS% "-Dorg.gradle.appname=%APP_BASE_NAME%" -classpath "%CLASSPATH%" org.gradle.wrapper.GradleWrapperMain %CMD_LINE_ARGS%
|
||||||
|
|
||||||
|
:end
|
||||||
|
@rem End local scope for the variables with windows NT shell
|
||||||
|
if "%ERRORLEVEL%"=="0" goto mainEnd
|
||||||
|
|
||||||
|
:fail
|
||||||
|
rem Set variable GRADLE_EXIT_CONSOLE if you need the _script_ return code instead of
|
||||||
|
rem the _cmd.exe /c_ return code!
|
||||||
|
if not "" == "%GRADLE_EXIT_CONSOLE%" exit 1
|
||||||
|
exit /b 1
|
||||||
|
|
||||||
|
:mainEnd
|
||||||
|
if "%OS%"=="Windows_NT" endlocal
|
||||||
|
|
||||||
|
:omega
|
||||||
|
|||||||
@@ -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){
|
||||||
Log.info("Attempting to share file " + file);
|
try{
|
||||||
FileHandle to = Core.files.absolute(getDocumentsDirectory()).child(file.name());
|
Log.info("Attempting to share file " + file);
|
||||||
file.copyTo(to);
|
FileHandle to = Core.files.absolute(getDocumentsDirectory()).child(file.name());
|
||||||
|
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){
|
||||||
@@ -249,8 +253,9 @@ public class ServerControl implements ApplicationListener{
|
|||||||
logic.reset();
|
logic.reset();
|
||||||
lastMode = preset;
|
lastMode = preset;
|
||||||
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()));
|
||||||
|
|||||||