From 227fb388b853a4cfdcf01d4b93dd2f35d69184ed Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 5 Sep 2021 11:18:31 -0400 Subject: [PATCH 01/61] Update building consume module before main update --- core/src/mindustry/entities/comp/BuildingComp.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/entities/comp/BuildingComp.java b/core/src/mindustry/entities/comp/BuildingComp.java index d4ce1bdf9c..1462800774 100644 --- a/core/src/mindustry/entities/comp/BuildingComp.java +++ b/core/src/mindustry/entities/comp/BuildingComp.java @@ -1509,6 +1509,10 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, } } + if(cons != null){ + cons.update(); + } + if(enabled || !block.noUpdateDisabled){ updateTile(); } @@ -1521,10 +1525,6 @@ abstract class BuildingComp implements Posc, Teamc, Healthc, Buildingc, Timerc, liquids.update(updateFlow); } - if(cons != null){ - cons.update(); - } - if(power != null){ power.graph.update(); } From cf5d172922018190e2bc5afd88fa23a427e9bfb6 Mon Sep 17 00:00:00 2001 From: TranquillyUnpleasant <62061444+TranquillyUnpleasant@users.noreply.github.com> Date: Sun, 5 Sep 2021 20:21:49 +0500 Subject: [PATCH 02/61] Wave graph y axis refactor (#5926) * Y axis refactor * Fix formatting inconsistencies * Make style match xml --- core/src/mindustry/editor/WaveGraph.java | 51 ++++++++++++++++++------ 1 file changed, 39 insertions(+), 12 deletions(-) diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index 13c6021d93..76bbc82d2b 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -38,8 +38,14 @@ public class WaveGraph extends Table{ lay.setText(font, "1"); + int maxY = switch(mode){ + case counts -> nextStep(max); + case health -> nextStep((int)maxHealth); + case totals -> nextStep(maxTotal); + }; + float fh = lay.height; - float offsetX = Scl.scl(30f), offsetY = Scl.scl(22f) + fh + Scl.scl(5f); + float offsetX = Scl.scl(lay.width * (maxY + "").length() * 2), offsetY = Scl.scl(22f) + fh + Scl.scl(5f); float graphX = x + offsetX, graphY = y + offsetY, graphW = width - offsetX, graphH = height - offsetY; float spacing = graphW / (values.length - 1); @@ -53,7 +59,7 @@ public class WaveGraph extends Table{ for(int i = 0; i < values.length; i++){ int val = values[i][type.id]; - float cx = graphX + i*spacing, cy = graphY + val * graphH / max; + float cx = graphX + i * spacing, cy = graphY + val * graphH / maxY; Lines.linePoint(cx, cy); } @@ -69,7 +75,7 @@ public class WaveGraph extends Table{ sum += values[i][type.id]; } - float cx = graphX + i*spacing, cy = graphY + sum * graphH / maxTotal; + float cx = graphX + i * spacing, cy = graphY + sum * graphH / maxY; Lines.linePoint(cx, cy); } @@ -84,7 +90,7 @@ public class WaveGraph extends Table{ sum += (type.health) * values[i][type.id]; } - float cx = graphX + i*spacing, cy = graphY + sum * graphH / maxHealth; + float cx = graphX + i * spacing, cy = graphY + sum * graphH / maxY; Lines.linePoint(cx, cy); } @@ -92,19 +98,23 @@ public class WaveGraph extends Table{ } //how many numbers can fit here - float totalMarks = (graphH - getMarginBottom() *2f) / (lay.height * 2); + float totalMarks = Mathf.clamp(maxY, 1, 10); - int markSpace = Math.max(1, Mathf.ceil(max / totalMarks)); + int markSpace = Math.max(1, Mathf.ceil(maxY / totalMarks)); Draw.color(Color.lightGray); - for(int i = 0; i < max; i += markSpace){ - float cy = graphY + i * graphH / max, cx = graphX; - //Lines.line(cx, cy, cx + len, cy); + Draw.alpha(0.1f); + + for(int i = 0; i < maxY; i += markSpace){ + float cy = graphY + i * graphH / maxY, cx = graphX; + + Lines.line(cx, cy, cx + graphW, cy); lay.setText(font, "" + i); - font.draw("" + i, cx, cy + lay.height/2f, Align.right); + font.draw("" + i, cx, cy + lay.height / 2f, Align.right); } + Draw.alpha(1f); float len = Scl.scl(4f); font.setColor(Color.lightGray); @@ -113,7 +123,7 @@ public class WaveGraph extends Table{ float cy = y + fh, cx = graphX + graphW / (values.length - 1) * i; Lines.line(cx, cy, cx, cy + len); - if(i == values.length/2){ + if(i == values.length / 2){ font.draw("" + (i + from + 1), cx, cy - Scl.scl(2f), Align.center); } } @@ -164,7 +174,7 @@ public class WaveGraph extends Table{ sum += spawned; } maxTotal = Math.max(maxTotal, sum); - maxHealth = Math.max(maxHealth,healthsum); + maxHealth = Math.max(maxHealth, healthsum); } ObjectSet usedCopy = new ObjectSet<>(used); @@ -200,6 +210,23 @@ public class WaveGraph extends Table{ return Tmp.c1.fromHsv(type.id / (float)Vars.content.units().size * 360f, 0.7f, 1f); } + int nextStep(float value){ + int order = 1; + while(order < value){ + if(order * 2 > value){ + return order * 2; + } + if(order * 5 > value){ + return order * 5; + } + if(order * 10 > value){ + return order * 10; + } + order *= 10; + } + return order; + } + enum Mode{ counts, totals, health; From 461d87dbef073058bda82f91eef1bf07e70ab869 Mon Sep 17 00:00:00 2001 From: Darkness6030 <79508138+Darkness6030@users.noreply.github.com> Date: Sun, 5 Sep 2021 19:03:57 +0300 Subject: [PATCH 03/61] Add HexPvp server to global V6 list (#5940) --- servers_v6.json | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/servers_v6.json b/servers_v6.json index f9bb12257a..c8e842d1b7 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -104,11 +104,15 @@ "address": ["usfr2.forcehost.net:25578"] }, { - "name": "Español", + "name": "Español", "address": ["168.119.36.188:41445"] }, { - "name": "CreateDustry", + "name": "CreateDustry", "address": ["144.76.120.74:18645"] + }, + { + "name": "HexedPvP", + "address": ["001.finland.eu.hosts.dynamichost.xyz:23664"] } ] From fb74dfa02fbcdd5856374c952dfabb9acf24e64c Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 5 Sep 2021 12:07:15 -0400 Subject: [PATCH 04/61] Default visualElevation for ships --- core/src/mindustry/type/UnitType.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 7f5b77f967..fb9b27e4a4 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -317,6 +317,9 @@ public class UnitType extends UnlockableContent{ canDrown = false; omniMovement = false; immunities.add(StatusEffects.wet); + if(visualElevation < 0f){ + visualElevation = 0.11f; + } } if(lightRadius == -1){ From 4720f1b87665bcc3390d57dc33dc094eae7b950b Mon Sep 17 00:00:00 2001 From: CancerGuy <70016211+AzhurniyBaklan@users.noreply.github.com> Date: Mon, 6 Sep 2021 02:06:00 +0500 Subject: [PATCH 05/61] Add files via upload (#5943) --- .../sprites/blocks/power/rtg-generator.png | Bin 1274 -> 1258 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/assets-raw/sprites/blocks/power/rtg-generator.png b/core/assets-raw/sprites/blocks/power/rtg-generator.png index 6c958949594fa3037495b3fe17007b70ae6d5681..1dd27d69c941941d5902762f8eae7716e322ebd3 100644 GIT binary patch delta 1225 zcmV;)1UCEn3F--uF@K~GA`;hA3@VG?~Yy?5Dy3Q0b=iKbfoA=(#oRY8F+nsqc-{+fO z?~N;;zkI)Mni{DX&JMlrC%uzrY1g1?rz4EVZIY2tCrct%n|~Dmq=@ho!{*FG31=14@L@w~`{PynFxQo+?mp@1SXF+)V~-qi5&GqE2w}=H*v**|p&X zt6b0n4BF}FS$~k1+UE8-Du6`wlH@gQa6}*l*jnFbH?|D&nzmwd!fNP4D*1YQ$6L0Y zj!0YFdS~ayZ0{V-4ufY0uLqPOpZi-5Pv{6xk~~#LTQ60F1py@F*M=9J4%xpC21hs; z90lv!WhwHmo!lbK1(1>lfTpSE9dgP0o?X=2J5ln!=YO0cRDh1Wfh~gDQR-a`F*~_L zs8YxSi`!RsE}7q5m*9n$OAxoJ?V(x z5}`zJzb!+Al}{gkl82#JuU~ZD`N-R-H;35k?`8{JQoA|(r0CmZeS7&5i&X^0S-1D6kqsOoZX=P!(wP z*?(LRKug|W86w!n;T$5Y+MS-=JbvH=M0^pUt@VBHu~-B56zL0%9Sn|G$KnOCW{;1- zNiY=d;-G{lq+EoeJcV2aeInQs5alH~MW90Nv7l&dm;}?~26vNzHydQek}oV~5E>4W z)VUF|y`BI7_WHZ?Z!z+m^f_xM=(}m5^?w9O3f!%0=N)p82LxN;93n_k;GrSphTK!g z13)F2u~S5lEU{EsyNy)xlitaL2b2~;lVgb4akJ8ZoIGF+fl?w+Vd_kRIXxi+Um0yZ$t6x-dd<5Elz$W< z=eJby0I?Cex;7kkOw0BfK*Q?gztJ(`u_qpBquy-{SSrDs2!l>c<$bLQ0E3I!!ZP}&oI*HTw6Z4eT;?I#Cd@f5i}w5 z6!NxBc2G2>Aqv`%ITx`$g+x$ihC(DFXhY_?`{ENJDL2SzI3;__sVntHSA^v3aIOgO nGTXLA$dVp^3K3GXOYHBHPI}L$ zUw6vd$4_4#yWKXl=uA(%&j;c`c4xXY8^mOC%`(@K1z?L5pql>iV2rHU)>fr|hyD zof}p;?+~z&x_>&9BA;rT`-4RVINUu&&1!!y@u^U?kc}ZKbd22oN zLQB5Av*#^48umzA+(17ze4Y!Td! zQqN+D*~ukBO+y}7+`CgmQ=(2(+1w&TH$nz6^3zEZzixkf>zXBqBZ4VI?dNlfz!HE% z9sovngNg_)5lRI2-7-X2`|$o7c^G=}@_FT%kGzfcb_WN|{cM3tYBy(}I(?h0&#%9e zwn-1DZ-3oZp2f%mGf&8Q9M*V3tRF!EeB`+p-(RW%tv+bHi4tLbe1Ey{fU_ersBhg? zyuh|+Trx-A0ho#44hOEMnR0Gl*sDMYwx_sa0=kg954I=d7-p5z;Aq%O@&aHc0(HtO z;RzB^eeDN>qN#|9=JNzi$UGGx@q5kNwII%y^aR%3{X z(0`ephytxXo9boIJ`OKK1p7EF5y8c}+v(|K_Lmb7@kN9hn@8Sbu>|fZ(ia*#Zk@4? z#dEQyi_e1|5DIs3P{I>57ojLmA%}oZ1bYIaydewPk$OE2>l9fqoyAw1NOPW$}iA(DN^mRCU)c~p)rphFk(-T7Qm66sxlr`YCG5+(D zbz_{h6MQNnq}b+WrKA5ZU?b&(r@3I^L(1{o9=h&7eYl9823^Bk5vG%-R|LsrX(@TT zz2xjLw*d-n$0Z?i4SCxpJ1DAYh*E+yWX?sbPazSKhJf23XE;ccm!@80GwuQ0AH+8t zR8iqv!Ovy(!Sw`nSbUWtNZYnW$dVpkg$UX*v From 87ff876db36c306788e9c73fb6fa71d01e029d4f Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 5 Sep 2021 18:00:16 -0400 Subject: [PATCH 06/61] Take block timeScale into account for sector damage --- core/src/mindustry/maps/SectorDamage.java | 12 +++++++++--- 1 file changed, 9 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 5ee6e1f15a..2b1c9995e3 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -272,16 +272,22 @@ public class SectorDamage{ float e = build.efficiency(); if(e > 0.08f){ if(build.team == state.rules.defaultTeam && build instanceof Ranged ranged && sparse.contains(t -> t.within(build, ranged.range() + 4*tilesize))){ + //TODO make sure power turret network supports the turrets? if(build.block instanceof Turret t && build instanceof TurretBuild b && b.hasAmmo()){ - sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e; + sumDps += t.shots / t.reloadTime * 60f * b.peekAmmo().estimateDPS() * e * build.timeScale; } if(build.block instanceof MendProjector m){ - sumRps += m.healPercent / m.reload * avgHealth * 60f / 100f * e; + sumRps += m.healPercent / m.reload * avgHealth * 60f / 100f * e * build.timeScale; + } + + //point defense turrets act as flat health right now + if(build.block instanceof PointDefenseTurret && build.consValid()){ + sumHealth += 150f * build.timeScale; } if(build.block instanceof ForceProjector f){ - sumHealth += f.shieldHealth * e; + sumHealth += f.shieldHealth * e * build.timeScale; sumRps += e; } } From 4da21ba363d893531df8833b64d9a1d53a375c50 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 5 Sep 2021 20:08:02 -0400 Subject: [PATCH 07/61] Added cliff support to editor --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/editor/MapEditorDialog.java | 10 ++++------ core/src/mindustry/editor/MapRenderer.java | 6 ++++++ core/src/mindustry/graphics/BlockRenderer.java | 2 +- core/src/mindustry/world/blocks/environment/Cliff.java | 1 + tools/src/mindustry/tools/Generators.java | 4 +++- 6 files changed, 16 insertions(+), 8 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 75df389a5f..4ae1258e7d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -363,6 +363,7 @@ publish.confirm = Are you sure you want to publish this?\n\n[lightgray]Make sure publish.error = Error publishing item: {0} steam.error = Failed to initialize Steam services.\nError: {0} +editor.cliffs = Walls To Cliffs editor.brush = Brush editor.openin = Open In Editor editor.oregen = Ore Generation diff --git a/core/src/mindustry/editor/MapEditorDialog.java b/core/src/mindustry/editor/MapEditorDialog.java index 213e4e4a83..4b0fc6b8fa 100644 --- a/core/src/mindustry/editor/MapEditorDialog.java +++ b/core/src/mindustry/editor/MapEditorDialog.java @@ -576,13 +576,11 @@ public class MapEditorDialog extends Dialog implements Disposable{ }).growX().top(); } - if(experimental){ - mid.row(); + mid.row(); - mid.table(t -> { - t.button("Cliffs", Icon.terrain, Styles.cleart, editor::addCliffs).growX().margin(9f); - }).growX().top(); - } + mid.table(t -> { + t.button("@editor.cliffs", Icon.terrain, Styles.cleart, editor::addCliffs).growX().margin(9f); + }).growX().top(); }).margin(0).left().growY(); diff --git a/core/src/mindustry/editor/MapRenderer.java b/core/src/mindustry/editor/MapRenderer.java index e5a0ce1c01..535ef0eed5 100644 --- a/core/src/mindustry/editor/MapRenderer.java +++ b/core/src/mindustry/editor/MapRenderer.java @@ -10,6 +10,7 @@ import mindustry.content.*; import mindustry.game.*; import mindustry.graphics.*; import mindustry.world.*; +import mindustry.world.blocks.environment.*; import static mindustry.Vars.*; @@ -132,6 +133,11 @@ public class MapRenderer implements Disposable{ wall.editorVariantRegions()[Mathf.randomSeed(idxWall, 0, wall.editorVariantRegions().length - 1)] : wall.editorIcon(); + if(wall == Blocks.cliff){ + mesh.setColor(Tmp.c1.set(floor.mapColor).mul(1.6f)); + region = ((Cliff)Blocks.cliff).editorCliffs[tile.data & 0xff]; + } + offsetX = tilesize / 2f - region.width / 2f * Draw.scl; offsetY = tilesize / 2f - region.height / 2f * Draw.scl; }else if(wall == Blocks.air && !tile.overlay().isAir()){ diff --git a/core/src/mindustry/graphics/BlockRenderer.java b/core/src/mindustry/graphics/BlockRenderer.java index c0c7e24fe8..cc40a2c040 100644 --- a/core/src/mindustry/graphics/BlockRenderer.java +++ b/core/src/mindustry/graphics/BlockRenderer.java @@ -150,7 +150,7 @@ public class BlockRenderer{ public void checkChanges(){ darkEvents.each(pos -> { var tile = world.tile(pos); - if(tile != null){ + if(tile != null && tile.block().fillsTile){ tile.data = world.getWallDarkness(tile); } }); diff --git a/core/src/mindustry/world/blocks/environment/Cliff.java b/core/src/mindustry/world/blocks/environment/Cliff.java index 49dba95d7c..d3a0c99771 100644 --- a/core/src/mindustry/world/blocks/environment/Cliff.java +++ b/core/src/mindustry/world/blocks/environment/Cliff.java @@ -9,6 +9,7 @@ import mindustry.world.*; public class Cliff extends Block{ public float size = 11f; public @Load(value = "cliffmask#", length = 256) TextureRegion[] cliffs; + public @Load(value = "editor-cliffmask#", length = 256) TextureRegion[] editorCliffs; public Cliff(String name){ super(name); diff --git a/tools/src/mindustry/tools/Generators.java b/tools/src/mindustry/tools/Generators.java index 416656cd33..e1658acd6f 100644 --- a/tools/src/mindustry/tools/Generators.java +++ b/tools/src/mindustry/tools/Generators.java @@ -158,7 +158,9 @@ public class Generators{ } }); - Fi.get("../blocks/environment/cliffmask" + (val & 0xff) + ".png").writePng(result); + Fi fi = Fi.get("../blocks/environment/cliffmask" + (val & 0xff) + ".png"); + fi.writePng(result); + fi.copyTo(Fi.get("../editor").child("editor-" + fi.name())); }); } From 5641b4901c50ebfcd661356d065a9389e873ec34 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 5 Sep 2021 23:01:26 -0400 Subject: [PATCH 08/61] Easier stained mountains guardian --- core/assets/maps/stainedMountains.msav | Bin 16745 -> 16876 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/assets/maps/stainedMountains.msav b/core/assets/maps/stainedMountains.msav index 6e00f916b17ea89b0a9d63ad2b147f6afd493b51..e8511641f0e47fe26ea82985bb930dda9e2d39b4 100644 GIT binary patch literal 16876 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 z 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 literal 16745 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

yKs`gtK<02mF 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 Q%{}_x|NZ#?0l7co<2VY!N&o-= From a393e213264ba8be5fb4b3f3326e78ec3ead3fc2 Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Mon, 6 Sep 2021 15:08:22 -0400 Subject: [PATCH 09/61] remove redundant Core.bundle.get (#5947) --- core/src/mindustry/ui/dialogs/DatabaseDialog.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ui/dialogs/DatabaseDialog.java b/core/src/mindustry/ui/dialogs/DatabaseDialog.java index c94f69f2e2..b718950950 100644 --- a/core/src/mindustry/ui/dialogs/DatabaseDialog.java +++ b/core/src/mindustry/ui/dialogs/DatabaseDialog.java @@ -36,7 +36,7 @@ public class DatabaseDialog extends BaseDialog{ cont.table(s -> { s.image(Icon.zoom).padRight(8); search = s.field(null, text -> rebuild()).growX().get(); - search.setMessageText(Core.bundle.get("players.search")); + search.setMessageText("@players.search"); }).fillX().padBottom(4).row(); cont.pane(all); From efae0d3b6a8f7eeff6fdf5bec737c35b7d4ba5e3 Mon Sep 17 00:00:00 2001 From: Matthew Peng <54301439+MEEPofFaith@users.noreply.github.com> Date: Mon, 6 Sep 2021 17:45:42 -0700 Subject: [PATCH 10/61] Anuke what is this (#5949) --- .../blocks/units/tetrative-reconstructor.png | Bin 8748 -> 4694 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/assets-raw/sprites/blocks/units/tetrative-reconstructor.png b/core/assets-raw/sprites/blocks/units/tetrative-reconstructor.png index ed8121b6b9c51d97805f6fe7a7c05d45d18da1a8..67f7ed806b71ce53498a7399d2575b12b84796de 100644 GIT binary patch literal 4694 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 F{ttb_H{k#P literal 8748 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 From 34d2a0d3a041535d2ed43e0f2118cbe245bc99c6 Mon Sep 17 00:00:00 2001 From: TranquillyUnpleasant <62061444+TranquillyUnpleasant@users.noreply.github.com> Date: Tue, 7 Sep 2021 22:38:43 +0500 Subject: [PATCH 11/61] Hide all button for units (#5953) * Hide all button for units * Add bundle property --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/editor/WaveGraph.java | 11 +++++++++++ 2 files changed, 12 insertions(+) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 4ae1258e7d..b16bdbdcfa 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -401,6 +401,7 @@ waves.sort.reverse = Reverse Sort waves.sort.begin = Begin waves.sort.health = Health waves.sort.type = Type +waves.units.hide = Hide All #these are intentionally in lower case wavemode.counts = counts diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index 76bbc82d2b..dc7dc6f112 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -181,6 +181,17 @@ public class WaveGraph extends Table{ colors.clear(); colors.left(); + colors.button("@waves.units.hide", Styles.fullTogglet, () -> { + if(hidden.size == usedCopy.size){ + hidden.clear(); + }else{ + hidden.addAll(usedCopy); + } + + used.clear(); + used.addAll(usedCopy); + for(UnitType o : hidden) used.remove(o); + }).update(b -> b.setChecked(hidden.size == usedCopy.size)).height(32f).width(130f); colors.pane(t -> { t.left(); for(UnitType type : used){ From d257adf0c1448ecc232a4eb088ac74722b17a41c Mon Sep 17 00:00:00 2001 From: Matthew Peng <54301439+MEEPofFaith@users.noreply.github.com> Date: Tue, 7 Sep 2021 12:20:59 -0700 Subject: [PATCH 12/61] Show All (#5954) --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/editor/WaveGraph.java | 4 ++-- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index b16bdbdcfa..8b4a050c05 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -402,6 +402,7 @@ waves.sort.begin = Begin waves.sort.health = Health waves.sort.type = Type waves.units.hide = Hide All +waves.units.show = Show All #these are intentionally in lower case wavemode.counts = counts diff --git a/core/src/mindustry/editor/WaveGraph.java b/core/src/mindustry/editor/WaveGraph.java index dc7dc6f112..af80ab18d6 100644 --- a/core/src/mindustry/editor/WaveGraph.java +++ b/core/src/mindustry/editor/WaveGraph.java @@ -181,7 +181,7 @@ public class WaveGraph extends Table{ colors.clear(); colors.left(); - colors.button("@waves.units.hide", Styles.fullTogglet, () -> { + colors.button("@waves.units.hide", Styles.cleart, () -> { if(hidden.size == usedCopy.size){ hidden.clear(); }else{ @@ -191,7 +191,7 @@ public class WaveGraph extends Table{ used.clear(); used.addAll(usedCopy); for(UnitType o : hidden) used.remove(o); - }).update(b -> b.setChecked(hidden.size == usedCopy.size)).height(32f).width(130f); + }).update(b -> b.setText(hidden.size == usedCopy.size ? "@waves.units.show" : "@waves.units.hide")).height(32f).width(130f); colors.pane(t -> { t.left(); for(UnitType type : used){ From 5e13f71fde618f29e174b83088b025c877c96cab Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 7 Sep 2021 17:57:03 -0400 Subject: [PATCH 13/61] Minor bugfixes & compatibility fixes --- core/src/mindustry/core/ContentLoader.java | 15 +++++++++++---- core/src/mindustry/core/Renderer.java | 2 ++ core/src/mindustry/io/SaveFileReader.java | 7 +++++++ core/src/mindustry/mod/ContentParser.java | 2 ++ core/src/mindustry/world/Block.java | 3 ++- .../mindustry/world/consumers/ConsumePower.java | 6 +++--- gradle.properties | 2 +- 7 files changed, 28 insertions(+), 9 deletions(-) diff --git a/core/src/mindustry/core/ContentLoader.java b/core/src/mindustry/core/ContentLoader.java index f74ae47f07..6a836dceb5 100644 --- a/core/src/mindustry/core/ContentLoader.java +++ b/core/src/mindustry/core/ContentLoader.java @@ -8,8 +8,9 @@ import arc.struct.*; import arc.util.*; import mindustry.content.*; import mindustry.ctype.*; -import mindustry.game.EventType.*; import mindustry.entities.bullet.*; +import mindustry.game.EventType.*; +import mindustry.io.*; import mindustry.mod.Mods.*; import mindustry.type.*; import mindustry.world.*; @@ -211,10 +212,16 @@ public class ContentLoader{ } public T getByName(ContentType type, String name){ - if(contentNameMap[type.ordinal()] == null){ - return null; + var map = contentNameMap[type.ordinal()]; + + if(map == null) return null; + + //load fallbacks + if(type == ContentType.block){ + name = SaveVersion.modContentNameMap.get(name, name); } - return (T)contentNameMap[type.ordinal()].get(name); + + return (T)map.get(name); } public T getByID(ContentType type, int id){ diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index c348bc2fda..6605519266 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -504,6 +504,8 @@ public class Renderer implements ApplicationListener{ public void showLaunch(CoreBlock coreType){ Vars.ui.hudfrag.showLaunch(); + Vars.control.input.frag.config.hideConfig(); + Vars.control.input.frag.inv.hide(); launchCoreType = coreType; launching = true; landCore = player.team().core(); diff --git a/core/src/mindustry/io/SaveFileReader.java b/core/src/mindustry/io/SaveFileReader.java index 1a059c976b..0ea4f3af9d 100644 --- a/core/src/mindustry/io/SaveFileReader.java +++ b/core/src/mindustry/io/SaveFileReader.java @@ -59,6 +59,13 @@ public abstract class SaveFileReader{ "cryofluidmixer", "cryofluid-mixer" ); + public static final ObjectMap modContentNameMap = ObjectMap.of( + "craters", "crater-stone", + "deepwater", "deep-water", + "water", "shallow-water", + "slag", "molten-slag" + ); + protected final ReusableByteOutStream byteOutput = new ReusableByteOutStream(); protected final DataOutputStream dataBytes = new DataOutputStream(byteOutput); protected final ReusableByteOutStream byteOutputSmall = new ReusableByteOutStream(); diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 3644b3ad5b..a5e2cdf39b 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -80,6 +80,8 @@ public class ContentParser{ if(data.isString()){ StatusEffect result = locate(ContentType.status, data.asString()); if(result != null) return result; + result = (StatusEffect)fieldOpt(StatusEffects.class, data); + if(result != null) return result; throw new IllegalArgumentException("Unknown status effect: '" + data.asString() + "'"); } StatusEffect effect = new StatusEffect(currentMod.name + "-" + data.getString("name")); diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index be8837463a..4f8b078ef9 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -845,7 +845,8 @@ public class Block extends UnlockableContent{ } if(!outputsPower && consumes.hasPower() && consumes.getPower().buffered){ - throw new IllegalArgumentException("Consumer using buffered power: " + name); + Log.warn("Consumer using buffered power: @. Disabling buffered power.", name); + consumes.getPower().buffered = false; } if(buildVisibility == BuildVisibility.sandboxOnly){ diff --git a/core/src/mindustry/world/consumers/ConsumePower.java b/core/src/mindustry/world/consumers/ConsumePower.java index 67b23d6c4c..991ad968e7 100644 --- a/core/src/mindustry/world/consumers/ConsumePower.java +++ b/core/src/mindustry/world/consumers/ConsumePower.java @@ -8,11 +8,11 @@ import mindustry.world.meta.*; /** Consumer class for blocks which consume power while being connected to a power graph. */ public class ConsumePower extends Consume{ /** The maximum amount of power which can be processed per tick. This might influence efficiency or load a buffer. */ - public final float usage; + public float usage; /** The maximum power capacity in power units. */ - public final float capacity; + public float capacity; /** True if the module can store power. */ - public final boolean buffered; + public boolean buffered; public ConsumePower(float usage, float capacity, boolean buffered){ this.usage = usage; diff --git a/gradle.properties b/gradle.properties index b38510c7c9..e56e8db5ca 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=98c420de77661889ab0330a956d50721f27f33d9 +archash=d78dce000f67845a757dca905de9209ad57106a9 From dd7062f0f798845c5e4c2b468bee5e4cea0a33b5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 7 Sep 2021 22:32:27 -0400 Subject: [PATCH 14/61] ParticleEffect#sizeInterp / Log usable RAM --- core/src/mindustry/ClientLauncher.java | 3 +++ core/src/mindustry/entities/effect/ParticleEffect.java | 9 ++++++--- .../mindustry/world/blocks/defense/turrets/Turret.java | 5 ++--- 3 files changed, 11 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/ClientLauncher.java b/core/src/mindustry/ClientLauncher.java index a7d1791e20..4a3fce014a 100644 --- a/core/src/mindustry/ClientLauncher.java +++ b/core/src/mindustry/ClientLauncher.java @@ -56,6 +56,9 @@ public abstract class ClientLauncher extends ApplicationCore implements Platform Log.info("[GL] Using @ context.", gl30 != null ? "OpenGL 3" : "OpenGL 2"); if(maxTextureSize < 4096) Log.warn("[GL] Your maximum texture size is below the recommended minimum of 4096. This will cause severe performance issues."); Log.info("[JAVA] Version: @", OS.javaVersion); + long ram = Runtime.getRuntime().maxMemory(); + boolean gb = ram >= 1024 * 1024 * 1024; + Log.info("[RAM] Available: @ @", Strings.fixed(gb ? ram / 1024f / 1024 / 1024f : ram / 1024f / 1024f, 1), gb ? "GB" : "MB"); Time.setDeltaProvider(() -> { float result = Core.graphics.getDeltaTime() * 60f; diff --git a/core/src/mindustry/entities/effect/ParticleEffect.java b/core/src/mindustry/entities/effect/ParticleEffect.java index 0efbaefcbf..477e52e19a 100644 --- a/core/src/mindustry/entities/effect/ParticleEffect.java +++ b/core/src/mindustry/entities/effect/ParticleEffect.java @@ -20,6 +20,8 @@ public class ParticleEffect extends Effect{ public float cone = 180f, length = 20f, baseLength = 0f; /** Particle size/length/radius interpolation. */ public Interp interp = Interp.linear; + /** Particle size interpolation. Null to use interp. */ + public @Nullable Interp sizeInterp = null; public float offsetX, offsetY; public float lightScl = 2f, lightOpacity = 0.6f; public @Nullable Color lightColor; @@ -44,6 +46,7 @@ public class ParticleEffect extends Effect{ @Override public void init(){ clip = Math.max(clip, length + Math.max(sizeFrom, sizeTo)); + if(sizeInterp == null) sizeInterp = interp; } @Override @@ -52,15 +55,15 @@ public class ParticleEffect extends Effect{ float rawfin = e.fin(); float fin = e.fin(interp); - float rad = interp.apply(sizeFrom, sizeTo, rawfin) * 2; + float rad = sizeInterp.apply(sizeFrom, sizeTo, rawfin) * 2; float ox = e.x + Angles.trnsx(e.rotation, offsetX, offsetY), oy = e.y + Angles.trnsy(e.rotation, offsetX, offsetY); Draw.color(colorFrom, colorTo, fin); Color lightColor = this.lightColor == null ? Draw.getColor() : this.lightColor; if(line){ - Lines.stroke(interp.apply(strokeFrom, strokeTo, rawfin)); - float len = interp.apply(lenFrom, lenTo, rawfin); + Lines.stroke(sizeInterp.apply(strokeFrom, strokeTo, rawfin)); + float len = sizeInterp.apply(lenFrom, lenTo, rawfin); rand.setSeed(e.id); for(int i = 0; i < particles; i++){ diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 5f26af42d8..050e20975a 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -273,6 +273,7 @@ public class Turret extends ReloadTurret{ } if(hasAmmo()){ + if(Float.isNaN(reload)) rotation = 0; if(timer(timerTarget, targetInterval)){ findTarget(); @@ -289,9 +290,7 @@ public class Turret extends ReloadTurret{ }else{ //default AI behavior targetPosition(target); - if(Float.isNaN(rotation)){ - rotation = 0; - } + if(Float.isNaN(rotation)) rotation = 0; } float targetRot = angleTo(targetPos); From c98eb2edd79be6ad64b608df2c29ef7928ece1ab Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Sep 2021 08:42:23 -0400 Subject: [PATCH 15/61] Fixed #5958 --- core/src/mindustry/entities/effect/MultiEffect.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/entities/effect/MultiEffect.java b/core/src/mindustry/entities/effect/MultiEffect.java index a93c3bd276..ba44402ab7 100644 --- a/core/src/mindustry/entities/effect/MultiEffect.java +++ b/core/src/mindustry/entities/effect/MultiEffect.java @@ -18,6 +18,7 @@ public class MultiEffect extends Effect{ @Override public void init(){ for(Effect f : effects){ + f.init(); clip = Math.max(clip, f.clip); lifetime = Math.max(lifetime, f.lifetime); } From cde192b59a871ecfc77cfc39f874fc8edc5db597 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Sep 2021 09:04:04 -0400 Subject: [PATCH 16/61] Added Block#allowConfigInventory --- core/src/mindustry/input/InputHandler.java | 2 +- core/src/mindustry/world/Block.java | 2 ++ core/src/mindustry/world/blocks/distribution/ItemBridge.java | 2 ++ gradle.properties | 2 +- 4 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 4e3c58e5c0..b9a98d832d 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -967,7 +967,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ //consume tap event if necessary if(build.interactable(player.team()) && build.block.consumesTap){ consumed = true; - }else if(build.interactable(player.team()) && build.block.synthetic() && !consumed){ + }else if(build.interactable(player.team()) && build.block.synthetic() && (!consumed || build.block.allowConfigInventory)){ if(build.block.hasItems && build.items.total() > 0){ frag.inv.showFor(build); consumed = true; diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 4f8b078ef9..038764ef2a 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -159,6 +159,8 @@ public class Block extends UnlockableContent{ public int unitCapModifier = 0; /** Whether the block can be tapped and selected to configure. */ public boolean configurable; + /** If true, the building inventory can be shown with the config. */ + public boolean allowConfigInventory = true; /** If true, this block can be configured by logic. */ public boolean logicConfigurable = false; /** Whether this block consumes touchDown events when tapped. */ diff --git a/core/src/mindustry/world/blocks/distribution/ItemBridge.java b/core/src/mindustry/world/blocks/distribution/ItemBridge.java index 29438c97fb..59d90b1817 100644 --- a/core/src/mindustry/world/blocks/distribution/ItemBridge.java +++ b/core/src/mindustry/world/blocks/distribution/ItemBridge.java @@ -51,6 +51,8 @@ public class ItemBridge extends Block{ group = BlockGroup.transportation; noUpdateDisabled = true; copyConfig = false; + //disabled as to not be annoying + allowConfigInventory = false; //point2 config is relative config(Point2.class, (ItemBridgeBuild tile, Point2 i) -> tile.link = Point2.pack(i.x + tile.tileX(), i.y + tile.tileY())); diff --git a/gradle.properties b/gradle.properties index e56e8db5ca..dc6d310199 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=d78dce000f67845a757dca905de9209ad57106a9 +archash=f1cd1594796e87b469da17d274f78a595e000c4f From 2222330b438c2d74981aa4315c3f0570e40556a5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Sep 2021 11:23:37 -0400 Subject: [PATCH 17/61] Added hint for high threat level sector --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/ui/fragments/HintsFragment.java | 5 +++++ 2 files changed, 6 insertions(+) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 8b4a050c05..eb7d50aa88 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1395,6 +1395,7 @@ hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit p hint.guardian = [accent]Guardian[] units are armored. Weak ammo such as [accent]Copper[] and [accent]Lead[] is [scarlet]not effective[].\n\nUse higher tier turrets or \uf835 [accent]Graphite[] \uf861Duo/\uf859Salvo ammunition to take Guardians down. hint.coreUpgrade = Cores can be upgraded by [accent]placing higher-tier cores over them[].\n\nPlace a  [accent]Foundation[] core over the  [accent]Shard[] core. Make sure it is free from nearby obstructions. hint.presetLaunch = Gray [accent]landing zone sectors[], such as [accent]Frozen Forest[], can be launched to from anywhere. They do not require capture of nearby territory.\n\n[accent]Numbered sectors[], such as this one, are [accent]optional[]. +hint.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.coopCampaign = When playing the [accent]co-op campaign[], items that are produced in the current map will also be sent [accent]to your local sectors[].\n\nAny new research done by the host also carries over. diff --git a/core/src/mindustry/ui/fragments/HintsFragment.java b/core/src/mindustry/ui/fragments/HintsFragment.java index 45230f2d3a..05fc098f9d 100644 --- a/core/src/mindustry/ui/fragments/HintsFragment.java +++ b/core/src/mindustry/ui/fragments/HintsFragment.java @@ -181,6 +181,11 @@ public class HintsFragment extends Fragment{ && SectorPresets.frozenForest.unlocked() && SectorPresets.frozenForest.sector.save == null, () -> state.isCampaign() && state.getSector().preset == SectorPresets.frozenForest), + presetDifficulty(() -> state.isCampaign() + && state.getSector().preset == null + && state.getSector().threat >= 0.5f + && !SectorPresets.tarFields.sector.isCaptured(), //appear only when the player hasn't progressed much in the game yet + () -> state.isCampaign() && state.getSector().preset != null), coreIncinerate(() -> state.isCampaign() && state.rules.defaultTeam.core() != null && state.rules.defaultTeam.core().items.get(Items.copper) >= state.rules.defaultTeam.core().storageCapacity - 10, () -> false), coopCampaign(() -> net.client() && state.isCampaign() && SectorPresets.groundZero.sector.hasBase(), () -> false), ; From a5697a7d4b8b7a940d3d448d0ff5336cdcf4a438 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Sep 2021 15:09:05 -0400 Subject: [PATCH 18/61] Fixed mod alpha bleeding not applying correctly --- core/src/mindustry/mod/Mods.java | 6 +++--- core/src/mindustry/type/UnitType.java | 2 +- core/src/mindustry/world/Block.java | 11 ++++++++--- gradle.properties | 2 +- 4 files changed, 13 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/mod/Mods.java b/core/src/mindustry/mod/Mods.java index 8e3f3ad2b1..e4b865de88 100644 --- a/core/src/mindustry/mod/Mods.java +++ b/core/src/mindustry/mod/Mods.java @@ -177,7 +177,7 @@ public class Mods implements Loadable{ } private void packSprites(Seq sprites, LoadedMod mod, boolean prefix, Seq> tasks){ - boolean linear = Core.settings.getBool("linear"); + boolean linear = Core.settings.getBool("linear", true); for(Fi file : sprites){ //read and bleed pixmaps in parallel @@ -186,7 +186,7 @@ public class Mods implements Loadable{ Pixmap pix = new Pixmap(file.readBytes()); //only bleeds when linear filtering is on at startup if(linear){ - Pixmaps.bleed(pix); + Pixmaps.bleed(pix, 2); } //this returns a *runnable* which actually packs the resulting pixmap; this has to be done synchronously outside the method return () -> { @@ -269,7 +269,7 @@ public class Mods implements Loadable{ } }; - TextureFilter filter = Core.settings.getBool("linear") ? TextureFilter.linear : TextureFilter.nearest; + TextureFilter filter = Core.settings.getBool("linear", true) ? TextureFilter.linear : TextureFilter.nearest; Time.mark(); //generate new icons diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index fb9b27e4a4..5825e85763 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -448,7 +448,7 @@ public class UnitType extends UnlockableContent{ if(!packer.has(name + "-outline")){ PixmapRegion base = Core.atlas.getPixmap(region); var result = Pixmaps.outline(base, outlineColor, outlineRadius); - if(Core.settings.getBool("linear")){ + if(Core.settings.getBool("linear", true)){ Pixmaps.bleed(result); } packer.add(PageType.main, name + "-outline", result); diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index 038764ef2a..e03ed2c0b0 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -912,12 +912,17 @@ public class Block extends UnlockableContent{ for(int x = 0; x < base.width; x++){ for(int y = 0; y < base.height; y++){ int color = base.get(x, y); - int index = color == 0xffffffff ? 0 : color == 0xdcc6c6ff ? 1 : color == 0x9d7f7fff ? 2 : -1; + int index = switch(color){ + case 0xffffffff -> 0; + case 0xdcc6c6ff, 0xdbc5c5ff -> 1; + case 0x9d7f7fff, 0x9e8080ff -> 2; + default -> -1; + }; out.setRaw(x, y, index == -1 ? base.get(x, y) : team.palettei[index]); } } - if(Core.settings.getBool("linear")){ + if(Core.settings.getBool("linear", true)){ Pixmaps.bleed(out); } @@ -938,7 +943,7 @@ public class Block extends UnlockableContent{ if(outlineIcon){ PixmapRegion region = Core.atlas.getPixmap(gen[outlinedIcon >= 0 ? outlinedIcon : gen.length -1]); Pixmap out = last = Pixmaps.outline(region, outlineColor, outlineRadius); - if(Core.settings.getBool("linear")){ + if(Core.settings.getBool("linear", true)){ Pixmaps.bleed(out); } packer.add(PageType.main, name, out); diff --git a/gradle.properties b/gradle.properties index dc6d310199..545947379a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=f1cd1594796e87b469da17d274f78a595e000c4f +archash=bd75f040406626ad933b54f1c06d16c1c0af8d14 From 868cd4fb0b419f4e4ee70e39a8b1457ee256ba3b Mon Sep 17 00:00:00 2001 From: Matthew Peng <54301439+MEEPofFaith@users.noreply.github.com> Date: Wed, 8 Sep 2021 17:40:56 -0700 Subject: [PATCH 19/61] Just because a generator doesn't have turbines doesn't mean it doesn't have liquid (#5962) --- core/src/mindustry/world/blocks/power/BurnerGenerator.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/world/blocks/power/BurnerGenerator.java b/core/src/mindustry/world/blocks/power/BurnerGenerator.java index 9e70f9b86f..e18ec02664 100644 --- a/core/src/mindustry/world/blocks/power/BurnerGenerator.java +++ b/core/src/mindustry/world/blocks/power/BurnerGenerator.java @@ -40,10 +40,10 @@ public class BurnerGenerator extends ItemLiquidGenerator{ Draw.rect(turbineRegions[1], x, y, -totalTime * turbineSpeed); Draw.rect(capRegion, x, y); + } - if(hasLiquids){ - Drawf.liquid(liquidRegion, x, y, liquids.total() / liquidCapacity, liquids.current().color); - } + if(hasLiquids && liquidRegion.found()){ + Drawf.liquid(liquidRegion, x, y, liquids.total() / liquidCapacity, liquids.current().color); } } } From deed84f9a3fee9ace357f08164dee8d5befa913d Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 8 Sep 2021 20:44:26 -0400 Subject: [PATCH 20/61] Public power graph contents --- core/src/mindustry/world/blocks/power/PowerGraph.java | 9 +++++---- 1 file changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/world/blocks/power/PowerGraph.java b/core/src/mindustry/world/blocks/power/PowerGraph.java index 80567af1ad..2a80e7897c 100644 --- a/core/src/mindustry/world/blocks/power/PowerGraph.java +++ b/core/src/mindustry/world/blocks/power/PowerGraph.java @@ -13,10 +13,11 @@ public class PowerGraph{ private static final Seq outArray2 = new Seq<>(); private static final IntSet closedSet = new IntSet(); - private final Seq producers = new Seq<>(false); - private final Seq consumers = new Seq<>(false); - private final Seq batteries = new Seq<>(false); - private final Seq all = new Seq<>(false); + //do not modify any of these unless you know what you're doing! + public final Seq producers = new Seq<>(false); + public final Seq consumers = new Seq<>(false); + public final Seq batteries = new Seq<>(false); + public final Seq all = new Seq<>(false); private final WindowedMean powerBalance = new WindowedMean(60); private float lastPowerProduced, lastPowerNeeded, lastPowerStored; From 1a686c44a13cff0c17c0cf024393705dcdcdb6f3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 9 Sep 2021 09:59:35 -0400 Subject: [PATCH 21/61] Fixed editor crash --- core/src/mindustry/ai/BlockIndexer.java | 2 ++ core/src/mindustry/type/UnitType.java | 2 +- 2 files changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java index 519720e4ac..cde88990f3 100644 --- a/core/src/mindustry/ai/BlockIndexer.java +++ b/core/src/mindustry/ai/BlockIndexer.java @@ -50,10 +50,12 @@ public class BlockIndexer{ clearFlags(); Events.on(TilePreChangeEvent.class, event -> { + if(state.isEditor()) return; removeIndex(event.tile); }); Events.on(TileChangeEvent.class, event -> { + if(state.isEditor()) return; addIndex(event.tile); }); diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 5825e85763..7d7357b871 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -629,7 +629,7 @@ public class UnitType extends UnlockableContent{ Draw.color(0, 0, 0, 0.4f); float rad = 1.6f; float size = Math.max(region.width, region.height) * Draw.scl; - Draw.rect(softShadowRegion, unit, size * rad * Draw.xscl, size * rad * Draw.yscl); + Draw.rect(softShadowRegion, unit, size * rad * Draw.xscl, size * rad * Draw.yscl, unit.rotation - 90); Draw.color(); } From 671098cc28b4c1c886be1c5736e4f87d63bdd2ff Mon Sep 17 00:00:00 2001 From: itcannotbe <45280919+itcannotbe@users.noreply.github.com> Date: Thu, 9 Sep 2021 23:16:47 +0800 Subject: [PATCH 22/61] Add Build Cost Multiplier to Distributor (#5967) It just makes sense. --- core/src/mindustry/content/Blocks.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 9f73851010..988bfda6ee 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1020,6 +1020,7 @@ public class Blocks implements ContentList{ distributor = new Router("distributor"){{ requirements(Category.distribution, with(Items.lead, 4, Items.copper, 4)); + buildCostMultiplier = 3f; size = 2; }}; From e997768a0adcf5fee17707114258471d169e7a93 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 9 Sep 2021 12:08:33 -0400 Subject: [PATCH 23/61] d --- core/src/mindustry/ai/BlockIndexer.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ai/BlockIndexer.java b/core/src/mindustry/ai/BlockIndexer.java index cde88990f3..c3d6670ffb 100644 --- a/core/src/mindustry/ai/BlockIndexer.java +++ b/core/src/mindustry/ai/BlockIndexer.java @@ -111,7 +111,7 @@ public class BlockIndexer{ } } - //update the unit cap when building is remove + //update the unit cap when building is removed data.unitCap -= tile.block().unitCapModifier; //unregister building from building quadtree From abbc25798d35c0581250aa734355d8e97cba8bb6 Mon Sep 17 00:00:00 2001 From: Matthew Peng <54301439+MEEPofFaith@users.noreply.github.com> Date: Thu, 9 Sep 2021 12:47:08 -0700 Subject: [PATCH 24/61] Pull trail updating out into its own method (#5964) --- .../mindustry/entities/bullet/BulletType.java | 18 +++++++++++------- 1 file changed, 11 insertions(+), 7 deletions(-) diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 213c911a6b..5fc19e4f20 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -346,13 +346,7 @@ public class BulletType extends Content implements Cloneable{ } public void update(Bullet b){ - if(!headless && trailLength > 0){ - if(b.trail == null){ - b.trail = new Trail(trailLength); - } - b.trail.length = trailLength; - b.trail.update(b.x, b.y, trailInterp.apply(b.fin())); - } + updateTrail(b); if(homingPower > 0.0001f && b.time >= homingDelay){ Teamc target; @@ -386,6 +380,16 @@ public class BulletType extends Content implements Cloneable{ } } } + + public void updateTrail(Bullet b){ + if(!headless && trailLength > 0){ + if(b.trail == null){ + b.trail = new Trail(trailLength); + } + b.trail.length = trailLength; + b.trail.update(b.x, b.y, trailInterp.apply(b.fin())); + } + } @Override public void init(){ From cbe188ababf877735e81ee14c22cffb68cec98e0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 9 Sep 2021 17:04:55 -0400 Subject: [PATCH 25/61] Map editor bugfixes / Re-added build noise --- core/assets/sounds/build.ogg | Bin 35059 -> 24470 bytes core/src/mindustry/audio/SoundControl.java | 2 +- core/src/mindustry/editor/MapEditor.java | 14 ++++++++------ core/src/mindustry/editor/MapView.java | 3 ++- .../mindustry/entities/comp/BuilderComp.java | 4 ++++ .../mindustry/maps/filters/DistortFilter.java | 2 +- .../maps/filters/GenerateFilter.java | 4 ++++ gradle.properties | 2 +- 8 files changed, 21 insertions(+), 10 deletions(-) diff --git a/core/assets/sounds/build.ogg b/core/assets/sounds/build.ogg index 8235d41eb948eaac0cf51df07d083a990f46464b..e39daef50beb8565460a2a61ba99e6e2e8316013 100644 GIT binary patch delta 21355 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 USCmSeeg5WBUe~CwR1yJ*Q@s5Aod4W zA3I51Tk%CFlN;yMUH0p|hHPBD-7{`3&0ECYAznEdsKjJH@jFE0#7S&ovlzt8>Z7(7 z>zqOXxPc-9R7|vgu(%bgsZ%(eLjvSZ>KYk<-;{7D_hkSF5BputUF?2u!hf^kspcH# z0^3hWW(mig=9;h$rPcS^p&5Kr+-UT*$XD7@@ps(Z!8VRQ@fucudVaNosKn+p#s7`OPILey0?&M{iy3Pdb^Cx40H;ufJ z)>_4{xyNpu=@2m3-+`LPAc)NlAxkq!Vy;2`=UVb$MVqo|WiDIfC z(i`Eqwh~~!Z#n{x0JxrRIQE1}+^A#E=9q#B_tXv{qIAoAqCx)qfr=^|_G0QyQsp`3 z{B2?_nX!onXyu0K=GMP7_%qE0^4Xmd9e&qiLI>sLeDQCf0fDGQe}55YYHcRRuQ4QVTw@vGp`yPt+uDwn3T$x9BGX_#g*p(5 zo4MP$IgeC4+t(DhWg3(_Pb~9K;OD`LpXSwh->#}|H?c`g8;FOY9E`&3jhsSw>2Gr` zh#ns2FMh#Ie{FL3u0yaj|3h3t0DzAOyh9`~GuvY$0-w$QID(4V=~ge+>T;)!v|$Pn zPHO3+BO&s56SIYA=4Y|jwSdT*W&Fk$n(DCur?chLF@MU ztIpOZcQ0IpnS45(xwl1y0A7M6txO!2#ECKeZGNmBB(BrG5!^k*%_AKmevJrLsOw|0 z6AkjalvH{cj3L14S9&`Qu=UeHZW;B#yB)h#Ii__xy`vCM^(dZSjI!;_z%-BkZ#9j@Bo z-yJUKSmjDgU@f>e(?0Oyo(0b>R49S5{!A^DMScQ;`33UtT{{t}xzL1{4CESyUU(&W3s`4MmQFlhB|4v&0Uzh5^7PnFQ*ER?m>!lj6y#(|$k4 zs5C{({P>PlZ;NC3@U2WCmfzAfr!Y&EVXIA3>nDRAFh}zpYe=|8jrYar8rBz;Db~b) z7}giS$zaak?UogwCBe^K^b5L#tYUXLLk#!h^@Su&xW$Z80wSSb9}k0>2-$_6KH|}4 zjc?g2Cy&rGwJ&8m?^6#%e}KX}UC zY|Qn>9hhms^HjUR$!HgN4DZ5EH3FKxDhpi7ROW2t;V;t+Htl+R^5iNgFxRC808b|9 zg&_tM?)ev9`OP-oN>aIoG{hC0ex$KAxLm4wY@1yDQtR4IIm>PTgU=a7tsGf}GSK=R zi@9*U;q6pWYodT7(&TThhb* z>NuKCZJ0Y6muc6;-%JO^No5Bmc+Ek%YyTrmL>bcK4mx!LS9#u^hHyo<<#DgYoE@~W z@PK<7%WgsH-QM@dY}j6;B|KJMS8$q|RlP&>59%c`M7un>)@X8XV7%R0Ts-0X-&kWv zwg--Bfcd%lDJv8NL2`6(XFYZ5kXfHO&ep$+p?_4(WOZ1-Y&Vaz#r(Ww?zVTEsu}414cA7T#1ELi zC=ShB*MVBT%vs=nZzZE+DFjSfO(7#9j8~2kK1PQJJz>&Q5v8=g1j$WOT=D>TdewK7 zlPg5Fa;`yxkHre0E18+-rU2IyvXM|fsu!{{6i$WVKLzNv-ju1`xIJoxwc_9ScJ_jm zEm4a#WxnEa(_2Lrxr&EGj@iqYi;pdSZrf!vgaFKz(Lvi4Q6^(zK?(eh8Zx&aO+~|O zKKC(MgK`S`Vo#x_9Rh8Q&;qQX>Fcn-}Rv3`IuK9++4p$TO{=RpB(gjb-ZJvvR zfo6;V$|UO;2$B7{D-xR_?rmu1_pPHvgDP)Syuu7vQJQM*wlNX&lU@#=3to~7F_he~ zR&q?A1ujpH^~NhiMpMh28%vh&>BI4_w<_PPsE19e#~x?~uF~RR;?H|~nzp+CYnt79 zae5`@J9uO7Q~r1Dcvlx*E27_g_>TPpaMf1h8mzPY_8 guW(nbUF=BiZ&m!xu3I_avScrRBE5g@pD^eC5Bgao%m4rY delta 32050 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 { - data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.2f); + data.curVolume = Mathf.lerpDelta(data.curVolume, data.volume * avol, 0.11f); boolean play = data.curVolume > 0.01f; float pan = Mathf.zero(data.total, 0.0001f) ? 0f : sound.calcPan(data.sum.x / data.total, data.sum.y / data.total); diff --git a/core/src/mindustry/editor/MapEditor.java b/core/src/mindustry/editor/MapEditor.java index b603182e43..79609b22fb 100644 --- a/core/src/mindustry/editor/MapEditor.java +++ b/core/src/mindustry/editor/MapEditor.java @@ -18,7 +18,7 @@ import mindustry.world.*; import static mindustry.Vars.*; public class MapEditor{ - public static final int[] brushSizes = {1, 2, 3, 4, 5, 9, 15, 20}; + public static final float[] brushSizes = {1, 1.5f, 2, 3, 4, 5, 9, 15, 20}; public StringMap tags = new StringMap(); public MapRenderer renderer = new MapRenderer(); @@ -28,7 +28,7 @@ public class MapEditor{ private DrawOperation currentOp; private boolean loading; - public int brushSize = 1; + public float brushSize = 1; public int rotation; public Block drawBlock = Blocks.stone; public Team drawTeam = Team.sharded; @@ -227,8 +227,9 @@ public class MapEditor{ } public void drawCircle(int x, int y, Cons drawer){ - for(int rx = -brushSize; rx <= brushSize; rx++){ - for(int ry = -brushSize; ry <= brushSize; ry++){ + int clamped = (int)brushSize; + for(int rx = -clamped; rx <= clamped; rx++){ + for(int ry = -clamped; ry <= clamped; ry++){ if(Mathf.within(rx, ry, brushSize - 0.5f + 0.0001f)){ int wx = x + rx, wy = y + ry; @@ -243,8 +244,9 @@ public class MapEditor{ } public void drawSquare(int x, int y, Cons drawer){ - for(int rx = -brushSize; rx <= brushSize; rx++){ - for(int ry = -brushSize; ry <= brushSize; ry++){ + int clamped = (int)brushSize; + for(int rx = -clamped; rx <= clamped; rx++){ + for(int ry = -clamped; ry <= clamped; ry++){ int wx = x + rx, wy = y + ry; if(wx < 0 || wy < 0 || wx >= width() || wy >= height()){ diff --git a/core/src/mindustry/editor/MapView.java b/core/src/mindustry/editor/MapView.java index 4b603ddb28..e1e0512c43 100644 --- a/core/src/mindustry/editor/MapView.java +++ b/core/src/mindustry/editor/MapView.java @@ -38,7 +38,8 @@ public class MapView extends Element implements GestureListener{ for(int i = 0; i < MapEditor.brushSizes.length; i++){ float size = MapEditor.brushSizes[i]; - brushPolygons[i] = Geometry.pixelCircle(size, (index, x, y) -> Mathf.dst(x, y, index, index) <= index - 0.5f); + float mod = size % 1f; + brushPolygons[i] = Geometry.pixelCircle(size, (index, x, y) -> Mathf.dst(x, y, index - mod, index - mod) <= size - 0.5f); } Core.input.getInputProcessors().insert(0, new GestureDetector(20, 0.5f, 2, 0.15f, this)); diff --git a/core/src/mindustry/entities/comp/BuilderComp.java b/core/src/mindustry/entities/comp/BuilderComp.java index 81b59a632f..c151562835 100644 --- a/core/src/mindustry/entities/comp/BuilderComp.java +++ b/core/src/mindustry/entities/comp/BuilderComp.java @@ -94,6 +94,10 @@ abstract class BuilderComp implements Posc, Statusc, Teamc, Rotc{ if(!within(tile, finalPlaceDst)) return; + if(!headless){ + Vars.control.sound.loop(Sounds.build, tile, 0.51f); + } + if(!(tile.build instanceof ConstructBuild cb)){ if(!current.initialized && !current.breaking && Build.validPlace(current.block, team, current.x, current.y, current.rotation)){ boolean hasAll = infinite || current.isRotation(team) || !Structs.contains(current.block.requirements, i -> core != null && !core.items.has(i.item, Math.min(Mathf.round(i.amount * state.rules.buildCostMultiplier), 1))); diff --git a/core/src/mindustry/maps/filters/DistortFilter.java b/core/src/mindustry/maps/filters/DistortFilter.java index 8b6d80e8e1..c1d6baa69e 100644 --- a/core/src/mindustry/maps/filters/DistortFilter.java +++ b/core/src/mindustry/maps/filters/DistortFilter.java @@ -27,7 +27,7 @@ public class DistortFilter extends GenerateFilter{ @Override public void apply(GenerateInput in){ - Tile tile = in.tile(in.x + noise(in, scl, mag) - mag / 2f, in.y + noise(in, scl, mag) - mag / 2f); + Tile tile = in.tile(in.x + noise(in, scl, mag) - mag / 2f, in.y + noise(1, in, scl, mag) - mag / 2f); in.floor = tile.floor(); if(!tile.block().synthetic() && !in.block.synthetic()) in.block = tile.block(); diff --git a/core/src/mindustry/maps/filters/GenerateFilter.java b/core/src/mindustry/maps/filters/GenerateFilter.java index fea59ed405..9182fc6857 100644 --- a/core/src/mindustry/maps/filters/GenerateFilter.java +++ b/core/src/mindustry/maps/filters/GenerateFilter.java @@ -99,6 +99,10 @@ public abstract class GenerateFilter{ //utility generation functions + protected float noise(int seedOffset, GenerateInput in, float scl, float mag){ + return Simplex.noise2d(seedOffset + seed, 1f, 0f, 1f / scl, in.x, in.y) * mag; + } + protected float noise(GenerateInput in, float scl, float mag){ return Simplex.noise2d(seed, 1f, 0f, 1f / scl, in.x, in.y) * mag; } diff --git a/gradle.properties b/gradle.properties index 545947379a..ba07db3e96 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=bd75f040406626ad933b54f1c06d16c1c0af8d14 +archash=29844ef3821ab99a0212dfb676463cb37d870a1b From 9076325fa1aad7946bef0198e5722a8ab6d51b0b Mon Sep 17 00:00:00 2001 From: TranquillyUnpleasant <62061444+TranquillyUnpleasant@users.noreply.github.com> Date: Fri, 10 Sep 2021 04:38:56 +0500 Subject: [PATCH 26/61] Add a copy button to spawn groups (#5957) * copy button * rebuild groups on removal * two factor sorting * copy method for spawngroup * implement Clonable * revert to copy to call clone --- core/src/mindustry/editor/WaveInfoDialog.java | 22 +++++++++++++------ core/src/mindustry/game/SpawnGroup.java | 10 ++++++++- 2 files changed, 24 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index 359c0b2499..9f3dc474aa 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -1,7 +1,6 @@ package mindustry.editor; import arc.*; -import arc.func.*; import arc.graphics.*; import arc.math.*; import arc.scene.event.*; @@ -20,6 +19,8 @@ import mindustry.type.*; import mindustry.ui.*; import mindustry.ui.dialogs.*; +import java.util.*; + import static mindustry.Vars.*; import static mindustry.game.SpawnGroup.*; @@ -205,6 +206,13 @@ public class WaveInfoDialog extends BaseDialog{ b.label(() -> (group.begin + 1) + "").color(Color.lightGray).minWidth(45f).labelAlign(Align.left).left(); + b.button(Icon.copySmall, Styles.emptyi, () -> { + SpawnGroup newGroup = group.copy(); + expandedGroup = newGroup; + groups.add(newGroup); + buildGroups(); + }).pad(-6).size(46f); + b.button(group.effect != null && group.effect != StatusEffects.none ? new TextureRegionDrawable(group.effect.uiIcon) : Icon.logicSmall, @@ -215,7 +223,7 @@ public class WaveInfoDialog extends BaseDialog{ groups.remove(group); table.getCell(t).pad(0f); t.remove(); - updateWaves(); + buildGroups(); }).pad(-6).size(46f).padRight(-12f); }, () -> { expandedGroup = expandedGroup == group ? null : group; @@ -374,15 +382,15 @@ public class WaveInfoDialog extends BaseDialog{ } enum Sort{ - begin(g -> g.begin), - health(g -> g.type.health), - type(g -> g.type.id); + begin(Structs.comps(Structs.comparingFloat(g -> g.begin), Structs.comparingFloat(g -> g.type.id))), + health(Structs.comps(Structs.comparingFloat(g -> g.type.health), Structs.comparingFloat(g -> g.begin))), + type(Structs.comps(Structs.comparingFloat(g -> g.type.id), Structs.comparingFloat(g -> g.begin))); static final Sort[] all = values(); - final Floatf sort; + final Comparator sort; - Sort(Floatf sort){ + Sort(Comparator sort){ this.sort = sort; } } diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index 115c78a7e6..0c93a71820 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -19,7 +19,7 @@ import static mindustry.Vars.*; * weapon equipped, ammo used, and status effects. * Each spawn group can have multiple sub-groups spawned in different areas of the map. */ -public class SpawnGroup implements JsonSerializable{ +public class SpawnGroup implements JsonSerializable, Cloneable{ public static final int never = Integer.MAX_VALUE; /** The unit type spawned */ @@ -157,6 +157,14 @@ public class SpawnGroup implements JsonSerializable{ '}'; } + public SpawnGroup copy(){ + try { + return (SpawnGroup)clone(); + }catch(CloneNotSupportedException how){ + throw new RuntimeException("If you see this, what did you even do?", how); + } + } + @Override public boolean equals(Object o){ if(this == o) return true; From ae0a70703b05ac27b7f03307f4082063c689de59 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 9 Sep 2021 22:25:08 -0400 Subject: [PATCH 27/61] Wave edit dialog cleanup --- core/src/mindustry/editor/WaveInfoDialog.java | 65 ++++++++++--------- core/src/mindustry/game/SpawnGroup.java | 2 +- 2 files changed, 36 insertions(+), 31 deletions(-) diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index 9f3dc474aa..d6588b3279 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -69,41 +69,46 @@ public class WaveInfoDialog extends BaseDialog{ addCloseButton(); - buttons.button("@waves.edit", () -> { + buttons.button("@waves.edit", Icon.pencil, () -> { BaseDialog dialog = new BaseDialog("@waves.edit"); dialog.addCloseButton(); dialog.setFillParent(false); - dialog.cont.defaults().size(210f, 64f); - dialog.cont.button("@waves.copy", () -> { - ui.showInfoFade("@waves.copied"); - Core.app.setClipboardText(maps.writeWaves(groups)); - dialog.hide(); - }).disabled(b -> groups == null); - dialog.cont.row(); - dialog.cont.button("@waves.load", () -> { - try{ - groups = maps.readWaves(Core.app.getClipboardText()); + dialog.cont.table(Tex.button, t -> { + var style = Styles.cleart; + t.defaults().size(210f, 58f); + + t.button("@waves.copy", Icon.copy, style, () -> { + ui.showInfoFade("@waves.copied"); + Core.app.setClipboardText(maps.writeWaves(groups)); + dialog.hide(); + }).disabled(b -> groups == null).marginLeft(12f).row(); + + t.button("@waves.load", Icon.download, style, () -> { + try{ + groups = maps.readWaves(Core.app.getClipboardText()); + buildGroups(); + }catch(Exception e){ + e.printStackTrace(); + ui.showErrorMessage("@waves.invalid"); + } + dialog.hide(); + }).marginLeft(12f).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty()).row(); + + t.button("@settings.reset", Icon.upload, style, () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> { + groups = JsonIO.copy(waves.get()); buildGroups(); - }catch(Exception e){ - e.printStackTrace(); - ui.showErrorMessage("@waves.invalid"); - } - dialog.hide(); - }).disabled(b -> Core.app.getClipboardText() == null || Core.app.getClipboardText().isEmpty()); - dialog.cont.row(); - dialog.cont.button("@settings.reset", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> { - groups = JsonIO.copy(waves.get()); - buildGroups(); - dialog.hide(); - })); - dialog.cont.row(); - dialog.cont.button("@clear", () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> { - groups.clear(); - buildGroups(); - dialog.hide(); - })); + dialog.hide(); + })).marginLeft(12f).row(); + + t.button("@clear", Icon.cancel, style, () -> ui.showConfirm("@confirm", "@settings.clear.confirm", () -> { + groups.clear(); + buildGroups(); + dialog.hide(); + })).marginLeft(12f); + }); + dialog.show(); - }).size(270f, 64f); + }).size(250f, 64f); buttons.defaults().width(60f); diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index 0c93a71820..c814f0a925 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -158,7 +158,7 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ } public SpawnGroup copy(){ - try { + try{ return (SpawnGroup)clone(); }catch(CloneNotSupportedException how){ throw new RuntimeException("If you see this, what did you even do?", how); From b2a634e5e71d10cf08b876ebc4709c8140b3f820 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 09:17:25 -0400 Subject: [PATCH 28/61] Untested/WIP naval campaign map --- core/assets/icons/icons.properties | 2 +- core/assets/maps/coastline.msav | Bin 0 -> 16630 bytes core/src/mindustry/content/SectorPresets.java | 15 ++++++++++++++- core/src/mindustry/content/TechTree.java | 12 ++++++++++-- 4 files changed, 25 insertions(+), 4 deletions(-) create mode 100644 core/assets/maps/coastline.msav diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 2b29514b5b..2bcf2d22de 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -1,6 +1,6 @@ 63743=spawn|block-spawn-ui 63742=deepwater|block-deepwater-ui -63741=water|block-water-ui +63741=water|block-shallow-water-ui 63740=tainted-water|block-tainted-water-ui 63739=darksand-tainted-water|block-darksand-tainted-water-ui 63738=sand-water|block-sand-water-ui diff --git a/core/assets/maps/coastline.msav b/core/assets/maps/coastline.msav new file mode 100644 index 0000000000000000000000000000000000000000..eacc6615ea2abd7b5266732c7a7a91e1a7b43961 GIT binary patch literal 16630 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 { - node(oxynoe, () -> { + node(retusa, Seq.with(new SectorComplete(windsweptIslands)), () -> { + node(oxynoe, Seq.with(new SectorComplete(coastline)), () -> { node(cyerce, () -> { node(aegires, () -> { node(navanax, () -> { @@ -533,6 +533,14 @@ public class TechTree implements ContentList{ ), () -> { }); + + node(coastline, Seq.with( + new SectorComplete(windsweptIslands), + new Research(navalFactory), + new Research(payloadConveyor) + ), () -> { + //TODO naval fortress + }); }); }); From 10c3f9e44a2dffc8d24035634e31032d65a3c2be Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 09:22:39 -0400 Subject: [PATCH 29/61] River noise target field --- core/assets/icons/icons.properties | 3 +-- core/assets/maps/coastline.msav | Bin 16630 -> 22176 bytes .../maps/filters/RiverNoiseFilter.java | 7 ++++--- 3 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index 2bcf2d22de..a7cba12f74 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -1,6 +1,6 @@ 63743=spawn|block-spawn-ui 63742=deepwater|block-deepwater-ui -63741=water|block-shallow-water-ui +63741=shallow-water|block-shallow-water-ui 63740=tainted-water|block-tainted-water-ui 63739=darksand-tainted-water|block-darksand-tainted-water-ui 63738=sand-water|block-sand-water-ui @@ -357,7 +357,6 @@ 63357=crux|team-crux 63358=derelict|team-derelict 63350=deep-water|block-deep-water-ui -63349=shallow-water|block-shallow-water-ui 63348=molten-slag|block-molten-slag-ui 63347=crater-stone|block-crater-stone-ui 63346=deep-tainted-water|block-deep-tainted-water-ui diff --git a/core/assets/maps/coastline.msav b/core/assets/maps/coastline.msav index eacc6615ea2abd7b5266732c7a7a91e1a7b43961..66c343f4d67d26d64b754e1c7c800f0d80250645 100644 GIT binary patch literal 22176 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 threshold2, f -> threshold2 = f, -1f, 1f), new SliderOption("octaves", () -> octaves, f -> octaves = f, 1f, 10f), new SliderOption("falloff", () -> falloff, f -> falloff = f, 0f, 1f), + new BlockOption("target", () -> target, b -> target = b, anyOptional), new BlockOption("block", () -> block, b -> block = b, wallsOnly), new BlockOption("floor", () -> floor, b -> floor = b, floorsOnly), new BlockOption("floor2", () -> floor2, b -> floor2 = b, floorsOnly) @@ -26,14 +27,14 @@ public class RiverNoiseFilter extends GenerateFilter{ @Override public char icon(){ - return Iconc.blockWater; + return Iconc.blockShallowWater; } @Override public void apply(GenerateInput in){ float noise = rnoise(in.x, in.y, (int)octaves, scl, falloff, 1f); - if(noise >= threshold){ + if(noise >= threshold && (target == Blocks.air || in.floor == target || in.block == target)){ in.floor = floor; if(in.block.solid){ From 7c028ffcb863f16986f04bc9fa2cc511492b6307 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 13:56:12 -0400 Subject: [PATCH 30/61] Experimental positional spawn support / WIP map --- core/assets/maps/coastline.msav | Bin 22176 -> 22312 bytes core/assets/maps/navalFortress.msav | Bin 0 -> 20998 bytes core/src/mindustry/ai/WaveSpawner.java | 22 ++++++++++----- core/src/mindustry/content/SectorPresets.java | 3 +- core/src/mindustry/editor/WaveInfoDialog.java | 26 +++++++++++++++++- core/src/mindustry/game/SpawnGroup.java | 10 ++++++- core/src/mindustry/maps/SectorDamage.java | 8 +++++- .../mindustry/maps/filters/BlendFilter.java | 4 +-- 8 files changed, 59 insertions(+), 14 deletions(-) create mode 100644 core/assets/maps/navalFortress.msav diff --git a/core/assets/maps/coastline.msav b/core/assets/maps/coastline.msav index 66c343f4d67d26d64b754e1c7c800f0d80250645..91e8c1db83f3f49b3e4ee4cfa85f61fae5d87762 100644 GIT binary patch literal 22312 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 T{@P;yZ#@0*;5Yt16XRNw;1yrg literal 22176 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%0DOholAK>X+KG_AKSlY`FW1*fSym= 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 literal 0 HcmV?d00001 diff --git a/core/src/mindustry/ai/WaveSpawner.java b/core/src/mindustry/ai/WaveSpawner.java index 276b86bb26..82d695fc83 100644 --- a/core/src/mindustry/ai/WaveSpawner.java +++ b/core/src/mindustry/ai/WaveSpawner.java @@ -56,7 +56,7 @@ public class WaveSpawner{ public void spawnEnemies(){ spawning = true; - eachGroundSpawn((spawnX, spawnY, doShockwave) -> { + eachGroundSpawn(-1, (spawnX, spawnY, doShockwave) -> { if(doShockwave){ doShockwave(spawnX, spawnY); } @@ -70,7 +70,7 @@ public class WaveSpawner{ if(group.type.flying){ float spread = margin / 1.5f; - eachFlyerSpawn((spawnX, spawnY) -> { + eachFlyerSpawn(group.spawn, (spawnX, spawnY) -> { for(int i = 0; i < spawned; i++){ Unit unit = group.createUnit(state.rules.waveTeam, state.wave - 1); unit.set(spawnX + Mathf.range(spread), spawnY + Mathf.range(spread)); @@ -80,7 +80,7 @@ public class WaveSpawner{ }else{ float spread = tilesize * 2; - eachGroundSpawn((spawnX, spawnY, doShockwave) -> { + eachGroundSpawn(group.spawn, (spawnX, spawnY, doShockwave) -> { for(int i = 0; i < spawned; i++){ Tmp.v1.rnd(spread); @@ -102,12 +102,14 @@ public class WaveSpawner{ } public void eachGroundSpawn(Intc2 cons){ - eachGroundSpawn((x, y, shock) -> cons.get(World.toTile(x), World.toTile(y))); + eachGroundSpawn(-1, (x, y, shock) -> cons.get(World.toTile(x), World.toTile(y))); } - private void eachGroundSpawn(SpawnConsumer cons){ + private void eachGroundSpawn(int filterPos, SpawnConsumer cons){ if(state.hasSpawns()){ for(Tile spawn : spawns){ + if(filterPos != -1 && filterPos != spawn.pos()) continue; + cons.accept(spawn.worldx(), spawn.worldy(), true); } } @@ -115,6 +117,8 @@ public class WaveSpawner{ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam) && !state.teams.playerCores().isEmpty()){ Building firstCore = state.teams.playerCores().first(); for(Building core : state.rules.waveTeam.cores()){ + if(filterPos != -1 && filterPos != core.pos()) continue; + Tmp.v1.set(firstCore).sub(core).limit(coreMargin + core.block.size * tilesize /2f * Mathf.sqrt2); boolean valid = false; @@ -147,8 +151,10 @@ public class WaveSpawner{ } } - private void eachFlyerSpawn(Floatc2 cons){ + private void eachFlyerSpawn(int filterPos, Floatc2 cons){ for(Tile tile : spawns){ + if(filterPos != -1 && filterPos != tile.pos()) continue; + float angle = Angles.angle(world.width() / 2f, world.height() / 2f, tile.x, tile.y); float trns = Math.max(world.width(), world.height()) * Mathf.sqrt2 * tilesize; float spawnX = Mathf.clamp(world.width() * tilesize / 2f + Angles.trnsx(angle, trns), -margin, world.width() * tilesize + margin); @@ -158,6 +164,8 @@ public class WaveSpawner{ if(state.rules.attackMode && state.teams.isActive(state.rules.waveTeam)){ for(Building core : state.rules.waveTeam.data().cores){ + if(filterPos != -1 && filterPos != core.pos()) continue; + cons.get(core.x, core.y); } } @@ -171,7 +179,7 @@ public class WaveSpawner{ public int countFlyerSpawns(){ tmpCount = 0; - eachFlyerSpawn((x, y) -> tmpCount ++); + eachFlyerSpawn(-1, (x, y) -> tmpCount ++); return tmpCount; } diff --git a/core/src/mindustry/content/SectorPresets.java b/core/src/mindustry/content/SectorPresets.java index b1f0796a29..7c86779dc9 100644 --- a/core/src/mindustry/content/SectorPresets.java +++ b/core/src/mindustry/content/SectorPresets.java @@ -70,9 +70,8 @@ public class SectorPresets implements ContentList{ difficulty = 5; }}; - //TODO - if(false) navalFortress = new SectorPreset("navalFortress", serpulo, 216){{ + //TODO AI or not? useAI = true; difficulty = 8; }}; diff --git a/core/src/mindustry/editor/WaveInfoDialog.java b/core/src/mindustry/editor/WaveInfoDialog.java index d6588b3279..10c4751bd7 100644 --- a/core/src/mindustry/editor/WaveInfoDialog.java +++ b/core/src/mindustry/editor/WaveInfoDialog.java @@ -3,6 +3,7 @@ package mindustry.editor; import arc.*; import arc.graphics.*; import arc.math.*; +import arc.math.geom.*; import arc.scene.event.*; import arc.scene.style.*; import arc.scene.ui.*; @@ -316,7 +317,30 @@ public class WaveInfoDialog extends BaseDialog{ t.check("@waves.guardian", b -> { group.effect = (b ? StatusEffects.boss : null); buildGroups(); - }).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f); + }).padTop(4).update(b -> b.setChecked(group.effect == StatusEffects.boss)).padBottom(8f).row(); + + //spawn positions are clunky and thus experimental for now + if(experimental){ + t.table(a -> { + a.add("spawn at "); + + a.field(group.spawn == -1 ? "" : Point2.x(group.spawn) + "", TextFieldFilter.digitsOnly, text -> { + if(Strings.canParsePositiveInt(text)){ + group.spawn = Point2.pack(Strings.parseInt(text), Point2.y(group.spawn)); + Log.info(group.spawn); + } + }).width(70f); + + a.add(","); + + a.field(group.spawn == -1 ? "" : Point2.y(group.spawn) + "", TextFieldFilter.digitsOnly, text -> { + if(Strings.canParsePositiveInt(text)){ + group.spawn = Point2.pack(Point2.x(group.spawn), Strings.parseInt(text)); + Log.info(group.spawn); + } + }).width(70f); + }).padBottom(8f).padTop(-8f).row(); + } } }).width(340f).pad(8); diff --git a/core/src/mindustry/game/SpawnGroup.java b/core/src/mindustry/game/SpawnGroup.java index c814f0a925..79bf5164eb 100644 --- a/core/src/mindustry/game/SpawnGroup.java +++ b/core/src/mindustry/game/SpawnGroup.java @@ -36,10 +36,12 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ public float unitScaling = never; /** Shield points that this unit has. */ public float shields = 0f; - /** How much shields get increased per wave. */ + /** How much shields get increased by per wave. */ public float shieldScaling = 0f; /** Amount of enemies spawned initially, with no scaling */ public int unitAmount = 1; + /** If not -1, the unit will only spawn in spawnpoints with these packed coordinates. */ + public int spawn = -1; /** Seq of payloads that this unit will spawn with. */ public @Nullable Seq payloads; /** Status effect applied to the spawned unit. Null to disable. */ @@ -55,6 +57,10 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ //serialization use only } + public boolean canSpawn(int position){ + return spawn == -1 || spawn == position; + } + /** @return amount of units spawned on a specific wave. */ public int getSpawned(int wave){ if(spacing == 0) spacing = 1; @@ -111,6 +117,7 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ if(shieldScaling != 0) json.writeValue("shieldScaling", shieldScaling); if(unitAmount != 1) json.writeValue("amount", unitAmount); if(effect != null) json.writeValue("effect", effect.name); + if(spawn != -1) json.writeValue("spawn", spawn); if(payloads != null && payloads.size > 0){ json.writeValue("payloads", payloads.map(u -> u.name).toArray(String.class)); } @@ -130,6 +137,7 @@ public class SpawnGroup implements JsonSerializable, Cloneable{ shields = data.getFloat("shields", 0); shieldScaling = data.getFloat("shieldScaling", 0); unitAmount = data.getInt("amount", 1); + spawn = data.getInt("spawn", -1); if(data.has("payloads")){ payloads = Seq.with(json.readValue(String[].class, data.get("payloads"))).map(s -> content.getByName(ContentType.unit, s)); } diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 2b1c9995e3..9fd2f0d247 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -321,14 +321,20 @@ public class SectorDamage{ var reg = new LinearRegression(); SpawnGroup bossGroup = null; Seq waveDps = new Seq<>(), waveHealth = new Seq<>(); + int groundSpawns = Math.max(spawner.countFlyerSpawns(), 1), airSpawns = Math.max(spawner.countGroundSpawns(), 1); for(int wave = state.wave; wave < state.wave + 10; wave ++){ float sumWaveDps = 0f, sumWaveHealth = 0f; for(SpawnGroup group : state.rules.spawns){ + //calculate the amount of spawn points used + //if there's a spawn position override, there is only one potential place they spawn + //assume that all overridden positions are valid, should always be true in properly designed campaign maps + int spawnCount = group.spawn != -1 ? 1 : group.type.flying ? airSpawns : groundSpawns; + float healthMult = 1f + Mathf.clamp(group.type.armor / 20f); StatusEffect effect = (group.effect == null ? StatusEffects.none : group.effect); - int spawned = group.getSpawned(wave); + int spawned = group.getSpawned(wave) * spawnCount; //save the boss group if(group.effect == StatusEffects.boss){ bossGroup = group; diff --git a/core/src/mindustry/maps/filters/BlendFilter.java b/core/src/mindustry/maps/filters/BlendFilter.java index 7f0d319df9..773459d75a 100644 --- a/core/src/mindustry/maps/filters/BlendFilter.java +++ b/core/src/mindustry/maps/filters/BlendFilter.java @@ -8,7 +8,7 @@ import static mindustry.maps.filters.FilterOption.*; public class BlendFilter extends GenerateFilter{ float radius = 2f; - Block block = Blocks.stone, floor = Blocks.ice, ignore = Blocks.air; + Block block = Blocks.sand, floor = Blocks.sandWater, ignore = Blocks.air; @Override public FilterOption[] options(){ @@ -16,7 +16,7 @@ public class BlendFilter extends GenerateFilter{ new SliderOption("radius", () -> radius, f -> radius = f, 1f, 10f), new BlockOption("block", () -> block, b -> block = b, anyOptional), new BlockOption("floor", () -> floor, b -> floor = b, anyOptional), - new BlockOption("ignore", () -> ignore, b -> ignore = b, floorsOptional) + new BlockOption("ignore", () -> ignore, b -> ignore = b, anyOptional) }; } From fc7f689ea4dbbd3b6072792b9dffdb8d4fedfaf9 Mon Sep 17 00:00:00 2001 From: buthed010203 Date: Fri, 10 Sep 2021 15:56:42 -0400 Subject: [PATCH 31/61] Named pathfinder thread (#5969) --- core/src/mindustry/ai/Pathfinder.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/ai/Pathfinder.java b/core/src/mindustry/ai/Pathfinder.java index 0fadcb970a..0d5a8af8d8 100644 --- a/core/src/mindustry/ai/Pathfinder.java +++ b/core/src/mindustry/ai/Pathfinder.java @@ -138,7 +138,7 @@ public class Pathfinder implements Runnable{ /** Starts or restarts the pathfinding thread. */ private void start(){ stop(); - thread = Threads.daemon(this); + thread = Threads.daemon("Pathfinder", this); } /** Stops the pathfinding thread. */ From 47d5be679dd8122a12ea67514976fac1083feadb Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 16:33:26 -0400 Subject: [PATCH 32/61] Map progress --- core/assets/maps/navalFortress.msav | Bin 20998 -> 27172 bytes 1 file changed, 0 insertions(+), 0 deletions(-) diff --git a/core/assets/maps/navalFortress.msav b/core/assets/maps/navalFortress.msav index 1be5ea6577c324cd323755ed44c5571fe4e1f8ea..2557da2a1905741f635638c296e367e649e3dea7 100644 GIT binary patch literal 27172 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�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%0DOholAK>X+KG_AKSlY`FW1*fSym= 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 From caa34c959e9d23068ac922e589257eb56fc8be55 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 17:07:06 -0400 Subject: [PATCH 33/61] More campaign map progress --- core/assets/bundles/bundle.properties | 2 ++ core/assets/maps/navalFortress.msav | Bin 27172 -> 27255 bytes core/assets/maps/planetaryTerminal.msav | Bin 29230 -> 29449 bytes core/src/mindustry/content/SectorPresets.java | 4 +--- core/src/mindustry/content/TechTree.java | 13 +++++++++++-- core/src/mindustry/game/Waves.java | 4 ++-- .../maps/planet/SerpuloPlanetGenerator.java | 2 +- 7 files changed, 17 insertions(+), 8 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index eb7d50aa88..165fca2f8b 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -631,6 +631,8 @@ sector.biomassFacility.name = Biomass Synthesis Facility sector.windsweptIslands.name = Windswept Islands sector.extractionOutpost.name = Extraction Outpost sector.planetaryTerminal.name = Planetary Launch Terminal +sector.coastline.name = Coastline +sector.navalFortress.name = Naval Fortress sector.groundZero.description = The optimal location to begin once more. Low enemy threat. Few resources.\nGather as much lead and copper as possible.\nMove on. sector.frozenForest.description = Even here, closer to mountains, the spores have spread. The frigid temperatures cannot contain them forever.\n\nBegin the venture into power. Build combustion generators. Learn to use menders. diff --git a/core/assets/maps/navalFortress.msav b/core/assets/maps/navalFortress.msav index 2557da2a1905741f635638c296e367e649e3dea7..6d41f2887bcdda2c15c6a316255ed0b98db5d9dc 100644 GIT binary patch delta 27215 zcmV)6K*+zO)B*R@0e^U$?Y()BomX}rcE9g^Z-4z>cfZ#Qy88hQJZuEfAV8uC5L~cv z9WFEEaDV~9A=&7D0Ge!cgS`;MOh)1oZKFw|*otK-QR1>jc4SpFTE>=?@kolJlE%?C zN@Y>mvf@l7aV2q8oGPbW`D=2|y=S@Sd*ADBaGAvwR5jkW+<)bF&OPVcbGP$7`{}b6 zj4^p*iWg1Olx{A~-Cke3(KXRgQ@S#NPFWT z<~G)^udJH<*?;AYH@dd)^||#m6Mx~0rg&rSrYp4dt)Kta-~ZNced{;B_3PjI`+xrK zpTGC5Z+z=_OnrW3d3|+dX{o#L;_aJV3t(eu$yBa&m#;1^t#?<~;^gud=9lKy)=sU> z&#l`hhv%=)EzfsPSs2G=4_{qcSy{D3tejd~Ub%Jn%74G!5ey4@_Tpy~4g}M2~b>f4+xnoYOuPjpu zcbfJ3+!8keTyx!@Gx;kUi%Sb8o;hZc8!HP|wl3R;w-y)HubbTQqeo5QdUx^K^>u%f zU)@;hu74$mzp&n&yRmla3rA0V;fsfl!GHIj`of|Wtz}Eu3*EJqjn(!}R#< zjT}ue#)9qp z<%LuC9?vNM7?(fWzx?~M%3pc=_VP-XYv?Wd-XpVI_`Mm0XO#K*u5GOASmrF3d7qS- zE`Me=tC$*b2qPBOJWkR=_Z+9nOicY^~LqM<;9H~ zrU*SHT;y#nb2m+KZEHB3~yd3|oJJ9BmJ%If00sjh9TUhB@xEiJ9wHh<-{ zo3`hjxw*1n>Q^Ag%>2rYo0icFw!^=@I%g~DM&|!Dxw%E#Av->q{QT15)vKo9tmrZP zy%&G)!{6ihJBz>f3hj?>ae)8!ELx!SV5J>#oaCrhmVzVqffT zTme3Xb5$_$#xg(kboeRbo?nytb0tYK|87cI@cEO(i>{~NbJhG(n`*qvDb z5wFMt+iEW7{L;o6u(yaEwW)>9lW$w@#qG<$HG(Dz{R=D0%4LCWer=5)y6Y#;oZIJ?ml&QT;1tXK+xgN z)nke`yH~DQuf$pcYeH8Smn?CPhu(~o;M$uKxbmi<4-jMsZa*c131(56t{Lkq@4k$fe z6YAi}b>K@gcyMj;+T8NG?L12BR`Z>j+7?)Lss_K7&nvIn{tt9%#d6w;YAVsfhkt`}t2bl@4S zuFq}QPH*8_S6w5PtgdXpZ`BHx_rGoG0ifh6^fA}0kvH`X zV1nFNZ&(qWagG0ZnN9}XSgi5@sLd8Mi)jei`I*nxw&!Urm3#3*uLeqzp>)c zUA;lCiWcv}#((0v8L+bK;k(cd;hu{TTuZ(_$Y>e`B}$=gaZ6o1^1bdz?icIUiAF5a+x_B!7W z25kWbb;+vna(Cl~wLtUuplT)0vH)+qHNvFMF_`JTy}s&8tIUJhe9I$USzJ=DoJqD$ z!2;MKdwmt$tvS~qHTPh7V}7Z-v1amb&Dmm18KyPnz(kqS#`4n29H?DxVPnO5dwvjX zW!Pq%zkhC$>vM}s=zJEIU|?)h&aGO#1uMC#PwmRPH88;(~~uJ^fV`!FT-?YHIWaw98>)rL$tUR?<+h159H&?8;XNAb$t#7QZcGs&2Hfy2lcimNu-Z z^nV(&WJjIzw`V|pt;jE!CO+7(V_N3$SjNK{@aZSAUihXnm8CgrDSW9D;2p18W3$|K zCTebezPp6VSG-|6S?e=dF}$_7ZpE;1V{v|U1(-DNd;Z4K$~CJ;!Gr6!p=Xr`)*rh8 zRohaR_~r^&tpT6c8eteaS@J-kXY|9Wn}6uBn&kRbe}jrr_jjZ?iAhY}`|*kM-E&qw zt%{NJkvAhIfuSXgFjklC=+2a`S}*nU?rLNC#>!i8W%Gg$e#=Tt-a6_Fw}A;(R_&|8 z+MM+oY%5v*%!8A$Xm4uX9f4f-u3%YcyDRIRQMc$X=K-oI`N5@qpTKa^DjW2T_J6kM zY>vIKJ>=@@3Zy83(__`yHkR$az>~4wPr)33k;AoX&hv$lN$D!jzpl-9ZvyrC)$Zc8 zWuWz~Ia2^(hGEK^8*}iRywzQrgHh?~ThioDB1<-O)!~)pMO~~CF?zG+_82MsbtlfS3lOV!mrnzwj)~eAufsGlU(9H9Vi( zSiiZl=DG(f6-(ebrRLfzSARE_ugxue3WkmqkS`1OmTir)6~D*b1eui@*9{&$dg7#Y zpu5mo~zc>N6_rujV7oXF`yCf(1g-g){+WGy7_J--&Sktk2v<#bcADRQ#Wu73*Fxa? z;cDDJvu_`SbX~amMR=BD82jL=0MAN%m9SiOS=t?kewOp*Ab)R%b5uPvmG?C*2TsBq zU(P~ahw3vv2bH(SUyY-@L;=!qM37aoYx5G99CMSo9OpCYh<(WoWgf$NR9wpY21 znlF!p!8L^w{xcpQ)iKR7nDZE+W#&&QXl35o@OPH z;*aW5_Ojx*Ql_Akh!u8DTmA=GVWr-Cba`#hVtU(#@_%wHAg;Uub7+W5KCpGkQ-R{R zRweP-nNdf=CS!=zbdqgnoWZ{%+`duJZsVvLd$^91x{d<(Law$6$a_qeJj0@wD%nwf zh)Z^z;T1M518`Mj69pg57LF@TW?u4Z&O1deWZav8bd|DS!=Om?mMHyYxQ(V-GT6R-K zC4bub6gXX;(^Xlc8f?vu!_^5E$EPwX0xNZ);MIyuvvdS`T~X1CRGZB(N%7r&sL(|7 z@C00aMl%O|p9_gcs+w%4mdS(#X$Mynv0ffxikz$Ae5p%XXM_<0tXnzVPv_XkM7p+w z$tp8h<4jiU&8xG2P3#BHz}3r|rw##11b-n&`Ax1OLtR^dAjb$w-U7ElUYe*2W$!WC zt4HAK6bF7y+Uk43{${7s+^b zP-qBb-q))@7JYebFL0idEw;ddzQj6M@@+Ga~l9Y#*0FL3+1w{7kX62?5? zHIG`l2;~(SbKX-#SHrr4eAV-m_(YRtqO<11OulN7rR{Vxsc^GdQW z*1SlKqX;-F^$9PIO)!FlG#5y*m}WI3D{<2rervck@n~h(ES_aC1M^)_@_$U=`?S5Y zeX+`z3yklnz>d?ik)Sy=Be@R(FWO- z_Gq)e;e=Hom2NCyIdF3slZ><)I6J~!Dp|Usy0^uSe=~LzsX5tTj<+=Ch%w8U2}fvz zufUjv4v|>*){X5ac)U8qC4U=MU76Aw@D3H>i{T3XdkKJ(jqRYNX>b8<1awq0!U2yN zI1W{*X&tn)taN$Kn*`RD8o&wlfNqM87n<>)w>NoBOwIQniWt`baW63!rJ?e^XKLa+ zT+9@;ypoXlcQDTLRm>z5_)7f5K~7iXXZx8Ekv78-_t-g>dyytb)_;&E!LllGvfgxr>RJ-U_3CMthq%HhqTsnT8i1#qp#c$LkvD zN$nzHUqNt73@FclQh#v8^ANak&^**Ji*nZcaW@6L!oX3Ph=dB0FvL>=DH0sVWp*$% zsChy=Pj!Clbm3{u@w_IX&UOP$mD1!C2~|ykVY6B8PeR)ZO@O|veSs&mFFM3MnDiA% zATKELfpZrzn-YdmU`50}K%|`r%pxYQeVRd@J`rMyEKLc^OMi+O8T7Z9m=eFuYhrS& zy0Ug6Q)>}Ft7z*JdAEm1NSFla$|G)%2X%K>fDC;JX{_mpyo}R;t&w9a^kpnWck21BS47;E-NPDEuGW$N`MQ;ON`lYa}ToQL=4yQ#Z69C zwF;qSZNgAr#D^3%;&H_}t&&bkie#=YOY<0wK3uILxPRz4Sh$I|tjZTP?4=E}B9?uB zB;H6HoAzwr=8?q|%%?T~1Tz$WnH`(U;^!D9p~xiUn1ooH3>aZt!ddYd_LkZ(Cqv~q z5vVdn`M?qBB}N!l_AiK-vL+^BVvy*zCnliC1QqpCB!kC9H_8AvO4TJo@ViJoP^n)%d&yNXoWqi^`oFc)){1(*zRYU9MT;3`!Y_Jm8qil zM#!D1u?jSF7+VN*p9UPlb{xVtVOp4g ziz|6XlNz(KLjjjVS64Z053yks%#g#+8BH>uOMhMj2y>i)xfq})M`?ill8SaE&*+Y- z#HJK(18t0W5+PxSUf?2G#KfvK#5B|*;6(;5^G!087J-wIdX+uFLGRFac--AV0%Zs< z4k^yU_8~!<5k+8}i=sh;cnXF}xqy=)L{^o_0)=oL#)T*??L=0AF<02YKL;;rOjeD1 zXMZ7~9JmX}-OH&VZE9>EqNn!2UT8X)hP;%c&MN?3)J4hqAg(l!Vf++Rbc*>r$P$}l zfs<~r%p?@JjvSAB#KRi{ka?ejKo-f2T!>i4a}2Vkp*_#dm<25fR9B!WA$%a{!P+o! zIUP(=USf~?lHrDT&9z%F!c%Jl9y8Hf)A*##rE80rlR56>(B2a# z4PVK0hittnGt!8W4r_eaU$*cWdO^g$2Q;d)j4Ge*5~d;VZb&zc&jyTg?TcQxIye*a zhVN`dsGCSanL)~)qP%8F9Q26NSAXo$d}*U)*c?HFO;CY(ATpT+!||ZXm7|ojv0jw% zJv}Yscsi&ZzM{q=U5qS26g<(ymzEb`vhrhEXU_4JIDrv^#7hYl=uWz>w}LYfSkSmV23r z-s#`AaXmT5cBtm#2Hp290WxrQq>)E!Uos3WJFTkx4} z;>)u;{fZuk;<$`@je^D}yCMu<;o6gkMH?5x9@R*3_%+?5TR6t1xuwBPF}sRB7uY81 zlVx5&{QH_8|xf`Z<>Mc%)nRnSf<0)a;Q?%q;X&}q>etQ5^lzb4VfcrA2T}(i<}gQnQJ-U z=ACdZQWkP^ffa3s>LP%u{zV6t#R$eBu5BlaS*+DQR3@^b0z+md#5pdq#f;gO$c7iU z-kmxRv7fz`d%U;Q?0=aEO*EDwi;rNzfeB$Lc#R?~j^5V-0!h5x9K0+ZxZ3tX;`_YM z(B@Ufc4#OD8Dx|J5-k_?h$XMJ)NUmW(#h@!<4`*N8E~L*gj99~H1TEdfH7|iN zq?_VgAhFV&5PzVY2TskHXJHjU6$W&Xi{j;)i!!*)dt=$;-6zy2t+e8_1Bx!m*nTQd zt6rA4U5+zc^4@+}YJr>5#2LAWv5fS?5_v2%o^G=#jWrf0CC;(Aiw7ZlSm1ae$nQF> zvb*4P<^}J$HN)irL128N&|1utFHcFQtM{O{2Q((ed4G^z1bH@*1FSAD`&)$|G=i#f znI*>EpH%rMSDy3zbZ=8cMA1dr(b!(*H1C?t~x9QAn zj}v=e(Wr)fQB63dMwOoph7{5>QN3;tWWx2za({)zaf}-v&u?WS-d#2IFi23L-EE`J zT;r?M8h@YcPLMgqBFmNRg3Gfb=NK{USwiy+RR)yW(NpdR=sI7e`aGT^^P1uS71#je zwMDP9@o<1fSg4(_;M;p=dN);8*N3Q(*86*2(H9Cw2O4Z$<#2v=Co%Yk>J z^2XlhQqU%RZ3ImkPoNc8ka8qk7i7*n3z};@w|^DM^$RslhX+D?c_m)oq$j!w^HL<^ zXEdN91Ik)-l*Y?3pm7Z-b*8ZBRilGVYcinWu`h!5217fop_M!nN!eo$P4!0!4-48} zxLUm0+yN^<=?qJ@xJSF#S6*TSkLV<_+9!)^=vlV?WN}(y-2r67kflXS?3wrMc0cjpV;Ksij%$IOa0&%0jjhw1?kM}&N zE$duwk&((sv&iWTcW7_xdSxSl3_Y6KsiKW!T2rbl^ydgj#l?N9;^UdyFtea(XJ}bh5L$?yuV1vC!=hx6I}giGtNNMSqd^ zWN4dJo~=~E&jy$xX_=TY;{-_)chk#OOp`%J!<#A^vEUBpcIZwIGesuw;l?ptQB#y> zic%8RG_qt$6veLWi8gEpn2acFG;nDR#zWH-DOJ?+VWqwa`%)%wIiNj1MYt2shpZFbCuF% z3BHKUzbsVcwf@HJ#^bpY(olzVQsWbLCK?}{*fftD+Px?T=pt@&G3F_xQGYOyAk4B` zuB3&=utz3Ctvu^$iP0As{lmIFarpYw~_(3% z4ct=RlScNWk{%_S!X4ALeLqb1tEef&=PK7$V$Z0^ARlEj66@9%1WtyA8L6iI zTb=!baW+tLbRlNiI$nlInjZAFWHZ_fD~Y46p=nEe4l#mlkP?TP#9IX9gsyG6Uu|+6 zX*h$dVJ@%1wY9l6e=+MW4BV+;f<%eWux4jUXofSW9P)NZ8Owd_!H2V<%8(sr7&yG9 z7du&9n%X>w1KHFt@}6PsP-hbE!S=IT7A_?#56@wFknL4TH$^K0%K&>phIKm5;7h_H zHNcIMa=fH-FpTBlU?!^x?W|ZL3vMzmAU4dsm|z7P@@^w_f7W$2Ujiew&)l)(J`F=Q ztnFczv^;GcoLL%@w`PY14f<^$Y#|sE(L8Ey>+UAd*3=3 z4yMX3gtK8gnVn(;1%Zr!X5qy#J!zNPZ6mQATpz!S`I3dI$b2qycf8lnw9yLzxr_BO z4nPuz9KNH>D`~ulD?iFZ6v@$GxUTYP&qT8Ff;1Pnf8vC+!$@TXu%3ZbmP}_nMZ`Z@ zX+6M0Ji{6#=l6@=@O03ij50n9jY$<%*mk0ZO2Du-dO?C^h}B@2vxy@&;~Pb03<>E@ zZ*7~{mf|Z{JxiK6ju(8gxF(0VN*PFH8dvsNCfun{Fi)KscI&IMFI>(%3cg`)3Od+J zj&QFle`_7#Q9tTAWfOG5&~Rd*jk_FWwBrPG2SY0}G}%im2UlDjJD8JldZ6iv>0oe; z79*`_q;dpY@VQ`ACAO1ensq6BhJBTojk!$1p3$J8GNhXtIi>idBN?{gXe;^BUYNA56l?i5!zIOp*hR|`*I0HS3 zEwO!ug{GxR5ZRSs8SsouNT zj8rm!i*{#W-pdjpQ;8#<*@SN&*Cyd<2Q*R%CQ|VIRvQ~dkfJw29#pj-QrR9XQx>>t zsgOn*sYFYbPPoWOWm91a>2%u2biksMf0I>XKc}Fv$f-A(gO|yEoa`cNk?#k5l-(ZZ z9q!URl`h(;Q1y=KsB>7GDQ{jCMLG6vWVj^9ZL=tXD*X;l=p`@9kKjZzFcAOcI9nmh_wbd;f6LDNg{+{yM$+HJ9xf36&ZAde@&1~ zIZg&*(GF+wWz;5HF=d`hXdBfmu4d3S#k5t~0HhXFi&_#zqi{q;w3Q8p47hAq{_+_F zhR;Mw+IVaoPYS5suc%2KX9CAGpDP@SLTIaRO6KxD3Kv`8w$k@ zC)87#8xs62z7s}-;U8wOs6wVNv_1Mu5{S;Q55n8oF5^BABBq)l7CG&R2y@~fP*g8V zA}t_O{a7NNN62C_;X_P}oVdwpJ1$;x(l5+V7Kf_DgG;e`-8X-44wXEhc=Q<@61rUazOg5<(}#{C$P+Jsd$e>8*|WaqBQl&7{% zRnsScVOCmtVL&mzY*i>Z7+nZ8eU{e|jVVgUf7LT^Kq&&4*tH{6y*?W*Smnd_o zEwo`oYZWQZFgIk6h=k-Uvz!{ugSO^DA?>4Qb^h&e4qlEwiw0Dvq#H+*Tizx`v7w<`f5aZG?2F88N)bk3q=|qO zMK$iWvnU#5ibN9ge3dY5`9Knhz%moFU&~}6Lnc!MiqQ&Zp2*V34l76C-AtCmqm7xi zVWut4pe^k8$t8)Iwn1(;mu-~0j=Qv5kuBjR{@?1 z*Xo4J&9u3NO}7Fwu{CfxkSBwwTtDEh0q)@jEo1;sDSImTY6zSEWhE-gwatd>enSCr6*DB1-ewf8TWii_UAM?P)f5?y~kNX~i24X1^@`grtDStc+ zy+Iv|Bf)LPb9-3o>!4&geUZ7`hV@aBwz`A1w-Z zr?xrz4+)4{MUe%Hq6R5vzIkwQDbn8X0E_o726>7>req`MLDDV|SMOoA&xN4mHd|3* zogkIinlgQddC7vLPE#6YtYM^0&CV239HG&+e;HTrK`uE7T;eu%`DF$v^W)(ZgMypa z9eutZ$YEBsM&PhWDIG5dev6UQnQ`{{C9+@~C`lWI2A9CvJqHl$8l?0e0JG4KY;$EzW=z9*S+_CRx{|p4HIm%r*J?hD4ERc!#u&tG*=$nPaJwEdb&EPU$~T zlP`+_mBrH%6T_#M{p8f(rf~BNS9Y4sZdv^o?ha{LYitTv;(o;3 zr8XG&IaVeS0o=4l7Sl!l#9>VHTPxHnc{g$A}nhTpiA_Nvi~mCGS;+xj9XdNK=X;Jd4sxf03Li z)O}t+k<-;jJ-#L`yC2pXDtSvhri+<2*+w$yjkKajVlJmB5+xRjV%%x6 zPzLab#V57kQPaTX3vVTEnbZk@riNSAq9W6B*lYBf*C%{4HnG>;&!*I{f80+894C1R zCnVdR_r@^qYplsK#VVg1k%O|S!*@;XMwNBT4D{o@7}^SxwFp-o=KVAq9vq}29l@Mn zh5L_578?0tb)tnPwI6+iLCR^dEV*y6J>{?`&O`>m)r16hiewMFV7oO5v1*T(BF@`j zJ0x>PvfE3h^J7iIqy{dNe@-b!M1aTK|3*Q>6Yvh3|2>`&z0=Go;6rS9#Gv55QZlM3 zq!H60R#YZtIG&9ExM0lPVhZU#ZUA`UcfyRYsmD)4bkM;~;lt@H!WU)Wi!{CwjnB=| z8s?-}0cT5I<}TGK;!#5@SS{a1w7%ca_@p+8+9XSUQ-%iaSrMN^e-~sgScS1vGqA{P z?I5F)XidK332Ix9b+Rbz~yo#U&RyM!Ej8IHxWO>&p%u*0ID$<|ou<99N& znAjxES2_iFN4ZTWJlYm`su zVY7JpLyX{z*FhS{%4BdBf;=O@)u3r?GUr6&xuWd>5?`RfSWYvRMld`i*Dv)I0tsN5 zFct}b*E0BZBtKV`n(39Tou6Q$aVV`&VO*hJREB%C)Q27te@2yKR0(s)jhW>0Z7Ec^ zt%6Wh0zQ-c6&aPA+St#IYfhsI2Nwzzy5|a2gHc5qRlz$kgz9PUACQ9~DC%&`z|%Z(!p7XM58+9RZ?LAPwRrjwiabKro&Tp z3RTQ<<-UTJe`l!^R8G7<$5*&Hvdu=Y3Blt#_}S`0U{5=KR^tMO$ZGqNFUVj8@wG!} z5{5tGW-K$bf;ZC2guluiWRd~R9q&A;pwS`;L4zCYrhz?|Kv2hgTSzs^hU-NR8-Y#)6{f>fI9x*ATaxAQ;t;qKs;3x1>L5(S z?a?Cg14c+UVFH#ABL>(+O7siC;>6+&#^Qpy-2+z-vx+AfSa|N{0#3=(+LO^jW4N!a z5j!cMMZ0GbdI?^*!)-8?WBd4~o~rBM&|`wB}F{tMUSu?U<3oKjS{Rk^78DYNsSEU6U(w^Vn{<9Ww;Ku45KqbqmehB?<@Eev#wRDF@8z*B z4&2H0i#1%C$trpTYHrCPb4CsTv~Wr25aV<0>rS>GW%PI&OHFO0 z0w7DAKwN>Qi2#{Vk~l088Rk9;kC71xIV}e%66AaD2blypSmTyG4{L`?!T~n8-DC(L zydO%7Em0)PNh!?3UYeT7*n&n{^Wz0Y$3fr!j)ysRW?*h>q($cQpav=1zr$_&G|;Jg z!${5Jlup*g^E`h(m%SPy=ml-L1h|BMXlvk3N+tuMJK+Y~h8ByM48=>*Z-vVe^vua$ zok{aX`v@5mH-EfCw3@Dp%3{wyDnpJI_0-cNDK5jVGN&8emLj0qjo9wUr7Vax@_ zjCO-4lGXLH#=KXL?gXj0x+y8aDG=GamD>N@i?qU$UFLu8&Y{AOYc+8u-(Bqvx@e*; zwbmi05JhM@nhs~f+T35tH@z`zjB*3=fg7OKV&oVF&tB4u1IbV&XuM9yag5$d{#C`B zK9L+{hUKfPshQpsZFx%T%lcZ^#5W151$}+-8oo_5Nf&vSY?0l3lL@HMMZtfD~na}|?jD|tV;O$}c zb57++b}!|O7{)ZAF^TL)l0k^k=w$^#`i0O}nL*3dmyQ|zOd`Cv`BPkK9OqdpqQf!F zng9K)6&SpXP?ZCYQ%{%rd~}1UlrM!D#$45Z^h$iGBU*+=81oooE^E2p$C&YBp5tir z!^u`^imGO8E=Z?{5w@3jP$S=5lPCo}r`bAs&oQ}l_h_AN>82<$S@MO2yI2REXF19O zS7V_OVkDGrcyy3p6nJDP0iZ;hQe!ZQIUsO%>6UTjHMMr9qKD*ov?#G6q3V5P{ zN2~^+=O%8v+Sy;%&{A}uH1(3;KAk*&t4+RJgu#IgA&^{iLnrAxNe<&HUsVsEy{)!4A0J~VY9#$ zxe~+ZT=rRp8)>+ez)FpWLF`6ZI_}U0*%bQ%qSczjjoY9rb`8NPg0i~1> zPG(@nJ%)5EypJU*|+G`dTySF2o0*@KEoC=WOm$=c8NRUnB4NZca zKpAEdWCz6EobEwxiXF`CoW?BQo5-gJ#sZuUQ{`Axuw0uDVg2-qaKUYG)b6R{P2CS>R#j=Lq za3e*0nK?eGeR(-S7W?wr91^0VH&%AM2Bbk^ObP0;WM28OwiW_c_98ae`rwpk2NS=< zaNF9AmjG_!Q4|7?qQlWFK04mCWWpT^OaXOXhqWXQ`QoYGLADmI4|QYW&oHSw*(uKo zza$`sSx$5Plb|*i8b3fXU0I=7mteu%eaa^82MtH%eV{eD4>;|U(KaW4wKTp7#^?5A z-J=a&UZbjMUZqf_mN=XI;(=g1qY#{71QFkM0#Q+Zd&0&@20B7&6rfW0c4!U_vy4BW z`~4Bkmq|v2TZ~k{pW1OQ(j+@W3d}39?Wut1F5QEHd2Qmxv4puX$vw`!zW63O3H!N9 zIqzcFmZSiM#)y_aaDBgj6Mkw8KdaqB?Qz*ovdxJYUtZ(Gz)57U3e38lTI3G|UcKse z{Ggg(RZFMF|OV zC8ru4$l(lVvf_z<5rNuXAufeq-d429{tfr`p$w3Yn5Tm_lA;te9CVSD551da&v7$} z`(_w(lkHkxq&i55Uy3@Z$DE4{GPT&A0$F1!v!J>59p%1T0EJ8Js$Z2&`1fnzZ)5

%C7K^XIhTiM{7b9mXU#K*9**7=>(tb{`Oy<=d9#K}}RhG6A|Ihi?V9XyVrU`bh~~>V?keRIT{!e@qVT6sxomqiD)*J% zA}dK#cN3|PZpVyeMq_z|`$37@o#XDk#$r3^U7;p3k(x}-H@a{0mNX!=TuK~M(DE!k zDK zol_6Pgms|F6lRC2&YCCF%x;dcq}64J#msGVoz>8s=H(e$p655BKrEDLP6a(oK|96G zgV7~_n&^Pbq_La1a}I%v?{hy(JMJo0ymHf75{pnim?wZ58qh-;&;uIKUGA2hF^DVZ&n7%6^spo!lZ6_8E6A^vm^_eo6C?9xQx|WJVGn_ zE?Nx=g_AiAQYOIUbdoF7ZP%`Qlh)*Y(u8z#Cd%IA)R0^J*o0fZ;`5TP_h>*b0uOe^ z$wvs23=KHT?#CD#bJ@rz(TQB#3Q>}OF&>RcQEvAv#@Z0{1YAyl$_&usx}RcohRNdN`MhL50OPyo*ShcaFSfu*Eq4^J_R+D4n+)R zj3(s#>KR5a6JQw&YSH=!{XeZL^+TbN^jk;=|Ti8qG>Z8b;=x9LjfDx2|?N`^!34iHGFip;tW zQzS>#dcJ?8bmk2%w5SmnjiAWm3R&8c?(A@puWY%S8p?nuP1??4WzGSk-cvDKn=NM3b*~1`b!gW~# z3`oNLq;}~^7{Y|RuIF3{x^1y9Z7dJhIjKR*%0`p$BfL3+Av6esSndHm# z6>n`jpyDJd5nI;SYk;bM*I^!DF`MSLTnRd~Hk(o@Pg$e_Yon`IqI(KoioU-j-eV}O z4ql1Lkf8Olz$jC|*O(jm^i`AXvtS{oQd}ndavNRM0%FFIbz*!|``ZPYE6AYF`ti_xlambS z!m2tXc66QVX!ts4v^d9}uf%6fO_!HgltuL9C`1&vRvi={qp2(htwmz7z*qa(WqM6x z5u!&Ji?caHzRk%$jkiY7;@Yr%n;1g4Dq|LZt&jyRw>*%r{Tt+gj*E9=bOXq6ILCIp#SL2Ybx_YPL9iU4)2wBW z^T6a9i(b~sMT7a0XTG=y_ih$83@Fe+8#c_0EoooRITN#db&kF8%@MezRl~YpX9TfE zV0bVpi!|~vHrY_u(tz$`rnc93YNLpM+elhV{8;SO6pWnrpU2tC zH}NE^GeHmcgCUXPc;V)<1l*`-K(ZGC9UE0S25s)(a=(0!`Cjfs9@H>WAN4Bf%4P0h zkP*nf2SJb;W#OC*wTDA+G!SLdWU(dpWH2YEQ90&Jaz`Ko;|6P#1XIduiIs7!W0S1U z2sGLLE!$;(9f3zY`5iDk@94^?(5wD(BS{w3u5}py8U0f+oT*0c2!TaO9hjl)c1WMtDYtntR3z zb%%w&gELgFX`f7c=50SYdV#+SbwSQS$~m+g(;@DlOs=#tf9R07Gj5xoELh5{+7V4r zo;$;sc`r&L<8GM{cZEI`xJ=^US~}{U5xw&zK*9w%?wDuY$93X9EhFmZc2{DQ3{u2| zy+ip@XDW`IL?sj|XPC-8T+!2dl#pXniqj_+eZ%*XywKi6AQLM*~b{>N^7% z;vE~0_V2dCe-U3v(-ubaBR3#*h9lBc?&fwAD#aK{hvC|2z_*dicGHU@lQrmVm?8$L zqz?!unglmk*{ewi;HVP^9e=)a*oQB5Wu!_ZO+~`E9YM#xB znb0I0;?_@*5PlM`4W;zXPRHDnbNA64WhsMy!uHgs$;pr8Xya9vH>a4hE_JC zjCo!)bqq5HD^ zrlbPy);$(--X$br#AKybZVkHui6%z28HBS!sPvEsd&@Uhd^8(dt}ccGlV2wz$dU)KP&^e>JrUDtp#-Sn9@EQH}LCV$Gt=6zEebE#uAAVFEoLGD;; zJU$l~vNbyuICDY+axrDg%$EV??kZ1ckWrDWLag~enB%a;gN%Ut5GmJCb}H%^zz%m*hMM3#7j$s(oYT2 zQ*hCDY;w2@1vh4v?9ePu%^$d3e;~L;hRnz)q;o3nVh9Z|KDR`Ii<9ENwDsaC^>4C! zEYJ1I&Mrsv6muhCJ(8}Y%76r#+bQ9oJ<1j-(L}$hLCTrdVeWRq5FKqajO7eKLmE(x zVLZ=GA)zdtfXwmC1g`HZPex7_M}ZsPq;`L5;Y& zD1;FjB*6fF_azf1zly*fw!KTRxO4+5R>^D=|e4R>__HJquUET;&h38(;$9gj8Z& zrs9I3U))>KVFvUZS7dxeB<+Kmz#^yH#d)Q?QEus@+O)WI?vp$}f6XO_d?pXdDe)s* zN}I3BT%KWi-HEin!L48QeD2_w{UNS*gpER(Tks5*>=^qqEP8Gw^I@*7#kD!vZF1h9 z_nJpJPB0IoBbD$xMJ`3Clu}&1d$|-Dr5Y|JVFVKMaYWPM`0}&N4fmmkSuJo9uS(W` zWn=UR^Ilc~WJ>-We_ir%rpT3d9Io8v^<6rL(t=PcA#!>rQw7;?a z&Dr0){r!&pd(vJX3*P1JZ-Vch2;N2Zw}8KO{Dm|Rr1C==5Y+*^57U$|-$;=El)b*s z{_YN*ov_#UyCY=2tXxnQygP}{;9bN1=In1ALpc%&PsZ1n*AU z--`XM2G1U|f4_+9AU7pSS5QV_U-gFB{`%g7?tI&)Me-_VcE@sm*8ZNx`>z<-EjnxS9I+0^tocO)f9`>AmoCZ!;QE^emc9J**8=`Q zI{<#ypde4){^RbTQJGcQ~NC^66j2bin8HNPmKKo-h!u!pqXDL3vNQ9(mTv zi!m3lz34sg=_%)P`S-xT`!e2-*k9o6%l7|!@qG^U0N#(;-{S^8MloyUSigt*cerwU z-$Oe;e`dg`gmUHmEB5yp14e4r&5*nnJb&7NF`P9A3{0=iTD?7D9ZS)j2i=U;tZj4s zzJT=&VY&mD4vYr0;}J}kV0#W>yG){d#ZI!a(-%;OAm4;BPPf8zSFoK2jJE^OF2lw+ z98m5lOn=qUd&I1vTvc7UUJjxl-8K7r7}EhCf9t3}pThJxl#4~zYQCO>Hr+bn7)1Gc z(f*e0?_2o(#~h!$oP^KccV&2c0`EVI`8VwEUH19ANGsI&cJS=m_WBTB|IhaNZhQTn zz5bsNKa~4d!Sz2w`r-O7k#{Gs?x%uh_d6PoSiSUlC>_Y`c`W~^KQ4&2(KvqAU0WWp ze{O`w18GK$acy08dIY-a%K>@)=P2(ZP6v)S+RONxIGgRufiy5K7+{@gfByyY81%o6b|t~I6Hc!EFMLSi56y4e zTl#~M%d9Jl@|IA?$Bc1(#whX%uzVBqe?>O+qd)PEc_)fo8NQ?gD2*h|2c5)wstS$* z&!r?NiSnLA>h8ikIcLrNZxvhWJE(C$*#T#*<@r8D-N4@#KJTJrH!$BYKEI064s{Nt zo`vbU?!7Ow8Km3n8I^Yk`SBpq5uxU$(*O-;jqgokhrz!)jQP)*BiLg}zBi5Ae{#Xs zJMsEv>Y7@UdiqL`r)b1OiCkL$ZZ(j$*!Z3^oo3C5*HXlH1$?)T>5Go<#{3%6@sH3_ z6j9@T)%affzd|bw7V4{kH7TNGe$9|)0pljmFX`chZ!tbgTph;zI_3kK|GK@dVf#|r zvJo%IAkHe%_}5Sy29dTLVvPA7f3WsXpCFxJJ$?o2g6sd#i1!tyO_2UyN!632@{F^b z8|;aV`Gp`)9%=dau?+_>PZYEv^hEzzMxKAqNRO43=RZX{$fJdSUqb%Zf;>Ah?J%bK zA*4fkF7QNQ)aSjwA3{1}lyk^;BIA98b#3+@^0(~o6t?RqrUQNcqSIIZe|`tH&j?}# zz4~{Y-GDNIUQg=?<{u2+L;aH|Tl9Vi<$l6=4`BqYW`w+H1vplN@+0K`FxopB0RZlw z!!!x%!K(2+I(d#|Y`+BQCo5e+S(!k6DWfdJSVj%ouMm_$y`jP10?K#|=>c!&r-HHw z4|%8t?L>@xO;9(&vUj46f3%&f$!I7+dlVz?ICw{Sr?EVctuMRwp!Ys+WW*V20 zGwb@qv#2L^GmARp-`_B^t~Wn##G4P_zhS^5f(akbZ|YAB>!RCye{5bi-pe&;U!O!A zKY`_d_t!B7`ve%Bc=-b_59IDT^9p3wxDnJ)P|uHIx@(v&Z@icJJj(fx7$3ysDz=lC zRsSC9f8Tg-xQp#wHr`&pfO7v{@V;iecMNpAj5ZST?+D&Ekd9Z4?<3wvIwVBfbBK+>%GB6<83;?;}X96ym|-Av`1V!frmY9e=iz8I@!SV@Ekn9 z&miC4#^<+C4nB=IUNh2%jv)TqnD+%t^D4>(=ur#Pyd9(&f5mc&*d}%3`zlDY8`F$n znhK_=8t>QK3etdGpFLddp}_A^pP!Y>Iz>72g+A?`ed& zA9dndkPhybf9>@dq#0y#AEvvGdR0Q5T(#Gq2;PGXmav=_(hVc)y(l9$uz$#U4{~tR zh>tVk?&bZc5&y7+HWO^Yvj*lOefw{q4TJa7XiF;i>`ajEEh9eTH0m_@EvJKYGsth4 zk%7KzcaS!RW$r=yxEJl!Q^wo<-NxI@0@4I&cVk*8e;;(^X|%Vyjkm)z+jkbzHZd*e z;U|&iH&6~C-8oD*g!O|RI}zy7F2q1S_c_Enh;3FyS&5Czc8wrUt{RyY8N~9zE*-;k zxgb60JJ`ObgY;8Id}_)EItBgcUMKTDeFxJ|VtF(hbuZFS>A^;xLOKSJ?qSRaw%|VF z`)GrCf1vMt1@k1>HhZwlDJQ)ug zgYR_7_}RE{R+;=aXnTsX23g`JvxeZDTnPhjd?(R9z{P!(jP%P>v?ei zZJxpQgEkt)yiZ_VQ^=2tMvohJqFex-9ph&Xq|V;kG;BHG0W`#8!6{^`CT-!s@J zf5ZD7m@f%z+zzA1csq@sd29vs))6n{{|wd}<|o>7C^rX@-exL4;C|7FzaL@#B*;IW z%Ku!zFUbD_(o42?B2|BwAMk$?+lul(kNL^QP8vUMrhFqv8$A0|D(@#zCTK=|%6R{4 zGT=G&#}_a!@O>QfmW|BbQhV*hc5Y$4e>rR;$~%TUp!u4D@hdF`?b#k@f4rXMoa}pk z_sa`%e9+Zz+_;}?*h|P~kgrk1o6dK)quDq=m-1c4`r3W!gL;k_?^_HQ?*{|UGv;fy zo6P$2cC8lBKv<$aWmb`wXR(aPOh@OxX3V>>n-z@Ae`~&BQvamJ?WXp#re&vNe;yae zM>D_!GE&dLlSL!>=X;FzYe24{9l@Wz2W{LSmPNDhkC`905C_e<_ZV%87Gu0+_iIX0 zas#<%f*M8w$=O~F+vn7Ito!*?-5@>pp=RD$-PEJdw0F`XTn{@g#fA!!e^>3?^ z*>LF}G^rze!%DHJN^#?ci2DirD z*kfn4#skUs9fC?sO@>&iZ+hlLoS^{E|ECy?8*NRe}g~xmrXtV3sXudB+&IO z+Oll?EXp7%UK0^LxJ`th#^hpXs^Z9qL3lFjEHh!Krlnm-3A4VS2{kWku zwO$E}`p7|ce=BH7iF$adEn$>lS^BwPA&>p_ANBc@v|%Sj^0A#Kes&DFH<{udaP2fY zuOy*k#?R1ab1zF4wf?*x=+E{g_fDQ}v!jfIVIQ&L_k6Y|Q%&o${a#<`%YOc0o`F@* zdah}EFPpY)CF)0sb^>=9zgDmVU7cr8GGP7c4BD_Ef0PuMCogWHQ}1r6Q~l>uvUDo$ zqm9s3zn9XEjcD^f&-3kTn|3{e+5^XX+Q|A7@ak#ovB1$h8}JWYJwNBaRloWrNALOL zciOKS^9K=lQ;$vuKG#2W9u;H$gAcA4y%pxn*X?imPsHxMKl$e{P0>2_5yQ&+}a04(=`^3$STUp9?0;!5B0*;q*r(%;Qd&ae^F#`Qs5} zY3N~TX#Zv*-5`+Wv9G^FpfC-+|AsH)Ws`dUjSOqF-EqKX4K{p7{ned6ucGRW;!r&l zi1Vm&O%#j@j=gd??eO6zs(P-`A_VB6A_GxQ4+sND@R_8 z|4Al}q_30=^_8uDe(BcfH-8S&KznZe`tzufeV@fZlEBY+)cE}~v=5<-t9&s^TCT4d z$pu=Hd^E-&?sZx%;LUrwcNH`GH|w1@T{r}jCK9qTrr>`sB8mO3CCcveOF_R~GIA8- z>A=N&f6VypTO&BAFQYN(-{k!~iT(;22W5rMrx@#ZdW`jE??gUC*n4~Dk7}6E-}uYW zk!TP3(C<2&-S)lx4kOzo=x7IRn|{t5!6kBt0pPc)jpCG1$$0|5VIhr1JcXzJ{YGRy z^!t8tkPjvgoz%hP;kWJI|LCR~-M_D3`+r1+f1#fk>A&oe&USnI{$rPZf^a7*`FHXZ zruKX7dcWC`>@qf6wcT#I54Q@Ob~}41A~Q8%{7xj=VV1{59GWWupXN#9cU*!Bj2N#1 z11^;p<=(%|#8(9LqcUml*~^{g{ND=pQTz`34xA=T_ui)IvSs;CqOJcn>(t`ZK8c~e ze<=rWc487e3EG_ryF1A=QMM{lm{ReRrS!WCWXp&i*UnLc!eWzwgf+ z-w(X~?mqokI~=dT^0%3ix=MdxI?HhrZT%<`_1E{_y-`u`-oTXY+1fJrGgf}THJ!Qs zWZ}e_HqIADxZu!{={i^I2QtM$kKO&TpIlP3O~s z_r4O(?dA4kM3_OCG;$u3&Om+2gy+9~n=axYp};c?>E3qp_W58NW1?-f-G{dn^z?g~ zJKZ;H$r#QsIlAS;mi4D3e2YfhfBW6I)Y8PZuAF|YIS_cp{aa}8e-1SP zJc!LKPQ!Q~qY%&p|6VY1D!&@g1kzgFf);uD-v9sf`|_#C(e|VSR#QiCWbo-NB*VuF zk=-(`wAc-0|E~EzeVJcD%Lb{YWx$)5ueky5KQ+H*{)PF^Nup^?A!WYj%lsXeTBY(k zaQ4a$oV@v6^Dk}6zjPY%5AE;Qf40m4<^HMp=jPANU%8(A56xfn=1{wQpzQz7{4@La z4Nal95VcLY3)4d_NT89ALXQ>-UV!@1n=^(NB(D=|BajwDjp+OO|7wBI6|k2(aFWE}g- z97@kH^86hB(n-!7S{&$8^N#0fUWYa;YZ5xWnD^Cf{PmVIf^#TkqtD8`>vjLz=3iNF z@UP7OZvO(^kJx+eo#T;df6Q{=SA-EfLf(M9!Ll%%l%>=4yD~MPk8i+sSN?r1>aTOz zT%(gOc=qS3X@BFZLCW#4{tuX{w;h@|rCV|+L%Y>a%gJk_nJ|!|PaBHip#<+54< z-uK_<((jFwnVzYXGCyAKmC;`G@5f3;;=+VyXn}jr2i$|c>yb^k=l`;{d}KYP^xLQY zqtT=fs&7L^B7gMvU}zz%k-^Is%q+$X@%mRpp2Ggd{e5@}dw~Oq%&=blrSccR_6g6e zGi3ArlKuO;p+DJQe{Oe%a@(iok56{X=I{Adn$FgpzvrG%q{MzLqW$_DOS9iAS;khW z;d%hH2JGlPU<^m6I`}=1^gHEM(z_r3_s#z;bN=K31JCY+Z`60P3_$Om`u8;~+j}u2 z_rS^LjX&d^1e}E^lm~tQE${c%_ULiUN3RzKecrJ3ASzMae@OHbI7kJtO!xl)=tG$$ zeLK9$-2ty=+1D5|M=-LE<`bMzhDd^;lz(@|G1|xfemjg9dexP{5^azB8J6hZq+8Rs zPZi~O6x-)H<0HD!nB^q4&qKkuud)p}*^VSdxN4CxCjxl?5A!c&u6%QEUCUe+O-&ph zg)}|U+Yi8ef6wm|ufD=sVeUXfgr==f%lb-hS-;^ZsRfiksSsU!SBe4|Gj69+%ze3SzDME$L@7os2fEXF4jE^i7Wz;ti zq~BwFJP(M{wq$%18F)Xz>3oD4h~f*8%AU;j8~!wue;1PGRH}bt{$k5iP|mlrQYp>& z3#S?Xm-rSmcPG($C(uR^euzGE2Jzp?oL&Jva4Hjc@<}Z75SDoZ>-AB^{N9mIV_Q&~ ztA--$N`Fad?lL|C+q{toxkE<$%@;8pMBafo@+F+#nKu%dwTbCr)cctr{ZZp*m0>*h znvsZBe-z;)=2cTa;viXr80pi94dQq=a6a#IMxwh7V%|y28)f9Z8|5#?yamiVjC^Vv ziUj1f>Ja8xGdiX{@ZpQ8G*_{{N|1IKc>rm5V!K1yE@CVhiQY7f`t(D_$F(_(e4}V) zSMfbXn9iXMg>oS3`S-EhDyG>Jr1=u^IQ?$SP&8-5k({Bv zf45R~d>Lo6rkM9Wy5uzK4W#*1Ls5!-`u6e`3@Qy?f5*)NPh|2!(dvd|A6uH=no?Od9*(?#|}1cC7=V+o-z`lFHAdt zbxmVCLD~n5L;_qwo%d13y-t!|4`5pIe(AdIV0cEA$f*2J8kG&e>i>@ z3q`{mMZQx$;M+c|i}FoiK3E&*V0tJY`i1?N?hK}j@VbL-1GK{EdtXo<#RsEVy=$26 zK1`Qj8I#!d_o6I=ZG#!BtH>w#o=PXEe-d?qqJ$T)o}B@`2QWXRnN8)NLi%tMs~tbxpm`5@MUbXH}T#5SYB*=^hp0Lq9eGUf+Cko zg#0$<2VIBg^t+Mvrwv8YmhUD}o+;!De~_K8V*V-AX~Og_w#OMm5oaY|3F{rld|jO|P5bAhaZ z-1|5UlK#h0UcjzUr2G=rBLQzbU0|yrvinK4p+~sCgVk{u*T7ozG?okL9uCqCVmcVb z!7oMVAHZ@SFh1ID<8{!5srh4^7! zXdl)yjBQHaEgLlQJu+y+{{VS5j5LiI@B33E{+1DcyKHDYL^jFyuk_uppF%wxM7*QM zujwaP-x%7C1k0c`?!`=?P)2Mt9|_IjQ!W51EF+2oD)r~V_XyKW?wq+bR3xQ~x) zy`$3@zYh(tA2hNqlRsexe{)Df4bu)AStTv?-TyB;6X`1z3F-)xalpuzhDt{I!Jor+ zCtWTW??((9iB4SZGq3$|od@~&&Y4uv3i}rD7W6j)4v?n+L7bXKdhJTzIsXxqvqQ*F zDD8}U_*)b8|Ie`v!5+Ngf7*Pzd&d85Nw<;7 zlLTA!RmYPp&lvtdBn(c}d!cmM2QrTmey?ZxKlsW( zcpP#ZB`2i$701tTwqC9$vG@B^`}?}_-}>sLuHV3G=*gE-*ZVWId-G@E?(u(Z{MSPb zmeucc-@kU4yk$SIJ4I;A|Hr0XL_2vP6*n|vJ6U!i6p;MS(7l<%`|0oUQ5gxhobI4s zj<$;NIcdUx{l2091YN+_ke*$AlYe3$e?F--@50XK12%oXcweKb5hy(TBlI9&<##Yj z?|(*MbEw&fvJXS2trnrL_d%Z>hfu!t8B#@K#(#vq-!-Fq_;XUJ)aEDYb@&r-Tzg|}{wMy4+Vs#He;R7b zU9(wxM=482oG{(3N&<4)`)?_cPf{0*OnJb+ujBB^l5dCen+Xqb=D$q+WeZF`Q@lSo zCpX`nycuskh{$b~OQyH-IHU^scqr?@a*wryqeo#V7SB%?u;-=UO9kW+Uf-z_zP~Lc z?WeRq*pe^HejH_9J#GApXUQ3)Vn#M`Nvq!R#tDT_nRI5=xvjJ;mW?B z^rnCNr`tKfsn*{#^3karE)jtL_T(n*z8xK^xK`3F)%({QTdeSrj;zyxR>HwTR=dU9 z)V%(I3bwClG?D&WMq*6Se*$N0{GtxD#8V%#CF)t;;-{kP8ryr(R=m?uNb{Ne>lc9G z`(a`|`>ANg5KfN&rlE}vzMbH+nPXcVYkQxp)STw(hp~e7Ab`Nu?Xp=|UTGLR^7Iql!IWJ zVPMSyE{nos_&*5f0L_Pw{ElY!H{YA>=b@+CpYlmutc3-QuNnIEq3>0QqHqi(Q$OL9 z*;b{Ou=HZ8^dtQ?zV}$V&Fh)MdSD*&*Ks;*I*_j;+d@0o8;$Rpm7v${-+Z(fN>Vwf z@7J&|rXJv`fsZ0@f2Y3uHfBlmk$Gv+5W%k+e+)k{vauvaFL3WR##e=ps1@?xgYj5B z7{^cJvgc1CKS}`~_GDR!RcHH|%CAIQ&zgnf{r73Sf8D$oU9*1+=Ck(t)6uJ;te9=d zLin*644(nGUej`y>#=`Z+exa2wq^M3k@E3a7&m+gw_@Bte@+oEKCbb+$Z;4#upf1) z{`#|Nsr+icl++Wcl)ao8GV&=}I>tI~Wb??6BX?jaZQnM>xLb3f_95Dm5X02>7<;E4 zX#*Dq4}QS*kx}}GK{$+hSw>zG!bL-$rQQzG?eVgou2%cX)18cf`=#0*&G6zX%G3nT zbZka5NZ?iyf3}rml|MwgHPLRCQL<>`_shl~+JVhsupMBQ|en>(p)~oK1NNX>KCTH$NcFTeVlIkB`;FKD`>qQ_1)ZY4Gn;#vf*ZO}ns-;!Oiv z0X}$}9KaQ!nh~oaOR2K4%YRAE2R4NuCaVUPQ#adMf0G?1_xm%Q-^89n-i{gByxflu zV2O7k|J&x5ZBf(Fd8sFI9zyEhFGt3uoC;I+{QKUd@<%J;fCIGMFK=Y~AN-y-v<2QD z69dhGO((Yuj2wK8TmSi^LUa@>MkyaN`bZMZyySwq^O$}JTLm`4ylucr$%r$X8gTBWa39Fuz=nCuA-ksK8_j+LURNIdHLt?{u%7q zl7J#`a)&cN)Rq1Dt`Glo7I`;f{LYoK@!tzQZhv1e6q}z8P{D2>AE+@lzTYaL*F;-1 zNs_O*oi;vggyjQ;4dXv?UB|RV`~?oZiRE9%f3%Qh5~VRlX#}i!Bb#I2#L?kGkY^8K zCA{OF?-#l#_iZH$P$T!LYn&j$qI-KYoXe?7xcdUNG{t;ylh?&^tP?_n`5c zC-Om>zm4}L#L+NvSn80WKxuxQl{d7x{0JXld!J`~d|fp|^QV5xUu^s)WI803L*Ixj ze@#6oi^jC~;Qh14A5?*|f5;dHGpsuOFa^#H!*&0igc^K<_4$CyIOfLt60p=pU z-<29?k0RfX2AToy;X4CAjpYb`3?8^T;tm8rzBc}rjqJt%{BS7eZx{&(NVEJ8VfiD5 z=50Km&lou<`!m?)`|a<;SZ)i;1^H-VfBK&{ex?M{oj`i>$e)Ul1D+H(rWNFa^7mps z3OG-j&=ag@z|dha!3XsHEYj7nzq3J`(*a95xJm~eMv!0h#cf*ccqb_5IO2r-U=QHH z-mV}W$SKSX&mjGj?jX`Ti0Pre9}dzVM!LiF{_v8_WW9s@031WeZ)%@m%ts*#f9Y_- z0M-Zje+2opH%LbZ!^VShKu>oYn)i|XKZ^W^Pk2tCP63XGg7hULo5w~m{f}XNCoo?H z`EVTZm>@sNL%6k$4wXQVx?4_*WBh}E5&vG^W#aSpaeVq6!~bBTmHCeS7n{s~=L`S! i!LS%t^1kSIKl{e`Y5Vu+>!1793S*t0Y5ad1bGhJWIl(Ug delta 27107 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%0A|HmI{qRxgbn{W9{D<&(`xA4LDFi|JQ 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

7w#5sRMOH#6%MU-4I$ehaKTU5P z6Pjr9`(r5`nIpyx|NC-&aU69PekKOPPq_b}baMQHX+MSav+Px_tRG;c;R3%1+fQRr zndOWQU312S5a)ir%iq@@p)^9n$qt!+Anx(?d4H4ztjXG`N)2la9 zN;L|-)|2kkxajZRnQ_tU^<}Y@?P4pnE$wK$rH#yIY%(4EWw)|J=nmD|M3xnJEq8M| zyi1ejqD_atVE)jia+DVTulD=b>_7f{Gs9}r?xk>46I5$CO7n7qId@wJnnqM`Ezn@FBQS!Ra8eJ3Z_iMR1>$ExL&4%2~cwM?>Y%XC+U%eO~jv`s? zHf}}DH52aB@iNI77nRnJnw#PGK)`1@&*^I;FUZ=BVr*T%RI}knJ;U%&q;23-6`WcEp@$n z_wL=hcfXnLrpJ3adF4Y!_crY}ewPttjGK#f8qv}tFRep-ElLi9)wW)4fFz1V>Q|%{ zDhic;5g0uj+yu4z>Qd+__>LIXqS2lD)E*3M0&8n*--+~U6Fr21Ou8;hdrX=Bg3*)r z{OU$}*1t)b*2jJzmM1ag#i+%6DQdT$R`V~Tg6(v+nO})>GGW|m*Qa9i(qt)}3edMH zI)6M$%rVoj*5}Q?bcTwNnyWdQAH{u&f4|uHl0I5OHw`{nTCf~ zKhCWW?`h-ChV=02N9}BQJ+-ZIA~MpVoSsK#Ezi-yydO9ZKY+Nn1ITGbZ7{hgXyFZhn zUF;G2bbUi9s+d2Bn$5qqpRe0Y?+ZHq-Hh%3e zF3s@=|5k*j0rPn>p9ldl@%MRq=Tr9fSQMKUiOdg}KjO!KWB(eILUO*?NibcaI$@a2 z>+6}dlQ?b$lGtfn+M6Z`$1gQI8w(;?T-2j7eNu<)k7illD+AfPV(T>vLTPUUI{Uj+ zg0}asA5hb!tW(PF&#8E%V|^ZKwSE%^%y(zjmcuk{myTUC z!9F8#iMn`Qbs}UX)~TkW&uMt!bgb@Zy_{78j-l>%;~mi@;||L`CD|iI{q31NrSE!Z zth>1o!!#!Yl4Er-t=F&d5Fe9a4U*W-Oo+|3k(xS{KWP4qd;X?q;Wl&xJ)w`vnCwoj z>9#iPs!MR3tVYE_r#an_?N{#INA=bsb+K5EXkWWx{(CEypEiGLKi@DvYp;LC{57v0 zp=G>CO5V)iwzf;Ba~u9|{cd1wopj003(s$}-*i?njpIz#yiwBPlkWLp!kr80%x9Q(zCpu+WJ3eRVwJ??RJHCkY-Do?n&?oDVm|bNGbb zMnfx39}qaS$?}m+zsJ$>q`Z>PH4;BB!$l8C%aE5Y_pUqEHXIMO)s7xNhh31rZT?eC*xU|zUX9s! zopgJel|g^X!srblySG?IEq6qh>Grn^dUrFnt@=!}XUZCBg*D~lbl&iuE!R=jO5XY> zvu4NrM)-3X6RpU3JI8U_c6;Z=FjKPv%eu**+s}Wn;rGw&=RcV5@IL4IK23?$;;(q@ zpD}-x#9q6${PlH8Z%!lI%nvzB{kiy)eCpkT`4M~NKcvmnneP8R>T>1X)ZaUdJI(JM z+%9FWeb}sx#&@bTZLz&>GygbB?mAM*+}fSn2f6l+(;07y{(qH6)nZ&%bZ+pI+*8?l zT~#yn6Y47K=&pLY8jh`Gg|CFIp7HBQa~mjIOj!M#amOFM%ed3;_uUcg%~sw`*O`rV z@u-#KIP@J!nWaUpjm0^X{zvAo(@JmNI^x>**QL}*_kwY2WxbA%W@0SV?lq*gb6<~Qv3ui9F_ zL8~$CCswnPDy0SE_MW{*q;#aNl$46ioJ7I9=t=??ubeo$9(G9c|hl*{r-RllBosWWY)~v1Wo9hDJn@0x!0bsm`(qV zT4Vib+oUEMg~3!V(>k4Lg9KmZrODw`MJ?Bj@urQ_>#lL41mJsYLrRV5r);D88T+9| z^?S^JiF1&h*zbrLW7Yh7`4hHeI25H%D9c3ZGS6NHzMEXjoS`N``fZ}#cT?*kEF^TTB_V)=IiOEjiq${ zeD({(wwmr+9pw2nL#JcA1uL|Gg|@NQf3@4za*$3}I<4swqiJJ8#MN1O~@8r8%{r0P^F89rL_pUtegu7c4eY2J~#us&`kCptkMA=r^8BT|0(bD;H zoh1n&{`ldbVJlNMzY_7QZO$d?xT%C+iOgG3;Lf3=bHm#GQG3}J#e5~UBfU1aNqeVH z&A8|vMy;A@(kNOzt7wxYjCU-$d;u@po&sW9ohyD^pMAw{`^524CHz zuIPs^(**w&-g!YU$(!UC4UJ1$M@lGcflD5}brZCFm1DKiUnFG`Ykq#mxHr7}(?52~ z+VUN2Ik(Q&J!z9qUyeFW@b_9B*tf$4)5385wPe4;J3`!h)P`en+Q~JyMo#O=;Vp5C zdWLeyxVM_oHlOhn0o>lmvo$W#9ILgyQKYxcU*SzG^u{swis{`F40hcafndXJQ5K)M z+BwbtE$ZUgE&g+JJ-@+Qap-LsZtILYe$l;E(a2VW-M3jXe@iV!J;BArvk#}9x9LsPqVJHg|c(H6=xWj)zX*pP-G;9uKXbEqN(zHI)!6ix6(dGM$8Wu*TLQC}QG(;YS@ zaqD-JeYra)*C^Gj`}wV?5j(rRO-1~u@mdNS*`BlhOCsv);SS4eewX`+`nHxsM&I4M z6|TP>dnQKWd&6q}>g*ze6Q`Hn6)&CR(lzb<=GE1Bi0_Wo+K8k49```?HOmLLSOeQ? z-&6D7T4KLwTmCOb1DpZ;ax~z|zS)4$*OO%Nn>_pSy2u%KOyWW0vR)sdwbV*_Yh?IM zkb5OXbx68Fk%)>8g{b^3hK0sT-`znU4as-w+pqK|wUjsh{`1E8zpp{Q z@2vdn?%i9pqNJ6iuWN`~$$sOGlF7D`;|=2{U$_(S`82In#^iKtZfo)1zKz{mwe?(O z(PG@0+C!2!`N5|Hrd}hRC5x=}K}l?b(%uoagMux4@5E-Y(OR4qnV#@3mh>+zI&@pH zw#wvD^KHjQuWg}M)zVqjRY|g_N4S4WvHedx!RL5u6KpNF1=Ck}`p~^xqBVi3OERT4 zv7D{5&)?zo1d6rI=(*BW!QLVK7h>m47j6p`-hz7Bf*kgCISMU1J`JRG8@>=tnBb36 z;@^xoZM|XA($?R6YYNZ{E;l9}n&lshNvB72b69?NGQ-X?n(9i)OQHVf)+lV^1M(b& z_lR%O_+|Dg$G3Vv*WZo1jUE{Aw^i=$-M8xQMm&__d`Yq%im*q;W649aS5miTVyoUE zF?DENt||W+HtvX~6OxVH3fJq!(Aw7{+0Of;;h|AAGZuds9db{z_f6huIrdw5$CzId zjW$W1GAgSJ?h_4@MzeP^WNUO^$|!#OZIr$-zaX3(Fm8X#1F;;PGOT7(Z`VjRC&y}M z%f1#JFn{9nA-@y5mbV|UUwv_F{1eTgejr-^x$@+vpC1(7ikusS$3-^EPh0J(lP_Al zKOOCf^OLWg-TXqF;~!7LAYc4ve$?IVD<4c8XOdV(LB9E?{5fpCVZXl-9gb6w)*p6K z(@!WN%Gb{Ex~Y0E@2oGGIRD9g@?){*>D1k-zJF2j_Acoabcx>2Nj5sP39cS$NRA$J zr}W-C#nR4;2Muo#=B@L0PjRcXJ)OoKuU5UovWdHQzxnUpeQE67yLa#2y?giWTYvZN z?$od@Z$nhKn#pzE_nb}jXzE!T>wnUy%^t;yQ`^QfWcAK)t50qE0jc#~3*IPIbn3~- zmdUW;_qlE2#cx?szZ2SxyLa#2{jd9O7#;p(iz3WMtL2TKjFqb^#q>`-3AM#$A9y@CXU;|Mw;jbN+;e}bZG5-& zYmr~kBCsN}5}h)^AFbthBjOF}V@l~8!b2mrTS#3~Ys}XTZTY9y@wqif%?*1@wg+WN zHElI>V<(tpuPAAY&4P4b-OC%1mrnM(&2t$(u~C09v6r+mhKl+1=rQ|w!u(ov+I-o5 zX#W}QultGUy!l#m!PlbyzZR1}%>%YHkQ2qDXWg8r;erh%PmMT^7hmf8+8&AC9<%9; zCkrwi+6k9V85of`s$mRv;F7wjl?WvG)*14J0zXGly>$&bT%aCwJ2#S z$*iDJDC_4H^|FurTly-sv^ngyOj8=)g!y=r@rDss{6<`l#xuJ!_1l>K>gy-lIm&4- zlL?zNll^{%Y z@spyNw~hF`%}c2U z!Qba2(_o1aEfLv%+qv3O^jFi%`w5oZBmODDCkC}+hm}Bab>SW4~3Yu;(U$SYUr zgs|EkW$m6;jdoshUB^>dKdT<&G&;tCu7PE6x*e@ZL()_`Q0smfSk) zy8SJ5am(UY{Sy9Uw_qjuC&Es2L3R-uUQJJ@xv6#jo7gJQxOHyslbx$OyGZ|J>%7tU z_$h9?VjWS<<6?(Jq}xg3<3i1ww5N@>t7GwYHM8{QY%(j-<%0Fd&R%j7@k;5tArfPt z|5+@l+qf65-cCzO=9U|aB-ta$;h79ItH{qpk6XKX%$$q9#k?(gw|UU!2>j>$Z2evA z={=(C7WMW=s{C6PshVUDs&7g2vDP(iJrT=tGp*#EQ%ZaLz8$SSC1fIchtx>dO}&F} z8XoOkKgiPG??n2E54^-TRn!`H_PEu?4O;KMc8A?v&v~*!YDJE2DawYRPfHW~Au;tH zZj#m1H}^?@jm)iw&PJD^JFDS6e*fu}G(-HI%m|yd+tE)m?9{jRxEZ&)Qw>`aQ)$;& zmf)hdEJ~K8UZTD zJ$S618Qht(oBws(t#z+tcrM71CC$9-*O*Vr#38xK5O*YK(eUlcj3VD8WgY9kihFDA z`A+cu%`Y+C$dpRDG&igB^*yE{hnX~qravLe|7TLP@84YGt)A}Io^{*Eokm{RxiL8P z1~i_k(a&ug&`?u;C1%RSEy+KVp?GUeMSFT~r&Up!tG{pPyf$N|>xKiRL?PE(JDdyw zDP!f3&w~)uGE4V#AYJ+-@9RoQ##=EDSsOTEgZv}W(>z9cBD%m}AGW`bh0S2J4lU_Kh9v5ZJZ#m94%*}8b{*yT zsV4Jr`|UrqI;%Icnm!2jU3~ZSiLD=8Yj_B$zVb}%TTaLXX{es2@!w;wr4;>N-K47b z8t0}PQ*mT^qQ_f47iXLq`)&D^7RppI#Jw<`^3ppZH;Qg0o6mPR%c{RYJ)#$z)%&q*tGCDsvZ$&j_$+iS5_rk*pn+S=$|^-)XPU6j;3O;_G!c^ znN!hoT#n``?z3h}0n& zsB1;(EyYhZ@X59f_t{trq-{uUovBJE>qh4Na{<&WnPr`yd?!p;zSYyC!(u+Ds?o_*a4&l(o}k=|aF{k8Kk{jJvZ@+VGjFvA=w+MHg`bSB*R`T_ z-DW$oUqF0F6U(yAb+4H7(KGDQkK1TLx$imqdBR(kPmeagoVF2XPT8nH<2aY2IWuJ` zj8Rfp*X<)Qo7ZIL?n1(BvX<{>o5bcC(JVi%Z75q}x^zYwH@S_=IZSLDnSsoHA%zLj z?M6fH>oP~{W#66YvRg4nnHG9Bl8nYnG@gw1=+jsv{>iBENL|}OueG$sI=xBz+34>y zZ%FAPqd7l^E^>OJR;O-kCg|2@2e;}7-Q-~B#v85O;sFI&$oC0Z9KR^X#CZ?!Rv&)+ z{jH5azJbXa2+FptjYz)!eEsi6;U}$Ss#$(dw(>wU%}pTXn5V$@ zP*?WOJmm9Mjs?B*1{K!J3W9+!8U(v$vjTZa|L>5FnBQ#hm&Uz{iv}p(iZ*8>X=U1w z_gir$;#eN zrlsClR9OKzOQq|NuCMnACk$i8f(gS=F<9fE{eoJ>G!kvIUOu$3NLkzR{#}iowUhPq zw{b(IIOSjI={IRortsIsy}ZvG>DI-lt&CzRIqhilLI}|v;nBoV`-D!LG?~4&%dBui89f|~durKBdZmQR&8w6d{Q zT9MfwZj^m@5CVM=ObR$MyQ7pbx%4XGHj1<=jc8`nxEHrI;@4?gH9p@^i8L*%f4;Vk ze||H(68LZTPPj7j_1N9bt*E@!b(pW-c3gMLo!cKjcS>&|FGnQMSVT@dwabJ@OJ>JV z@68$|I}*z`B<+JH z1RoJ;sr5xL@ue7JOnfM)RWb2F{KEJzn3NDPCMM#m@loT8@x`Q`Gv_zEv%9lDs!rEc28)hl^ig~Q`VxJc4wFC`qslu%$ zJtc4=l=e;M_UDSvp{34JIl>*sh@SmYa;1^QT|S;np0{VBw3uC>L`OXxP36^0*S__b z&%AHOKKmKQnmhl6^0~e6EJq`z<~m-hx5G0JS8vA5XNE(h$Nk&^2PKn+)2hoUrMdJk znyhcIuFlF7;q5t7^O2F>n>pW^Jr6pJol7!+cD&A_&^Uj-O!$B4^|Uu+hf~;|EfvKv z`kHa>Emy;tHm~%ubxdOo(L94V1=l2#DQ5JR`hWi>Crkfk>zC+q*>A)w;!ViNo1${L zy2DzobiWIEthqdoy;U;HW^=!+_VzMa2eC1|E(dE=l6O-1-r21Z zN)^JFODZ*La^xwsXk*J$1@|ZG46T{IEzDPz|IhlF>{Bc_>LSTxX`bSDRBL{pBV$iP zH&rXfcda&90$(FJ>`#gRiKfG{FS(6!n*Y5aiB-bHxO1K#zf3#MC)iJzwl1cvo1br+ zFJ@7pA=z#nvkfh+B+eR~Za1gfV`Ng+V6qHA`ROs=Ro`s4OMg3CPQ6A>y8h?KRTwU5 z4C~tvlcrAwbuM88UpL15$b+vq_yyp567em51OB%ljaQMT#gpk_=$N87+d2q8Z>e^7F4~$gVfel8DZQ@pa|lFL0*R%CLs;ZqO`VWPSz>GWOfY@I@zF zJavrVJ6|yzV|dmHml>T7q+cODK2r+(tqjjNcBPw7#VNEFy4y+DgV}It2}mz0J<)1${!t zaVMVeIZ4_(6}j$VI7PbMLg?>B_yFwZL58yV;WVi;Etz>gOk`&0stk8Cd=~PR^qxVy z0mQ38Zz6{?kb?|R4I;c3dJ(?PLeCQZy&=-IhGGw|F#djq^LS5I;66g?!0rJj{1Wspjs-<;7x@2u4Bv!2 zEdC;qq3dmvQ`Lv%R)(*U4qaVlxRcb``4)x?;PZXRYrt$(8mHHhPd~(RmxG zdkssQ;O->#qqAacNO^5CrHM9R31Qbr-3`n0b;fEZvVvQ#AcRx>RC(fe4%vHw!fW3& g=?q7Oyw|>6@z0nq4~PHuUq7+#K=Z=r-`-}(V}Sw8g8%>k literal 29230 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 V { node(cyerce, () -> { node(aegires, () -> { - node(navanax, () -> { + node(navanax, Seq.with(new SectorComplete(navalFortress)), () -> { }); }); @@ -539,7 +539,16 @@ public class TechTree implements ContentList{ new Research(navalFactory), new Research(payloadConveyor) ), () -> { - //TODO naval fortress + node(navalFortress, Seq.with( + new SectorComplete(coastline), + new SectorComplete(extractionOutpost), + new Research(oxynoe), + new Research(minke), + new Research(cyclone), + new Research(ripple) + ), () -> { + + }); }); }); }); diff --git a/core/src/mindustry/game/Waves.java b/core/src/mindustry/game/Waves.java index 867c1476ce..8e7bf7a63c 100644 --- a/core/src/mindustry/game/Waves.java +++ b/core/src/mindustry/game/Waves.java @@ -350,8 +350,8 @@ public class Waves{ step += (int)(rand.random(15, 30) * Mathf.lerp(1f, 0.5f, difficulty)); } - int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.7f, difficulty)); - int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.6f, difficulty)); + int bossWave = (int)(rand.random(50, 70) * Mathf.lerp(1f, 0.5f, difficulty)); + int bossSpacing = (int)(rand.random(25, 40) * Mathf.lerp(1f, 0.5f, difficulty)); int bossTier = difficulty < 0.6 ? 3 : 4; diff --git a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java index b00ba5d3a6..95f9c875e8 100644 --- a/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java +++ b/core/src/mindustry/maps/planet/SerpuloPlanetGenerator.java @@ -517,7 +517,7 @@ public class SerpuloPlanetGenerator extends PlanetGenerator{ float waveTimeDec = 0.4f; - state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f) / 0.8f); + state.rules.waveSpacing = Mathf.lerp(60 * 65 * 2, 60f * 60f * 1f, Math.max(difficulty - waveTimeDec, 0f)); state.rules.waves = sector.info.waves = true; state.rules.enemyCoreBuildRadius = 600f; From decc570867cf2bc28d0ce4c7afa0ed47da97a492 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 17:23:17 -0400 Subject: [PATCH 34/61] Slightly denser generated bases --- core/src/mindustry/maps/generators/BaseGenerator.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java index 636e386356..9bcf434653 100644 --- a/core/src/mindustry/maps/generators/BaseGenerator.java +++ b/core/src/mindustry/maps/generators/BaseGenerator.java @@ -46,8 +46,8 @@ public class BaseGenerator{ wallsSmall.sort(b -> b.buildCost); wallsLarge.sort(b -> b.buildCost); - float bracketRange = 0.2f; - float baseChance = Mathf.lerp(0.7f, 1.9f, difficulty); + float bracketRange = 0.17f; + float baseChance = Mathf.lerp(0.7f, 2.1f, difficulty); int wallAngle = 70; //180 for full coverage double resourceChance = 0.5 * baseChance; double nonResourceChance = 0.0005 * baseChance; From cccce6badd1ae28041435239b1b31ef063dceff2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 10 Sep 2021 21:11:57 -0400 Subject: [PATCH 35/61] Make Base AI walls correspond to tier --- core/src/mindustry/ai/BaseAI.java | 9 +++++++-- .../mindustry/maps/generators/BaseGenerator.java | 15 +++++++-------- 2 files changed, 14 insertions(+), 10 deletions(-) diff --git a/core/src/mindustry/ai/BaseAI.java b/core/src/mindustry/ai/BaseAI.java index e7f4eb5270..7643d0e804 100644 --- a/core/src/mindustry/ai/BaseAI.java +++ b/core/src/mindustry/ai/BaseAI.java @@ -12,6 +12,7 @@ import mindustry.game.*; import mindustry.game.Schematic.*; import mindustry.game.Teams.*; import mindustry.gen.*; +import mindustry.maps.generators.*; import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.defense.*; @@ -25,7 +26,6 @@ import static mindustry.Vars.*; public class BaseAI{ private static final Vec2 axis = new Vec2(), rotator = new Vec2(); - private static final float correctPercent = 0.5f; private static final int attempts = 4; private static final float emptyChance = 0.01f; private static final int timerStep = 0, timerSpawn = 1, timerRefreshPath = 2; @@ -46,6 +46,7 @@ public class BaseAI{ boolean calculating, startedCalculating; int calcCount = 0; int totalCalcs = 0; + Block wallType; public BaseAI(TeamData data){ this.data = data; @@ -53,6 +54,10 @@ public class BaseAI{ public void update(){ + if(wallType == null){ + wallType = BaseGenerator.getDifficultyWall(1, data.team.rules().aiTier / 0.8f); + } + if(data.team.rules().aiCoreSpawn && timer.get(timerSpawn, 60 * 2.5f) && data.hasCore()){ CoreBlock block = (CoreBlock)data.core().block; int coreUnits = Groups.unit.count(u -> u.team == data.team && u.type == block.unitType); @@ -271,7 +276,7 @@ public class BaseAI{ } private void tryWalls(){ - Block wall = Blocks.copperWall; + Block wall = wallType; Building spawnt = state.rules.defaultTeam.core() != null ? state.rules.defaultTeam.core() : data.team.core(); Tile spawn = spawnt == null ? null : spawnt.tile; diff --git a/core/src/mindustry/maps/generators/BaseGenerator.java b/core/src/mindustry/maps/generators/BaseGenerator.java index 9bcf434653..7cbe7b8487 100644 --- a/core/src/mindustry/maps/generators/BaseGenerator.java +++ b/core/src/mindustry/maps/generators/BaseGenerator.java @@ -30,6 +30,12 @@ public class BaseGenerator{ private Tiles tiles; private Seq cores; + public static Block getDifficultyWall(int size, float difficulty){ + Seq wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == size && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); + wallsSmall.sort(b -> b.buildCost); + return wallsSmall.getFrac(difficulty * 0.91f); + } + public void generate(Tiles tiles, Seq cores, Tile spawn, Team team, Sector sector, float difficulty){ this.tiles = tiles; this.cores = cores; @@ -39,13 +45,6 @@ public class BaseGenerator{ Mathf.rand.setSeed(sector.id); - Seq wallsSmall = content.blocks().select(b -> b instanceof Wall && b.size == 1 && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); - Seq wallsLarge = content.blocks().select(b -> b instanceof Wall && b.size == 2 && !b.insulated && b.buildVisibility == BuildVisibility.shown && !(b instanceof Door)); - - //sort by cost for correct fraction - wallsSmall.sort(b -> b.buildCost); - wallsLarge.sort(b -> b.buildCost); - float bracketRange = 0.17f; float baseChance = Mathf.lerp(0.7f, 2.1f, difficulty); int wallAngle = 70; //180 for full coverage @@ -54,7 +53,7 @@ public class BaseGenerator{ BasePart coreschem = bases.cores.getFrac(difficulty); int passes = difficulty < 0.4 ? 1 : difficulty < 0.8 ? 2 : 3; - Block wall = wallsSmall.getFrac(difficulty * 0.91f), wallLarge = wallsLarge.getFrac(difficulty * 0.91f); + Block wall = getDifficultyWall(1, difficulty), wallLarge = getDifficultyWall(2, difficulty); for(Tile tile : cores){ tile.clearOverlay(); From c5a90759e5ef4ea2c3246ec55f78480f0e38625e Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 11 Sep 2021 08:45:17 -0400 Subject: [PATCH 36/61] Fixed #5971 / Fixed #5973 --- core/src/mindustry/core/Renderer.java | 2 +- core/src/mindustry/game/Schematics.java | 7 ++++++- core/src/mindustry/ui/dialogs/SettingsMenuDialog.java | 8 ++++++-- 3 files changed, 13 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 6605519266..d4368ddf15 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -114,7 +114,7 @@ public class Renderer implements ApplicationListener{ public void update(){ Color.white.set(1f, 1f, 1f, 1f); - float dest = Mathf.round(targetscale, 0.5f); + float dest = Mathf.clamp(Mathf.round(targetscale, 0.5f), minScale(), maxScale()); camerascale = Mathf.lerpDelta(camerascale, dest, 0.1f); if(Mathf.equal(camerascale, dest, 0.001f)) camerascale = dest; laserOpacity = settings.getInt("lasersopacity") / 100f; diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 011d289f05..4c4109d6ef 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -292,15 +292,20 @@ public class Schematics implements Loadable{ private void checkLoadout(Schematic s, boolean validate){ Stile core = s.tiles.find(t -> t.block instanceof CoreBlock); int cores = s.tiles.count(t -> t.block instanceof CoreBlock); + int maxSize = getMaxLaunchSize(core.block); //make sure a core exists, and that the schematic is small enough. - if(core == null || (validate && (s.width > core.block.size + maxLoadoutSchematicPad *2 || s.height > core.block.size + maxLoadoutSchematicPad *2 + if(core == null || (validate && (s.width > maxSize || s.height > maxSize || s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly || !t.block.unlocked()) || cores > 1))) return; //place in the cache loadouts.get((CoreBlock)core.block, Seq::new).add(s); } + public int getMaxLaunchSize(Block block){ + return block.size + maxLoadoutSchematicPad*2; + } + /** Adds a schematic to the list, also copying it into the files.*/ public void add(Schematic schematic){ all.add(schematic); diff --git a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java index 0f8820bc2a..d8d0b40826 100644 --- a/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java +++ b/core/src/mindustry/ui/dialogs/SettingsMenuDialog.java @@ -230,8 +230,12 @@ public class SettingsMenuDialog extends Dialog{ platform.shareFile(logs); }else{ platform.showFileChooser(false, "txt", file -> { - file.writeString(getLogs()); - app.post(() -> ui.showInfo("@crash.exported")); + try{ + file.writeBytes(getLogs().getBytes(Strings.utf8)); + app.post(() -> ui.showInfo("@crash.exported")); + }catch(Throwable e){ + ui.showException(e); + } }); } } From 90c2473448d6148789a971229248060a70390822 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 11 Sep 2021 10:07:00 -0400 Subject: [PATCH 37/61] Duct bridge crash fix --- core/src/mindustry/world/blocks/distribution/DuctBridge.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/DuctBridge.java b/core/src/mindustry/world/blocks/distribution/DuctBridge.java index 58457d5f22..ae8234d528 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DuctBridge.java @@ -211,7 +211,7 @@ public class DuctBridge extends Block{ public DuctBridgeBuild findLink(){ for(int i = 1; i <= range; i++){ Tile other = tile.nearby(Geometry.d4x(rotation) * i, Geometry.d4y(rotation) * i); - if(other.build instanceof DuctBridgeBuild build && build.team == team){ + if(other != null && other.build instanceof DuctBridgeBuild build && build.team == team){ return build; } } From 515ee060d2d443972df3ce06d09509a44301b3dc Mon Sep 17 00:00:00 2001 From: Darkness6030 <79508138+Darkness6030@users.noreply.github.com> Date: Sat, 11 Sep 2021 17:20:57 +0300 Subject: [PATCH 38/61] [RU] Sectors name translation (#5972) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit С береговой линией все понятно. Но почему я выбрал "Прибрежная крепость"? Все просто. "Naval" переводится как "Водяной", но "Водяная Крепость" - звучит *не очень*. Нужен какой-то синоним. Я рассмотрел варианты "Морская", "Береговая", но в конце концов остановился на варианте "Прибрежная". Если вы думаете иначе, предлагайте свой вариант перевода. --- core/assets/bundles/bundle_ru.properties | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index b846e94512..c068db3ca1 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -616,6 +616,8 @@ sector.biomassFacility.name = Центр исследования биомасс sector.windsweptIslands.name = Штормовой архипелаг sector.extractionOutpost.name = Добывающая база sector.planetaryTerminal.name = Планетарный пусковой терминал +sector.coastline.name = Береговая линия +sector.navalFortress.name = Прибрежная крепость sector.groundZero.description = Оптимальная локация для повторных игр. Низкая вражеская угроза. Немного ресурсов.\nСоберите как можно больше свинца и меди.\nДвигайтесь дальше. sector.frozenForest.description = Даже здесь, ближе к горам, споры распространились. Холодные температуры не могут сдерживать их вечно.\n\nНачните вкладываться в энергию. Постройте генераторы внутреннего сгорания. Научитесь пользоваться регенератором. From 5cf47f41983c1000ad21fb90123cc1f8dd54fc9c Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 11 Sep 2021 12:15:34 -0400 Subject: [PATCH 39/61] Clamp sector description in info --- core/src/mindustry/ui/dialogs/PlanetDialog.java | 2 +- core/src/mindustry/world/Tile.java | 8 ++++---- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/ui/dialogs/PlanetDialog.java b/core/src/mindustry/ui/dialogs/PlanetDialog.java index dcf61ea4d9..0ddd26830d 100644 --- a/core/src/mindustry/ui/dialogs/PlanetDialog.java +++ b/core/src/mindustry/ui/dialogs/PlanetDialog.java @@ -750,7 +750,7 @@ public class PlanetDialog extends BaseDialog implements PlanetInterfaceRenderer{ c.defaults().padBottom(5); if(sector.preset != null && sector.preset.description != null){ - c.add(sector.preset.displayDescription()).left().row(); + c.add(sector.preset.displayDescription()).width(420f).wrap().left().row(); } c.add(Core.bundle.get("sectors.time") + " [accent]" + sector.save.getPlayTime()).left().row(); diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index 776cb976f3..93b53d4f81 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -470,15 +470,15 @@ public class Tile implements Position, QuadTreeObject, Displayable{ getHitbox(rect); } - public Tile nearby(Point2 relative){ + public @Nullable Tile nearby(Point2 relative){ return world.tile(x + relative.x, y + relative.y); } - public Tile nearby(int dx, int dy){ + public @Nullable Tile nearby(int dx, int dy){ return world.tile(x + dx, y + dy); } - public Tile nearby(int rotation){ + public @Nullable Tile nearby(int rotation){ if(rotation == 0) return world.tile(x + 1, y); if(rotation == 1) return world.tile(x, y + 1); if(rotation == 2) return world.tile(x - 1, y); @@ -486,7 +486,7 @@ public class Tile implements Position, QuadTreeObject, Displayable{ return null; } - public Building nearbyBuild(int rotation){ + public @Nullable Building nearbyBuild(int rotation){ if(rotation == 0) return world.build(x + 1, y); if(rotation == 1) return world.build(x, y + 1); if(rotation == 2) return world.build(x - 1, y); From 2664bb84be1e60aeec473543ea48d0180e470abb Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 11 Sep 2021 13:30:10 -0400 Subject: [PATCH 40/61] Fixed #5974 --- core/src/mindustry/game/Schematics.java | 3 ++- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/game/Schematics.java b/core/src/mindustry/game/Schematics.java index 4c4109d6ef..80b378ad53 100644 --- a/core/src/mindustry/game/Schematics.java +++ b/core/src/mindustry/game/Schematics.java @@ -291,11 +291,12 @@ public class Schematics implements Loadable{ /** Checks a schematic for deployment validity and adds it to the cache. */ private void checkLoadout(Schematic s, boolean validate){ Stile core = s.tiles.find(t -> t.block instanceof CoreBlock); + if(core == null) return; int cores = s.tiles.count(t -> t.block instanceof CoreBlock); int maxSize = getMaxLaunchSize(core.block); //make sure a core exists, and that the schematic is small enough. - if(core == null || (validate && (s.width > maxSize || s.height > maxSize + if((validate && (s.width > maxSize || s.height > maxSize || s.tiles.contains(t -> t.block.buildVisibility == BuildVisibility.sandboxOnly || !t.block.unlocked()) || cores > 1))) return; //place in the cache diff --git a/gradle.properties b/gradle.properties index ba07db3e96..912648a4a4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -11,4 +11,4 @@ android.useAndroidX=true #used for slow jitpack builds; TODO see if this actually works http.socketTimeout=80000 http.connectionTimeout=80000 -archash=29844ef3821ab99a0212dfb676463cb37d870a1b +archash=72627de9b81e7143af4ebe1d1f9d54099ade8fd3 From 2f7c5994a78eba4d9d06df1158da6442c40d92fa Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 11 Sep 2021 15:43:24 -0400 Subject: [PATCH 41/61] Fixed #5978 --- core/src/mindustry/content/TechTree.java | 28 +++++++++++------------- 1 file changed, 13 insertions(+), 15 deletions(-) diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index 583e8e5c96..cfd69fb61d 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -531,23 +531,21 @@ public class TechTree implements ContentList{ new Research(airFactory), new Research(door) ), () -> { - - }); - - node(coastline, Seq.with( - new SectorComplete(windsweptIslands), - new Research(navalFactory), - new Research(payloadConveyor) - ), () -> { - node(navalFortress, Seq.with( - new SectorComplete(coastline), - new SectorComplete(extractionOutpost), - new Research(oxynoe), - new Research(minke), - new Research(cyclone), - new Research(ripple) + node(coastline, Seq.with( + new SectorComplete(windsweptIslands), + new Research(navalFactory), + new Research(payloadConveyor) ), () -> { + node(navalFortress, Seq.with( + new SectorComplete(coastline), + new SectorComplete(extractionOutpost), + new Research(oxynoe), + new Research(minke), + new Research(cyclone), + new Research(ripple) + ), () -> { + }); }); }); }); From 32db058dbe51e95d7cfa8952646f51bcd27d36fd Mon Sep 17 00:00:00 2001 From: Matthew Peng <54301439+MEEPofFaith@users.noreply.github.com> Date: Sat, 11 Sep 2021 15:47:30 -0700 Subject: [PATCH 42/61] Why is the smelter `-top` drawn between the flame circles? (#5817) --- core/src/mindustry/world/draw/DrawSmelter.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/draw/DrawSmelter.java b/core/src/mindustry/world/draw/DrawSmelter.java index 9402ecbd75..681723f7fd 100644 --- a/core/src/mindustry/world/draw/DrawSmelter.java +++ b/core/src/mindustry/world/draw/DrawSmelter.java @@ -38,13 +38,15 @@ public class DrawSmelter extends DrawBlock{ float cr = Mathf.random(0.1f); Draw.z(Layer.block + 0.01f); + + Draw.alpha(build.warmup); + Draw.rect(top, build.x, build.y); Draw.alpha(((1f - g) + Mathf.absin(Time.time, 8f, g) + Mathf.random(r) - r) * build.warmup); Draw.tint(flameColor); Fill.circle(build.x, build.y, flameRadius + Mathf.absin(Time.time, flameRadiusScl, flameRadiusMag) + cr); Draw.color(1f, 1f, 1f, build.warmup); - Draw.rect(top, build.x, build.y); Fill.circle(build.x, build.y, flameRadiusIn + Mathf.absin(Time.time, flameRadiusScl, flameRadiusInMag) + cr); Draw.color(); From a1b9f7d1b3cac5b3c5f8ebfada5b2c541b0101bf Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 12 Sep 2021 09:05:18 -0400 Subject: [PATCH 43/61] Fixed #5979 --- core/src/mindustry/entities/comp/UnitComp.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 117967906b..e72041a8da 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -11,7 +11,6 @@ import arc.util.*; import mindustry.ai.*; import mindustry.ai.types.*; import mindustry.annotations.Annotations.*; -import mindustry.content.*; import mindustry.core.*; import mindustry.ctype.*; import mindustry.entities.*; @@ -481,12 +480,13 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I if(!spawnedByCore){ Damage.dynamicExplosion(x, y, flammability, explosiveness, power, bounds() / 2f, state.rules.damageExplosions, item().flammability > 1, team, type.deathExplosionEffect); + }else{ + type.deathExplosionEffect.at(x, y, bounds() / 2f / 8f); } float shake = hitSize / 3f; Effect.scorch(x, y, (int)(hitSize / 5)); - Fx.explosion.at(this); Effect.shake(shake, shake, this); type.deathSound.at(this); @@ -498,7 +498,7 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I //if this unit crash landed (was flying), damage stuff in a radius if(type.flying && !spawnedByCore){ - Damage.damage(team,x, y, Mathf.pow(hitSize, 0.94f) * 1.25f, Mathf.pow(hitSize, 0.75f) * type.crashDamageMultiplier * 5f, true, false, true); + Damage.damage(team, x, y, Mathf.pow(hitSize, 0.94f) * 1.25f, Mathf.pow(hitSize, 0.75f) * type.crashDamageMultiplier * 5f, true, false, true); } if(!headless){ From 24db94a55b41791953a396e6908dd8ae34b03558 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 12 Sep 2021 11:05:05 -0400 Subject: [PATCH 44/61] No server category colors --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 2e7da6b094..3fedf64b61 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -20,7 +20,7 @@ "address": ["34.134.111.15", "fifr4.quackhost.uk:21013", "34.134.111.15:4000", "34.134.111.15:7000"] }, { - "name": "[cyan]DarkDustry", + "name": "DarkDustry", "address": ["darkdustry.ml", "darkdustry.ml:3000", "darkdustry.ml:7000", "darkdustry.ml:8000"] }, { From 35ffbef557105f03fc54f0e066be46fc757d5805 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 12 Sep 2021 11:07:18 -0400 Subject: [PATCH 45/61] #5932 --- core/src/mindustry/content/Fx.java | 4 +++- core/src/mindustry/world/blocks/defense/Wall.java | 4 +++- 2 files changed, 6 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 4e43b052bd..1a07adb56f 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -32,7 +32,9 @@ public class Fx{ //lifetime is how many frames it takes to fade out the trail e.lifetime = trail.length * 1.4f; - trail.shorten(); + if(!state.isPaused()){ + trail.shorten(); + } trail.drawCap(e.color, e.rotation); trail.draw(e.color, e.rotation); }), diff --git a/core/src/mindustry/world/blocks/defense/Wall.java b/core/src/mindustry/world/blocks/defense/Wall.java index d8d1c620b4..38f1b4f100 100644 --- a/core/src/mindustry/world/blocks/defense/Wall.java +++ b/core/src/mindustry/world/blocks/defense/Wall.java @@ -72,7 +72,9 @@ public class Wall extends Block{ Draw.blend(); Draw.reset(); - hit = Mathf.clamp(hit - Time.delta / 10f); + if(!state.isPaused()){ + hit = Mathf.clamp(hit - Time.delta / 10f); + } } } From 1941f2267648cc3d9b73dea9a2a7276e6a952010 Mon Sep 17 00:00:00 2001 From: JrTRinny <85090668+JrTRinny@users.noreply.github.com> Date: Sun, 12 Sep 2021 22:09:40 +0700 Subject: [PATCH 46/61] Update bundle_th.properties (#5908) * Update bundle_th.properties * Update bundle_th.properties * Update bundle_th.properties * more beautiful names * Update bundle_th.properties --- core/assets/bundles/bundle_th.properties | 40 ++++++++++++++++-------- 1 file changed, 27 insertions(+), 13 deletions(-) diff --git a/core/assets/bundles/bundle_th.properties b/core/assets/bundles/bundle_th.properties index 7b0728708b..5357ba6107 100644 --- a/core/assets/bundles/bundle_th.properties +++ b/core/assets/bundles/bundle_th.properties @@ -169,6 +169,7 @@ launchcore = ส่งแกนกลาง filename = ชื่อไฟล์: unlocked = เนื้อหาใหม่ปลดล็อก! available = มีการวิจัยใหม่พร้อมปลดล็อก! +unlock.incampaign = < ปลดล็อกในแคมเปญเพื่อดูรายละเอียด > completed = [accent]วิจัยแล้ว techtree = ต้นไม้แห่งเทคโนโลยี research.legacy = พบข้อมูลการวิจัยของเวอร์ชั่น [accent]5.0[]\nคุณต้องการ[accent]โหลดข้อมูล[]หรือ[accent]ทิ้งข้อมูลไป[]และเริ่มต้นวิจัยในแคมเปญใหม่ (แนะนำ) @@ -248,7 +249,7 @@ confirmban = คุณแน่ใจหรือว่าจะแบนผู confirmkick = คุณแน่ใจหรือว่าจะเตะผู้เล่นนี้ออก? confirmvotekick = คุณแน่ใจหรือว่าจะโหวตเตะผู้เล่นนี้ออก? confirmunban = คุณแน่ใจหรือว่าจะเลิกแบนผู้เล่นนี้? -confirmadmin = คุณแน่ใจหรือว่าจะเปลี่ยนผู้เล่นคนนี้เป็นแอดมิน? +confirmadmin = คุณแน่ใจหรือว่าจะแต่งตั้งผู้เล่นคนนี้เป็นแอดมิน? confirmunadmin = คุณแน่ใจหรือว่าจะลบสถานะการเป็นแอดมินของผู้เล่นนี้? joingame.title = เข้าร่วมเกม joingame.ip = ที่อยู่: @@ -362,6 +363,7 @@ publish.confirm = คุณแน่ใจหรือว่าจะเผย publish.error = เกิดข้อผิดพลาดการเผยแพร่ไอเท็มดังต่อไปนี้: {0} steam.error = ไม่สามารถเริ่ม Steam service ได้\nError: {0} +editor.cliffs = เปลี่ยนกำแพงเป็นหน้าผา editor.brush = แปรง editor.openin = เปิดในตัวแก้ไข editor.oregen = การเกิดของแร่ @@ -394,6 +396,13 @@ waves.load = โหลดจากคลิปบอร์ด waves.invalid = แบบคลื่นในคลิปบอร์ดไม่ถูกต้อง waves.copied = คัดลอกแบบคลื่นแล้ว waves.none = ไม่ได้กำหนดศัตรู\nแบบคลื่นเปล่าจะถูกแทนที่โดยแบบคลื่นค่าเริ่มต้นของเกม +waves.sort = จัดเรียงตาม +waves.sort.reverse = เรียงย้อนกลับ +waves.sort.begin = เริ่มต้น +waves.sort.health = พลังชีวิต +waves.sort.type = ชนิด +waves.units.hide = ซ่อนทั้งหมด +waves.units.show = แสดงทั้งหมด #these are intentionally in lower case wavemode.counts = จำนวน @@ -439,7 +448,7 @@ editor.exportimage = ส่งออกไฟล์รูปพื้นที editor.exportimage.description = ส่งออกไฟล์รูปแมพ editor.loadimage = นำเข้าแบบพื้นที่ editor.saveimage = ส่งออกแบบพื้นที่ -editor.unsaved = [scarlet]คุณมีการเปลี่ยนแปลงที่ยังไม่ได้เซฟ![]\nคุณแน่ใจหรือว่าจะออก? +editor.unsaved = คุณแน่ใจหรือว่าจะออก?\n[scarlet]การเปลี่ยนแปลงที่ยังไม่ได้เซฟจะถูกทิ้ง editor.resizemap = เปลี่ยนขนาดของแมพ editor.mapname = ชื่อแมพ: editor.overwrite = [accent]ตำเตือน!\nแมพนี้จะเขียนทับกับแมพที่มีอยู่แล้ว @@ -615,29 +624,31 @@ sector.stainedMountains.name = ภูเขาหลากสี sector.desolateRift.name = เดโซเลต ริฟต์ sector.nuclearComplex.name = ฐานผลิตนิวเคลียร์ sector.overgrowth.name = โอเวอร์โกรว์ด -sector.tarFields.name = ทาร์ ฟิลด์ +sector.tarFields.name = ผืนแผ่นแห่งน้ำมัน sector.saltFlats.name = ที่ราบเกลือ sector.fungalPass.name = ทางผ่านฟังกัล sector.biomassFacility.name = แหล่งสังเคราะห์ชีวมวล sector.windsweptIslands.name = หมู่เกาะวินด์สเวปท์ sector.extractionOutpost.name = ด่านส่งทรัพยากร sector.planetaryTerminal.name = ท่าปล่อยจรวดอวกาศยาน +sector.coastline.name = แนวชายฝั่ง +sector.navalFortress.name = ปราการแห่งวารี sector.groundZero.description = ที่ที่ดีที่สุดในการเริ่มต้นอีกครั้ง ศัตรูน้อย ทรัพยากรน้อย\nเก็บ[accent]ตะกั่ว[]และ[accent]ทองแดง[]ให้ได้มากที่สุด\nแล้วลุยต่อ -sector.frozenForest.description = แม้แต่ที่นี่ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม +sector.frozenForest.description = แม้แต่ที่นี่ ณ ที่ที่อยู่ใกล้ภูเขา [accent]สปอร์[]ก็ยังแพร่มาถึงที่นี่\nอากาศอันแสนเย็นเยือกไม่สามารถหยุดยั้งพวกมันได้ตลอดไป\n\nเริ่มต้นการใช้ไฟฟ้า สร้างเครื่องกำเนิดไฟฟ้าเผาไหม้\nเรียนรู้ที่จะใช้เครื่องซ่อมแซม sector.saltFlats.description = ณ ขอบของทะเลทราย เป็นที่ตั้งของที่ราบเกลือ สามารถพบทรัพยากรบางอย่างได้ที่นี่\n\nศัตรูได้ตั้งฐานเก็บทรัพยากรไว้ที่นี่ ทำลายแกนกลางของพวกมัน อย่าให้มีอะไรเหลือ -sector.craters.description = น้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ อนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ +sector.craters.description = มีน้ำขังอยู่ในหลุมอุกกาบาศแห่งนี้ เป็นอนุสรณ์สถานของสงครามเก่าแก่\nยึดพื้นที่นี่มา เก็บทราย เผา[accent]กระจกเมต้า[]\nปั๊มน้ำเพื่อมาหล่อเย็นป้อมปืนและเครื่องขุดเจาะ sector.ruinousShores.description = ถัดมาจากทะเลทราย เป็นที่ตั้งของชายฝั่ง ที่ครั้งก่อน เคยเป็นที่ตั้งของฐานป้องกันชายฝั่ง\nซึ่งทุกทำลายไปซะส่วนใหญ่แล้ว มีเหลือแค่ระบบการป้องกันพื้นฐาน\nทุกอย่างที่เหลือถูกทำลายเหลือเพียงแค่เศษเหล็ก\n\nทำการขยายการสำรวจต่อไป ค้นพบกับเทคโนโลยีอีกครั้ง sector.stainedMountains.description = เข้าลึกไปในพื้นที่ จะพบกับภูเขา ซึ่งยังไม่ถูกสปอร์แตะต้อง\nขุด[accent]ไทเทเนี่ยม[]ที่อุดมสมบูรณ์ในพื้นที่นี้ เรียนรู้ที่จะใช้มัน\n\nมีศัตรูปรากฏตัวมากขึ้นในบริเวณนี้ อย่าปล่อยให้พวกมันส่งยูนิตที่แข็งแกร่งที่สุดออกมา sector.overgrowth.description = พื้นที่นี้ถูกปกคลุมไปด้วยพืช เข้าใกล้กับแหล่งกำเนิดของสปอร์\nศัตรูได้ตั้งฐานเฝ้าระวังไว้ที่นี่ สร้างยูนิตเมส ทำลายฐานทิ้งซะ\nวิจัย[accent]เครื่องพัฒนารุ่นยกกำลัง[]เพื่อผลิตยูนิตขนาดที่ใหญ่ขึ้น -sector.tarFields.description = ขอบของพื้นที่ผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย หนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้ +sector.tarFields.description = แนวชานขอบของแหล่งผลิตน้ำมัน อยู่ระหว่างภูเขาและทะเลทราย เป็นหนึ่งในพื้นที่ที่มีแหล่งน้ำมันดินที่ใช้งานได้\nแม้ว่าจะถูกทิ้งร้าง พื้นที่นี้ยังคงมีฐานทัพของศัตรูอยู่ใกล้ๆ อย่าประมาทกับพวกมัน\n\n[lightgray]วิจัยเทคโนโลยีการแปรรูปน้ำมันหากเป็นไปได้ sector.desolateRift.description = เป็นพื้นที่ที่อันตรายมาก ทรัพยากรมากมาย แต่พื้นที่คับแคบ\nความเสี่ยงการโดนทำลายล้างสูง ออกไปจากที่นี่ให้เร็วที่สุด\nอย่าถูกหลอกโดยระยะเวลาระหว่างการโจมตีของศัตรูที่เว้นไว้นานกว่าปกติ sector.nuclearComplex.description = สถานที่ผลิตและแปรรูปทอเรี่ยมเก่า ถูกทำลายไม่เหลือสิ้น\nวิจัยทอเรี่ยมและวิธีการใช้มัน\n\nศัตรูในบริเวณนี้มีจำนวนมาก คอยตรวจตราหาผู้บุกรุกอยู่ตลอดเวลา sector.fungalPass.description = ทางผ่านระหว่างพื้นที่สูงและต่ำของภูเขา พื้นที่นี้เต็มไปด้วยสปอร์ ฐานลาดตระเวนขนาดเล็กของศัตรูตั้งอยู่ที่นี่\nทำลายมันซะ\nผลิตยูนิตแด็กเกอร์และครอว์เลอร์ ทำลายแกนกลางทั้งสองไม่ให้เหลือซาก sector.biomassFacility.description = แหล่งต้นกำเนิดของสปอร์ ที่นี่คือฐานวิจัยและผลิตสปอร์เริ่มแรก\nวิจัยเทคโนโลยีที่อยู่ภายในนั้น เพาะชำ[accent]สปอร์[]เพื่อเป็นเชื้อเพลิงและใช้ในการผลิตพลาสติก\n\n[gray]เมื่อสถานที่นี้ถูกทิ้งร้าง สปอร์ก็ถูกปล่อยออกมา ไม่มีสิ่งใดในระบบนิเวศท้องถิ่นที่สามารถแข่งขันกับสิ่งมีชีวิตที่\nแพร่กระจายเช่นนี้ได้ -sector.windsweptIslands.description = เลยแนวชายฝั่งไปเป็นหมู่เกาะที่ตั้งอยู่ห่างไกล เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้ +sector.windsweptIslands.description = เลยแนวชายฝั่งไปจะพบกับหมู่เกาะที่ตั้งอยู่ห่างไกลแห่งนี้ เคยมีบันทึกว่าที่นี่มีโรงงานผลิต[accent]พลาสตาเนี่ยม[]อยู่\n\nทำลายเรือศัตรู สร้างฐานทัพบนเกาะ วิจัยโรงงานพวกนี้ sector.extractionOutpost.description = ด่านที่อยู่ห่างไกล สร้างโดยศัตรูเพื่อใช้ในการส่งทรัพยากรไปยังฐานทัพอื่น\n\nเทคโนโลยีการส่งไอเท็มข้ามเซ็กเตอร์เป็นสิ่งจำเป็นสำหรับการพิชิตถัดๆ ไป ทำลายด่าน วิจัยฐานส่งของ -sector.impact0078.description = นี่คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้ +sector.impact0078.description = ณ ที่แห่งนี้คือเศษซากของเรือขนส่งระหว่างดวงดาวที่เคยเข้ามายังระบบนี้\nเศษเหล็กและหิมะปกคลุมทั่วทั้งพื้นที่\n\nกอบกู้ซากยานให้ได้มากที่สุด วิจัยเทคโนโลยีทั้งหมดที่ยังเหลือรอด\n\n\n[gray]อย่าประมาทกับฐานทัพศัตรูที่อยู่ใกล้ๆ โดยอันขาด\nศัตรูจะส่งกองกำลังมาโจมตีเรื่อยๆ จนกว่าคุณจะพ่ายแพ้ sector.planetaryTerminal.description = เป้าหมายสุดท้าย\n\nฐานทัพติดชายหาดนี้มีสิ่งประดิษฐ์ที่สามารถส่งแกนกลางไปยังดาวที่อยู่ใกล้ๆ ได้ ฐานทัพมีการป้องกันที่แน่นหนามาก\n\nผลิตยูนิตเรือ กวาดล้างศัตรูให้เร็วที่สุด วิจัยสิ่งประดิษฐ์นั่น status.burning.name = เผาไหม้ @@ -649,6 +660,7 @@ status.sapped.name = อ่อนกำลัง status.electrified.name = ช็อตไฟฟ้า status.spore-slowed.name = สปอร์สโลว์ status.tarred.name = เปื้อนน้ำมัน +status.overdrive.name = โอเวอร์ไดรฟ์ status.overclock.name = โอเวอร์คล็อก status.shocked.name = ช็อก status.blasted.name = ระเบิด @@ -665,7 +677,7 @@ settings.game = เกม settings.sound = เสียง settings.graphics = กราฟิก settings.cleardata = เคลียร์ข้อมูลเกม... -settings.clear.confirm = คุณแน่ใจหรือว่าจะเคลียร์ข้อมูลเกม?\nสิ่งที่ทำไปแล้วจะไม่สามารถย้อนกลับได้! +settings.clear.confirm = คุณแน่ใจหรือว่าจะเคลียร์ข้อมูลนี้?\nสิ่งที่ทำไปแล้วจะไม่สามารถย้อนกลับได้นะ! settings.clearall.confirm = [scarlet]คำเตือน![]\nการกระทำนี้จะลบข้อมูลทั้งหมด นั้นรวมไปถึงเซฟ แมพ การวิจัยแล้วและก็ปุ่มควบคุม\nเมื่อคุณกด 'โอเค' เกมจะลบข้อมูลทุกอย่างและออกโดยอัตโนมัติ settings.clearsaves.confirm = คุณแน่ใจหรือว่าคุณต้องการเคลียร์เซฟทั้งหมด? settings.clearsaves = เคลียร์เซฟ @@ -683,7 +695,7 @@ info.title = ข้อมูล error.title = [crimson]มีบางอย่างผิดพลาดเกิดขึ้น error.crashtitle = มีบางอย่างผิดพลาดเกิดขึ้น unit.nobuild = [scarlet]ยูนิตนี้ไม่สามารถสร้างได้ -lastaccessed = [lightgray]:คนที่แตะเป็นคนสุดท้าย {0} +lastaccessed = [lightgray]คนสุดท้ายที่แตะ: {0} block.unknown = [lightgray]??? stat.showinmap = <โหลดแมพเพื่อแสดง> @@ -1151,6 +1163,7 @@ block.core-nucleus.name = แกนกลาง: นิวเคลียส block.deep-water.name = น้ำลึก block.shallow-water.name = น้ำตื้น block.tainted-water.name = น้ำเสีย +block.deep-tainted-water.name = น้ำเสียลึก block.darksand-tainted-water.name = น้ำเสียบนทรายดำ block.tar.name = น้ำมันดิน block.stone.name = หิน @@ -1384,6 +1397,7 @@ hint.generator = \uf879 [accent]เครื่องกำเนิดไฟฟ hint.guardian = หน่วย[accent]ผู้พิทักษ์[]มีเกราะป้องกันหนาแน่น กระสุนเปราะบางอย่าง[accent]ทองแดง[]และ[accent]ตะกั่ว[][scarlet]ไม่มีประสิทธิภาพ[]\n\nควรใช้ป้อมปืนที่ดีกว่านี้หรือใช้ \uf835 [accent]กราไฟท์[]ใส่ใน \uf861 ดูโอ/ \uf859 ซัลโวเป็นกระสุนเพื่อทำลายผู้พิทักษ์ hint.coreUpgrade = สามารถอัปเกรดแกนกลางได้โดย[accent]วางแกนกลางที่ใหญ่กว่าทับมัน[]\n\nวาง  [accent]แกนกลาง: ฟาวน์เดชั่น[]ทับ  [accent]แกนกลาง: ชาร์ด[] ต้องแน่ใจว่ารอบข้างมีที่ว่างก่อนจะวาง hint.presetLaunch = [accent]เซ็กเตอร์ลงจอด[]สีเทา อย่างเช่น[accent]ป่าหนาวเหน็บ[] สามารถลงจอดจากที่ไหนที่ได้ในแผนที่ พวกนั้นไม่จำเป็นต้องยืดครองเซ็กเตอร์รอบข้างเพื่อส่งแกนกลางไป\n\n[accent]เซ็กเตอร์ที่มีเลข[] อย่างเช่นอันนี้[accent]ไม่จำเป็น[]ต้องยืดครอง +hint.presetDifficulty = เซ็กเตอร์นี้มี[scarlet]ระดับภัยคุกคามศัตรูสูง[]\n[accent]ไม่แนะนำ[]ให้ลงจอดไปยังเซ็กเซอร์พวกนั้นหากไม่มีการเตรียมพร้อมและเทคโนโลยี hint.coreIncinerate = เมื่อแกนกลางมีจำนวนไอเท็มชนิดหนึ่งที่เต็ม ไอเท็มชนิดนั้นที่เข้ามาเพิ่มจะ[accent]ถูกเผา[] hint.coopCampaign = ตอนที่เล่น[accent]แคมเปญร่วมกัน[]กับเพื่อน ไอเท็มที่ผลิตในแมพนี้จะถูกส่ง[accent]ไปยังเซ็กเตอร์ของคุณด้วย[]\n\nการวิจัยใหม่ที่โฮสต์ได้วิจัยก็เก็บเป็นของคุณด้วย @@ -1761,12 +1775,12 @@ lenum.target = ยิงไปที่ตำแหน่งเป้าหม lenum.targetp = ยิงเป้าหมายโดยมีการคำนวณความเร็ว lenum.itemdrop = ปล่อยไอเท็ม lenum.itemtake = หยิบไอเท็มจากสิ่งก่อสร้าง -lenum.paydrop = ปล่อยของที่บรรทุกอยู่ -lenum.paytake = หยิบของบรรทุกที่จุดที่อยู่ +lenum.paydrop = ปล่อยสิ่งที่บรรทุกอยู่ +lenum.paytake = หยิบสิ่งบรรทุก ณ จุดที่อยู่ lenum.flag = ปักธงยูนิตเป็นหมายเลข lenum.mine = ขุดที่ตำแหน่งเป้าหมาย lenum.build = สร้างสิ่งก่อสร้าง lenum.getblock = ดึงข้อมูลสิ่งก่อสร้างและประเภทสิ่งก่อสร้างที่ตำแหน่งเป้าหมาย\nหน่วยต้องอยู่ในช่วงของตำแหน่ง\nของแข็งที่ไม่ใช่สิ่งก่อสร้างจะส่งกลับเป็น [accent]@solid[] lenum.within = ตรวจสอบว่ายูนิตอยู่ในระยะหรือไม่ lenum.boost = เริ่ม/หยุดการบูสต์ -#extra line: 18 => extra descriptions: 4+2 => extra details: (7+4)+1 +#extra line: 16 => extra descriptions: 4 => extra details: (7+4)+1 From ee8b4f478d8e5f997c1b14954a6ac127e79cc72b Mon Sep 17 00:00:00 2001 From: VizardAlpha <43859764+VizardAlpha@users.noreply.github.com> Date: Sun, 12 Sep 2021 17:09:46 +0200 Subject: [PATCH 47/61] Updates bundle_fr.properties (#5931) * Updates bundle_fr.properties * Added rivers on Serpulo / Added deep tainted water * Error correction * More campaign map progress .. Added new commits * Update bundle_fr.properties --- core/assets/bundles/bundle_fr.properties | 16 +++++++++++++++- 1 file changed, 15 insertions(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_fr.properties b/core/assets/bundles/bundle_fr.properties index 415beafdb2..8e6dca790b 100644 --- a/core/assets/bundles/bundle_fr.properties +++ b/core/assets/bundles/bundle_fr.properties @@ -93,6 +93,7 @@ level.mode = Mode de jeu : coreattack = [scarlet]< Le Noyau est attaqué ! > nearpoint = [[ [scarlet]QUITTEZ LE POINT D'APPARITION ENNEMI IMMÉDIATEMENT[] ]\nannihilation imminente database = Base de données +database.button = Base de données savegame = Sauvegarder la partie loadgame = Charger une partie joingame = Rejoindre une partie @@ -168,6 +169,7 @@ launchcore = Lancer le Noyau filename = Nom du fichier : unlocked = Nouveau contenu débloqué ! available = Nouvelle recherche disponible ! +unlock.incampaign = < Débloquer dans la campagne pour plus de détails > completed = [accent]Complété techtree = Arbre technologique research.legacy = Des données de recherche de la [accent]5.0[] ont été trouvées.\nVoulez-vous [accent]charger ces données[] ou [accent]les ignorer[] et recommencer la recherche dans la nouvelle campagne ? (recommandé) @@ -393,6 +395,13 @@ waves.load = Coller depuis le presse-papiers waves.invalid = Vagues invalides dans le presse-papiers. waves.copied = Vagues copiées waves.none = Aucun ennemi défini.\nNotez que les vagues vides seront automatiquement remplacées par une vague générée par défaut. +waves.sort = Trier Par +waves.sort.reverse = Tri inversé +waves.sort.begin = Commence par +waves.sort.health = Santé +waves.sort.type = Type +waves.units.hide = Tout masquer +waves.units.show = Tout afficher #these are intentionally in lower case wavemode.counts = compte @@ -618,6 +627,8 @@ sector.biomassFacility.name = Biomass Synthesis Facility sector.windsweptIslands.name = Windswept Islands sector.extractionOutpost.name = Extraction Outpost sector.planetaryTerminal.name = Planetary Launch Terminal +sector.coastline.name = Coastline +sector.navalFortress.name = Naval Fortress sector.groundZero.description = Un endroit optimal pour commencer. Avec une menace ennemie faible et le peu de ressources disponibles, rassemblez autant de cuivre et de plomb que possible pour continuer votre exploration. sector.frozenForest.description = Même ici, près des montagnes, les spores se sont propagées. Les températures glaciales ne pourront pas les contenir indéfiniment.\n\nCommencez votre production d'énergie en construisant des générateurs à combustion et apprenez à utiliser les bâtiments de soin. @@ -646,6 +657,7 @@ status.sapped.name = Sapé status.electrified.name = Electrifié status.spore-slowed.name = Spore ralentie status.tarred.name = Goudronné +status.overdrive.name = Surmultiplié status.overclock.name = Surcadençage status.shocked.name = Étourdie status.blasted.name = Foudroyé @@ -1151,9 +1163,10 @@ block.spawn.name = Point d'Apparition Ennemi block.core-shard.name = Noyau: Fragment block.core-foundation.name = Noyau: Fondation block.core-nucleus.name = Noyau: Épicentre -block.deep-water.name = Eau profonde +block.deep-water.name = Eau Profonde block.shallow-water.name = Eau block.tainted-water.name = Eau Contaminée +block.deep-tainted-water.name = Eau Profonde Contaminée block.darksand-tainted-water.name = Eau Contaminée avec fond de Sable sombre block.tar.name = Goudron block.stone.name = Roche @@ -1387,6 +1400,7 @@ hint.generator = \uf879 Les [accent]Générateurs à combustion[] brûlent du Ch hint.guardian = Les [accent]Gardiens[] sont protégés par un bouclier. Les munitions faibles telles que le [accent]Cuivre[] et le [accent]Plomb[] ne seront [scarlet]pas efficaces[].\n\nUtilisez des tourelles de plus haut niveau, ou de meilleures munitions comme le \uf835 [accent]Graphite[] avec un \uf861Duo/\uf859Salve pour pouvoir tuer le gardien. hint.coreUpgrade = Les Noyaux peuvent être améliorés [accent]en plaçant un Noyau de plus haut niveau sur eux[].\n\nPlacez un  Noyau [accent]Fondation[] sur le  Noyau [accent]Fragment[]. Soyez sûrs que rien n'obstrue la construction. hint.presetLaunch = Les [accent]secteurs[] gris, tels que [accent]Frozen Forest[], peuvent être lançés de n'importe où. Ils ne requièrent pas la capture d'un secteur adjacent.\n\n[accent]Il y a beaucoup de secteurs[] comme celui-ci, qui sont [accent]optionels[]. +hint.presetDifficulty = Ce secteur a un niveau de menace ennemi [scarlet]élevé[].\nIl n'est [accent]pas recommandé[] de se lancer dans de tels secteurs sans la technologie et la préparation appropriées. hint.coreIncinerate = Lorsqu'un Noyau est rempli d'une ressource en particulier, le surplus qui rentrera dans celui-ci sera [accent]incinéré[]. hint.coopCampaign = Quand vous jouez en [accent]campagne multijoueur[], les ressources produites dans le secteur dans lequel vous jouez sera aussi envoyé [accent]dans vos secteurs[].\n\nLes recherches faites par l'hôte sont aussi partagées. From b58a63b200a5325e40d370a96476bbb72487a0d6 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?=E5=BD=AD=E7=91=9E=E6=9A=84?= Date: Sun, 12 Sep 2021 23:21:09 +0800 Subject: [PATCH 48/61] Update bundle_zh_TW.properties (#5860) * Update bundle_zh_TW.properties * Update bundle_zh_TW.properties minor correction --- core/assets/bundles/bundle_zh_TW.properties | 31 ++++++++++++++++----- 1 file changed, 24 insertions(+), 7 deletions(-) diff --git a/core/assets/bundles/bundle_zh_TW.properties b/core/assets/bundles/bundle_zh_TW.properties index 161565aea2..9380c166cd 100644 --- a/core/assets/bundles/bundle_zh_TW.properties +++ b/core/assets/bundles/bundle_zh_TW.properties @@ -78,13 +78,12 @@ schematic.tagexists = 該標籤已存在。 stats = 統計 stat.wave = 打敗的波次:[accent]{0} -stat.enemiesDestroyed = 摧毀的敵人:[accent]{0} +stat.unitsCreated = 建造單位數:[accent] {0} +stat.enemiesDestroyed = 摧毀敵人數:[accent]{0} stat.built = 建設的建築:[accent]{0} stat.destroyed = 摧毀的建築:[accent]{0} stat.deconstructed = 拆除的建築:[accent]{0} -stat.delivered = 發射的核心資源: stat.playtime = 遊玩時間:[accent] {0} -stat.rank = 最終排名:[accent]{0} globalitems = [accent]全域物品 map.delete = 確認要刪除「[accent]{0}[]」地圖嗎? @@ -93,7 +92,8 @@ level.select = 選擇關卡 level.mode = 遊戲模式: coreattack = 〈核心正在受到攻擊!〉 nearpoint = 【[scarlet]立即離開空降區[]】\n湮滅即將來臨 -database = 核心數據庫 +database = 核心資料庫 +database.button = 資料庫 savegame = 儲存遊戲 loadgame = 載入遊戲 joingame = 多人連線 @@ -169,6 +169,7 @@ launchcore = 發射核心 filename = 檔案名稱︰ unlocked = 已解鎖新內容! available = 可研究新科技! +unlock.incampaign = <在戰役中解鎖> completed = [accent]完成 techtree = 科技樹 research.legacy = [accent]5.0[] 偵測到舊有科技資料。\n請問要[accent]載入[]資料,還是[accent]放棄[]並重置新戰役的科技樹(建議)? @@ -345,9 +346,9 @@ custom = 自訂 builtin = 内建 map.delete.confirm = 確認要刪除地圖嗎?此動作無法復原! map.random = [accent]隨機地圖 -map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[accent]橘色[]的核心。 +map.nospawn = 這個地圖沒有核心!請在編輯器中添加一個[#{0}]{1}[]的核心。 map.nospawn.pvp = 這個地圖沒有敵對核心讓玩家重生!請在編輯器中添加一個[scarlet]不是橘色[]的核心。 -map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[scarlet]紅色[]的核心。 +map.nospawn.attack = 這個地圖沒有敵人核心可以攻擊!請在編輯器中添加一個[#{0}]{1}[]的核心。 map.invalid = 地圖載入錯誤:地圖可能已經損毀。 workshop.update = 更新項目 workshop.error = 擷取工作坊詳細資訊時出錯:{0} @@ -385,7 +386,8 @@ waves.waves = 波次 waves.perspawn = 每次生成 waves.shields = 護盾/波次 waves.to = 至 -waves.guardian = 頭目 +waves.max = 最大單位數 +waves.guardian = 守衛者 waves.preview = 預覽 waves.edit = 編輯…… waves.copy = 複製到剪貼簿 @@ -393,6 +395,11 @@ waves.load = 從剪貼簿載入 waves.invalid = 剪貼簿中的波次無效。 waves.copied = 波次已複製。 waves.none = 無自訂敵人。\n請注意,若沒有波次佈局將自動替換為預設佈局。 +waves.sort = 分類排序: +waves.sort.reverse = 反向排序 +waves.sort.begin = 開始 +waves.sort.health = 血量 +waves.sort.type = 兵種 #校正用空行 wavemode.counts = 數量 @@ -564,6 +571,8 @@ weather.sandstorm.name = 沙塵暴 weather.sporestorm.name = 孢子風暴 weather.fog.name = 霧 +sectorlist = 地區 +sectorlist.attacked = {0} 遭受攻擊 sectors.unexplored = [lightgray]未探索 sectors.resources = 資源: sectors.production = 生產: @@ -646,10 +655,12 @@ status.sapped.name = 被吸血 status.electrified.name = 觸電 status.spore-slowed.name = 孢子緩速 status.tarred.name = 焦油 +status.overdrive.name = 超載 status.overclock.name = 快轉 status.shocked.name = 電擊 status.blasted.name = 爆炸 status.unmoving.name = 立定 +status.boss.name = 守衛者 settings.language = 語言 settings.data = 遊戲資料 @@ -1001,6 +1012,7 @@ rules.wavetimer = 波次時間 rules.waves = 波次 rules.attack = 攻擊模式 rules.buildai = 電腦自動建築 +rules.aitier = AI 等級 rules.cleanupdeadteams = 移除戰敗玩家的建築(對戰) rules.corecapture = 佔領摧毀的核心 rules.polygoncoreprotection = 核心禁築區呈多邊形 @@ -1020,12 +1032,15 @@ rules.deconstructrefundmultiplier = 拆除資源返還比例 rules.waitForWaveToEnd = 等待所有敵人毀滅才開始下一波次 rules.dropzoneradius = 空降區半徑:[lightgray](格) rules.unitammo = 單位需要彈藥 +rules.enemyteam = 敵方隊伍 +rules.playerteam = 玩家隊伍 rules.title.waves = 波次 rules.title.resourcesbuilding = 資源與建築 rules.title.enemy = 敵人 rules.title.unit = 單位 rules.title.experimental = 實驗中 rules.title.environment = 環境 +rules.title.teams = 分隊 rules.lighting = 光照 rules.enemyLights = 敵方發光 rules.fire = 火 @@ -1432,6 +1447,8 @@ block.item-source.description = 無限輸出物品。僅限沙盒。 block.item-void.description = 不使用能量銷毀任何進入它的物品。僅限沙盒。 block.liquid-source.description = 無限輸出液體。僅限沙盒。 block.liquid-void.description = 銷毀所有輸入的液體。僅限沙盒。 +block.payload-source.description = 無限輸出原料。僅限沙盒。 +block.payload-void.description = 銷毀所有進入的原料。僅限沙盒。 block.copper-wall.description = 一種便宜的防禦方塊。\n用於前幾波防衛核心和砲塔。 block.copper-wall-large.description = 一種便宜的防禦方塊。\n用於前幾波防禦核心和砲塔\n佔據多個方塊。 block.titanium-wall.description = 一個中等強度的防禦方塊。\n提供對敵人的適度保護。 From 71e38862b96c7a2e99c72dbdb4a5aded969ff983 Mon Sep 17 00:00:00 2001 From: YellOw139 <70975516+YellOw139@users.noreply.github.com> Date: Sun, 12 Sep 2021 18:21:17 +0300 Subject: [PATCH 49/61] [Bundle][RO] Update (#5848) * [Bundle][RO] Update Changelog: - New strings/changes up to commit 254284760fa114287a288edf6464d41a0730670e - Typo fixes & various other improvements * Update full_description.txt * Update full_description.txt * killing confusion * Update bundle_ro.properties * deep-tainted-water * should do for now * sector.name --- core/assets/bundles/bundle_ro.properties | 30 ++++++++++++++----- .../metadata/android/ro/full_description.txt | 2 +- 2 files changed, 23 insertions(+), 9 deletions(-) diff --git a/core/assets/bundles/bundle_ro.properties b/core/assets/bundles/bundle_ro.properties index 88f9784dc1..7d5fdf84cb 100644 --- a/core/assets/bundles/bundle_ro.properties +++ b/core/assets/bundles/bundle_ro.properties @@ -169,6 +169,7 @@ launchcore = Lansează Nucleu filename = Nume Fișier: unlocked = Nou conținut deblocat! available = Poți cerceta noi tehnologii! +unlock.incampaign = < Deblochează în campanie pt detalii > completed = [accent]Finalizat techtree = Cercetează research.legacy = Au fost găsite date de cercetare din versiunea [accent]5.0[].\n Dorești să [accent]păstrezi aceste date[], sau [accent]să renunți la ele[] și să reîncepi cercetarea în noua campanie (recomandat)? @@ -362,6 +363,7 @@ publish.confirm = Sigur vrei să publici asta?\n\n[lightgray]Asigură-te că ai publish.error = Eroare la publicarea itemului: {0} steam.error = Inițializarea serviciilor Steam a eșuat.\nEroare: {0} +editor.cliffs = Pereți >> Dealuri editor.brush = Pensulă editor.openin = Deschide în Editor editor.oregen = Generarea Minereurilor @@ -394,6 +396,13 @@ waves.load = Încarcă din Clipboard waves.invalid = Valuri invalide în clipboard. waves.copied = Valuri copiate. waves.none = Niciun inamic definit.\nDe reținut că o listă de valuri goală va fi înlocuită automat cu lista de valuri prestabilită. +waves.sort = Sortează După +waves.sort.reverse = Inversează Sortarea +waves.sort.begin = Început +waves.sort.health = Viață +waves.sort.type = Tip +waves.units.hide = Ascunde +waves.units.show = Vezi Tot #intenționat cu literă mică wavemode.counts = numere @@ -622,6 +631,8 @@ sector.biomassFacility.name = Facilitatea de Sinteză a Biomasei sector.windsweptIslands.name = Insulele Măturate de Vânt sector.extractionOutpost.name = Avanpostul de Extracție sector.planetaryTerminal.name = Terminalul de Lansare Planetară +sector.coastline.name = Zona de Coastă +sector.navalFortress.name = Fortăreața Navală sector.groundZero.description = Locația optimă pt a începe încă odată. Risc de inamici scăzut. Puține resurse.\nAdună cât de mult plumb și cupru se poate.\nMergi mai departe. sector.frozenForest.description = Chiar și aici, aproape de munți, sporii s-au împrăștiat. Temperaturile reci nu-i pot reține la infinit.\n\nÎncepe călătoria către electricitate. Construiește generatoare de combustie. Învață să folosești reparatoare. @@ -649,7 +660,8 @@ status.sapped.name = Slăbește status.electrified.name = Electrificat status.spore-slowed.name = Încetinit de Spori status.tarred.name = Păcurit -status.overclock.name = Suprasolicitat +status.overdrive.name = Suprasolicitat +status.overclock.name = Overclock status.shocked.name = Electrocutat status.blasted.name = Explozie status.unmoving.name = Nemișcat @@ -766,9 +778,9 @@ stat.healing = Reparare ability.forcefield = Câmp de Forță ability.repairfield = Câmp de Reparare -ability.statusfield = {0} Câmp Suprasolicitare Unități +ability.statusfield = {0} Câmp de Stare ability.unitspawn = Fabrică de {0} -ability.shieldregenfield = Scut Regenerabil +ability.shieldregenfield = Câmp Regenerare Scut ability.movelightning = Mișcare Fulger ability.energyfield = Câmp de Energie: [accent]{0}[] forță pe ~ [accent]{1}[] blocuri / [accent]{2}[] ținte @@ -873,7 +885,7 @@ setting.difficulty.name = Dificultate: setting.screenshake.name = Agitare Ecran setting.effects.name = Vezi Efectele setting.destroyedblocks.name = Vezi Blocurile Distruse -setting.blockstatus.name = Vezi Statusul Blocului +setting.blockstatus.name = Vezi Starea Blocului setting.conveyorpathfinding.name = Găsirea Drumului la Plasarea Benzii setting.sensitivity.name = Sensibilitatea Controlului setting.saveinterval.name = Interval de Salvare @@ -928,8 +940,8 @@ keybind.clear_building.name = Șterge Clădirea keybind.press = Apasă o tastă... keybind.press.axis = Apasă o axă sau o tastă... keybind.screenshot.name = Captură Hartă -keybind.toggle_power_lines.name = Oprește/Pornește Statusul Electricelor -keybind.toggle_block_status.name = Oprește/Pornește Statusul Blocurilor +keybind.toggle_power_lines.name = Oprește/Pornește Starea Electricelor +keybind.toggle_block_status.name = Oprește/Pornește Starea Blocurilor keybind.move_x.name = Mergi pe X keybind.move_y.name = Mergi pe Y keybind.mouse_move.name = Urmărește Mouseul @@ -1048,7 +1060,7 @@ content.item.name = Materiale content.liquid.name = Lichide content.unit.name = Unități content.block.name = Blocuri -content.status.name = Efecte de Status +content.status.name = Efecte de Stare content.sector.name = Sectoare item.copper.name = Cupru @@ -1151,6 +1163,7 @@ block.core-nucleus.name = Nucleu: Core block.deep-water.name = Apă Adâncă block.shallow-water.name = Apă block.tainted-water.name = Apă Tulbure +block.deep-tainted-water.name = Apă Adâncă și Tulbure block.darksand-tainted-water.name = Apă Tulbure cu Nisip Negru block.tar.name = Păcură block.stone.name = Piatră @@ -1384,6 +1397,7 @@ hint.generator = \uf879 [accent]Generatoarele pe Combustie[] ard cărbunele și hint.guardian = Unitățile [accent]Gardian[] au armuri puternice. Munițiile slabe precum [accent]Cuprul[] și [accent]Plumbul[] [scarlet]nu sunt eficiente[].\n\nFolosește arme mai bune sau muniție de \uf835 [accent]Grafit[] pt \uf861Duo/\uf859Salvo pt a nimici Gardianul. hint.coreUpgrade = Un nucleu poate pot fi îmbunătățit [accent]plasând o alt nucleu mai bun peste el[].\n\nPlasează un nucleu  [accent]Foundation[] peste nucleul  [accent]Shard[]. Nucleul nu poate fi plasat decât pe alte nuclee. Asigură-te că nu sunt alte benzi sau obstacole care să împiedice plasarea. hint.presetLaunch = Poți lansa de oriunde în sectoarele gri, precum [accent]Pădurea Glacială[]. Ele sunt [accent]zone[] speciale [accent]de aterizare[]. Nu ai nevoie să capturezi sectoarele învecinate pt a lansa.\n\n[accent]Sectoarele numerotate[], ca acesta, sunt [accent]opționale[]. +hint.presetDifficulty = Acest sector are un [scarlet]nivel ridicat de amenințare inamică[].\n[accent]Nu e recomandat[] să lansezi în asemenea sectoare fără pregătiri sau tehnologie adecvată. hint.coreIncinerate = După ce nucleul se umple până la refuz cu un tip de material, toate materialele în plus de acel tip care încearcă să între în nucleu sunt [accent]incinerate[]. hint.coopCampaign = Când joci [accent]campania cooperând cu alți jucători[], materialele produse în sectorul curent vor fi transferate și către [accent]sectoarele tale locale[].\n\nDe asemenea, vei debloca tot ceea ce cercetează gazda. @@ -1551,7 +1565,7 @@ block.additive-reconstructor.description = Îmbunătățește unitățile primit block.multiplicative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel trei. block.exponential-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de nivel patru. block.tetrative-reconstructor.description = Îmbunătățește unitățile primite, transformându-le în unități de ltimă generație: nivelul cinci. -block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Statusul său poate fi citit și controlat de procesoarele logice. +block.switch.description = Un întrerupător. Poate fi pornit sau oprit. Starea sa poate fi citită și controlată de procesoarele logice. block.micro-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. block.logic-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât microprocesorul. block.hyper-processor.description = Rulează într-o buclă continuă o secvență de instrucțiuni logice. Poate fi folosit pt a controla unități și diverse clădiri. Mai rapid decât procesorul logic. diff --git a/fastlane/metadata/android/ro/full_description.txt b/fastlane/metadata/android/ro/full_description.txt index 8bf81489ef..f462d5d7f7 100644 --- a/fastlane/metadata/android/ro/full_description.txt +++ b/fastlane/metadata/android/ro/full_description.txt @@ -12,7 +12,7 @@

Campanie

-- Capturează planeta Serpulo avansând prin peste 250 de sectoare genereate procedural și 16 harți create manual +- Capturează planeta Serpulo avansând prin peste 250 de sectoare generate procedural și 16 hărți create manual - Capturează teritoriul și construiește fabrici pt producția de resurse în timp ce joci în alte sectoare - Apără-ți sectoarele de invaziile inamice periodice - Coordonează distribuția de resurse între sectoare folosind platforme de lansare From 2a6d7c5a138741d6e0ceecf9ffa852581fe9e2ff Mon Sep 17 00:00:00 2001 From: Sharlotte <60801210+Sharlottes@users.noreply.github.com> Date: Mon, 13 Sep 2021 00:21:53 +0900 Subject: [PATCH 50/61] Update bundle_ko.properties (#5892) * Update bundle_ko.properties * Update bundle_ko.properties * Update bundle_ko.properties * Update bundle_ko.properties --- core/assets/bundles/bundle_ko.properties | 33 +++++++++++++++++------- 1 file changed, 23 insertions(+), 10 deletions(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index b764582e5a..fab2e11f35 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -93,6 +93,7 @@ level.mode = 게임 모드: coreattack = < 코어가 공격을 받고 있습니다! > nearpoint = [[ [scarlet]즉시 적 소환구역에서 떠나십시오[] ]\n단계가 시작하는 순간 인근 건물들과 유닛들이 파괴됩니다! database = 코어 데이터베이스 +database.button = 데이터베이스 savegame = 게임 저장 loadgame = 게임 불러오기 joingame = 게임 참여 @@ -168,6 +169,7 @@ launchcore = 코어 출격 filename = 파일 이름: unlocked = 새로운 콘텐츠가 해금되었습니다! available = 새로운 콘텐츠 해금이 가능합니다! +unlock.incampaign = < 해금 후 상세정보 열람이 가능합니다 > completed = [accent]완료됨 techtree = 연구 기록 research.legacy = [accent]5.0[] 연구 데이터를 찾았습니다.\n[accent]이 데이터를 불러오시겠습니까?[], 아니면 이 데이터를 무시하고 캠페인을 새로 시작하시겠습니까? [accent]무시한 데이터는 삭제됩니다.[] (권장됨) @@ -361,6 +363,7 @@ publish.confirm = 이것을 게시하시겠습니까?[lightgray]창작마당 EUL publish.error = 아이템 게시 오류: {0} steam.error = 스팀 서비스를 초기화하지 못했습니다.\n오류: {0} +editor.cliffs = 언덕 전환 editor.brush = 브러쉬 editor.openin = 편집기 열기 editor.oregen = 광물 무작위 생성 @@ -381,10 +384,10 @@ waves.title = 단계 waves.remove = 삭제 waves.every = 매 waves.waves = 단계마다 -waves.perspawn = 마리씩 생성됨 -waves.shields = 방어막 hp/단계 +waves.perspawn = 마리씩 +waves.shields = 방어막만큼 소환 waves.to = 부터 -waves.max = 최대 유닛 수 +waves.max = 마리 까지 waves.guardian = 수호자 waves.preview = 미리보기 waves.edit = 편집 @@ -393,6 +396,13 @@ waves.load = 클립보드에서 불러오기 waves.invalid = 클립보드에 잘못된 단계 데이터가 있습니다. waves.copied = 단계 복사됨. waves.none = 적 단계가 설정되지 않았습니다.\n비어있을 시 자동으로 기본 적 단계 데이터로 설정됩니다. +waves.sort = 보기 정렬 +waves.sort.reverse = 정렬 뒤집기 +waves.sort.begin = 시작 단계순 +waves.sort.health = 체력순 +waves.sort.type = 유닛순 +waves.units.hide = 모두 숨기기 +waves.units.show = 모두 보이기 #these are intentionally in lower case wavemode.counts = 마리 @@ -409,7 +419,7 @@ editor.teams = 팀 editor.errorload = 파일을 불러오지 못했습니다. editor.errorsave = 파일을 저장하지 못했습니다. editor.errorimage = 이것은 맵이 아니라 사진입니다. -editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원되지 않는 구형 맵 형식을 사용합니다. +editor.errorlegacy = 이 맵은 너무 오래되어 더 이상 지원하지 않는 구형 맵 형식을 사용합니다. editor.errornot = 맵 파일이 아닙니다. editor.errorheader = 이 맵 파일은 유효하지 않거나 손상되었습니다. editor.errorname = 맵에 이름이 지정되어 있지 않습니다. 저장 파일을 불러오려고 시도하는 건가요? @@ -447,7 +457,7 @@ editor.exists = 이 이름의 맵이 이미 존재합니다. editor.selectmap = 불러올 맵을 선택하세요: toolmode.replace = 재배치 -toolmode.replace.description = 단단한 블록에만 그립니다. +toolmode.replace.description = 지형 블록에만 그립니다. toolmode.replaceall = 모두 재배치 toolmode.replaceall.description = 맵에 있는 모든 블록을 재배치합니다. toolmode.orthogonal = 직각 @@ -648,6 +658,7 @@ status.sapped.name = 피로 status.electrified.name = 과전류 status.spore-slowed.name = 포자감속 status.tarred.name = 침유됨 +status.overdrive.name = 과부하 status.overclock.name = 가속화 status.shocked.name = 감전 status.blasted.name = 파손 @@ -1150,6 +1161,7 @@ block.core-nucleus.name = 코어: 핵심 block.deep-water.name = 깊은 물 block.shallow-water.name = 물 block.tainted-water.name = 오염된 물 +block.deep-tainted-water.name = 오염된 깊은 물 block.darksand-tainted-water.name = 오염된 젖은 검은 모래 block.tar.name = 타르 block.stone.name = 바위 @@ -1316,7 +1328,7 @@ block.payload-router.name = 화물 분배기 block.duct.name = 도관 block.duct-router.name = 도관 분배기 block.duct-bridge.name = 도관 다리 -block.payload-propulsion-tower.name = 화물 추진탑 +block.payload-propulsion-tower.name = 화물 드라이버 block.payload-void.name = 화물 소멸기 block.payload-source.name = 화물 공급기 block.disassembler.name = 광재 분해기 @@ -1383,8 +1395,9 @@ hint.generator = \uf879 [accent]화력 발전기[]는 석탄을 태워서 주변 hint.guardian = [accent]수호자[] 유닛들은 방어력을 가집니다. [accent]구리[]와 [accent]납[] 같은 약한 탄약으로는 [scarlet]아무런 효과도 없습니다[].\n\n그런 수호자를 없애려면 높은 단계의 포탑 또는 \uf835 [accent]흑연[]을 탄약으로 넣은 \uf861듀오/\uf859살보를 사용하십시오. hint.coreUpgrade = 코어는 [accent]상위 코어를 위에 설치함[]으로써 업그레이드할 수 있습니다.\n\n [accent]기반[] 코어를 [accent]조각[] 코어 위에 설치하십시오. 주변에 장애물이 없는지도 확인하십시오. hint.presetLaunch = [accent]얼어붙은 숲[]과 같은 회색[accent]캠페인 지역[]은 어디에서나 출격해서 올 수 있습니다. 주변 지역을 점령하지 않아도 됩니다.\n\n이와 같은 [accent]네임드 지역[]들은 [accent]선택적[]입니다. +hint.presetDifficulty = 이 지역은 [scarlet]고위험 레벨[] 지역입니다.\n적절한 기술과 준비 없이 이런 지역들로 출격하는건 [accent]비추천[]합니다. hint.coreIncinerate = 코어가 자원으로 가득 찬 후에 받는 모든 자원들은 [accent]소각[]될 것입니다. -hint.coopCampaign = [accent]협동 캠페인[]을 할 때, 현재 맵에서 생산된 자원들은 [accent]캠페인 지역[]으로도 보내집니다.\n\n호스트가 새로 해금한 모든 것들도 가져갑니다. +hint.coopCampaign = [accent]협동 캠페인[]을 할 때, 현재 맵에서 생산된 자원들은 [accent]캠페인 지역[]으로도 보내집니다.\n\n호스트가 새로 해금한 모든 자원들도 가져갑니다. item.copper.description = 가장 기본적인 건설 재료. 모든 유형의 블록에서 광범위하게 사용됩니다. item.copper.details = 평범한 구리. 세르플로에 비정상적으로 많이 분포합니다. 별다른 보강재 없이는 구조적 문제 때문에 내구성이 비교적 약합니다. @@ -1560,7 +1573,7 @@ block.logic-display.description = 프로세서를 이용해 그래픽을 출력 block.large-logic-display.description = 프로세서를 이용해 그래픽을 출력할 수 있습니다. block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 코어를 행성 간 이동을 위한 탈출 속도까지 가속합니다. block.repair-turret.description = 가장 가까운 유닛을 지속적으로 수리합니다. 냉각수를 넣을 수 있습니다. -block.payload-propulsion-tower.description = 장거리 화물 운반 구조물. 화물을 연결된 다른 화물 추진탑으로 발사합니다. +block.payload-propulsion-tower.description = 장거리 화물 운반 구조물. 화물을 연결된 다른 화물 드라이버로 발사합니다. unit.dagger.description = 주변 모든 적에게 일반적인 탄환을 발사합니다. unit.mace.description = 주변 모든 적에게 화염 줄기를 발사합니다. @@ -1956,10 +1969,10 @@ unit.minke.details = unit.bryde.details = unit.sei.details = [lightgray][비공식][]세이 sei! unit.omura.details = [lightgray][비공식][]오무라이스? -unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮어보죠. +unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮여보죠. unit.oxynoe.details = unit.cyerce.details = [lightgray][비공식][]폭죽놀이다! -unit.aegires.details = [lightgray][비공식][]플레이어가 할 수 있는건 운전과 공사뿐... +unit.aegires.details = [lightgray][비공식][]공격 컨트롤을 할 수 없습니다. unit.navanax.details = [lightgray][비공식][]플레이어에게 잠깐의 섬광뽕을 입힙니다. unit.alpha.details = unit.beta.details = From 9c12125e89d89702b2c0cc75461b7643ddd979de Mon Sep 17 00:00:00 2001 From: NickName73 <60577131+NickName73@users.noreply.github.com> Date: Sun, 12 Sep 2021 18:22:17 +0300 Subject: [PATCH 51/61] Update bundle_ru.properties (#5911) --- core/assets/bundles/bundle_ru.properties | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index c068db3ca1..b76c002d8c 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -796,7 +796,7 @@ bullet.damage = [stat]{0}[lightgray] урона bullet.splashdamage = [stat]{0}[lightgray] урона в радиусе ~[stat] {1}[lightgray] блоков bullet.incendiary = [stat]зажигательный bullet.homing = [stat]самонаводящийся -bullet.frag = [stat]осколочный +bullet.frags = [stat]{0}[lightgray]x осколочный(ых) снаряд(ов): bullet.lightning = [stat]{0}[lightgray]x молнии ~ [stat]{1}[lightgray] урона bullet.buildingdamage = [stat]{0}%[lightgray] урона по постройкам bullet.knockback = [stat]{0}[lightgray] отбрасывания @@ -1546,6 +1546,8 @@ block.memory-bank.description = Хранит информацию для лог block.logic-display.description = Отображает произвольную графику из логического процессора. block.large-logic-display.description = Отображает произвольную графику из логического процессора. block.interplanetary-accelerator.description = Массивная электромагнитная башня-рельсотрон. Ускоряет ядро, позволяя преодолеть гравитацию для межпланетного развёртывания. +block.repair-turret.description = Непрерывно ремонтирует ближайшую поврежденную еденицу в своем радиусе. Опционально использует охлаждающую жидкость. +block.payload-propulsion-tower.description = Конструкция для транспортировки больших грузов на большое растояние. Стреляет грузом в другие грузовые катапульты. unit.dagger.description = Стреляет стандартными пулями по всем врагам поблизости. unit.mace.description = Стреляет потоками огня по всем врагам поблизости. From da465c7786a0d83301655f9014357a34b51f1ac4 Mon Sep 17 00:00:00 2001 From: RebornTrack970 <62565267+RebornTrack970@users.noreply.github.com> Date: Sun, 12 Sep 2021 18:34:03 +0300 Subject: [PATCH 52/61] TR Translate before release (#5980) --- core/assets/bundles/bundle_tr.properties | 10 ++++++++++ 1 file changed, 10 insertions(+) diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index 66d8d849af..9db8f6eb97 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -393,6 +393,13 @@ waves.load = Panodan yükle waves.invalid = Panoda geçersiz dalga sayısı var. waves.copied = Dalgalar kopyalandı. waves.none = Düşman bulunamadı.\nBoş dalga düzenlerin otomatik olarak varsayılan düzenle değiştirileceğini unutmayın +waves.sort = Sıralama Ölçeği: +waves.sort.reverse = Ters Sırala +waves.sort.begin = Başla +waves.sort.health = Can +waves.sort.type = Tür +waves.units.hide = Hepsini Gizle +waves.units.show = Hepsini Göster #bunlar özellikle küçük başlıyor. wavemode.counts = miktarlar @@ -621,6 +628,8 @@ sector.biomassFacility.name = Sentetik BioMadde Santrali sector.windsweptIslands.name = Rüzgarlı Adalar sector.extractionOutpost.name = Kazı Üssü sector.planetaryTerminal.name = Gezegenler Arası Terminal +sector.coastline.name = Kıyı Şeridi +sector.navalFortress.name = Deniz Kalesi sector.groundZero.description = Yeniden başlamak için ideal bölge. Düşük düşman tehlikesi ve az miktarda kaynak mevcut. Mümkün olduğunca çok bakır ve kurşun topla.\nİlerle. sector.frozenForest.description = Burada, dağlara yakın bölgelerde bile sporlar etrafa yayıldı. Dondurucu soğuk onları sonsuza dek durduramaz.\n\nEnerji kullanmaya başla. Termik jeneratörler inşa et. Tamircileri kullanmayı öğren. @@ -1382,6 +1391,7 @@ hint.generator = \uf879 [accent]Termik Jeneratör[] kömür yakarak enerji üret hint.guardian = [accent]Gardiyan[] birimleri güçlü bir zırha sahiptir. [accent]bakır[] ve [accent]kurşun[] gibi mermilere karşı [scarlet]Dayanıklıdır[].\n\nGardiyanları öldürmek için [accent]salvo[] gibi daha güçlü taretleri ve \uf835 [accent]grafit[] gibi daha çok hasar veren mermileri kullanın. hint.coreUpgrade = Merkezinizi, [accent]merkezinizin üstüne daha gelişmiş bir merkez[] koyarak geliştirebilirsiniz. \n\n[accent]Parçacık[] olarak adlandırılan fakirhanenizin üstüne [accent]Temel[] olarak adlandırılan merkezinizi koyun. Merkezinizin etrafında hiçbir yapı olmamalıdır. hint.presetLaunch = [accent]Donmuş Ormanlar[] gibi [accent]ana sektörlere iniş[] herhangi bir yerden yapılabilir. Yakındaki bir sektörden fırlatma gerektirmez.\n\nBunun gibi [accent]sayı ile isimlendirilmiş[] sektörleri ele geçirmek [accent]isteğe bağlıdır.[]. +hint.presetDifficulty = Bu sektör, [scarlet]yüksek tehlike[] barındırıyor.\nBöyle bir sektöre hazırlıksız fırlatış yapmak [accent]tavsiye edilmez[]. hint.coreIncinerate = Bir çekirdek ağzına kadar dolduktan sonra, ekstra itemler [accent]eritilir[]. hint.coopCampaign = Arkadaşlarınla Multiplayer Campaign oynarken, her yaptığınız Araştırma ve item aktarımı, senin oyun içi Campaign ine de aktarılır. #Yukarıdaki bağzı cümleler Anti Dragon tarafından çevirildi. From f64d078f2960d77ac7c8225461aed6d72da23871 Mon Sep 17 00:00:00 2001 From: Shockwave Date: Mon, 13 Sep 2021 00:54:32 +0800 Subject: [PATCH 53/61] Update bundle_zh_CN.properties (#5938) * Update bundle_zh_CN.properties 1. Inherited from 2. Synced latest commit from English bundle. * Update bundle_zh_CN.properties Synced cliff support for editor * Update bundle_zh_CN.properties Minor optimization * Update bundle_zh_CN.properties Minor fix at line 349~ * Update bundle_zh_CN.properties Synced recent update in English bundle. (Hide All and Show All) * Update bundle_zh_CN.properties 1. Synced hint for high threat level sector 2. Unified the term "sector" 3. Minor fix on the half-width commas * Update bundle_zh_CN.properties Optimized key-pressing descriptions. * Update bundle_zh_CN.properties Restore line 934 to half-width comma * Update bundle_zh_CN.properties Synced name of new sectors. --- core/assets/bundles/bundle_zh_CN.properties | 1713 ++++++++++--------- 1 file changed, 870 insertions(+), 843 deletions(-) diff --git a/core/assets/bundles/bundle_zh_CN.properties b/core/assets/bundles/bundle_zh_CN.properties index 0cb51b1d3d..48ef307c69 100644 --- a/core/assets/bundles/bundle_zh_CN.properties +++ b/core/assets/bundles/bundle_zh_CN.properties @@ -3,28 +3,28 @@ credits = 致谢 contributors = 翻译者和贡献者 discord = 加入 Mindustry 的 Discord! link.discord.description = Mindustry 官方的 Discord 聊天室 -link.reddit.description = Mindustry 的 reddit 板块 +link.reddit.description = Mindustry 的 Reddit 板块 link.github.description = 游戏源代码 link.changelog.description = 更新日志 link.dev-builds.description = 不稳定的开发版本 -link.trello.description = 官方列于 Trello 的功能计划表 +link.trello.description = 官方列于 Trello 的特性计划表 link.itch.io.description = itch.io 上的 PC 版下载 link.google-play.description = Google Play 页面 link.f-droid.description = F-Droid 页面 link.wiki.description = Mindustry 官方 Wiki link.suggestions.description = 提出新特性的建议 link.bug.description = 发现了 Bug ?在这里报告 -linkfail = 打开链接失败!\n网址已复制到您的剪贴板。 +linkfail = 打开链接失败!\n网址已复制到您的剪贴板。 screenshot = 屏幕截图已保存到 {0} -screenshot.invalid = 地图太大,可能没有足够的内存用于截图。 +screenshot.invalid = 地图太大,可能没有足够的内存用于截图。 gameover = 游戏结束 gameover.disconnect = 断开连接 gameover.pvp = [accent] {0}[]队获胜! -gameover.waiting = [accent]正在更换下一张地图... +gameover.waiting = [accent]正在更换下一张地图… highscore = [accent]新纪录! copied = 已复制 -indev.notready = 这部分玩法还未开发完成。 -indev.campaign = [accent]恭喜!您已经到达战役模式的结尾![]\n\n这是目前内容的全部。 未来的更新中将添加行星际旅行。 +indev.notready = 这部分玩法还未开发完成。 +indev.campaign = [accent]恭喜!您已经完成了战役模式![]\n\n这是目前全部的游戏内容。 未来的更新中将添加行星际旅行。 load.sound = 音乐加载中 load.map = 地图加载中 @@ -34,74 +34,74 @@ load.system = 系统加载中 load.mod = 模组加载中 load.scripts = 脚本加载中 -be.update = 发现游戏最新版本: -be.update.confirm = 现在下载并重启游戏? -be.updating = 更新... +be.update = 发现游戏最新BE版本: +be.update.confirm = 现在下载并重启游戏? +be.updating = 更新中… be.ignore = 忽略 -be.noupdates = 未发现更新。 +be.noupdates = 未发现更新。 be.check = 检测更新 mods.browser = 模组浏览器 mods.browser.selected = 已选模组 mods.browser.add = 安装 -mods.browser.reinstall = 重装 +mods.browser.reinstall = 重新安装 mods.github.open = 查看 mods.browser.sortdate = 按时间排序 -mods.browser.sortstars = 按星标排序 +mods.browser.sortstars = 按星数排序 schematic = 蓝图 schematic.add = 保存蓝图… schematics = 蓝图 -schematic.replace = 此名称的蓝图已存在,是否覆盖? -schematic.exists = 此名称的蓝图已存在。 +schematic.replace = 存在同名蓝图,是否覆盖? +schematic.exists = 存在同名蓝图。 schematic.import = 导入蓝图… schematic.exportfile = 导出文件 -schematic.importfile = 导入蓝图 +schematic.importfile = 从文件导入 schematic.browseworkshop = 浏览创意工坊 -schematic.copy = 复制蓝图到剪贴板 -schematic.copy.import = 从剪贴板导入蓝图 -schematic.shareworkshop = 在创意工坊上分享蓝图 +schematic.copy = 复制到剪贴板 +schematic.copy.import = 从剪贴板导入 +schematic.shareworkshop = 在创意工坊上分享 schematic.flip = [accent][[{0}][]/[accent][[{1}][]:翻转蓝图 -schematic.saved = 蓝图已保存。 -schematic.delete.confirm = 确认删除蓝图? +schematic.saved = 蓝图已保存。 +schematic.delete.confirm = 确定删除蓝图? schematic.rename = 重命名蓝图 -schematic.info = {0}x{1},{2} 个方块 -schematic.disabled = [scarlet]蓝图已禁用![]\n您不能在此[accent]地图[]或[accent]服务器[]上使用蓝图. -schematic.tags = 标签: +schematic.info = {0}x{1},{2} 个建筑 +schematic.disabled = [scarlet]蓝图已禁用![]\n您不能在此[accent]地图[]或[accent]服务器[]上使用蓝图。 +schematic.tags = 标签: schematic.edittags = 编辑标签 -schematic.addtag = 增加新标签 +schematic.addtag = 添加新标签 schematic.texttag = 文字标签 schematic.icontag = 图标标签 schematic.renametag = 重命名标签 schematic.tagdelconfirm = 确定要完全删除这个标签吗? -schematic.tagexists = 这个标签已经存在了。 +schematic.tagexists = 此标签已经存在。 stats = 统计资料 stat.wave = 防守波数:[accent]{0} +stat.unitsCreated = 生产单位:[accent]{0} stat.enemiesDestroyed = 消灭敌人:[accent]{0} stat.built = 建造建筑:[accent]{0} stat.destroyed = 摧毁建筑:[accent]{0} stat.deconstructed = 拆除建筑:[accent]{0} -stat.delivered = 装运资源: stat.playtime = 游玩时间:[accent] {0} -stat.rank = 最终评级:[accent]{0} globalitems = [accent]全局物品 -map.delete = 确定要删除“[accent]{0}[]”地图吗? +map.delete = 确定要删除地图“[accent]{0}[]”吗? level.highscore = 最高分:[accent]{0} level.select = 选择关卡 level.mode = 游戏模式: -coreattack = < 核心正在受到攻击!> +coreattack = < 核心正在受到攻击! > nearpoint = [[ [scarlet]立即离开敌人出生点[] ]\n摧毁在即 database = 核心数据库 +database.button = 数据库 savegame = 保存游戏 loadgame = 载入游戏 joingame = 加入游戏 customgame = 自定义游戏 newgame = 新游戏 none = <无> -none.found = [lightgray]<未找到> -none.inmap = [lightgray]<无法在地图中找到> +none.found = [lightgray]<未发现> +none.inmap = [lightgray]<此地图中未发现> minimap = 小地图 position = 位置 close = 关闭 @@ -119,212 +119,214 @@ preparingcontent = 正在准备内容 uploadingcontent = 正在上传内容 uploadingpreviewfile = 正在上传预览文件 committingchanges = 正在提交更改 -done = 已完成 -feature.unsupported = 您的设备不支持此功能。 +done = 完成 +feature.unsupported = 您的设备不支持此特性。 -mods.initfailed = [red]⚠[] 前一次的mindustry启动失败,这可能是由存在异常的模组导致的。\n\n为了防止循环崩溃,[red]所有模组都被禁用了。[]\n\n如果想关闭这个功能,可以在[accent]设置->游戏->游戏启动崩溃时不禁用模组[]里关闭. +mods.initfailed = [red]⚠[]Mindustry的上一次启动失败了,可能是异常的模组导致的。 \n\n为了防止连续崩溃,[red]所有模组都被禁用了。 []\n\n这个功能可以在[accent]设置->游戏->游戏启动崩溃后禁用模组[]里关闭。 mods = 模组 mods.none = [lightgray]没有找到模组! mods.guide = 模组制作教程 mods.report = 报告 Bug mods.openfolder = 打开模组文件夹 mods.viewcontent = 查看内容 -mods.reload = 重载 -mods.reloadexit = 游戏将退出以重载模组。 -mod.installed = [[已装载] -mod.display = [gray]模组:[orange] {0} +mods.reload = 重新加载 +mods.reloadexit = 游戏将退出以重新加载模组。 +mod.installed = [[已安装] +mod.display = [gray]模组:[orange]{0} mod.enabled = [lightgray]已启用 mod.disabled = [scarlet]已禁用 mod.multiplayer.compatible = [gray]多人游戏兼容性 mod.disable = 禁用 mod.content = 内容: -mod.delete.error = 无法删除模组。文件可能正在使用中。 +mod.delete.error = 无法删除模组。 文件可能正被占用。 mod.requiresversion = [scarlet]所需的最低游戏版本:[accent]{0} -mod.outdated = [scarlet]该模组可能不能在6.0上正确地运行(缺失 minGameVersion: 105) +mod.outdated = [scarlet]该模组可能无法在6.0版本上正确地运行(缺失 minGameVersion: 105) mod.missingdependencies = [scarlet]缺少前置模组:{0} mod.erroredcontent = [scarlet]内容错误 -mod.errors = 读取内容时发生错误. -mod.noerrorplay = [scarlet]您的模组发生了错误.[] 禁用相关模组或修复错误后才能进入游戏. -mod.nowdisabled = [scarlet]“{0}”模组缺少依赖条件:[accent] {1}\n[lightgray]需要先下载上述模组。\n此模组现在将自动禁用。 +mod.errors = 读取内容时发生错误。 +mod.noerrorplay = [scarlet]您的模组发生了错误。 []禁用相关模组或修复错误后才能进入游戏。 +mod.nowdisabled = [scarlet]“{0}”模组缺少依赖的其他模组:[accent]{1}\n[lightgray]需要先下载上述模组。 \n此模组现在将自动禁用。 mod.enable = 启用 -mod.requiresrestart = 需要重启使模组生效。 +mod.requiresrestart = 游戏将退出以应用模组修改。 mod.reloadrequired = [scarlet]需要重启 mod.import = 导入模组 mod.import.file = 导入文件 mod.import.github = 从 GitHub 导入模组 -mod.jarwarn = [scarlet]JAR模组注定存在危险性。[]\n请确保此模组来源安全可靠! -mod.item.remove = 这个物品是[accent] '{0}'[]模组的一部分. 删除物品需要先卸载此模组. -mod.remove.confirm = 此模组将被删除。 -mod.author = [lightgray]作者:[] {0} -mod.missing = 此存档包含您最近已更新或者现在未安装的模组。存档可能会损坏。确定要加载它吗?\n[lightgray]模组:\n{0} -mod.preview.missing = 在创意工坊中发布此模组前,您必须添加一则预览图像。\n请将名为[accent] preview.png[] 的图像放入模组文件夹,然后重试。 -mod.folder.missing = 只有文件夹形式的模组能在创意工坊上发布。\n若要将任何模组转换为文件夹,只需将其文件解压缩到文件夹中并删除旧压缩包,然后重新启动游戏或重新加载模组。 -mod.scripts.disable = 您的设备不支持含有脚本的模组。必须禁用相关模组以进入游戏。 +mod.jarwarn = [scarlet]JAR模组存在天然的危险性。 []\n请确保此模组来源安全可靠! +mod.item.remove = 这个物品是[accent]'{0}'[]模组的一部分。 卸载该模组即可删除此物品。 +mod.remove.confirm = 此模组将被删除。 +mod.author = [lightgray]作者:[]{0} +mod.missing = 此存档包含您最近更新或者尚未安装的模组,加载可能会导致存档损坏。 确定要加载吗?\n[lightgray]模组:\n{0} +mod.preview.missing = 在创意工坊中发布此模组前,您必须添加一张预览图片。 \n请将名为[accent]preview.png[]的图片放入模组文件夹,然后重试。 +mod.folder.missing = 只有文件夹形式的模组能在创意工坊上发布。 \n要将模组转换为文件夹,只需将其文件解压缩到文件夹中并删除压缩包,然后重新启动游戏或重新加载模组。 +mod.scripts.disable = 您的设备不支持含有脚本的模组,必须禁用相关模组才能进入游戏。 about.button = 关于 name = 名字: -noname = 先取一个[accent]玩家名[]。 +noname = 先取一个[accent]玩家名称[]。 planetmap = 行星地图 launchcore = 发射核心 filename = 文件名: unlocked = 解锁了新内容! available = 可研究新科技! +unlock.incampaign = < 在战役中解锁以显示详情 > completed = [accent]己研究 techtree = 科技树 -research.legacy = 发现了 [accent]5.0[] 的研究数据。\n您想要[accent]加载数据[],还是[accent]丢弃数据[]并在新战役中重新研究(建议)? +research.legacy = 发现了[accent]5.0[]版本的研究数据。 \n您想要[accent]加载这些数据[],还是(推荐)[accent]丢弃它们[]并在新战役中重新研究? research.load = 加载 research.discard = 丢弃 research.list = [lightgray]研究: research = 研究 -researched = [lightgray]{0}己研究。 -research.progress = {0}% 完成度 -players = {0} 位玩家在线 -players.single = {0} 位玩家在线 +researched = [lightgray]{0}己研究。 +research.progress = {0}%完成度 +players = {0}名玩家在线 +players.single = {0}名玩家在线 players.search = 搜索 -players.notfound = [gray]没有找到玩家。 -server.closing = [accent]服务器关闭… -server.kicked.kick = 您被踢出了服务器。 -server.kicked.whitelist = 您不在服务器白名单中。 -server.kicked.serverClose = 服务器已关闭。 -server.kicked.vote = 您被投票踢出了服务器。 -server.kicked.clientOutdated = 客户端过旧,请更新您的游戏。 -server.kicked.serverOutdated = 服务器过旧,请联系服务器管理员升级服务器。 -server.kicked.banned = 您在这个服务器上被封禁了。 -server.kicked.typeMismatch = 此服务器与您的不稳定测试版不兼容。 -server.kicked.playerLimit = 服务器已满,请等待一个空位。 -server.kicked.recentKick = 您刚刚被踢出服务器。\n请稍后重新连接! -server.kicked.nameInUse = 您的名字与服务器中的一个人重复了。 -server.kicked.nameEmpty = 无效的名字! -server.kicked.idInUse = 您已经连接了这个服务器!不允许在一台设备上用两个客户端连接。 -server.kicked.customClient = 这个服务器不支持自定义客户端。请下载官方版本。 +players.notfound = [gray]没有找到玩家。 +server.closing = [accent]关闭服务器… +server.kicked.kick = 您被踢出了服务器。 +server.kicked.whitelist = 您不在服务器的白名单中。 +server.kicked.serverClose = 服务器已关闭。 +server.kicked.vote = 您被投票踢出了服务器。 +server.kicked.clientOutdated = 客户端版本过低,请更新您的游戏。 +server.kicked.serverOutdated = 服务器版本过低,请联系服务器管理员升级服务器。 +server.kicked.banned = 您在这个服务器上被封禁了。 +server.kicked.typeMismatch = 此服务器与您的不稳定测试版不兼容。 +server.kicked.playerLimit = 服务器已满,请等待一个空位。 +server.kicked.recentKick = 您最近被踢出过服务器。 \n请稍后重新连接! +server.kicked.nameInUse = 服务器中有人与您重名了。 +server.kicked.nameEmpty = 玩家名称无效。 +server.kicked.idInUse = 您已经连接了这个服务器!不允许重复连接。 +server.kicked.customClient = 这个服务器不支持自行编译的客户端。 请下载官方版本。 server.kicked.gameover = 游戏结束! -server.kicked.serverRestarting = 服务器正在重启. -server.versions = 客户端版本:[accent] {0}[]\n服务器版本:[accent] {1}[] -host.info = [accent]创建局域网游戏[]按钮会在[scarlet] 6567 []端口运行一个服务器。[]\n任何在同一个[lightgray] Wi-Fi 或本地网络[]下的人应该都可以在服务器列表中看到你的服务器。\n\n如果你想让别人在任何地方都能通过 IP 地址连接,你需要设定[accent]端口转发[]。\n\n[lightgray]注意:如果某人无法连接到你的局域网游戏,请确保你在防火墙设置里允许了 Mindustry 访问本地网络。 -join.info = 您可以输入[accent]服务器的 IP 地址[]来连接,或寻找[accent]本地网络[]中的服务器来连接。\n支持局域网或广域网的多人游戏。\n\n[lightgray]注意:没有全球服务器列表;如果你想通过 IP 地址连接某个服务器,你需要向服主询问 IP 地址。 -hostserver = 创建服务器 -invitefriends = 邀请朋友 -hostserver.mobile = 创建\n服务器 +server.kicked.serverRestarting = 服务器正在重启。 +server.versions = 客户端版本:[accent]{0}[]\n服务器版本:[accent]{1}[] +host.info = [accent]创建[]按钮会在[scarlet]6567 []端口启动一个服务器。 []\n同一个[lightgray]Wi-Fi或局域网[]下的玩家,在服务器列表中都应该能看到您的服务器。 \n\n如果您想让别人从任何地方通过IP地址连接,需要设定[accent]端口转发[]。 \n\n[lightgray]注意:如果某人无法连接到您的局域网游戏,请确保在防火墙里设置了允许Mindustry访问本地网络。 注意公有网络有时可能不允许服务器发现。 +join.info = 您可以输入[accent]服务器的IP地址[],也可以寻找[accent]局域网[]或[accent]全局[]中的服务器来连接。 \n支持局域网或广域网的多人游戏。 \n\n[lightgray]如果您想通过IP地址连接某个服务器,需要向服务器建立者询问他的IP地址。 可以在服务器所在的设备上百度“IP地址”来获取。 +hostserver = 创建多人游戏 +invitefriends = 邀请好友 +hostserver.mobile = 创建多人游戏 host = 创建 -hosting = [accent]正在开启服务器… +hosting = [accent]正在启动服务器… hosts.refresh = 刷新 hosts.discovering = 正在搜索局域网服务器 hosts.discovering.any = 正在搜索服务器 server.refreshing = 正在刷新服务器 -hosts.none = [lightgray]未发现局域网游戏! -host.invalid = [scarlet]无法连接服务器。 +hosts.none = [lightgray]未发现局域网服务器! +host.invalid = [scarlet]无法连接服务器。 servers.local = 本地服务器 +servers.local.steam = 公开游戏与本地服务器 servers.remote = 远程服务器 -servers.global = 全球服务器 +servers.global = 社区服务器 -servers.disclaimer=社区服务器[accent]不是[]由开发者拥有或管理。\n\n服务器中可能有其他玩家制作的不适当的内容。 +servers.disclaimer = 社区服务器[accent]并非[]由开发者拥有或管理。 \n\n其中可能有其他玩家制作的,不适合所有年龄段的内容。 servers.showhidden = 显示隐藏的服务器 server.shown = 显示 server.hidden = 隐藏 trace = 跟踪玩家 trace.playername = 玩家名称:[accent]{0} -trace.ip = IP 地址:[accent]{0} -trace.id = 唯一的 ID:[accent]{0} +trace.ip = IP地址:[accent]{0} +trace.id = 玩家 ID:[accent]{0} trace.mobile = 移动客户端:[accent]{0} trace.modclient = 自定义客户端:[accent]{0} trace.times.joined = 进入服务器次数: [accent]{0} trace.times.kicked = 踢出服务器次数: [accent]{0} -invalidid = 无效的客户端 ID!提交一个错误报告。 +invalidid = 无效的客户端ID!提交一个错误报告。 server.bans = 黑名单 server.bans.none = 没有被封禁的玩家! server.admins = 管理员 -server.admins.none = 该服务器没有管理员! +server.admins.none = 没有管理员! server.add = 添加服务器 server.delete = 您确定要删除这个服务器吗? server.edit = 编辑服务器 -server.outdated = [crimson]服务器过旧![] -server.outdated.client = [crimson]客户端过旧![] -server.version = [lightgray]版本:{0} {1} -server.custombuild = [accent]自定义 -confirmban = 确认封禁这名玩家? -confirmkick = 确定踢出这名玩家? -confirmvotekick = 确定投票踢出这名玩家? -confirmunban = 确定取消封禁这名玩家? -confirmadmin = 确定给予这名玩家管理员权限? -confirmunadmin = 确定取消这名玩家的管理员权限? +server.outdated = [scarlet]服务器版本过低![] +server.outdated.client = [scarlet]客户端版本过低![] +server.version = [gray]版本:{0} {1} +server.custombuild = [accent]自行编译 +confirmban = 确定封禁玩家“{0}[white]”? +confirmkick = 确定踢出玩家“{0}[white]”? +confirmvotekick = 确定投票踢出玩家“{0}[white]”? +confirmunban = 确定解封这名玩家? +confirmadmin = 确定给予玩家“{0}[white]”管理员权限? +confirmunadmin = 确定收回玩家“{0}[white]”的管理员权限? joingame.title = 加入游戏 joingame.ip = 地址: -disconnect = 已断开 -disconnect.error = 连接错误。 -disconnect.closed = 连接关闭。 -disconnect.timeout = 连接超时。 -disconnect.data = 读取服务器数据失败! -cantconnect = 无法加入([accent]{0}[])。 +disconnect = 已断开连接 +disconnect.error = 连接错误。 +disconnect.closed = 连接关闭。 +disconnect.timeout = 连接超时。 +disconnect.data = 地图加载失败! +cantconnect = 无法加入游戏([accent]{0}[])。 connecting = [accent]连接中… reconnecting = [accent]重新连接中… -connecting.data = [accent]加载中… +connecting.data = [accent]地图加载中… server.port = 端口: -server.addressinuse = 地址已在使用! +server.addressinuse = 地址已被占用! server.invalidport = 无效的端口! -server.error = [crimson]创建服务器错误:[accent]{0} +server.error = [scarlet]创建服务器错误。 save.new = 新存档 -save.overwrite = 您确定要覆盖这个存档吗? +save.overwrite = 确定要覆盖这个存档吗? overwrite = 覆盖 save.none = 没有找到存档! savefail = 保存失败! -save.delete.confirm = 您确定要删除这个存档吗? +save.delete.confirm = 确定要删除这个存档吗? save.delete = 删除 save.export = 导出存档 -save.import.invalid = [accent]此存档无效! -save.import.fail = [crimson]导入存档失败:[accent]{0} -save.export.fail = [crimson]导出存档失败:[accent]{0} +save.import.invalid = [accent]存档无效! +save.import.fail = [scarlet]导入存档失败:[accent]{0} +save.export.fail = [scarlet]导出存档失败:[accent]{0} save.import = 导入存档 -save.newslot = 保存的名称: +save.newslot = 存档名称: save.rename = 重命名 save.rename.text = 新名称: -selectslot = 选择一个存档。 -slot = [accent]存档位 {0} +selectslot = 选择一个存档。 +slot = [accent]存档位{0} editmessage = 编辑消息 -save.corrupted = [accent]存档损坏或无效!\n如果您刚刚升级了游戏,那么这可能是因为存档格式改变了,而[scarlet]不是[] bug 。 +save.corrupted = 存档损坏或无效! empty = < 空 > on = 开 off = 关 save.autosave = 自动保存:{0} save.map = 地图:{0} save.wave = 波次:{0} -save.mode = 模式:{0} +save.mode = 游戏模式:{0} save.date = 最后保存:{0} save.playtime = 游戏时间:{0} warning = 警告! -confirm = 确认 +confirm = 确定 delete = 删除 view.workshop = 浏览创意工坊 workshop.listing = 编辑创意工坊目录 ok = 确定 open = 打开 -customize = 自定义 +customize = 自定义规则 cancel = 取消 openlink = 打开链接 copylink = 复制链接 back = 返回 max = 最大值 crash.export = 导出崩溃日志 -crash.none = 找不到崩溃日志。 -crash.exported = 崩溃日志已导出。 +crash.none = 未找到崩溃日志。 +crash.exported = 崩溃日志已导出。 data.export = 导出数据 data.import = 导入数据 data.openfolder = 打开数据文件夹 -data.exported = 数据已导出。 -data.invalid = 非有效游戏数据。 -data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。\n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。 +data.exported = 数据已导出。 +data.invalid = 游戏数据无效。 +data.import.confirm = 导入外部游戏数据将覆盖本地[scarlet]全部[]的游戏数据。 \n[accent]此操作无法撤销![]\n\n数据导入后将自动退出游戏。 quit.confirm = 确定退出? loading = [accent]加载中… -reloading = [accent]重载模组中… +downloading = [accent]下载中… saving = [accent]保存中… -respawn = [accent][[{0}][]来重生 -cancelbuilding = [accent][[{0}][]来清除规划 -selectschematic = [accent][[{0}][]来选择复制 -pausebuilding = [accent][[{0}][]来暂停建造 -resumebuilding = [scarlet][[{0}][]来恢复建造 -enablebuilding = [scarlet][[{0}][]来启用建造 -showui = UI已隐藏\n按[accent][[{0}][]显示UI +respawn = 按[accent][[{0}][]键重生 +cancelbuilding = 按[accent][[{0}][]键清除规划 +selectschematic = 按住[accent][[{0}][]键选择复制 +pausebuilding = 按[accent][[{0}][]键暂停建造 +resumebuilding = 按[scarlet][[{0}][]键恢复建造 +enablebuilding = 按[scarlet][[{0}][]键启用建造 +showui = UI已隐藏\n按[accent][[{0}][]键显示UI wave = [accent]第{0}波 wave.cap = [accent]波次 {0}/{1} wave.waiting = [lightgray]下一波倒计时:{0}秒 @@ -335,67 +337,76 @@ wave.enemies = [lightgray]剩余 {0} 个敌人 wave.enemycores = [accent]{0}[lightgray] 敌人核心 wave.enemycore = [accent]{0}[lightgray] 敌人核心 wave.enemy = [lightgray]剩余 {0} 个敌人 -wave.guardianwarn = Boss 将在[accent]{0}[]波后到来。 -wave.guardianwarn.one = Boss 将在[accent]{0}[]波后到来。 +wave.guardianwarn = Boss 将在[accent]{0}[]波后到来。 +wave.guardianwarn.one = Boss 将在[accent]{0}[]波后到来。 loadimage = 加载图片 saveimage = 保存图片 unknown = 未知 custom = 自定义 -builtin = 内置的 -map.delete.confirm = 您确定想要删除这张地图吗?这个操作无法撤销! +builtin = 内置 +map.delete.confirm = 您确定要删除这张地图吗?这个操作无法撤销! map.random = [accent]随机地图 -map.nospawn = 这个地图没有核心!请在编辑器中添加一个[royal]己方[]的核心。 -map.nospawn.pvp = 这个地图没有敌人的核心!请在编辑器中添加一个[royal]敌人[]的核心。 -map.nospawn.attack = 这个地图没有敌人的核心!请在编辑中向地图添加一个[scarlet]敌人[]的核心。 -map.invalid = 地图载入错误:地图文件可能已经损坏。 +map.nospawn = 这个地图缺少己方核心!请在地图编辑器中添加一个[#{0}]{1}[]队的核心。 +map.nospawn.pvp = 这个地图缺少对方核心!请在地图编辑器中添加一个[scarlet]除黄队以外[]的核心。 +map.nospawn.attack = 这个地图缺少敌方核心!请在地图编辑器中添加一个[#{0}]{1}[]队的核心。 +map.invalid = 地图载入错误:地图文件可能已经损坏。 workshop.update = 更新地图 workshop.error = 获取创意工坊详细信息时出错:{0} -map.publish.confirm = 确定上传此地图?\n\n[lightgray]确定您同意 Steam 创意工坊的最终用户许可协议,否则您的地图将不会被展示! -workshop.menu = 选择此项目的目的。 +map.publish.confirm = 确定上传此地图?\n\n[lightgray]确定您同意Steam创意工坊的最终用户许可协议,否则您的地图将无法展示! +workshop.menu = 选择要对此项目进行的操作。 workshop.info = 项目信息 changelog = 更新日志(可选): -eula = Steam 最终用户许可协议 -missing = 此项目已被删除或转移。\n[lightgray]链接已在创意工坊中被删除。 -publishing = [accent]正在发布... -publish.confirm = 确定发布?\n\n[lightgray]请确认您已经同意创意工坊的最终用户许可协议,否则您的项目不会展示! -publish.error = 发布项目出错:{0} -steam.error = 初始化 Steam 服务失败。\n错误:{0} +eula = Steam最终用户许可协议 +missing = 此项目已被删除或转移。 \n[lightgray]链接已在创意工坊中被删除。 +publishing = [accent]正在发布… +publish.confirm = 确定发布?\n\n[lightgray]请确认您同意创意工坊的最终用户许可协议,否则您的项目无法展示! +publish.error = 发布项目时出错:{0} +steam.error = 初始化Steam服务失败。 \n错误:{0} -editor.brush = 笔刷 -editor.openin = 在编辑器中打开 -editor.oregen = 矿物的生成 -editor.oregen.info = 矿物的生成: +editor.cliffs = 所有墙壁\n替换为悬崖 +editor.brush = 笔触大小 +editor.openin = 用地图编辑器打开 +editor.oregen = 矿脉的生成 +editor.oregen.info = 矿脉的生成: editor.mapinfo = 地图信息 editor.author = 作者: editor.description = 描述: -editor.nodescription = 地图发布前,描述不得少于4个字符。 -editor.waves = 波数: +editor.nodescription = 地图需要至少4个字符的描述才能发布。 +editor.waves = 波次: editor.rules = 规则: -editor.generation = 筛选器: +editor.generation = 地形生成器: editor.ingame = 游戏内编辑 editor.publish.workshop = 上传到创意工坊 editor.newmap = 新地图 editor.center = 居中 workshop = 创意工坊 -waves.title = 波数 +waves.title = 波次 waves.remove = 移除 waves.every = 每 waves.waves = 波 -waves.perspawn = 每次生成 +waves.perspawn = 每波 waves.shields = 护盾/波 waves.to = 至 +waves.max = 最大单位数 waves.guardian = Boss waves.preview = 预览 waves.edit = 编辑… waves.copy = 复制到剪贴板 waves.load = 从剪贴板读取 -waves.invalid = 剪贴板中的波次信息无效。 -waves.copied = 波次信息已复制。 -waves.none = 没有定义敌人。\n请注意,这将自动替换为默认的敌人列表。 +waves.invalid = 剪贴板中的波次信息无效。 +waves.copied = 波次信息已复制。 +waves.none = 没有定义敌人波次。 \n注意,这将自动替换为默认的波次列表。 +waves.sort = 排序方式 +waves.sort.reverse = 反向排序 +waves.sort.begin = 出场顺序 +waves.sort.health = 生命值 +waves.sort.type = 类型 +waves.units.hide = 全部隐藏 +waves.units.show = 全部显示 -#these are intentionally in lower case +#these are intentionally in lower case(中文无关) wavemode.counts = 数目 -wavemode.totals = 总和 +wavemode.totals = 总数 wavemode.health = 生命值 editor.default = [lightgray]<默认> @@ -405,100 +416,100 @@ editor.name = 名称: editor.spawn = 生成单位 editor.removeunit = 移除单位 editor.teams = 队伍 -editor.errorload = 读取文件出错:\n[accent]{0} -editor.errorsave = 保存文件出错:\n[accent]{0} -editor.errorimage = 这是一幅图片,不是地图。请不要更改文件的扩展名来导入。\n\n如果您想导入地图,请在编辑器中使用“导入地图”按钮。 -editor.errorlegacy = 此地图太旧了,旧的地图格式已不再支持。 -editor.errornot = 这不是地图文件。 -editor.errorheader = 此地图文件无效或已损坏。 -editor.errorname = 地图没有定义名称。是否要加载一个存档文件? +editor.errorload = 读取文件出错。 +editor.errorsave = 保存文件出错。 +editor.errorimage = 这是一幅图片,而不是地图。 +editor.errorlegacy = 此地图太旧了,旧的地图格式已不再支持。 +editor.errornot = 这不是地图文件。 +editor.errorheader = 此地图文件无效或已损坏。 +editor.errorname = 地图没有定义名称。 加载的可能是存档文件? editor.update = 更新 -editor.randomize = 随机化 +editor.randomize = 重新生成 editor.apply = 应用 -editor.generate = 生成 -editor.resize = 调整大小 +editor.generate = 自动生成 +editor.resize = 改变尺寸 editor.loadmap = 载入地图 editor.savemap = 保存地图 editor.saved = 已保存! -editor.save.noname = 您的地图没有名字!在“地图信息”菜单里设置一个。 -editor.save.overwrite = 您的地图覆盖了一个内置的地图!在“地图信息”菜单里重新设置一个不同的名称。 +editor.save.noname = 您还没有指定地图的名称!在“地图信息”菜单里设置一个名称。 +editor.save.overwrite = 您正试图覆盖一张内置地图!在“地图信息”菜单里重新设置一个其他的名称。 editor.import.exists = [scarlet]无法导入:[]存在名为“{0}”的内置地图! editor.import = 导入… -editor.importmap = 导入地图 -editor.importmap.description = 导入一个已经存在的地图 +editor.importmap = 加载地图 +editor.importmap.description = 加载一张已经存在的地图 editor.importfile = 导入文件 -editor.importfile.description = 导入一个外置的地图文件 -editor.importimage = 导入地形图像 -editor.importimage.description = 导入一个外置的地图图像文件 +editor.importfile.description = 从游戏外导入一个地图文件 +editor.importimage = 导入图片 +editor.importimage.description = 从游戏外导入一个地图图片文件 editor.export = 导出… editor.exportfile = 导出文件 editor.exportfile.description = 导出一个地图文件 -editor.exportimage = 导出一个地形文件 -editor.exportimage.description = 导出一个地图图像文件 +editor.exportimage = 导出地形图片 +editor.exportimage.description = 将地形导出为一个图片文件 editor.loadimage = 导入地形 editor.saveimage = 导出地形 -editor.unsaved = [scarlet]更改未保存![]\n确定退出? -editor.resizemap = 调整地图大小 +editor.unsaved = 确定退出?\n[scarlet]未保存的更改将会丢失! +editor.resizemap = 改变地图尺寸 editor.mapname = 地图名称: -editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。 -editor.overwrite.confirm = [scarlet]警告![]存在同名地图。你确定你想要覆盖? -editor.exists = 已经存在同名地图。 -editor.selectmap = 选择一个地图加载: +editor.overwrite = [accent]警告!\n这将会覆盖一个已经存在的地图。 +editor.overwrite.confirm = [scarlet]警告![]存在同名地图。 要覆盖吗?\n"[accent]{0}[]" +editor.exists = 存在同名地图。 +editor.selectmap = 加载一张地图: -toolmode.replace = 替换 -toolmode.replace.description = 仅在实心块上绘制。 +toolmode.replace = 墙壁替换 +toolmode.replace.description = 仅在墙壁上绘制墙壁。 toolmode.replaceall = 全部替换 -toolmode.replaceall.description = 替换地图中的所有方块。 -toolmode.orthogonal = 正交线 -toolmode.orthogonal.description = 只绘制正交线。 +toolmode.replaceall.description = 替换地图中所有同类地形。 +toolmode.orthogonal = 水平/垂直线 +toolmode.orthogonal.description = 只绘制水平/垂直线。 toolmode.square = 方形 -toolmode.square.description = 方形刷子 -toolmode.eraseores = 清除矿物 -toolmode.eraseores.description = 只清除矿物。 +toolmode.square.description = 将笔触改为正方形。 +toolmode.eraseores = 擦除矿脉 +toolmode.eraseores.description = 仅擦除矿脉,不影响其他物体。 toolmode.fillteams = 填充队伍 -toolmode.fillteams.description = 填充队伍而不是方块。 +toolmode.fillteams.description = 不再填充方块,而是填充队伍颜色。 toolmode.drawteams = 绘制队伍 -toolmode.drawteams.description = 绘制队伍而不是方块。 +toolmode.drawteams.description = 不再绘制方块,而是绘制队伍颜色。 -filters.empty = [lightgray]没有过滤条件!用下方的按钮添加。 +filters.empty = [lightgray]未创建生成器!用下方的按钮来创建。 -filter.distort = 扭曲程度 -filter.noise = 波动程度 +filter.distort = 扭曲 +filter.noise = 地表随机化 filter.enemyspawn = 敌人生成点选择 -filter.spawnpath = 敌人生成途径 +filter.spawnpath = 敌人生成路径 filter.corespawn = 核心降落点选择 -filter.median = 平均数 -filter.oremedian = 矿物平均数 -filter.blend = 混合程度 -filter.defaultores = 默认矿物 -filter.ore = 矿物 -filter.rivernoise = 河流波动程度 +filter.median = 地形圆润化 +filter.oremedian = 矿脉圆润化 +filter.blend = 镶边 +filter.defaultores = 默认的矿脉生成规则 +filter.ore = 矿脉生成 +filter.rivernoise = 河流随机化 filter.mirror = 镜像 -filter.clear = 清理 +filter.clear = 替换 filter.option.ignore = 忽略 -filter.scatter = 分散程度 -filter.terrain = 地形 +filter.scatter = 散布 +filter.terrain = 地图边界 -filter.option.scale = 规模大小 -filter.option.chance = 几率大小 -filter.option.mag = 巨大程度 -filter.option.threshold = 最大阈值 -filter.option.circle-scale = 圆规模 -filter.option.octaves = 递增 -filter.option.falloff = 递减 -filter.option.angle = 角度大小 -filter.option.rotate = 旋转 +filter.option.scale = 缩放 +filter.option.chance = 散布数量 +filter.option.mag = 渗透 +filter.option.threshold = 比例 +filter.option.circle-scale = 半径 +filter.option.octaves = 蔓延 +filter.option.falloff = 分散 +filter.option.angle = 角度 +filter.option.rotate = 中心对称 filter.option.amount = 数量 -filter.option.block = 方块 -filter.option.floor = 地面 -filter.option.flooronto = 地面目标 -filter.option.target = 目标 -filter.option.replacement = 替换 +filter.option.block = 地表方块 +filter.option.floor = 地表 +filter.option.flooronto = 替换目标 +filter.option.target = 替换目标 +filter.option.replacement = 替换为 filter.option.wall = 墙 -filter.option.ore = 矿物 -filter.option.floor2 = 二重地面 -filter.option.threshold2 = 二重阈值 -filter.option.radius = 半径大小 +filter.option.ore = 矿脉 +filter.option.floor2 = 内层地形 +filter.option.threshold2 = 内层比例 +filter.option.radius = 半径 filter.option.percentile = 百分比 width = 宽度: @@ -506,55 +517,56 @@ height = 高度: menu = 菜单 play = 开始游戏 campaign = 战役模式 -load = 载入游戏 +load = 读取 save = 保存 -fps = FPS:{0} +fps = 帧数:{0} ping = 延迟:{0}毫秒 tps = TPS: {0} -memory = 内存: {0}mb -memory2 = 内存:\n {0}mb +\n {1}mb -language.restart = 为了使语言设置生效请重启游戏。 +memory = 内存:{0}MB +memory2 = 内存:\n {0}MB +\n {1}MB +language.restart = 重启游戏后语言设置才能生效。 settings = 设置 tutorial = 教程 tutorial.retake = 重玩教程 -editor = 编辑器 +editor = 地图编辑器 mapeditor = 地图编辑器 abandon = 放弃 -abandon.text = 这个区域及其资源会被敌人重置。 -locked = 已锁定 -complete = [lightgray]完成: -requirement.wave = {1}中的第{0}波次 -requirement.core = 在{0}中摧毁敌方核心 -requirement.research = 研究 {0} -requirement.produce = 生产 {0} -requirement.capture = 占领 {0} +abandon.text = 这个区块及其资源会落入敌人之手。 +locked = 锁定 +complete = [lightgray]解锁条件: +requirement.wave = 在{1}坚持到第{0}波 +requirement.core = 摧毁{0}的敌方核心 +requirement.research = 研究{0} +requirement.produce = 生产{0} +requirement.capture = 占领{0} launch.text = 发射 -research.multiplayer = 仅有服主可研究物品。 -map.multiplayer = 仅有服主可查看区域。 -uncover = 解锁 -configure = 设定装运的数量 +research.multiplayer = 只有服务器创建者能研究科技。 +map.multiplayer = 只有服务器创建者能查看区块。 +uncover = 已解锁 +configure = 设定装运的物资 loadout = 装运 resources = 资源 bannedblocks = 禁用建筑 -addall = 添加所有 -launch.from = 发射地: [accent]{0} -launch.destination = 目的地: {0} -configure.invalid = 数量必须是0到{0}之间的数字。 +bannedunits = 禁用单位 +addall = 全部装运 +launch.from = 发射自:[accent]{0} +launch.destination = 目的地:{0} +configure.invalid = 数量必须在0到{0}之间。 add = 添加… -guardian = 守卫者 +guardian = Boss -connectfail = [crimson]服务器连接失败:[accent]{0} -error.unreachable = 无法访问服务器。\n确定输对地址了吗? -error.invalidaddress = 地址无效。 +connectfail = [scarlet]服务器连接失败:\n\n[accent]{0} +error.unreachable = 无法访问服务器。 \n请检查输入的地址。 +error.invalidaddress = 地址无效。 error.timedout = 连接超时!\n请确认服务器设置了端口转发且地址无误! -error.mismatch = 数据包错误。\n可能是客户端/服务器的版本不匹配。\n请确保客户端和服务器都是最新的版本! -error.alreadyconnected = 已连接。 +error.mismatch = 数据包错误。 \n可能是客户端/服务器的版本不匹配。 \n请确保客户端和服务器都是最新的版本! +error.alreadyconnected = 已经建立连接。 error.mapnotfound = 找不到地图文件! -error.io = 网络 I/O 错误。 -error.any = 未知网络错误。 -error.bloom = 未能初始化特效。\n您的设备可能不支持。 +error.io = 网络I/O错误。 +error.any = 未知网络错误。 +error.bloom = 未能初始化特效。 \n您的设备可能不支持。 weather.rain.name = 降雨 weather.snow.name = 降雪 @@ -562,31 +574,33 @@ weather.sandstorm.name = 沙尘暴 weather.sporestorm.name = 孢子风暴 weather.fog.name = 雾 +sectorlist = 区块列表 +sectorlist.attacked = {0}遭到攻击 sectors.unexplored = [lightgray]未探索 -sectors.resources = 资源: -sectors.production = 产出: -sectors.export = 输出: -sectors.import = 输入: -sectors.time = 时间: -sectors.threat = 威胁: -sectors.wave = 进攻波: -sectors.stored = 贮存: +sectors.resources = 资源: +sectors.production = 产出: +sectors.export = 输出: +sectors.import = 输入: +sectors.time = 时间: +sectors.threat = 威胁: +sectors.wave = 波次: +sectors.stored = 贮存: sectors.resume = 继续 sectors.launch = 发射 sectors.select = 选择 -sectors.nonelaunch = [lightgray]无 (太阳) +sectors.nonelaunch = [lightgray]无(太阳) sectors.rename = 重命名区块 -sectors.enemybase = [scarlet]敌人基地 +sectors.enemybase = [scarlet]敌方基地 sectors.vulnerable = [scarlet]易受攻击 -sectors.underattack = [scarlet]遭到攻击![accent]{0}% 损毁度 -sectors.survives = [accent]存活{0}波 +sectors.underattack = [scarlet]遭到攻击![accent]{0}%损毁度 +sectors.survives = [accent]已坚持{0}波 sectors.go = 进入 sector.curcapture = 区块已占领 sector.curlost = 区块已丢失 -sector.missingresources = [scarlet]核心资源不足 +sector.missingresources = [scarlet]建造核心所需资源不足 sector.attacked = 区块[accent]{0}[white]受到攻击! sector.lost = 区块[accent]{0}[white]已丢失! -#note: the missing space in the line below is intentional +#note: the missing space in the line below is intentional(中文无关) sector.captured = 区块[accent]{0}[white]已占领! sector.changeicon = 更改图标 @@ -617,122 +631,126 @@ sector.biomassFacility.name = 生物质合成区 sector.windsweptIslands.name = 风吹群岛 sector.extractionOutpost.name = 萃取前哨 sector.planetaryTerminal.name = 行星发射终端 +sector.coastline.name = 边际海湾 +sector.navalFortress.name = 海军要塞 -sector.groundZero.description = 踏上旅程的最佳位置。这儿的敌人威胁很小,但资源也少。\n收集尽可能多的铅和铜。\n出发吧! -sector.frozenForest.description = 即使是靠近山脉的这里,孢子也已经扩散。他们不能长期停留在寒冷的温度中。\n\n开始运用电力。建造火力发电机并学会使用修理者。 -sector.saltFlats.description = 在沙漠的郊区有盐滩。在这个地方几乎找不到资源。\n\n敌人在这里建立了一个资源存储区。摧毁他们的核心。不要留下任何东西。 -sector.craters.description = 水在这个火山口积聚,这是旧战争的遗迹。夺下该区域。收集沙子来冶炼玻璃。用水泵抽水来加速炮塔和钻头。 -sector.ruinousShores.description = 穿过荒地,就是海岸线。这个地方曾经建造了一个海岸防御线。但现在所剩无几,只有最基本的防御结构仍然毫发无损,其他一切都被摧毁了。\n继续向外扩展。继续研究科技。 -sector.stainedMountains.description = 在更远的内陆地区是山脉,但这里没有被孢子污染。\n这一地区分布着丰富的钛,学习如何使用它。\n\n这里的敌人势力更大,不要给他们时间派出最强的部队。 -sector.overgrowth.description = 这个地区靠近孢子的来源,因此生长过度。\n敌人在这里建立了一个前哨站。建造尖刀单位来摧毁它并找回丢失的东西。 -sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。它少数几个有石油储量的地区之一。\n尽管被废弃,这附近仍有一些危险的敌方单位。不要低估他们。\n\n[lightgray]如果可能,研究石油加工技术。 -sector.desolateRift.description = 非常危险的区域。这儿的资源丰富但空间很小。敌人十分危险。尽快离开,不要被敌人的攻击间隔太长所愚弄。 -sector.nuclearComplex.description = 以前生产和加工钍的设施已变成废墟。\n[lightgray]研究钍及其多种用途。\n\n敌人在这里大量存在,不断消灭入侵者。 -sector.fungalPass.description = 介于高山和低矮孢子丛生的土地之间的过渡地带。这里有一个小型的敌方侦察基地。\n侦察它。\n使用尖刀和爬行者单位来摧毁两个核心。 -sector.biomassFacility.description = 孢子的发源地。这里有最初研究和生产孢子的设施。\n研究这里的科技,培养孢子来制造燃料和混合物。\n\n[lightgray]设施损毁后,孢子散播了出去,原生生态系统无法抵挡这种外来物种。 -sector.windsweptIslands.description = 海岸线之外坐落着这一串群岛。据记载这里曾有生产[accent]塑钢[]的建筑。\n\n抵御敌人的海军,在岛上建立基地,研究这些工厂。 -sector.extractionOutpost.description = 一座遥远的前哨,敌人为了向其他区域发射资源而建立。\n\n跨区域运输技术是征服这个星球不可或缺的技术。摧毁敌人基地,研究发射台。 -sector.impact0078.description = 这里有最初进入这个星系的星际运输船的遗迹。\n\n回收可以利用的资源,研究科技。 -sector.planetaryTerminal.description = 最终目标。\n\n这座滨海基地有一个可以将核心发射到其他行星的建筑,防卫森严。\n\n制造海军单位,尽快消灭敌人,研究发射建筑。 +sector.groundZero.description = 踏上旅程的最佳位置。 这里的敌人威胁很小,但资源也少。 \n\n尽你所能收集铅和铜,出发吧! +sector.frozenForest.description = 一个靠近山脉的地方。 哪怕是在这里,也有了孢子扩散的痕迹。 \n不过它们无法在低温下长期存活。 \n\n开始运用电力,建造火力发电机并学会使用修理器。 +sector.saltFlats.description = 盐碱荒滩,位于沙漠的边缘地带,几乎没有什么资源。 \n敌人在这里建立了一个资源存储区。 \n\n摧毁他们的核心,片甲不留。 +sector.craters.description = 这片陨石地带有积水,它也是旧时战争的遗迹。 \n\n夺下该区块,收集沙子来冶炼玻璃。 \n用水泵抽水来加速炮塔和钻头。 +sector.ruinousShores.description = 穿过荒地就是海滩。 \n这里曾经有一条海岸防线,但现在已所剩无几。 \n一些基础的防御建筑还完好无损,除此之外都变成了废墟。 \n\n继续向外扩张并研究科技。 +sector.stainedMountains.description = 深入内陆地区便是山脉,这里目前还未被孢子污染。 \n敌人势力更加强大,别给他们的精锐部队留下喘息之机。\n\n这一地区分布着丰富的钛,试着开采并利用它。 +sector.overgrowth.description = 这里的孢子靠近它最初的发源地,因此得以疯狂生长。 \n\n敌人在此处建立了一个前哨站,建造尖刀单位来摧毁它。 +sector.tarFields.description = 产油区边缘,位于山脉和沙漠之间。 它是为数不多蕴藏了石油的地区之一。 \n尽管这里一片废墟,附近仍有一些危险的敌方单位。 不要低估他们。 \n\n[lightgray]尽你所能研究石油加工技术。 +sector.desolateRift.description = 非常危险的区块,资源丰富但空间狭窄,敌人也十分危险。 \n\n尽快离开,不要因敌人的进攻间隔太长而掉以轻心。 +sector.nuclearComplex.description = 曾用来生产加工钍的设施,如今已变成了废墟。 \n这里有大量的敌人,不断搜寻着入侵者。\n\n[lightgray]研究钍以及它的各种用途。 +sector.fungalPass.description = 一边是高山,另一边是孢子丛生的平原。 \n这里有一个敌方的小型侦察基地,摧毁它。 \n\n使用尖刀和爬行者单位,摧毁两个核心。 +sector.biomassFacility.description = 孢子的发源地,有研究和生产孢子的原始设施。 \n[lightgray]设施损毁后,孢子散播了出去,原生生态系统完全无法抵挡这种外来物种。 \n\n研究这里的科技,培养孢子来制造燃料和聚合物。 +sector.windsweptIslands.description = 海岸线之外坐落着这一串群岛。 据记载这里曾有生产[accent]塑钢[]的建筑。\n\n抵御敌人的海军,在岛上建立基地,研究生产建筑。 +sector.extractionOutpost.description = 一座遥远的前哨,敌人建造它来向其他区块发射资源。 \n跨区块运输是征服这个星球不可或缺的一项技术。 \n\n摧毁敌人基地,研究发射台。 +sector.impact0078.description = 最初进入这个星系的星际运输船,残骸留在了这里。 \n\n尽量回收可以利用的资源,研究科技。 +sector.planetaryTerminal.description = 最终目标。 \n这座滨海基地有一个可以将核心发射到其他行星的建筑,防卫森严。 \n\n制造海军单位,尽快消灭敌人,研究发射建筑。 status.burning.name = 燃烧 -status.freezing.name = 冰冻 +status.freezing.name = 冻结 status.wet.name = 潮湿 status.muddy.name = 泥泞 status.melting.name = 熔化 -status.sapped.name = 削弱 -status.electrified.name = 麻痹 +status.sapped.name = 弱化 +status.electrified.name = 电磁紊乱 status.spore-slowed.name = 孢子减速 status.tarred.name = 油浸 +status.overdrive.name = 过载 status.overclock.name = 超频 status.shocked.name = 电击 status.blasted.name = 爆炸 status.unmoving.name = 静止 +status.boss.name = Boss settings.language = 语言 settings.data = 游戏数据 -settings.reset = 恢复默认设置 +settings.reset = 全部恢复默认 settings.rebind = 重新绑定 -settings.resetKey = 重置按键 +settings.resetKey = 恢复默认 settings.controls = 控制 settings.game = 游戏 settings.sound = 声音 -settings.graphics = 图像 +settings.graphics = 图形 settings.cleardata = 清除游戏数据… -settings.clear.confirm = 您确定要清除此数据?\n此操作无法撤销! -settings.clearall.confirm = [scarlet]警告![]\n这将清除所有数据,包括存档、地图、解锁和按键绑定。\n按「是」后,游戏将删除所有数据并自动退出。 -settings.clearsaves.confirm = 您确定要清除存档? +settings.clear.confirm = 确定清除此数据?\n此操作无法撤销! +settings.clearall.confirm = [scarlet]警告![]\n这将清除所有数据,包括存档、 地图、 解锁进度和按键绑定。 \n按“确定”后,游戏将删除所有数据并自动退出。 +settings.clearsaves.confirm = 确定清除所有存档? settings.clearsaves = 清除存档 settings.clearresearch = 清除研究进度 -settings.clearresearch.confirm = 您确定要清除战役研究进度? +settings.clearresearch.confirm = 确定清除战役研究进度? settings.clearcampaignsaves = 清除战役进度 -settings.clearcampaignsaves.confirm = 您确定要清除战役进度? +settings.clearcampaignsaves.confirm = 确定清除战役进度? paused = [accent]< 暂停 > clear = 清除 -banned = [scarlet]已禁止 +banned = [scarlet]禁用 unsupported.environment = [scarlet]不支持的环境 yes = 是 no = 否 -info.title = [accent]详情 -error.title = [crimson]发生了一个错误 +info.title = 详情 +error.title = [scarlet]发生了一个错误 error.crashtitle = 发生了一个错误 -unit.nobuild = [scarlet]单位未能建造 -lastaccessed = [lightgray]上次操作: {0} -block.unknown = [lightgray]??? +unit.nobuild = [scarlet]不能建造单位 +lastaccessed = [lightgray]上次操作:{0} +block.unknown = [lightgray]?? -stat.showinmap = <加载地图以展示> +stat.showinmap = <进入地图后显示> stat.description = 介绍 stat.input = 输入 stat.output = 输出 -stat.booster = 增强物品/液体 -stat.tiles = 所需地型 -stat.affinities = 相关 -stat.opposites = 对立 -stat.powercapacity = 能量容量 -stat.powershot = 能量/发射 +stat.booster = 强化所需 +stat.tiles = 所需地形 +stat.affinities = 影响因素 +stat.opposites = 互斥 +stat.powercapacity = 电力容量 +stat.powershot = 电力/发 stat.damage = 伤害 stat.targetsair = 攻击空中单位 stat.targetsground = 攻击地面单位 stat.itemsmoved = 移动速度 -stat.launchtime = 发射间隔时间 +stat.launchtime = 发射间隔 stat.shootrange = 范围 stat.size = 尺寸 stat.displaysize = 显示尺寸 stat.liquidcapacity = 液体容量 -stat.powerrange = 能量范围 +stat.powerrange = 连接范围 stat.linkrange = 连接范围 -stat.instructions = 指令数量 -stat.powerconnections = 最多连接 -stat.poweruse = 使用能量 -stat.powerdamage = 功率/损伤 +stat.instructions = 指令运行速度 +stat.powerconnections = 最大连接数 +stat.poweruse = 消耗电力 +stat.powerdamage = 电力/伤害 stat.itemcapacity = 物品容量 stat.memorycapacity = 内存容量 -stat.basepowergeneration = 基础能源输出 +stat.basepowergeneration = 基础电力输出 stat.productiontime = 生产时间 stat.repairtime = 建筑完全修复时间 -stat.repairspeed = 修复速度 +stat.repairspeed = 修理速度 stat.weapons = 武器 stat.bullet = 子弹 stat.speedincrease = 提速 stat.range = 范围 stat.drilltier = 可钻探矿物 stat.drillspeed = 基础钻探速度 -stat.boosteffect = 增强效果 +stat.boosteffect = 强化效果 stat.maxunits = 最大单位数量 stat.health = 生命值 stat.armor = 护甲 stat.buildtime = 建造时间 -stat.maxconsecutive = 最大连续 +stat.maxconsecutive = 连续放置限制 stat.buildcost = 建造花费 -stat.inaccuracy = 误差 +stat.inaccuracy = 射击误差 stat.shots = 发射数 -stat.reload = 每秒发射数 +stat.reload = 开火速率 stat.ammo = 弹药 -stat.shieldhealth = 盾容 +stat.shieldhealth = 护盾容量 stat.cooldowntime = 冷却时间 stat.explosiveness = 爆炸性 -stat.basedeflectchance = 基础反射几率 -stat.lightningchance = 激发闪电几率 +stat.basedeflectchance = 基础反射概率 +stat.lightningchance = 激发闪电概率 stat.lightningdamage = 激发闪电伤害 stat.flammability = 燃烧性 stat.radioactivity = 放射性 @@ -740,44 +758,44 @@ stat.charge = 放电性 stat.heatcapacity = 热容量 stat.viscosity = 粘度 stat.temperature = 温度 -stat.speed = 速度 +stat.speed = 移动速度 stat.buildspeed = 建造速度 stat.minespeed = 采矿速度 -stat.minetier = 采矿等级 -stat.payloadcapacity = 载货容量 +stat.minetier = 可采集矿物 +stat.payloadcapacity = 载荷容量 stat.commandlimit = 指挥上限 -stat.abilities = 能力 -stat.canboost = 是否能助推 -stat.flying = 是否能飞行 -stat.ammouse = 弹药消耗 +stat.abilities = 技能 +stat.canboost = 可助推 +stat.flying = 空中单位 +stat.ammouse = 弹药 stat.damagemultiplier = 伤害倍率 -stat.healthmultiplier = 生命倍率 -stat.speedmultiplier = 移速倍率 -stat.reloadmultiplier = 射速倍率 +stat.healthmultiplier = 生命值倍率 +stat.speedmultiplier = 移动速度倍率 +stat.reloadmultiplier = 开火速率倍率 stat.buildspeedmultiplier = 建造速度倍率 -stat.reactive = 反应性 +stat.reactive = 反应 stat.healing = 治疗 ability.forcefield = 力墙场 ability.repairfield = 修复场 -ability.statusfield = 状态场 -ability.unitspawn = {0} 单位工厂 +ability.statusfield = {0}状态场 +ability.unitspawn = {0}单位工厂 ability.shieldregenfield = 护盾再生场 ability.movelightning = 闪电助推器 -ability.energyfield = 能量场: [accent]{0}[] 伤害 ~ [accent]{1}[] 格 / [accent]{2}[] 目标数 +ability.energyfield = 能量场:[accent]{0}[]伤害~[accent]{1}[]格/[accent]{2}[]目标 bar.drilltierreq = 需要更高级的钻头 -bar.noresources = 缺失资源 -bar.corereq = 缺失核心基座 +bar.noresources = 资源不足 +bar.corereq = 需要核心基座 bar.drillspeed = 挖掘速度:{0}/秒 -bar.pumpspeed = 泵压速度:{0}/秒 +bar.pumpspeed = 泵送速度:{0}/秒 bar.efficiency = 效率:{0}% bar.boost = 超速:+{0}% -bar.powerbalance = 能量:{0}/秒 -bar.powerstored = 储能:{0}/{1} -bar.poweramount = 能量:{0} -bar.poweroutput = 能量输出:{0} -bar.powerlines = 链接:{0}/{1} +bar.powerbalance = 电力:{0}/秒 +bar.powerstored = 电力储存:{0}/{1} +bar.poweramount = 电力:{0} +bar.poweroutput = 电力输出:{0} +bar.powerlines = 连接数:{0}/{1} bar.items = 物品:{0} bar.capacity = 容量:{0} bar.unitcap = {0} {1}/{2} @@ -787,76 +805,76 @@ bar.power = 电力 bar.progress = 制造进度 bar.input = 输入 bar.output = 输出 -bar.strength = [stat]{0}[lightgray]x 效率 +bar.strength = [stat]{0}[lightgray]x效率 units.processorcontrol = [lightgray]由处理器控制 -bullet.damage = [stat]{0}[lightgray] 伤害 -bullet.splashdamage = [stat]{0}[lightgray] 范围伤害 ~[stat] {1}[lightgray] 格 -bullet.incendiary = [stat] 燃烧 -bullet.homing = [stat] 追踪 -bullet.frag = [stat] 分裂 -bullet.lightning = [stat]{0}[lightgray]x 电弧 ~ [stat]{1}[lightgray] 伤害 -bullet.buildingdamage = [stat]{0}%[lightgray] 对建筑伤害 -bullet.knockback = [stat]{0}[lightgray] 击退 -bullet.pierce = [stat]{0}[lightgray]x 穿透 -bullet.infinitepierce = [stat] 贯穿 -bullet.healpercent = [stat]{0}[lightgray]% 修复 -bullet.multiplier = [stat]{0}[lightgray]x 装弹数量 -bullet.reload = [stat]{0}[lightgray]x 装弹速度 +bullet.damage = [stat]{0}[lightgray]伤害 +bullet.splashdamage = [stat]{0}[lightgray]范围伤害~[stat] {1}[lightgray]格 +bullet.incendiary = [stat]燃烧 +bullet.homing = [stat]追踪 +bullet.frags = [stat]{0}[lightgray]x分裂子弹: +bullet.lightning = [stat]{0}[lightgray]x闪电~[stat]{1}[lightgray]伤害 +bullet.buildingdamage = [stat]{0}%[lightgray]对建筑伤害 +bullet.knockback = [stat]{0}[lightgray]击退 +bullet.pierce = [stat]{0}[lightgray]x穿透 +bullet.infinitepierce = [stat]无限穿透 +bullet.healpercent = [stat]{0}[lightgray]%修复 +bullet.multiplier = [stat]{0}[lightgray]x装填倍数 +bullet.reload = [stat]{0}[lightgray]x开火速率 -unit.blocks = 方块 -unit.blockssquared = 方块² -unit.powersecond = 能量/秒 +unit.blocks = 格 +unit.blockssquared = 格² +unit.powersecond = 电力/秒 unit.tilessecond = 格/秒 unit.liquidsecond = 液体/秒 unit.itemssecond = 物品/秒 unit.liquidunits = 液体 -unit.powerunits = 能量 +unit.powerunits = 电力 unit.degrees = 度 unit.seconds = 秒 unit.minutes = 分 unit.persecond = /秒 unit.perminute = /分 -unit.timesspeed = 倍 速度 +unit.timesspeed = x速度 unit.percent = % -unit.shieldhealth = 盾容 +unit.shieldhealth = 护盾容量 unit.items = 物品 unit.thousands = K unit.millions = M unit.billions = B unit.pershot = /发 -category.purpose = 介绍 -category.general = 普通 -category.power = 能量 +category.purpose = 用途 +category.general = 基础 +category.power = 电力 category.liquids = 液体 category.items = 物品 -category.crafting = 制造 +category.crafting = 输入/输出 category.function = 功能 -category.optional = 可选的增强 +category.optional = 强化(可选) +setting.skipcoreanimation.name = 跳过核心发射与着陆动画 setting.landscape.name = 锁定横屏 setting.shadows.name = 影子 setting.blockreplace.name = 自动推荐合适的建筑 setting.linear.name = 抗锯齿 setting.hints.name = 提示 -setting.logichints.name = 逻辑代码提示 -setting.flow.name = 显示资源传送速度[scarlet] -setting.backgroundpause.name = 在背景中暂停 +setting.logichints.name = 逻辑指令提示 +setting.backgroundpause.name = 游戏在后台时自动暂停 setting.buildautopause.name = 自动暂停建造 -setting.doubletapmine.name = 双击以采矿 -setting.modcrashdisable.name = 游戏启动崩溃时不禁用模组 +setting.doubletapmine.name = 双击采矿 +setting.modcrashdisable.name = 游戏启动崩溃后禁用模组 setting.animatedwater.name = 动态液体 setting.animatedshields.name = 动态力场 setting.playerindicators.name = 玩家指示器 -setting.indicators.name = 敌军指示器 -setting.autotarget.name = 自动射击 +setting.indicators.name = 敌人指示器 +setting.autotarget.name = 自动瞄准 setting.keyboard.name = 鼠标+键盘操控 setting.touchscreen.name = 触屏操控 -setting.fpscap.name = 最大FPS +setting.fpscap.name = 最大帧数 setting.fpscap.none = 无 setting.fpscap.text = {0} FPS setting.uiscale.name = UI缩放比例 -setting.uiscale.description = 需要重新启动以应用更改。 +setting.uiscale.description = 需要重新启动 setting.swapdiagonal.name = 总是斜线建造 setting.difficulty.training = 训练 setting.difficulty.easy = 简单 @@ -865,21 +883,22 @@ setting.difficulty.hard = 困难 setting.difficulty.insane = 疯狂 setting.difficulty.name = 难度: setting.screenshake.name = 屏幕抖动 -setting.effects.name = 显示效果 -setting.destroyedblocks.name = 显示摧毁的建筑 -setting.blockstatus.name = 显示方块状态 +setting.effects.name = 显示特效 +setting.destroyedblocks.name = 显示已摧毁的建筑 +setting.blockstatus.name = 显示建筑状态 setting.conveyorpathfinding.name = 传送带自动寻路 setting.sensitivity.name = 控制器灵敏度 setting.saveinterval.name = 自动保存间隔 -setting.seconds = {0} 秒 -setting.milliseconds = {0} 毫秒 +setting.seconds = {0}秒 +setting.milliseconds = {0}毫秒 setting.fullscreen.name = 全屏 -setting.borderlesswindow.name = 无边界窗口 -setting.borderlesswindow.description = 可能需要重新启动以应用更改。 -setting.fps.name = 显示 FPS 和网络延迟 -setting.smoothcamera.name = 镜头平滑 +setting.borderlesswindow.name = 无边框窗口 +setting.borderlesswindow.name.windows = 无边框全屏 +setting.borderlesswindow.description = 可能需要重启 +setting.fps.name = 显示帧数和网络延迟 +setting.smoothcamera.name = 平滑镜头 setting.vsync.name = 垂直同步 -setting.pixelate.name = 像素画面 [lightgray] +setting.pixelate.name = 像素画面 setting.minimap.name = 显示小地图 setting.coreitems.name = 显示核心物资 setting.position.name = 显示玩家坐标 @@ -892,24 +911,24 @@ setting.mutesound.name = 禁用音效 setting.crashreport.name = 发送匿名的崩溃报告 setting.savecreate.name = 自动创建存档 setting.publichost.name = 游戏公开可见 -setting.playerlimit.name = 玩家限制 +setting.playerlimit.name = 玩家数量限制 setting.chatopacity.name = 聊天界面不透明度 -setting.lasersopacity.name = 能量激光不透明度 +setting.lasersopacity.name = 电力连接线不透明度 setting.bridgeopacity.name = 桥梁不透明度 setting.playerchat.name = 显示玩家聊天气泡 setting.showweather.name = 显示天气效果 -public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。\n[lightgray]您之后可以在 设置->游戏->游戏公开可见 更改。 -public.confirm.really = 如果您想与朋友游玩,可以使用[green]邀请朋友[]而不是[scarlet]公开游戏[]!\n您确定要使游戏[scarlet]公开可见[]吗? -public.beta = 请注意,测试版的游戏不能公开可见。 -uiscale.reset = UI 缩放比例已更改。\n按下“确定”来执行缩放比例的更改。\n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。 +public.confirm = 确定使您的游戏公开可见?\n[accent]其他人将可以加入到您的游戏。 \n[lightgray]此后可以在 设置->游戏->游戏公开可见 里面更改。 +public.confirm.really = 如果您想与好友一起游戏,可以使用[green]邀请好友[]而不是[scarlet]公开游戏[]!\n您确定要使游戏[scarlet]公开可见[]吗? +public.beta = 请注意,测试版的游戏不能公开可见。 +uiscale.reset = UI缩放比例已更改。 \n点击“确定”来接受缩放比例的更改。 \n[accent]{0}[]秒后[scarlet]将自动退出并还原设置。 uiscale.cancel = 取消并退出 setting.bloom.name = 特效 keybind.title = 重新绑定按键 -keybinds.mobile = [scarlet]这里的大多数按键绑定在移动设备上都不能用。仅支持基本的移动。 +keybinds.mobile = [scarlet]除了基本的移动以外,大多数按键绑定在移动设备上无效。 category.general.name = 常规 category.view.name = 视图 -category.multiplayer.name = 多人 -category.blocks.name = 选择方块 +category.multiplayer.name = 多人游戏 +category.blocks.name = 建筑选择 command.attack = 攻击 command.rally = 集合 command.retreat = 撤退 @@ -917,18 +936,18 @@ command.idle = 闲置 placement.blockselectkeys = \n[lightgray]按键:[{0}, keybind.respawn.name = 重生 keybind.control.name = 控制单位 -keybind.clear_building.name = 清除建筑 +keybind.clear_building.name = 清除规划 keybind.press = 请按一个键… keybind.press.axis = 请按一个轴或键… -keybind.screenshot.name = 地图截图 -keybind.toggle_power_lines.name = 显示/隐藏能量标识线 -keybind.toggle_block_status.name = 显示/隐藏方块状态 +keybind.screenshot.name = 全地图截图 +keybind.toggle_power_lines.name = 显示/隐藏电力连接线 +keybind.toggle_block_status.name = 显示/隐藏建筑状态 keybind.move_x.name = 水平移动 keybind.move_y.name = 竖直移动 -keybind.mouse_move.name = 跟随鼠标 -keybind.pan.name = 平移视图 -keybind.boost.name = 推进 -keybind.schematic_select.name = 选择区域 +keybind.mouse_move.name = 单位跟随鼠标 +keybind.pan.name = 鼠标控制镜头 +keybind.boost.name = 启动助推 +keybind.schematic_select.name = 框选建筑 keybind.schematic_menu.name = 蓝图目录 keybind.schematic_flip_x.name = 水平翻转 keybind.schematic_flip_y.name = 竖直翻转 @@ -952,93 +971,97 @@ keybind.fullscreen.name = 切换全屏 keybind.select.name = 选择/射击 keybind.diagonal_placement.name = 斜线建造 keybind.pick.name = 选择建筑 -keybind.break_block.name = 破坏建筑 +keybind.break_block.name = 拆除建筑 keybind.deselect.name = 取消选择 -keybind.pickupCargo.name = 拾取货物 -keybind.dropCargo.name = 释放货物 -keybind.command.name = 指挥 +keybind.pickupCargo.name = 拾取载荷 +keybind.dropCargo.name = 释放载荷 +keybind.command.name = 指挥附近的单位 keybind.shoot.name = 射击 keybind.zoom.name = 缩放 keybind.menu.name = 菜单 keybind.pause.name = 暂停 keybind.pause_building.name = 暂停/继续建造 -keybind.minimap.name = 小地图 -keybind.planet_map.name = 行星地图 -keybind.research.name = 研究 -keybind.block_info.name = 方块信息 +keybind.minimap.name = 打开小地图 +keybind.planet_map.name = 打开行星地图 +keybind.research.name = 打开科技树 +keybind.block_info.name = 显示建筑信息 keybind.chat.name = 聊天 keybind.player_list.name = 玩家列表 keybind.console.name = 控制台 keybind.rotate.name = 旋转 -keybind.rotateplaced.name = 旋转全部(长按) -keybind.toggle_menus.name = 显隐选项 +keybind.rotateplaced.name = 旋转已放置的建筑(长按) +keybind.toggle_menus.name = 显示/隐藏UI keybind.chat_history_prev.name = 聊天记录向前 keybind.chat_history_next.name = 聊天记录向后 keybind.chat_scroll.name = 聊天记录滚动 keybind.chat_mode.name = 切换聊天模式 -keybind.drop_unit.name = 松开单位 +keybind.drop_unit.name = 释放单位 keybind.zoom_minimap.name = 小地图缩放 -mode.help.title = 模式说明 +mode.help.title = 游戏模式说明 mode.survival.name = 生存 -mode.survival.description = 正常的游戏模式,有限的资源,自动的波次。\n[gray]需要击退周期性出现的敌人。 +mode.survival.description = 通常的游戏模式,资源有限,自动生成敌人波次。 \n[gray]需要地图中有敌方出生点。 mode.sandbox.name = 沙盒 -mode.sandbox.description = 无限的资源,不会自动生成敌人。 -mode.editor.name = 编辑器 +mode.sandbox.description = 无限资源,不会自动生成敌人波次。 +mode.editor.name = 地图编辑器 mode.pvp.name = PvP -mode.pvp.description = 与本地玩家对战。\n[gray]需要地图中有不同队伍(颜色)的核心。 -mode.attack.name = 攻击 -mode.attack.description = 没有波次,但需要摧毁敌人的基地。\n[gray]需要地图中有红色的核心。 +mode.pvp.description = 与其他玩家对战。 \n[gray]需要地图中有至少2种不同颜色的核心。 +mode.attack.name = 进攻 +mode.attack.description = 摧毁敌人的基地。 \n[gray]需要地图中有红色的核心。 mode.custom = 自定义模式 rules.infiniteresources = 无限资源 -rules.reactorexplosions = 反应堆爆炸 -rules.coreincinerates = 核心自动焚烧溢出物资 +rules.reactorexplosions = 反应堆爆炸有破坏性 +rules.coreincinerates = 核心自动销毁多余的物品 rules.schematic = 允许使用蓝图 rules.wavetimer = 波次计时器 rules.waves = 波次 -rules.attack = 攻击模式 -rules.buildai = AI建造 -rules.cleanupdeadteams = 清理被打败的队伍的建筑(PvP模式) -rules.corecapture = 摧毁核心时占领该核心 -rules.polygoncoreprotection = 多边形核心保护区域 +rules.attack = 进攻模式 +rules.buildai = 敌方 AI 会建造建筑 +rules.aitier = AI 难度 +rules.cleanupdeadteams = 清除已战败队伍的建筑(PvP模式) +rules.corecapture = 摧毁核心时将其俘获 +rules.polygoncoreprotection = 根据核心位置平分可建造区域 rules.enemyCheat = 敌人(红队)无限资源 -rules.blockhealthmultiplier = 建筑生命倍数 -rules.blockdamagemultiplier = 建筑伤害倍数 -rules.unitbuildspeedmultiplier = 单位生产速度倍数 -rules.unithealthmultiplier = 单位生命倍数 -rules.unitdamagemultiplier = 单位伤害倍数 -rules.unitcapvariable = 每个核心提供的单位上限 +rules.blockhealthmultiplier = 建筑生命值倍率 +rules.blockdamagemultiplier = 建筑伤害倍率 +rules.unitbuildspeedmultiplier = 单位生产速度倍率 +rules.unithealthmultiplier = 单位生命值倍率 +rules.unitdamagemultiplier = 单位伤害倍率 +rules.unitcapvariable = 核心可增加单位上限 rules.unitcap = 基础单位上限 -rules.enemycorebuildradius = 敌方核心禁造区半径:[lightgray](格) -rules.wavespacing = 波次间隔时间:[lightgray](秒) -rules.buildcostmultiplier = 建材倍率 -rules.buildspeedmultiplier = 建造速率 -rules.deconstructrefundmultiplier = 拆除返还倍数 +rules.enemycorebuildradius = 敌方核心不可建造区域半径:[lightgray](格) +rules.wavespacing = 波次间隔:[lightgray](秒) +rules.buildcostmultiplier = 建造花费倍率 +rules.buildspeedmultiplier = 建造速度倍率 +rules.deconstructrefundmultiplier = 拆除返还倍率 rules.waitForWaveToEnd = 等待敌人时间 rules.dropzoneradius = 敌人出生点禁区大小:[lightgray](格) -rules.unitammo = 单位消耗子弹 +rules.unitammo = 单位有弹药限制 +rules.enemyteam = 敌方队伍 +rules.playerteam = 玩家队伍 rules.title.waves = 波次 rules.title.resourcesbuilding = 资源和建造 -rules.title.enemy = 敌人 +rules.title.enemy = AI 对手 rules.title.unit = 单位 rules.title.experimental = 实验性 -rules.title.environment = 环境性 -rules.lighting = 光照 -rules.enemyLights = 敌方光照 -rules.fire = 火焰 +rules.title.environment = 环境 +rules.title.teams = 队伍 +rules.lighting = 迷雾 +rules.enemyLights = 敌方单位发光 +rules.fire = 允许火焰产生并蔓延 rules.explosions = 建筑/单位爆炸伤害 -rules.ambientlight = 环境光 -rules.weather = 气候 -rules.weather.frequency = 频率: -rules.weather.always = 持续 -rules.weather.duration = 时长: +rules.ambientlight = 迷雾颜色 +rules.weather = 天气 +rules.weather.frequency = 周期: +rules.weather.always = 永久 +rules.weather.duration = 时长: content.item.name = 物品 content.liquid.name = 液体 content.unit.name = 单位 content.block.name = 建筑 content.status.name = 状态效果 -content.sector.name = 区域 +content.sector.name = 战役区块 item.copper.name = 铜 item.lead.name = 铅 @@ -1048,17 +1071,17 @@ item.titanium.name = 钛 item.thorium.name = 钍 item.silicon.name = 硅 item.plastanium.name = 塑钢 -item.phase-fabric.name = 相织物 +item.phase-fabric.name = 相位织物 item.surge-alloy.name = 巨浪合金 item.spore-pod.name = 孢子荚 item.sand.name = 沙 -item.blast-compound.name = 爆炸混合物 -item.pyratite.name = 火石 +item.blast-compound.name = 炸药 +item.pyratite.name = 硫化物 item.metaglass.name = 钢化玻璃 item.scrap.name = 废料 liquid.water.name = 水 -liquid.slag.name = 矿渣 +liquid.slag.name = 矿渣液 liquid.oil.name = 石油 liquid.cryofluid.name = 冷冻液 @@ -1091,7 +1114,7 @@ unit.omura.name = 海神 unit.retusa.name = 潜螺 unit.oxynoe.name = 电鳗 unit.cyerce.name = 江豚 -unit.aegires.name = 神盾 +unit.aegires.name = 玄武 unit.navanax.name = 龙王 unit.alpha.name = 阿尔法 unit.beta.name = 贝塔 @@ -1101,13 +1124,12 @@ unit.reign.name = 王座 unit.vela.name = 灾星 unit.corvus.name = 死星 -block.resupply-point.name = 补给点 block.parallax.name = 差扰光束 block.cliff.name = 悬崖 block.sand-boulder.name = 砂岩 block.basalt-boulder.name = 玄武岩巨石 block.grass.name = 草地 -block.molten-slag.name = 矿渣 +block.molten-slag.name = 矿渣液 block.space.name = 太空 block.salt.name = 盐碱地 block.salt-wall.name = 盐墙 @@ -1133,7 +1155,7 @@ block.thruster.name = 推进器残骸 block.kiln.name = 窑炉 block.graphite-press.name = 石墨压缩机 block.multi-press.name = 多重压缩机 -block.constructing = {0}\n[lightgray](建造中) +block.constructing = {0}[lightgray](建造中) block.spawn.name = 敌人出生点 block.core-shard.name = 初代核心 block.core-foundation.name = 次代核心 @@ -1141,7 +1163,8 @@ block.core-nucleus.name = 终代核心 block.deep-water.name = 深水 block.shallow-water.name = 水 block.tainted-water.name = 污水 -block.darksand-tainted-water.name = 黑沙 污水 +block.deep-tainted-water.name = 深污水 +block.darksand-tainted-water.name = 黑沙污水 block.tar.name = 石油 block.stone.name = 石头 block.sand.name = 沙子 @@ -1149,8 +1172,8 @@ block.darksand.name = 黑沙 block.ice.name = 冰 block.snow.name = 雪 block.crater-stone.name = 陨石坑 -block.sand-water.name = 沙 水 -block.darksand-water.name = 黑沙 水 +block.sand-water.name = 浅滩 +block.darksand-water.name = 黑沙浅滩 block.char.name = 焦土 block.dacite.name = 安山岩 block.rhyolite.name = 流纹岩 @@ -1190,8 +1213,8 @@ block.titanium-wall.name = 钛墙 block.titanium-wall-large.name = 大型钛墙 block.plastanium-wall.name = 塑钢墙 block.plastanium-wall-large.name = 大型塑钢墙 -block.phase-wall.name = 相织物墙 -block.phase-wall-large.name = 大型相织物墙 +block.phase-wall.name = 相位墙 +block.phase-wall-large.name = 大型相位墙 block.thorium-wall.name = 钍墙 block.thorium-wall-large.name = 大型钍墙 block.door.name = 门 @@ -1205,7 +1228,7 @@ block.conveyor.name = 传送带 block.titanium-conveyor.name = 钛传送带 block.plastanium-conveyor.name = 塑钢传送带 block.armored-conveyor.name = 装甲传送带 -block.junction.name = 连接器 +block.junction.name = 交叉器 block.router.name = 路由器 block.distributor.name = 分配器 block.sorter.name = 分类器 @@ -1215,7 +1238,7 @@ block.illuminator.name = 照明器 block.overflow-gate.name = 溢流门 block.underflow-gate.name = 反向溢流门 block.silicon-smelter.name = 硅冶炼厂 -block.phase-weaver.name = 相织物编织器 +block.phase-weaver.name = 相位编织器 block.pulverizer.name = 粉碎机 block.cryofluid-mixer.name = 冷冻液混合器 block.melter.name = 熔炉 @@ -1223,9 +1246,9 @@ block.incinerator.name = 焚化炉 block.spore-press.name = 孢子压缩机 block.separator.name = 分离机 block.coal-centrifuge.name = 煤炭离心机 -block.power-node.name = 能量节点 -block.power-node-large.name = 大型能量节点 -block.surge-tower.name = 波动能量塔 +block.power-node.name = 电力节点 +block.power-node-large.name = 大型电力节点 +block.surge-tower.name = 合金电力塔 block.diode.name = 二极管 block.battery.name = 电池 block.battery-large.name = 大型电池 @@ -1244,8 +1267,8 @@ block.item-source.name = 物品源 block.item-void.name = 物品黑洞 block.liquid-source.name = 液体源 block.liquid-void.name = 液体黑洞 -block.power-void.name = 能源黑洞 -block.power-source.name = 无限能源 +block.power-void.name = 电力黑洞 +block.power-source.name = 电力源 block.unloader.name = 装卸器 block.vault.name = 仓库 block.wave.name = 波浪 @@ -1253,33 +1276,34 @@ block.tsunami.name = 海啸 block.swarmer.name = 蜂群 block.salvo.name = 齐射炮 block.ripple.name = 浪涌 -block.phase-conveyor.name = 相织物传送带桥 +block.phase-conveyor.name = 相位传送带桥 block.bridge-conveyor.name = 传送带桥 block.plastanium-compressor.name = 塑钢压缩机 -block.pyratite-mixer.name = 火石混合器 -block.blast-mixer.name = 爆炸物混合器 +block.pyratite-mixer.name = 硫化物混合器 +block.blast-mixer.name = 炸药混合器 block.solar-panel.name = 太阳能板 block.solar-panel-large.name = 大型太阳能板 block.oil-extractor.name = 石油钻井 block.repair-point.name = 维修点 +block.repair-turret.name = 维修塔 block.pulse-conduit.name = 脉冲导管 block.plated-conduit.name = 电镀导管 -block.phase-conduit.name = 相织物导管桥 +block.phase-conduit.name = 相位导管桥 block.liquid-router.name = 液体路由器 block.liquid-tank.name = 储液罐 block.liquid-junction.name = 液体交叉器 block.bridge-conduit.name = 导管桥 -block.rotary-pump.name = 回旋泵 +block.rotary-pump.name = 回转泵 block.thorium-reactor.name = 钍反应堆 block.mass-driver.name = 质量驱动器 block.blast-drill.name = 爆破钻头 block.thermal-pump.name = 热能泵 block.thermal-generator.name = 热能发电机 block.alloy-smelter.name = 合金冶炼厂 -block.mender.name = 修复器 +block.mender.name = 修理器 block.mend-projector.name = 修理投影器 -block.surge-wall.name = 波动墙 -block.surge-wall-large.name = 大型波动墙 +block.surge-wall.name = 合金墙 +block.surge-wall-large.name = 大型合金墙 block.cyclone.name = 气旋 block.fuse.name = 雷光 block.shock-mine.name = 脉冲地雷 @@ -1292,7 +1316,6 @@ block.meltdown.name = 熔毁 block.foreshadow.name = 厄兆 block.container.name = 容器 block.launch-pad.name = 发射台 -block.launch-pad-large.name = 大型发射台 block.segment.name = 裂解光束 block.command-center.name = 指挥中心 block.ground-factory.name = 陆军工厂 @@ -1307,15 +1330,15 @@ block.payload-router.name = 载荷路由器 block.duct.name = 物品导管 block.duct-router.name = 物品导管路由器 block.duct-bridge.name = 物品导管桥 -block.payload-propulsion-tower.name = 载荷驱动台 +block.payload-propulsion-tower.name = 载荷驱动器 block.payload-void.name = 载荷黑洞 -block.payload-source.name =载荷源 +block.payload-source.name = 载荷源 block.disassembler.name = 解离机 block.silicon-crucible.name = 热能坩埚 block.overdrive-dome.name = 超速穹顶投射器 block.interplanetary-accelerator.name = 行星际加速器 -#experimental, may be removed -block.block-forge.name = 方块熔炉 +#experimental, may be removed (仅供测试,行将移除) +block.block-forge.name = 方块建造厂 block.block-loader.name = 方块装载机 block.block-unloader.name = 方块卸载机 @@ -1336,313 +1359,317 @@ team.green.name = 绿 team.purple.name = 紫 hint.skip = 跳过 -hint.desktopMove = 使用[accent][[WASD][]来移动。 -hint.zoom = 滚动[accent]鼠标滚轮[]放大或缩小。 -hint.mine = 移动到\uf8c4 铜矿附近并[accent]点按[]进行手动开采。 -hint.desktopShoot = [accent][[鼠标左键][]射击。 -hint.depositItems = 要转移物品,请将其从飞船上拖到核心。 -hint.respawn = 要于核心中重生,请按[accent][[V][]。 -hint.respawn.mobile = 您已切换控制单元/建筑。如果要重生为飞船,请[accent]点击左上方的图标(您的单元/结构图标)。[] -hint.desktopPause = 按[accent][[Space][]暂停和取消暂停游戏。 -hint.placeDrill = 选择右下角菜单中的\ue85e [accent]钻头[]分类,然后选择一个\uf870 [accent]钻头[]然后单击铜矿将其放置。 -hint.placeDrill.mobile = 选择右下角菜单中的\ue85e [accent]钻头[]分类,然后选择一个\uf870 [accent]钻头[],然后点击铜矿将其放置。\n\n点击右下角\ue800 [accent]复选标记[]以确认。 -hint.placeConveyor = 传送带将物品从钻头移到其他方块中。从\ue814 [accent]布局[]分类选择\uf896 [accent]传送带[]。\n\n单击并拖动以放置多个传送带。\n[accent]滚动[]以旋转。 -hint.placeConveyor.mobile = 传送带将物品从钻头移到其他块中。从\ue814 [accent]布局[]分类选择\uf896 [accent]传送带[]。\n\n长按一秒钟,然后拖动以放置多个传送带。 -hint.placeTurret = 放置\uf861 [accent]炮塔[]以抵御敌人,保卫你的核心。\n\n炮塔需要弹药-\uf838 铜。\n使用传送带和钻头为它们供弹。 -hint.breaking = [accent]右击[]并拖动以拆除方块。 -hint.breaking.mobile = 点击在右下角的\ue817 [accent]锤子[]点击以拆除方块。\n\n按住手指一秒钟,然后拖动并选择。 -hint.blockInfo = 在 [accent]建造菜单[]中选择一个建筑,然后点击右边的 [accent][[?][]按钮以查看这个方块的信息。 -hint.research = 点击\ue875 [accent]科技树[]按钮研究新技术。 -hint.research.mobile = 点击在\ue88c [accent]菜单[]中的\ue875 [accent]科技树[]按钮以研究新技术。 -hint.unitControl = 按住[accent][[L-ctrl][]并[accent]点击[]友军单位或炮塔来进行控制。 -hint.unitControl.mobile = [accent][双击][]友军单位或炮塔来进行控制。 -hint.launch = 一旦收集到足够的资源,您就可以通过从右下角的\ue827 [accent]地图[]选择附近的区域[accent]发射[]核心。 -hint.launch.mobile = 一旦收集到足够的资源,您就可以通过在\ue88c [accent]菜单[]的\ue827 [accent]地图[]选择附近的区域[accent]发射[]核心。 -hint.schematicSelect = 按住[accent][[F][]并拖动以选择要复制和粘贴的块。\n\n[accent][鼠标中键][]复制单个块类型。 -hint.conveyorPathfind = 按住[accent][[L-Ctrl][]拖动传送带并使其自动寻路。 -hint.conveyorPathfind.mobile = 启用\ue844 [accent]传送带自动寻路[]并拖动,传送带会自动生成路径。 -hint.boost = 按住[accent][[L-Shift][]用当前单位飞越障碍物。\n\n但只有少数地面单位有助推器。 -hint.command = 按住[accent][[G][]指挥附近的单位编队。 -hint.command.mobile = [accent][[双击][]您的部队指挥附近的部队编队。 -hint.payloadPickup = 按[accent][[[]捡起方块或单位。 -hint.payloadPickup.mobile = [accent]长按一个方块或一个单位来捡起来。 -hint.payloadDrop = 按[accent]][]放下捡起的方块或单位。 -hint.payloadDrop.mobile = [accent]点住[]一个空的位置将捡起的方块或单位丢到那里。 -hint.waveFire = [accent]波浪[]炮塔加水弹药会自动扑灭附近的火。 -hint.generator = \uf879 [accent]燃烧发电机[]燃烧煤炭并将电力传输到相邻方块。\n\n用\uf87f [accent]能量节点[]可以扩展电力传输范围。 -hint.guardian = [accent]Boss[]单位装甲厚重。[accent]铜[]和[accent]铅[]这类较弱的子弹对其[scarlet]作用不佳[]。\n\n使用高级别炮塔或使用\uf835 [accent]石墨[]作为\uf861 双管炮及\uf859 齐射炮的弹药来消灭Boss。 -hint.coreUpgrade = 核心可以通过[accent]在上面覆盖高等级核心[]进行升级。\n\n在[accent]初代核心[]上放置一个[accent]次代核心[]。确保周围没有障碍物。 -hint.presetLaunch = 灰色的[accent]降落地区[],如[accent]冰冻森林[],可以从任何区域发射,不需要占领附近的区块。\n\n[accent]数字编号的区域[],如这个,是[accent]可选的[]。 -hint.coreIncinerate = 核心存满一种物品后,再进入的同种物品会被[accent]摧毁[]。 -hint.coopCampaign = 游玩[accent]合作战役[]时,当前地图生产的资源也会被送入[accent]您本地的区域[]。\n\n新科技也会同步解锁。 +hint.desktopMove = 使用[accent][[WASD][]键来移动。 +hint.zoom = 滚动[accent]鼠标滚轮[]放大或缩小。 +hint.mine = 接近\uf8c4铜矿并[accent]点击[]它们,来进行手动开采。 +hint.desktopShoot = [accent][[鼠标左键][]射击。 +hint.depositItems = 要转移物品,请将其从飞船上拖动到核心中。 +hint.respawn = 要以初始飞船的形式重生,请按[accent][[V][]键。 +hint.respawn.mobile = 您正在控制某个单位或建筑。 要以初始飞船的形式重生,请[accent]点击左上方的图标(您的单位/建筑图标)。 [] +hint.desktopPause = 按[accent][[空格][]键暂停或恢复游戏。 +hint.placeDrill = 选择右下角菜单中的\ue85e[accent]钻头[]分类,然后选择一个\uf870[accent]钻头[]并单击铜矿将其放置。 +hint.placeDrill.mobile = 选择右下角菜单中的\ue85e[accent]钻头[]分类,然后选择一个\uf870[accent]钻头[],再点击铜矿将其放置。 \n\n点击右下角的\ue800[accent]勾[]以确认。 +hint.placeConveyor = 传送带将物品从钻头运送到其他建筑中。 从\ue814[accent]运输[]分类选择\uf896[accent]传送带[]。 \n\n单击并拖动以连续放置传送带。 \n[accent]滚动鼠标滚轮[]以旋转方向。 +hint.placeConveyor.mobile = 传送带将物品从钻头运送到其他建筑中。 从\ue814[accent]运输[]分类选择\uf896[accent]传送带[]。 \n\n长按一秒,然后拖动以连续放置传送带。 +hint.placeTurret = 放置\uf861[accent]炮塔[]以抵御敌人,保卫你的核心。 \n\n炮塔需要弹药-\uf838铜。 \n使用传送带和钻头为它们供弹。 +hint.breaking = [accent]鼠标右键[]拖动以拆除建筑。 +hint.breaking.mobile = 激活右下角的\ue817[accent]锤子[]并点击建筑来拆除它们。 \n\n长按一秒后拖动,可拆除范围内多个建筑。 +hint.blockInfo = 要查看建筑信息,可以先在[accent]建造菜单[]中选择建筑,然后点击右侧的[accent][[?][]按钮。 +hint.derelict = [accent]废墟[]建筑是已废弃基地的残骸。 \n\n可以[accent]拆除[]这些建筑来获取资源。 +hint.research = 点击\ue875[accent]科技树[]按钮研究新科技。 +hint.research.mobile = 点击\ue88c[accent]菜单[]中的\ue875[accent]科技树[]按钮以研究新科技。 +hint.unitControl = 按住[accent][[L-ctrl][]并[accent]点击[]友军单位或炮塔来进行控制。 +hint.unitControl.mobile = [accent][双击][]友军单位或炮塔来进行控制。 +hint.launch = 一旦收集了足够的资源,您就可以通过右下角的\ue827[accent]地图[]选择附近的区块来[accent]发射[]核心。 +hint.launch.mobile = 一旦收集到足够的资源,您就可以通过\ue88c[accent]菜单[]中的\ue827[accent]地图[]选择附近的区块来[accent]发射[]核心。 +hint.schematicSelect = 按住[accent][[F][]键用鼠标框选,即可选择建筑来复制粘贴。 \n\n[accent][鼠标中键][]复制单个建筑。 +hint.conveyorPathfind = 按住[accent][[L-Ctrl][]键并拖动传送带,使其自动寻路。 +hint.conveyorPathfind.mobile = 启用\ue844[accent]传送带自动寻路[]后,拖动传送带可使其自动寻路。 +hint.boost = 按住[accent][[L-Shift][]控制当前单位助推,可飞越障碍物。 \n\n只有一部分地面单位有助推功能。 +hint.command = 按[accent][[G][]键指挥附近的[accent]同类单位[]以形成编队。 \n\n您需要先控制一个地面单位,才能指挥其他的地面单位。 +hint.command.mobile = [accent][[双击][]您的单位指挥附近的单位以形成编队。 +hint.payloadPickup = 按[accent][[[]键来将小型建筑或单位拾起作为载荷。 +hint.payloadPickup.mobile = [accent]长按[]一个小型建筑或单位来拾起作为载荷。 +hint.payloadDrop = 按[accent]][]键放下载荷。 +hint.payloadDrop.mobile = [accent]长按[]一个空的位置将载荷放在那里。 +hint.waveFire = [accent]波浪[]炮塔以水作弹药时,会自动扑灭附近的火焰。 +hint.generator = \uf879[accent]火力发电机[]燃煤发电,并将电力输送至相邻建筑。 \n\n用\uf87f[accent]电力节点[]可以扩展电力输送范围。 +hint.guardian = [accent]Boss[]单位装甲厚重。 [accent]铜[]和[accent]铅[]这类较弱的子弹对其[scarlet]作用不佳[]。 \n\n使用高级别炮塔或使用\uf835[accent]石墨[]作为\uf861双管炮及\uf859齐射炮的弹药来消灭Boss。 +hint.coreUpgrade = 核心可以通过[accent]在上面覆盖更高等级的核心[]进行升级。 \n\n在[accent]初代核心[]上放置一个[accent]次代核心[]。 确保周围没有障碍物。 +hint.presetLaunch = 灰色的[accent]着陆区块[],如[accent]冰冻森林[],从其他任何地方发射都可以到达,不需要先占领邻近的区块。 \n\n[accent]数字编号的区块[],比如这个,可以[accent]选择性[]占领。 +hint.presetDifficulty = 这个区块受敌人[scarlet]威胁程度很高[]。 \n解锁适当的科技,并做好充分准备,否则[accent]不建议[]向这里发射。 +hint.coreIncinerate = 核心内一种物品达到容量上限后,同种物品再进入时会被[accent]销毁[]。 +hint.coopCampaign = 游玩他人主持的[accent]合作战役[]时,生产的资源也会被送入[accent]您自己的区块[]。 \n\n新科技也会同步解锁。 -item.copper.description = 用于所有类型的建筑和弹药。 -item.copper.details = 铜。在塞普罗上的异常丰富的金属。不经加固,结构会较脆弱。 -item.lead.description = 用于液体输送和电气结构。 -item.lead.details = 致密且呈惰性。广泛用于电池中。\n注意:可能对生物生命体有毒。虽说这里已经没有多少生物了。 -item.metaglass.description = 用于液体传输/储存结构。 -item.graphite.description = 用于电子元件和炮塔弹药。 -item.sand.description = 用于生产其他精炼材料。 -item.coal.description = 用于燃料和精炼材料生产。 -item.coal.details = 似乎是植物的化石,在孢子荚出现前很久就形成了。 -item.titanium.description = 用于液体运输结构、钻头和飞行器。 -item.thorium.description = 用于耐用结构和核燃料。 -item.scrap.description = 用于熔炉和粉碎机来精炼成其他材料。 -item.scrap.details = 旧结构和单位的残余物。 -item.silicon.description = 用于太阳能板,复杂的电气元件和追踪性弹药。 -item.plastanium.description = 用于先进单位、绝缘和分裂性弹药。 -item.phase-fabric.description = 用于高级电子设备和自修复结构。 -item.surge-alloy.description = 用于先进武器和反应防御结构。 -item.spore-pod.description = 用于转化成石油、爆炸物和燃料。 -item.spore-pod.details = 孢子。可能是人工合成的生命形式。释放对其他生物有毒的气体。极具侵略性。在某些条件下高度易燃。 -item.blast-compound.description = 用于炸弹和爆炸性弹药。 -item.pyratite.description = 用于燃烧武器和燃烧燃料发电机。 +item.copper.description = 用于建造大多数建筑,或作为弹药使用。 +item.copper.details = 铜,塞普罗星上异常丰富的金属。 不经处理的话,结构很脆弱。 +item.lead.description = 用于建造液体输送和电力相关的建筑。 +item.lead.details = 致密,惰性,广泛用于电池中。 \n注意:可能对生命体有毒,虽说这里已经没有多少生物了。 +item.metaglass.description = 用于建造输送或储存液体的建筑。 +item.graphite.description = 用于制造电子元件,或作为炮塔弹药。 +item.sand.description = 用于生产其他精炼材料。 +item.coal.description = 用作燃料,或用于精炼材料生产。 +item.coal.details = 似乎是植物的化石,在孢子出现很久前就形成了。 +item.titanium.description = 用于液体输送建筑、 钻头和工厂。 +item.thorium.description = 用于耐用建筑以及作为核燃料。 +item.scrap.description = 用于熔炉和粉碎机来精炼成其他材料。 +item.scrap.details = 废旧建筑和单位的残骸。 +item.silicon.description = 用于太阳能板、 复杂的电气元件或作为追踪性弹药。 +item.plastanium.description = 用于高级单位、 绝缘材料,或作为分裂性弹药。 +item.phase-fabric.description = 用于高级电子设备和自修复建筑。 +item.surge-alloy.description = 用于先进武器和反应防御建筑。 +item.spore-pod.description = 用于转化成石油、 炸药或作为燃料。 +item.spore-pod.details = 孢子。 可能是人工合成的生命形式,释放对其他生物有毒的气体,极具侵略性。 在某些条件下高度易燃。 +item.blast-compound.description = 用作炸弹或爆炸性弹药。 +item.pyratite.description = 用于火焰发射类武器和使用燃料的发电设备。 -liquid.water.description = 用于冷却机器和废物处理。 -liquid.slag.description = 在分离器中提炼成金属成分,或作为武器弹药喷向敌人。 -liquid.oil.description = 用于先进材料生产和燃烧弹药。 -liquid.cryofluid.description = 用作反应堆、炮塔和工厂的冷却剂。 +liquid.water.description = 用于冷却机器和废物处理。 +liquid.slag.description = 在分离器中提炼成金属成分,或作为武器弹药喷向敌人。 +liquid.oil.description = 用于先进材料生产和喷射类武器。 +liquid.cryofluid.description = 用作反应堆、 炮塔和工厂的冷却剂。 -block.resupply-point.description = 为附近的部队提供铜弹药。与需要电池供电的设备不兼容。 -block.armored-conveyor.description = 将物品向前输送。不接受两侧的非传送带输入。 -block.illuminator.description = 释放光源。 -block.message.description = 保存一条文字信息。用于队友之间进行交流。 -block.graphite-press.description = 将煤炭压缩为石墨。 -block.multi-press.description = 将煤炭压缩为石墨。需要水进行冷却。 -block.silicon-smelter.description = 将沙和煤炭精炼为硅。 -block.kiln.description = 将沙和铅熔炼为钢化玻璃。 -block.plastanium-compressor.description = 用石油和钛生产塑钢。 -block.phase-weaver.description = 用钍和沙合成相织物。 -block.alloy-smelter.description = 将钛、铅、硅和铜熔合成巨浪合金。 -block.cryofluid-mixer.description = 将水和细钛粉混合制成冷冻液。 -block.blast-mixer.description = 把火石和孢子荚混合为爆炸混合物。 -block.pyratite-mixer.description = 把煤、铅和沙子混合为火石。 -block.melter.description = 将废料熔化成矿渣。 -block.separator.description = 将矿渣分离成矿物成分。 -block.spore-press.description = 将孢子荚压缩成石油。 -block.pulverizer.description = 将废料粉碎成细沙。 -block.coal-centrifuge.description = 把石油变成煤。 -block.incinerator.description = 熔融并蒸发它接收到的任何物品或液体。 -block.power-void.description = 消耗输入的所有能量。仅限沙盒。 -block.power-source.description = 无限输出能量。仅限沙盒。 -block.item-source.description = 无限输出物品。仅限沙盒。 -block.item-void.description = 销毁输入的所有物品。仅限沙盒。 -block.liquid-source.description = 无限输出液体。仅限沙盒。 -block.liquid-void.description = 移除输入的所有液体。仅限沙盒。 -block.copper-wall.description = 保护己方结构,挡下敌方炮弹。 -block.copper-wall-large.description = 保护己方结构,挡下敌方炮弹。 -block.titanium-wall.description = 保护己方结构,挡下敌方炮弹。 -block.titanium-wall-large.description = 保护己方结构,挡下敌方炮弹。 -block.plastanium-wall.description = 保护己方结构,挡下敌方炮弹。吸收激光和电弧。阻止电力节点自动连接。 -block.plastanium-wall-large.description = 保护己方结构,挡下敌方炮弹。吸收激光和电弧。阻止电力节点自动连接。 -block.thorium-wall.description = 保护己方结构,挡下敌方炮弹。 -block.thorium-wall-large.description = 保护己方结构,挡下敌方炮弹。 -block.phase-wall.description = 保护己方结构,挡下敌方炮弹。在受攻击时反射大多数子弹。 -block.phase-wall-large.description = 保护己方结构,挡下敌方炮弹。在受攻击时反射大多数子弹。 -block.surge-wall.description = 保护己方结构,挡下敌方炮弹。受攻击时有几率释放电弧。 -block.surge-wall-large.description = 保护己方结构,挡下敌方炮弹。受攻击时有几率释放电弧。 -block.door.description = 可以开关的墙。 -block.door-large.description = 可以开关的墙。 -block.mender.description = 定期修复附近的区块。\n可使用硅来提高范围和效率。 -block.mend-projector.description = 修复其附近的区块。\n可使用相织物来提高范围和效率。 -block.overdrive-projector.description = 提高附近建筑物的速度。\n可使用相织物来提高范围和效率。 -block.force-projector.description = 在自身周围创建一个六角形力场,使里面的建筑物和单位免受伤害。\n持续承受高伤害会导致过热,可以使用冷却液降温。相织物可用于增加护盾大小和盾容。 -block.shock-mine.description = 对踩到它的敌人释放电弧进行攻击。 -block.conveyor.description = 将物品向前输送。 -block.titanium-conveyor.description = 将物品向前输送。快于初级传送带。 -block.plastanium-conveyor.description = 打包物品进行运输。\n在后方输入物品,在前方三个方向输出物品。需要多个装载和卸载点才能达到最大运载量。 -block.junction.description = 两条交叉传送带的桥梁。 -block.bridge-conveyor.description = 跨越任意地形或建筑物运输物品。 -block.phase-conveyor.description = 跨越任意地形或建筑物即时运输物品。比传送带桥范围更大,但需要电力。 -block.sorter.description = 如果物品与所选种类相同,则允许其通过。否则,物品将从左边和右边输出。 -block.inverted-sorter.description = 像分类器一样处理物品,但却是向两侧输出选定的物品。 -block.router.description = 将物品平均分配到其他3个方向。 -block.router.details = 这是个好东西,也可以带来麻烦。不建议在工厂旁边使用,因为它们会被产出堵塞。 -block.distributor.description = 将物品平均分配到其他7个方向。 -block.overflow-gate.description = 当前方被阻塞时才会向左和右输出,用于处理多余的物品。 -block.underflow-gate.description = 与溢流门相反。 当左右均堵塞时才向前方运输。 -block.mass-driver.description = 长距离物品传输建筑,收集若干物品后将其射到远处的另一个质量驱动器。 -block.mechanical-pump.description = 泵送液体,不需要能量。 -block.rotary-pump.description = 泵送液体,需要能量。 -block.thermal-pump.description = 泵送液体。 -block.conduit.description = 向前传输液体。用于从泵或其他导管中提取液体。 -block.pulse-conduit.description = 向前传输液体。比普通导管更快地输送液体且能储存更多液体。 -block.plated-conduit.description = 向前传输液体。不接受侧边输入。不会发生泄露。 -block.liquid-router.description = 接受一个方向的液体并将它们平均输出到其他3个方向。同时可以储存一定量的液体。 -block.liquid-tank.description = 储存大量液体。像液体路由器向各个方向输出液体。 -block.liquid-junction.description = 两条交叉道管的桥梁。 -block.bridge-conduit.description = 跨越任意地形或建筑物运输液体。 -block.phase-conduit.description = 跨越任意地形或建筑物运输液体。比导管桥范围更大,但需要电力。 -block.power-node.description = 向连接的节点传输电力。该节点将从任何相邻的块接收电力或向其供电。 -block.power-node-large.description = 具有更大范围的高级电源节点。 -block.surge-tower.description = 可用连接较少的远程电源节点。 -block.diode.description = 仅当一侧存储的电量较少时向另一侧传输电池电量。 -block.battery.description = 储存电网多余电力,并在电网供电不足时放电。 -block.battery-large.description = 储存电网多余电力,并在电网供电不足时放电。比普通电池容量更高。 -block.combustion-generator.description = 燃烧煤等可燃材料发电。 -block.thermal-generator.description = 放置在炽热的地形上能够发电。 -block.steam-generator.description = 通过燃烧易燃材料并将水转化为蒸汽来发电。 -block.differential-generator.description = 利用低温流体与燃烧的火石之间的温差产生大量能量。 -block.rtg-generator.description = 利用放射物的衰变产生的热量以缓慢的速度产生能量。 -block.solar-panel.description = 提供少量太阳能。 -block.solar-panel-large.description = 提供少量太阳能。比标准太阳能电池板更高效。 -block.thorium-reactor.description = 从放射性的钍中产生大量的能量。需要持续冷却。如果冷却液供应不足,会剧烈爆炸。 -block.impact-reactor.description = 以最高效率产生大量的电力。但需要大量的能量输入来启动。 -block.mechanical-drill.description = 放置在矿物上时,以缓慢的速度无限输出物品。只能开采基本资源。 -block.pneumatic-drill.description = 一种改进的钻头,能开采钛。采矿速度比机械钻头快。 -block.laser-drill.description = 通过激光技术更快地开采,但需要能量。这种钻头可以开采放射性的钍。 -block.blast-drill.description = 终极钻头,需要大量能量。 -block.water-extractor.description = 从地下提取水。用于当附近没有地表水时。 -block.cultivator.description = 将微小浓度的大气中的孢子培养成孢子荚。 -block.cultivator.details = 恢复的技术。用于尽可能高效地生产大量的生物质。很可能是现在覆盖了塞普罗的最初的孢子培养器。 -block.oil-extractor.description = 使用大量能量、沙子和水钻取石油。 -block.core-shard.description = 基地的核心。一旦被摧毁,此区块就会丢失。 -block.core-shard.details = 初代核心。坚固且可自我复制。不具备星际旅行的能力。 -block.core-foundation.description = 基地的核心。装甲优良。比初代核心容量更大。 -block.core-foundation.details = 次代核心。 -block.core-nucleus.description = 基地的核心。装甲极佳。容量极大。 -block.core-nucleus.details = 三代也是终代核心。 -block.vault.description = 存储每种类型的大量物品。可使用卸载器卸载物品。 -block.container.description = 存储每种类型的少量物品。可使用卸载器卸载物品。 -block.unloader.description = 从周围方块卸载指定物品。 -block.launch-pad.description = 将货物发射至指定区块。 -block.duo.description = 交替向敌人发射子弹。 -block.scatter.description = 向敌机发射铅、废料或钢化玻璃高射炮弹。 -block.scorch.description = 焚烧任何靠近它的地面敌人。近距离高效。 -block.hail.description = 向远距离地面敌人发射小型炮弹。 -block.wave.description = 向敌人射出液体流。使用水作弹药时能够自动灭火。 -block.lancer.description = 充能并向地面单位发射强力的的波束。 -block.arc.description = 向地面单位发射电弧。 -block.swarmer.description = 向敌人发射追踪导弹。 -block.salvo.description = 向敌人快速射击子弹。 -block.fuse.description = 向附近的敌人发射三次近距离穿透性爆炸子弹。 -block.ripple.description = 向远距离地面敌人发射密集的炮弹。 -block.cyclone.description = 向附近的敌人发射密集的高射炮弹。 -block.spectre.description = 向空中和地面目标发射大型穿甲子弹。 -block.meltdown.description = 向附近的敌人发射持续的激光束。需要供冷。 -block.foreshadow.description = 向远距离单目标射击。 -block.repair-point.description = 持续修复其附近受损最严重的单位。 -block.segment.description = 摧毁袭来的除激光以外的子弹或导弹。 -block.parallax.description = 通过牵引光束牵引空中目标,并在这个过程中对其造成伤害。 -block.tsunami.description = 向敌人射出强力的液体流。使用水作弹药时能够自动灭火。 -block.silicon-crucible.description = 从沙子和煤中提炼硅,用火石作为附加热源。在炙热地型上更高效。 -block.disassembler.description = 以低效率将矿渣分离成微量的外来矿物成分。能产生钍。 -block.overdrive-dome.description = 提高附近建筑物的速度。需要相织物和硅来工作。 -block.payload-conveyor.description = 移动大型载荷,例如从工厂生产的单位。 -block.payload-router.description = 将输入的载荷向3个方向输出。 -block.command-center.description = 使用多个不同的命令控制单位。 -block.ground-factory.description = 产生陆军单位。输出的单位可以直接使用,也可以移入重构厂进行升级。 -block.air-factory.description = 产生空军单位。输出的单位可以直接使用,也可以移入重构厂进行升级。 -block.naval-factory.description = 产生海军单位。输出的单位可以直接使用,也可以移入重构厂进行升级。 -block.additive-reconstructor.description = 将输入的单位升级到第二级。 -block.multiplicative-reconstructor.description = 将输入的单位升级到第三级。 -block.exponential-reconstructor.description = 将输入的单位升级到第四级。 -block.tetrative-reconstructor.description = 将输入的单位升级到第五级,也是最终极。 -block.switch.description = 可切换开关。状态可以用逻辑处理器读取和控制。 -block.micro-processor.description = 在循环中运行一系列逻辑指令。可用于控制单元和建筑物。 -block.logic-processor.description = 在循环中运行一系列逻辑指令。可用于控制单元和建筑物。比微型处理器快。 -block.hyper-processor.description = 在循环中运行一系列逻辑指令。可用于控制单元和建筑物。可用于控制单元和建筑物。比逻辑处理器快。 -block.memory-cell.description = 存储处理器的信息。 -block.memory-bank.description = 存储处理器的信息。内存量更大。 -block.logic-display.description = 显示处理器中的任意图形。 -block.large-logic-display.description = 显示处理器中的任意图形。 -block.interplanetary-accelerator.description = 一个巨大的电磁轨道加速器。加速核心至逃逸速度以进行星际部署。 -block.repair-turret.description = 持续修复其范围内最近的受损单位。可使用液体冷却以提高修复效率。 -block.payload-propulsion-tower.description = 长距离载荷运输建筑。向与其相链接的其它载荷驱动台发射载荷。 +block.derelict = [lightgray]废墟 +block.armored-conveyor.description = 向前方输送物品,不接受侧面的输入,除非来自其他传送带。 +block.illuminator.description = 释放光线。 +block.message.description = 保存文字信息,用于队友间进行交流。 +block.graphite-press.description = 将煤炭压缩为石墨。 +block.multi-press.description = 将煤炭压缩为石墨,需要水进行冷却。 +block.silicon-smelter.description = 将沙和煤炭精炼为硅。 +block.kiln.description = 将沙和铅熔炼为钢化玻璃。 +block.plastanium-compressor.description = 用石油和钛生产塑钢。 +block.phase-weaver.description = 用钍和沙合成相位织物。 +block.alloy-smelter.description = 将钛、 铅、 硅和铜熔合成巨浪合金。 +block.cryofluid-mixer.description = 将水和细钛粉混合制成冷冻液。 +block.blast-mixer.description = 利用硫化物和孢子荚生产炸药。 +block.pyratite-mixer.description = 把煤炭、 铅和沙子混合成硫化物。 +block.melter.description = 将废料熔化成矿渣液。 +block.separator.description = 将矿渣液分离成矿物成分。 +block.spore-press.description = 将孢子荚压缩成石油。 +block.pulverizer.description = 将废料粉碎成细沙。 +block.coal-centrifuge.description = 把石油变成煤炭。 +block.incinerator.description = 熔融并蒸发它接收到的任何物品或液体。 +block.power-void.description = 消耗输入的所有电力,仅限沙盒。 +block.power-source.description = 无限输出电力,仅限沙盒。 +block.item-source.description = 无限输出物品,仅限沙盒。 +block.item-void.description = 销毁输入的所有物品,仅限沙盒。 +block.liquid-source.description = 无限输出液体,仅限沙盒。 +block.liquid-void.description = 蒸发输入的所有液体,仅限沙盒。 +block.payload-source.description = 无限输出载荷,仅限沙盒。 +block.payload-void.description = 销毁输入的所有载荷,仅限沙盒。 +block.copper-wall.description = 保护己方建筑,挡下敌方炮弹。 +block.copper-wall-large.description = 保护己方建筑,挡下敌方炮弹。 +block.titanium-wall.description = 保护己方建筑,挡下敌方炮弹。 +block.titanium-wall-large.description = 保护己方建筑,挡下敌方炮弹。 +block.plastanium-wall.description = 保护己方建筑,挡下敌方炮弹。 能吸收激光和电弧,但也会阻止电力节点自动连接。 +block.plastanium-wall-large.description = 保护己方建筑,挡下敌方炮弹。 能吸收激光和电弧,但也会阻止电力节点自动连接。 +block.thorium-wall.description = 保护己方建筑,挡下敌方炮弹。 +block.thorium-wall-large.description = 保护己方建筑,挡下敌方炮弹。 +block.phase-wall.description = 保护己方建筑,挡下敌方炮弹。 受大多数子弹攻击时有概率将其反弹。 +block.phase-wall-large.description = 保护己方建筑,挡下敌方炮弹。 受大多数子弹攻击时有概率将其反弹。 +block.surge-wall.description = 保护己方建筑,挡下敌方炮弹。 受攻击时间断释放电弧。 +block.surge-wall-large.description = 保护己方建筑,挡下敌方炮弹。 受攻击时间断释放电弧。 +block.door.description = 可以开关的墙。 +block.door-large.description = 可以开关的墙。 +block.mender.description = 定期修复附近的建筑。 \n可使用硅来提高范围和效率。 +block.mend-projector.description = 定期修复附近的建筑。 \n可使用相位织物来提高范围和效率。 +block.overdrive-projector.description = 提升附近建筑的工作效率。 \n可使用相位织物来提高范围和效率。 +block.force-projector.description = 在自身周围创建一个六边形力场,使里面的建筑和单位免受伤害。 \n承受过多伤害会导致过热,可以使用冷却液降温。 相位织物可用于增加护盾尺寸。 +block.shock-mine.description = 对踩到它的敌人释放电弧进行攻击。 +block.conveyor.description = 将物品向前方输送。 +block.titanium-conveyor.description = 将物品向前方输送,比初级传送带更快。 +block.plastanium-conveyor.description = 打包物品进行运输。 \n从后方输入物品,向前方三个方向输出物品。 需要多个装载和卸载点才能达到最大吞吐量。 +block.junction.description = 两条交叉传送带的桥梁。 +block.bridge-conveyor.description = 跨越任意地形或建筑运输物品。 +block.phase-conveyor.description = 跨越任意地形或建筑即时运输物品。 比传送带桥范围更大,但需要电力。 +block.sorter.description = 如果物品与所选种类相同,则允许其通过。 否则,物品将向两侧输出。 +block.inverted-sorter.description = 像分类器一样处理物品,不过是向两侧输出所选的物品。 +block.router.description = 将物品平均分配到其他3个方向。 +block.router.details = 这是个好东西,但也会带来麻烦。 不建议在工厂旁边使用,因为它们会被产出堵塞。 +block.distributor.description = 将物品平均分配到其他7个方向。 +block.overflow-gate.description = 当前方被阻塞时才会向两侧输出,用于处理多余的物品。 +block.underflow-gate.description = 与溢流门相反,当两侧均堵塞时才向前方运输。 +block.mass-driver.description = 远距离物品传输建筑,收集若干物品后将其发射到远处的另一个质量驱动器。 +block.mechanical-pump.description = 泵送液体,不需要电力。 +block.rotary-pump.description = 泵送液体,需要电力。 +block.thermal-pump.description = 泵送液体,需要大量电力。 +block.conduit.description = 向前方传输液体。 与泵或者其他导管联合使用。 +block.pulse-conduit.description = 向前方传输液体。 比普通导管传输液体更快,且能储存更多液体。 +block.plated-conduit.description = 向前方传输液体,不接受侧面输入。 不会发生泄露。 +block.liquid-router.description = 接受一个方向的液体输入,并平均输出到其他3个方向。 可以储存一定量的液体。 +block.liquid-tank.description = 储存大量液体,并像液体路由器一样朝各个方向输出液体。 +block.liquid-junction.description = 两条交叉导管的桥梁。 +block.bridge-conduit.description = 跨越任意地形或建筑物传输液体。 +block.phase-conduit.description = 跨越任意地形或建筑物传输液体。 比导管桥范围更大,但需要电力。 +block.power-node.description = 向连接的其他节点传输电力,也能从相邻的建筑接收电力或向其供电。 +block.power-node-large.description = 具有更大范围的高级电力节点。 +block.surge-tower.description = 用于远距离连接的电力节点,但连接数较少。 +block.diode.description = 单向传输电力,仅当此方向上电力储备较少时起作用。 +block.battery.description = 储存电网多余电力,并在电网供电不足时放电。 +block.battery-large.description = 储存电网多余电力,并在电网供电不足时放电。 比普通电池容量更高。 +block.combustion-generator.description = 燃烧煤炭之类的可燃材料发电。 +block.thermal-generator.description = 放置在炽热的地形上能够发电。 +block.steam-generator.description = 通过燃烧易燃材料并将水转化为蒸汽来发电。 +block.differential-generator.description = 利用低温流体与燃烧的硫化物之间的温差产生大量电力。 +block.rtg-generator.description = 利用放射物衰变产生的热量缓慢地产生电力。 +block.solar-panel.description = 利用太阳能产生少量电力。 +block.solar-panel-large.description = 利用太阳能产生少量电力,比标准太阳能电池板更高效。 +block.thorium-reactor.description = 从放射性的钍中产生大量的电力,需要持续冷却。 如果冷却液供应不足,会剧烈爆炸。 +block.impact-reactor.description = 达到最高效率时能产生巨量电力,但也需要大量的电力输入来启动。 +block.mechanical-drill.description = 放置在矿物上时,以缓慢的速度无限输出物品。 只能开采基本资源。 +block.pneumatic-drill.description = 一种改进的钻头,能开采钛。 采矿速度比机械钻头快。 +block.laser-drill.description = 通过激光技术更快地开采,但需要电力。 这种钻头可以开采放射性的钍。 +block.blast-drill.description = 终极钻头,需要大量电力。 +block.water-extractor.description = 从地下提取水,适用于附近没有地表水的情况。 +block.cultivator.description = 将大气中低浓度的孢子培养成孢子荚。 +block.cultivator.details = 一种失传已久的技术,用于尽可能高效地生产大量生物质。 现在覆盖了塞普罗的孢子,最初的培养设备可能就是它。 +block.oil-extractor.description = 使用沙子、 水和大量电力来钻取石油。 +block.core-shard.description = 基地的核心。 一旦被摧毁,此区块就会丢失。 +block.core-shard.details = 初代核心,坚固且能够自我维持。 不具备星际旅行的能力。 +block.core-foundation.description = 基地的核心。 装甲优良。 比初代核心容量更大。 +block.core-foundation.details = 次代核心。 +block.core-nucleus.description = 基地的核心。 装甲极佳,容量极大。 +block.core-nucleus.details = 三代也是终代核心。 +block.vault.description = 大量存储各种类型的物品。 可使用装卸器卸载物品。 +block.container.description = 少量存储各种类型的物品。 可使用装卸器卸载物品。 +block.unloader.description = 从周围的建筑卸载指定物品。 +block.launch-pad.description = 将货物发射至指定区块。 +block.duo.description = 交替向敌人发射子弹。 +block.scatter.description = 向敌方战机发射铅、 废料或钢化玻璃高射炮弹。 +block.scorch.description = 焚烧任何靠近它的地面敌人。 近距离内十分有效。 +block.hail.description = 向远距离地面敌人发射小型炮弹。 +block.wave.description = 向敌人喷射液体流。 使用水作弹药时能够自动灭火。 +block.lancer.description = 充能并向地面单位发射强力能量束。 +block.arc.description = 向地面单位发射电弧。 +block.swarmer.description = 向敌人发射追踪导弹。 +block.salvo.description = 快速地向敌人齐射子弹。 +block.fuse.description = 向附近的敌人发射三发近距离穿透性爆炸子弹。 +block.ripple.description = 向远距离地面敌人发射密集的炮弹。 +block.cyclone.description = 向附近的敌人发射密集的爆炸子弹。 +block.spectre.description = 向空中和地面目标发射大型穿甲子弹。 +block.meltdown.description = 充能并向附近的敌人发射持续的激光束。 需要冷却液才能工作。 +block.foreshadow.description = 向远距离单个目标射击。 优先攻击生命值上限较高的单位。 +block.repair-point.description = 持续修复范围内受损的单位。 +block.segment.description = 摧毁来袭的子弹或导弹,对激光无效。 +block.parallax.description = 通过牵引光束拉扯空中目标,并对其造成伤害。 +block.tsunami.description = 向敌人喷射强力的液体流。 使用水作弹药时能够自动灭火。 +block.silicon-crucible.description = 从沙子和煤中提炼硅,用硫化物作为附加热源。 在炙热地形上更高效。 +block.disassembler.description = 以低效率将矿渣液分离成微量的外来矿物成分。 能产生钍。 +block.overdrive-dome.description = 提高附近建筑物的工作效率。 需要相位织物和硅来工作。 +block.payload-conveyor.description = 运送大型载荷,例如从工厂生产的单位。 +block.payload-router.description = 将输入的载荷向3个方向轮流输出。 +block.command-center.description = 通过若干命令来控制所有单位的行为。 +block.ground-factory.description = 生产陆军单位。 产出的单位可以直接投入战场,也可以送入重构工厂进行升级。 +block.air-factory.description = 生产空军单位。 产出的单位可以直接投入战场,也可以送入重构工厂进行升级。 +block.naval-factory.description = 生产海军单位。 产出的单位可以直接投入战场,也可以送入重构工厂进行升级。 +block.additive-reconstructor.description = 将输入的单位升级到第二级。 +block.multiplicative-reconstructor.description = 将输入的单位升级到第三级。 +block.exponential-reconstructor.description = 将输入的单位升级到第四级。 +block.tetrative-reconstructor.description = 将输入的单位升级到第五级,即最终极。 +block.switch.description = 可切换的开关。 开关状态可以用逻辑处理器读取和控制。 +block.micro-processor.description = 循环运行一系列逻辑指令,可用于控制单位和建筑物。 +block.logic-processor.description = 循环运行一系列逻辑指令,可用于控制单位和建筑物。 比微型处理器更快。 +block.hyper-processor.description = 循环运行一系列逻辑指令,可用于控制单位和建筑物。 比逻辑处理器更快。 +block.memory-cell.description = 存储处理器的信息。 +block.memory-bank.description = 存储处理器的信息。 容量更大。 +block.logic-display.description = 显示处理器中绘制的各种图形。 +block.large-logic-display.description = 显示处理器中绘制的各种图形。 +block.interplanetary-accelerator.description = 一个巨大的电磁轨道加速器。 将核心加速至逃逸速度以进行星际部署。 +block.repair-turret.description = 持续修复范围内受损的单位。 可以用冷却液强化。 +block.payload-propulsion-tower.description = 远距离的载荷运送建筑。 向相连的其他载荷驱动器发射载荷。 -unit.dagger.description = 向附近所有敌人发射标准子弹。 -unit.mace.description = 向附近所有敌人喷射火焰。 -unit.fortress.description = 向附近所有地面敌人发射远程火炮。 -unit.scepter.description = 向附近所有敌人发射一串电荷弹。 -unit.reign.description = 向附近所有敌人发射巨型穿甲弹。 -unit.nova.description = 发射激光弹攻击敌人并修复友方建筑。能够飞行。 -unit.pulsar.description = 发射数条电弧攻击敌人并修复友方建筑。能够飞行。 -unit.quasar.description = 发射穿透性激光束攻击敌人并修复友方建筑。能够飞行。拥有护盾。 -unit.vela.description = 发射巨型持续激光束攻击敌人,点燃敌人并修复友方建筑。能够飞行。 -unit.corvus.description = 发射巨型爆破激光束攻击敌人并修复友方建筑。可以跨越大多数地形。 -unit.crawler.description = 冲向敌人并自毁,造成大爆炸。 -unit.atrax.description = 向地面敌人发射削弱性矿渣球。可以跨越大多数地形。 -unit.spiroct.description = 向敌人发射激光束,并在此过程中自我修复。可以跨越大多数地形。 -unit.arkyid.description = 向敌人发射大型激光束,并在此过程中自我修复。可以跨越大多数地形。 -unit.toxopid.description = 向敌人发射大型电能集束炮弹和穿透性激光。可以跨越大多数地形。 -unit.flare.description = 向附近所有地面敌人发射标准子弹。 -unit.horizon.description = 向地面敌人投下炸弹簇。 -unit.zenith.description = 向附近所有敌人发射导弹群。 -unit.antumbra.description = 向附近所有敌人发射弹幕。 -unit.eclipse.description = 向附近所有敌人发射两道穿透性激光和一连串子弹。 -unit.mono.description = 自动开采铜和铅,并将其放入核心中。 -unit.poly.description = 自动重建被摧毁的建筑并协助其他单位建造。 -unit.mega.description = 自动修复受损结构。能够携带方块和小型地面部队。 -unit.quad.description = 向地面敌人投掷大型炸弹,修复友方建筑并攻击敌人。能够携带中型地面部队。 -unit.oct.description = 用它的再生护盾保护附近的友方单位。能够携带大多数地面部队。 -unit.risso.description = 向附近所有敌人发射一连串的导弹和子弹。 -unit.minke.description = 向附近所有敌人发射炮弹和标准子弹。 -unit.bryde.description = 向附近所有敌人发射远程炮弹和导弹。 -unit.sei.description = 向附近所有敌人发射一连串的导弹和穿甲弹。 -unit.omura.description = 向附近所有敌人发射远程穿透轨道炮。构造星辉单位。 -unit.alpha.description = 保护初代核心。可建造建筑。 -unit.beta.description = 保护次代核心。可建造建筑。 -unit.gamma.description = 保护终代核心。可建造建筑。 -unit.retusa.description = 在附近放置水雷并修复友方建筑。 -unit.oxynoe.description = 向附近所有敌人喷射火焰并修复友方建筑。使用点防御摧毁附近的敌方射弹。 -unit.cyerce.description = 向附近所有敌人发射跟踪集束导弹并修复友方建筑。 -unit.aegires.description = 电击一切在它能量场范围内的敌方单位和建筑并修复所有友方单位和建筑。 -unit.navanax.description = 发射电磁脉冲爆弹,破坏敌方电网并修复友方建筑。使用四门自动激光炮塔融化附近所有敌人。 +unit.dagger.description = 向附近的敌人发射标准子弹。 +unit.mace.description = 向附近的敌人喷射火焰。 +unit.fortress.description = 向地面敌人发射远距离火炮。 +unit.scepter.description = 向敌人快速发射带电子弹。 +unit.reign.description = 向敌人快速发射大型穿透子弹。 +unit.nova.description = 发射激光弹来攻击敌人并修复友方建筑。 能够助推。 +unit.pulsar.description = 发射电弧来攻击敌人并修复友方建筑。 能够助推。 +unit.quasar.description = 发射穿透性激光束来攻击敌人并修复友方建筑。 能够助推。 拥有护盾。 +unit.vela.description = 发射巨大的持续激光束攻击敌人并引起燃烧,修复友方建筑。 能够助推。 +unit.corvus.description = 发射巨大的爆发激光束,摧毁敌人并修复友方建筑。 可以跨越大多数地形。 +unit.crawler.description = 冲向敌人并自毁,造成大范围爆炸。 +unit.atrax.description = 向地面目标发射削弱性的球状矿渣液。 可以跨越大多数地形。 +unit.spiroct.description = 向敌人发射较弱的激光束,并在此过程中自我修复。 可以跨越大多数地形。 +unit.arkyid.description = 向敌人发射大型激光束,并在此过程中自我修复。 可以跨越大多数地形。 +unit.toxopid.description = 向敌人发射大型带电集束炮弹和穿透激光。 可以跨越大多数地形。 +unit.flare.description = 向附近的地面敌人发射标准子弹。 +unit.horizon.description = 向正下方的地面敌人投掷炸弹。 +unit.zenith.description = 向附近的敌人发射多枚导弹。 +unit.antumbra.description = 向附近的敌人发射密集的子弹。 +unit.eclipse.description = 向附近的敌人发射穿透性激光和爆炸性炮弹。 +unit.mono.description = 自动开采铜和铅,并将其放入核心中。 +unit.poly.description = 自动重建已摧毁的建筑,并在其他单位进行建造时提供协助。 +unit.mega.description = 自动修复受损建筑。 能够携带建筑和小型地面单位。 +unit.quad.description = 向地面目标投掷大型炸弹,修复友方建筑并摧毁敌人。 \n能够携带中型地面单位。 +unit.oct.description = 用它的再生护盾保护附近的友方单位。 能够携带大多数地面单位。 +unit.risso.description = 向附近的敌人发射一连串的导弹和子弹。 +unit.minke.description = 向附近的敌人发射炮弹和标准子弹。 +unit.bryde.description = 向敌人远距离发射炮弹和导弹。 +unit.sei.description = 向敌人发射一连串的导弹和穿甲弹。 +unit.omura.description = 向敌人发射远程穿透轨道炮。 可自动生产星辉单位。 +unit.alpha.description = 保护初代核心,可建造建筑。 +unit.beta.description = 保护次代核心,可建造建筑。 +unit.gamma.description = 保护终代核心,可建造建筑。 +unit.retusa.description = 放置水雷,并修复友方单位。 +unit.oxynoe.description = 向附近的敌人发射火焰束,并修复友方建筑。 具备一台单点防御炮塔,能够防御来袭的子弹。 +unit.cyerce.description = 向敌人发射追踪集束导弹,并修复友方单位。 +unit.aegires.description = 产生能量场,使范围内的敌方建筑与单位受到电击,对友方则进行修复。 +unit.navanax.description = 发射大型电磁爆弹,对敌方电网造成显著破坏并修复友方建筑。 搭载4台自动激光炮台,能熔化靠近的敌人。 lst.read = 从连接的内存读取数字 -lst.write = 写入数字到连接的内存 -lst.print = 添加文字到打印缓存\n用了[accent]Print Flush[]才会显示 -lst.draw = 添加操作到绘图队列\n用了[accent]Draw Flush[]才会显示 -lst.drawflush = 刷新列队的[accent]Draw[]操作到显示屏 -lst.printflush = 刷新[accent]Print[]缓存的文字到消息板 -lst.getlink = 获取处理器连接\n索引从0开始 +lst.write = 向连接的内存写入数字 +lst.print = 添加文字到打印缓存\n使用[accent]Print Flush[]后才会真正显示 +lst.draw = 添加绘图操作到绘图缓存\n使用[accent]Draw Flush[]后才会真正显示 +lst.drawflush = 将绘图缓存中的[accent]Draw[]队列刷新到显示屏 +lst.printflush = 将打印缓存中的[accent]Print[]队列刷新到信息板 +lst.getlink = 获取与处理器连接的建筑\n建筑编号从0开始 lst.control = 控制建筑 -lst.radar = 定位建筑周边的单位\n有范围限制 -lst.sensor = 从建筑或单位取得数据 -lst.set = 设置变量 -lst.operation = 操作一两个变量 -lst.end = 跳至指令栈顶\n(第一条语句) -lst.wait = 等待指定的秒数。 -lst.lookup = 通过ID寻找特定的物品/液体/单位/块的类型。\n查找每个类型的总数量可以使用:\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] -lst.jump = 有条件地跳到另一语句 -lst.unitbind = 绑定下一个某型号单位\n并存到[accent]@unit[] -lst.unitcontrol = 控制绑定的单位 -lst.unitradar = 定位绑定的单位周围的单位 -lst.unitlocate = 定位指定类型的建筑或位置\n全图范围,需要绑定单位 +lst.radar = 让建筑搜寻感知范围内的单位 +lst.sensor = 从建筑或者单位中获取数据 +lst.set = 给变量赋值 +lst.operation = 使用1至2个参数执行运算/函数 +lst.end = 跳转至第一条指令 +lst.wait = 等待指定的秒数 +lst.lookup = 根据ID查阅一种物品/液体/单位/建筑\n各个分类中的项目总数是\n[accent]@unitCount[] / [accent]@itemCount[] / [accent]@liquidCount[] / [accent]@blockCount[] +lst.jump = 根据条件判断,决定是否跳转至另一条指令 +lst.unitbind = 绑定某个类型的下一个单位\n并保存至[accent]@unit[] +lst.unitcontrol = 控制已绑定的单位 +lst.unitradar = 让绑定的单位搜寻感知范围内的其他单位 +lst.unitlocate = 让绑定的单位搜寻整个地图中特定的建筑或位置 -logic.nounitbuild = [red]这儿不允许处理器控制单位去建设 +logic.nounitbuild = [red]此处不允许处理器操控单位去建设 -lenum.type = 建筑和单位的类型,不是字串\n比如路由器返回[accent]@router[] -lenum.shoot = 瞄准/射击某个位置 -lenum.shootp = 按提前量瞄准/射击目标 -lenum.configure = 建筑配置,比如分拣器分拣的物品 -lenum.enabled = 建筑的启用状态 +lenum.type = 建筑和单位的类型,返回一个“类型”而非字符串\n例如对路由器使用,会返回[accent]@router[] +lenum.shoot = 向某个位置瞄准/射击 +lenum.shootp = 根据提前量向某个单位或建筑瞄准/射击 +lenum.config = 建筑设置,例如分类器所设置的筛选物品种类 +lenum.enabled = 建筑是否已启用 laccess.color = 照明器发光的颜色 -laccess.controller = 单位控制者\n如果是处理器,返回处理器\n如果在编队中,返回领队\n其他的,返回单位自己 -laccess.dead = 单位或建筑是不是死了或无效了 -laccess.controlled = 若单位控制者是处理器,返回[accent]@ctrlProcessor[]\n若单位/建筑由玩家控制,返回[accent]@ctrlPlayer[]\n若单位在编队中,返回[accent]@ctrlFormation[]\n其他的,返回0 -laccess.commanded = [red]已弃用,将被移除![]\n应该使用[accent]controlled[] -laccess.progress = 动作进度, 范围0~1。\n返回方块生产、炮塔装填或建造的进度。 +laccess.controller = 单位的控制方\n如果单位由处理器控制,返回对应的处理器\n如果单位在编队中,返回编队的领队\n其他情况,返回单位自身 +laccess.dead = 单位或建筑是否已被摧毁或者已失效 +laccess.controlled = 若单位的控制方是处理器,返回[accent]@ctrlProcessor[]\n若单位/建筑由玩家控制,返回[accent]@ctrlPlayer[]\n若单位在编队中,返回[accent]@ctrlFormation[]\n其他情况,返回0 +laccess.commanded = [red]已废弃,将被移除![]\n已由[accent]controlled[]替代 +laccess.progress = 进度,0到1之间的数值。 \n返回工厂生产、 炮塔装填,或者建筑建造的进度 -graphicstype.clear = 用指定颜色填满显示屏 -graphicstype.color = 设置后续画图操作的颜色 -graphicstype.stroke = 设置线宽 -graphicstype.line = 画线段 -graphicstype.rect = 填充矩形 -graphicstype.linerect = 画矩形框 -graphicstype.poly = 填充正多边形 -graphicstype.linepoly = 画正多边形框 -graphicstype.triangle = 填充三角形 -graphicstype.image = 画出游戏内容的图像\n比如,[accent]@router[]和[accent]@dagger[] +graphicstype.clear = 用指定的颜色填充整个显示屏 +graphicstype.color = 设置后续画图操作所使用的颜色 +graphicstype.stroke = 设置线条宽度 +graphicstype.line = 绘制线段 +graphicstype.rect = 绘制实心矩形 +graphicstype.linerect = 绘制矩形轮廓 +graphicstype.poly = 绘制实心正多边形 +graphicstype.linepoly = 绘制正多边形轮廓 +graphicstype.triangle = 绘制实心三角形 +graphicstype.image = 画出某个游戏内容的图像\n例如[accent]@router[]或者[accent]@dagger[] -lenum.always = 总是跳转 -lenum.idiv = 整除 +lenum.always = 无条件跳转 +lenum.idiv = 整数除法,返回不带小数的商 lenum.div = 除法,除以0时返回[accent]null[] -lenum.mod = 取余数 -lenum.equal = 相等。有转换\nnull比较数字时算作0,非null对象算作1 -lenum.notequal = 不相等。有转换 -lenum.strictequal = 严格相等。不转换\n可用于检查[accent]null[] +lenum.mod = 求除法的余数 +lenum.equal = 相等。 转换参数类型后进行比较\n与数字进行比较时,null转换为0,非null对象转换为1 +lenum.notequal = 不相等。 转换参数类型后进行比较 +lenum.strictequal = 严格相等。 不转换参数类型\n可用于准确检查[accent]null[]对象 lenum.shl = 左移位 lenum.shr = 右移位 lenum.or = 按位或 @@ -1651,92 +1678,92 @@ lenum.and = 按位与 lenum.not = 按位非 lenum.xor = 按位异或 -lenum.min = 取小的那个数 -lenum.max = 取大的那个数 -lenum.angle = 方位角° -lenum.len = 原点到该点距离 +lenum.min = 取较小值 +lenum.max = 取较大值 +lenum.angle = 返回向量的辐角(角度制) +lenum.len = 返回向量的长度 -lenum.sin = 正弦°(对边:斜边) -lenum.cos = 余弦°(邻边:斜边) -lenum.tan = 正切°(对边:邻边) +lenum.sin = 正弦(角度制) +lenum.cos = 余弦(角度制) +lenum.tan = 正切(角度制) -lenum.asin = 反正弦 -lenum.acos = 反余弦 -lenum.atan = 反正切 +lenum.asin = 反正弦(角度制) +lenum.acos = 反余弦(角度制) +lenum.atan = 反正切(角度制) -#not a typo, look up 'range notation' -lenum.rand = [0, 值) 范围内随机数 -lenum.log = 自然对数(ln) -lenum.log10 = 10底对数 +#not a typo, look up 'range notation'(括号不配非笔误,实乃区间表示法) +lenum.rand = 取 [0, 参数) 范围内的一个随机数 +lenum.log = 自然对数(ln) +lenum.log10 = 以10为底的对数 lenum.noise = 二维单形噪声 lenum.abs = 绝对值 -lenum.sqrt = 二次方根 +lenum.sqrt = 开平方 lenum.any = 任意单位 lenum.ally = 友方单位 lenum.attacker = 有武器的单位 lenum.enemy = 敌方单位 lenum.boss = Boss单位 -lenum.flying = 飞行单位 +lenum.flying = 空中单位 lenum.ground = 地面单位 lenum.player = 玩家控制的单位 -lenum.ore = 矿床 +lenum.ore = 矿脉 lenum.damaged = 受损的友方建筑 -lenum.spawn = 敌人出生点\n可能是核心或地点 -lenum.building = 分组内的建筑 +lenum.spawn = 敌人出生点\n可以是核心或者某个坐标 +lenum.building = 某个分类下的建筑 lenum.core = 核心 -lenum.storage = 容器/仓库 +lenum.storage = 仓储建筑(容器/仓库) lenum.generator = 发电建筑 -lenum.factory = 工厂 +lenum.factory = 生产物品的工厂 lenum.repair = 维修点 lenum.rally = 指挥中心 lenum.battery = 电池 -lenum.resupply = 补给点\n仅当启用[accent]“单位弹药”[]时有用 +lenum.resupply = 补给点\n仅当启用了[accent]“单位有弹药限制”[]时生效 lenum.reactor = 钍反应堆/冲击反应堆 lenum.turret = 炮塔 -sensor.in = 要传感的建筑或单位 +sensor.in = 所获取数据的建筑或单位 -radar.from = 要实施探测的建筑\n探测距离受限于建筑范围 -radar.target = 筛选要探测的单位 -radar.and = 更多筛子 -radar.order = 排序:1(true)从小到大 0(false)反序 -radar.sort = 排序的量度 -radar.output = 输出单位的变量 +radar.from = 以哪个建筑为中心展开搜寻\n搜寻距离受限于该建筑的感知范围 +radar.target = 筛选搜寻的单位类型 +radar.and = 额外的筛选条件 +radar.order = 排序方式:1/true 从小到大,0/false 反之 +radar.sort = 排序标准 +radar.output = 找到的单位存入此变量 -unitradar.target = 筛选要探测的单位 -unitradar.and = 更多筛子 -unitradar.order = 排序:1(true)从小到大 0(false)反序 -unitradar.sort = 排序的量度 -unitradar.output = 输出单位的变量 +unitradar.target = 筛选搜寻的单位类型 +unitradar.and = 额外的筛选条件 +unitradar.order = 排序方式:1/true 从小到大,0/false 反之 +unitradar.sort = 排序标准 +unitradar.output = 找到的单位存入此变量 control.of = 要控制的建筑 control.unit = 要瞄准的单位或建筑 control.shoot = 是否射击 -unitlocate.enemy = 定位敌方还是我方建筑 -unitlocate.found = 有没有找到 -unitlocate.building = 找到的建筑的输出变量 -unitlocate.outx = 输出X坐标 -unitlocate.outy = 输出Y坐标 -unitlocate.group = 要找的建筑组 +unitlocate.enemy = 是否搜寻敌方建筑(0或false则搜寻友方建筑) +unitlocate.found = 若找到,在此变量中存入true;未找到则存入false +unitlocate.building = 找到的建筑存入此变量 +unitlocate.outx = 存入找到的X轴坐标 +unitlocate.outy = 存入找到的Y轴坐标 +unitlocate.group = 所搜寻的建筑分类 -lenum.idle = 不移动,但进行采矿/修建\n默认状态 -lenum.stop = 停止移动/采矿/修建 +lenum.idle = 原地不动,但继续进行手上的采矿/建造动作\n单位的默认状态 +lenum.stop = 停止移动/采矿/建造动作 lenum.move = 移动到某个位置 -lenum.approach = 接近到某个圆形区域 -lenum.pathfind = 找路去敌人出生点 -lenum.target = 瞄准/射击某个位置 -lenum.targetp = 按提前量瞄准/射击目标 -lenum.itemdrop = 放物品到建筑 -lenum.itemtake = 从建筑拿物品 -lenum.paydrop = 放下当前载荷 -lenum.paytake = 从地上拿起载荷 -lenum.flag = 数字值的单位旗标 -lenum.mine = 采矿 -lenum.build = 修建结构 -lenum.getblock = 获取某坐标的建筑和类型\n坐标需在单位范围内\n或单位在建筑范围内\n地形物类型是[accent]@solid[]或[accent]@air[] -lenum.within = 检查单位在不在半径内 +lenum.approach = 靠近某个位置至一定的距离内 +lenum.pathfind = 寻路移动至敌人出生点 +lenum.target = 向某个位置瞄准/射击 +lenum.targetp = 根据提前量向某个目标瞄准/射击 +lenum.itemdrop = 将携带的物品放入一座建筑 +lenum.itemtake = 从建筑中取出某种物品 +lenum.paydrop = 卸下当前载荷 +lenum.paytake = 从当前位置拾取载荷 +lenum.flag = 给单位赋予数字形式的标记 +lenum.mine = 从某个位置采集矿物 +lenum.build = 建造建筑 +lenum.getblock = 获取某个坐标处的建筑及其类型\n坐标需要在单位的感知范围内\n无建筑的地面返回[accent]@air[],墙壁返回[accent]@solid[] +lenum.within = 检查单位是否接近了某个位置 lenum.boost = 开始/停止助推 From d33a4f9f8774aca239d01de7a555c4a5f9076eb5 Mon Sep 17 00:00:00 2001 From: JrTRinny <85090668+JrTRinny@users.noreply.github.com> Date: Mon, 13 Sep 2021 01:55:26 +0700 Subject: [PATCH 54/61] More Target varieties for energy field ability (#5828) * more targets for energy field ability * group booleans --- .../entities/abilities/EnergyFieldAbility.java | 16 +++++++++------- 1 file changed, 9 insertions(+), 7 deletions(-) diff --git a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java index 576354e7c9..1bd906dfcc 100644 --- a/core/src/mindustry/entities/abilities/EnergyFieldAbility.java +++ b/core/src/mindustry/entities/abilities/EnergyFieldAbility.java @@ -26,7 +26,7 @@ public class EnergyFieldAbility extends Ability{ public Sound shootSound = Sounds.spark; public float statusDuration = 60f * 6f; public float x, y; - public boolean hitBuildings = true; + public boolean targetGround = true, targetAir = true, hitBuildings = true, hitUnits = true; public int maxTargets = 25; public float healPercent = 2.5f; @@ -99,13 +99,15 @@ public class EnergyFieldAbility extends Ability{ all.clear(); - Units.nearby(null, rx, ry, range, other -> { - if(other != unit){ - all.add(other); - } - }); + if(hitUnits){ + Units.nearby(null, rx, ry, range, other -> { + if(other != unit && (other.isFlying() ? targetAir : targetGround)){ + all.add(other); + } + }); + } - if(hitBuildings){ + if(hitBuildings && targetGround){ Units.nearbyBuildings(rx, ry, range, b -> { if(b.team != Team.derelict || state.rules.coreCapture){ all.add(b); From ca62deaaa926a8359e07117e1e960c2d0dfc8832 Mon Sep 17 00:00:00 2001 From: fuzzbuck <54221024+fuzzbuck@users.noreply.github.com> Date: Sun, 12 Sep 2021 21:09:52 +0200 Subject: [PATCH 55/61] Change io event server (#5981) (offline at this time) will used for events & seasonal modes --- servers_v7.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v7.json b/servers_v7.json index 3fedf64b61..98765e821d 100644 --- a/servers_v7.json +++ b/servers_v7.json @@ -37,7 +37,7 @@ }, { "name": "io", - "address": ["mindustry.io.community", "mindustry.io.community:1000", "mindustry.io.community:2000", "mindustry.io.community:3000", "mindustry.io.community:4000", "mindustry.io.community:5000"] + "address": ["mindustry.io.community", "mindustry.io.community:1000", "mindustry.io.community:2000", "mindustry.io.community:3000", "mindustry.io.community:4000", "labs.io.community"] }, { "name": "Korea", From 087cd2c55a7a958bc39c5fa6cb7d2788f687562a Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 12 Sep 2021 20:21:55 -0400 Subject: [PATCH 56/61] Cleanup --- core/src/mindustry/world/blocks/defense/Wall.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/world/blocks/defense/Wall.java b/core/src/mindustry/world/blocks/defense/Wall.java index 38f1b4f100..12ae157afd 100644 --- a/core/src/mindustry/world/blocks/defense/Wall.java +++ b/core/src/mindustry/world/blocks/defense/Wall.java @@ -95,7 +95,7 @@ public class Wall extends Block{ //deflect bullets if necessary if(chanceDeflect > 0f){ //slow bullets are not deflected - if(bullet.vel().len() <= 0.1f || !bullet.type.reflectable) return true; + if(bullet.vel.len() <= 0.1f || !bullet.type.reflectable) return true; //bullet reflection chance depends on bullet damage if(!Mathf.chance(chanceDeflect / bullet.damage())) return true; @@ -114,9 +114,9 @@ public class Wall extends Block{ bullet.vel.y *= -1; } - bullet.owner(this); - bullet.team(team); - bullet.time(bullet.time() + 1f); + bullet.owner = this; + bullet.team = team; + bullet.time += 1f; //disable bullet collision by returning false return false; From d20048fe11e0cbe8a7b6c942341b1afc9c76bcea Mon Sep 17 00:00:00 2001 From: kituta <85106525+kituta@users.noreply.github.com> Date: Mon, 13 Sep 2021 21:44:13 +0900 Subject: [PATCH 57/61] Update bundle_ja.properties (#5849) MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit * Update bundle_ja.properties Addition. //追加 Changed wording of the toolmode. //toolmodeの文言を変更 Small fixes. //小さな修正 * Update bundle_ja.properties Change of wording //文言の変更 * Update bundle_ja.properties Addition. //追加 * Update bundle_ja.properties Addition. //追加 366 editor.cliffs = Walls To Cliffs は「建築不能領域を表す断崖の壁を描く機能」だと思いますが、把握できていないため未翻訳で置いておきます。 「断崖を描く」 * Update bundle_ja.properties Add * Update bundle_ja.properties fix //句点を忘れていました * Update bundle_ja.properties Small fixes. //小さな修正 --- core/assets/bundles/bundle_ja.properties | 55 +++++++++++++++--------- 1 file changed, 35 insertions(+), 20 deletions(-) diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 6f4b586f0e..3698123f3c 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -85,7 +85,7 @@ stat.destroyed = 破壊した建造物数:[accent] {0} stat.deconstructed = 解体した建造物数:[accent] {0} stat.playtime = プレイ時間:[accent] {0} -globalitems = [accent]グローバルアイテム +globalitems = [accent]トータルアイテム map.delete = マップ "[accent]{0}[]" を削除してもよろしいですか? level.highscore = ハイスコア: [accent]{0} level.select = レベル選択 @@ -93,6 +93,7 @@ level.mode = ゲームモード: coreattack = < コアが攻撃を受けています! > nearpoint = [[ [scarlet]直ちに出現ポイントより離脱せよ[] ]\n殲滅されます database = コアデータベース +database.button = データベース savegame = 保存 loadgame = 読み込む joingame = マルチプレイ @@ -121,12 +122,12 @@ committingchanges = 変更を適応中 done = 完了 feature.unsupported = あなたのデバイスはこの機能をサポートしていません。 -mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。おそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします。 +mods.initfailed = [red]⚠[] 以前のMindustryの初期化に失敗しました。\nおそらくModの誤作動が原因です。\n\nクラッシュループを防ぐために、[red]全てのModが無効になっています。[]\n\nこの機能を無効にするのは、[accent]設定->ゲーム->起動時にクラッシュした場合にModを無効にする[]をオフにします。 mods = Mods mods.none = [lightgray]Modが見つかりませんでした! mods.guide = Mod作成ガイド mods.report = バグを報告する -mods.openfolder = Modのフォルダを開く +mods.openfolder = Modフォルダを開く mods.viewcontent = コンテンツを見る mods.reload = 再読み込み mods.reloadexit = Modを読み込む為にゲームを再起動します。 @@ -168,6 +169,7 @@ launchcore = コアを打ち上げる filename = ファイル名: unlocked = 新しい要素をアンロック! available = 新しい研究が利用可能です! +unlock.incampaign = < 詳細はキャンペーンでアンロックしてください > completed = [accent]完了 techtree = テックツリー research.legacy = [accent]5.0[] の研究データが見つかりました。\n[accent]このデータを読み込みますか?[] それとも、[accent]破棄して新しいキャンペーンで研究をやり直しますか?[](推奨) @@ -361,6 +363,7 @@ publish.confirm = 公開してもよろしいですか?\n\n[lightgray]最初 publish.error = 公開中のエラー: {0} steam.error = Steam サービスの初期化に失敗しました。\nエラー: {0} +editor.cliffs = 壁を崖にする editor.brush = ブラシ editor.openin = エディターで開く editor.oregen = 鉱石の生成 @@ -393,6 +396,13 @@ waves.load = クリップボードから読み込む waves.invalid = クリップボードのウェーブは無効なウェーブです。 waves.copied = ウェーブをコピーしました。 waves.none = 敵が定義されていません。\n空のウェーブレイアウトはデフォルトのレイアウトに自動的に置き換えられます。 +waves.sort = 昇順 +waves.sort.reverse = 降順 +waves.sort.begin = 開始 +waves.sort.health = 体力 +waves.sort.type = タイプ +waves.units.hide = すべて非表示 +aves.units.show = すべて表示 #these are intentionally in lower case wavemode.counts = 数 @@ -447,19 +457,19 @@ editor.exists = すでに同じ名前のマップが存在します。 editor.selectmap = 読み込むマップを選択: toolmode.replace = 置換 -toolmode.replace.description = 固体ブロックのみに描きます。 +toolmode.replace.description = 同系統のブロックのみを置換する。 toolmode.replaceall = 全て置換 -toolmode.replaceall.description = このマップにあるすべてのブロックを置き換えます。 -toolmode.orthogonal = 直角 -toolmode.orthogonal.description = 直角の線を描きます。 +toolmode.replaceall.description = マップ内の同ブロックをすべて置換する。 +toolmode.orthogonal = 水平垂直 +toolmode.orthogonal.description = 水平もしくは垂直に線を描きます。 toolmode.square = 四角形 toolmode.square.description = 四角形のブラシです。 toolmode.eraseores = 鉱石消しゴム -toolmode.eraseores.description = 鉱石のみを消します。 -toolmode.fillteams = チームで埋める -toolmode.fillteams.description = ブロックの代わりにチームで埋めます。 -toolmode.drawteams = チームを描く -toolmode.drawteams.description = ブロックの代わりにチームを描きます。 +toolmode.eraseores.description = 鉱石のみを消します。(敵の出現場所含む) +toolmode.fillteams = チームを変更 +toolmode.fillteams.description = ブロックの所属チームを上書きします。 +toolmode.drawteams = チームを変更 +toolmode.drawteams.description = ブロックの所属チームを上書きします。 filters.empty = [lightgray]フィルターが設定されていません! 下のボタンからフィルターを追加してください。 @@ -475,7 +485,7 @@ filter.defaultores = デフォルトの鉱石 filter.ore = 鉱石 filter.rivernoise = 川の生成 filter.mirror = 反転 -filter.clear = クリアー +filter.clear = クリア filter.option.ignore = 無視 filter.scatter = 分散 filter.terrain = 地形 @@ -582,7 +592,7 @@ sectors.nonelaunch = [lightgray]無し (sun) sectors.rename = セクター名を変更 sectors.enemybase = [scarlet]敵基地 sectors.vulnerable = [scarlet]脆弱 -sectors.underattack = [scarlet]攻撃を受けます! [accent]{0}% 破損 +sectors.underattack = [scarlet]攻撃を受けています! [accent]{0}% 破損 sectors.survives = [accent]{0} ウェーブ生存 sectors.go = Go sector.curcapture = 制圧したセクター @@ -621,6 +631,8 @@ sector.biomassFacility.name = バイオマス · シンテシス · ファシリ sector.windsweptIslands.name = ウインドスイープト · アイランズ sector.extractionOutpost.name = エクストラクション · アウトポスト sector.planetaryTerminal.name = プラネタリー · ローンチ · ターミナル +sector.coastline.name = 海岸線 +sector.navalFortress.name = 海軍要塞 sector.groundZero.description = 奪回を始めるには最適な場所です。敵脅威は低いですが、資源が乏しいです。\nできるだけ多くの銅と鉛を集めます。\n始めましょう。 sector.frozenForest.description = ここでさえ、山に近づくほど胞子が広がっています。\n極寒の気温もそれらを永遠に封じ込めることはできませんでした。\n\n電気に挑みましょう。\n火力発電機を建設し、修復機の使い方を学びましょう。 @@ -648,6 +660,7 @@ status.sapped.name = 吸収 status.electrified.name = 帯電 status.spore-slowed.name = 鈍化胞子 status.tarred.name = 石油塗れ +status.overdrive.name = オーバードライブ status.overclock.name = オーバークロック status.shocked.name = 電撃 status.blasted.name = 爆破 @@ -904,7 +917,7 @@ setting.savecreate.name = 自動保存 setting.publichost.name = 誰でもゲームに参加できるようにする setting.playerlimit.name = プレイヤー数制限 setting.chatopacity.name = チャットの透明度 -setting.lasersopacity.name = レーザーの透明度 +setting.lasersopacity.name = 電線の透明度 setting.bridgeopacity.name = ブリッジの透明度 setting.playerchat.name = ゲーム内にチャットを表示 setting.showweather.name = 天気のグラフィックを表示 @@ -990,14 +1003,14 @@ keybind.drop_unit.name = ドロップユニット keybind.zoom_minimap.name = ミニマップのズーム mode.help.title = モード説明 mode.survival.name = サバイバル -mode.survival.description = 通常のモードです。 資源も限られる中、自動的にウェーブが進行していきます。\n[gray]プレイするには、マップに敵が出現する必要があります。 +mode.survival.description = 通常のモードです。資源も限られる中、自動的にウェーブが進行していきます。\n[gray]マップに敵の出現設定が必要です。 mode.sandbox.name = サンドボックス mode.sandbox.description = 無限の資源があり、ウェーブを自由に進行できます。 mode.editor.name = エディター mode.pvp.name = PvP -mode.pvp.description = エリア内で他のプレイヤーと戦います。\n[gray]プレイするには、マップに少なくとも二つの異なる色のコアが必要です。 +mode.pvp.description = エリア内で他のプレイヤーと戦います。\n[gray]マップに少なくとも異なる2色のコアが必要です。 mode.attack.name = アタック -mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。\n[gray]プレイするには、マップに赤色のコアが必要です。 +mode.attack.description = ウェーブがなく、敵の基地を破壊することを目指します。\n[gray]マップに赤色のコアが必要です。 mode.custom = カスタムルール rules.infiniteresources = 資源の無限化 @@ -1019,7 +1032,7 @@ rules.unitbuildspeedmultiplier = ユニットの製造速度倍率 rules.unithealthmultiplier = ユニットの体力倍率 rules.unitdamagemultiplier = ユニットのダメージ倍率 rules.unitcapvariable = コア数によってユニット上限を変動 -rules.unitcap = ベースのユニット上限数 +rules.unitcap = 基礎ユニット上限数 rules.enemycorebuildradius = 敵コア周辺の建設禁止区域の半径:[lightgray] (タイル) rules.wavespacing = ウェーブ間の待機時間:[lightgray] (秒) rules.buildcostmultiplier = 建設コストの倍率 @@ -1153,7 +1166,8 @@ block.core-foundation.name = コア: ファンデーション block.core-nucleus.name = コア: ニュークリアス block.deep-water.name = 深層水 block.shallow-water.name = 水 -block.tainted-water.name = 汚れた水 +block.tainted-water.name = 汚水 +block.deep-tainted-water.name = 深層汚水 block.darksand-tainted-water.name = 黒い砂で汚れた水 block.tar.name = タール block.stone.name = 石 @@ -1388,6 +1402,7 @@ hint.generator = \uf879 [accent]火力発電機[]石炭を燃やし、隣接す hint.guardian = [accent]ガーディアン[]ユニットは装甲を搭載しています。[accent]銅[]や[accent]鉛[]などの弱い弾薬は[scarlet]効果がありません[]。\n\n強力なターレット、または\uf861デュオ/\uf859サルボーの弾薬に\uf835 [accent]黒鉛[]を使用してガーディアンを撃破してください。 hint.coreUpgrade = コアは [accent]上位のコアを配置することでアップグレードできます[]。\n\n  [accent]シャード[]コアの上に、  [accent]ファンデーション[]コアを置きます。近くに障害物がないことを確認してください。 hint.presetLaunch = [accent]フローズン · フォレスト[]などの灰色の[accent]着陸ゾーンセクター[]には、どこからでも発射できるため近くの領土を確保する必要はありません。\n\nしかし、このような[accent]数字のセクター[]では[accent]この限りではありません[]。 +hint.presetDifficulty = このセクターは[scarlet]敵の脅威レベルが高いです[]。\nこのようなセクターへの出撃は、適切な技術と準備なしには[accent]お勧めできません[]。 hint.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず[accent]破棄[]されます。 hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは[accent]あなたのセクター[]に移送されます。\n\nホストが行った新しい研究も引き継がれます。 From 826ddf4aad3c6f75c196a422e1eb1bb9dccfe696 Mon Sep 17 00:00:00 2001 From: Anuken Date: Mon, 13 Sep 2021 09:03:56 -0400 Subject: [PATCH 58/61] strip message newlines --- core/src/mindustry/core/NetClient.java | 2 ++ 1 file changed, 2 insertions(+) diff --git a/core/src/mindustry/core/NetClient.java b/core/src/mindustry/core/NetClient.java index 38e87b32ae..6a0d0929d9 100644 --- a/core/src/mindustry/core/NetClient.java +++ b/core/src/mindustry/core/NetClient.java @@ -218,6 +218,8 @@ public class NetClient implements ApplicationListener{ throw new ValidateException(player, "Player has sent a message above the text limit."); } + message = message.replace("\n", ""); + Events.fire(new PlayerChatEvent(player, message)); //log commands before they are handled From 2906c61d062ddea3e2cfecf11c68cb2dec87fc3c Mon Sep 17 00:00:00 2001 From: Darkness6030 <79508138+Darkness6030@users.noreply.github.com> Date: Mon, 13 Sep 2021 20:39:23 +0300 Subject: [PATCH 59/61] Prevent players to kick themselves (#5988) --- core/src/mindustry/core/NetServer.java | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/core/NetServer.java b/core/src/mindustry/core/NetServer.java index e4de6e0222..9c6ae4cd83 100644 --- a/core/src/mindustry/core/NetServer.java +++ b/core/src/mindustry/core/NetServer.java @@ -397,7 +397,9 @@ public class NetServer implements ApplicationListener{ } if(found != null){ - if(found.admin){ + if(found == player){ + player.sendMessage("[scarlet]You can't vote to kick yourself."); + }else if(found.admin){ player.sendMessage("[scarlet]Did you really expect to be able to kick an admin?"); }else if(found.isLocal()){ player.sendMessage("[scarlet]Local players cannot be kicked."); From 8dfa3494844bb554417d8c5b489c78c18bd4cf23 Mon Sep 17 00:00:00 2001 From: RebornTrack970 <62565267+RebornTrack970@users.noreply.github.com> Date: Tue, 14 Sep 2021 01:42:34 +0300 Subject: [PATCH 60/61] V6 2r2t (#5986) --- servers_v6.json | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/servers_v6.json b/servers_v6.json index c8e842d1b7..9e01796b40 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -57,7 +57,7 @@ }, { "name": "Omega", - "address": ["yeeth.mindustry.me:2004"] + "address": ["yeeth.mindustry.me:2004","185.86.230.61:25570"] }, { "name": "md.obvilionnetwork.ru", From d36a00a6fe8b53de8570d60ab2a21e451e936098 Mon Sep 17 00:00:00 2001 From: Rex <77251557+Rex-Hm@users.noreply.github.com> Date: Mon, 13 Sep 2021 21:08:40 -0300 Subject: [PATCH 61/61] update bundle_es.properties (#5989) * Update bundle_es.properties * Update bundle_es.properties * 131 * support units * fixed --- core/assets/bundles/bundle_es.properties | 87 +++++++++++++++++------- 1 file changed, 61 insertions(+), 26 deletions(-) diff --git a/core/assets/bundles/bundle_es.properties b/core/assets/bundles/bundle_es.properties index 54bc3a9fb1..83aa4aafc2 100644 --- a/core/assets/bundles/bundle_es.properties +++ b/core/assets/bundles/bundle_es.properties @@ -2,7 +2,7 @@ credits.text = Creado por [royal]Anuken[] - [sky]anukendev@gmail.com[] credits = Créditos contributors = Traductores y Contribuidores discord = ¡Únete al Discord de Mindustry! -link.discord.description = El servidor official de Discord de Mindustry +link.discord.description = El servidor oficial de Discord de Mindustry link.reddit.description = El subreddit de Mindustry link.github.description = Código fuente del juego link.changelog.description = Lista de actualizaciones @@ -49,24 +49,24 @@ mods.github.open = Repositorio mods.browser.sortdate = Más recientes mods.browser.sortstars = Mejor valorados -schematic = Plantilla -schematic.add = Guardar plantilla... -schematics = Plantillas -schematic.replace = Ya existe una plantilla con ese nombre. ¿Deseas remplazarla? -schematic.exists = Ya existe una plantilla con ese nombre. -schematic.import = Importar plantilla... -schematic.exportfile = Exportar archivo -schematic.importfile = Importar archivo +schematic = Esquema +schematic.add = Guardar Esquema... +schematics = Esquemas +schematic.replace = Ya existe un esquema con ese nombre. ¿Deseas remplazarlo? +schematic.exists = Ya existe un esquema con ese nombre. +schematic.import = Importar Esquema... +schematic.exportfile = Exportar Archivo +schematic.importfile = Importar Archivo schematic.browseworkshop = Buscar en Steam Workshop schematic.copy = Copiar al portapapeles. schematic.copy.import = Importar desde el portapapeles. schematic.shareworkshop = Compartir en Steam Workshop -schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar plantilla -schematic.saved = Plantilla guardada. -schematic.delete.confirm = Se borrará ésta plantilla. -schematic.rename = Renombrar plantilla +schematic.flip = [accent][[{0}][]/[accent][[{1}][]: Girar esquema +schematic.saved = Esquema guardado. +schematic.delete.confirm = Se borrará éste esquema. +schematic.rename = Renombrar Esquema schematic.info = {0}x{1}, {2} bloques -schematic.disabled = [scarlet]Plantillas desactivadas.[]\nNo puedes usar plantillas en este [accent]mapa[] o [accent]servidor. +schematic.disabled = [scarlet]Esquemas desactivados.[]\nNo puedes usar esquemas en este [accent]mapa[] o [accent]servidor. schematic.tags = Etiquetas: schematic.edittags = Editar Etiquetas schematic.addtag = Añadir Etiqueta @@ -78,6 +78,7 @@ schematic.tagexists = Esa etiqueta ya existe. stats = Estadísticas stat.wave = Oleadas Derrotadas:[accent] {0} +stat.unitsCreated = Unidades Creadas:[accent] {0} stat.enemiesDestroyed = Enemigos Destruidos:[accent] {0} stat.built = Estructuras Construidas:[accent] {0} stat.destroyed = Estructuras Destruidas:[accent] {0} @@ -93,7 +94,8 @@ level.select = Selección de Nivel level.mode = Modo de juego: coreattack = < ¡El núcleo está bajo ataque! > nearpoint = [[ [scarlet]ABANDONA EL PUNTO DE ATERRIZAJE INMEDIATAMENTE[] ]\nRiesgo de aniquilación inminente -database = Base de datos +database = Base de Datos del Núcleo +database.button = Base de Datos savegame = Guardar Partida loadgame = Cargar Partida joingame = Unirse a Partida @@ -168,8 +170,9 @@ launchcore = Lanzar núcleo filename = Nombre del archivo: unlocked = ¡Nuevo contenido en la Base de Datos! available = ¡Nueva investigación disponible! +unlock.incampaign = < Desbloquealo en campaña para más detalles > completed = [accent]Completado -techtree = Tecnologías +techtree = Árbol de Tecnologías research.legacy = Se han encontrado datos guardados de investigaciones tecnológicas realizadas en la versión [accent]5.0[].\n¿Quieres [accent]cargar estos datos[], o [accent]descartarlos[] para reiniciar los descubrimientos tecnológicos del nuevo modo Campaña? (Recomendado) research.load = Cargar research.discard = Descartar @@ -214,6 +217,7 @@ hosts.none = [lightgray]No se han encontrado partidas en LAN host.invalid = [scarlet]No se pudo conectar con el anfitrión servers.local = Servidores Locales +servers.local.steam = Partidas Públicas y Lervidores Locales servers.remote = Servidores Remotos servers.global = Servidores de la Comunidad @@ -316,7 +320,7 @@ data.import.confirm = Importando los datos externos borrará[scarlet] todo[] tu quit.confirm = ¿Quieres salir de la partida? quit.confirm.tutorial = ¿Estás seguro de que sabes qué estas haciendo?\nSe puede hacer el tutorial de nuevo en[accent] Ajustes->Juego->Volver a hacer tutorial.[] loading = [accent]Cargando... -reloading = [accent]Recargando mods... +downloading = [accent]Descargando... saving = [accent]Guardando... respawn = [accent][[{0}][] para reaparecer en el núcleo cancelbuilding = [accent][[{0}][] para limpiar el plan @@ -360,6 +364,7 @@ publish.confirm = ¿Estás seguro de que quieres publicar esto?\n\n[lightgray]¡ publish.error = Error publicando el artículo: {0} steam.error = Error al inicializar los servicios de Steam.\nError: {0} +editor.cliffs = Paredes a Colinas editor.brush = Pincel editor.openin = Abrir en el Editor editor.oregen = Generación de Minerales @@ -383,6 +388,7 @@ waves.waves = oleada(s) waves.perspawn = por lugar de aparición waves.shields = escudo/oleadas waves.to = hasta +waves.max = Oleadas máximas waves.guardian = Guardián waves.preview = Vista previa waves.edit = Editar... @@ -391,6 +397,13 @@ waves.load = Cargar del Portapapeles waves.invalid = Oleadas inválidaas en el portapapeles. waves.copied = Oleadas copiadas. waves.none = No hay enemigos definidos.\nNótese que las listas de oleadas vacías se sustituirán por la lista por defecto. +waves.sort = Ordenar por +waves.sort.reverse = Al revés +waves.sort.begin = Inicio +waves.sort.health = Vida +waves.sort.type = Tipo +waves.units.hide = Ocultar Todo +waves.units.show = Mostrar Todo #Estos están en minúscula intencionadamente. wavemode.counts = limitadas @@ -537,6 +550,7 @@ configure = Configurar carga inicial loadout = Carga Inicial resources = Recursos bannedblocks = Bloques prohibidos +bannedunits = Unidades prohibidas addall = Añadir todo launch.from = Lanzando desde: [accent]{0} launch.destination = Destino: {0} @@ -561,6 +575,8 @@ weather.sandstorm.name = Tormenta de arena weather.sporestorm.name = Tormenta de esporas weather.fog.name = Niebla +sectorlist = Sectores +sectorlist.attacked = {0} Bajo ataque sectors.unexplored = [lightgray]No explorado sectors.resources = Recursos: sectors.production = Producción: @@ -585,7 +601,7 @@ sector.missingresources = [scarlet]Recursos Insuficientes sector.attacked = Sector [accent]{0}[white] bajo ataque[]! sector.lost = ¡Sector [accent]{0}[white] perdido[]! #nota: el espacio en blanco en la línea siguiente es intencionado -sector.captured = ¡Sector [accent]{0}[white] capturado[]! +sector.captured = ¡Sector [accent]{0}[white] capturado! sector.changeicon = Cambiar Icono threat.low = Baja @@ -615,6 +631,8 @@ sector.biomassFacility.name = Centro de Sintetización de Biomasa sector.windsweptIslands.name = Islas Windswept sector.extractionOutpost.name = Puesto de avanzada de Extracción sector.planetaryTerminal.name = Terminal de Lanzamiento Interplanetario +sector.coastline.name = Línea Costera +sector.navalFortress.name = Fortaleza Naval sector.groundZero.description = La ubicación adecuada para empezar una vez más. Amenaza enemiga baja. Pocos recursos.\nReúna la mayor cantidad de plomo y cobre posible y sigue adelante. sector.frozenForest.description = Incluso aquí, más cerca de las montañas, las esporas se han extendido. Las gélidas temperaturas no las contendrán para siempre.\n\nAprende a usar la energía. Construye generadores de combustión. Aprende a usar reparadores. @@ -642,10 +660,12 @@ status.sapped.name = Debilitado status.electrified.name = Electrificado status.spore-slowed.name = Ralentizado status.tarred.name = Alquitranado +status.overdrive.name = Sobremarcha status.overclock.name = Sobrecargado status.shocked.name = Aturdido status.blasted.name = Explotado status.unmoving.name = Inmóvil +status.boss.name = Guardián settings.language = Idioma settings.data = Datos del Juego @@ -770,6 +790,7 @@ bar.corereq = Necesitas un núcleo base bar.drillspeed = Velocidad del Taladro: {0}/s bar.pumpspeed = Velocidad de bombeado: {0}/s bar.efficiency = Eficiencia: {0}% +bar.boost = Aceleración: +{0}% bar.powerbalance = Energía: {0} bar.powerstored = Almacenados: {0}/{1} bar.poweramount = Energía: {0} @@ -832,6 +853,7 @@ category.items = Objetos category.crafting = Fabricación category.function = Función category.optional = Mejoras Opcionales +setting.skipcoreanimation.name = Saltar animación de Lanzamiento/Aterrizaje del Núcleo setting.landscape.name = Bloquear modo horizontal setting.shadows.name = Sombras setting.blockreplace.name = Sugerir bloques al construir @@ -872,7 +894,9 @@ setting.saveinterval.name = Intervalo del Autoguardado setting.seconds = {0} segundos setting.milliseconds = {0} milisegundos setting.fullscreen.name = Pantalla Completa -setting.borderlesswindow.name = Ventana sin Bordes[lightgray] (podría requerir un reinicio) +setting.borderlesswindow.name = Ventana sin Bordes[lightgray] +setting.borderlesswindow.name.windows = Pantalla Completa sin Bordes +setting.borderlesswindow.description = Un reinicio podría ser requerido para aplicar cambios. setting.fps.name = Mostrar FPS y Ping setting.smoothcamera.name = Movimiento de cámara suave setting.vsync.name = VSync (Limita los fps a los Hz de tu pantalla) @@ -995,6 +1019,8 @@ rules.wavetimer = Temporizador de Oleadas rules.waves = Oleadas rules.attack = Asalto rules.buildai = Contrucción de IA +rules.aitier = Nivel de IA +rules.cleanupdeadteams = Limpiar las construcciones de enemigos derrotados (PvP) rules.corecapture = Capturar Núcleo al Destruirlo rules.polygoncoreprotection = Protección de Núcleo Poligonal rules.enemyCheat = La IA (Equipo Rojo) tiene recursos infinitos @@ -1013,12 +1039,15 @@ rules.deconstructrefundmultiplier = Multiplicador de devolución de desconstrucc rules.waitForWaveToEnd = Las oleadas esperan a los enemigos rules.dropzoneradius = Radio de zona de caída:[lightgray] (casillas) rules.unitammo = Las unidades necesitan munición +rules.enemyteam = Equipo Enemigo +rules.playerteam = Equipo del jugador rules.title.waves = Oleadas rules.title.resourcesbuilding = Recursos y Construcción rules.title.enemy = Enemigos rules.title.unit = Unidades rules.title.experimental = Experimental rules.title.environment = Entorno +rules.title.teams = Equipos rules.lighting = Iluminación rules.enemyLights = Luces enemigas rules.fire = Fuego @@ -1097,7 +1126,6 @@ unit.reign.name = Reign unit.vela.name = Vela unit.corvus.name = Corvus -block.resupply-point.name = Punto de reabastecimiento block.parallax.name = Parallax block.cliff.name = Pared block.sand-boulder.name = Roca de arena @@ -1137,6 +1165,7 @@ block.core-nucleus.name = Núcleo: Nucleus block.deep-water.name = Aguas profundas block.shallow-water.name = Agua block.tainted-water.name = Agua contaminada +block.deep-tainted-water.name = Agua profunda contaminada block.darksand-tainted-water.name = Agua contaminada con arena oscura block.tar.name = Alquitrán block.stone.name = Piedra @@ -1400,7 +1429,6 @@ liquid.slag.description = Diferentes tipos de metales fundidos mezclados. Puede liquid.oil.description = Se utiliza en producción de materiales avanzados, y en munición incendiaria. liquid.cryofluid.description = Usado como refrigerante para reactores, torretas, y fábricas. -block.resupply-point.description = Reabastece unidades cercanas con munición de cobre. No es compatible con unidades que requieren energía. block.armored-conveyor.description = Mueve objetos. No acepta objetos si entran por los lados. block.illuminator.description = Emite luz. block.message.description = Almacena un mensaje. Puedes usarlo para comunicarte con aliados o dejar recordatorios. @@ -1420,12 +1448,14 @@ block.spore-press.description = Comprime esporas en petróleo. block.pulverizer.description = Despedaza la chatarra en arena. Útil cuando no hay arena natural. block.coal-centrifuge.description = Solidifica petróleo en piezas de carbón. block.incinerator.description = Se deshace de cualquier líquido o material producido en exceso. -block.power-void.description = Elimina toda la energía que se le da. Solo en disponible en el modo Libre. +block.power-void.description = Elimina toda la energía que se le da. Solo disponible en el modo Libre. block.power-source.description = Da energía infinita. Solo disponible en el modo Libre. -block.item-source.description = Hace aparecer minerales de forma infinita. Solo disponible en el modo Libre. -block.item-void.description = Destruye cuanquier objeto que entra en él. Solo disponible en el modo Libre. -block.liquid-source.description = Da líquido infinito. Solo disponible en el modo Libre. -block.liquid-void.description = Elimina cualquier liquido que entra en él. Solo disponible en el modo Libre. +block.item-source.description = Genera objetos de forma infinita. Solo disponible en el modo Libre. +block.item-void.description = Destruye los objetos que entran en él. Solo disponible en el modo Libre. +block.liquid-source.description = Genera líquido infinito. Solo disponible en el modo Libre. +block.liquid-void.description = Elimina los liquidos que entran en él. Solo disponible en el modo Libre. +block.payload-source.description = Genera salidas de cargas infinitas. Solo disponible en el modo Libre. +block.payload-void.description = Destruye cualquier carga. Solo disponible en el modo Libre. block.copper-wall.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas. block.copper-wall-large.description = Un bloque defensivo barato.\nÚtil para defender el núcleo y las torres en las primeras oleadas.\nOcupa múltiples casillas. block.titanium-wall.description = Un bloque defensivo moderadamente fuerte.\nProporciona protección moderada contra los enemigos. @@ -1578,6 +1608,11 @@ unit.omura.description = Dispara rayos contínuos perforantes. Construye unidade unit.alpha.description = Defiende el núcleo Shard de los enemigos. Construye estructuras. unit.beta.description = Defiende el núcleo Foundation de los enemigos. Construye estructuras. unit.gamma.description = Defiende el núcleo Nucleus de los enemigos. Construye estructuras. +unit.retusa.description = Coloca minas de proximidad. Repara unidades aliadas. +unit.oxynoe.description = Dispara llamaradas de fuego que reparan estructuras aliadas y daña unidades enemigas cercanas. Destruye proyectiles enemigos cercanos con una torreta de defensa precisa. +unit.cyerce.description = Dispara misiles rastreadores en grupos. Repara unidades aliadas. +unit.aegires.description = Impacta a todas las unidades y estructuras enemigas que entran en su campo de energía y repara a las aliadas. +unit.navanax.description = Dispara proyectiles EMP explosivos que infligen un daño significativo a las redes eléctricas enemigas y reparan las estructuras aliadas. Derrite a los enemigos cercanos con 4 torretas láser autónomas. lst.read = Lee un número desde una unidad de memoria conectada. lst.write = Escribe un número en una unidad de memoria conectada.