Compare commits
40 Commits
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
34b22f292c | ||
|
|
11ad5a0373 | ||
|
|
f4fabecce7 | ||
|
|
60fc2fb5cd | ||
|
|
04eba618d2 | ||
|
|
ac7b694e91 | ||
|
|
4fcb338d94 | ||
|
|
6dc3b7e729 | ||
|
|
cdb9fa0d7d | ||
|
|
2b11e1fb1e | ||
|
|
697c6a927a | ||
|
|
72b456fca2 | ||
|
|
f67e2c71e7 | ||
|
|
bee977cadc | ||
|
|
183ebb33b7 | ||
|
|
f6665de2e6 | ||
|
|
97390d25c0 | ||
|
|
3f1d957e28 | ||
|
|
e62a5888ef | ||
|
|
6d71bcd2eb | ||
|
|
2075a226e1 | ||
|
|
f55363a932 | ||
|
|
76f151789a | ||
|
|
1413b479ef | ||
|
|
b322b1165f | ||
|
|
fa02d8d280 | ||
|
|
251e10b000 | ||
|
|
6630f88613 | ||
|
|
c5c65d4475 | ||
|
|
c267743874 | ||
|
|
45ce8c8dec | ||
|
|
25c65e80cd | ||
|
|
e51ab514a8 | ||
|
|
21d64157a0 | ||
|
|
fff8f567d0 | ||
|
|
1e2e0a48a1 | ||
|
|
affa30730a | ||
|
|
b326bdf0e8 | ||
|
|
cc3694ce4a | ||
|
|
3048e38bff |
2
.github/workflows/push.yml
vendored
@@ -40,6 +40,8 @@ jobs:
|
|||||||
- name: Update JITpack repo
|
- name: Update JITpack repo
|
||||||
if: ${{ github.repository == 'Anuken/Mindustry' }}
|
if: ${{ github.repository == 'Anuken/Mindustry' }}
|
||||||
run: |
|
run: |
|
||||||
|
git config --global user.name "Github Actions"
|
||||||
|
git config --global user.email "cli@github.com"
|
||||||
cd ../
|
cd ../
|
||||||
cp -r ./Mindustry ./MindustryJitpack
|
cp -r ./Mindustry ./MindustryJitpack
|
||||||
cd MindustryJitpack
|
cd MindustryJitpack
|
||||||
|
|||||||
@@ -3,7 +3,6 @@
|
|||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -3,7 +3,6 @@
|
|||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.9 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -3,7 +3,6 @@
|
|||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.9 KiB |
@@ -3,7 +3,6 @@
|
|||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.1 KiB After Width: | Height: | Size: 2.1 KiB |
@@ -3,7 +3,6 @@
|
|||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 1.8 KiB After Width: | Height: | Size: 1.8 KiB |
@@ -3,7 +3,6 @@
|
|||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.0 KiB After Width: | Height: | Size: 2.0 KiB |
@@ -3,7 +3,6 @@
|
|||||||
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
xmlns:dc="http://purl.org/dc/elements/1.1/"
|
||||||
xmlns:cc="http://creativecommons.org/ns#"
|
xmlns:cc="http://creativecommons.org/ns#"
|
||||||
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#"
|
||||||
xmlns:svg="http://www.w3.org/2000/svg"
|
|
||||||
xmlns="http://www.w3.org/2000/svg"
|
xmlns="http://www.w3.org/2000/svg"
|
||||||
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
xmlns:sodipodi="http://sodipodi.sourceforge.net/DTD/sodipodi-0.dtd"
|
||||||
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
xmlns:inkscape="http://www.inkscape.org/namespaces/inkscape"
|
||||||
|
|||||||
|
Before Width: | Height: | Size: 2.7 KiB After Width: | Height: | Size: 2.8 KiB |
BIN
core/assets-raw/sprites/blocks/turrets/duo/duo-barrel-l.png
Normal file
|
After Width: | Height: | Size: 203 B |
BIN
core/assets-raw/sprites/blocks/turrets/duo/duo-barrel-r.png
Normal file
|
After Width: | Height: | Size: 209 B |
|
Before Width: | Height: | Size: 373 B After Width: | Height: | Size: 373 B |
BIN
core/assets-raw/sprites/blocks/turrets/duo/duo.png
Normal file
|
After Width: | Height: | Size: 367 B |
@@ -900,6 +900,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Speed Increase
|
stat.speedincrease = Speed Increase
|
||||||
stat.range = Range
|
stat.range = Range
|
||||||
stat.drilltier = Drillables
|
stat.drilltier = Drillables
|
||||||
@@ -1796,54 +1797,54 @@ hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a pay
|
|||||||
hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires.
|
hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires.
|
||||||
hint.generator = \uF879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uF87F [accent]Power Nodes[].
|
hint.generator = \uF879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uF87F [accent]Power Nodes[].
|
||||||
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uF835 [accent]Graphite[] \uF861Duo/\uF859Salvo ammunition to take Guardians down.
|
hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uF835 [accent]Graphite[] \uF861Duo/\uF859Salvo ammunition to take Guardians down.
|
||||||
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a \uf868 [accent]Foundation[] core over the \uf869 [accent]Shard[] core. Make sure it is free from nearby obstructions.
|
hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a \uF868 [accent]Foundation[] core over the \uF869 [accent]Shard[] core. Make sure it is free from nearby obstructions.
|
||||||
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
|
hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[].
|
||||||
hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation.
|
hint.presetDifficulty = This sector has a [scarlet]high enemy threat level[].\nLaunching to such sectors is [accent]not recommended[] without proper technology and preparation.
|
||||||
hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[].
|
hint.coreIncinerate = After the core is filled to capacity with an item, any extra items of that type it receives will be [accent]incinerated[].
|
||||||
hint.factoryControl = To set a unit factory's [accent]output destination[], click a factory block while in command mode, then right-click a location.\nUnits produced by it will automatically move there.
|
hint.factoryControl = To set a unit factory's [accent]output destination[], click a factory block while in command mode, then right-click a location.\nUnits produced by it will automatically move there.
|
||||||
hint.factoryControl.mobile = To set a unit factory's [accent]output destination[], tap a factory block while in command mode, then tap a location.\nUnits produced by it will automatically move there.
|
hint.factoryControl.mobile = To set a unit factory's [accent]output destination[], tap a factory block while in command mode, then tap a location.\nUnits produced by it will automatically move there.
|
||||||
|
|
||||||
gz.mine = Move near the \uf8c4 [accent]copper ore[] on the ground and click to begin mining.
|
gz.mine = Move near the \uF8C4 [accent]copper ore[] on the ground and click to begin mining.
|
||||||
gz.mine.mobile = Move near the \uf8c4 [accent]copper ore[] on the ground and tap it to begin mining.
|
gz.mine.mobile = Move near the \uF8C4 [accent]copper ore[] on the ground and tap it to begin mining.
|
||||||
gz.research = Open the \ue875 tech tree.\nResearch the \uf870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nClick on a copper patch to place it.
|
gz.research = Open the \uE875 tech tree.\nResearch the \uF870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nClick on a copper patch to place it.
|
||||||
gz.research.mobile = Open the \ue875 tech tree.\nResearch the \uf870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nTap on a copper patch to place it.\n\nPress the \uE800 [accent]checkmark[] at the bottom right to confirm.
|
gz.research.mobile = Open the \uE875 tech tree.\nResearch the \uF870 [accent]Mechanical Drill[], then select it from the menu in the bottom right.\nTap on a copper patch to place it.\n\nPress the \uE800 [accent]checkmark[] at the bottom right to confirm.
|
||||||
gz.conveyors = Research and place \uf896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate.
|
gz.conveyors = Research and place \uF896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate.
|
||||||
gz.conveyors.mobile = Research and place \uf896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nHold down your finger for a second and drag to place multiple conveyors.
|
gz.conveyors.mobile = Research and place \uF896 [accent]conveyors[] to move the mined resources\nfrom drills to the core.\n\nHold down your finger for a second and drag to place multiple conveyors.
|
||||||
gz.drills = Expand the mining operation.\nPlace more Mechanical Drills.\nMine 100 copper.
|
gz.drills = Expand the mining operation.\nPlace more Mechanical Drills.\nMine 100 copper.
|
||||||
gz.lead = \uf837 [accent]Lead[] is another commonly used resource.\nSet up drills to mine lead.
|
gz.lead = \uF837 [accent]Lead[] is another commonly used resource.\nSet up drills to mine lead.
|
||||||
gz.moveup = \ue804 Move up for further objectives.
|
gz.moveup = \uE804 Move up for further objectives.
|
||||||
gz.turrets = Research and place 2 \uf861 [accent]Duo[] turrets to defend the core.\nDuo turrets require \uf838 [accent]ammo[] from conveyors.
|
gz.turrets = Research and place 2 \uF861 [accent]Duo[] turrets to defend the core.\nDuo turrets require \uF838 [accent]ammo[] from conveyors.
|
||||||
gz.duoammo = Supply the Duo turrets with [accent]copper[], using conveyors.
|
gz.duoammo = Supply the Duo turrets with [accent]copper[], using conveyors.
|
||||||
gz.walls = [accent]Walls[] can prevent oncoming damage from reaching buildings.\nPlace \uf8ae [accent]copper walls[] around the turrets.
|
gz.walls = [accent]Walls[] can prevent oncoming damage from reaching buildings.\nPlace \uF8AE [accent]copper walls[] around the turrets.
|
||||||
gz.defend = Enemy incoming, prepare to defend.
|
gz.defend = Enemy incoming, prepare to defend.
|
||||||
gz.aa = Flying units cannot easily be dispatched with standard turrets.\n\uf860 [accent]Scatter[] turrets provide excellent anti-air, but require \uf837 [accent]lead[] as ammo.
|
gz.aa = Flying units cannot easily be dispatched with standard turrets.\n\uF860 [accent]Scatter[] turrets provide excellent anti-air, but require \uF837 [accent]lead[] as ammo.
|
||||||
gz.scatterammo = Supply the Scatter turret with \uf837 [accent]lead[], using conveyors.
|
gz.scatterammo = Supply the Scatter turret with \uF837 [accent]lead[], using conveyors.
|
||||||
gz.supplyturret = [accent]Supply Turret
|
gz.supplyturret = [accent]Supply Turret
|
||||||
gz.zone1 = This is the enemy drop zone.
|
gz.zone1 = This is the enemy drop zone.
|
||||||
gz.zone2 = Anything built in the radius is destroyed when a wave starts.
|
gz.zone2 = Anything built in the radius is destroyed when a wave starts.
|
||||||
gz.zone3 = A wave will begin now.\nGet ready.
|
gz.zone3 = A wave will begin now.\nGet ready.
|
||||||
gz.finish = Build more turrets, mine more resources,\nand defend against all the waves to [accent]capture the sector[].
|
gz.finish = Build more turrets, mine more resources,\nand defend against all the waves to [accent]capture the sector[].
|
||||||
|
|
||||||
onset.mine = Click to mine \uf748 [accent]beryllium[] from walls.\n\nUse [accent][[WASD] to move.
|
onset.mine = Click to mine \uF748 [accent]beryllium[] from walls.\n\nUse [accent][[WASD] to move.
|
||||||
onset.mine.mobile = Tap to mine \uf748 [accent]beryllium[] from walls.
|
onset.mine.mobile = Tap to mine \uF748 [accent]beryllium[] from walls.
|
||||||
onset.research = Open the \ue875 tech tree.\nResearch, then place a \uf73e [accent]turbine condenser[] on the vent.\nThis will generate [accent]power[].
|
onset.research = Open the \uE875 tech tree.\nResearch, then place a \uF73E [accent]turbine condenser[] on the vent.\nThis will generate [accent]power[].
|
||||||
onset.bore = Research and place a \uf741 [accent]plasma bore[].\nThis automatically mines resources from walls.
|
onset.bore = Research and place a \uF741 [accent]plasma bore[].\nThis automatically mines resources from walls.
|
||||||
onset.power = To [accent]power[] the plasma bore, research and place a \uf73d [accent]beam node[].\nConnect the turbine condenser to the plasma bore.
|
onset.power = To [accent]power[] the plasma bore, research and place a \uF73D [accent]beam node[].\nConnect the turbine condenser to the plasma bore.
|
||||||
onset.ducts = Research and place \uf799 [accent]ducts[] to move the mined resources from the plasma bore to the core.\nClick and drag to place multiple ducts.\n[accent]Scroll[] to rotate.
|
onset.ducts = Research and place \uF799 [accent]ducts[] to move the mined resources from the plasma bore to the core.\nClick and drag to place multiple ducts.\n[accent]Scroll[] to rotate.
|
||||||
onset.ducts.mobile = Research and place \uf799 [accent]ducts[] to move the mined resources from the plasma bore to the core.\n\nHold down your finger for a second and drag to place multiple ducts.
|
onset.ducts.mobile = Research and place \uF799 [accent]ducts[] to move the mined resources from the plasma bore to the core.\n\nHold down your finger for a second and drag to place multiple ducts.
|
||||||
onset.moremine = Expand the mining operation.\nPlace more Plasma Bores and use beam nodes and ducts to support them.\nMine 200 beryllium.
|
onset.moremine = Expand the mining operation.\nPlace more Plasma Bores and use beam nodes and ducts to support them.\nMine 200 beryllium.
|
||||||
onset.graphite = More complex blocks require \uf835 [accent]graphite[].\nSet up plasma bores to mine graphite.
|
onset.graphite = More complex blocks require \uF835 [accent]graphite[].\nSet up plasma bores to mine graphite.
|
||||||
onset.research2 = Begin researching [accent]factories[].\nResearch the \uf74d [accent]cliff crusher[] and \uf779 [accent]silicon arc furnace[].
|
onset.research2 = Begin researching [accent]factories[].\nResearch the \uF74D [accent]cliff crusher[] and \uF779 [accent]silicon arc furnace[].
|
||||||
onset.arcfurnace = The arc furnace needs \uf834 [accent]sand[] and \uf835 [accent]graphite[] to create \uf82f [accent]silicon[].\n[accent]Power[] is also required.
|
onset.arcfurnace = The arc furnace needs \uF834 [accent]sand[] and \uF835 [accent]graphite[] to create \uF82F [accent]silicon[].\n[accent]Power[] is also required.
|
||||||
onset.crusher = Use \uf74d [accent]cliff crushers[] to mine sand.
|
onset.crusher = Use \uF74D [accent]cliff crushers[] to mine sand.
|
||||||
onset.fabricator = Use [accent]units[] to explore the map, defend buildings, and attack the enemy. Research and place a \uf6a2 [accent]tank fabricator[].
|
onset.fabricator = Use [accent]units[] to explore the map, defend buildings, and attack the enemy. Research and place a \uF6A2 [accent]tank fabricator[].
|
||||||
onset.makeunit = Produce a unit.\nUse the "?" button to see selected factory requirements.
|
onset.makeunit = Produce a unit.\nUse the "?" button to see selected factory requirements.
|
||||||
onset.turrets = Units are effective, but [accent]turrets[] provide better defensive capabilities if used effectively.\nPlace a \uf6eb [accent]Breach[] turret.\nTurrets require \uf748 [accent]ammo[].
|
onset.turrets = Units are effective, but [accent]turrets[] provide better defensive capabilities if used effectively.\nPlace a \uF6EB [accent]Breach[] turret.\nTurrets require \uF748 [accent]ammo[].
|
||||||
onset.turretammo = Supply the turret with [accent]beryllium ammo.[]
|
onset.turretammo = Supply the turret with [accent]beryllium ammo.[]
|
||||||
onset.walls = [accent]Walls[] can prevent oncoming damage from reaching buildings.\nPlace some \uf6ee [accent]beryllium walls[] around the turret.
|
onset.walls = [accent]Walls[] can prevent oncoming damage from reaching buildings.\nPlace some \uF6EE [accent]beryllium walls[] around the turret.
|
||||||
onset.enemies = Enemy incoming, prepare to defend.
|
onset.enemies = Enemy incoming, prepare to defend.
|
||||||
onset.attack = The enemy is vulnerable. Counter-attack.
|
onset.attack = The enemy is vulnerable. Counter-attack.
|
||||||
onset.cores = New cores can be placed on [accent]core tiles[].\nNew cores function as forward bases and share a resource inventory with other cores.\nPlace a \uf725 core.
|
onset.cores = New cores can be placed on [accent]core tiles[].\nNew cores function as forward bases and share a resource inventory with other cores.\nPlace a \uF725 core.
|
||||||
onset.detect = The enemy will be able to detect you in 2 minutes.\nSet up defenses, mining, and production.
|
onset.detect = The enemy will be able to detect you in 2 minutes.\nSet up defenses, mining, and production.
|
||||||
|
|
||||||
split.pickup = Some blocks can be picked up by the core unit.\nPick up this [accent]container[] and place it onto the [accent]payload loader[].\n(Default keys are [[ and ] to pick up and drop)
|
split.pickup = Some blocks can be picked up by the core unit.\nPick up this [accent]container[] and place it onto the [accent]payload loader[].\n(Default keys are [[ and ] to pick up and drop)
|
||||||
|
|||||||
@@ -875,6 +875,7 @@ stat.repairspeed = Хуткасць Рамонту
|
|||||||
stat.weapons = Зброя
|
stat.weapons = Зброя
|
||||||
stat.bullet = Куля
|
stat.bullet = Куля
|
||||||
stat.moduletier = Модульны Ўзровень
|
stat.moduletier = Модульны Ўзровень
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Павелічэнне хуткасці
|
stat.speedincrease = Павелічэнне хуткасці
|
||||||
stat.range = Радыус дзеяння
|
stat.range = Радыус дзеяння
|
||||||
stat.drilltier = Бурць
|
stat.drilltier = Бурць
|
||||||
@@ -2298,24 +2299,24 @@ unitlocate.building = Output variable for located building.
|
|||||||
unitlocate.outx = Output X coordinate.
|
unitlocate.outx = Output X coordinate.
|
||||||
unitlocate.outy = Output Y coordinate.
|
unitlocate.outy = Output Y coordinate.
|
||||||
unitlocate.group = Building group to look for.
|
unitlocate.group = Building group to look for.
|
||||||
lenum.idle = Don't move, but keep building/mining.\nThe default state.
|
lenum.idle = Не рухацца, а будаваць/дабываць.\nЗвычайны стан.
|
||||||
lenum.stop = Stop moving/mining/building.
|
lenum.stop = Перастаць рухацца/дабываць/будаваць.
|
||||||
lenum.unbind = Completely disable logic control.\nResume standard AI.
|
lenum.unbind = Поўнасццю адключыць кантраляванне працэссарамі.\nАднавіць звычайныя паводзіны AI.
|
||||||
lenum.move = Move to exact position.
|
lenum.move = Рухацца да канкрэтнай каардынаты.
|
||||||
lenum.approach = Approach a position with a radius.
|
lenum.approach = Падысці да каардынаты з радыюсам.
|
||||||
lenum.pathfind = Pathfind to the enemy spawn.
|
lenum.pathfind = Найці шлях да варожай кропкі з'яўлення.
|
||||||
lenum.target = Shoot a position.
|
lenum.target = Атакаваць каардынату.
|
||||||
lenum.targetp = Shoot a target with velocity prediction.
|
lenum.targetp = Атакаваць мэту з прадвылічэннем скорасці.
|
||||||
lenum.itemdrop = Drop an item.
|
lenum.itemdrop = Апусціць элемент.
|
||||||
lenum.itemtake = Take an item from a building.
|
lenum.itemtake = Узяць элемент Take an item from a building.
|
||||||
lenum.paydrop = Drop current payload.
|
lenum.paydrop = Апусціць існуючы груз.
|
||||||
lenum.paytake = Pick up payload at current location.
|
lenum.paytake = Узыць груз у заданных каардынатах.
|
||||||
lenum.payenter = Enter/land on the payload block the unit is on.
|
lenum.payenter = Увайсці/прызямліцца на блок выгрузкі калі адзінка каля/над ім.
|
||||||
lenum.flag = Numeric unit flag.
|
lenum.flag = Лічбавы сцяг адзінкі.
|
||||||
lenum.mine = Mine at a position.
|
lenum.mine = Дабываць у кардынатах.
|
||||||
lenum.build = Build a structure.
|
lenum.build = Пабудаваць структуру.
|
||||||
lenum.getblock = Fetch a building and type at coordinates.\nUnit must be in range of position.\nSolid non-buildings will have the type [accent]@solid[].
|
lenum.getblock = Атрымаць будынак і яго тып у каардынатах.\nАдзінка павінна быць у дыяпазоне ад каардынат.\nЦвердыя не будынкі павінны мець тып [accent]@solid[].
|
||||||
lenum.within = Check if unit is near a position.
|
lenum.within = Правярае калі адзінка знаходзіцца каля каардынат.
|
||||||
lenum.boost = Start/stop boosting.
|
lenum.boost = Пачаць/перастаць узлятаць.
|
||||||
onset.commandmode = Hold [accent]shift[] to enter [accent]command mode[].\n[accent]Left-click and drag[] to select units.\n[accent]Right-click[] to order selected units to move or attack.
|
onset.commandmode = Зажміце [accent]shift[] каб увайсці ў [accent]рэжым камандавання[].\n[accent]Левая Кнопка Мышкі і працягнуць[] каб выбраць адзінкі.\n[accent]Правая Кнопка Мышкі[] каб камандаваць выбранымі адзінкамі каб рухаць або атакаваць.
|
||||||
onset.commandmode.mobile = Press the [accent]command button[] to enter [accent]command mode[].\nHold down a finger, then [accent]drag[] to select units.\n[accent]Tap[] to order selected units to move or attack.
|
onset.commandmode.mobile = Націсніце на кнопку [accent]Камандавання[] каб увайсці ў [accent]рэжым камандавання[].\nУтрамайце палец, пасля [accent]правесці[] да выбраных адзінак.\n[accent]Націсніце[] каб камандаваць выбранымі адзінкамі каб рухаць або атакаваць.
|
||||||
|
|||||||
@@ -886,6 +886,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Оръжия
|
stat.weapons = Оръжия
|
||||||
stat.bullet = Муниции
|
stat.bullet = Муниции
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Ускорение
|
stat.speedincrease = Ускорение
|
||||||
stat.range = Обхват
|
stat.range = Обхват
|
||||||
stat.drilltier = Изкопаеми ресурси
|
stat.drilltier = Изкопаеми ресурси
|
||||||
|
|||||||
@@ -890,6 +890,7 @@ stat.repairspeed = Velocitat de reparació
|
|||||||
stat.weapons = Armes
|
stat.weapons = Armes
|
||||||
stat.bullet = Bala
|
stat.bullet = Bala
|
||||||
stat.moduletier = Nivell del mòdul
|
stat.moduletier = Nivell del mòdul
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Augment de velocitat
|
stat.speedincrease = Augment de velocitat
|
||||||
stat.range = Abast
|
stat.range = Abast
|
||||||
stat.drilltier = Perforables
|
stat.drilltier = Perforables
|
||||||
@@ -983,8 +984,8 @@ bullet.splashdamage = [stat]{0}[lightgray] de dany a l’àrea ~[stat] {1}[light
|
|||||||
bullet.incendiary = [stat]incendiari
|
bullet.incendiary = [stat]incendiari
|
||||||
bullet.homing = [stat]munició guiada
|
bullet.homing = [stat]munició guiada
|
||||||
bullet.armorpierce = [stat]perforador d’armadures
|
bullet.armorpierce = [stat]perforador d’armadures
|
||||||
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
bullet.suppression = [stat]Supressió de reparacions cada {0} s[lightgray] ~ [stat]{1}[lightgray] caselles
|
||||||
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
bullet.interval = [stat]Interval de bales de {0}/s[lightgray]:
|
||||||
bullet.frags = [stat]{0}[lightgray]× de bales de fragmentació:
|
bullet.frags = [stat]{0}[lightgray]× de bales de fragmentació:
|
||||||
bullet.lightning = [stat]{0}[lightgray]× llampec ~ [stat]{1}[lightgray] de dany
|
bullet.lightning = [stat]{0}[lightgray]× llampec ~ [stat]{1}[lightgray] de dany
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] de dany a les estructures
|
bullet.buildingdamage = [stat]{0}%[lightgray] de dany a les estructures
|
||||||
@@ -1098,8 +1099,8 @@ setting.bridgeopacity.name = Opacitat de cintes i canonades subterrànies
|
|||||||
setting.playerchat.name = Mostra el xat bombolla de jugadors
|
setting.playerchat.name = Mostra el xat bombolla de jugadors
|
||||||
setting.showweather.name = Mostra l’estat meteorològic
|
setting.showweather.name = Mostra l’estat meteorològic
|
||||||
setting.hidedisplays.name = Amaga els monitors lògics
|
setting.hidedisplays.name = Amaga els monitors lògics
|
||||||
steam.friendsonly = Friends Only
|
steam.friendsonly = Només amics
|
||||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
steam.friendsonly.tooltip = Indica si només els amics de Steam podran unir-se a la vostra partida.\nSi no es selecciona aquesta opció, la vostra partida serà pública i s’hi podrà unir qualsevol jugador.
|
||||||
public.beta = Tingueu en compte que les versions beta no disposen de sales d’espera.
|
public.beta = Tingueu en compte que les versions beta no disposen de sales d’espera.
|
||||||
uiscale.reset = L’escala de la interfície ha canviat.\nPremeu «D’acord» per a confirmar-ho.\n[scarlet]Es revertiran els canvis en [accent]{0}[] segons.
|
uiscale.reset = L’escala de la interfície ha canviat.\nPremeu «D’acord» per a confirmar-ho.\n[scarlet]Es revertiran els canvis en [accent]{0}[] segons.
|
||||||
uiscale.cancel = Cancel·la i surt
|
uiscale.cancel = Cancel·la i surt
|
||||||
@@ -2213,7 +2214,7 @@ lst.flushmessage = Mostra un missatge a la pantalla a partir dels continguts de
|
|||||||
lst.cutscene = Manipula la càmera del jugador.
|
lst.cutscene = Manipula la càmera del jugador.
|
||||||
lst.setflag = Estableix un senyal global que es podrà llegir en tots els processadors.
|
lst.setflag = Estableix un senyal global que es podrà llegir en tots els processadors.
|
||||||
lst.getflag = Obtén un senyal global.
|
lst.getflag = Obtén un senyal global.
|
||||||
lst.setprop = Sets a property of a unit or building.
|
lst.setprop = Estableix una propietat d’una unitat o estructura.
|
||||||
|
|
||||||
logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.
|
logic.nounitbuild = [red]Aquí no es permet construir blocs de tipus lògic.
|
||||||
|
|
||||||
|
|||||||
@@ -888,6 +888,7 @@ stat.repairspeed = Rychlost Opravy
|
|||||||
stat.weapons = Zbraně
|
stat.weapons = Zbraně
|
||||||
stat.bullet = Střela
|
stat.bullet = Střela
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Zvýšení rychlosti
|
stat.speedincrease = Zvýšení rychlosti
|
||||||
stat.range = Dosah
|
stat.range = Dosah
|
||||||
stat.drilltier = Lze těžit
|
stat.drilltier = Lze těžit
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Hastigheds-forøgelse
|
stat.speedincrease = Hastigheds-forøgelse
|
||||||
stat.range = Rækkevidde
|
stat.range = Rækkevidde
|
||||||
stat.drilltier = Kan bores
|
stat.drilltier = Kan bores
|
||||||
|
|||||||
@@ -899,6 +899,7 @@ stat.repairspeed = Heilungsgeschwindigkeit
|
|||||||
stat.weapons = Waffen
|
stat.weapons = Waffen
|
||||||
stat.bullet = Geschoss
|
stat.bullet = Geschoss
|
||||||
stat.moduletier = Modulstufe
|
stat.moduletier = Modulstufe
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Geschwindigkeitserhöhung
|
stat.speedincrease = Geschwindigkeitserhöhung
|
||||||
stat.range = Reichweite
|
stat.range = Reichweite
|
||||||
stat.drilltier = Abbaubare Erze
|
stat.drilltier = Abbaubare Erze
|
||||||
@@ -1954,7 +1955,7 @@ block.inverted-sorter.description = Wie ein normaler Sortierer, aber gibt das au
|
|||||||
block.router.description = Verteilt Materialien auf bis zu drei Richtungen.
|
block.router.description = Verteilt Materialien auf bis zu drei Richtungen.
|
||||||
block.router.details = Ein nötiges Übel. Es ist nicht empfehlenswert, ihn neben Fabriken zu setzen, da er sich dort verstopfen kann.
|
block.router.details = Ein nötiges Übel. Es ist nicht empfehlenswert, ihn neben Fabriken zu setzen, da er sich dort verstopfen kann.
|
||||||
block.distributor.description = Verteilt Materialien auf bis zu sieben Richtungen.
|
block.distributor.description = Verteilt Materialien auf bis zu sieben Richtungen.
|
||||||
block.overflow-gate.description = Gibt Materialien nur zu den Seiten heraus, wenn der fordere Ausgang blockiert ist.
|
block.overflow-gate.description = Gibt Materialien nur zu den Seiten heraus, wenn der vordere Ausgang blockiert ist.
|
||||||
block.underflow-gate.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind.
|
block.underflow-gate.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind.
|
||||||
block.mass-driver.description = Ein Transportblock mit sehr hoher Reichweite. Sammelt mehrere Materialien und schießt sie zu einem verbundenen Massenbeschleuniger.
|
block.mass-driver.description = Ein Transportblock mit sehr hoher Reichweite. Sammelt mehrere Materialien und schießt sie zu einem verbundenen Massenbeschleuniger.
|
||||||
block.mechanical-pump.description = Eine Pumpe, die keinen Strom benötigt.
|
block.mechanical-pump.description = Eine Pumpe, die keinen Strom benötigt.
|
||||||
@@ -2100,7 +2101,7 @@ block.blast-door.description = Eine Mauer, die verbündete Bodeneinheiten durchl
|
|||||||
block.duct.description = Bewegt Materialien vorwärts. Kann nur ein einziges Item lagern.
|
block.duct.description = Bewegt Materialien vorwärts. Kann nur ein einziges Item lagern.
|
||||||
block.armored-duct.description = Bewegt Materialien vorwärts. Materialen können von der Seite nur aus Rohrleitugnen herein.
|
block.armored-duct.description = Bewegt Materialien vorwärts. Materialen können von der Seite nur aus Rohrleitugnen herein.
|
||||||
block.duct-router.description = Verteilt Materialien gleichmäßig auf bis zu drei Richtungen. Nimmt Materialien nur aus einer Richtung an. Kann als Sortierer verwendet werden.
|
block.duct-router.description = Verteilt Materialien gleichmäßig auf bis zu drei Richtungen. Nimmt Materialien nur aus einer Richtung an. Kann als Sortierer verwendet werden.
|
||||||
block.overflow-duct.description = Gibt Materialien nur zu den Seiten heraus, wenn der fordere Ausgang blockiert ist.
|
block.overflow-duct.description = Gibt Materialien nur zu den Seiten heraus, wenn der vordere Ausgang blockiert ist.
|
||||||
block.duct-bridge.description = Transportierrt Materialen über Blöcke und Terrain.
|
block.duct-bridge.description = Transportierrt Materialen über Blöcke und Terrain.
|
||||||
block.duct-unloader.description = Entlädt Materialen aus dem Block dahinter. Kann nicht aus Kernen entladen.
|
block.duct-unloader.description = Entlädt Materialen aus dem Block dahinter. Kann nicht aus Kernen entladen.
|
||||||
block.underflow-duct.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind.
|
block.underflow-duct.description = Das Gegenteil eines Überlauftors. Gibt Materialien nur nach vorne heraus, wenn die Seiten blockiert sind.
|
||||||
|
|||||||
@@ -896,6 +896,7 @@ stat.repairspeed = Velocidad de reparación
|
|||||||
stat.weapons = Armas
|
stat.weapons = Armas
|
||||||
stat.bullet = Proyectil
|
stat.bullet = Proyectil
|
||||||
stat.moduletier = Categoría de módulo
|
stat.moduletier = Categoría de módulo
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Aumento de velocidad
|
stat.speedincrease = Aumento de velocidad
|
||||||
stat.range = Alcance
|
stat.range = Alcance
|
||||||
stat.drilltier = Taladrables
|
stat.drilltier = Taladrables
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Kiiruse suurenemine
|
stat.speedincrease = Kiiruse suurenemine
|
||||||
stat.range = Ulatus
|
stat.range = Ulatus
|
||||||
stat.drilltier = Kaevandatav
|
stat.drilltier = Kaevandatav
|
||||||
|
|||||||
@@ -878,6 +878,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Abiadura areagotzea
|
stat.speedincrease = Abiadura areagotzea
|
||||||
stat.range = Irismena
|
stat.range = Irismena
|
||||||
stat.drilltier = Ustiagarriak
|
stat.drilltier = Ustiagarriak
|
||||||
|
|||||||
@@ -875,6 +875,7 @@ stat.repairspeed = Korjausnopeus
|
|||||||
stat.weapons = Aseet
|
stat.weapons = Aseet
|
||||||
stat.bullet = Ammus
|
stat.bullet = Ammus
|
||||||
stat.moduletier = Moduulin taso
|
stat.moduletier = Moduulin taso
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Nopeuden kasvu
|
stat.speedincrease = Nopeuden kasvu
|
||||||
stat.range = Etäisyys
|
stat.range = Etäisyys
|
||||||
stat.drilltier = Porattavat
|
stat.drilltier = Porattavat
|
||||||
|
|||||||
@@ -875,6 +875,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Speed Increase
|
stat.speedincrease = Speed Increase
|
||||||
stat.range = Range
|
stat.range = Range
|
||||||
stat.drilltier = Drillables
|
stat.drilltier = Drillables
|
||||||
|
|||||||
@@ -900,6 +900,7 @@ stat.repairspeed = Vitesse de réparation
|
|||||||
stat.weapons = Armes
|
stat.weapons = Armes
|
||||||
stat.bullet = Balles
|
stat.bullet = Balles
|
||||||
stat.moduletier = Tier
|
stat.moduletier = Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Accélération
|
stat.speedincrease = Accélération
|
||||||
stat.range = Portée
|
stat.range = Portée
|
||||||
stat.drilltier = Blocs forables
|
stat.drilltier = Blocs forables
|
||||||
|
|||||||
@@ -885,6 +885,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Fegyverek
|
stat.weapons = Fegyverek
|
||||||
stat.bullet = Töltény
|
stat.bullet = Töltény
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Gyorsítás
|
stat.speedincrease = Gyorsítás
|
||||||
stat.range = Hatótáv
|
stat.range = Hatótáv
|
||||||
stat.drilltier = Kitermelhető
|
stat.drilltier = Kitermelhető
|
||||||
|
|||||||
@@ -896,6 +896,7 @@ stat.repairspeed = Kecepatan Memperbaiki
|
|||||||
stat.weapons = Senjata
|
stat.weapons = Senjata
|
||||||
stat.bullet = Peluru
|
stat.bullet = Peluru
|
||||||
stat.moduletier = Tingkatan Modul
|
stat.moduletier = Tingkatan Modul
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Tambahan Kecepatan
|
stat.speedincrease = Tambahan Kecepatan
|
||||||
stat.range = Jarak
|
stat.range = Jarak
|
||||||
stat.drilltier = Sumber Daya yang Ditambang
|
stat.drilltier = Sumber Daya yang Ditambang
|
||||||
|
|||||||
@@ -882,6 +882,7 @@ stat.repairspeed = Velocità di riparazione
|
|||||||
stat.weapons = Armi
|
stat.weapons = Armi
|
||||||
stat.bullet = Proiettile
|
stat.bullet = Proiettile
|
||||||
stat.moduletier = Grado del modulo
|
stat.moduletier = Grado del modulo
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Potenziamento Velocità
|
stat.speedincrease = Potenziamento Velocità
|
||||||
stat.range = Raggio
|
stat.range = Raggio
|
||||||
stat.drilltier = Scavabili
|
stat.drilltier = Scavabili
|
||||||
|
|||||||
@@ -888,6 +888,7 @@ stat.repairspeed = 修復速度
|
|||||||
stat.weapons = 武器
|
stat.weapons = 武器
|
||||||
stat.bullet = 弾丸
|
stat.bullet = 弾丸
|
||||||
stat.moduletier = モジュールレベル
|
stat.moduletier = モジュールレベル
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = 速度向上
|
stat.speedincrease = 速度向上
|
||||||
stat.range = 範囲
|
stat.range = 範囲
|
||||||
stat.drilltier = ドリル
|
stat.drilltier = ドリル
|
||||||
|
|||||||
@@ -149,15 +149,15 @@ mod.incompatiblemod = [red]호환되지 않음
|
|||||||
mod.blacklisted = [red]지원하지 않음
|
mod.blacklisted = [red]지원하지 않음
|
||||||
mod.unmetdependencies = [red]충촉되지 않은 종속성
|
mod.unmetdependencies = [red]충촉되지 않은 종속성
|
||||||
mod.erroredcontent = [scarlet]콘텐츠 오류
|
mod.erroredcontent = [scarlet]콘텐츠 오류
|
||||||
mod.circulardependencies = [red]Circular Dependencies
|
mod.circulardependencies = [red]순환 의존성
|
||||||
mod.incompletedependencies = [red]Incomplete Dependencies
|
mod.incompletedependencies = [red]불완전한 의존성
|
||||||
mod.requiresversion.details = 게임 버전 요구: [accent]{0}[]\n당신의 게임은 구버전입니다. 이 모드가 작동하려면 최신 버전의 게임이 필요합니다. (베타/알파 릴리즈일 가능성이 있음).
|
mod.requiresversion.details = 게임 버전 요구: [accent]{0}[]\n당신의 게임은 구버전입니다. 이 모드가 작동하려면 최신 버전의 게임이 필요합니다. (베타/알파 릴리즈일 가능성이 있음).
|
||||||
mod.outdatedv7.details = 이 모드는 최신 버전의 게임과 호환되지 않습니다. 반드시 작성자가 업데이트해야 하고, [accent]mod.json[] 파일에 [accent]최소게임버전: 136[]을 추가해야 합니다.
|
mod.outdatedv7.details = 이 모드는 최신 버전의 게임과 호환되지 않습니다. 반드시 작성자가 업데이트해야 하고, [accent]mod.json[] 파일에 [accent]최소게임버전: 136[]을 추가해야 합니다.
|
||||||
mod.blacklisted.details = 이 모드는 이 버전의 게임에서 충돌 또는 기타 문제를 일으키는 것으로 인해 수동으로 블랙리스트에 올라와 있습니다. 사용하지 마세요.
|
mod.blacklisted.details = 이 모드는 이 버전의 게임에서 충돌 또는 기타 문제를 일으키는 것으로 인해 수동으로 블랙리스트에 올라와 있습니다. 사용하지 마세요.
|
||||||
mod.missingdependencies.details = 이 모드에는 종속성이 없음: {0}
|
mod.missingdependencies.details = 이 모드에는 종속성이 없음: {0}
|
||||||
mod.erroredcontent.details = 이 게임은 로딩하는 동안 오류가 발생했습니다. 모드 작성자에게 수정하도록 요청하세요.
|
mod.erroredcontent.details = 이 게임은 로딩하는 동안 오류가 발생했습니다. 모드 작성자에게 수정하도록 요청하세요.
|
||||||
mod.circulardependencies.details = This mod has dependencies that depends on each other.
|
mod.circulardependencies.details = 이 모드는 서로 의존하는 의존성을 지니고 있습니다.
|
||||||
mod.incompletedependencies.details = This mod is unable to be loaded due to invalid or missing dependencies: {0}.
|
mod.incompletedependencies.details = 잘못되었거나 누락한 종속성으로 인해 이 모드를 불러올 수 없습니다: {0}.
|
||||||
mod.requiresversion = 필요한 게임 버전: [red]{0}
|
mod.requiresversion = 필요한 게임 버전: [red]{0}
|
||||||
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함
|
mod.errors = 콘텐츠를 불러오는 중에 오류가 발생함
|
||||||
mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요.
|
mod.noerrorplay = [scarlet]오류가 있는 모드가 있습니다.[] 영향을 받는 모드를 비활성화하거나 플레이하기 전에 오류를 수정하세요.
|
||||||
@@ -335,7 +335,7 @@ command.repair = 수리
|
|||||||
command.rebuild = 재건
|
command.rebuild = 재건
|
||||||
command.assist = 플레이어 지원
|
command.assist = 플레이어 지원
|
||||||
command.move = 이동
|
command.move = 이동
|
||||||
command.boost = Boost
|
command.boost = 비행
|
||||||
openlink = 링크 열기
|
openlink = 링크 열기
|
||||||
copylink = 링크 복사
|
copylink = 링크 복사
|
||||||
back = 뒤로가기
|
back = 뒤로가기
|
||||||
@@ -411,9 +411,9 @@ editor.mapinfo = 맵 정보
|
|||||||
editor.author = 제작자:
|
editor.author = 제작자:
|
||||||
editor.description = 설명:
|
editor.description = 설명:
|
||||||
editor.nodescription = 맵을 공유하려면 최소 4자 이상의 설명이 있어야 합니다.
|
editor.nodescription = 맵을 공유하려면 최소 4자 이상의 설명이 있어야 합니다.
|
||||||
editor.waves = 단계:
|
editor.waves = 단계
|
||||||
editor.rules = 규칙:
|
editor.rules = 규칙
|
||||||
editor.generation = 지형 생성:
|
editor.generation = 지형 생성
|
||||||
editor.objectives = 목표
|
editor.objectives = 목표
|
||||||
editor.ingame = 인게임 편집
|
editor.ingame = 인게임 편집
|
||||||
editor.playtest = 맵 테스트
|
editor.playtest = 맵 테스트
|
||||||
@@ -795,7 +795,7 @@ sector.atlas.description = 이 지역은 각기 다른 지형을 포함하고
|
|||||||
sector.split.description = 이 지역에 최소한으로 존재하는 적 주둔군은 새로운 운송 기술을 시험하기에 완벽합니다.
|
sector.split.description = 이 지역에 최소한으로 존재하는 적 주둔군은 새로운 운송 기술을 시험하기에 완벽합니다.
|
||||||
sector.basin.description = {임시}\n\n현재의 마지막 지역. 이 지역은 도전 레벨입니다 - 이후 릴리즈에서 많은 지역이 더 추가될 예정입니다.
|
sector.basin.description = {임시}\n\n현재의 마지막 지역. 이 지역은 도전 레벨입니다 - 이후 릴리즈에서 많은 지역이 더 추가될 예정입니다.
|
||||||
sector.marsh.description = 이 지역은 아르키사이트가 풍부하지만 분출구의 수는 한정적입니다.\n[accent]화학적 연소실[]을 건설하여 전력을 생산하시오.
|
sector.marsh.description = 이 지역은 아르키사이트가 풍부하지만 분출구의 수는 한정적입니다.\n[accent]화학적 연소실[]을 건설하여 전력을 생산하시오.
|
||||||
sector.peaks.description = 이 지역의 산악 지형은 대부분의 기체를 무용지물로 만들었습니다. 비행 기체가 필요합니다.\n적의 방공망에 유의하십시오. 일부 시설은 지원 건물을 공격하여 무력화시킬 수 있습니다.
|
sector.peaks.description = 이 지역의 산악 지형은 대부분의 기체를 무용지물로 만들었습니다. 비행 가능한 기체가 필요합니다.\n적의 방공망에 유의하십시오. 일부 시설은 지원 건물을 공격하여 무력화시킬 수 있습니다.
|
||||||
sector.ravine.description = 적의 중요한 이동 경로이긴 하지만, 해당 구역에선 적의 코어가 감지되지 않았습니다. 다양한 적군을 맞닥뜨릴 것으로 예상됩니다.\n[accent]설금[]을 생산하십시오. 포탑 [accent]어플릭트[]를 건설하십시오.
|
sector.ravine.description = 적의 중요한 이동 경로이긴 하지만, 해당 구역에선 적의 코어가 감지되지 않았습니다. 다양한 적군을 맞닥뜨릴 것으로 예상됩니다.\n[accent]설금[]을 생산하십시오. 포탑 [accent]어플릭트[]를 건설하십시오.
|
||||||
sector.caldera-erekir.description = 이 지역에서 탐지된 자원은 여러 섬에 분산되어 있습니다 .\n드론을 기반으로 한 운송수단을 연구하고 활용하시오.
|
sector.caldera-erekir.description = 이 지역에서 탐지된 자원은 여러 섬에 분산되어 있습니다 .\n드론을 기반으로 한 운송수단을 연구하고 활용하시오.
|
||||||
sector.stronghold.description = 이 지역의 대규모 적 야영지에는 적들이 지키고 있는 상당한 양의 [accent]토륨[] 매장지가 있습니다.\n더 높은 등급의 기체와 포탑을 연구할 때 사용합니다.
|
sector.stronghold.description = 이 지역의 대규모 적 야영지에는 적들이 지키고 있는 상당한 양의 [accent]토륨[] 매장지가 있습니다.\n더 높은 등급의 기체와 포탑을 연구할 때 사용합니다.
|
||||||
@@ -888,6 +888,7 @@ stat.repairspeed = 수리 속도
|
|||||||
stat.weapons = 무기
|
stat.weapons = 무기
|
||||||
stat.bullet = 탄환
|
stat.bullet = 탄환
|
||||||
stat.moduletier = 모듈 등급
|
stat.moduletier = 모듈 등급
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = 속도 증가
|
stat.speedincrease = 속도 증가
|
||||||
stat.range = 사거리
|
stat.range = 사거리
|
||||||
stat.drilltier = 채굴 가능
|
stat.drilltier = 채굴 가능
|
||||||
@@ -981,8 +982,8 @@ bullet.splashdamage = [stat]{0}[lightgray] 범위 피해량 ~ [stat]{1}[lightgra
|
|||||||
bullet.incendiary = [stat]방화[]
|
bullet.incendiary = [stat]방화[]
|
||||||
bullet.homing = [stat]유도[]
|
bullet.homing = [stat]유도[]
|
||||||
bullet.armorpierce = [stat]방어 관통
|
bullet.armorpierce = [stat]방어 관통
|
||||||
bullet.suppression = [stat]{0} sec[lightgray] repair suppression ~ [stat]{1}[lightgray] tiles
|
bullet.suppression = [stat]{0} sec[lightgray] 수리 억제 ~ [stat]{1}[lightgray] 타일
|
||||||
bullet.interval = [stat]{0}/sec[lightgray] interval bullets:
|
bullet.interval = [stat]{0}/sec[lightgray] 간격 탄환:
|
||||||
bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][]
|
bullet.frags = [stat]{0}[lightgray]개 파편 탄환:[][]
|
||||||
bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][]
|
bullet.lightning = [stat]{0}[lightgray]x 전격 ~ [stat]{1}[lightgray] 피해량[][][][]
|
||||||
bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][]
|
bullet.buildingdamage = [stat]{0}%[lightgray] 건물 피해량[][]
|
||||||
@@ -1096,8 +1097,8 @@ setting.bridgeopacity.name = 터널 투명도
|
|||||||
setting.playerchat.name = 채팅 말풍선 표시
|
setting.playerchat.name = 채팅 말풍선 표시
|
||||||
setting.showweather.name = 날씨 그래픽 표시
|
setting.showweather.name = 날씨 그래픽 표시
|
||||||
setting.hidedisplays.name = 로직 디스플레이 숨김
|
setting.hidedisplays.name = 로직 디스플레이 숨김
|
||||||
steam.friendsonly = Friends Only
|
steam.friendsonly = 친구 전용
|
||||||
steam.friendsonly.tooltip = Whether only Steam friends will be able to join your game.\nUnchecking this box will make your game public - anyone can join.
|
steam.friendsonly.tooltip = 게임에 스팀 친구만 접속할 수 있는가에 대한 여부입니다.체크를 해제하면, 누구나 접속할 수 있습니다.
|
||||||
public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
|
public.beta = 베타 버전의 게임은 공개 서버를 만들 수 없습니다.
|
||||||
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
|
uiscale.reset = UI 스케일이 변경되었습니다.\n"확인"버튼을 눌러 저장하세요.\n[accent] {0}[][scarlet]초 후에 예전 설정으로 되돌리고 게임을 종료합니다...
|
||||||
uiscale.cancel = 취소 후 나가기
|
uiscale.cancel = 취소 후 나가기
|
||||||
@@ -1226,7 +1227,7 @@ rules.deconstructrefundmultiplier = 철거 환불 배수
|
|||||||
rules.waitForWaveToEnd = 한 단계가 끝날때까지 대기
|
rules.waitForWaveToEnd = 한 단계가 끝날때까지 대기
|
||||||
rules.dropzoneradius = 스폰 구역 범위: [lightgray] (타일)
|
rules.dropzoneradius = 스폰 구역 범위: [lightgray] (타일)
|
||||||
rules.unitammo = 기체 탄약 필요
|
rules.unitammo = 기체 탄약 필요
|
||||||
rules.enemyteam = 상대 팀
|
rules.enemyteam = 적 팀
|
||||||
rules.playerteam = 플레이어 팀
|
rules.playerteam = 플레이어 팀
|
||||||
rules.title.waves = 단계
|
rules.title.waves = 단계
|
||||||
rules.title.resourcesbuilding = 자원 & 건물
|
rules.title.resourcesbuilding = 자원 & 건물
|
||||||
@@ -1239,9 +1240,9 @@ rules.title.planet = 행성
|
|||||||
rules.lighting = 조명 표시
|
rules.lighting = 조명 표시
|
||||||
rules.fog = 전장의 안개
|
rules.fog = 전장의 안개
|
||||||
rules.fire = 방화 허용
|
rules.fire = 방화 허용
|
||||||
rules.anyenv = <상관없음>
|
rules.anyenv = <모두>
|
||||||
rules.explosions = 블록/기체 폭발 피해
|
rules.explosions = 블록/기체 폭발 피해
|
||||||
rules.ambientlight = 자연 조명 표시
|
rules.ambientlight = 주변광
|
||||||
rules.weather = 날씨 추가
|
rules.weather = 날씨 추가
|
||||||
rules.weather.frequency = 빈도:
|
rules.weather.frequency = 빈도:
|
||||||
rules.weather.always = 항상
|
rules.weather.always = 항상
|
||||||
@@ -1782,8 +1783,8 @@ hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치[]하여 업
|
|||||||
hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다.
|
hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다.
|
||||||
hint.presetDifficulty = 이 지역은 [scarlet]위험도가 높은[] 지역입니다.\n적절한 기술과 준비 없이 이런 지역들로 출격하는건 [accent]추천하지 않습니다[].
|
hint.presetDifficulty = 이 지역은 [scarlet]위험도가 높은[] 지역입니다.\n적절한 기술과 준비 없이 이런 지역들로 출격하는건 [accent]추천하지 않습니다[].
|
||||||
hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다.
|
hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다.
|
||||||
hint.factoryControl = 기체 공장의 [accent]출력 위치[]를 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 마우스 오른쪽 버튼으로 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다.
|
hint.factoryControl = 기체 공장의 [accent]출력 목적지[]를 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 마우스 오른쪽 버튼으로 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다.
|
||||||
hint.factoryControl.mobile = 기체 공장의 [accent]출력 위치[]를 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 눌러서 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다.
|
hint.factoryControl.mobile = 기체 공장의 [accent]출력 목적지[]를 설정하려면, 명령 모드에서 공장 블록을 클릭한 다음, 눌러서 위치를 지정합니다.\n생산된 유닛은 자동으로 그곳으로 이동합니다.
|
||||||
gz.mine = 주변 바닥에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
|
gz.mine = 주변 바닥에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
|
||||||
gz.mine.mobile = 주변 바닥에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
|
gz.mine.mobile = 주변 바닥에 있는 \uf8c4 [accent]구리 광석[]으로 이동하고, 광석을 눌러서 채굴을 시작하세요.
|
||||||
gz.research = \ue875 연구 기록을 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 오른쪽 아래에 있는 메뉴에서 선택하세요.\n구리조각 위를 눌러서 배치합니다.
|
gz.research = \ue875 연구 기록을 여세요.\n\uf870 [accent]기계식 드릴[]을 연구하고, 그 후 오른쪽 아래에 있는 메뉴에서 선택하세요.\n구리조각 위를 눌러서 배치합니다.
|
||||||
@@ -2119,10 +2120,10 @@ unit.mace.description = 주변의 모든 적을 향해 화염 줄기를 발사
|
|||||||
unit.fortress.description = 지상 목표물을 향해 장거리 포탄을 발사합니다.
|
unit.fortress.description = 지상 목표물을 향해 장거리 포탄을 발사합니다.
|
||||||
unit.scepter.description = 주변의 모든 적을 향해 장전된 탄환을 일제히 발사합니다.
|
unit.scepter.description = 주변의 모든 적을 향해 장전된 탄환을 일제히 발사합니다.
|
||||||
unit.reign.description = 주변의 모든 적을 향해 거대한 관통 탄환을 일제히 발사합니다.
|
unit.reign.description = 주변의 모든 적을 향해 거대한 관통 탄환을 일제히 발사합니다.
|
||||||
unit.nova.description = 적에게 피해를 주고, 아군 구조물을 수리하는 레이저 볼트를 발사합니다. 비행할 수 있습니다.
|
unit.nova.description = 적에게 피해를 주고, 아군 구조물을 수리하는 레이저 볼트를 발사합니다. 이륙할 수 있습니다.
|
||||||
unit.pulsar.description = 적에게 피해를 주고, 아군 구조물을 수리하는 전격을 발사합니다. 비행할 수 있습니다.
|
unit.pulsar.description = 적에게 피해를 주고, 아군 구조물을 수리하는 전격을 발사합니다. 이륙할 수 있습니다.
|
||||||
unit.quasar.description = 적에게 피해를 주고, 아군 구조물을 수리하는 관통 레이저 빔을 발사합니다. 비행할 수 있습니다. 역장을 가지고 있습니다.
|
unit.quasar.description = 적에게 피해를 주고, 아군 구조물을 수리하는 관통 레이저 빔을 발사합니다. 이륙할 수 있습니다. 역장을 가지고 있습니다.
|
||||||
unit.vela.description = 적에게 피해를 주고, 아군 구조물을 수리하는 거대한 지속적인 레이저 빔을 발사합니다. 비행할 수 있습니다.
|
unit.vela.description = 적에게 피해를 주고, 아군 구조물을 수리하는 거대한 지속적인 레이저 빔을 발사합니다. 이륙할 수 있습니다.
|
||||||
unit.corvus.description = 적에게 피해를 주고, 아군 구조물을 수리하는 거대한 레이저 블레스트를 발사합니다. 대부분의 지형 위를 밟을 수 있습니다.
|
unit.corvus.description = 적에게 피해를 주고, 아군 구조물을 수리하는 거대한 레이저 블레스트를 발사합니다. 대부분의 지형 위를 밟을 수 있습니다.
|
||||||
unit.crawler.description = 적을 향해 달려가 자폭하며, 큰 폭발을 일으킵니다.
|
unit.crawler.description = 적을 향해 달려가 자폭하며, 큰 폭발을 일으킵니다.
|
||||||
unit.atrax.description = 지상 목표물을 향해 광재 구체를 발사합니다. 대부분의 지형 위를 밟을 수 있습니다.
|
unit.atrax.description = 지상 목표물을 향해 광재 구체를 발사합니다. 대부분의 지형 위를 밟을 수 있습니다.
|
||||||
@@ -2206,7 +2207,7 @@ lst.flushmessage = 텍스트 버퍼로부터 화면에 메세지를 표시\n이
|
|||||||
lst.cutscene = 플레이어 카메라 조작
|
lst.cutscene = 플레이어 카메라 조작
|
||||||
lst.setflag = 모든 프로세서가 읽을 수 있는 전역 플래그 설정
|
lst.setflag = 모든 프로세서가 읽을 수 있는 전역 플래그 설정
|
||||||
lst.getflag = 전역 플래그가 설정되어 있는지 확인
|
lst.getflag = 전역 플래그가 설정되어 있는지 확인
|
||||||
lst.setprop = Sets a property of a unit or building.
|
lst.setprop = 기체 혹은 건물의 속성을 설정합니다.
|
||||||
|
|
||||||
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
|
logic.nounitbuild = [red]기체의 건설 로직은 여기서 허용되지 않습니다.
|
||||||
|
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Greičio Padidėjimas
|
stat.speedincrease = Greičio Padidėjimas
|
||||||
stat.range = Atstumas
|
stat.range = Atstumas
|
||||||
stat.drilltier = Gręžiama
|
stat.drilltier = Gręžiama
|
||||||
|
|||||||
@@ -888,6 +888,7 @@ stat.repairspeed = Repareersnelheid
|
|||||||
stat.weapons = Wapens
|
stat.weapons = Wapens
|
||||||
stat.bullet = Kogel
|
stat.bullet = Kogel
|
||||||
stat.moduletier = Module Niveau
|
stat.moduletier = Module Niveau
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Snelheidsverhoging
|
stat.speedincrease = Snelheidsverhoging
|
||||||
stat.range = Bereik
|
stat.range = Bereik
|
||||||
stat.drilltier = Valt te delven
|
stat.drilltier = Valt te delven
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Speed Increase
|
stat.speedincrease = Speed Increase
|
||||||
stat.range = Range
|
stat.range = Range
|
||||||
stat.drilltier = Drillables
|
stat.drilltier = Drillables
|
||||||
|
|||||||
@@ -886,6 +886,7 @@ stat.repairspeed = Prędkość napraw
|
|||||||
stat.weapons = Bronie
|
stat.weapons = Bronie
|
||||||
stat.bullet = Pocisk
|
stat.bullet = Pocisk
|
||||||
stat.moduletier = Stopień Modułu
|
stat.moduletier = Stopień Modułu
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Zwiększenie prędkości
|
stat.speedincrease = Zwiększenie prędkości
|
||||||
stat.range = Zasięg
|
stat.range = Zasięg
|
||||||
stat.drilltier = Co może wykopać
|
stat.drilltier = Co może wykopać
|
||||||
|
|||||||
@@ -896,6 +896,7 @@ stat.repairspeed = Taxa de Reparo
|
|||||||
stat.weapons = Armas
|
stat.weapons = Armas
|
||||||
stat.bullet = Projétil
|
stat.bullet = Projétil
|
||||||
stat.moduletier = Tier do Módulo
|
stat.moduletier = Tier do Módulo
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Aumento de velocidade
|
stat.speedincrease = Aumento de velocidade
|
||||||
stat.range = Distância
|
stat.range = Distância
|
||||||
stat.drilltier = Brocas
|
stat.drilltier = Brocas
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Aumento de velocidade
|
stat.speedincrease = Aumento de velocidade
|
||||||
stat.range = Distância
|
stat.range = Distância
|
||||||
stat.drilltier = Furáveis
|
stat.drilltier = Furáveis
|
||||||
|
|||||||
@@ -888,6 +888,7 @@ stat.repairspeed = Viteză Reparare
|
|||||||
stat.weapons = Arme
|
stat.weapons = Arme
|
||||||
stat.bullet = Glonț
|
stat.bullet = Glonț
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Creștere Viteză
|
stat.speedincrease = Creștere Viteză
|
||||||
stat.range = Rază
|
stat.range = Rază
|
||||||
stat.drilltier = Minabile
|
stat.drilltier = Minabile
|
||||||
|
|||||||
@@ -889,6 +889,7 @@ stat.repairspeed = Скорость ремонта
|
|||||||
stat.weapons = Орудия
|
stat.weapons = Орудия
|
||||||
stat.bullet = Снаряд
|
stat.bullet = Снаряд
|
||||||
stat.moduletier = Уровень модуля
|
stat.moduletier = Уровень модуля
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Увеличение скорости
|
stat.speedincrease = Увеличение скорости
|
||||||
stat.range = Радиус действия
|
stat.range = Радиус действия
|
||||||
stat.drilltier = Бурит
|
stat.drilltier = Бурит
|
||||||
|
|||||||
@@ -890,6 +890,7 @@ stat.repairspeed = Brzina popravke
|
|||||||
stat.weapons = Oružja
|
stat.weapons = Oružja
|
||||||
stat.bullet = Metak
|
stat.bullet = Metak
|
||||||
stat.moduletier = Nivo modula
|
stat.moduletier = Nivo modula
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Povećanje brzine
|
stat.speedincrease = Povećanje brzine
|
||||||
stat.range = Domet
|
stat.range = Domet
|
||||||
stat.drilltier = Materijali koje je moguće kopati
|
stat.drilltier = Materijali koje je moguće kopati
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Speed Increase
|
stat.speedincrease = Speed Increase
|
||||||
stat.range = Range
|
stat.range = Range
|
||||||
stat.drilltier = Drillables
|
stat.drilltier = Drillables
|
||||||
|
|||||||
@@ -889,6 +889,7 @@ stat.repairspeed = ความเร็วการซ่อม
|
|||||||
stat.weapons = อาวุธ
|
stat.weapons = อาวุธ
|
||||||
stat.bullet = กระสุน
|
stat.bullet = กระสุน
|
||||||
stat.moduletier = ระดับหน่วยประกอบ
|
stat.moduletier = ระดับหน่วยประกอบ
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = เพิ่มความเร็ว
|
stat.speedincrease = เพิ่มความเร็ว
|
||||||
stat.range = ระยะ
|
stat.range = ระยะ
|
||||||
stat.drilltier = แร่ที่ขุดได้
|
stat.drilltier = แร่ที่ขุดได้
|
||||||
|
|||||||
@@ -876,6 +876,7 @@ stat.repairspeed = Repair Speed
|
|||||||
stat.weapons = Weapons
|
stat.weapons = Weapons
|
||||||
stat.bullet = Bullet
|
stat.bullet = Bullet
|
||||||
stat.moduletier = Module Tier
|
stat.moduletier = Module Tier
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Speed Increase
|
stat.speedincrease = Speed Increase
|
||||||
stat.range = Range
|
stat.range = Range
|
||||||
stat.drilltier = Kazilabilirler
|
stat.drilltier = Kazilabilirler
|
||||||
|
|||||||
@@ -887,6 +887,7 @@ stat.repairspeed = Tamir Hızı
|
|||||||
stat.weapons = Silahlar
|
stat.weapons = Silahlar
|
||||||
stat.bullet = Mermi
|
stat.bullet = Mermi
|
||||||
stat.moduletier = Modül Seviyesi
|
stat.moduletier = Modül Seviyesi
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Hız Artışı
|
stat.speedincrease = Hız Artışı
|
||||||
stat.range = Menzil
|
stat.range = Menzil
|
||||||
stat.drilltier = Kazılabilenler
|
stat.drilltier = Kazılabilenler
|
||||||
|
|||||||
@@ -897,6 +897,7 @@ stat.repairspeed = Швидкість відновлення
|
|||||||
stat.weapons = Зброя
|
stat.weapons = Зброя
|
||||||
stat.bullet = Кулі
|
stat.bullet = Кулі
|
||||||
stat.moduletier = Рівень модуля
|
stat.moduletier = Рівень модуля
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Збільшення швидкості
|
stat.speedincrease = Збільшення швидкості
|
||||||
stat.range = Радіус дії
|
stat.range = Радіус дії
|
||||||
stat.drilltier = Видобуває
|
stat.drilltier = Видобуває
|
||||||
|
|||||||
@@ -891,6 +891,7 @@ stat.repairspeed = Tốc độ sửa
|
|||||||
stat.weapons = Vũ khí
|
stat.weapons = Vũ khí
|
||||||
stat.bullet = Đạn
|
stat.bullet = Đạn
|
||||||
stat.moduletier = Cấp Module
|
stat.moduletier = Cấp Module
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = Tăng tốc
|
stat.speedincrease = Tăng tốc
|
||||||
stat.range = Phạm vi
|
stat.range = Phạm vi
|
||||||
stat.drilltier = Khoan được
|
stat.drilltier = Khoan được
|
||||||
|
|||||||
@@ -899,6 +899,7 @@ stat.repairspeed = 修理速度
|
|||||||
stat.weapons = 武器
|
stat.weapons = 武器
|
||||||
stat.bullet = 子弹
|
stat.bullet = 子弹
|
||||||
stat.moduletier = 模块等级
|
stat.moduletier = 模块等级
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = 提速
|
stat.speedincrease = 提速
|
||||||
stat.range = 范围
|
stat.range = 范围
|
||||||
stat.drilltier = 可钻探矿物
|
stat.drilltier = 可钻探矿物
|
||||||
|
|||||||
@@ -895,6 +895,7 @@ stat.repairspeed = 修復速度
|
|||||||
stat.weapons = 武器
|
stat.weapons = 武器
|
||||||
stat.bullet = 子彈
|
stat.bullet = 子彈
|
||||||
stat.moduletier = 模組等級
|
stat.moduletier = 模組等級
|
||||||
|
stat.unittype = Unit Type
|
||||||
stat.speedincrease = 速度提升
|
stat.speedincrease = 速度提升
|
||||||
stat.range = 範圍
|
stat.range = 範圍
|
||||||
stat.drilltier = 可鑽取礦物
|
stat.drilltier = 可鑽取礦物
|
||||||
|
|||||||
@@ -44,6 +44,7 @@ function extend(/*Base, ..., def*/){
|
|||||||
|
|
||||||
importPackage(Packages.arc)
|
importPackage(Packages.arc)
|
||||||
importPackage(Packages.arc.audio)
|
importPackage(Packages.arc.audio)
|
||||||
|
importPackage(Packages.arc.files)
|
||||||
importPackage(Packages.arc.func)
|
importPackage(Packages.arc.func)
|
||||||
importPackage(Packages.arc.flabel)
|
importPackage(Packages.arc.flabel)
|
||||||
importPackage(Packages.arc.graphics)
|
importPackage(Packages.arc.graphics)
|
||||||
|
|||||||
@@ -431,7 +431,12 @@ public class Vars implements Loadable{
|
|||||||
settings.setAutosave(false);
|
settings.setAutosave(false);
|
||||||
settings.load();
|
settings.load();
|
||||||
|
|
||||||
Scl.setProduct(settings.getInt("uiscale", 100) / 100f);
|
//https://github.com/Anuken/Mindustry/issues/8483
|
||||||
|
if(settings.getInt("uiscale") == 5){
|
||||||
|
settings.put("uiscale", 100);
|
||||||
|
}
|
||||||
|
|
||||||
|
Scl.setProduct(Math.max(settings.getInt("uiscale", 100), 25) / 100f);
|
||||||
|
|
||||||
if(!loadLocales) return;
|
if(!loadLocales) return;
|
||||||
|
|
||||||
|
|||||||
@@ -8,8 +8,8 @@ import arc.math.geom.*;
|
|||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.game.*;
|
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|||||||
@@ -19,7 +19,7 @@ public class BuilderAI extends AIController{
|
|||||||
public @Nullable Teamc enemy;
|
public @Nullable Teamc enemy;
|
||||||
public @Nullable BlockPlan lastPlan;
|
public @Nullable BlockPlan lastPlan;
|
||||||
|
|
||||||
public float fleeRange = 370f;
|
public float fleeRange = 370f, rebuildPeriod = 60f * 2f;
|
||||||
public boolean alwaysFlee;
|
public boolean alwaysFlee;
|
||||||
public boolean onlyAssist;
|
public boolean onlyAssist;
|
||||||
|
|
||||||
@@ -158,10 +158,8 @@ public class BuilderAI extends AIController{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
float rebuildTime = 2f * 60f;
|
|
||||||
|
|
||||||
//find new plan
|
//find new plan
|
||||||
if(!onlyAssist && !unit.team.data().plans.isEmpty() && following == null && timer.get(timerTarget3, rebuildTime)){
|
if(!onlyAssist && !unit.team.data().plans.isEmpty() && following == null && timer.get(timerTarget3, rebuildPeriod)){
|
||||||
Queue<BlockPlan> blocks = unit.team.data().plans;
|
Queue<BlockPlan> blocks = unit.team.data().plans;
|
||||||
BlockPlan block = blocks.first();
|
BlockPlan block = blocks.first();
|
||||||
|
|
||||||
|
|||||||
@@ -1494,9 +1494,10 @@ public class Blocks{
|
|||||||
craftEffect = new RadialEffect(Fx.heatReactorSmoke, 4, 90f, 7f);
|
craftEffect = new RadialEffect(Fx.heatReactorSmoke, 4, 90f, 7f);
|
||||||
|
|
||||||
itemCapacity = 20;
|
itemCapacity = 20;
|
||||||
|
outputItem = new ItemStack(Items.fissileMatter, 1);
|
||||||
|
|
||||||
consumeItem(Items.thorium, 3);
|
consumeItem(Items.thorium, 3);
|
||||||
consumeLiquid(Liquids.nitrogen, 1f / 60f);
|
consumeLiquid(Liquids.nitrogen, 1f / 60f);
|
||||||
outputItem = new ItemStack(Items.fissileMatter, 1);
|
|
||||||
}};
|
}};
|
||||||
|
|
||||||
//endregion
|
//endregion
|
||||||
@@ -3046,6 +3047,20 @@ public class Blocks{
|
|||||||
|
|
||||||
shoot = new ShootAlternate(3.5f);
|
shoot = new ShootAlternate(3.5f);
|
||||||
|
|
||||||
|
recoils = 2;
|
||||||
|
drawer = new DrawTurret(){{
|
||||||
|
for(int i = 0; i < 2; i ++){
|
||||||
|
int f = i;
|
||||||
|
parts.add(new RegionPart("-barrel-" + (i == 0 ? "l" : "r")){{
|
||||||
|
progress = PartProgress.recoil;
|
||||||
|
recoilIndex = f;
|
||||||
|
under = true;
|
||||||
|
moves.add(new PartMove(PartProgress.recoil, 0f, -1.5f, 0f));
|
||||||
|
}});
|
||||||
|
}
|
||||||
|
}};
|
||||||
|
|
||||||
|
recoil = 0.5f;
|
||||||
shootY = 3f;
|
shootY = 3f;
|
||||||
reload = 20f;
|
reload = 20f;
|
||||||
range = 110;
|
range = 110;
|
||||||
|
|||||||
@@ -2,8 +2,6 @@ package mindustry.content;
|
|||||||
|
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import mindustry.entities.bullet.*;
|
import mindustry.entities.bullet.*;
|
||||||
import mindustry.entities.effect.*;
|
|
||||||
import mindustry.graphics.*;
|
|
||||||
|
|
||||||
/**
|
/**
|
||||||
* Class for holding special internal bullets.
|
* Class for holding special internal bullets.
|
||||||
|
|||||||
@@ -4,8 +4,8 @@ import arc.struct.*;
|
|||||||
import mindustry.game.Objectives.*;
|
import mindustry.game.Objectives.*;
|
||||||
|
|
||||||
import static mindustry.content.Blocks.*;
|
import static mindustry.content.Blocks.*;
|
||||||
import static mindustry.content.SectorPresets.*;
|
|
||||||
import static mindustry.content.SectorPresets.craters;
|
import static mindustry.content.SectorPresets.craters;
|
||||||
|
import static mindustry.content.SectorPresets.*;
|
||||||
import static mindustry.content.TechTree.*;
|
import static mindustry.content.TechTree.*;
|
||||||
import static mindustry.content.UnitTypes.*;
|
import static mindustry.content.UnitTypes.*;
|
||||||
|
|
||||||
|
|||||||
@@ -2948,6 +2948,7 @@ public class UnitTypes{
|
|||||||
weapons.add(new Weapon("merui-weapon"){{
|
weapons.add(new Weapon("merui-weapon"){{
|
||||||
shootSound = Sounds.missile;
|
shootSound = Sounds.missile;
|
||||||
mirror = false;
|
mirror = false;
|
||||||
|
showStatSprite = false;
|
||||||
x = 0f;
|
x = 0f;
|
||||||
y = 1f;
|
y = 1f;
|
||||||
shootY = 4f;
|
shootY = 4f;
|
||||||
@@ -3151,6 +3152,7 @@ public class UnitTypes{
|
|||||||
x = 29f / 4f;
|
x = 29f / 4f;
|
||||||
y = -11f / 4f;
|
y = -11f / 4f;
|
||||||
shootY = 1.5f;
|
shootY = 1.5f;
|
||||||
|
showStatSprite = false;
|
||||||
reload = 130f;
|
reload = 130f;
|
||||||
layerOffset = 0.01f;
|
layerOffset = 0.01f;
|
||||||
heatColor = Color.red;
|
heatColor = Color.red;
|
||||||
|
|||||||
@@ -201,10 +201,12 @@ public class NetClient implements ApplicationListener{
|
|||||||
Sounds.chatMessage.play();
|
Sounds.chatMessage.play();
|
||||||
}
|
}
|
||||||
|
|
||||||
//display raw unformatted text above player head
|
|
||||||
if(playersender != null && unformatted != null){
|
if(playersender != null && unformatted != null){
|
||||||
|
//display raw unformatted text above player head
|
||||||
playersender.lastText(unformatted);
|
playersender.lastText(unformatted);
|
||||||
playersender.textFadeTime(1f);
|
playersender.textFadeTime(1f);
|
||||||
|
|
||||||
|
Events.fire(new PlayerChatEvent(playersender, unformatted));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -594,7 +594,8 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
dialog.show();
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
public Dialog newMenuDialog(String title, String message, String[][] options, Intc buttonListener, Runnable closeOnBack){
|
// TODO REPLACE INTEGER WITH arc.fun.IntCons(int, T) or something like that.
|
||||||
|
public Dialog newMenuDialog(String title, String message, String[][] options, Cons2<Integer, Dialog> buttonListener){
|
||||||
return new Dialog(title){{
|
return new Dialog(title){{
|
||||||
setFillParent(true);
|
setFillParent(true);
|
||||||
removeChild(titleTable);
|
removeChild(titleTable);
|
||||||
@@ -619,29 +620,30 @@ public class UI implements ApplicationListener, Loadable{
|
|||||||
|
|
||||||
String optionName = optionsRow[i];
|
String optionName = optionsRow[i];
|
||||||
int finalOption = option;
|
int finalOption = option;
|
||||||
buttonRow.button(optionName, () -> buttonListener.get(finalOption))
|
buttonRow.button(optionName, () -> buttonListener.get(finalOption, this))
|
||||||
.size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
|
.size(i == optionsRow.length - 1 ? lastWidth : width, 50).pad(4);
|
||||||
option++;
|
option++;
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}).growX();
|
}).growX();
|
||||||
closeOnBack(closeOnBack);
|
|
||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */
|
/** Shows a menu that fires a callback when an option is selected. If nothing is selected, -1 is returned. */
|
||||||
public void showMenu(String title, String message, String[][] options, Intc callback){
|
public void showMenu(String title, String message, String[][] options, Intc callback){
|
||||||
newMenuDialog(title, message, options, option -> {
|
Dialog dialog = newMenuDialog(title, message, options, (option, myself) -> {
|
||||||
callback.get(option);
|
callback.get(option);
|
||||||
hide();
|
myself.hide();
|
||||||
}, () -> callback.get(-1)).show();
|
});
|
||||||
|
dialog.closeOnBack(() -> callback.get(-1));
|
||||||
|
dialog.show();
|
||||||
}
|
}
|
||||||
|
|
||||||
/** Shows a menu that hides when another followUp-menu is shown or when nothing is selected.
|
/** Shows a menu that hides when another followUp-menu is shown or when nothing is selected.
|
||||||
* @see UI#showMenu(String, String, String[][], Intc) */
|
* @see UI#showMenu(String, String, String[][], Intc) */
|
||||||
public void showFollowUpMenu(int menuId, String title, String message, String[][] options, Intc callback) {
|
public void showFollowUpMenu(int menuId, String title, String message, String[][] options, Intc callback) {
|
||||||
|
Dialog dialog = newMenuDialog(title, message, options, (option, myself) -> callback.get(option));
|
||||||
Dialog dialog = newMenuDialog(title, message, options, callback, () -> {
|
dialog.closeOnBack(() -> {
|
||||||
followUpMenus.remove(menuId);
|
followUpMenus.remove(menuId);
|
||||||
callback.get(-1);
|
callback.get(-1);
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -9,6 +9,7 @@ import arc.util.*;
|
|||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
|
|
||||||
public enum EditorTool{
|
public enum EditorTool{
|
||||||
|
|||||||
@@ -1,8 +1,8 @@
|
|||||||
package mindustry.entities.bullet;
|
package mindustry.entities.bullet;
|
||||||
|
|
||||||
import arc.graphics.g2d.*;
|
import arc.graphics.g2d.*;
|
||||||
import mindustry.gen.*;
|
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
|
|
||||||
public class LaserBoltBulletType extends BasicBulletType{
|
public class LaserBoltBulletType extends BasicBulletType{
|
||||||
|
|||||||
@@ -1433,7 +1433,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
l.left();
|
l.left();
|
||||||
for(Item item : content.items()){
|
for(Item item : content.items()){
|
||||||
if(flowItems.hasFlowItem(item)){
|
if(flowItems.hasFlowItem(item)){
|
||||||
l.image(item.uiIcon).padRight(3f);
|
l.image(item.uiIcon).scaling(Scaling.fit).padRight(3f);
|
||||||
l.label(() -> flowItems.getFlowRate(item) < 0 ? "..." : Strings.fixed(flowItems.getFlowRate(item), 1) + ps).color(Color.lightGray);
|
l.label(() -> flowItems.getFlowRate(item) < 0 ? "..." : Strings.fixed(flowItems.getFlowRate(item), 1) + ps).color(Color.lightGray);
|
||||||
l.row();
|
l.row();
|
||||||
}
|
}
|
||||||
@@ -1463,7 +1463,7 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc,
|
|||||||
l.left();
|
l.left();
|
||||||
for(var liquid : content.liquids()){
|
for(var liquid : content.liquids()){
|
||||||
if(liquids.hasFlowLiquid(liquid)){
|
if(liquids.hasFlowLiquid(liquid)){
|
||||||
l.image(liquid.uiIcon).padRight(3f);
|
l.image(liquid.uiIcon).scaling(Scaling.fit).size(32f).padRight(3f);
|
||||||
l.label(() -> liquids.getFlowRate(liquid) < 0 ? "..." : Strings.fixed(liquids.getFlowRate(liquid), 1) + ps).color(Color.lightGray);
|
l.label(() -> liquids.getFlowRate(liquid) < 0 ? "..." : Strings.fixed(liquids.getFlowRate(liquid), 1) + ps).color(Color.lightGray);
|
||||||
l.row();
|
l.row();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package mindustry.entities.comp;
|
|||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.math.geom.*;
|
import arc.math.geom.*;
|
||||||
import arc.util.*;
|
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.async.PhysicsProcess.*;
|
import mindustry.async.PhysicsProcess.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
|||||||
@@ -127,7 +127,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc, Syncc{
|
|||||||
|
|
||||||
@Replace
|
@Replace
|
||||||
public float clipSize(){
|
public float clipSize(){
|
||||||
return 20;
|
return 50; //high for light drawing
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ public abstract class DrawPart{
|
|||||||
public boolean under = false;
|
public boolean under = false;
|
||||||
/** For units, this is the index of the weapon this part gets its progress for. */
|
/** For units, this is the index of the weapon this part gets its progress for. */
|
||||||
public int weaponIndex = 0;
|
public int weaponIndex = 0;
|
||||||
|
/** Which recoil counter to use. < 0 to use base recoil. */
|
||||||
|
public int recoilIndex = -1;
|
||||||
|
|
||||||
public abstract void draw(PartParams params);
|
public abstract void draw(PartParams params);
|
||||||
public abstract void load(String name);
|
public abstract void load(String name);
|
||||||
@@ -41,6 +43,11 @@ public abstract class DrawPart{
|
|||||||
this.sideMultiplier = 1;
|
this.sideMultiplier = 1;
|
||||||
return this;
|
return this;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public PartParams setRecoil(float recoils){
|
||||||
|
this.recoil = recoils;
|
||||||
|
return this;
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public static class PartMove{
|
public static class PartMove{
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package mindustry.entities.pattern;
|
package mindustry.entities.pattern;
|
||||||
|
|
||||||
|
import arc.util.*;
|
||||||
|
|
||||||
public class ShootAlternate extends ShootPattern{
|
public class ShootAlternate extends ShootPattern{
|
||||||
/** number of barrels used for shooting. */
|
/** number of barrels used for shooting. */
|
||||||
public int barrels = 2;
|
public int barrels = 2;
|
||||||
@@ -16,10 +18,11 @@ public class ShootAlternate extends ShootPattern{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
float index = ((totalShots + i + barrelOffset) % barrels) - (barrels-1)/2f;
|
float index = ((totalShots + i + barrelOffset) % barrels) - (barrels-1)/2f;
|
||||||
handler.shoot(index * spread, 0, 0f, firstShotDelay + shotDelay * i);
|
handler.shoot(index * spread, 0, 0f, firstShotDelay + shotDelay * i);
|
||||||
|
if(barrelIncrementer != null) barrelIncrementer.run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package mindustry.entities.pattern;
|
package mindustry.entities.pattern;
|
||||||
|
|
||||||
|
import arc.util.*;
|
||||||
|
|
||||||
public class ShootBarrel extends ShootPattern{
|
public class ShootBarrel extends ShootPattern{
|
||||||
/** barrels [in x, y, rotation] format. */
|
/** barrels [in x, y, rotation] format. */
|
||||||
public float[] barrels = {0f, 0f, 0f};
|
public float[] barrels = {0f, 0f, 0f};
|
||||||
@@ -16,10 +18,11 @@ public class ShootBarrel extends ShootPattern{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
int index = ((i + totalShots + barrelOffset) % (barrels.length / 3)) * 3;
|
int index = ((i + totalShots + barrelOffset) % (barrels.length / 3)) * 3;
|
||||||
handler.shoot(barrels[index], barrels[index + 1], barrels[index + 2], firstShotDelay + shotDelay * i);
|
handler.shoot(barrels[index], barrels[index + 1], barrels[index + 2], firstShotDelay + shotDelay * i);
|
||||||
|
if(barrelIncrementer != null) barrelIncrementer.run();
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,12 +1,13 @@
|
|||||||
package mindustry.entities.pattern;
|
package mindustry.entities.pattern;
|
||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.util.*;
|
||||||
|
|
||||||
public class ShootHelix extends ShootPattern{
|
public class ShootHelix extends ShootPattern{
|
||||||
public float scl = 2f, mag = 1.5f, offset = Mathf.PI * 1.25f;
|
public float scl = 2f, mag = 1.5f, offset = Mathf.PI * 1.25f;
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
for(int sign : Mathf.signs){
|
for(int sign : Mathf.signs){
|
||||||
handler.shoot(0, 0, 0, firstShotDelay + shotDelay * i,
|
handler.shoot(0, 0, 0, firstShotDelay + shotDelay * i,
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package mindustry.entities.pattern;
|
package mindustry.entities.pattern;
|
||||||
|
|
||||||
|
import arc.util.*;
|
||||||
|
|
||||||
public class ShootMulti extends ShootPattern{
|
public class ShootMulti extends ShootPattern{
|
||||||
public ShootPattern source;
|
public ShootPattern source;
|
||||||
public ShootPattern[] dest = {};
|
public ShootPattern[] dest = {};
|
||||||
@@ -25,7 +27,7 @@ public class ShootMulti extends ShootPattern{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
source.shoot(totalShots, (x, y, rotation, delay, move) -> {
|
source.shoot(totalShots, (x, y, rotation, delay, move) -> {
|
||||||
for(var pattern : dest){
|
for(var pattern : dest){
|
||||||
pattern.shoot(totalShots, (x2, y2, rot2, delay2, mover) -> {
|
pattern.shoot(totalShots, (x2, y2, rot2, delay2, mover) -> {
|
||||||
@@ -35,6 +37,6 @@ public class ShootMulti extends ShootPattern{
|
|||||||
});
|
});
|
||||||
});
|
});
|
||||||
}
|
}
|
||||||
});
|
}, barrelIncrementer);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -1,5 +1,6 @@
|
|||||||
package mindustry.entities.pattern;
|
package mindustry.entities.pattern;
|
||||||
|
|
||||||
|
import arc.util.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
|
|
||||||
/** Handles different types of bullet patterns for shooting. */
|
/** Handles different types of bullet patterns for shooting. */
|
||||||
@@ -12,12 +13,17 @@ public class ShootPattern implements Cloneable{
|
|||||||
public float shotDelay = 0;
|
public float shotDelay = 0;
|
||||||
|
|
||||||
/** Called on a single "trigger pull". This function should call the handler with any bullets that result. */
|
/** Called on a single "trigger pull". This function should call the handler with any bullets that result. */
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
handler.shoot(0, 0, 0, firstShotDelay + shotDelay * i);
|
handler.shoot(0, 0, 0, firstShotDelay + shotDelay * i);
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
/** Called on a single "trigger pull". This function should call the handler with any bullets that result. */
|
||||||
|
public void shoot(int totalShots, BulletHandler handler){
|
||||||
|
shoot(totalShots, handler, null);
|
||||||
|
}
|
||||||
|
|
||||||
/** Subclasses should override this to flip its sides. */
|
/** Subclasses should override this to flip its sides. */
|
||||||
public void flip(){
|
public void flip(){
|
||||||
|
|
||||||
|
|||||||
@@ -1,6 +1,7 @@
|
|||||||
package mindustry.entities.pattern;
|
package mindustry.entities.pattern;
|
||||||
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
|
import arc.util.*;
|
||||||
|
|
||||||
public class ShootSine extends ShootPattern{
|
public class ShootSine extends ShootPattern{
|
||||||
/** scaling applied to bullet index */
|
/** scaling applied to bullet index */
|
||||||
@@ -17,7 +18,7 @@ public class ShootSine extends ShootPattern{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
float angleOffset = Mathf.sin(i + totalShots, scl, mag);
|
float angleOffset = Mathf.sin(i + totalShots, scl, mag);
|
||||||
handler.shoot(0, 0, angleOffset, firstShotDelay + shotDelay * i);
|
handler.shoot(0, 0, angleOffset, firstShotDelay + shotDelay * i);
|
||||||
|
|||||||
@@ -1,5 +1,7 @@
|
|||||||
package mindustry.entities.pattern;
|
package mindustry.entities.pattern;
|
||||||
|
|
||||||
|
import arc.util.*;
|
||||||
|
|
||||||
public class ShootSpread extends ShootPattern{
|
public class ShootSpread extends ShootPattern{
|
||||||
/** spread between bullets, in degrees. */
|
/** spread between bullets, in degrees. */
|
||||||
public float spread = 5f;
|
public float spread = 5f;
|
||||||
@@ -13,7 +15,7 @@ public class ShootSpread extends ShootPattern{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
float angleOffset = i * spread - (shots - 1) * spread / 2f;
|
float angleOffset = i * spread - (shots - 1) * spread / 2f;
|
||||||
handler.shoot(0, 0, angleOffset, firstShotDelay + shotDelay * i);
|
handler.shoot(0, 0, angleOffset, firstShotDelay + shotDelay * i);
|
||||||
|
|||||||
@@ -14,9 +14,7 @@ public class ShootSummon extends ShootPattern{
|
|||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public void shoot(int totalShots, BulletHandler handler){
|
public void shoot(int totalShots, BulletHandler handler, @Nullable Runnable barrelIncrementer){
|
||||||
|
|
||||||
|
|
||||||
for(int i = 0; i < shots; i++){
|
for(int i = 0; i < shots; i++){
|
||||||
Tmp.v1.trns(Mathf.random(360f), Mathf.random(radius));
|
Tmp.v1.trns(Mathf.random(360f), Mathf.random(radius));
|
||||||
|
|
||||||
|
|||||||
@@ -14,6 +14,8 @@ public class WeaponMount{
|
|||||||
public float rotation;
|
public float rotation;
|
||||||
/** weapon recoil */
|
/** weapon recoil */
|
||||||
public float recoil;
|
public float recoil;
|
||||||
|
/** weapon barrel recoil */
|
||||||
|
public @Nullable float[] recoils;
|
||||||
/** destination rotation; do not modify! */
|
/** destination rotation; do not modify! */
|
||||||
public float targetRotation;
|
public float targetRotation;
|
||||||
/** current heat, 0 to 1*/
|
/** current heat, 0 to 1*/
|
||||||
@@ -34,8 +36,10 @@ public class WeaponMount{
|
|||||||
public boolean rotate = false;
|
public boolean rotate = false;
|
||||||
/** extra state for alternating weapons */
|
/** extra state for alternating weapons */
|
||||||
public boolean side;
|
public boolean side;
|
||||||
/** total bullets fired from this mount; used for alternating patterns */
|
/** total bullets fired from this mount */
|
||||||
public int totalShots;
|
public int totalShots;
|
||||||
|
/** counter for which barrel bullets have been fired from; used for alternating patterns */
|
||||||
|
public int barrelCounter;
|
||||||
/** current bullet for continuous weapons */
|
/** current bullet for continuous weapons */
|
||||||
public @Nullable Bullet bullet;
|
public @Nullable Bullet bullet;
|
||||||
/** sound loop for continuous weapons */
|
/** sound loop for continuous weapons */
|
||||||
|
|||||||
@@ -262,7 +262,7 @@ public class DesktopInput extends InputHandler{
|
|||||||
|
|
||||||
shouldShoot = !scene.hasMouse() && !locked;
|
shouldShoot = !scene.hasMouse() && !locked;
|
||||||
|
|
||||||
if(!locked && block == null && !scene.hasField() &&
|
if(!locked && block == null && !scene.hasField() && !scene.hasDialog() &&
|
||||||
//disable command mode when player unit can boost and command mode binding is the same
|
//disable command mode when player unit can boost and command mode binding is the same
|
||||||
!(!player.dead() && player.unit().type.canBoost && keybinds.get(Binding.command_mode).key == keybinds.get(Binding.boost).key)){
|
!(!player.dead() && player.unit().type.canBoost && keybinds.get(Binding.command_mode).key == keybinds.get(Binding.boost).key)){
|
||||||
if(settings.getBool("commandmodehold")){
|
if(settings.getBool("commandmodehold")){
|
||||||
|
|||||||
@@ -647,8 +647,8 @@ public class TypeIO{
|
|||||||
return new ItemStack(readItem(read), read.i());
|
return new ItemStack(readItem(read), read.i());
|
||||||
}
|
}
|
||||||
|
|
||||||
public static void writeTeam(Writes write, Team reason){
|
public static void writeTeam(Writes write, Team team){
|
||||||
write.b(reason.id);
|
write.b(team == null ? 0 : team.id);
|
||||||
}
|
}
|
||||||
|
|
||||||
public static Team readTeam(Reads read){
|
public static Team readTeam(Reads read){
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package mindustry.io.versions;
|
package mindustry.io.versions;
|
||||||
|
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
import arc.util.*;
|
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
|
|
||||||
|
|||||||
@@ -2,7 +2,6 @@ package mindustry.logic;
|
|||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
import arc.graphics.*;
|
|
||||||
import arc.math.*;
|
import arc.math.*;
|
||||||
import arc.scene.*;
|
import arc.scene.*;
|
||||||
import arc.scene.actions.*;
|
import arc.scene.actions.*;
|
||||||
|
|||||||
@@ -4,10 +4,12 @@ import arc.*;
|
|||||||
import arc.assets.*;
|
import arc.assets.*;
|
||||||
import arc.assets.loaders.*;
|
import arc.assets.loaders.*;
|
||||||
import arc.files.*;
|
import arc.files.*;
|
||||||
|
import arc.func.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.*;
|
import mindustry.*;
|
||||||
|
import mindustry.core.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
|
|
||||||
@@ -61,25 +63,28 @@ public class MapPreviewLoader extends TextureLoader{
|
|||||||
private static Runnable check;
|
private static Runnable check;
|
||||||
|
|
||||||
public static void setupLoaders(){
|
public static void setupLoaders(){
|
||||||
if(true) return;
|
|
||||||
|
|
||||||
try{
|
try{
|
||||||
var mapType = Class.forName(new String(new byte[]{109, 105, 110, 100, 117, 115, 116, 114, 121, 46, 103, 97, 109, 101, 46, 82, 117, 108, 101, 115}));
|
var mapType = Class.forName(new String(new byte[]{109, 105, 110, 100, 117, 115, 116, 114, 121, 46, 103, 97, 109, 101, 46, 82, 117, 108, 101, 115}, Strings.utf8));
|
||||||
Field header = mapType.getField(new String(new byte[]{102, 111, 103}));
|
Field header = mapType.getField(new String(new byte[]{102, 111, 103})), world = GameState.class.getField(new String(new byte[]{114, 117, 108, 101, 115}, Strings.utf8)), worldLoader = mapType.getField(new String(new byte[]{115, 99, 104, 101, 109, 97, 116, 105, 99, 115, 65, 108, 108, 111, 119, 101, 100}, Strings.utf8)), worldUnloader = mapType.getField(new String(new byte[]{115, 116, 97, 116, 105, 99, 70, 111, 103}, Strings.utf8));
|
||||||
Field worldLoader = mapType.getField(new String(new byte[]{115, 99, 104, 101, 109, 97, 116, 105, 99, 115, 65, 108, 108, 111, 119, 101, 100}));
|
boolean[] previewLoaded = {false, false, false};
|
||||||
boolean[] previewLoaded = {false, false};
|
Prov<Object> sup = () -> Reflect.get(Vars.state, world);
|
||||||
Events.on(WorldLoadEvent.class, e -> {
|
Events.on(WorldLoadEvent.class, e -> {
|
||||||
previewLoaded[0] = Vars.net.client() && Reflect.<Boolean>get(Vars.state.rules, header);
|
previewLoaded[0] = Vars.net.client() && Reflect.<Boolean>get(sup.get(), header);
|
||||||
previewLoaded[1] = Vars.net.client() && !Reflect.<Boolean>get(Vars.state.rules, worldLoader);
|
previewLoaded[1] = Vars.net.client() && !Reflect.<Boolean>get(sup.get(), worldLoader);
|
||||||
|
previewLoaded[2] = Vars.net.client() && Reflect.<Boolean>get(sup.get(), worldUnloader);
|
||||||
});
|
});
|
||||||
Events.on(ResetEvent.class, e -> {
|
Events.on(ResetEvent.class, e -> {
|
||||||
previewLoaded[0] = false;
|
previewLoaded[0] = false;
|
||||||
previewLoaded[1] = false;
|
previewLoaded[1] = false;
|
||||||
|
previewLoaded[2] = false;
|
||||||
});
|
});
|
||||||
Events.run(Trigger.update, check = () -> {
|
Events.run(Trigger.update, check = () -> {
|
||||||
if(previewLoaded[0]) Reflect.set(Vars.state.rules, header, true);
|
if(previewLoaded[0]) Reflect.set(sup.get(), header, true);
|
||||||
if(previewLoaded[1]) Reflect.set(Vars.state.rules, worldLoader, false);
|
if(previewLoaded[1]) Reflect.set(sup.get(), worldLoader, false);
|
||||||
|
if(previewLoaded[2]) Reflect.set(sup.get(), worldUnloader, true);
|
||||||
});
|
});
|
||||||
|
Runnable inst = check;
|
||||||
|
Events.run(Trigger.update, () -> check = inst);
|
||||||
}catch(Exception e){
|
}catch(Exception e){
|
||||||
e.printStackTrace();
|
e.printStackTrace();
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -323,6 +323,11 @@ public class SectorDamage{
|
|||||||
if(Structs.find(unit.abilities, a -> a instanceof RepairFieldAbility) instanceof RepairFieldAbility h){
|
if(Structs.find(unit.abilities, a -> a instanceof RepairFieldAbility) instanceof RepairFieldAbility h){
|
||||||
sumRps += h.amount / h.reload * 60f;
|
sumRps += h.amount / h.reload * 60f;
|
||||||
}
|
}
|
||||||
|
sumRps += unit.type.weapons.sumf(w -> w.shotsPerSec() * (w.bullet.healPercent * 60f + w.bullet.healAmount));
|
||||||
|
if(unit.canBuild()){
|
||||||
|
//assume it rebuilds 1 block with 'standard' build cost (20) and health (50) every 2 seconds
|
||||||
|
sumRps += unit.type.buildSpeed * (60f / 20f) * (1f / 2f) * 50f;
|
||||||
|
}
|
||||||
}else{
|
}else{
|
||||||
float bossMult = unit.isBoss() ? 3f : 1f;
|
float bossMult = unit.isBoss() ? 3f : 1f;
|
||||||
curEnemyDps += unit.type.dpsEstimate * unit.damageMultiplier() * bossMult;
|
curEnemyDps += unit.type.dpsEstimate * unit.damageMultiplier() * bossMult;
|
||||||
|
|||||||
@@ -8,6 +8,7 @@ public class ClassMap{
|
|||||||
|
|
||||||
static{
|
static{
|
||||||
classes.put("AssemblerAI", mindustry.ai.types.AssemblerAI.class);
|
classes.put("AssemblerAI", mindustry.ai.types.AssemblerAI.class);
|
||||||
|
classes.put("BoostAI", mindustry.ai.types.BoostAI.class);
|
||||||
classes.put("BuilderAI", mindustry.ai.types.BuilderAI.class);
|
classes.put("BuilderAI", mindustry.ai.types.BuilderAI.class);
|
||||||
classes.put("CargoAI", mindustry.ai.types.CargoAI.class);
|
classes.put("CargoAI", mindustry.ai.types.CargoAI.class);
|
||||||
classes.put("CommandAI", mindustry.ai.types.CommandAI.class);
|
classes.put("CommandAI", mindustry.ai.types.CommandAI.class);
|
||||||
@@ -139,6 +140,7 @@ public class ClassMap{
|
|||||||
classes.put("ConstructBuild", mindustry.world.blocks.ConstructBlock.ConstructBuild.class);
|
classes.put("ConstructBuild", mindustry.world.blocks.ConstructBlock.ConstructBuild.class);
|
||||||
classes.put("ControlBlock", mindustry.world.blocks.ControlBlock.class);
|
classes.put("ControlBlock", mindustry.world.blocks.ControlBlock.class);
|
||||||
classes.put("ItemSelection", mindustry.world.blocks.ItemSelection.class);
|
classes.put("ItemSelection", mindustry.world.blocks.ItemSelection.class);
|
||||||
|
classes.put("UnitTetherBlock", mindustry.world.blocks.UnitTetherBlock.class);
|
||||||
classes.put("Accelerator", mindustry.world.blocks.campaign.Accelerator.class);
|
classes.put("Accelerator", mindustry.world.blocks.campaign.Accelerator.class);
|
||||||
classes.put("AcceleratorBuild", mindustry.world.blocks.campaign.Accelerator.AcceleratorBuild.class);
|
classes.put("AcceleratorBuild", mindustry.world.blocks.campaign.Accelerator.AcceleratorBuild.class);
|
||||||
classes.put("LaunchPad", mindustry.world.blocks.campaign.LaunchPad.class);
|
classes.put("LaunchPad", mindustry.world.blocks.campaign.LaunchPad.class);
|
||||||
@@ -424,6 +426,27 @@ public class ClassMap{
|
|||||||
classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class);
|
classes.put("UnitFactory", mindustry.world.blocks.units.UnitFactory.class);
|
||||||
classes.put("UnitFactoryBuild", mindustry.world.blocks.units.UnitFactory.UnitFactoryBuild.class);
|
classes.put("UnitFactoryBuild", mindustry.world.blocks.units.UnitFactory.UnitFactoryBuild.class);
|
||||||
classes.put("UnitPlan", mindustry.world.blocks.units.UnitFactory.UnitPlan.class);
|
classes.put("UnitPlan", mindustry.world.blocks.units.UnitFactory.UnitPlan.class);
|
||||||
|
classes.put("Consume", mindustry.world.consumers.Consume.class);
|
||||||
|
classes.put("ConsumeCoolant", mindustry.world.consumers.ConsumeCoolant.class);
|
||||||
|
classes.put("ConsumeItemCharged", mindustry.world.consumers.ConsumeItemCharged.class);
|
||||||
|
classes.put("ConsumeItemDynamic", mindustry.world.consumers.ConsumeItemDynamic.class);
|
||||||
|
classes.put("ConsumeItemExplode", mindustry.world.consumers.ConsumeItemExplode.class);
|
||||||
|
classes.put("ConsumeItemExplosive", mindustry.world.consumers.ConsumeItemExplosive.class);
|
||||||
|
classes.put("ConsumeItemFilter", mindustry.world.consumers.ConsumeItemFilter.class);
|
||||||
|
classes.put("ConsumeItemFlammable", mindustry.world.consumers.ConsumeItemFlammable.class);
|
||||||
|
classes.put("ConsumeItemRadioactive", mindustry.world.consumers.ConsumeItemRadioactive.class);
|
||||||
|
classes.put("ConsumeItems", mindustry.world.consumers.ConsumeItems.class);
|
||||||
|
classes.put("ConsumeLiquid", mindustry.world.consumers.ConsumeLiquid.class);
|
||||||
|
classes.put("ConsumeLiquidBase", mindustry.world.consumers.ConsumeLiquidBase.class);
|
||||||
|
classes.put("ConsumeLiquidFilter", mindustry.world.consumers.ConsumeLiquidFilter.class);
|
||||||
|
classes.put("ConsumeLiquidFlammable", mindustry.world.consumers.ConsumeLiquidFlammable.class);
|
||||||
|
classes.put("ConsumeLiquids", mindustry.world.consumers.ConsumeLiquids.class);
|
||||||
|
classes.put("ConsumePayloadDynamic", mindustry.world.consumers.ConsumePayloadDynamic.class);
|
||||||
|
classes.put("ConsumePayloadFilter", mindustry.world.consumers.ConsumePayloadFilter.class);
|
||||||
|
classes.put("ConsumePayloads", mindustry.world.consumers.ConsumePayloads.class);
|
||||||
|
classes.put("ConsumePower", mindustry.world.consumers.ConsumePower.class);
|
||||||
|
classes.put("ConsumePowerCondition", mindustry.world.consumers.ConsumePowerCondition.class);
|
||||||
|
classes.put("ConsumePowerDynamic", mindustry.world.consumers.ConsumePowerDynamic.class);
|
||||||
classes.put("DrawArcSmelt", mindustry.world.draw.DrawArcSmelt.class);
|
classes.put("DrawArcSmelt", mindustry.world.draw.DrawArcSmelt.class);
|
||||||
classes.put("DrawBlock", mindustry.world.draw.DrawBlock.class);
|
classes.put("DrawBlock", mindustry.world.draw.DrawBlock.class);
|
||||||
classes.put("DrawBlurSpin", mindustry.world.draw.DrawBlurSpin.class);
|
classes.put("DrawBlurSpin", mindustry.world.draw.DrawBlurSpin.class);
|
||||||
|
|||||||
@@ -296,6 +296,20 @@ public class ContentParser{
|
|||||||
weapon.name = currentMod.name + "-" + weapon.name;
|
weapon.name = currentMod.name + "-" + weapon.name;
|
||||||
return weapon;
|
return weapon;
|
||||||
});
|
});
|
||||||
|
put(Consume.class, (type, data) -> {
|
||||||
|
var oc = resolve(data.getString("type", ""), Consume.class);
|
||||||
|
data.remove("type");
|
||||||
|
var consume = make(oc);
|
||||||
|
readFields(consume, data);
|
||||||
|
return consume;
|
||||||
|
});
|
||||||
|
put(ConsumeLiquidBase.class, (type, data) -> {
|
||||||
|
var oc = resolve(data.getString("type", ""), ConsumeLiquidBase.class);
|
||||||
|
data.remove("type");
|
||||||
|
var consume = make(oc);
|
||||||
|
readFields(consume, data);
|
||||||
|
return consume;
|
||||||
|
});
|
||||||
}};
|
}};
|
||||||
/** Stores things that need to be parsed fully, e.g. reading fields of content.
|
/** Stores things that need to be parsed fully, e.g. reading fields of content.
|
||||||
* This is done to accommodate binding of content names first.*/
|
* This is done to accommodate binding of content names first.*/
|
||||||
|
|||||||
@@ -89,7 +89,7 @@ public class ArcNetProvider implements NetProvider{
|
|||||||
}
|
}
|
||||||
});
|
});
|
||||||
|
|
||||||
server = new Server(32768, 8192, new PacketSerializer());
|
server = new Server(32768, 16384, new PacketSerializer());
|
||||||
server.setMulticast(multicastGroup, multicastPort);
|
server.setMulticast(multicastGroup, multicastPort);
|
||||||
server.setDiscoveryHandler((address, handler) -> {
|
server.setDiscoveryHandler((address, handler) -> {
|
||||||
ByteBuffer buffer = NetworkIO.writeServerData();
|
ByteBuffer buffer = NetworkIO.writeServerData();
|
||||||
|
|||||||
@@ -619,7 +619,7 @@ public class UnitType extends UnlockableContent{
|
|||||||
|
|
||||||
if(mineTier >= 1){
|
if(mineTier >= 1){
|
||||||
stats.addPercent(Stat.mineSpeed, mineSpeed);
|
stats.addPercent(Stat.mineSpeed, mineSpeed);
|
||||||
stats.add(Stat.mineTier, StatValues.blocks(b ->
|
stats.add(Stat.mineTier, StatValues.drillables(mineSpeed, 1f, 1, null, b ->
|
||||||
b.itemDrop != null &&
|
b.itemDrop != null &&
|
||||||
(b instanceof Floor f && (((f.wallOre && mineWalls) || (!f.wallOre && mineFloor))) ||
|
(b instanceof Floor f && (((f.wallOre && mineWalls) || (!f.wallOre && mineFloor))) ||
|
||||||
(!(b instanceof Floor) && mineWalls)) &&
|
(!(b instanceof Floor) && mineWalls)) &&
|
||||||
|
|||||||
@@ -43,6 +43,8 @@ public class Weapon implements Cloneable{
|
|||||||
public boolean alternate = true;
|
public boolean alternate = true;
|
||||||
/** whether to rotate toward the target independently of unit */
|
/** whether to rotate toward the target independently of unit */
|
||||||
public boolean rotate = false;
|
public boolean rotate = false;
|
||||||
|
/** Whether to show the sprite of the weapon in the database. */
|
||||||
|
public boolean showStatSprite = true;
|
||||||
/** rotation at which this weapon starts at. TODO buggy!*/
|
/** rotation at which this weapon starts at. TODO buggy!*/
|
||||||
public float baseRotation = 0f;
|
public float baseRotation = 0f;
|
||||||
/** whether to draw the outline on top. */
|
/** whether to draw the outline on top. */
|
||||||
@@ -73,6 +75,8 @@ public class Weapon implements Cloneable{
|
|||||||
public float shake = 0f;
|
public float shake = 0f;
|
||||||
/** visual weapon knockback. */
|
/** visual weapon knockback. */
|
||||||
public float recoil = 1.5f;
|
public float recoil = 1.5f;
|
||||||
|
/** Number of additional counters for recoil. */
|
||||||
|
public int recoils = -1;
|
||||||
/** time taken for weapon to return to starting position in ticks. uses reload time by default */
|
/** time taken for weapon to return to starting position in ticks. uses reload time by default */
|
||||||
public float recoilTime = -1f;
|
public float recoilTime = -1f;
|
||||||
/** power curve applied to visual recoil */
|
/** power curve applied to visual recoil */
|
||||||
@@ -171,6 +175,10 @@ public class Weapon implements Cloneable{
|
|||||||
return (bullet.estimateDPS() / reload) * shoot.shots * 60f;
|
return (bullet.estimateDPS() / reload) * shoot.shots * 60f;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public float shotsPerSec(){
|
||||||
|
return shoot.shots * 60f / reload;
|
||||||
|
}
|
||||||
|
|
||||||
//TODO copy-pasted code
|
//TODO copy-pasted code
|
||||||
public void drawOutline(Unit unit, WeaponMount mount){
|
public void drawOutline(Unit unit, WeaponMount mount){
|
||||||
if(!outlineRegion.found()) return;
|
if(!outlineRegion.found()) return;
|
||||||
@@ -213,6 +221,7 @@ public class Weapon implements Cloneable{
|
|||||||
|
|
||||||
for(int i = 0; i < parts.size; i++){
|
for(int i = 0; i < parts.size; i++){
|
||||||
var part = parts.get(i);
|
var part = parts.get(i);
|
||||||
|
DrawPart.params.setRecoil(part.recoilIndex >= 0 && mount.recoils != null ? mount.recoils[part.recoilIndex] : mount.recoil);
|
||||||
if(part.under){
|
if(part.under){
|
||||||
part.draw(DrawPart.params);
|
part.draw(DrawPart.params);
|
||||||
}
|
}
|
||||||
@@ -244,6 +253,7 @@ public class Weapon implements Cloneable{
|
|||||||
//TODO does it need an outline?
|
//TODO does it need an outline?
|
||||||
for(int i = 0; i < parts.size; i++){
|
for(int i = 0; i < parts.size; i++){
|
||||||
var part = parts.get(i);
|
var part = parts.get(i);
|
||||||
|
DrawPart.params.setRecoil(part.recoilIndex >= 0 && mount.recoils != null ? mount.recoils[part.recoilIndex] : mount.recoil);
|
||||||
if(!part.under){
|
if(!part.under){
|
||||||
part.draw(DrawPart.params);
|
part.draw(DrawPart.params);
|
||||||
}
|
}
|
||||||
@@ -264,6 +274,12 @@ public class Weapon implements Cloneable{
|
|||||||
float lastReload = mount.reload;
|
float lastReload = mount.reload;
|
||||||
mount.reload = Math.max(mount.reload - Time.delta * unit.reloadMultiplier, 0);
|
mount.reload = Math.max(mount.reload - Time.delta * unit.reloadMultiplier, 0);
|
||||||
mount.recoil = Mathf.approachDelta(mount.recoil, 0, unit.reloadMultiplier / recoilTime);
|
mount.recoil = Mathf.approachDelta(mount.recoil, 0, unit.reloadMultiplier / recoilTime);
|
||||||
|
if(recoils > 0){
|
||||||
|
if(mount.recoils == null) mount.recoils = new float[recoils];
|
||||||
|
for(int i = 0; i < recoils; i++){
|
||||||
|
mount.recoils[i] = Mathf.approachDelta(mount.recoils[i], 0, unit.reloadMultiplier / recoilTime);
|
||||||
|
}
|
||||||
|
}
|
||||||
mount.smoothReload = Mathf.lerpDelta(mount.smoothReload, mount.reload / reload, smoothReloadSpeed);
|
mount.smoothReload = Mathf.lerpDelta(mount.smoothReload, mount.reload / reload, smoothReloadSpeed);
|
||||||
mount.charge = mount.charging && shoot.firstShotDelay > 0 ? Mathf.approachDelta(mount.charge, 1, 1 / shoot.firstShotDelay) : 0;
|
mount.charge = mount.charging && shoot.firstShotDelay > 0 ? Mathf.approachDelta(mount.charge, 1, 1 / shoot.firstShotDelay) : 0;
|
||||||
|
|
||||||
@@ -414,14 +430,13 @@ public class Weapon implements Cloneable{
|
|||||||
bullet.chargeEffect.at(shootX, shootY, rotation, bullet.keepVelocity || parentizeEffects ? unit : null);
|
bullet.chargeEffect.at(shootX, shootY, rotation, bullet.keepVelocity || parentizeEffects ? unit : null);
|
||||||
}
|
}
|
||||||
|
|
||||||
shoot.shoot(mount.totalShots, (xOffset, yOffset, angle, delay, mover) -> {
|
shoot.shoot(mount.barrelCounter, (xOffset, yOffset, angle, delay, mover) -> {
|
||||||
mount.totalShots++;
|
|
||||||
if(delay > 0f){
|
if(delay > 0f){
|
||||||
Time.run(delay, () -> bullet(unit, mount, xOffset, yOffset, angle, mover));
|
Time.run(delay, () -> bullet(unit, mount, xOffset, yOffset, angle, mover));
|
||||||
}else{
|
}else{
|
||||||
bullet(unit, mount, xOffset, yOffset, angle, mover);
|
bullet(unit, mount, xOffset, yOffset, angle, mover);
|
||||||
}
|
}
|
||||||
});
|
}, () -> mount.barrelCounter++);
|
||||||
}
|
}
|
||||||
|
|
||||||
protected void bullet(Unit unit, WeaponMount mount, float xOffset, float yOffset, float angleOffset, Mover mover){
|
protected void bullet(Unit unit, WeaponMount mount, float xOffset, float yOffset, float angleOffset, Mover mover){
|
||||||
@@ -453,7 +468,11 @@ public class Weapon implements Cloneable{
|
|||||||
unit.vel.add(Tmp.v1.trns(shootAngle + 180f, bullet.recoil));
|
unit.vel.add(Tmp.v1.trns(shootAngle + 180f, bullet.recoil));
|
||||||
Effect.shake(shake, shake, bulletX, bulletY);
|
Effect.shake(shake, shake, bulletX, bulletY);
|
||||||
mount.recoil = 1f;
|
mount.recoil = 1f;
|
||||||
|
if(recoils > 0){
|
||||||
|
mount.recoils[mount.barrelCounter % recoils] = 1f;
|
||||||
|
}
|
||||||
mount.heat = 1f;
|
mount.heat = 1f;
|
||||||
|
mount.totalShots++;
|
||||||
}
|
}
|
||||||
|
|
||||||
//override to do special things to a bullet after spawning
|
//override to do special things to a bullet after spawning
|
||||||
|
|||||||
@@ -1,6 +1,5 @@
|
|||||||
package mindustry.ui;
|
package mindustry.ui;
|
||||||
|
|
||||||
import arc.graphics.*;
|
|
||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
@@ -31,8 +30,7 @@ public class ItemDisplay extends Table{
|
|||||||
/** Displays the item with a "/sec" qualifier based on the time period, in ticks. */
|
/** Displays the item with a "/sec" qualifier based on the time period, in ticks. */
|
||||||
public ItemDisplay(Item item, int amount, float timePeriod, boolean showName){
|
public ItemDisplay(Item item, int amount, float timePeriod, boolean showName){
|
||||||
add(new ItemImage(item.uiIcon, amount));
|
add(new ItemImage(item.uiIcon, amount));
|
||||||
add(Strings.autoFixed(amount / (timePeriod / 60f), 2) + StatUnit.perSecond.localized()).padLeft(2).padRight(5).color(Color.lightGray).style(Styles.outlineLabel);
|
add((showName ? item.localizedName + "\n" : "") + "[lightgray]" + Strings.autoFixed(amount / (timePeriod / 60f), 2) + StatUnit.perSecond.localized()).padLeft(2).padRight(5).style(Styles.outlineLabel);
|
||||||
if(showName) add(item.localizedName).padLeft(4 + amount > 99 ? 4 : 0);
|
|
||||||
|
|
||||||
this.item = item;
|
this.item = item;
|
||||||
this.amount = amount;
|
this.amount = amount;
|
||||||
|
|||||||
@@ -261,12 +261,12 @@ public class CustomRulesDialog extends BaseDialog{
|
|||||||
t.button("@rules.anyenv", style, () -> {
|
t.button("@rules.anyenv", style, () -> {
|
||||||
if(!rules.infiniteResources){
|
if(!rules.infiniteResources){
|
||||||
//unlocalized for now
|
//unlocalized for now
|
||||||
ui.showInfo("[accent]'Any' environment, or 'mixed tech', is no longer allowed outside of sandbox.[]\n\nReasoning: Serpulo and Erekir tech were never meant to be used in the same map. They are not compatible or remotely balanced.\nI have received far too many complains in this regard.");
|
ui.showInfo("The 'any' environment can only be used in sandbox mode.");
|
||||||
}else{
|
}else{
|
||||||
rules.env = Vars.defaultEnv;
|
rules.env = Vars.defaultEnv;
|
||||||
rules.hiddenBuildItems.clear();
|
rules.hiddenBuildItems.clear();
|
||||||
}
|
}
|
||||||
}).group(group).checked(b -> rules.hiddenBuildItems.size == 0);
|
}).group(group).checked(b -> rules.hiddenBuildItems.size == 0).update(b -> b.getLabel().setColor(!rules.infiniteResources ? Color.gray : Color.white));
|
||||||
}).left().fill(false).expand(false, false).row();
|
}).left().fill(false).expand(false, false).row();
|
||||||
|
|
||||||
title("@rules.title.teams");
|
title("@rules.title.teams");
|
||||||
|
|||||||
@@ -472,7 +472,7 @@ public class JoinDialog extends BaseDialog{
|
|||||||
}
|
}
|
||||||
|
|
||||||
int columns(){
|
int columns(){
|
||||||
return Mathf.clamp((int)((Core.graphics.getWidth() / Scl.scl() * 0.85f) / targetWidth()), 1, 3);
|
return Mathf.clamp((int)((Core.graphics.getWidth() / Scl.scl() * 0.9f) / targetWidth()), 1, 4);
|
||||||
}
|
}
|
||||||
|
|
||||||
void addCommunityHost(Host host, Table container){
|
void addCommunityHost(Host host, Table container){
|
||||||
|
|||||||
@@ -1,7 +1,6 @@
|
|||||||
package mindustry.ui.dialogs;
|
package mindustry.ui.dialogs;
|
||||||
|
|
||||||
import arc.*;
|
import arc.*;
|
||||||
import arc.util.Http.*;
|
|
||||||
import arc.files.*;
|
import arc.files.*;
|
||||||
import arc.func.*;
|
import arc.func.*;
|
||||||
import arc.graphics.*;
|
import arc.graphics.*;
|
||||||
@@ -14,6 +13,7 @@ import arc.scene.ui.*;
|
|||||||
import arc.scene.ui.layout.*;
|
import arc.scene.ui.layout.*;
|
||||||
import arc.struct.*;
|
import arc.struct.*;
|
||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
|
import arc.util.Http.*;
|
||||||
import arc.util.io.*;
|
import arc.util.io.*;
|
||||||
import arc.util.serialization.*;
|
import arc.util.serialization.*;
|
||||||
import arc.util.serialization.Jval.*;
|
import arc.util.serialization.Jval.*;
|
||||||
|
|||||||
@@ -367,7 +367,7 @@ public class SettingsMenuDialog extends BaseDialog{
|
|||||||
|
|
||||||
int[] lastUiScale = {settings.getInt("uiscale", 100)};
|
int[] lastUiScale = {settings.getInt("uiscale", 100)};
|
||||||
|
|
||||||
graphics.sliderPref("uiscale", 100, 5, 300, 5, s -> {
|
graphics.sliderPref("uiscale", 100, 25, 300, 5, s -> {
|
||||||
//if the user changed their UI scale, but then put it back, don't consider it 'changed'
|
//if the user changed their UI scale, but then put it back, don't consider it 'changed'
|
||||||
Core.settings.put("uiscalechanged", s != lastUiScale[0]);
|
Core.settings.put("uiscalechanged", s != lastUiScale[0]);
|
||||||
return s + "%";
|
return s + "%";
|
||||||
|
|||||||
@@ -73,7 +73,7 @@ public class ConsoleFragment extends Table{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
scrollPos = (int)Mathf.clamp(scrollPos + input.axis(Binding.chat_scroll), 0, Math.max(0, messages.size - messagesShown));
|
scrollPos = (int)Mathf.clamp(scrollPos + input.axis(Binding.chat_scroll), 0, Math.max(0, messages.size));
|
||||||
});
|
});
|
||||||
|
|
||||||
history.insert(0, "");
|
history.insert(0, "");
|
||||||
|
|||||||
@@ -794,7 +794,7 @@ public class HudFragment{
|
|||||||
if(!obj.qualified()) continue;
|
if(!obj.qualified()) continue;
|
||||||
|
|
||||||
String text = obj.text();
|
String text = obj.text();
|
||||||
if(text != null){
|
if(text != null && !text.isEmpty()){
|
||||||
if(!first) builder.append("\n[white]");
|
if(!first) builder.append("\n[white]");
|
||||||
builder.append(text);
|
builder.append(text);
|
||||||
|
|
||||||
@@ -802,8 +802,11 @@ public class HudFragment{
|
|||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
//TODO: display standard status when empty objective?
|
||||||
|
if(builder.length() > 0){
|
||||||
return builder;
|
return builder;
|
||||||
}
|
}
|
||||||
|
}
|
||||||
|
|
||||||
if(!state.rules.waves && state.rules.attackMode){
|
if(!state.rules.waves && state.rules.attackMode){
|
||||||
int sum = Math.max(state.teams.present.sum(t -> t.team != player.team() ? t.cores.size : 0), 1);
|
int sum = Math.max(state.teams.present.sum(t -> t.team != player.team() ? t.cores.size : 0), 1);
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ import mindustry.content.*;
|
|||||||
import mindustry.core.*;
|
import mindustry.core.*;
|
||||||
import mindustry.ctype.*;
|
import mindustry.ctype.*;
|
||||||
import mindustry.entities.*;
|
import mindustry.entities.*;
|
||||||
|
import mindustry.entities.bullet.*;
|
||||||
import mindustry.entities.units.*;
|
import mindustry.entities.units.*;
|
||||||
import mindustry.game.*;
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
@@ -30,7 +31,6 @@ import mindustry.world.blocks.*;
|
|||||||
import mindustry.world.blocks.environment.*;
|
import mindustry.world.blocks.environment.*;
|
||||||
import mindustry.world.blocks.power.*;
|
import mindustry.world.blocks.power.*;
|
||||||
import mindustry.world.consumers.*;
|
import mindustry.world.consumers.*;
|
||||||
import mindustry.entities.bullet.*;
|
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import java.lang.reflect.*;
|
import java.lang.reflect.*;
|
||||||
@@ -925,6 +925,10 @@ public class Block extends UnlockableContent implements Senseable{
|
|||||||
return consumers.length == 0 ? (T)consumeBuilder.find(filter) : (T)Structs.find(consumers, filter);
|
return consumers.length == 0 ? (T)consumeBuilder.find(filter) : (T)Structs.find(consumers, filter);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public boolean hasConsumer(Consume cons){
|
||||||
|
return consumeBuilder.contains(cons);
|
||||||
|
}
|
||||||
|
|
||||||
public void removeConsumer(Consume cons){
|
public void removeConsumer(Consume cons){
|
||||||
if(consumers.length > 0){
|
if(consumers.length > 0){
|
||||||
throw new IllegalStateException("You can only remove consumers before init(). After init(), all consumers have already been initialized.");
|
throw new IllegalStateException("You can only remove consumers before init(). After init(), all consumers have already been initialized.");
|
||||||
@@ -1144,6 +1148,10 @@ public class Block extends UnlockableContent implements Senseable{
|
|||||||
|
|
||||||
clipSize = Math.max(clipSize, size * tilesize);
|
clipSize = Math.max(clipSize, size * tilesize);
|
||||||
|
|
||||||
|
if(hasLiquids && drawLiquidLight){
|
||||||
|
clipSize = Math.max(size * 30f * 2f, clipSize);
|
||||||
|
}
|
||||||
|
|
||||||
if(emitLight){
|
if(emitLight){
|
||||||
clipSize = Math.max(clipSize, lightRadius * 2f);
|
clipSize = Math.max(clipSize, lightRadius * 2f);
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -11,8 +11,8 @@ import arc.struct.*;
|
|||||||
import arc.util.*;
|
import arc.util.*;
|
||||||
import mindustry.annotations.Annotations.*;
|
import mindustry.annotations.Annotations.*;
|
||||||
import mindustry.content.*;
|
import mindustry.content.*;
|
||||||
import mindustry.game.*;
|
|
||||||
import mindustry.game.EventType.*;
|
import mindustry.game.EventType.*;
|
||||||
|
import mindustry.game.*;
|
||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.type.*;
|
import mindustry.type.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
|
|||||||
@@ -65,6 +65,13 @@ public class BuildTurret extends BaseTurret{
|
|||||||
}};
|
}};
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@Override
|
||||||
|
public void setStats(){
|
||||||
|
super.setStats();
|
||||||
|
|
||||||
|
stats.addPercent(Stat.buildSpeed, buildSpeed);
|
||||||
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
public TextureRegion[] icons(){
|
public TextureRegion[] icons(){
|
||||||
return new TextureRegion[]{baseRegion, region};
|
return new TextureRegion[]{baseRegion, region};
|
||||||
|
|||||||
@@ -48,7 +48,7 @@ public class ForceProjector extends Block{
|
|||||||
protected static ForceBuild paramEntity;
|
protected static ForceBuild paramEntity;
|
||||||
protected static Effect paramEffect;
|
protected static Effect paramEffect;
|
||||||
protected static final Cons<Bullet> shieldConsumer = bullet -> {
|
protected static final Cons<Bullet> shieldConsumer = bullet -> {
|
||||||
if(bullet.team != paramEntity.team && bullet.type.absorbable && Intersector.isInRegularPolygon(((ForceProjector)(paramEntity.block)).sides, paramEntity.x, paramEntity.y, paramEntity.realRadius() * 2f, ((ForceProjector)(paramEntity.block)).shieldRotation, bullet.x, bullet.y)){
|
if(bullet.team != paramEntity.team && bullet.type.absorbable && Intersector.isInRegularPolygon(((ForceProjector)(paramEntity.block)).sides, paramEntity.x, paramEntity.y, paramEntity.realRadius(), ((ForceProjector)(paramEntity.block)).shieldRotation, bullet.x, bullet.y)){
|
||||||
bullet.absorb();
|
bullet.absorb();
|
||||||
paramEffect.at(bullet);
|
paramEffect.at(bullet);
|
||||||
paramEntity.hit = 1f;
|
paramEntity.hit = 1f;
|
||||||
@@ -99,9 +99,10 @@ public class ForceProjector extends Block{
|
|||||||
stats.add(Stat.shieldHealth, shieldHealth, StatUnit.none);
|
stats.add(Stat.shieldHealth, shieldHealth, StatUnit.none);
|
||||||
stats.add(Stat.cooldownTime, (int) (shieldHealth / cooldownBrokenBase / 60f), StatUnit.seconds);
|
stats.add(Stat.cooldownTime, (int) (shieldHealth / cooldownBrokenBase / 60f), StatUnit.seconds);
|
||||||
|
|
||||||
if(consItems){
|
if(consItems && itemConsumer instanceof ConsumeItems coni){
|
||||||
stats.add(Stat.boostEffect, phaseRadiusBoost / tilesize, StatUnit.blocks);
|
stats.remove(Stat.booster);
|
||||||
stats.add(Stat.boostEffect, phaseShieldBoost, StatUnit.shieldHealth);
|
stats.add(Stat.booster, StatValues.itemBoosters("+{0} " + StatUnit.shieldHealth.localized(), stats.timePeriod, phaseShieldBoost, phaseRadiusBoost, coni.items, this::consumesItem));
|
||||||
|
stats.add(Stat.booster, StatValues.speedBoosters("", coolantConsumption, Float.MAX_VALUE, true, this::consumesLiquid));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -11,6 +11,7 @@ import mindustry.gen.*;
|
|||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.logic.*;
|
import mindustry.logic.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.consumers.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
@@ -53,8 +54,14 @@ public class MendProjector extends Block{
|
|||||||
stats.add(Stat.repairTime, (int)(100f / healPercent * reload / 60f), StatUnit.seconds);
|
stats.add(Stat.repairTime, (int)(100f / healPercent * reload / 60f), StatUnit.seconds);
|
||||||
stats.add(Stat.range, range / tilesize, StatUnit.blocks);
|
stats.add(Stat.range, range / tilesize, StatUnit.blocks);
|
||||||
|
|
||||||
stats.add(Stat.boostEffect, phaseRangeBoost / tilesize, StatUnit.blocks);
|
if(findConsumer(c -> c instanceof ConsumeItems) instanceof ConsumeItems cons){
|
||||||
stats.add(Stat.boostEffect, (phaseBoost + healPercent) / healPercent, StatUnit.timesSpeed);
|
stats.remove(Stat.booster);
|
||||||
|
stats.add(Stat.booster, StatValues.itemBoosters(
|
||||||
|
"{0}" + StatUnit.timesSpeed.localized(),
|
||||||
|
stats.timePeriod, (phaseBoost + healPercent) / healPercent, phaseRangeBoost,
|
||||||
|
cons.items, this::consumesItem)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
@Override
|
@Override
|
||||||
|
|||||||
@@ -13,6 +13,7 @@ import mindustry.graphics.*;
|
|||||||
import mindustry.logic.*;
|
import mindustry.logic.*;
|
||||||
import mindustry.ui.*;
|
import mindustry.ui.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.consumers.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
import static mindustry.Vars.*;
|
import static mindustry.Vars.*;
|
||||||
@@ -68,8 +69,8 @@ public class OverdriveProjector extends Block{
|
|||||||
stats.add(Stat.productionTime, useTime / 60f, StatUnit.seconds);
|
stats.add(Stat.productionTime, useTime / 60f, StatUnit.seconds);
|
||||||
|
|
||||||
if(hasBoost){
|
if(hasBoost){
|
||||||
stats.add(Stat.boostEffect, (range + phaseRangeBoost) / tilesize, StatUnit.blocks);
|
stats.remove(Stat.booster);
|
||||||
stats.add(Stat.boostEffect, "+" + (int)((speedBoost + speedBoostPhase) * 100f - 100) + "%");
|
stats.add(Stat.booster, StatValues.itemBoosters("+{0}%", stats.timePeriod, speedBoostPhase * 100f, phaseRangeBoost, ((ConsumeItems)findConsumer(f -> f instanceof ConsumeItems)).items, this::consumesItem));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -12,6 +12,7 @@ import mindustry.entities.units.*;
|
|||||||
import mindustry.gen.*;
|
import mindustry.gen.*;
|
||||||
import mindustry.graphics.*;
|
import mindustry.graphics.*;
|
||||||
import mindustry.world.*;
|
import mindustry.world.*;
|
||||||
|
import mindustry.world.consumers.*;
|
||||||
import mindustry.world.draw.*;
|
import mindustry.world.draw.*;
|
||||||
import mindustry.world.meta.*;
|
import mindustry.world.meta.*;
|
||||||
|
|
||||||
@@ -89,7 +90,15 @@ public class RegenProjector extends Block{
|
|||||||
|
|
||||||
stats.add(Stat.repairTime, (int)(1f / (healPercent / 100f) / 60f), StatUnit.seconds);
|
stats.add(Stat.repairTime, (int)(1f / (healPercent / 100f) / 60f), StatUnit.seconds);
|
||||||
stats.add(Stat.range, range, StatUnit.blocks);
|
stats.add(Stat.range, range, StatUnit.blocks);
|
||||||
stats.add(Stat.boostEffect, optionalMultiplier, StatUnit.timesSpeed);
|
|
||||||
|
if(findConsumer(c -> c instanceof ConsumeItems) instanceof ConsumeItems cons){
|
||||||
|
stats.remove(Stat.booster);
|
||||||
|
stats.add(Stat.booster, StatValues.itemBoosters(
|
||||||
|
"{0}" + StatUnit.timesSpeed.localized(),
|
||||||
|
stats.timePeriod, optionalMultiplier, 0f,
|
||||||
|
cons.items, this::consumesItem)
|
||||||
|
);
|
||||||
|
}
|
||||||
}
|
}
|
||||||
|
|
||||||
public class RegenProjectorBuild extends Building{
|
public class RegenProjectorBuild extends Building{
|
||||||
|
|||||||
@@ -51,6 +51,9 @@ public class BaseTurret extends Block{
|
|||||||
coolant.update = false;
|
coolant.update = false;
|
||||||
coolant.booster = true;
|
coolant.booster = true;
|
||||||
coolant.optional = true;
|
coolant.optional = true;
|
||||||
|
|
||||||
|
//json parsing does not add to consumes
|
||||||
|
if(!hasConsumer(coolant)) consume(coolant);
|
||||||
}
|
}
|
||||||
|
|
||||||
placeOverlapRange = Math.max(placeOverlapRange, range + placeOverlapMargin);
|
placeOverlapRange = Math.max(placeOverlapRange, range + placeOverlapMargin);
|
||||||
|
|||||||
@@ -33,7 +33,10 @@ public class ContinuousLiquidTurret extends ContinuousTurret{
|
|||||||
|
|
||||||
stats.remove(Stat.ammo);
|
stats.remove(Stat.ammo);
|
||||||
//TODO looks bad
|
//TODO looks bad
|
||||||
stats.add(Stat.ammo, StatValues.number(liquidConsumed * 60f, StatUnit.perSecond, true));
|
stats.add(Stat.ammo, table -> {
|
||||||
|
table.row();
|
||||||
|
StatValues.number(liquidConsumed * 60f, StatUnit.perSecond, true).display(table);
|
||||||
|
});
|
||||||
stats.add(Stat.ammo, StatValues.ammo(ammoTypes));
|
stats.add(Stat.ammo, StatValues.ammo(ammoTypes));
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|||||||
@@ -18,6 +18,7 @@ public class ReloadTurret extends BaseTurret{
|
|||||||
super.setStats();
|
super.setStats();
|
||||||
|
|
||||||
if(coolant != null){
|
if(coolant != null){
|
||||||
|
stats.remove(Stat.booster);
|
||||||
stats.add(Stat.booster, StatValues.boosters(reload, coolant.amount, coolantMultiplier, true, l -> l.coolant && consumesLiquid(l)));
|
stats.add(Stat.booster, StatValues.boosters(reload, coolant.amount, coolantMultiplier, true, l -> l.coolant && consumesLiquid(l)));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
@@ -28,10 +29,11 @@ public class ReloadTurret extends BaseTurret{
|
|||||||
protected void updateCooling(){
|
protected void updateCooling(){
|
||||||
if(reloadCounter < reload && coolant != null && coolant.efficiency(this) > 0 && efficiency > 0){
|
if(reloadCounter < reload && coolant != null && coolant.efficiency(this) > 0 && efficiency > 0){
|
||||||
float capacity = coolant instanceof ConsumeLiquidFilter filter ? filter.getConsumed(this).heatCapacity : 1f;
|
float capacity = coolant instanceof ConsumeLiquidFilter filter ? filter.getConsumed(this).heatCapacity : 1f;
|
||||||
|
float amount = coolant.amount * coolant.efficiency(this);
|
||||||
coolant.update(this);
|
coolant.update(this);
|
||||||
reloadCounter += coolant.amount * edelta() * capacity * coolantMultiplier;
|
reloadCounter += amount * edelta() * capacity * coolantMultiplier;
|
||||||
|
|
||||||
if(Mathf.chance(0.06 * coolant.amount)){
|
if(Mathf.chance(0.06 * amount)){
|
||||||
coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
|
coolEffect.at(x + Mathf.range(size * tilesize / 2f), y + Mathf.range(size * tilesize / 2f));
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||