From bab8c20f3b908dd4a0e119ab8a52f8af87420cf8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 12:49:33 -0400 Subject: [PATCH 01/69] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 109bc42fdb..9a5fcf9c2d 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ See [CONTRIBUTING](CONTRIBUTING.md). Bleeding-edge builds are generated automatically for every commit. You can see them [here](https://github.com/Anuken/MindustryBuilds/releases). If you'd rather compile on your own, follow these instructions. -First, make sure you have [JDK 14](https://adoptopenjdk.net/) installed. Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands: +First, make sure you have [JDK 14](https://adoptopenjdk.net/) installed. **Other JDK versions will not work.** Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands: ### Windows From 5b8c4c4f8e1a8c83942845dd470682bdf8290381 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 12:50:03 -0400 Subject: [PATCH 02/69] Update README.md --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 9a5fcf9c2d..878649989b 100644 --- a/README.md +++ b/README.md @@ -18,7 +18,7 @@ See [CONTRIBUTING](CONTRIBUTING.md). Bleeding-edge builds are generated automatically for every commit. You can see them [here](https://github.com/Anuken/MindustryBuilds/releases). If you'd rather compile on your own, follow these instructions. -First, make sure you have [JDK 14](https://adoptopenjdk.net/) installed. **Other JDK versions will not work.** Open a terminal in the root directory, `cd` to the Mindustry folder and run the following commands: +First, make sure you have [JDK 14](https://adoptopenjdk.net/) installed. **Other JDK versions will not work.** Open a terminal in the Mindustry directory and run the following commands: ### Windows From dd7542032cb0a3e31e74cb80e950894c2dca0797 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 12:52:49 -0400 Subject: [PATCH 03/69] Unnecessary Time.mark() --- core/src/mindustry/maps/SectorDamage.java | 2 -- 1 file changed, 2 deletions(-) diff --git a/core/src/mindustry/maps/SectorDamage.java b/core/src/mindustry/maps/SectorDamage.java index 4e1b5a5242..786074c3dd 100644 --- a/core/src/mindustry/maps/SectorDamage.java +++ b/core/src/mindustry/maps/SectorDamage.java @@ -3,7 +3,6 @@ package mindustry.maps; import arc.math.*; import arc.math.geom.*; import arc.struct.*; -import arc.util.*; import mindustry.ai.*; import mindustry.content.*; import mindustry.entities.*; @@ -186,7 +185,6 @@ public class SectorDamage{ Tile start = spawns.first(); - Time.mark(); var field = pathfinder.getField(state.rules.waveTeam, Pathfinder.costGround, Pathfinder.fieldCore); Seq path = new Seq<>(); boolean found = false; From eba6514fb5fd64a22b3c51571765108a56a83036 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 14:54:03 -0400 Subject: [PATCH 04/69] #5329 without the weird indent --- core/src/mindustry/input/DesktopInput.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 3746dae72e..8b5346fce0 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -238,7 +238,7 @@ public class DesktopInput extends InputHandler{ if(!player.dead() && !state.isPaused() && !scene.hasField()){ updateMovement(player.unit()); - if(Core.input.keyDown(Binding.respawn)){ + if(Core.input.keyTap(Binding.respawn)){ Call.unitClear(player); controlledType = null; } From 462a64bf21710fa0738f9526697dab62466e0a00 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 16:51:52 -0400 Subject: [PATCH 05/69] Netcode updates --- .../annotations/remote/CallGenerator.java | 35 +++++++++++++++---- core/src/mindustry/net/ArcNetProvider.java | 5 ++- core/src/mindustry/net/Packet.java | 14 ++++++++ core/src/mindustry/net/Packets.java | 3 -- 4 files changed, 44 insertions(+), 13 deletions(-) diff --git a/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java b/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java index 00ac5fabac..48a17f2e86 100644 --- a/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java +++ b/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java @@ -30,6 +30,9 @@ public class CallGenerator{ TypeSpec.Builder packet = TypeSpec.classBuilder(ent.packetClassName) .addModifiers(Modifier.PUBLIC); + //temporary data to deserialize later + packet.addField(byte[].class, "DATA", Modifier.PRIVATE); + packet.superclass(tname("mindustry.net.Packet")); //return the correct priority @@ -41,8 +44,8 @@ public class CallGenerator{ } //implement read & write methods - packet.addMethod(makeWriter(ent, serializer)); - packet.addMethod(makeReader(ent, serializer)); + makeWriter(packet, ent, serializer); + makeReader(packet, ent, serializer); //generate handlers if(ent.where.isClient){ @@ -87,7 +90,7 @@ public class CallGenerator{ JavaFile.builder(packageName, spec).build().writeTo(BaseProcessor.filer); } - private static MethodSpec makeWriter(MethodEntry ent, ClassSerializer serializer){ + private static void makeWriter(TypeSpec.Builder typespec, MethodEntry ent, ClassSerializer serializer){ MethodSpec.Builder builder = MethodSpec.methodBuilder("write") .addParameter(Writes.class, "WRITE") .addModifiers(Modifier.PUBLIC).addAnnotation(Override.class); @@ -132,13 +135,27 @@ public class CallGenerator{ } } - return builder.build(); + typespec.addMethod(builder.build()); } - private static MethodSpec makeReader(MethodEntry ent, ClassSerializer serializer){ - MethodSpec.Builder builder = MethodSpec.methodBuilder("read") + private static void makeReader(TypeSpec.Builder typespec, MethodEntry ent, ClassSerializer serializer){ + MethodSpec.Builder readbuilder = MethodSpec.methodBuilder("read") .addParameter(Reads.class, "READ") + .addParameter(int.class, "LENGTH") .addModifiers(Modifier.PUBLIC).addAnnotation(Override.class); + + //read only into temporary data buffer + readbuilder.addStatement("DATA = READ.b(LENGTH)"); + + typespec.addMethod(readbuilder.build()); + + MethodSpec.Builder builder = MethodSpec.methodBuilder("check") + .addModifiers(Modifier.PRIVATE); + + //make sure data is present, begin reading it if so + builder.beginControlFlow("if(DATA != null)"); + builder.addStatement("BAIS.setBytes(DATA)"); + Seq params = ent.element.params(); //go through each parameter @@ -185,7 +202,9 @@ public class CallGenerator{ } } - return builder.build(); + builder.endControlFlow(); + + typespec.addMethod(builder.build()); } /** Creates a specific variant for a method entry. */ @@ -332,6 +351,8 @@ public class CallGenerator{ .addAnnotation(Override.class) .returns(void.class); + builder.addStatement("check()"); + Smethod elem = ent.element; Seq params = elem.params(); diff --git a/core/src/mindustry/net/ArcNetProvider.java b/core/src/mindustry/net/ArcNetProvider.java index a18c8d57de..a81376d189 100644 --- a/core/src/mindustry/net/ArcNetProvider.java +++ b/core/src/mindustry/net/ArcNetProvider.java @@ -385,7 +385,6 @@ public class ArcNetProvider implements NetProvider{ return readFramework(byteBuffer); }else{ //read length int, followed by compressed lz4 data - //TODO not thread safe!!! Packet packet = Net.newPacket(id); var buffer = decompressBuffer.get(); int length = byteBuffer.getShort() & 0xffff; @@ -396,7 +395,7 @@ public class ArcNetProvider implements NetProvider{ buffer.position(0).limit(length); buffer.put(byteBuffer.array(), byteBuffer.position(), length); buffer.position(0); - packet.read(reads.get()); + packet.read(reads.get(), length); //move read packets forward byteBuffer.position(byteBuffer.position() + buffer.position()); }else{ @@ -405,7 +404,7 @@ public class ArcNetProvider implements NetProvider{ buffer.position(0); buffer.limit(length); - packet.read(reads.get()); + packet.read(reads.get(), length); //move buffer forward based on bytes read by decompressor byteBuffer.position(byteBuffer.position() + read); } diff --git a/core/src/mindustry/net/Packet.java b/core/src/mindustry/net/Packet.java index a6200547cc..843c2e78eb 100644 --- a/core/src/mindustry/net/Packet.java +++ b/core/src/mindustry/net/Packet.java @@ -2,7 +2,17 @@ package mindustry.net; import arc.util.io.*; +import java.io.*; + public abstract class Packet{ + //internally used by generated code + //TODO intermediate buffers should ONLY be needed for: + //readObject + //readBuilding + //readUnit (possibly) + protected static final ReusableByteInStream BAIS = new ReusableByteInStream(); + protected static final Reads READ = new Reads(new DataInputStream(BAIS)); + //these are constants because I don't want to bother making an enum to mirror the annotation enum /** Does not get handled unless client is connected. */ @@ -15,6 +25,10 @@ public abstract class Packet{ public void read(Reads read){} public void write(Writes write){} + public void read(Reads read, int length){ + read(read); + } + public int getPriority(){ return priorityNormal; } diff --git a/core/src/mindustry/net/Packets.java b/core/src/mindustry/net/Packets.java index a1cd13670c..10e607ec50 100644 --- a/core/src/mindustry/net/Packets.java +++ b/core/src/mindustry/net/Packets.java @@ -2,7 +2,6 @@ package mindustry.net; import arc.*; import arc.struct.*; -import arc.util.*; import arc.util.io.*; import arc.util.serialization.*; import mindustry.core.*; @@ -131,8 +130,6 @@ public class Packets{ crc.update(Base64Coder.decode(uuid), 0, b.length); buffer.l(crc.getValue()); - Log.info("CRC value sent: @", Long.toHexString(crc.getValue())); - buffer.b(mobile ? (byte)1 : 0); buffer.i(color); buffer.b((byte)mods.size); From 9aae443e7274da35f35eebcffc394ad2e9a977c9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 17:04:31 -0400 Subject: [PATCH 06/69] More netcode updates --- .../mindustry/annotations/remote/CallGenerator.java | 12 ++++-------- core/src/mindustry/net/Net.java | 3 +++ core/src/mindustry/net/Packet.java | 3 +++ 3 files changed, 10 insertions(+), 8 deletions(-) diff --git a/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java b/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java index 48a17f2e86..e21b015a34 100644 --- a/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java +++ b/annotations/src/main/java/mindustry/annotations/remote/CallGenerator.java @@ -31,7 +31,7 @@ public class CallGenerator{ .addModifiers(Modifier.PUBLIC); //temporary data to deserialize later - packet.addField(byte[].class, "DATA", Modifier.PRIVATE); + packet.addField(FieldSpec.builder(byte[].class, "DATA", Modifier.PRIVATE).initializer("NODATA").build()); packet.superclass(tname("mindustry.net.Packet")); @@ -149,11 +149,11 @@ public class CallGenerator{ typespec.addMethod(readbuilder.build()); - MethodSpec.Builder builder = MethodSpec.methodBuilder("check") - .addModifiers(Modifier.PRIVATE); + MethodSpec.Builder builder = MethodSpec.methodBuilder("handled") + .addModifiers(Modifier.PUBLIC) + .addAnnotation(Override.class); //make sure data is present, begin reading it if so - builder.beginControlFlow("if(DATA != null)"); builder.addStatement("BAIS.setBytes(DATA)"); Seq params = ent.element.params(); @@ -202,8 +202,6 @@ public class CallGenerator{ } } - builder.endControlFlow(); - typespec.addMethod(builder.build()); } @@ -351,8 +349,6 @@ public class CallGenerator{ .addAnnotation(Override.class) .returns(void.class); - builder.addStatement("check()"); - Smethod elem = ent.element; Seq params = elem.params(); diff --git a/core/src/mindustry/net/Net.java b/core/src/mindustry/net/Net.java index 689834c07b..2279c955c0 100644 --- a/core/src/mindustry/net/Net.java +++ b/core/src/mindustry/net/Net.java @@ -257,6 +257,7 @@ public class Net{ * Call to handle a packet being received for the client. */ public void handleClientReceived(Packet object){ + object.handled(); if(object instanceof StreamBegin b){ streams.put(b.id, currentStream = new StreamBuilder(b)); @@ -291,6 +292,8 @@ public class Net{ * Call to handle a packet being received for the server. */ public void handleServerReceived(NetConnection connection, Packet object){ + object.handled(); + try{ //handle object normally if(serverListeners.get(object.getClass()) != null){ diff --git a/core/src/mindustry/net/Packet.java b/core/src/mindustry/net/Packet.java index 843c2e78eb..b5a748c209 100644 --- a/core/src/mindustry/net/Packet.java +++ b/core/src/mindustry/net/Packet.java @@ -10,6 +10,7 @@ public abstract class Packet{ //readObject //readBuilding //readUnit (possibly) + protected static final byte[] NODATA = {}; protected static final ReusableByteInStream BAIS = new ReusableByteInStream(); protected static final Reads READ = new Reads(new DataInputStream(BAIS)); @@ -29,6 +30,8 @@ public abstract class Packet{ read(read); } + public void handled(){} + public int getPriority(){ return priorityNormal; } From 4cd411d5ee44e823587222531bc412e8c21c4690 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 17:07:08 -0400 Subject: [PATCH 07/69] Duct consistency --- core/src/mindustry/content/Blocks.java | 5 +++-- .../src/mindustry/world/blocks/distribution/DuctBridge.java | 6 +++--- 2 files changed, 6 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 0f1a658539..db7a5fea65 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1034,16 +1034,17 @@ public class Blocks implements ContentList{ duct = new Duct("duct"){{ requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 5, Items.copper, 5)); - speed = 5f; + speed = 4f; }}; ductRouter = new DuctRouter("duct-router"){{ requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 10, Items.copper, 5)); - speed = 5f; + speed = 4f; }}; ductBridge = new DuctBridge("duct-bridge"){{ requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 20, Items.copper, 15)); + speed = 4f; }}; //endregion diff --git a/core/src/mindustry/world/blocks/distribution/DuctBridge.java b/core/src/mindustry/world/blocks/distribution/DuctBridge.java index e040f83879..10d3c287e6 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DuctBridge.java @@ -25,7 +25,7 @@ public class DuctBridge extends Block{ public @Load("@-dir") TextureRegion dirRegion; public int range = 4; - public float moveDelay = 5f; + public float speed = 5f; public DuctBridge(String name){ super(name); @@ -116,12 +116,12 @@ public class DuctBridge extends Block{ link.occupied[rotation % 4] = this; if(items.any() && link.items.total() < link.block.itemCapacity){ progress += edelta(); - while(progress > moveDelay){ + while(progress > speed){ Item next = items.take(); if(next != null && link.items.total() < link.block.itemCapacity){ link.handleItem(this, next); } - progress -= moveDelay; + progress -= speed; } } } From 79e079671cc8703282933216abadfa6e942cf4c5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 17:08:32 -0400 Subject: [PATCH 08/69] Triggering BE build --- core/src/mindustry/net/Packet.java | 4 ---- 1 file changed, 4 deletions(-) diff --git a/core/src/mindustry/net/Packet.java b/core/src/mindustry/net/Packet.java index b5a748c209..e49b18c572 100644 --- a/core/src/mindustry/net/Packet.java +++ b/core/src/mindustry/net/Packet.java @@ -6,10 +6,6 @@ import java.io.*; public abstract class Packet{ //internally used by generated code - //TODO intermediate buffers should ONLY be needed for: - //readObject - //readBuilding - //readUnit (possibly) protected static final byte[] NODATA = {}; protected static final ReusableByteInStream BAIS = new ReusableByteInStream(); protected static final Reads READ = new Reads(new DataInputStream(BAIS)); From fbe45aba7466068da575d0eb9d80bfe7fb723160 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 17:44:57 -0400 Subject: [PATCH 09/69] Misc bugfixes --- core/src/mindustry/input/MobileInput.java | 12 +++--------- .../world/blocks/payloads/PayloadSource.java | 9 +++++++++ .../mindustry/world/blocks/payloads/PayloadVoid.java | 2 ++ .../mindustry/world/blocks/payloads/UnitPayload.java | 12 +++++------- 4 files changed, 19 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index d037a0d351..792d242851 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -856,8 +856,7 @@ public class MobileInput extends InputHandler implements GestureListener{ boolean omni = unit.type.omniMovement; boolean allowHealing = type.canHeal; - boolean validHealTarget = allowHealing && target instanceof Building && ((Building)target).isValid() && target.team() == unit.team && - ((Building)target).damaged() && target.within(unit, type.range); + boolean validHealTarget = allowHealing && target instanceof Building b && b.isValid() && target.team() == unit.team && b.damaged() && target.within(unit, type.range); boolean boosted = (unit instanceof Mechc && unit.isFlying()); //reset target if: @@ -912,13 +911,8 @@ public class MobileInput extends InputHandler implements GestureListener{ unit.vel.approachDelta(Vec2.ZERO, unit.speed() * type.accel / 2f); } - float expansion = 3f; - unit.hitbox(rect); - rect.x -= expansion; - rect.y -= expansion; - rect.width += expansion * 2f; - rect.height += expansion * 2f; + rect.grow(6f); player.boosting = collisions.overlapsTile(rect) || !unit.within(targetPos, 85f); @@ -927,7 +921,7 @@ public class MobileInput extends InputHandler implements GestureListener{ }else{ unit.moveAt(Tmp.v2.trns(unit.rotation, movement.len())); if(!movement.isZero()){ - unit.vel.rotateTo(movement.angle(), unit.type.rotateSpeed * Math.max(Time.delta, 1)); + unit.rotation = Angles.moveToward(unit.rotation, movement.angle(), unit.type.rotateSpeed * Math.max(Time.delta, 1)); } } diff --git a/core/src/mindustry/world/blocks/payloads/PayloadSource.java b/core/src/mindustry/world/blocks/payloads/PayloadSource.java index aa6a5c9a6c..68bf32e744 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadSource.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadSource.java @@ -27,6 +27,8 @@ public class PayloadSource extends PayloadBlock{ hasPower = true; rotate = true; configurable = true; + //make sure to display large units. + clipSize = 120; config(Block.class, (PayloadSourceBuild build, Block block) -> { if(canProduce(block) && build.block != block){ @@ -45,6 +47,13 @@ public class PayloadSource extends PayloadBlock{ build.scl = 0f; } }); + + configClear((PayloadSourceBuild build) -> { + build.block = null; + build.unit = null; + build.payload = null; + build.scl = 0f; + }); } @Override diff --git a/core/src/mindustry/world/blocks/payloads/PayloadVoid.java b/core/src/mindustry/world/blocks/payloads/PayloadVoid.java index 434753f0ee..2c8cd68bf2 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadVoid.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadVoid.java @@ -19,6 +19,8 @@ public class PayloadVoid extends PayloadBlock{ update = true; rotate = false; size = 3; + //make sure to display large units. + clipSize = 120; } @Override diff --git a/core/src/mindustry/world/blocks/payloads/UnitPayload.java b/core/src/mindustry/world/blocks/payloads/UnitPayload.java index 2300dba10b..22d11f4b65 100644 --- a/core/src/mindustry/world/blocks/payloads/UnitPayload.java +++ b/core/src/mindustry/world/blocks/payloads/UnitPayload.java @@ -4,10 +4,10 @@ import arc.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; -import arc.math.geom.*; import arc.util.*; import arc.util.io.*; import mindustry.*; +import mindustry.core.*; import mindustry.entities.EntityCollisions.*; import mindustry.entities.*; import mindustry.game.EventType.*; @@ -69,14 +69,12 @@ public class UnitPayload implements Payload{ //check if unit can be dumped here SolidPred solid = unit.solidity(); if(solid != null){ - int tx = unit.tileX(), ty = unit.tileY(); - boolean nearEmpty = !solid.solid(tx, ty); - for(Point2 p : Geometry.d4){ - nearEmpty |= !solid.solid(tx + p.x, ty + p.y); - } + Tmp.v1.trns(unit.rotation, 1f); + + int tx = World.toTile(unit.x + Tmp.v1.x), ty = World.toTile(unit.y + Tmp.v1.y); //cannot dump on solid blocks - if(!nearEmpty) return false; + if(solid.solid(tx, ty)) return false; } //cannnot dump when there's a lot of overlap going on From f854d0b1e6b52120c3bd117de35982b6da1cdf23 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 18:21:37 -0400 Subject: [PATCH 10/69] Higher payload conveyor clip size --- .../world/blocks/distribution/PayloadConveyor.java | 8 ++++++++ 1 file changed, 8 insertions(+) diff --git a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java index 7e1697f401..523edb9654 100644 --- a/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java +++ b/core/src/mindustry/world/blocks/distribution/PayloadConveyor.java @@ -57,6 +57,14 @@ public class PayloadConveyor extends Block{ stats.add(Stat.payloadCapacity, (payloadLimit), StatUnit.blocksSquared); } + @Override + public void init(){ + super.init(); + + //increase clip size for oversize loads + clipSize = Math.max(clipSize, size * tilesize * 2.1f); + } + public class PayloadConveyorBuild extends Building{ public @Nullable Payload item; public float progress, itemRotation, animation; From e248f44099b3f5d912a5a8cdaf3875ea47656cd6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Wed, 2 Jun 2021 18:28:07 -0400 Subject: [PATCH 11/69] More bugfixes --- core/src/mindustry/content/Blocks.java | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index db7a5fea65..5a329a668a 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1901,7 +1901,7 @@ public class Blocks implements ContentList{ requirements(Category.units, with(Items.copper, 150, Items.lead, 130, Items.metaglass, 120)); plans = Seq.with( new UnitPlan(UnitTypes.risso, 60f * 45f, with(Items.silicon, 20, Items.metaglass, 35)), - new UnitPlan(UnitTypes.retusa, 60f * 60f, with(Items.silicon, 15, Items.metaglass, 25, Items.titanium, 20)) + new UnitPlan(UnitTypes.retusa, 60f * 50f, with(Items.silicon, 15, Items.metaglass, 25, Items.titanium, 20)) ); size = 3; consumes.power(1.2f); @@ -1943,7 +1943,8 @@ public class Blocks implements ContentList{ new UnitType[]{UnitTypes.poly, UnitTypes.mega}, new UnitType[]{UnitTypes.minke, UnitTypes.bryde}, new UnitType[]{UnitTypes.pulsar, UnitTypes.quasar}, - new UnitType[]{UnitTypes.atrax, UnitTypes.spiroct} + new UnitType[]{UnitTypes.atrax, UnitTypes.spiroct}, + new UnitType[]{UnitTypes.oxynoe, UnitTypes.cyerce} ); }}; @@ -1964,7 +1965,8 @@ public class Blocks implements ContentList{ new UnitType[]{UnitTypes.fortress, UnitTypes.scepter}, new UnitType[]{UnitTypes.bryde, UnitTypes.sei}, new UnitType[]{UnitTypes.mega, UnitTypes.quad}, - new UnitType[]{UnitTypes.quasar, UnitTypes.vela} + new UnitType[]{UnitTypes.quasar, UnitTypes.vela}, + new UnitType[]{UnitTypes.cyerce, UnitTypes.aegires} ); }}; @@ -1985,7 +1987,8 @@ public class Blocks implements ContentList{ new UnitType[]{UnitTypes.scepter, UnitTypes.reign}, new UnitType[]{UnitTypes.sei, UnitTypes.omura}, new UnitType[]{UnitTypes.quad, UnitTypes.oct}, - new UnitType[]{UnitTypes.vela, UnitTypes.corvus} + new UnitType[]{UnitTypes.vela, UnitTypes.corvus}, + new UnitType[]{UnitTypes.aegires, UnitTypes.navanax} ); }}; From 7a93c21d1093b74fbba6c6021018ee358e29bd97 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 09:49:41 -0400 Subject: [PATCH 12/69] Test: Disable antialiasing --- core/src/mindustry/graphics/MinimapRenderer.java | 8 ++++++++ core/src/mindustry/world/Tile.java | 1 - gradle.properties | 5 +++-- tools/build.gradle | 2 +- 4 files changed, 12 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/graphics/MinimapRenderer.java b/core/src/mindustry/graphics/MinimapRenderer.java index a77face3f4..1a3b7dc7f8 100644 --- a/core/src/mindustry/graphics/MinimapRenderer.java +++ b/core/src/mindustry/graphics/MinimapRenderer.java @@ -144,6 +144,14 @@ public class MinimapRenderer{ public void update(Tile tile){ if(world.isGenerating() || !state.isGame()) return; + if(tile.build != null && tile.isCenter()){ + tile.getLinkedTiles(other -> { + if(!other.isCenter()){ + update(other); + } + }); + } + int color = colorFor(tile); pixmap.set(tile.x, pixmap.height - 1 - tile.y, color); diff --git a/core/src/mindustry/world/Tile.java b/core/src/mindustry/world/Tile.java index b231cd2079..d6c907cf2f 100644 --- a/core/src/mindustry/world/Tile.java +++ b/core/src/mindustry/world/Tile.java @@ -241,7 +241,6 @@ public class Tile implements Position, QuadTreeObject, Displayable{ //assign entity and type to blocks, so they act as proxies for this one other.build = entity; other.block = block; - } } } diff --git a/gradle.properties b/gradle.properties index 696bad812c..700fd1664b 100644 --- a/gradle.properties +++ b/gradle.properties @@ -1,5 +1,6 @@ org.gradle.daemon=true -org.gradle.jvmargs=-Xms256m -Xmx1024m --illegal-access=permit +#--illegal-access=permit +org.gradle.jvmargs=-Xms256m -Xmx1024m # Don't recompute annotations if sources haven't been changed kapt.incremental.apt = true # Multithreaded @@ -8,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=5a9d95001fc988df2681616ebc33152b9c88ea92 +archash=b8f52056240e6779d5b2c13b71235778ade8346c diff --git a/tools/build.gradle b/tools/build.gradle index 3a1141fb1f..a51ece9681 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -220,7 +220,7 @@ task pack(dependsOn: [classes, configurations.runtimeClasspath]){ if(file.isDirectory() || (file.toString().replace("\\", "/").contains("/ui/") && file.toString().startsWith("icon-")) || file.toString().contains(".9.png")) return executor.submit{ - antialias(file.file) + //antialias(file.file) } } From 8128542a1f192b1447ef4139e463ca5b3ddb78aa Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 09:52:45 -0400 Subject: [PATCH 13/69] Trigger BE builds before tests --- .github/workflows/push.yml | 12 ++++++------ 1 file changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/push.yml b/.github/workflows/push.yml index 07ae6b09ab..d300e57e24 100644 --- a/.github/workflows/push.yml +++ b/.github/workflows/push.yml @@ -8,12 +8,6 @@ jobs: steps: - uses: actions/checkout@v2 - - name: Set up JDK 14 - uses: actions/setup-java@v1 - with: - java-version: 14 - - name: Run unit tests - run: ./gradlew clean cleanTest test - name: Trigger BE build if: ${{ github.repository == 'Anuken/Mindustry' }} run: | @@ -23,3 +17,9 @@ jobs: git tag ${BNUM} git config --global user.name "Build Uploader" git push https://Anuken:${{ secrets.API_TOKEN_GITHUB }}@github.com/Anuken/MindustryBuilds ${BNUM} + - name: Set up JDK 14 + uses: actions/setup-java@v1 + with: + java-version: 14 + - name: Run unit tests + run: ./gradlew clean cleanTest test From 0c85a6ee471809bb18a4e5feb3e26ad33b30e2b3 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 10:15:34 -0400 Subject: [PATCH 14/69] Pack testing --- gradle.properties | 2 +- tools/build.gradle | 33 ++++++++++++++++++--------------- 2 files changed, 19 insertions(+), 16 deletions(-) diff --git a/gradle.properties b/gradle.properties index 700fd1664b..a0baf91624 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=b8f52056240e6779d5b2c13b71235778ade8346c +archash=94cb69e5eb799266de29f7b962597db63b9b0de9 diff --git a/tools/build.gradle b/tools/build.gradle index a51ece9681..bfe38ced40 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -212,26 +212,29 @@ task pack(dependsOn: [classes, configurations.runtimeClasspath]){ delete "../core/assets-raw/sprites_out/ui/icons" } - ExecutorService executor = Executors.newFixedThreadPool(16) - long ms = System.currentTimeMillis() + //disabled until the elusive sprite packing bug is fixed + if(false){ + ExecutorService executor = Executors.newFixedThreadPool(16) + long ms = System.currentTimeMillis() - //antialias everything except UI elements - fileTree(dir: new File(rootDir, 'core/assets-raw/sprites_out/').absolutePath, include: "**/*.png").visit{ file -> - if(file.isDirectory() || (file.toString().replace("\\", "/").contains("/ui/") && file.toString().startsWith("icon-")) || file.toString().contains(".9.png")) return + //antialias everything except UI elements + fileTree(dir: new File(rootDir, 'core/assets-raw/sprites_out/').absolutePath, include: "**/*.png").visit{ file -> + if(file.isDirectory() || (file.toString().replace("\\", "/").contains("/ui/") && file.toString().startsWith("icon-")) || file.toString().contains(".9.png")) return - executor.submit{ - //antialias(file.file) + executor.submit{ + antialias(file.file) + } } - } - executor.shutdown() - try{ - executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS) - }catch(InterruptedException e){ - e.printStackTrace() - } + executor.shutdown() + try{ + executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS) + }catch(InterruptedException e){ + e.printStackTrace() + } - println "Time taken for AA: ${(System.currentTimeMillis() - ms) / 1000f}" + println "Time taken for AA: ${(System.currentTimeMillis() - ms) / 1000f}" + } println("\n\nPacking normal 4096 sprites...\n\n") From 5533721f3c6e55d30427c31f857edc3fd6d61498 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 10:21:32 -0400 Subject: [PATCH 15/69] Added missing bundle/tech entries / Pack debug --- core/assets-raw/sprites/pack.json | 5 ++++- core/assets/bundles/bundle.properties | 11 +++++++++++ core/src/mindustry/content/TechTree.java | 16 ++++++++++++++++ gradle.properties | 2 +- 4 files changed, 32 insertions(+), 2 deletions(-) diff --git a/core/assets-raw/sprites/pack.json b/core/assets-raw/sprites/pack.json index fcd452dd9f..44984b6426 100644 --- a/core/assets-raw/sprites/pack.json +++ b/core/assets-raw/sprites/pack.json @@ -4,5 +4,8 @@ flattenPaths: true, maxWidth: 4096, maxHeight: 4096, - fast: true + fast: true, + + edgePadding: false, + bleed: false } diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index e918d798aa..9eae8eb616 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1077,6 +1077,11 @@ unit.minke.name = Minke unit.bryde.name = Bryde unit.sei.name = Sei unit.omura.name = Omura +unit.retusa.name = Retusa +unit.oxynoe.name = Oxynoe +unit.cyerce.name = Cyerce +unit.aegires.name = Aegires +unit.navanax.name = Navanax unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma @@ -1288,6 +1293,12 @@ block.exponential-reconstructor.name = Exponential Reconstructor block.tetrative-reconstructor.name = Tetrative Reconstructor block.payload-conveyor.name = Payload Conveyor block.payload-router.name = Payload Router +block.duct.name = Duct +block.duct-router.name = Duct Router +block.duct-bridge.name = Duct Bridge +block.payload-propulsion-tower.name = Payload Propulsion Tower +block.payload-void.name = Payload Void +block.payload-source.name = Payload Source block.disassembler.name = Disassembler block.silicon-crucible.name = Silicon Crucible block.overdrive-dome.name = Overdrive Dome diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index d642808c22..dffa4c0355 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -53,7 +53,9 @@ public class TechTree implements ContentList{ node(titaniumConveyor, Seq.with(new SectorComplete(craters)), () -> { node(phaseConveyor, () -> { node(massDriver, () -> { + node(payloadPropulsionTower, () -> { + }); }); }); @@ -233,7 +235,9 @@ public class TechTree implements ContentList{ }); node(repairPoint, () -> { + node(repairTurret, () -> { + }); }); }); }); @@ -416,6 +420,18 @@ public class TechTree implements ContentList{ }); }); }); + + node(retusa, () -> { + node(oxynoe, () -> { + node(cyclone, () -> { + node(aegires, () -> { + node(navanax, () -> { + + }); + }); + }); + }); + }); }); }); }); diff --git a/gradle.properties b/gradle.properties index a0baf91624..12e0a58c8a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=94cb69e5eb799266de29f7b962597db63b9b0de9 +archash=1a7e355c59f8882526fca13ca70ab2d8396c2322 From 91f472d88fcd2b74ea2f62bea6bdbc6f0aa69c24 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 10:32:31 -0400 Subject: [PATCH 16/69] jitpack. From 5d88dbf3b921f3ab6a468e71e6299aa7c5ee8b05 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 10:32:54 -0400 Subject: [PATCH 17/69] jitpack. --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 12e0a58c8a..94ac535729 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=1a7e355c59f8882526fca13ca70ab2d8396c2322 +archash=3666ae68aab01aa22a75184277d7511c0317b2bc From 48c1421afe196ebb38ad90e0886276d28e1a2e69 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 10:46:45 -0400 Subject: [PATCH 18/69] Further pack testing --- core/assets-raw/sprites/pack.json | 3 ++- gradle.properties | 2 +- 2 files changed, 3 insertions(+), 2 deletions(-) diff --git a/core/assets-raw/sprites/pack.json b/core/assets-raw/sprites/pack.json index 44984b6426..defab56426 100644 --- a/core/assets-raw/sprites/pack.json +++ b/core/assets-raw/sprites/pack.json @@ -7,5 +7,6 @@ fast: true, edgePadding: false, - bleed: false + bleed: false, + debug: true } diff --git a/gradle.properties b/gradle.properties index 94ac535729..74a899bb63 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=3666ae68aab01aa22a75184277d7511c0317b2bc +archash=fb468235358adce2e1bff90d28c5cb9c3b565219 From 17873d93cc692745fe28d0806ad7fe6335804fc4 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 10:52:44 -0400 Subject: [PATCH 19/69] I am so sick of JITPack dying --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 74a899bb63..94ac535729 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=fb468235358adce2e1bff90d28c5cb9c3b565219 +archash=3666ae68aab01aa22a75184277d7511c0317b2bc From c0dce6ca412c0717b8b5f576029e3907cc242a64 Mon Sep 17 00:00:00 2001 From: ulwepo <85295540+ulwepo@users.noreply.github.com> Date: Thu, 3 Jun 2021 23:55:03 +0900 Subject: [PATCH 20/69] Update servers_v6.json (#5339) This is a PVP server for Japanese. --- servers_v6.json | 4 ++++ 1 file changed, 4 insertions(+) diff --git a/servers_v6.json b/servers_v6.json index 987414867e..d28bb1839f 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -102,5 +102,9 @@ { "name": "TSR", "address": ["fifr4.quackhost.uk:20131"] + }, + { + "name": "Sakura", + "address": ["160.16.207.141"] } ] From bf17788485d53b6a9e1b93d2da40f3251bd97b1a Mon Sep 17 00:00:00 2001 From: RebornTrack970 <62565267+RebornTrack970@users.noreply.github.com> Date: Thu, 3 Jun 2021 17:55:36 +0300 Subject: [PATCH 21/69] Added an experimental V7 server to BE list (#5333) --- servers_be.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers_be.json b/servers_be.json index aa10471809..bd98734423 100644 --- a/servers_be.json +++ b/servers_be.json @@ -4,5 +4,8 @@ }, { "address": "be.mindustry.nydus.app:6567" + }, + { + "address": "157.90.180.53:25777" } ] From 4c5f27037b1ced0af37115542d99ad8c36bbf224 Mon Sep 17 00:00:00 2001 From: Somka000 <51973243+Somka000@users.noreply.github.com> Date: Thu, 3 Jun 2021 16:57:21 +0200 Subject: [PATCH 22/69] Add 7.0 server to BE list (#5336) Co-authored-by: Anuken --- servers_be.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers_be.json b/servers_be.json index bd98734423..577e8e25c7 100644 --- a/servers_be.json +++ b/servers_be.json @@ -7,5 +7,8 @@ }, { "address": "157.90.180.53:25777" + }, + { + "address": "mindustry.pl:7777" } ] From 1313ed2761ff5f20c622b6aa9b02f12deb20420c Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 11:37:33 -0400 Subject: [PATCH 23/69] Sprite packing fix --- core/assets-raw/sprites/pack.json | 6 +---- core/src/mindustry/core/Renderer.java | 2 +- tools/build.gradle | 35 ++++++++++++--------------- 3 files changed, 18 insertions(+), 25 deletions(-) diff --git a/core/assets-raw/sprites/pack.json b/core/assets-raw/sprites/pack.json index defab56426..fcd452dd9f 100644 --- a/core/assets-raw/sprites/pack.json +++ b/core/assets-raw/sprites/pack.json @@ -4,9 +4,5 @@ flattenPaths: true, maxWidth: 4096, maxHeight: 4096, - fast: true, - - edgePadding: false, - bleed: false, - debug: true + fast: true } diff --git a/core/src/mindustry/core/Renderer.java b/core/src/mindustry/core/Renderer.java index 83f32408a8..ec10061402 100644 --- a/core/src/mindustry/core/Renderer.java +++ b/core/src/mindustry/core/Renderer.java @@ -385,7 +385,7 @@ public class Renderer implements ApplicationListener{ lines[i + 3] = (byte)255; } Pixmap fullPixmap = new Pixmap(w, h); - Buffers.copy(lines, 0, fullPixmap.getPixels(), lines.length); + Buffers.copy(lines, 0, fullPixmap.pixels, lines.length); Fi file = screenshotDirectory.child("screenshot-" + Time.millis() + ".png"); PixmapIO.writePng(file, fullPixmap); fullPixmap.dispose(); diff --git a/tools/build.gradle b/tools/build.gradle index bfe38ced40..3a1141fb1f 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -212,30 +212,27 @@ task pack(dependsOn: [classes, configurations.runtimeClasspath]){ delete "../core/assets-raw/sprites_out/ui/icons" } - //disabled until the elusive sprite packing bug is fixed - if(false){ - ExecutorService executor = Executors.newFixedThreadPool(16) - long ms = System.currentTimeMillis() + ExecutorService executor = Executors.newFixedThreadPool(16) + long ms = System.currentTimeMillis() - //antialias everything except UI elements - fileTree(dir: new File(rootDir, 'core/assets-raw/sprites_out/').absolutePath, include: "**/*.png").visit{ file -> - if(file.isDirectory() || (file.toString().replace("\\", "/").contains("/ui/") && file.toString().startsWith("icon-")) || file.toString().contains(".9.png")) return + //antialias everything except UI elements + fileTree(dir: new File(rootDir, 'core/assets-raw/sprites_out/').absolutePath, include: "**/*.png").visit{ file -> + if(file.isDirectory() || (file.toString().replace("\\", "/").contains("/ui/") && file.toString().startsWith("icon-")) || file.toString().contains(".9.png")) return - executor.submit{ - antialias(file.file) - } + executor.submit{ + antialias(file.file) } - - executor.shutdown() - try{ - executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS) - }catch(InterruptedException e){ - e.printStackTrace() - } - - println "Time taken for AA: ${(System.currentTimeMillis() - ms) / 1000f}" } + executor.shutdown() + try{ + executor.awaitTermination(Long.MAX_VALUE, TimeUnit.NANOSECONDS) + }catch(InterruptedException e){ + e.printStackTrace() + } + + println "Time taken for AA: ${(System.currentTimeMillis() - ms) / 1000f}" + println("\n\nPacking normal 4096 sprites...\n\n") //pack normal sprites From 978a5a80e3cb9e3b65feaca70ac73c55b1ebec6b Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 11:40:18 -0400 Subject: [PATCH 24/69] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index 94ac535729..f295e767cf 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=3666ae68aab01aa22a75184277d7511c0317b2bc +archash=d8c90e185614c65ca9be3baca2776b0ab8d98d6c From c6b4db8a4e27cf96d1f981fc3746426e333436d8 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 11:41:14 -0400 Subject: [PATCH 25/69] arc --- gradle.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/gradle.properties b/gradle.properties index f295e767cf..c5c14e018f 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=d8c90e185614c65ca9be3baca2776b0ab8d98d6c +archash=4afe8d1351e4b8dacd36a53e04fa8d75cda31ffc From 8f390468dce7ae5e3356e72a671ffc4fa5283b5b Mon Sep 17 00:00:00 2001 From: Ahsoka-501 <63233281+Ahsoka-501@users.noreply.github.com> Date: Thu, 3 Jun 2021 19:11:52 +0300 Subject: [PATCH 26/69] moved thedimas to C.A.M.S. (#5325) --- servers_v6.json | 6 +----- 1 file changed, 1 insertion(+), 5 deletions(-) diff --git a/servers_v6.json b/servers_v6.json index d28bb1839f..265d294f65 100644 --- a/servers_v6.json +++ b/servers_v6.json @@ -21,7 +21,7 @@ }, { "name": "C.A.M.S.", - "address": ["routerchain.ddns.net", "nikochio.ddns.net", "easyplay.su"] + "address": ["routerchain.ddns.net", "nikochio.ddns.net", "easyplay.su", "play.thedimas.pp.ua"] }, { "name": "BE6.RUN", @@ -95,10 +95,6 @@ "name": "Mindustry.Party", "address": ["game.mindustry.party"] }, - { - "name": "thedimas", - "address": ["play.thedimas.pp.ua"] - }, { "name": "TSR", "address": ["fifr4.quackhost.uk:20131"] From 3f7edc90183b88e6d2f87adfd306ab64cfd6b04f Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 12:27:04 -0400 Subject: [PATCH 27/69] Use BE servers instead of v6 --- core/src/mindustry/Vars.java | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/Vars.java b/core/src/mindustry/Vars.java index 2c263508cf..001d5c85d6 100644 --- a/core/src/mindustry/Vars.java +++ b/core/src/mindustry/Vars.java @@ -73,7 +73,8 @@ public class Vars implements Loadable{ /** URL to the JSON file containing all the BE servers. Only queried in BE. */ public static final String serverJsonBeURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json"; /** URL to the JSON file containing all the stable servers. */ - public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_v6.json"; + //TODO this uses BE servers until full v7 release, there's no point in displaying v6 at all + public static final String serverJsonURL = "https://raw.githubusercontent.com/Anuken/Mindustry/master/servers_be.json"; /** URL of the github issue report template.*/ public static final String reportIssueURL = "https://github.com/Anuken/Mindustry/issues/new?labels=bug&template=bug_report.md"; /** list of built-in servers.*/ From a06ee52fb56a8ce8ff0ab232eb905767ec80b01d Mon Sep 17 00:00:00 2001 From: OSP <76648940+osp54@users.noreply.github.com> Date: Thu, 3 Jun 2021 20:26:45 +0300 Subject: [PATCH 28/69] Add MinDurka v7 BE server. (#5341) --- servers_be.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers_be.json b/servers_be.json index 577e8e25c7..a510096842 100644 --- a/servers_be.json +++ b/servers_be.json @@ -10,5 +10,8 @@ }, { "address": "mindustry.pl:7777" + }, + { + "address": "46.17.104.254:9999" } ] From ac20b17e0b23bd41038bd2c68235947e1b351493 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 13:58:56 -0400 Subject: [PATCH 29/69] Mod bugfixes --- .../entities/comp/WaterMoveComp.java | 1 - core/src/mindustry/graphics/MultiPacker.java | 4 ++++ core/src/mindustry/io/JsonIO.java | 13 ++++++++++++ core/src/mindustry/mod/ContentParser.java | 1 + .../world/blocks/distribution/Duct.java | 21 +++++++++++++++++++ .../world/blocks/distribution/DuctRouter.java | 2 +- core/src/mindustry/world/meta/Attribute.java | 8 +++++++ gradle.properties | 2 +- 8 files changed, 49 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/entities/comp/WaterMoveComp.java b/core/src/mindustry/entities/comp/WaterMoveComp.java index 69d178f41d..346a2898f8 100644 --- a/core/src/mindustry/entities/comp/WaterMoveComp.java +++ b/core/src/mindustry/entities/comp/WaterMoveComp.java @@ -15,7 +15,6 @@ import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.environment.*; -//just a proof of concept @Component abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{ @Import float x, y, rotation; diff --git a/core/src/mindustry/graphics/MultiPacker.java b/core/src/mindustry/graphics/MultiPacker.java index eb823ea991..f8d9e472e2 100644 --- a/core/src/mindustry/graphics/MultiPacker.java +++ b/core/src/mindustry/graphics/MultiPacker.java @@ -26,6 +26,10 @@ public class MultiPacker implements Disposable{ return null; } + public PixmapPacker getPacker(PageType type){ + return packers[type.ordinal()]; + } + public boolean has(String name){ for(var page : PageType.all){ if(packers[page.ordinal()].getRect(name) != null){ diff --git a/core/src/mindustry/io/JsonIO.java b/core/src/mindustry/io/JsonIO.java index ea15b3969c..c5b7986daa 100644 --- a/core/src/mindustry/io/JsonIO.java +++ b/core/src/mindustry/io/JsonIO.java @@ -8,6 +8,7 @@ import mindustry.ctype.*; import mindustry.game.*; import mindustry.type.*; import mindustry.world.*; +import mindustry.world.meta.*; import java.io.*; @@ -111,6 +112,18 @@ public class JsonIO{ } }); + json.setSerializer(Attribute.class, new Serializer<>(){ + @Override + public void write(Json json, Attribute object, Class knownType){ + json.writeValue(object.name); + } + + @Override + public Attribute read(Json json, JsonValue jsonData, Class type){ + return Attribute.get(jsonData.asString()); + } + }); + json.setSerializer(Item.class, new Serializer<>(){ @Override public void write(Json json, Item object, Class knownType){ diff --git a/core/src/mindustry/mod/ContentParser.java b/core/src/mindustry/mod/ContentParser.java index 720f5c2c02..7c77770cf3 100644 --- a/core/src/mindustry/mod/ContentParser.java +++ b/core/src/mindustry/mod/ContentParser.java @@ -61,6 +61,7 @@ public class ContentParser{ }); put(Interp.class, (type, data) -> field(Interp.class, data)); put(CacheLayer.class, (type, data) -> field(CacheLayer.class, data)); + put(Attribute.class, (type, data) -> Attribute.get(data.asString())); put(Schematic.class, (type, data) -> { Object result = fieldOpt(Loadouts.class, data); if(result != null){ diff --git a/core/src/mindustry/world/blocks/distribution/Duct.java b/core/src/mindustry/world/blocks/distribution/Duct.java index 6e29f879b5..cf09c02f34 100644 --- a/core/src/mindustry/world/blocks/distribution/Duct.java +++ b/core/src/mindustry/world/blocks/distribution/Duct.java @@ -6,6 +6,7 @@ import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.*; +import arc.util.io.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.entities.units.*; @@ -183,5 +184,25 @@ public class Duct extends Block implements Autotiler{ next = front(); nextc = next instanceof DuctBuild d ? d : null; } + + @Override + public byte version(){ + return 1; + } + + @Override + public void write(Writes write){ + super.write(write); + write.b(recDir); + } + + @Override + public void read(Reads read, byte revision){ + super.read(read, revision); + if(revision >= 1){ + recDir = read.b(); + } + current = items.first(); + } } } diff --git a/core/src/mindustry/world/blocks/distribution/DuctRouter.java b/core/src/mindustry/world/blocks/distribution/DuctRouter.java index b4c78d7ab8..69f90d52d4 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctRouter.java +++ b/core/src/mindustry/world/blocks/distribution/DuctRouter.java @@ -87,7 +87,7 @@ public class DuctRouter extends Block{ if(current == null) return null; for(int i = -1; i <= 1; i++){ - Building other = nearby(Mathf.mod(rotation + i + cdump, 4)); + Building other = nearby(Mathf.mod(rotation + (((i + cdump + 1) % 3) - 1), 4)); if(other != null && other.team == team && other.acceptItem(this, current)){ return other; } diff --git a/core/src/mindustry/world/meta/Attribute.java b/core/src/mindustry/world/meta/Attribute.java index 5114d3c10a..4ade4aa68f 100644 --- a/core/src/mindustry/world/meta/Attribute.java +++ b/core/src/mindustry/world/meta/Attribute.java @@ -1,9 +1,11 @@ package mindustry.world.meta; +import arc.struct.*; import mindustry.*; public class Attribute{ public static Attribute[] all = {}; + public static ObjectMap map = new ObjectMap<>(); public static final Attribute /** Heat content. Used for thermal generator yield. */ @@ -36,6 +38,11 @@ public class Attribute{ return name; } + /** Never returns null, may throw an exception if not found. */ + public static Attribute get(String name){ + return map.getThrow(name, () -> new IllegalArgumentException("Unknown Attribute type: " + name)); + } + /** Automatically registers this attribute for use. Do not call after mod init. */ public static Attribute add(String name){ Attribute a = new Attribute(all.length, name); @@ -43,6 +50,7 @@ public class Attribute{ all = new Attribute[all.length + 1]; System.arraycopy(prev, 0, all, 0, a.id); all[a.id] = a; + map.put(name, a); return a; } } diff --git a/gradle.properties b/gradle.properties index c5c14e018f..13dd3dad98 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=4afe8d1351e4b8dacd36a53e04fa8d75cda31ffc +archash=ef9b29a8978e8f5e2fcba770bfebd210f4bc8117 From f1cf1efe321d80c5d0b4c787b77b810f80a9c5e5 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 14:23:16 -0400 Subject: [PATCH 30/69] Build retry --- core/src/mindustry/graphics/MultiPacker.java | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/graphics/MultiPacker.java b/core/src/mindustry/graphics/MultiPacker.java index f8d9e472e2..b286a3f2d6 100644 --- a/core/src/mindustry/graphics/MultiPacker.java +++ b/core/src/mindustry/graphics/MultiPacker.java @@ -74,8 +74,9 @@ public class MultiPacker implements Disposable{ //main page (sprites.png) - all sprites for units, weapons, placeable blocks, effects, bullets, etc //environment page (sprites2.png) - all sprites for things in the environmental cache layer //editor page (sprites3.png) - all sprites needed for rendering in the editor, including block icons and a few minor sprites - //zone page (sprites4.png) - zone previews - //ui page (sprites5.png) - content icons, white icons and UI elements + //zone page (sprites4.png) - zone preview + //rubble page - scorch textures for unit deaths & wrecks + //ui page (sprites5.png) - content icons, white icons, fonts and UI elements public enum PageType{ main(4096), environment, From 6d280981809d43379ecc7365131030744586e999 Mon Sep 17 00:00:00 2001 From: genNAowl <68400583+genNAowl@users.noreply.github.com> Date: Thu, 3 Jun 2021 11:31:23 -0700 Subject: [PATCH 31/69] Fix Boat Trails Being Drawn on Land (#5340) * update * Revert "update" This reverts commit 6ff3523276c0d0ff8847262055ea728e3294615f. * Hacky Implementation * Revert "Hacky Implementation" This reverts commit 632121312d0189428f51927c9dde585dba67e147. * Not so Hacky Implementation Co-authored-by: Leonwang4234 <62972692+Leonwang4234@users.noreply.github.com> Co-authored-by: Leonwang4234 Co-authored-by: Anuken --- core/src/mindustry/entities/comp/WaterMoveComp.java | 4 +++- core/src/mindustry/graphics/Trail.java | 2 ++ 2 files changed, 5 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/entities/comp/WaterMoveComp.java b/core/src/mindustry/entities/comp/WaterMoveComp.java index 346a2898f8..220386e31d 100644 --- a/core/src/mindustry/entities/comp/WaterMoveComp.java +++ b/core/src/mindustry/entities/comp/WaterMoveComp.java @@ -15,6 +15,8 @@ import mindustry.type.*; import mindustry.world.*; import mindustry.world.blocks.environment.*; +import static mindustry.Vars.*; + @Component abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{ @Import float x, y, rotation; @@ -31,7 +33,7 @@ abstract class WaterMoveComp implements Posc, Velc, Hitboxc, Flyingc, Unitc{ int sign = i == 0 ? -1 : 1; float cx = Angles.trnsx(rotation - 90, type.trailX * sign, type.trailY) + x, cy = Angles.trnsy(rotation - 90, type.trailX * sign, type.trailY) + y; - t.update(cx, cy); + t.update(cx, cy, world.floorWorld(cx, cy).isLiquid ? 1 : 0); } } diff --git a/core/src/mindustry/graphics/Trail.java b/core/src/mindustry/graphics/Trail.java index fc998e64ea..5fc194c51d 100644 --- a/core/src/mindustry/graphics/Trail.java +++ b/core/src/mindustry/graphics/Trail.java @@ -40,6 +40,7 @@ public class Trail{ float[] items = points.items; int i = points.size - 3; float x1 = items[i], y1 = items[i + 1], w1 = items[i + 2], w = w1 * width / (points.size/3) * i/3f * 2f; + if(w1 <= 0.001f) return; Draw.rect("hcircle", x1, y1, w, w, -Mathf.radDeg * lastAngle + 180f); Draw.reset(); } @@ -56,6 +57,7 @@ public class Trail{ float size = width / (points.size/3); float z1 = lastAngle; float z2 = -Angles.angleRad(x2, y2, lx, ly); + if(w1 <= 0.001f || w2 <= 0.001f) continue; float cx = Mathf.sin(z1) * i/3f * size * w1, cy = Mathf.cos(z1) * i/3f * size * w1, nx = Mathf.sin(z2) * (i/3f + 1) * size * w2, ny = Mathf.cos(z2) * (i/3f + 1) * size * w2; From 43e13038f4cfcbddcfa13222f0f51051c241c03b Mon Sep 17 00:00:00 2001 From: kituta <85106525+kituta@users.noreply.github.com> Date: Fri, 4 Jun 2021 03:34:00 +0900 Subject: [PATCH 32/69] Update bundle_ja.properties (#5338) --- core/assets/bundles/bundle_ja.properties | 240 +++++++++++------------ 1 file changed, 120 insertions(+), 120 deletions(-) diff --git a/core/assets/bundles/bundle_ja.properties b/core/assets/bundles/bundle_ja.properties index 7b43e80516..df0475b176 100644 --- a/core/assets/bundles/bundle_ja.properties +++ b/core/assets/bundles/bundle_ja.properties @@ -23,8 +23,8 @@ gameover.pvp = [accent] {0}[] チームの勝利! gameover.waiting = [accent]次のマップを待っています... highscore = [accent]ハイスコアを更新! copied = コピーしました。 -indev.notready = This part of the game isn't ready yet -indev.campaign = [accent]Congratulations! You've reached the end of the campaign![]\n\nThis is as far as the content goes right now. Interplanetary travel will be added in future updates. +indev.notready = ゲームのこの要素はまだ準備中です +indev.campaign = [accent]おめでとう! キャンペーンを達成しました![]\n\n現時点での内容はここまでです。 惑星間旅行は、今後のアップデートで追加される予定です。 load.sound = サウンド load.map = マップ @@ -306,16 +306,16 @@ cancelbuilding = [accent][[{0}][] 選択を解除する selectschematic = [accent][[{0}][] 選択し、コピーする pausebuilding = [accent][[{0}][] 建築を一時的に中断する resumebuilding = [scarlet][[{0}][] 建築を再開する -showui = UI hidden.\nPress [accent][[{0}][] to show UI. +showui = UI 非表示.\nUIを表示するには[accent][[{0}][] を押下 wave = [accent]ウェーブ {0} -wave.cap = [accent]Wave {0}/{1} +wave.cap = [accent]ウェーブ {0}/{1} wave.waiting = [lightgray]次のウェーブまで {0} 秒 wave.waveInProgress = [lightgray]ウェーブ進行中 waiting = [lightgray]待機中... waiting.players = プレイヤーを待っています... wave.enemies = [lightgray]敵は残り {0} 体 -wave.enemycores = [accent]{0}[lightgray] Enemy Cores -wave.enemycore = [accent]{0}[lightgray] Enemy Core +wave.enemycores = [accent]{0}[lightgray] 敵性コア +wave.enemycore = [accent]{0}[lightgray] 敵性コア wave.enemy = [lightgray]敵は残り {0} 体 wave.guardianwarn = [red][[警告][]ガーディアンがあと [accent]{0}[] ウェーブで来ます。 wave.guardianwarn.one = [red][[警告][]ガーディアンがあと [accent]{0}[] ウェーブで来ます。 @@ -551,10 +551,10 @@ sectors.stored = 保存済み: sectors.resume = 再開 sectors.launch = 打ち上げ sectors.select = 選択 -sectors.nonelaunch = [lightgray]none (sun) +sectors.nonelaunch = [lightgray]無し (sun) sectors.rename = セクター名を変更 sectors.enemybase = [scarlet]敵基地 -sectors.vulnerable = [scarlet]Vulnerable +sectors.vulnerable = [scarlet]脆弱 sectors.underattack = [scarlet]攻撃を受けます! [accent]{0}% 破損 sectors.survives = [accent]{0} ウェーブ生存 sectors.go = Go @@ -589,27 +589,27 @@ sector.overgrowth.name = オーバーグロウス sector.tarFields.name = ター · フィールズ sector.saltFlats.name = ソルト · フラッツ sector.fungalPass.name = ファングル · パス -sector.biomassFacility.name = Biomass Synthesis Facility -sector.windsweptIslands.name = Windswept Islands -sector.extractionOutpost.name = Extraction Outpost -sector.planetaryTerminal.name = Planetary Launch Terminal +sector.biomassFacility.name = バイオマス シンテシス ファシリティ +sector.windsweptIslands.name = ウインドスイープト アイランズ +sector.extractionOutpost.name = エクストラクション アウトポスト +sector.planetaryTerminal.name = プラネタリー ローンチ ターミナル -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. -sector.saltFlats.description = On the outskirts of the desert lie the Salt Flats. Few resources can be found in this location.\n\nThe enemy has erected a resource storage complex here. Eradicate their core. Leave nothing standing. -sector.craters.description = Water has accumulated in this crater, relic of the old wars. Reclaim the area. Collect sand. Smelt metaglass. Pump water to cool turrets and drills. -sector.ruinousShores.description = Past the wastes, is the shoreline. Once, this location housed a coastal defense array. Not much of it remains. Only the most basic defense structures have remained unscathed, everything else reduced to scrap.\nContinue the expansion outwards. Rediscover the technology. -sector.stainedMountains.description = Further inland lie the mountains, yet untainted by spores.\nExtract the abundant titanium in this area. Learn how to use it.\n\nThe enemy presence is greater here. Do not give them time to send their strongest units. -sector.overgrowth.description = This area is overgrown, closer to the source of the spores.\nThe enemy has established an outpost here. Build Titan units. Destroy it. Reclaim that which was lost. -sector.tarFields.description = The outskirts of an oil production zone, between the mountains and desert. One of the few areas with usable tar reserves.\nAlthough abandoned, this area has some dangerous enemy forces nearby. Do not underestimate them.\n\n[lightgray]Research oil processing technology if possible. -sector.desolateRift.description = An extremely dangerous zone. Plentiful resources, but little space. High risk of destruction. Leave as soon as possible. Do not be fooled by the long spacing between enemy attacks. -sector.nuclearComplex.description = A former facility for the production and processing of thorium, reduced to ruins.\n[lightgray]Research the thorium and its many uses.\n\nThe enemy is present here in great numbers, constantly scouting for attackers. -sector.fungalPass.description = A transition area between high mountains and lower, spore-ridden lands. A small enemy reconnaissance base is located here.\nDestroy it.\nUse Dagger and Crawler units. Take out the two cores. -sector.biomassFacility.description = The origin of spores. This is the facility in which they were researched and initially produced.\nResearch the technology contained within. Cultivate spores for the production of fuel and plastics.\n\n[lightgray]Upon this facility's demise, the spores were released. Nothing in the local ecosystem could compete with such an invasive organism. -sector.windsweptIslands.description = Further past the shoreline is this remote chain of islands. Records show they once had [accent]Plastanium[]-producing structures.\n\nFend off the enemy's naval units. Establish a base on the islands. Research these factories. -sector.extractionOutpost.description = A remote outpost, constructed by the enemy for the purpose of launching resources to other sectors.\n\nCross-sector transport technology is essential for further conquest. Destroy the base. Research their Launch Pads. -sector.impact0078.description = Here lie remnants of the interstellar transport vessel that first entered this system.\n\nSalvage as much as possible from the wreckage. Research any intact technology. -sector.planetaryTerminal.description = The final target.\n\nThis coastal base contains a structure capable of launching Cores to local planets. It is extremely well guarded.\n\nProduce naval units. Eliminate the enemy as quickly as possible. Research the launch structure. +sector.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 = 山と砂漠に挟まれた、石油産出地帯のはずれです。使用可能なタール埋蔵量がある数少ないエリアの1つです。\n放棄されたエリアですが、近くに脅威となる敵がいます。\n\n[lightgray]可能であれば石油抽出機を研究しましょう。 +sector.desolateRift.description = 非常に危険な地帯です。資源は豊富ですが、空間が狭いです。破壊されるリスクが高いため、一刻も早く立ち去りましょう。敵の攻撃間隔が長いですが、気を抜かないでください。 +sector.nuclearComplex.description = 崩壊したトリウム製造・加工施設です。\n[lightgray]トリウムとその多くの用途を研究してください。\n\n多くの敵がここに存在し、常に攻撃を偵察しています。 +sector.fungalPass.description = 高山と、胞子の多い低地との間の遷移地域です。ここには敵の小さな偵察基地があります。\n破壊しましょう。\nダガーとクローラーユニットを使い、2つの敵コアの排除しましょう、 +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海軍ユニットを生産し、できるだけ速やかに敵を排除しましょう。発射建造物を研究しましょう。 settings.language = 言語 settings.data = ゲームデータ @@ -679,7 +679,7 @@ stat.boosteffect = ブースト効果 stat.maxunits = 最大ユニット数 stat.health = 耐久値 stat.buildtime = 建設時間 -stat.maxconsecutive = Max Consecutive +stat.maxconsecutive = 最大連鎖 stat.buildcost = 建設費用 stat.inaccuracy = 誤差 stat.shots = ショット @@ -715,8 +715,8 @@ ability.shieldregenfield = シールドリペアフィールド ability.movelightning = ムーブメントライトニング bar.drilltierreq = より高性能なドリルを使用してください -bar.noresources = Missing Resources -bar.corereq = Core Base Required +bar.noresources = 不足している資源 +bar.corereq = コアベースが必要 bar.drillspeed = 採掘速度: {0}/秒 bar.pumpspeed = ポンプの速度: {0}/s bar.efficiency = 効率: {0}% @@ -740,7 +740,7 @@ units.processorcontrol = [lightgray]プロセッサーの制御下 bullet.damage = [stat]{0}[lightgray] ダメージ bullet.splashdamage = [stat]{0}[lightgray] 範囲ダメージ 約[stat] {1}[lightgray] タイル bullet.incendiary = [stat]焼夷弾 -bullet.sapping = [stat]sapping +bullet.sapping = [stat]吸収弾 bullet.homing = [stat]追尾弾 bullet.shock = [stat]電撃 bullet.frag = [stat]爆発弾 @@ -817,7 +817,7 @@ setting.conveyorpathfinding.name = コンベアー配置経路探索 setting.sensitivity.name = 操作感度 setting.saveinterval.name = 自動保存間隔 setting.seconds = {0} 秒 -setting.milliseconds = {0} milliseconds +setting.milliseconds = {0} ミリ秒 setting.fullscreen.name = フルスクリーン setting.borderlesswindow.name = 境界の無いウィンドウ[lightgray] (再起動が必要になる場合があります) setting.fps.name = FPSを表示 @@ -843,7 +843,7 @@ setting.bridgeopacity.name = ブリッジの透明度 setting.playerchat.name = ゲーム内にチャットを表示 setting.showweather.name = 天気のグラフィックを表示 public.confirm = ゲームを公開しますか?\n[accent]誰でもゲームに参加できるようになります。\n[lightgray]あとから設定で変更できます。 -public.confirm.really = If you want to play with friends, use [green]Invite Friend[] instead of a [scarlet]Public server[]!\nAre you sure you want to make your game [scarlet]public[]? +public.confirm.really = フレンドと遊びたい場合は、[scarlet]公開サーバー[] ではなく [green]フレンド招待[] を使おう!\nゲームを [scarlet]公開[]してもよろしいですか? public.beta = ベータ版では使用できません。 uiscale.reset = UIサイズが変更されました。\nこのままでよければ「OK」を押してください。\n[scarlet][accent]{0}[] 秒で元の設定に戻ります... uiscale.cancel = キャンセル & 終了 @@ -918,7 +918,7 @@ keybind.toggle_menus.name = メニュー切り替え keybind.chat_history_prev.name = 前のチャット履歴 keybind.chat_history_next.name = 次のチャット履歴 keybind.chat_scroll.name = チャットスクロール -keybind.chat_mode.name = Change Chat Mode +keybind.chat_mode.name = チャットモードの変更 keybind.drop_unit.name = ドロップユニット keybind.zoom_minimap.name = ミニマップのズーム mode.help.title = モード説明 @@ -926,7 +926,7 @@ mode.survival.name = サバイバル mode.survival.description = 通常のモードです。 資源も限られる中、自動的にウェーブが進行していきます。\n[gray]プレイするには、マップに敵が出現する必要があります。 mode.sandbox.name = サンドボックス mode.sandbox.description = 無限の資源があり、ウェーブを自由に進行できます。 -mode.editor.name = Editor +mode.editor.name = エディター mode.pvp.name = PvP mode.pvp.description = エリア内で他のプレイヤーと戦います。\n[gray]プレイするには、マップに少なくとも二つの異なる色のコアが必要です。 mode.attack.name = アタック @@ -1226,10 +1226,10 @@ block.command-center.name = 司令塔 block.ground-factory.name = 陸軍工場 block.air-factory.name = 空軍工場 block.naval-factory.name = 海軍工場 -block.additive-reconstructor.name = Additive Reconstructor -block.multiplicative-reconstructor.name = Multiplicative Reconstructor -block.exponential-reconstructor.name = Exponential Reconstructor -block.tetrative-reconstructor.name = Tetrative Reconstructor +block.additive-reconstructor.name = 加法式再構成工場 +block.multiplicative-reconstructor.name = 乗法式再構成工場 +block.exponential-reconstructor.name = 指数式再構成工場 +block.tetrative-reconstructor.name = 超冪式再構成工場 block.payload-conveyor.name = マスコンベアー block.payload-router.name = ペイロードルーター block.disassembler.name = ディスアセンブラー @@ -1259,64 +1259,64 @@ team.green.name = グリーン team.purple.name = パープル hint.skip = スキップ -hint.desktopMove = Use [accent][[WASD][] to move. -hint.zoom = [accent]Scroll[] to zoom in or out. -hint.mine = Move near the \uf8c4 copper ore and [accent]tap[] it to mine manually. -hint.desktopShoot = [accent][[Left-click][] to shoot. -hint.depositItems = To transfer items, drag from your ship to the core. -hint.respawn = To respawn as a ship, press [accent][[V][]. -hint.respawn.mobile = You have switched control a unit/structure. To respawn as a ship, [accent]tap the avatar in the top left.[] -hint.desktopPause = Press [accent][[Space][] to pause and unpause the game. -hint.placeDrill = Select the \ue85e [accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and click on a copper patch to place it. -hint.placeDrill.mobile = Select the \ue85e[accent]Drill[] tab in the menu at the bottom right, then select a \uf870 [accent]Drill[] and tap on a copper patch to place it.\n\nPress the \ue800 [accent]checkmark[] at the bottom right to confirm. -hint.placeConveyor = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nClick and drag to place multiple conveyors.\n[accent]Scroll[] to rotate. -hint.placeConveyor.mobile = Conveyors move items from drills into other blocks. Select a \uf896 [accent]Conveyor[] from the \ue814 [accent]Distribution[] tab.\n\nHold down your finger for a second and drag to place multiple conveyors. -hint.placeTurret = Place \uf861 [accent]Turrets[] to defend your base from enemies.\n\nTurrets require ammo - in this case, \uf838copper.\nUse conveyors and drills to supply them. -hint.breaking = [accent]Right-click[] and drag to break blocks. -hint.breaking.mobile = Activate the \ue817 [accent]hammer[] in the bottom right and tap to break blocks.\n\nHold down your finger for a second and drag to break in a selection. -hint.research = Use the \ue875 [accent]Research[] button to research new technology. -hint.research.mobile = Use the \ue875 [accent]Research[] button in the \ue88c [accent]Menu[] to research new technology. -hint.unitControl = Hold [accent][[L-ctrl][] and [accent]click[] to control friendly units or turrets. -hint.unitControl.mobile = [accent][Double-tap[] to control friendly units or turrets. -hint.launch = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the bottom right. -hint.launch.mobile = Once enough resources are collected, you can [accent]Launch[] by selecting nearby sectors from the \ue827 [accent]Map[] in the \ue88c [accent]Menu[]. -hint.schematicSelect = Hold [accent][[F][] and drag to select blocks to copy and paste.\n\n[accent][[Middle Click][] to copy a single block type. -hint.conveyorPathfind = Hold [accent][[L-Ctrl][] while dragging conveyors to automatically generate a path. -hint.conveyorPathfind.mobile = Enable \ue844 [accent]diagonal mode[] and drag conveyors to automatically generate a path. -hint.boost = Hold [accent][[L-Shift][] to fly over obstacles with your current unit.\n\nOnly a few ground units have boosters. -hint.command = Press [accent][[G][] to command nearby units of [accent]similar type[] into formation.\n\nTo command ground units, you must first control another ground unit. -hint.command.mobile = [accent][[Double-tap][] your unit to command nearby units into formation. -hint.payloadPickup = Press [accent][[[] to pick up small blocks or units. -hint.payloadPickup.mobile = [accent]Tap and hold[] a small block or unit to pick it up. -hint.payloadDrop = Press [accent]][] to drop a payload. -hint.payloadDrop.mobile = [accent]Tap and hold[] an empty location to drop a payload there. -hint.waveFire = [accent]Wave[] turrets with water as ammunition will automatically put out nearby fires. -hint.generator = \uf879 [accent]Combustion Generators[] burn coal and transmit power to adjacent blocks.\n\nPower transmission range can be extended with \uf87f [accent]Power Nodes[]. -hint.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.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. +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指を1秒間押したままドラッグすると、複数のコンベアーを配置します。 +hint.placeTurret = \uf861 [accent]ターレット[] を配置して、敵から基地を守ります。\n\nターレットには弾薬が必要です。この場合は \uf838銅です。\nコンベアーとドリルを使用して補給します。 +hint.breaking = [accent]右クリック[] と右クリックドラッグによりブロックを壊します。 +hint.breaking.mobile = 右下にある \ue817 [accent]ハンマー[] をアクティブにして、タップしてブロックを壊します。\n\n指を1秒間押したままドラッグすると、範囲選択が出来ます。 +hint.research = \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。 +hint.research.mobile = \ue88c [accent]メニュー[] の \ue875 [accent]研究[] ボタンを押して、新しいテクノロジーを研究します。 +hint.unitControl = [accent][[左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][[ミドルクリック][] により、1つのブロックタイプをコピーします。 +hint.conveyorPathfind = [accent][[左-Ctrl][] を押しながらコンベアーをドラッグすると、経路が自動生成されます。 +hint.conveyorPathfind.mobile = \ue844 [accent]対角線モード[] を有効にし、コンベアーをドラッグすると経路が自動生成します。 +hint.boost = [accent][[左シフト][] を押したままにすると、操作中のユニットは障害物を飛び越えます。\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]ガーディアン[] ユニットは装甲を搭載しています。[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.coreIncinerate = コアのアイテム収納数の上限に達したアイテムは搬入されず [accent]破棄[]されます。 +hint.coopCampaign = [accent]co-op キャンペーン[]をプレイすると、現在のマップで生産されたアイテムは [accent]あなたのセクター[] に移送されます。\n\nホストが行った新しい研究も引き継がれます。 item.copper.description = 便利な鉱石です。様々なブロックの材料として幅広く使われています。 item.copper.details = セルプロに豊富な金属。補強しない限り構造的に弱い。 item.lead.description = 一般的で手軽な鉱石です。機械や液体輸送ブロックなどに使われます。 -item.lead.details = Dense. Inert. Extensively used in batteries.\nNote: Likely toxic to biological life forms. Not that there are many left here. +item.lead.details = 高密度。不活性。バッテリーによく利用される。\nノート: 生物学的に生命に有毒である可能性があります。このあたりには生命が多く残っていません。 item.metaglass.description = とても頑丈な強化ガラスです。液体の輸送やタンクとして幅広く使われています。 item.graphite.description = 弾薬や絶縁体として利用されています。 item.sand.description = 合金や融剤など広く使用されている一般的な材料です。 item.coal.description = 一般的で有用な燃料です。 -item.coal.details = Appears to be fossilized plant matter, formed long before the seeding event. +item.coal.details = 化石化して植物のようで、利用方法が確立されるはるか前に形成されました。 item.titanium.description = 希少で非常に軽量な金属です。液体輸送やドリル、航空機などで使われます。 item.thorium.description = 放射性を持つ高密度な金属です。建造物の支えや核燃料として使われます。 item.scrap.description = 昔の建造物やユニットの残骸です。様々な種類の金属が微量に含まれています。 -item.scrap.details = Leftover remnants of old structures and units. +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 = Spores. Likely a synthetic life form. Emit gases toxic to other biological life. Extremely invasive. Highly flammable in certain conditions. +item.spore-pod.details = 合成生命体と思われる胞子です。他の生物に有毒なガスを放出し、非常に侵略的です。特定の条件下で非常に高い可燃性を持ちます。 item.blast-compound.description = 爆弾や爆発物に使われる不安定な化合物です。胞子と揮発性物質から合成されます。燃料として燃やすこともできますが、お勧めしません。 item.pyratite.description = 焼夷兵器などに使われる非常に燃えやすい物質です。 @@ -1379,7 +1379,7 @@ block.phase-conveyor.description = 改良されたアイテム転送ブロック block.sorter.description = アイテムを分別して搬出します。設定したアイテムは通過させます。他のアイテムが搬入されると側面にアイテムを搬出します。 block.inverted-sorter.description = アイテムを分別して搬出します。設定したアイテムは側面に搬出されます。他のアイテムが搬入されるとアイテムを通過させます。通常のルーターと反対の動作をします。 block.router.description = 搬入したアイテムをほかの3方向に均等に搬出します。一つの資源から複数に分ける際などに使われます。 -block.router.details = A necessary evil. Using next to production inputs is not advised, as they will get clogged by output. +block.router.details = 最悪の設置は、搬入のために生産施設に隣接させることです。搬出によって詰まる可能性があるためおすすめできません。 block.distributor.description = 高度なルーターです。搬入したアイテムをほかの7方向に均等に分けて搬出します。 block.overflow-gate.description = 搬出先にアイテムを搬入する空きがない場合に左右にアイテムを搬出します。 block.underflow-gate.description = オーバーフローゲートの反対の機能を持ちます。 左右に出力できない場合、前面に出力します。 @@ -1416,14 +1416,14 @@ block.laser-drill.description = 電力を使用したレーザー技術でより block.blast-drill.description = 上位のドリルです。大量の電力が必要になります。 block.water-extractor.description = 地面から水を汲み上げます。近くに湖がない場合に有用です。 block.cultivator.description = 胞子の小さな集まりを工業用ポッドに培養します。 -block.cultivator.details = Recovered technology. Used to produce massive amounts of biomass as efficiently as possible. Likely the initial incubator of the spores now covering Serpulo. +block.cultivator.details = 取り戻されたテクノロジー。大量のバイオマスを可能な限り効率的に生産します。おそらく最初の培養機により、今セルプロは胞子に覆われています、 block.oil-extractor.description = 大量の電力を使用して、砂から石油を回収します。近くに油田がない場合に有用です。 block.core-shard.description = 基本的なコアです。一度破壊されると、その地域との接続が途絶えます。破壊されないようにしましょう。 -block.core-shard.details = The first iteration. Compact. Self-replicating. Equipped with single-use launch thrusters. Not designed for interplanetary travel. +block.core-shard.details = 最初のバージョンです。コンパクトで自己複製可能、使い捨ての発射スラスターを装備しています。惑星間旅行用には設計されていません。 block.core-foundation.description = バージョンアップしたコアです。より堅く、より多くの資源を格納できます。 -block.core-foundation.details = The second iteration. +block.core-foundation.details = 2番目のバージョンです。 block.core-nucleus.description = さらにバージョンアップしたコアです。優れた耐久性と大量の資源を格納できます。 -block.core-nucleus.details = The third and final iteration. +block.core-nucleus.details = 3番目で最終バージョンです。 block.vault.description = 各種類のアイテムを大量に保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。[lightgray]搬出機[]を使って、ボールトからアイテムを搬出できます。 block.container.description = 各種類のアイテムを少量ずつ保管します。隣接するコンテナーやボール卜、コアは一つのストレージユニットとして扱われます。 [lightgray]搬出機[]を使って、コンテナーからアイテムを搬出できます。 block.unloader.description = コンテナやボールト、コアからアイテムをコンベアーか隣接するブロックに搬出します。搬出機をタップして搬出するアイテムを変更することができます。 @@ -1470,36 +1470,36 @@ block.logic-display.description = プロセッサからの任意のグラフィ block.large-logic-display.description = プロセッサからの任意のグラフィックを表示します。 block.interplanetary-accelerator.description = 巨大な電磁レールガンタワーです。別惑星への展開のためにコアを重力圏脱出可能速度まで加速します。 -unit.dagger.description = Fires standard bullets at all nearby enemies. -unit.mace.description = Fires streams of flame at all nearby enemies. -unit.fortress.description = Fires long-range artillery at ground targets. -unit.scepter.description = Fires a barrage of charged bullets at all nearby enemies. -unit.reign.description = Fires a barrage of massive piercing bullets at all nearby enemies. -unit.nova.description = Fires laser bolts that damage enemies and repair allied structures. Capable of flight. -unit.pulsar.description = Fires arcs of electricity that damage enemies and repair allied structures. Capable of flight. -unit.quasar.description = Fires piercing laser beams that damage enemies and repair allied structures. Capable of flight. Shielded. -unit.vela.description = Fires a massive continuous laser beam that damages enemies, causes fires and repairs allied structures. Capable of flight. -unit.corvus.description = Fires a massive laser blast that damages enemies and repairs allied structures. Can step over most terrain. -unit.crawler.description = Runs toward enemies and self-destructs, causing a large explosion. -unit.atrax.description = Fires debilitating orbs of slag at ground targets. Can step over most terrain. -unit.spiroct.description = Fires sapping laser beams at enemies, repairing itself in the process. Can step over most terrain. -unit.arkyid.description = Fires large sapping laser beams at enemies, repairing itself in the process. Can step over most terrain. -unit.toxopid.description = Fires large electric cluster-shells and piercing lasers at enemies. Can step over most terrain. -unit.flare.description = Fires standard bullets at nearby ground targets. -unit.horizon.description = Drops clusters of bombs on ground targets. -unit.zenith.description = Fires salvos of missiles at all nearby enemies. -unit.antumbra.description = Fires a barrage of bullets at all nearby enemies. -unit.eclipse.description = Fires two piercing lasers and a barrage of flak at all nearby enemies. -unit.mono.description = Automatically mines copper and lead, depositing it into the core. -unit.poly.description = Automatically rebuilds destroyed structures and assists other units in construction. -unit.mega.description = Automatically repairs damaged structures. Capable of carrying blocks and small ground units. -unit.quad.description = Drops large bombs on ground targets, repairing allied structures and damaging enemies. Capable of carrying medium-sized ground units. -unit.oct.description = Protects nearby allies with its regenerating shield. Capable of carrying most ground units. -unit.risso.description = Fires a barrage of missiles and bullets at all nearby enemies. -unit.minke.description = Fires shells and standard bullets at nearby ground targets. -unit.bryde.description = Fires long-range artillery shells and missiles at enemies. -unit.sei.description = Fires a barrage of missiles and armor-piercing bullets at enemies. -unit.omura.description = Fires a long-range piercing railgun bolt at enemies. Constructs flare units. -unit.alpha.description = Defends the Shard core from enemies. Builds structures. -unit.beta.description = Defends the Foundation core from enemies. Builds structures. -unit.gamma.description = Defends the Nucleus core from enemies. Builds structures. +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 = 近くの敵に2門の貫通レーザーと高射砲の弾幕を発射します。 +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 = ニュークリアスコアを敵から守ります。建造物を建築します。 From 942204bff1f2f3150947ebc5c3361313bc885fc6 Mon Sep 17 00:00:00 2001 From: Vanguard <55051135+XEN0PHIL@users.noreply.github.com> Date: Thu, 3 Jun 2021 21:34:27 +0300 Subject: [PATCH 33/69] [Bundle][RU] Update (#5028) * double newline fix hint.guardian * 13 changed lines mod.enabled mod.disabled status.burning.name status.freezing.name status.wet.name status.melting.name status.sapped.name status.spore-slowed.name status.tarred.name status.overclock.name status.shocked.name status.blasted.name status.unmoving.name * yon't * x'nt * Update bundle_ru.properties * 1 new, 1 changed New: stat.healing Changed: bullet.healpercent Co-authored-by: Antsiferov Andrew --- core/assets/bundles/bundle_ru.properties | 35 ++++++++++++------------ 1 file changed, 18 insertions(+), 17 deletions(-) diff --git a/core/assets/bundles/bundle_ru.properties b/core/assets/bundles/bundle_ru.properties index 94bde81323..7cb21b7eab 100644 --- a/core/assets/bundles/bundle_ru.properties +++ b/core/assets/bundles/bundle_ru.properties @@ -124,8 +124,8 @@ mods.reload = Перезагрузить mods.reloadexit = Игра будет закрыта для перезагрузки модификаций. mod.installed = [[Установлено] mod.display = [gray]Модификация:[orange] {0} -mod.enabled = [lightgray]Включён -mod.disabled = [scarlet]Выключен +mod.enabled = [lightgray]Включено +mod.disabled = [scarlet]Выключено mod.multiplayer.compatible = [gray]Доступна в игре по сети mod.disable = Выкл. mod.content = Содержимое: @@ -620,18 +620,18 @@ sector.extractionOutpost.description = Отдаленный аванпост, п sector.impact0078.description = Здесь лежат остатки межзвездного транспортного судна, первым вошедшего в эту систему.\n\nИзвлеките как можно больше из обломков. Изучите любую уцелевшую технологию. sector.planetaryTerminal.description = Конечная цель.\n\nЭта береговая база содержит сооружение, способное запускать ядра к окрестным планетам. Оно крайне хорошо охраняется.\n\nПроизведите морские единицы. Уничтожьте врага как можно скорее. Изучите пусковую конструкцию. -status.burning.name = Горит -status.freezing.name = Замерзает -status.wet.name = Влажный +status.burning.name = Горение +status.freezing.name = Замерзание +status.wet.name = Влага status.muddy.name = В грязи -status.melting.name = Плавится -status.sapped.name = Истощён -status.spore-slowed.name = Замедлен спорами -status.tarred.name = Покрыт нефтью -status.overclock.name = Ускорен -status.shocked.name = Шокирован -status.blasted.name = Подорван -status.unmoving.name = Неподвижен +status.melting.name = Плавление +status.sapped.name = Истощение +status.spore-slowed.name = Замедление спорами +status.tarred.name = В нефти +status.overclock.name = Разгон +status.shocked.name = Шок +status.blasted.name = Разрыв +status.unmoving.name = Обездвиживание settings.language = Язык settings.data = Игровые данные @@ -737,6 +737,7 @@ stat.speedmultiplier = Множитель скорости stat.reloadmultiplier = Множитель перезарядки stat.buildspeedmultiplier = Множитель скорости строительства stat.reactive = Реактивен +stat.healing = Ремонт ability.forcefield = Силовое поле ability.repairfield = Ремонтирующее поле @@ -779,7 +780,7 @@ 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.healpercent = [stat]{0}[lightgray]% ремонта bullet.multiplier = [stat]{0}[lightgray]x множитель боеприпасов bullet.reload = [stat]{0}[lightgray]x скорость стрельбы @@ -1329,7 +1330,7 @@ hint.payloadDrop = Нажмите [accent]][], чтобы сбросить гр hint.payloadDrop.mobile = [accent]Нажмите и удерживайте[] палец на пустой локации, чтобы сбросить туда груз. hint.waveFire = Турели [accent]Волна[] при подаче воды будут автоматически тушить пожары вокруг. hint.generator = \uf879 [accent]Генераторы внутреннего сгорания[] сжигают уголь и передают энергию рядомстоящим блокам.\n\nДальность передачи энергии может быть увеличена при помощи \uf87f [accent]силовых узлов[]. -hint.guardian = [accent]Стражи[] бронированы. Слабые боеприпасы, такие как [accent]медь[] и [accent]свинец[], [scarlet]не эффективны[].\n\Используйте турели высокого уровня или \uf835 [accent]графитные[] боеприпасы в \uf861двойных турелях/\uf859залпах, чтобы уничтожить Стража. +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.coreIncinerate = После того, как ядро будет заполнено предметом до отказа, любые лишние входящие предметы этого типа будут [accent]сожжены[]. @@ -1353,7 +1354,7 @@ item.plastanium.description = Используется в продвинутой item.phase-fabric.description = Используется в продвинутой электронике и самовосстанавливающихся постройках. item.surge-alloy.description = Используется в продвинутом вооружении и реактивных оборонительных постройках. item.spore-pod.description = Используется для переработки в нефть, взрывчатку и топливо. -item.spore-pod.details = Споры. Похоже, являются синтетической формой жизни. Выделяют газы, токсичные для других биологических форм жизни. Чрезвычайно инвазивны. Легко воспламеняются при определенных условиях. +item.spore-pod.details = Споры. Похоже, являются синтетической формой жизни. Выделяют газы, токсичные для других биологических форм жизни. Чрезвычайно инвазивны. Легко воспламеняются при определённых условиях. item.blast-compound.description = Используется в бомбах и взрывчатых веществах. item.pyratite.description = Используется в зажигательном оружии и твердотопливных генераторах. @@ -1427,7 +1428,7 @@ block.thermal-pump.description = Перекачивает и выводит жи block.conduit.description = Перемещает жидкости вперёд. Используется вместе с насосами и другими трубопроводами. block.pulse-conduit.description = Перемещает жидкости вперёд. Работает быстрее и вмещает в себе больше, чем стандартный трубопровод. block.plated-conduit.description = Перемещает жидкости вперёд. Не принимает ввод по бокам. Не протекает. -block.liquid-router.description = Принимает жидкости из одного направления и равномерно распределяет и до 3 других направлений. Также может хранить определенное количество жидкости. +block.liquid-router.description = Принимает жидкости из одного направления и равномерно распределяет их до 3 других. Также может хранить определённое количество жидкости. block.liquid-tank.description = Хранит большое количество жидкости. Выводит жидкости во все стороны, подобно жидкостному маршрутизатору. block.liquid-junction.description = Действует как мост для двух пересекающихся трубопроводов. block.bridge-conduit.description = Перемещает жидкости над любой местностью или зданиями. From f91cc2eace3ec06e33cf0d79621e4bef1b7a6307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Ng=E1=BB=8Dc=20Lam?= <33188123+NgLamVN@users.noreply.github.com> Date: Fri, 4 Jun 2021 01:34:40 +0700 Subject: [PATCH 34/69] Update Vietnamese Translation. (#5238) * Update translation, fix some typo * About 150 lines to do left. * Typos fix #_1 * Typos fix + add trans * Update to lastest commit. * Base logic translation. * a lot of typo ... * some update from main bundle. * Add more logic hint. * Tracking update from main bundle. * Translate some position. Co-authored-by: EzLam --- core/assets/bundles/bundle_vi.properties | 42 +++++++++++++++++++----- 1 file changed, 34 insertions(+), 8 deletions(-) diff --git a/core/assets/bundles/bundle_vi.properties b/core/assets/bundles/bundle_vi.properties index aae2419fc1..ca6ada0206 100644 --- a/core/assets/bundles/bundle_vi.properties +++ b/core/assets/bundles/bundle_vi.properties @@ -126,6 +126,7 @@ mod.installed = [[Đã cài đặt] mod.display = [gray]Mod:[orange] {0} mod.enabled = [lightgray]Đã Bật mod.disabled = [scarlet]Đã Tắt +mod.multiplayer.compatible = [gray]Tương thích với chế độ nhiều người chơi mod.disable = Tắt mod.content = Nội dung: mod.delete.error = Không thể xóa mod. Tệp có thể đang được sử dụng. @@ -216,7 +217,7 @@ server.hidden = Ẩn trace = Tìm người chơi trace.playername = Tên người chơi: [accent]{0} trace.ip = IP: [accent]{0} -trace.id = Unique ID: [accent]{0} +trace.id = ID: [accent]{0} trace.mobile = Mobile Client: [accent]{0} trace.modclient = Custom Client: [accent]{0} invalidid = Client ID không hợp lệ! Vui lòng gửi báo cáo lỗi. @@ -601,7 +602,6 @@ sector.windsweptIslands.name = Windswept Islands sector.extractionOutpost.name = Extraction Outpost sector.planetaryTerminal.name = Planetary Launch Terminal -#TODO: The Last sector.groundZero.description = Vị trí tối ưu để bắt đầu một lần nữa. Mối đe dọa của kẻ thù thấp. Ít tài nguyên.\nThu thập càng nhiều chì và đồng càng tốt.\nTiến lên. sector.frozenForest.description = Ngay cả ở đây, gần núi hơn, các bào tử đã phát tán. Nhiệt độ lạnh giá không thể chứa chúng mãi mãi.\n\nBắt đầu tham gia vào quyền lực. Chế tạo máy phát điện đốt. Học cách sử dụng Máy sửa chữa. sector.saltFlats.description = Ở vùng ngoại ô của sa mạc Salt Flats. Có thể tìm thấy ít tài nguyên ở khu vực này.\n\nKẻ thù đã dựng lên một khu phức hợp lưu trữ tài nguyên ở đây. Loại bỏ căn cứ của họ. Không để lại gì. @@ -619,6 +619,19 @@ sector.extractionOutpost.description = Một tiền đồn xa, được kẻ th sector.impact0078.description = Đây là tàn tích của tàu vận chuyển giữa các vì sao lần đầu tiên đi vào hệ thống này.\n\nLấy càng nhiều càng tốt từ đống đổ nát. Nghiên cứu bất kỳ công nghệ nguyên vẹn nào. sector.planetaryTerminal.description = Mục tiêu cuối cùng.\n\nCăn cứ ven biển này chứa một cấu trúc có khả năng phóng căn cứ tới các hành tinh địa phương. Nó được bảo vệ cực kỳ cẩn thận.\n\nSản xuất quân lính hải quân. Loại bỏ kẻ thù càng nhanh càng tốt. Nghiên cứu cấu trúc phóng. +status.burning.name = Cháy +status.freezing.name = Đóng băng +status.wet.name = Wet +status.muddy.name = Muddy +status.melting.name = Tan chảy +status.sapped.name = Sapped +status.spore-slowed.name = Spore Slowed +status.tarred.name = Tarred +status.overclock.name = Overclock +status.shocked.name = Shock +status.blasted.name = Nổ +status.unmoving.name = Unmoving + settings.language = Ngôn ngữ settings.data = Dữ liệu trò chơi settings.reset = Khôi phục về mặc định @@ -716,6 +729,12 @@ stat.abilities = Khả năng stat.canboost = Nâng cấp stat.flying = Bay stat.ammouse = Sử dụng đạn +stat.damagemultiplier = Hệ số sát thương +stat.healthmultiplier = Hệ số độ bền +stat.speedmultiplier = Hệ số tốc độ +stat.reloadmultiplier = Reload Multiplier +stat.buildspeedmultiplier = Hệ số tốc độ xây dựng +stat.reactive = Phản ứng. ability.forcefield = Tạo khiên ability.repairfield = Sửa chữa/Xây dựng @@ -751,17 +770,15 @@ units.processorcontrol = [lightgray]Điều khiển bởi bộ xử lý bullet.damage = [stat]{0}[lightgray] sát thương bullet.splashdamage = [stat]{0}[lightgray] sát thương diện rộng ~[stat] {1}[lightgray] ô bullet.incendiary = [stat]cháy -bullet.sapping = [stat]sapping bullet.homing = [stat]truy đuổi -bullet.shock = [stat]sốc bullet.buildingdamage = [stat]{0}%[lightgray] sát thương khối bullet.frag = [stat]phá mảnh +# I am not sure about this... +bullet.lightning = [stat]{0}[lightgray]x tia chớp ~ [stat]{1}[lightgray] sát thương bullet.knockback = [stat]{0}[lightgray] bật lùi bullet.pierce = [stat]{0}[lightgray]x xuyên giáp bullet.infinitepierce = [stat]xuyên thấu bullet.healpercent = [stat]{0}[lightgray]% sửa chửa -bullet.freezing = [stat]đóng băng -bullet.tarred = [stat]tarred bullet.multiplier = [stat]{0}[lightgray]x lượng đạn bullet.reload = [stat]{0}[lightgray]x tốc độ bắn @@ -801,6 +818,7 @@ setting.hints.name = Gợi ý setting.flow.name = Hiện thị tốc độ chuyền tài nguyên setting.backgroundpause.name = Tạm dừng trong nền setting.buildautopause.name = Tự động dừng xây dựng +setting.doubletapmine.name = Nhấn đúp để Đào setting.modcrashdisable.name = Tắt các mod khi gặp sự cố trong khởi động setting.animatedwater.name = Hiệu ứng nước setting.animatedshields.name = Hiệu ứng khiên @@ -921,6 +939,7 @@ keybind.pause_building.name = Tạm dừng/Tiếp tục Xây keybind.minimap.name = Bản đồ mini keybind.planet_map.name = Bản đồ hành tinh keybind.research.name = Nghiên cứu +keybind.block_info.name = Thông tin khối keybind.chat.name = Trò chuyện keybind.player_list.name = Danh sách người chơi keybind.console.name = Bảng điều khiển @@ -1457,7 +1476,7 @@ block.ripple.description = Bắn cụm đạn vào kẻ địch trên mặt đ block.cyclone.description = Bắn đạn nổ vào kẻ địch ở gần. block.spectre.description = Bắn đạn xuyên giáp lớn ở kẻ địch trên không và trên mặt đất. block.meltdown.description = Nạp và bắn một tia laser liên tục vào kẻ địch ở gần. Cần có chất làm mát để hoạt động. -block.foreshadow.description = Bắn viên một viên đạn tỉa lớn ở tầm xa. +block.foreshadow.description = Bắn viên một viên đạn tỉa lớn ở tầm xa. Ưu tiên kẻ địch có độ bền tối đa cao nhất. block.repair-point.description = Liên tục sửa chữa robot ở trong phạm vi hoạt động. block.segment.description = Gây hư hại và phá hủy đạn đến. Ngoại trừ tia laser. block.parallax.description = Bắn một tia kéo máy bay địch và làm hư hỏng nó trong quá trình kéo. @@ -1538,6 +1557,8 @@ lst.unitcontrol = Control the currently bound unit. lst.unitradar = Locate units around the currently bound unit. lst.unitlocate = Locate a specific type of position/building anywhere on the map.\nRequires a bound unit. +logic.nounitbuild = [red]Unit building logic is not allowed here. + lenum.type = Type of building/unit.\ne.g. for any router, this will return [accent]@router[].\nNot a string. lenum.shoot = Bắn vào vị trí xác định. lenum.shootp = Shoot at a unit/building with velocity prediction. @@ -1545,6 +1566,10 @@ lenum.configure = Building configuration, e.g. sorter item. lenum.enabled = Bất cứ khi nào khối hoạt động. laccess.color = Màu đèn chiếu sáng. +laccess.controller = Unit controller. If processor controlled, returns processor.\nIf in a formation, returns leader.\nOtherwise, returns the unit itself. +laccess.dead = Whether a unit/building is dead or no longer valid. +laccess.controlled = Returns:\n[accent]@ctrlProcessor[] if unit controller is processor\n[accent]@ctrlPlayer[] if unit/building controller is player\n[accent]@ctrlFormation[] if unit is in formation\nOtherwise, 0. +laccess.commanded = [red]Deprecated. Will be removed![]\nUse [accent]controlled[] instead. graphicstype.clear = Tô màu cho màn hình. graphicstype.color = Đặt màu cho thao tác vẽ tiếp theo. @@ -1580,7 +1605,7 @@ lenum.sin = Sin, tính bằng độ. lenum.cos = Cos, tính bằng độ. lenum.tan = Tan, tính bằng độ. #not a typo, look up 'range notation' -lenum.rand = Số ngẫu nhiên trong phạm vi [0, giá trị). +lenum.rand = Tạo ra số nguyên ngẫu nhiên trong phạm vi [0, giá trị). lenum.log = Lôgarit tự nhiên (ln). lenum.log10 = Lôgarit cơ số 10. lenum.noise = 2D simplex noise. @@ -1638,6 +1663,7 @@ unitlocate.outx = Output X coordinate. unitlocate.outy = Output Y coordinate. unitlocate.group = Building group to look for. +lenum.idle = Không di chuyển, nhưng vẫn xây dựng/đào.\nTrạng thái mặc định. lenum.stop = Dừng di chuyển/Đào/Xây dựng. lenum.move = Di chuyển đến vị trí xác định. lenum.approach = Approach a position with a radius. From eb7e65668c9fc0eb9fe087992edca34530d2ca2b Mon Sep 17 00:00:00 2001 From: TranquillyUnpleasant <62061444+TranquillyUnpleasant@users.noreply.github.com> Date: Thu, 3 Jun 2021 23:35:31 +0500 Subject: [PATCH 35/69] Rotate slider in the mirror filter. (#5228) * Rotate * ToggleOption --- core/assets/bundles/bundle.properties | 1 + .../mindustry/maps/filters/FilterOption.java | 19 +++++++++++++++++++ .../mindustry/maps/filters/MirrorFilter.java | 8 +++++--- 3 files changed, 25 insertions(+), 3 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 9eae8eb616..87ef5b2f5d 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -484,6 +484,7 @@ filter.option.circle-scale = Circle Scale filter.option.octaves = Octaves filter.option.falloff = Falloff filter.option.angle = Angle +filter.option.rotate = Rotate filter.option.amount = Amount filter.option.block = Block filter.option.floor = Floor diff --git a/core/src/mindustry/maps/filters/FilterOption.java b/core/src/mindustry/maps/filters/FilterOption.java index f47d1c3a60..1a6230795f 100644 --- a/core/src/mindustry/maps/filters/FilterOption.java +++ b/core/src/mindustry/maps/filters/FilterOption.java @@ -111,4 +111,23 @@ public abstract class FilterOption{ table.add("@filter.option." + name); } } + + static class ToggleOption extends FilterOption{ + final String name; + final Boolp getter; + final Boolc setter; + + ToggleOption(String name, Boolp getter, Boolc setter){ + this.name = name; + this.getter = getter; + this.setter = setter; + } + + @Override + public void build(Table table){ + table.row(); + CheckBox check = table.check("@filter.option." + name, setter).growX().padBottom(5).padTop(5).center().get(); + check.changed(changed); + } + } } diff --git a/core/src/mindustry/maps/filters/MirrorFilter.java b/core/src/mindustry/maps/filters/MirrorFilter.java index ed57af5138..cdb324b0ef 100644 --- a/core/src/mindustry/maps/filters/MirrorFilter.java +++ b/core/src/mindustry/maps/filters/MirrorFilter.java @@ -15,11 +15,13 @@ public class MirrorFilter extends GenerateFilter{ private final Vec2 v1 = new Vec2(), v2 = new Vec2(), v3 = new Vec2(); int angle = 45; + boolean rotate = false; @Override public FilterOption[] options(){ return Structs.arr( - new SliderOption("angle", () -> angle, f -> angle = (int)f, 0, 360, 45) + new SliderOption("angle", () -> angle, f -> angle = (int)f, 0, 360, 45), + new ToggleOption("rotate", () -> rotate, f -> rotate = f) ); } @@ -72,8 +74,8 @@ public class MirrorFilter extends GenerateFilter{ } void mirror(Vec2 p, float x0, float y0, float x1, float y1){ - //special case: uneven map mirrored at 45 degree angle - if(in.width != in.height && angle % 90 != 0){ + //special case: uneven map mirrored at 45 degree angle (or someone might just want rotational symmetry) + if((in.width != in.height && angle % 90 != 0) || rotate){ p.x = in.width - p.x - 1; p.y = in.height - p.y - 1; }else{ From 1cbd58820eb8eb9beb40b07c9f3ab44e5843714f Mon Sep 17 00:00:00 2001 From: VozDuh <61590217+Voz-Duh@users.noreply.github.com> Date: Thu, 3 Jun 2021 21:36:55 +0300 Subject: [PATCH 36/69] Fix For Metal Environments (#5322) --- .../blocks/environment/dark-metal-large.png | Bin 521 -> 467 bytes .../sprites/blocks/environment/dark-metal2.png | Bin 267 -> 280 bytes .../sprites/blocks/environment/dark-panel-1.png | Bin 218 -> 228 bytes .../sprites/blocks/environment/dark-panel-2.png | Bin 200 -> 227 bytes .../sprites/blocks/environment/dark-panel-4.png | Bin 201 -> 219 bytes .../sprites/blocks/environment/dark-panel-5.png | Bin 250 -> 258 bytes .../blocks/environment/metal-floor-damaged1.png | Bin 240 -> 231 bytes .../blocks/environment/metal-floor-damaged2.png | Bin 221 -> 228 bytes .../blocks/environment/metal-floor-damaged3.png | Bin 217 -> 227 bytes 9 files changed, 0 insertions(+), 0 deletions(-) diff --git a/core/assets-raw/sprites/blocks/environment/dark-metal-large.png b/core/assets-raw/sprites/blocks/environment/dark-metal-large.png index 42a53db08b512147d34ecdbfacae76f762c04d3c..6152bd059bcc5cca69952daaeaf5efbcb1f14c44 100644 GIT binary patch delta 453 zcmeBVxy(F4qMn7Bfq@~yJ?AY00|R4mkh>GZx^prw85kH?(j9#r85lP9bN@+XWnf_7 z3GfMV&B(5vJ$IG8gXjB(ocI0Nn;94wI14-?iy0XB4ude`@%$Aj3=E6`o-U3d9>=Fn zxjFHO0*}kmn=A!vB7#1mKc8>oC~0(j^GS93{OGlZ86MON%Q5U=+Q{;xn`H_VxiHUi zX)syf=`oGv@fQJ61I{{s|4$Pc9Otd8+UR z=1ol34jnHq+NpMP(^;o?pDQ^&?FVdQ&MBb@ E0I9LN*8l(j delta 507 zcmcc2+{rRQqMn0|fq`LFX5l>s2F44XE{-7;x8B}5n0wfOhczI7THJ2WhO*|kUG5iI zH^sPlOk~m(I=;#EQ~gDi;tRSHmrkD{r0IKnd;jV9-@ojpW?$BIaBX34$l|#C@afke z$%o<#j1Jj5gtk~WbaC)A=(em8=w`^~5bIfMxApv%p0%6}ZX4?T_I>qveZz-gFTay- z9Mc8sZJ`V-OvRr#SU3)>c*e9roaJpc8)Jl%#K-B=*-W$!=r*NanC#%t^kC1zMRrw| z&G{``7+xey<8%1+w}9bVswQj0Q~kT2D^>VJ9X@wwHKl4WWDB^g7fWJzeeB4jD+b?q zR`p)ECoQ9J>d3>F1y?$q>lqgL-7fnBUnYn_+@t1akLxOIzb5p|7yAO=TPfX*y#IQ(_ zN4KNrgsh79qG-=EpC=gSM$UFVdQ&MBb@0C`W>ApigX diff --git a/core/assets-raw/sprites/blocks/environment/dark-metal2.png b/core/assets-raw/sprites/blocks/environment/dark-metal2.png index 42f72384253514ba3e1d4ac1d83b872f27be5925..3cf75bb998bddd754da41918387cd049c88724f8 100644 GIT binary patch delta 265 zcmeBXn!z+dqMn7Bfq|hhB>gx80|R4mkh>GZx^prw85kH?(j9#r85lP9bN@+XWnf_7 z3GfMV&B(5vJ$IG8gXjB(ocI0Nn;94wI14-?iy0XB4ude`@%$Aj3=9lYJzX3_G|s19 zyvTdlfP>}2;#h?h+z~z(I{ucg=5L=7@Lyo>oP&N0y`}Y2e=;OmhAHysoag9y&!?cg zp)tnMV0U8fItAGR=aSfo44pf*g%-@3$b0MIW6?DJ@A-^p8md`8vMCe)ozGYyn;_5(bC)%Uz`R^lI-@ SVqjok@O1TaS?9!*&;$UR>tI6w delta 251 zcmbQi)Xg+OqMn0|fq|j8s_F{^1H&ax7srr_TSu>* z$t{b*m|R6qR+r6t+?-$fNA}hHqJ4L!naZ6H_nM-wz#YhU{PH8m6&Iu%T(8`JlPs~p zUE>hX35OPDfh4X4?F$&+oX>C#V90il5D++Urpcs%U6FOq`|Bm~EsRkeyLPZDzHF*L z8hPY`jKk5xjM)kerJ0_LKII;6hFbTWPn0og-E%rIePU@qYtG@4hSWsI2Cj$inr^mx z3LCt(dCin2vr<5ycL9T($SFy-F9JDzG7nBlGhOMg{A{<2uV={{>x5bc1_lOCS3j3^ HP6M1MG6B0L%OGnV~EE2wG+LC4k&Oq zPnJILSO0dH!iu{Vb2lZ)8P>2oC{O4+-ypW~Km+5917CbC8ttbt&PZ^%wXPxc#b$P? z4=F*>4CV)QYBkTFsh%fydGWM)d#9M?Dzskhyt2kGB`Zul$oN)$JXehPY`(}xA94~I Q7#J8lUHx3vIVCg!0Cl)d5dZ)H delta 202 zcmaFDc#Cm@L_G%^0|P^GRn->;28M;6E{-7;x86?m=4&wEaM?LCZ*OO(`-cy^a(x!I zN_NiIOAF;%FUe(e_Hh|j29H9~173637N~wda)4p0 z%8N=X2X3Zq3wl1=wSD9LZ_Ih~=xPSJ_xa2YPb(WzM7ApgF=janWQwg|xTt#Q6|19J zBuf*QfaLy_3?|%4|7TxodGqx(Q%8jt@_1vP&A`CG;OXk; Jvd$@?2>|(mQb7O! diff --git a/core/assets-raw/sprites/blocks/environment/dark-panel-2.png b/core/assets-raw/sprites/blocks/environment/dark-panel-2.png index 117c0fddf7deea43dac4d757ae6f1aed9130ef21..adbc44fdf53dd3c8753d3617f5a38714cbd683bc 100644 GIT binary patch delta 211 zcmX@X_?U5mL_G^L0|P^2NcwRG1_s9BAa^H*b?0PWGB7Z(q&xaLGB9lH=l+w(%D}+D z8Q>G*YVY8gkzM`1A?M-pTh~E?1s;*b3=DjSL74G){)!X^28Lu$7sn8d^Jgb|^EDW7 zxLg#TGS6Y>f5q97P1kz5cTHxUFn#-jWRCCF>l@cP`0Qqx&(+GbmSw(nOW!je);r7! zH-x^h1PHk>X}LXQxUup^yc1isbnNu%HTvwAgkMd3%KK}D|9LZM+qZm?Uzt=MGB7YO Nc)I$ztaD0e0sv$}OkDr~ delta 184 zcmaFNc!F_)L_G%^0|P^GRn->;28Mo57srr_TW_aZ^EEhdxI9n0RV6IEx3Sm!8^CVsX}zA%r8tY`Q~(l$95w0D~c80)K*C$DRHp@zWVE qtjz2^?#xLk6g{5)<@Wm@j7*~6)y`^f&0=6+VDNPHb6Mw<&;$TX!$=hX diff --git a/core/assets-raw/sprites/blocks/environment/dark-panel-4.png b/core/assets-raw/sprites/blocks/environment/dark-panel-4.png index a69c9c2da5340839e78a6c613b90cf1b8e61cdbc..9c92f09ef391a8782e53ee5ff4f4042b5884cdaa 100644 GIT binary patch delta 203 zcmX@fc$;y8L_G^L0|P^2NcwRG1_s9BAa^H*b?0PWGB7Z(q&xaLGB9lH=l+w(%D}+D z7T^=&nvq>?@8Eej$Z;tH0|RG)M`SSr1K(i~W;~w1B87p0A4RAr3x932gTe~ HDWM4fQlCkY delta 185 zcmcc3c#?5~L_G%^0|P^GRn->;28IcqE{-7;x87cNX`;ZpWoW&oai}g=VR`ugjue*%dH`9Eo9IHI#2~y~1MCx|w4~voeF)3|9p~8y*SX zG=YM<9|aDSYOykwd*1w8ci=a}^CQ80%-3&(uI>ntez!KJM9iq;cA rDzC6@_-q*`{@~BFtE?9LpNsEQ%C7Y6>`rB1U|{fc^>bP0l+XkKL4QnS diff --git a/core/assets-raw/sprites/blocks/environment/dark-panel-5.png b/core/assets-raw/sprites/blocks/environment/dark-panel-5.png index b7d3e69c207f94c4df74162aec9bfd0b9e65c5a0..3a0ac2b39190ae85b9e6c5ac054fe404904d64d6 100644 GIT binary patch delta 242 zcmeyx*u*qJqMn7Bfq|hhB>gx80|R4mkh>GZx^prw85kH?(j9#r85lP9bN@+XWnf_7 z4DbnY&B(5{ckq1QkTda&Rx(Jiz$3Dlfr0NZ2s0kfUy;JVz|iFB;uxZFe(uDBf(H~h zSQawt$sYOF-P7nC_?e5pu*}TCMWSI1V?>-NOCFp$UDu#-c+t{8(Nk-lZ@6zi{Xm(4T>Amm$I8nW t>}<1C5?{(V<@t>zS6JuY{;u+gp;=tm`NNF}O9lo822WQ%mvv4FO#sPpTeScH delta 234 zcmZo-`o%awqMn0|fq|j8s_F{^1H(a27srr_TW_bI=4~+Gao#H#bCZSB?7^X9Jq+e7 zthX%W16BAe6R+}bEtLLpc#GWX%-wr0<@@iNWEOrwZ_cYN0$&+Dwm;-^U}k)KFOxB7 ztu;e+#eU8S#_5U=a?i-QRY-3Z=rAy2j_8%-$mpG3X)~3x;cxQlD|eU}^*;+83I5CQ zo;joF!0DJNE!WI+N?8{rMcnFJSl+0?zG`33qVKth2@jcWy8+Ffe$!`njxgN@xNAi|=8* diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged1.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged1.png index 1cfce7fe86672716074ccea4fad5b96bb8458bb9..c7914a00c36fc447c34a0e190dccaf9e000a4bd3 100644 GIT binary patch delta 215 zcmeys_?&TqL_G^L0|P^2NcwRG1_s9BAa^H*b?0PWGB7Z(q&xaLGB9lH=l+w(%D}+D z7T^=&+S)lYAu+r1Yi2zI0|RG)M`SSr1K(i~W;~w1B87p0A@3e;L~r25pw?oYjn}OS!In zVZQN8t)nmgj`@*ga}KagVZ7J;&v(L{s|j<9obNDaIo#2^wb1s{`PngU4eZe|Vx1qw T_5?97Ffe$!`njxgN@xNAm#a^` delta 224 zcmaFP_;28QjPE{-7;w~k&n6lzf5VL4E}>e{};htz*W$#Uz; z_%hv5b+u|ORXCA&_uJ$3%PJRMy)UzYL6Sp!fm;iMmy5&#rzwniE}9RtB6Jtc`@`rW zP}I=+!AywvLu7+wi?Q#Nqr?wlmkV81E!2DAz=^u3>qiwpfd0)8+-Udo~HK h@H(1jbjoSYzB8U$n+uM3GcYhPc)I$ztaD0e0ssP^U}XRR diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged2.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged2.png index 078e5e725273dd9d94db00746f5df457495aa45b..8333961067410aca2328f22f78b20d4ccdc26b3d 100644 GIT binary patch delta 212 zcmcc1_=ItSL_G^L0|P^2NcwRG1_s9BAa^H*b?0PWGB7Z(q&xaLGB9lH=l+w(%D}+D z7T^=&+S)lYAu+r1Yi2zI0|RG)M`SSr1K(i~W;~w1B87p0A>Gr(F+}71)QJaq8w_}u z@AA(1JDt_*z_GXOe~PSJi+YOPY@6qaZ#cLpL_;WQW38{2-W)FV39Y*rmM*NAFZ9A& zzCl)kb3;Q}f+A~7<8iYEH$L3po3Y?g+uz6fC;E-*=cyVvitWx8vtU@AD{ delta 205 zcmaFDc$aa4L_G%^0|P^GRn->;28Jb`E{-7;x87dg$lGAR!*W1gH0#-d1eRs3T%1ah zi+}uO>pb*T{-CGKnbW%>O?!mbuHjk1AofUXfy0i5oR%8aC>O~G4hxii#BA7gIoe8V zfve5i1g!(VcddzUJ)!xH%R!_uqe8@y`HRwu204zU>`EL4@4mQkFr9hm#Fn76k2^te zf^EquhLz<9`90)MuRf&joawrQr(nD5MBA?Fc9B(aN8g?HXuZLhywkXQf{D*`1_lNO MPgg&ebxsLQ0DAXRi~s-t diff --git a/core/assets-raw/sprites/blocks/environment/metal-floor-damaged3.png b/core/assets-raw/sprites/blocks/environment/metal-floor-damaged3.png index fbc921711d783efc7b88cae669f2f27af78979f8..01b0616d3ec38a327aa46e743b5d4efc1e2c9494 100644 GIT binary patch delta 211 zcmcb~_?U5mL_G^L0|P^2NcwRG1_s9BAa^H*b?0PWGB7Z(q&xaLGB9lH=l+w(%D}+D z7T^=&+S)lYAu+r1Yi2zI0|RG)M`SSr1K(i~W;~w1B87p0A19rWY{2wo zPA08$0~^Z)*gx<+sWDmFRN?Q~H6w^^`Sh*pULO!z<8n)MY5RYX9So{9;*B$YDf=-n PFfe$!`njxgN@xNAk(o|; delta 201 zcmaFNc$0C0L_G%^0|P^GRn->;28IQmE{-7;x6WR-7HV+dV7?#|nteX;p`gv$FtfgO zyC<-4zuI$mbapAoWSMeo&xva^)L9wI7 zSn))Qv4DsJ+r&B+qXzEA7b2S(uW+P1-^qKSdjgY4y~l=d9ciZr*$H14Er>F!wq|*H zESovSDv)i5K!J?>TBho=T#Q| From 0247301272127550fddbc4348ec274e660093dfa Mon Sep 17 00:00:00 2001 From: QmelZ <59574967+QmelZ@users.noreply.github.com> Date: Thu, 3 Jun 2021 21:41:08 +0300 Subject: [PATCH 37/69] Custom Mass Driver Bullets (#5300) * custom mass driver bullets * ohno * should be fixed now --- core/src/mindustry/content/Blocks.java | 1 + core/src/mindustry/content/Bullets.java | 4 +--- core/src/mindustry/world/blocks/distribution/MassDriver.java | 4 +++- 3 files changed, 5 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 5a329a668a..f4827a7c99 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1028,6 +1028,7 @@ public class Blocks implements ContentList{ reloadTime = 200f; range = 440f; consumes.power(1.75f); + bullet = new MassDriverBolt(); }}; //special transport blocks diff --git a/core/src/mindustry/content/Bullets.java b/core/src/mindustry/content/Bullets.java index e318d80f98..674cb514e2 100644 --- a/core/src/mindustry/content/Bullets.java +++ b/core/src/mindustry/content/Bullets.java @@ -36,7 +36,7 @@ public class Bullets implements ContentList{ waterShot, cryoShot, slagShot, oilShot, heavyWaterShot, heavyCryoShot, heavySlagShot, heavyOilShot, //environment, misc. - damageLightning, damageLightningGround, fireball, basicFlame, pyraFlame, driverBolt; + damageLightning, damageLightningGround, fireball, basicFlame, pyraFlame; @Override public void load(){ @@ -510,7 +510,5 @@ public class Bullets implements ContentList{ statusDuration = 60f * 4f; damage = 0.2f; }}; - - driverBolt = new MassDriverBolt(); } } diff --git a/core/src/mindustry/world/blocks/distribution/MassDriver.java b/core/src/mindustry/world/blocks/distribution/MassDriver.java index b8659c3d89..94b993aa7f 100644 --- a/core/src/mindustry/world/blocks/distribution/MassDriver.java +++ b/core/src/mindustry/world/blocks/distribution/MassDriver.java @@ -12,6 +12,7 @@ import arc.util.pooling.*; import mindustry.annotations.Annotations.*; import mindustry.content.*; import mindustry.entities.*; +import mindustry.entities.bullet.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; @@ -28,6 +29,7 @@ public class MassDriver extends Block{ public int minDistribute = 10; public float knockback = 4f; public float reloadTime = 100f; + public MassDriverBolt bullet; public float bulletSpeed = 5.5f; public float bulletLifetime = 200f; public Effect shootEffect = Fx.shootBig2; @@ -287,7 +289,7 @@ public class MassDriver extends Block{ float angle = tile.angleTo(target); - Bullets.driverBolt.create(this, team, + bullet.create(this, team, x + Angles.trnsx(angle, translation), y + Angles.trnsy(angle, translation), angle, -1f, bulletSpeed, bulletLifetime, data); From 1c4184db4b7e9e5a3626c2f14186a38102be3cd0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 15:59:22 -0400 Subject: [PATCH 38/69] Less respawn rubberbanding --- core/src/mindustry/content/Blocks.java | 2 +- core/src/mindustry/content/UnitTypes.java | 17 ++++++------ .../mindustry/entities/comp/PlayerComp.java | 23 ++++++++++++++++ core/src/mindustry/input/DesktopInput.java | 5 +++- core/src/mindustry/input/InputHandler.java | 27 +++++++++++++++---- core/src/mindustry/input/MobileInput.java | 2 ++ .../mindustry/ui/fragments/HudFragment.java | 1 + 7 files changed, 61 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 5a329a668a..6fbef58289 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2005,7 +2005,7 @@ public class Blocks implements ContentList{ requirements(Category.units, with(Items.silicon, 70, Items.thorium, 60, Items.plastanium, 60)); size = 2; length = 6f; - repairSpeed = 5f; + repairSpeed = 4f; repairRadius = 140f; powerUse = 5f; beamWidth = 1.1f; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index d54f7cf46f..d87e78b781 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1936,7 +1936,6 @@ public class UnitTypes implements ContentList{ ejectEffect = Fx.none; bullet = new FlakBulletType(2.5f, 25){{ sprite = "missile-large"; - collides = false; //for targeting collidesGround = collidesAir = true; explodeRange = 40f; @@ -1950,9 +1949,9 @@ public class UnitTypes implements ContentList{ lightColor = Pal.heal; splashDamageRadius = 30f; - splashDamage = 28f; + splashDamage = 25f; - lifetime = 90f; + lifetime = 80f; backColor = Pal.heal; frontColor = Color.white; @@ -1982,11 +1981,11 @@ public class UnitTypes implements ContentList{ fragBullets = 7; fragVelocityMin = 0.3f; - fragBullet = new MissileBulletType(3.9f, 12){{ + fragBullet = new MissileBulletType(3.9f, 11){{ homingPower = 0.2f; weaveMag = 4; weaveScale = 4; - lifetime = 70f; + lifetime = 60f; shootEffect = Fx.shootHeal; smokeEffect = Fx.hitLaser; splashDamage = 13f; @@ -2112,8 +2111,8 @@ public class UnitTypes implements ContentList{ bullet = new ContinuousLaserBulletType(){{ maxRange = 90f; - damage = 25f; - length = 90f; + damage = 26f; + length = 95f; hitEffect = Fx.hitMeltHeal; drawSize = 200f; lifetime = 155f; @@ -2160,7 +2159,7 @@ public class UnitTypes implements ContentList{ timeIncrease = 3f; timeDuration = 60f * 20f; powerDamageScl = 3f; - damage = 40; + damage = 50; hitColor = lightColor = Pal.heal; lightRadius = 70f; clipSize = 250f; @@ -2176,7 +2175,7 @@ public class UnitTypes implements ContentList{ trailWidth = 6f; trailColor = Pal.heal; trailInterval = 3f; - splashDamage = 40f; + splashDamage = 60f; splashDamageRadius = rad; hitShake = 4f; trailRotation = true; diff --git a/core/src/mindustry/entities/comp/PlayerComp.java b/core/src/mindustry/entities/comp/PlayerComp.java index 0323906021..63c3f5c6a2 100644 --- a/core/src/mindustry/entities/comp/PlayerComp.java +++ b/core/src/mindustry/entities/comp/PlayerComp.java @@ -45,6 +45,7 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra transient String lastText = ""; transient float textFadeTime; transient private Unit lastReadUnit = Nulls.unit; + transient @Nullable Unit justSwitchFrom, justSwitchTo; public boolean isBuilder(){ return unit.canBuild(); @@ -100,6 +101,16 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra @Override public void afterSync(){ + //fix rubberbanding: + //when the player recs a unit that they JUST transitioned away from, use the new unit instead + //reason: we know the server is lying here, essentially skip the unit snapshot because we know the client's information is more recent + if(isLocal() && unit == justSwitchFrom && justSwitchFrom != null && justSwitchTo != null){ + unit = justSwitchTo; + }else{ + justSwitchFrom = null; + justSwitchTo = null; + } + //simulate a unit change after sync Unit set = unit; unit = lastReadUnit; @@ -149,6 +160,13 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra } + public void checkSpawn(){ + CoreBuild core = bestCore(); + if(core != null){ + core.requestSpawn(self()); + } + } + @Override public void remove(){ //clear unit upon removal @@ -171,6 +189,11 @@ abstract class PlayerComp implements UnitController, Entityc, Syncc, Timerc, Dra } public void unit(Unit unit){ + //refuse to switch when the unit was just transitioned from + if(isLocal() && unit == justSwitchFrom && justSwitchFrom != null && justSwitchTo != null){ + return; + } + if(unit == null) throw new IllegalArgumentException("Unit cannot be null. Use clearUnit() instead."); if(this.unit == unit) return; diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 8b5346fce0..6506db2d34 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -229,8 +229,10 @@ public class DesktopInput extends InputHandler{ if(on != null){ Call.unitControl(player, on); shouldShoot = false; + recentRespawnTimer = 1f; }else if(build != null){ Call.buildingControlSelect(player, build); + recentRespawnTimer = 1f; } } } @@ -239,8 +241,9 @@ public class DesktopInput extends InputHandler{ updateMovement(player.unit()); if(Core.input.keyTap(Binding.respawn)){ - Call.unitClear(player); controlledType = null; + recentRespawnTimer = 1f; + Call.unitClear(player); } } diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index ebabd2523f..991f48124b 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -58,6 +58,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ public Group uiGroup; public boolean isBuilding = true, buildWasAutoPaused = false, wasShooting = false; public @Nullable UnitType controlledType; + public float recentRespawnTimer; public @Nullable Schematic lastSchematic; public GestureDetector detector; @@ -375,15 +376,27 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ throw new ValidateException(player, "Player cannot control a unit."); } + //TODO problem: + //1. server send snapshot + //2. client requests to control unit, becomes unit locally + //3. snapshot arrives, client now thinks they're in the old unit (!!!) + //4. server gets packet that player is in the right unit + //5. server sends snapshot + //6. client gets snapshot, realizes that they are actually in the unit they selected + //7. client gets switched to new unit -> rubberbanding (!!!) + //clear player unit when they possess a core if(unit == null){ //just clear the unit (is this used?) player.clearUnit(); //make sure it's AI controlled, so players can't overwrite each other }else if(unit.isAI() && unit.team == player.team() && !unit.dead){ - if(!net.client()){ - player.unit(unit); + if(net.client()){ + player.justSwitchFrom = player.unit(); + player.justSwitchTo = unit; } + player.unit(unit); + Time.run(Fx.unitSpirit.lifetime, () -> Fx.unitControl.at(unit.x, unit.y, 0f, unit)); if(!player.dead()){ Fx.unitSpirit.at(player.x, player.y, 0f, unit); @@ -393,12 +406,14 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ Events.fire(new UnitControlEvent(player, unit)); } - @Remote(targets = Loc.both, called = Loc.both, forward = true) + @Remote(targets = Loc.both, called = Loc.server, forward = true) public static void unitClear(Player player){ if(player == null) return; + //problem: this gets called on both ends. it shouldn't be. Fx.spawn.at(player); player.clearUnit(); + player.checkSpawn(); player.deathTimer = Player.deathDelay + 1f; //for instant respawn } @@ -419,7 +434,6 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ player.unit().commandNearby(new CircleFormation()); Fx.commandSend.at(player, player.unit().type.commandRadius); } - } public Eachable allRequests(){ @@ -451,7 +465,9 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ wasShooting = player.shooting; - if(!player.dead()){ + //only reset the controlled type and control a unit after the timer runs out + //essentially, this means the client waits for 1 second after controlling something before trying to control something else automatically + if(!player.dead() && (recentRespawnTimer -= Time.delta / 60f) <= 0f){ controlledType = player.unit().type; } @@ -461,6 +477,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ if(unit != null){ //only trying controlling once a second to prevent packet spam if(!net.client() || controlInterval.get(0, 70f)){ + recentRespawnTimer = 1f; Call.unitControl(player, unit); } } diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 792d242851..55851e5c1c 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -614,8 +614,10 @@ public class MobileInput extends InputHandler implements GestureListener{ //control a unit/block detected on first tap of double-tap if(unitTapped != null){ Call.unitControl(player, unitTapped); + recentRespawnTimer = 1f; }else if(buildingTapped != null){ Call.buildingControlSelect(player, buildingTapped); + recentRespawnTimer = 1f; }else if(!tryBeginMine(cursor)){ tileTapped(linked.build); } diff --git a/core/src/mindustry/ui/fragments/HudFragment.java b/core/src/mindustry/ui/fragments/HudFragment.java index 704cf0ec61..2f4061c10a 100644 --- a/core/src/mindustry/ui/fragments/HudFragment.java +++ b/core/src/mindustry/ui/fragments/HudFragment.java @@ -721,6 +721,7 @@ public class HudFragment extends Fragment{ t.clicked(() -> { if(!player.dead() && mobile){ Call.unitClear(player); + control.input.recentRespawnTimer = 1f; control.input.controlledType = null; } }); From 9cd482d3894328381b9cb024499db1e11e1e182d Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 16:01:51 -0400 Subject: [PATCH 39/69] Minor bugfix --- .../sprites/blocks/environment/dark-panel-5.png | Bin 258 -> 214 bytes core/src/mindustry/input/InputHandler.java | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/assets-raw/sprites/blocks/environment/dark-panel-5.png b/core/assets-raw/sprites/blocks/environment/dark-panel-5.png index 3a0ac2b39190ae85b9e6c5ac054fe404904d64d6..2e990695ed11439ede85a0537070720f3496cb3a 100644 GIT binary patch delta 178 zcmZo-y2dy`LX3l%fq}tgN!Kw31_s9BAa^H*b?0PWPPCJ#ul96t46*3lJK2-(fC3Nm z0#ZoZS?*6r!`)`x)?k(G_cfqvm>RHc)ty{mb7Sv7Tcp*^c k^S(`~^7xb8(e@`}m;?hEkN;|7U|?YIboFyt=akR{02IYX8~^|S delta 222 zcmcb{*u*qJLXCx)fq|hhB>gx80|R4mkh>GZx^prw85kH?(j9#r85lP9bN@+Xov0^K z&spFRS diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index 991f48124b..f1762ad3fe 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -390,7 +390,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ player.clearUnit(); //make sure it's AI controlled, so players can't overwrite each other }else if(unit.isAI() && unit.team == player.team() && !unit.dead){ - if(net.client()){ + if(net.client() && player.isLocal()){ player.justSwitchFrom = player.unit(); player.justSwitchTo = unit; } @@ -467,7 +467,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ //only reset the controlled type and control a unit after the timer runs out //essentially, this means the client waits for 1 second after controlling something before trying to control something else automatically - if(!player.dead() && (recentRespawnTimer -= Time.delta / 60f) <= 0f){ + if(!player.dead() && (recentRespawnTimer -= Time.delta / 60f) <= 0f && player.justSwitchFrom != player.unit()){ controlledType = player.unit().type; } From 3f27cebfb692a639ac5e075a0452ac18e7a1858d Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 16:09:32 -0400 Subject: [PATCH 40/69] Fire light --- core/src/mindustry/content/Fx.java | 1 + core/src/mindustry/entities/comp/FireComp.java | 2 ++ 2 files changed, 3 insertions(+) diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index f0bef945ce..519a142088 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -855,6 +855,7 @@ public class Fx{ if(Fire.regions[0] == null) return; alpha(e.fout()); rect(Fire.regions[((int)(e.rotation + e.fin() * Fire.frames)) % Fire.frames], e.x, e.y); + Drawf.light(e.x, e.y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * e.fout()); }), fire = new Effect(50f, e -> { diff --git a/core/src/mindustry/entities/comp/FireComp.java b/core/src/mindustry/entities/comp/FireComp.java index 7439af97c9..ea520c0075 100644 --- a/core/src/mindustry/entities/comp/FireComp.java +++ b/core/src/mindustry/entities/comp/FireComp.java @@ -118,6 +118,8 @@ abstract class FireComp implements Timedc, Posc, Syncc, Drawc{ Draw.z(Layer.effect); Draw.rect(regions[(int)animation], x, y); Draw.reset(); + + Drawf.light(x, y, 50f + Mathf.absin(5f, 5f), Pal.lightFlame, 0.6f * Mathf.clamp(warmup / warmupDuration)); } @Replace From 4932d11d7b491d52aa3a7a5a470a6bb59155d1f6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 18:24:54 -0400 Subject: [PATCH 41/69] Misc cleanup --- core/src/mindustry/ai/types/LogicAI.java | 2 +- core/src/mindustry/input/InputHandler.java | 8 ++------ core/src/mindustry/world/blocks/power/PowerGraph.java | 2 +- gradle.properties | 2 +- 4 files changed, 5 insertions(+), 9 deletions(-) diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index 8c1128c7e0..b87a22e217 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -15,7 +15,7 @@ import static mindustry.Vars.*; public class LogicAI extends AIController{ /** Minimum delay between item transfers. */ - public static final float transferDelay = 60f * 2f; + public static final float transferDelay = 60f * 1.5f; /** Time after which the unit resets its controlled and reverts to a normal unit. */ public static final float logicControlTimeout = 10f * 60f; diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index f1762ad3fe..cb4ebad970 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -448,10 +448,6 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ return !selectRequests.isEmpty(); } - public OverlayFragment getFrag(){ - return frag; - } - public void update(){ player.typing = ui.chatfrag.shown(); @@ -466,8 +462,8 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ wasShooting = player.shooting; //only reset the controlled type and control a unit after the timer runs out - //essentially, this means the client waits for 1 second after controlling something before trying to control something else automatically - if(!player.dead() && (recentRespawnTimer -= Time.delta / 60f) <= 0f && player.justSwitchFrom != player.unit()){ + //essentially, this means the client waits for ~1 second after controlling something before trying to control something else automatically + if(!player.dead() && (recentRespawnTimer -= Time.delta / 70f) <= 0f && player.justSwitchFrom != player.unit()){ controlledType = player.unit().type; } diff --git a/core/src/mindustry/world/blocks/power/PowerGraph.java b/core/src/mindustry/world/blocks/power/PowerGraph.java index bc3b6e2fd8..b510ef2285 100644 --- a/core/src/mindustry/world/blocks/power/PowerGraph.java +++ b/core/src/mindustry/world/blocks/power/PowerGraph.java @@ -49,7 +49,7 @@ public class PowerGraph{ } public float getPowerBalance(){ - return powerBalance.mean(); + return powerBalance.rawMean(); } public float getLastPowerNeeded(){ diff --git a/gradle.properties b/gradle.properties index 13dd3dad98..15c25c41b4 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=ef9b29a8978e8f5e2fcba770bfebd210f4bc8117 +archash=ebc24e24e7b60c10a85dff648bd9f592838d40ec From a264a1cd65e9706aede1e52c16b9ebf56e2e2412 Mon Sep 17 00:00:00 2001 From: Parkurist <60188877+parkuristt@users.noreply.github.com> Date: Fri, 4 Jun 2021 01:25:41 +0300 Subject: [PATCH 42/69] Fixed 1 untranslated line (#5140) --- core/assets/bundles/bundle_tr.properties | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/assets/bundles/bundle_tr.properties b/core/assets/bundles/bundle_tr.properties index bfe05a9828..0969237bfa 100644 --- a/core/assets/bundles/bundle_tr.properties +++ b/core/assets/bundles/bundle_tr.properties @@ -140,7 +140,7 @@ mod.author = [lightgray]Yayıncı:[] {0} mod.missing = Bu kayıt yakın zamanda güncellediğiniz ya da artık yüklü olmayan modlar içermekte. Kayıt bozulmaları yaşanabilir. Kaydı yüklemek istediğinizden emin misiniz?\n[lightgray]Modlar:\n{0} mod.preview.missing = Bu modu atölyede yayınlamadan önce bir resim önizlemesi eklemelisiniz.\nMod dosyasına [accent]preview.png[] adlı bir resim yerleştirin ve tekrar deneyin. mod.folder.missing = Atölyede sadece klasör halindeki modlar yayınlanabilir.Bir modu klasöre çevirmek için, sadece mod dosyalarını bir klasöre çıkarın ve eski sıkıştırılmış dosyayı silin, sonra da oyunu tekrar başlatın ya da modlarınızı tekrar yükleyin. -mod.scripts.disable = Your device does not support mods with scripts. You must disable these mods to play the game. +mod.scripts.disable = Cihazınız kod içeren modları desteklemiyor. \nOyunu oynamak için bu modları devre dışı bırakmalısınız. about.button = Hakkında name = İsim: From 86ae13ed95679451d8d428cbe5cfa7ae65bb9e3a Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 19:04:13 -0400 Subject: [PATCH 43/69] Improved Cyerce trails --- core/src/mindustry/content/UnitTypes.java | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index d87e78b781..6619aa7f11 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1975,8 +1975,8 @@ public class UnitTypes implements ContentList{ weaveMag = 1f; trailColor = Pal.heal; - trailParam = 5f; - trailInterval = 3f; + trailWidth = 4.5f; + trailLength = 29; fragBullets = 7; fragVelocityMin = 0.3f; @@ -1997,12 +1997,14 @@ public class UnitTypes implements ContentList{ lightRadius = 40f; lightOpacity = 0.7f; - trailInterval = 2f; - trailParam = 3f; + trailColor = Pal.heal; + trailWidth = 2.5f; + trailLength = 20; + trailChance = -1f; + healPercent = 2.8f; collidesTeam = true; backColor = Pal.heal; - trailColor = Pal.heal; despawnEffect = Fx.none; hitEffect = new ExplosionEffect(){{ From 00ca247d0f40534b373209f578ef2f617c5da88a Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 19:12:33 -0400 Subject: [PATCH 44/69] Inverse trig logic functions --- core/assets/bundles/bundle.properties | 6 ++++++ core/src/mindustry/logic/LogicOp.java | 15 +++++++++++---- 2 files changed, 17 insertions(+), 4 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 87ef5b2f5d..7533d4aa0a 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1636,9 +1636,15 @@ lenum.min = Minimum of two numbers. lenum.max = Maximum of two numbers. lenum.angle = Angle of vector in degrees. lenum.len = Length of vector. + lenum.sin = Sine, in degrees. lenum.cos = Cosine, in degrees. lenum.tan = Tangent, in degrees. + +lenum.asin = Arc sine, in degrees. +lenum.acos = Arc cosine, in degrees. +lenum.atan = Arc tangent, in degrees. + #not a typo, look up 'range notation' lenum.rand = Random decimal in range [0, value). lenum.log = Natural logarithm (ln). diff --git a/core/src/mindustry/logic/LogicOp.java b/core/src/mindustry/logic/LogicOp.java index f7021cc03e..2de33558b9 100644 --- a/core/src/mindustry/logic/LogicOp.java +++ b/core/src/mindustry/logic/LogicOp.java @@ -36,13 +36,20 @@ public enum LogicOp{ abs("abs", a -> Math.abs(a)), log("log", Math::log), log10("log10", Math::log10), - sin("sin", d -> Math.sin(d * 0.017453292519943295D)), - cos("cos", d -> Math.cos(d * 0.017453292519943295D)), - tan("tan", d -> Math.tan(d * 0.017453292519943295D)), floor("floor", Math::floor), ceil("ceil", Math::ceil), sqrt("sqrt", Math::sqrt), - rand("rand", d -> Mathf.rand.nextDouble() * d); + rand("rand", d -> Mathf.rand.nextDouble() * d), + + sin("sin", d -> Math.sin(d * Mathf.doubleDegRad)), + cos("cos", d -> Math.cos(d * Mathf.doubleDegRad)), + tan("tan", d -> Math.tan(d * Mathf.doubleDegRad)), + + asin("asin", d -> Math.asin(d) * Mathf.doubleRadDeg), + acos("acos", d -> Math.acos(d) * Mathf.doubleRadDeg), + atan("atan", d -> Math.atan(d) * Mathf.doubleRadDeg), + + ; public static final LogicOp[] all = values(); From 9f7568552f595de12641bebe145d98f928063007 Mon Sep 17 00:00:00 2001 From: Sharlotte <60801210+Sharlottes@users.noreply.github.com> Date: Fri, 4 Jun 2021 08:16:08 +0900 Subject: [PATCH 45/69] typo (#5021) * typpppppo * Update bundle_ko.properties --- core/assets/bundles/bundle_ko.properties | 10 +++++----- 1 file changed, 5 insertions(+), 5 deletions(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index fbd7d3cdce..99d67537e7 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -9,7 +9,7 @@ link.changelog.description = 업데이트 내용 목록 link.dev-builds.description = 불안정한 개발 버전 link.trello.description = 출시 예정 기능 계획을 게시한 공식 Trello 보드 link.itch.io.description = PC 다운로드가 있는 itch.io 페이지 -link.google-play.description = oogle Play 스토어 목록 +link.google-play.description = Google Play 스토어 목록 link.f-droid.description = F-Droid 카탈로그 목록 link.wiki.description = 공식 Mindustry 위키 link.suggestions.description = 새 기능 제안하기 @@ -627,10 +627,10 @@ status.muddy.name = 질척해짐 status.melting.name = 융해 status.sapped.name = 흡혈됨 status.spore-slowed.name = 포자 느려짐 -status.tarred.name = Tarred +status.tarred.name = 타르 status.overclock.name = 과부하 -status.shocked.name = 충격 -status.blasted.name = 폭파됨 +status.shocked.name = 감전 +status.blasted.name = 피폭됨 status.unmoving.name = 멈춤 settings.language = 언어 @@ -668,7 +668,7 @@ stat.input = 입력 stat.output = 출력 stat.booster = 가속 stat.tiles = 필요한 타일 -stat.affinities = 친화력 +stat.affinities = 밀접성 stat.opposites = 상성 stat.powercapacity = 전력 용량 stat.powershot = 전력/발 From c29d75f5d1c0e35a8bf849be99e4562b6fa00161 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 19:49:42 -0400 Subject: [PATCH 46/69] Fixed RailBulletType not dealing damage --- core/src/mindustry/entities/bullet/RailBulletType.java | 2 +- gradle.properties | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/entities/bullet/RailBulletType.java b/core/src/mindustry/entities/bullet/RailBulletType.java index d141c69998..5f02386115 100644 --- a/core/src/mindustry/entities/bullet/RailBulletType.java +++ b/core/src/mindustry/entities/bullet/RailBulletType.java @@ -70,8 +70,8 @@ public class RailBulletType extends BulletType{ @Override public void hitEntity(Bullet b, Hitboxc entity, float health){ - handle(b, entity, health); super.hitEntity(b, entity, health); + handle(b, entity, health); } @Override diff --git a/gradle.properties b/gradle.properties index 15c25c41b4..edd4da555a 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=ebc24e24e7b60c10a85dff648bd9f592838d40ec +archash=423d5bb934a66c0ba0f68906b45d7e514342d5c5 From 8fc61215a51e4c0fc3914cf85c8625ffb3f6f5da Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 21:37:58 -0400 Subject: [PATCH 47/69] Show ducts --- core/src/mindustry/content/Blocks.java | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6aed05d63d..7cf34f1f80 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1034,17 +1034,17 @@ public class Blocks implements ContentList{ //special transport blocks duct = new Duct("duct"){{ - requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 5, Items.copper, 5)); + requirements(Category.distribution, with(Items.graphite, 4, Items.metaglass, 1)); speed = 4f; }}; ductRouter = new DuctRouter("duct-router"){{ - requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 10, Items.copper, 5)); + requirements(Category.distribution, with(Items.graphite, 8, Items.metaglass, 2)); speed = 4f; }}; ductBridge = new DuctBridge("duct-bridge"){{ - requirements(Category.distribution, BuildVisibility.debugOnly, with(Items.graphite, 20, Items.copper, 15)); + requirements(Category.distribution, with(Items.graphite, 16, Items.metaglass, 4)); speed = 4f; }}; From fcf1bdd7010695babc6ce5255a78a9291eef4931 Mon Sep 17 00:00:00 2001 From: Anuken Date: Thu, 3 Jun 2021 21:49:58 -0400 Subject: [PATCH 48/69] Shock mine team region --- .../blocks/defense/shock-mine-team-top.png | Bin 0 -> 152 bytes core/src/mindustry/mod/Mods.java | 3 ++- .../mindustry/world/blocks/defense/ShockMine.java | 14 ++++++++++---- 3 files changed, 12 insertions(+), 5 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/defense/shock-mine-team-top.png diff --git a/core/assets-raw/sprites/blocks/defense/shock-mine-team-top.png b/core/assets-raw/sprites/blocks/defense/shock-mine-team-top.png new file mode 100644 index 0000000000000000000000000000000000000000..58597159bf4ec14176cd2b1c0f55111a3ac7f995 GIT binary patch literal 152 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>UtC0o1 f.extension().equals("json") || f.extension().equals("hjson"))){ runs.add(new LoadRun(type, file, mod)); diff --git a/core/src/mindustry/world/blocks/defense/ShockMine.java b/core/src/mindustry/world/blocks/defense/ShockMine.java index 00c805ac48..6cdcac7c3d 100644 --- a/core/src/mindustry/world/blocks/defense/ShockMine.java +++ b/core/src/mindustry/world/blocks/defense/ShockMine.java @@ -3,6 +3,7 @@ package mindustry.world.blocks.defense; import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; +import mindustry.annotations.Annotations.*; import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -17,6 +18,8 @@ public class ShockMine extends Block{ public int length = 10; public int tendrils = 6; public Color lightningColor = Pal.lancerLaser; + public float teamAlpha = 0.3f; + public @Load("@-team-top") TextureRegion teamRegion; public ShockMine(String name){ super(name); @@ -24,7 +27,6 @@ public class ShockMine extends Block{ destructible = true; solid = false; targetable = false; - rebuildable = false; } public class ShockMineBuild extends Building{ @@ -37,12 +39,16 @@ public class ShockMine extends Block{ @Override public void draw(){ super.draw(); - Draw.color(team.color); - Draw.alpha(0.22f); - Fill.rect(x, y, 2f, 2f); + Draw.color(team.color, teamAlpha); + Draw.rect(teamRegion, x, y); Draw.color(); } + @Override + public void drawCracks(){ + + } + @Override public void unitOn(Unit unit){ if(enabled && unit.team != team && timer(timerDamage, cooldown)){ From 677bad5c601cfcde0a4767b455615493bdb9a8bf Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 08:30:16 -0400 Subject: [PATCH 49/69] Fixed #5348 --- .../blocks/defense/shock-mine-team-top.png | Bin 152 -> 158 bytes core/src/mindustry/entities/comp/FireComp.java | 4 ++-- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/core/assets-raw/sprites/blocks/defense/shock-mine-team-top.png b/core/assets-raw/sprites/blocks/defense/shock-mine-team-top.png index 58597159bf4ec14176cd2b1c0f55111a3ac7f995..e215e1a1ea09af8af4dde7d14184ec502a12ba7f 100644 GIT binary patch delta 116 zcmbQiIFE6HVQz${i(^Pc>)R`*`4|LvTmrxT|9|G#F{c^VlqXeRyArU3h2ckJrjn`7 zri$J5VS13Ki(^Pc>)R`iTnq{vE`e|Vm2WF`Y!OyHSpT{tEpR3yL)T6#2|+`h zqUmLx&c#1GJHH&ziqV~DwTC<0Yl}~#w8n?)s&}SVeBudLz0%LY5U`H9g Date: Fri, 4 Jun 2021 05:31:33 -0700 Subject: [PATCH 50/69] I Like Stats (#5347) Co-authored-by: Leonwang4234 --- core/src/mindustry/type/Weapon.java | 14 ++++++++++++++ .../mindustry/type/weapons/RepairBeamWeapon.java | 8 ++++++++ core/src/mindustry/world/meta/StatValues.java | 10 ++-------- 3 files changed, 24 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/type/Weapon.java b/core/src/mindustry/type/Weapon.java index 1389bd238a..ca002353bc 100644 --- a/core/src/mindustry/type/Weapon.java +++ b/core/src/mindustry/type/Weapon.java @@ -7,6 +7,8 @@ import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; +import arc.scene.ui.layout.*; +import arc.struct.*; import arc.util.*; import mindustry.audio.*; import mindustry.content.*; @@ -15,6 +17,7 @@ import mindustry.entities.bullet.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.graphics.*; +import mindustry.world.meta.*; import static mindustry.Vars.*; @@ -119,6 +122,17 @@ public class Weapon implements Cloneable{ this(""); } + public void addStats(UnitType u, Table t){ + if(inaccuracy > 0){ + t.row(); + t.add("[lightgray]" + Stat.inaccuracy.localized() + ": [white]" + (int)inaccuracy + " " + StatUnit.degrees.localized()); + } + t.row(); + t.add("[lightgray]" + Stat.reload.localized() + ": " + (mirror ? "2x " : "") + "[white]" + Strings.autoFixed(60f / reload * shots, 2)); + + StatValues.ammo(ObjectMap.of(u, bullet)).display(t); + } + public float dps(){ return (bullet.estimateDPS() / reload) * shots * 60f; } diff --git a/core/src/mindustry/type/weapons/RepairBeamWeapon.java b/core/src/mindustry/type/weapons/RepairBeamWeapon.java index c2938207f0..44f76f680f 100644 --- a/core/src/mindustry/type/weapons/RepairBeamWeapon.java +++ b/core/src/mindustry/type/weapons/RepairBeamWeapon.java @@ -5,12 +5,14 @@ import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; import arc.math.geom.*; +import arc.scene.ui.layout.*; import arc.util.*; import mindustry.entities.*; import mindustry.entities.units.*; import mindustry.gen.*; import mindustry.type.*; import mindustry.world.blocks.units.*; +import mindustry.world.meta.*; /** * Note that this weapon requires a bullet with a positive maxRange. @@ -47,6 +49,12 @@ public class RepairBeamWeapon extends Weapon{ recoil = 0f; } + @Override + public void addStats(UnitType u, Table w){ + w.row(); + w.add("[lightgray]" + Stat.repairSpeed.localized() + ": " + (mirror ? "2x " : "") + "[white]" + (int)(repairSpeed * 60) + " " + StatUnit.perSecond.localized()); + } + @Override public float dps(){ return 0f; diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index 5499cc1ca1..319dd27eb3 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -198,15 +198,10 @@ public class StatValues{ table.image(region).size(60).scaling(Scaling.bounded).right().top(); - table.table(Tex.underline, w -> { + table.table(Tex.underline, w -> { w.left().defaults().padRight(3).left(); - if(weapon.inaccuracy > 0){ - sep(w, "[lightgray]" + Stat.inaccuracy.localized() + ": [white]" + (int)weapon.inaccuracy + " " + StatUnit.degrees.localized()); - } - sep(w, "[lightgray]" + Stat.reload.localized() + ": " + (weapon.mirror ? "2x " : "") + "[white]" + Strings.autoFixed(60f / weapon.reload * weapon.shots, 2)); - - ammo(ObjectMap.of(unit, weapon.bullet)).display(w); + weapon.addStats(unit, w); }).padTop(-9).left(); table.row(); } @@ -298,7 +293,6 @@ public class StatValues{ } //for AmmoListValue - private static void sep(Table table, String text){ table.row(); table.add(text); From de9371f0bb695b66378264d87b82572b846f7547 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 08:36:27 -0400 Subject: [PATCH 51/69] Possible dexing error fix --- android/proguard-rules.pro | 1 + 1 file changed, 1 insertion(+) diff --git a/android/proguard-rules.pro b/android/proguard-rules.pro index f25e5e79c5..373c4b9124 100644 --- a/android/proguard-rules.pro +++ b/android/proguard-rules.pro @@ -6,3 +6,4 @@ -keep class arc.** { *; } -keep class net.jpountz.** { *; } -keep class rhino.** { *; } +-keep class com.android.dex.** { *; } \ No newline at end of file From 1bbb52877f5e54f6b1f1450003131024ce4b54f6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 08:53:39 -0400 Subject: [PATCH 52/69] Let bullets have speed = 0 --- .../main/resources/revisions/BulletComp/1.json | 1 + .../mindustry/entities/bullet/BulletType.java | 4 ++-- .../bullet/ContinuousLaserBulletType.java | 3 ++- .../entities/bullet/LaserBulletType.java | 3 ++- .../entities/bullet/LightningBulletType.java | 4 ++-- .../entities/bullet/RailBulletType.java | 4 ++-- .../src/mindustry/entities/comp/BulletComp.java | 17 ++++++++++++----- 7 files changed, 23 insertions(+), 13 deletions(-) create mode 100644 annotations/src/main/resources/revisions/BulletComp/1.json diff --git a/annotations/src/main/resources/revisions/BulletComp/1.json b/annotations/src/main/resources/revisions/BulletComp/1.json new file mode 100644 index 0000000000..59ace7faf8 --- /dev/null +++ b/annotations/src/main/resources/revisions/BulletComp/1.json @@ -0,0 +1 @@ +{version:1,fields:[{name:collided,type:arc.struct.IntSeq},{name:damage,type:float},{name:data,type:java.lang.Object},{name:fdata,type:float},{name:lifetime,type:float},{name:owner,type:mindustry.gen.Entityc},{name:rotation,type:float},{name:team,type:mindustry.game.Team},{name:time,type:float},{name:type,type:mindustry.entities.bullet.BulletType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 40a09a37f3..9509424f12 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -445,7 +445,7 @@ public class BulletType extends Content implements Cloneable{ bullet.owner = owner; bullet.team = team; bullet.time = 0f; - bullet.vel.trns(angle, speed * velocityScl); + bullet.initVel(angle, speed * velocityScl); if(backMove){ bullet.set(x - bullet.vel.x * Time.delta, y - bullet.vel.y * Time.delta); }else{ @@ -462,7 +462,7 @@ public class BulletType extends Content implements Cloneable{ } bullet.add(); - if(keepVelocity && owner instanceof Velc v) bullet.vel.add(v.vel().x, v.vel().y); + if(keepVelocity && owner instanceof Velc v) bullet.vel.add(v.vel()); return bullet; } diff --git a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java index f1c57dcee8..27d5043ba5 100644 --- a/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java +++ b/core/src/mindustry/entities/bullet/ContinuousLaserBulletType.java @@ -23,7 +23,8 @@ public class ContinuousLaserBulletType extends BulletType{ public boolean largeHit = true; public ContinuousLaserBulletType(float damage){ - super(0.001f, damage); + this.damage = damage; + this.speed = 0f; hitEffect = Fx.hitBeam; despawnEffect = Fx.none; diff --git a/core/src/mindustry/entities/bullet/LaserBulletType.java b/core/src/mindustry/entities/bullet/LaserBulletType.java index 0961a91e8c..0ddb733712 100644 --- a/core/src/mindustry/entities/bullet/LaserBulletType.java +++ b/core/src/mindustry/entities/bullet/LaserBulletType.java @@ -21,7 +21,8 @@ public class LaserBulletType extends BulletType{ public boolean largeHit = false; public LaserBulletType(float damage){ - super(0.01f, damage); + this.damage = damage; + this.speed = 0f; hitEffect = Fx.hitLaserBlast; hitColor = colors[2]; diff --git a/core/src/mindustry/entities/bullet/LightningBulletType.java b/core/src/mindustry/entities/bullet/LightningBulletType.java index 578f055bae..0f97bbf132 100644 --- a/core/src/mindustry/entities/bullet/LightningBulletType.java +++ b/core/src/mindustry/entities/bullet/LightningBulletType.java @@ -12,8 +12,8 @@ public class LightningBulletType extends BulletType{ public int lightningLength = 25, lightningLengthRand = 0; public LightningBulletType(){ - super(0.0001f, 1f); - + damage = 1f; + speed = 0f; lifetime = 1; despawnEffect = Fx.none; hitEffect = Fx.hitLancer; diff --git a/core/src/mindustry/entities/bullet/RailBulletType.java b/core/src/mindustry/entities/bullet/RailBulletType.java index 5f02386115..f10b221c8f 100644 --- a/core/src/mindustry/entities/bullet/RailBulletType.java +++ b/core/src/mindustry/entities/bullet/RailBulletType.java @@ -16,6 +16,7 @@ public class RailBulletType extends BulletType{ public float updateEffectSeg = 20f; public RailBulletType(){ + speed = 0f; pierceBuilding = true; pierce = true; reflectable = false; @@ -23,7 +24,6 @@ public class RailBulletType extends BulletType{ despawnEffect = Fx.none; collides = false; lifetime = 1f; - speed = 0.01f; } @Override @@ -57,7 +57,7 @@ public class RailBulletType extends BulletType{ Damage.collideLine(b, b.team, b.type.hitEffect, b.x, b.y, b.rotation(), length, false, false); float resultLen = b.fdata; - Vec2 nor = Tmp.v1.set(b.vel).nor(); + Vec2 nor = Tmp.v1.trns(b.rotation(), 1f).nor(); for(float i = 0; i <= resultLen; i += updateEffectSeg){ updateEffect.at(b.x + nor.x * i, b.y + nor.y * i, b.rotation()); } diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index f9fe116008..c967d4dff4 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -2,7 +2,6 @@ package mindustry.entities.comp; import arc.func.*; import arc.graphics.g2d.*; -import arc.math.*; import arc.math.geom.*; import arc.struct.*; import arc.util.*; @@ -22,11 +21,16 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw @Import Team team; @Import Entityc owner; @Import float x, y, damage; + @Import Vec2 vel; IntSeq collided = new IntSeq(6); Object data; BulletType type; float fdata; + + @ReadOnly + private float rotation; + transient boolean absorbed, hit; transient @Nullable Trail trail; @@ -149,17 +153,20 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw type.drawLight(self()); } + public void initVel(float angle, float amount){ + vel.trns(angle, amount); + rotation = angle; + } + /** Sets the bullet's rotation in degrees. */ @Override public void rotation(float angle){ - vel().setAngle(angle); + vel.setAngle(rotation = angle); } /** @return the bullet's rotation. */ @Override public float rotation(){ - float angle = Mathf.atan2(vel().x, vel().y) * Mathf.radiansToDegrees; - if(angle < 0) angle += 360; - return angle; + return vel.isZero(0.001f) ? rotation : vel.angle(); } } From 527856e1b0c703257d45f95995cdfc8e9c56e04f Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 09:48:31 -0400 Subject: [PATCH 53/69] Mod dialog layout fixes --- core/src/mindustry/ui/SearchBar.java | 7 ++----- core/src/mindustry/ui/dialogs/ModsDialog.java | 5 ++--- 2 files changed, 4 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/ui/SearchBar.java b/core/src/mindustry/ui/SearchBar.java index 57d1977a9d..8929f45266 100644 --- a/core/src/mindustry/ui/SearchBar.java +++ b/core/src/mindustry/ui/SearchBar.java @@ -40,7 +40,7 @@ public class SearchBar{ parent.pane(table -> { pane[0] = table; rebuild.get(""); - }); + }).get().setScrollingDisabled(true, false); return pane[0]; } @@ -54,9 +54,6 @@ public class SearchBar{ /** Match a list item with the search query, case insensitive */ public static boolean matches(String query, String name){ - if(name == null || name.isEmpty()){ - return false; - } - return name.toLowerCase().contains(query); + return name != null && !name.isEmpty() && name.toLowerCase().contains(query); } } diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index de974ce8d8..593c714674 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -147,12 +147,11 @@ public class ModsDialog extends BaseDialog{ } void setup(){ - boolean squish = Core.graphics.isPortrait(); float h = 110f; - float w = squish ? 410f : 524f; + float w = Math.min(Core.graphics.getWidth() / 1.1f, 520f); //squish ? 410f : 524f; cont.clear(); - cont.defaults().width(squish ? 480 : 560f).pad(4); + cont.defaults().width(Math.min(Core.graphics.getWidth() / 1.2f, 520f)).pad(4); cont.add("@mod.reloadrequired").visible(mods::requiresReload).center().get().setAlignment(Align.center); cont.row(); From 4283f9f8d7e3ce0f4cd9da6ef29f1d039aa24ca2 Mon Sep 17 00:00:00 2001 From: Humanoid-X <60562028+Humanoid-X@users.noreply.github.com> Date: Fri, 4 Jun 2021 22:56:22 +0800 Subject: [PATCH 54/69] Update TechTree.java (#5357) --- core/src/mindustry/content/TechTree.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/TechTree.java b/core/src/mindustry/content/TechTree.java index dffa4c0355..dcb1a53b82 100644 --- a/core/src/mindustry/content/TechTree.java +++ b/core/src/mindustry/content/TechTree.java @@ -423,7 +423,7 @@ public class TechTree implements ContentList{ node(retusa, () -> { node(oxynoe, () -> { - node(cyclone, () -> { + node(cyerce, () -> { node(aegires, () -> { node(navanax, () -> { From 89fdda0ef6d92490eec6220c3c07bc8e5544f4d7 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 10:57:15 -0400 Subject: [PATCH 55/69] Various minor bugfixes --- core/src/mindustry/content/Blocks.java | 6 +++--- core/src/mindustry/ui/dialogs/ModsDialog.java | 4 ++-- .../world/blocks/defense/MendProjector.java | 4 +++- .../blocks/defense/OverdriveProjector.java | 4 +++- .../blocks/payloads/PayloadMassDriver.java | 17 +++++++++++++++++ .../world/blocks/power/ThermalGenerator.java | 9 ++++++++- 6 files changed, 36 insertions(+), 8 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 7cf34f1f80..4f011a8fc6 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1034,17 +1034,17 @@ public class Blocks implements ContentList{ //special transport blocks duct = new Duct("duct"){{ - requirements(Category.distribution, with(Items.graphite, 4, Items.metaglass, 1)); + requirements(Category.distribution, with(Items.graphite, 5, Items.metaglass, 2)); speed = 4f; }}; ductRouter = new DuctRouter("duct-router"){{ - requirements(Category.distribution, with(Items.graphite, 8, Items.metaglass, 2)); + requirements(Category.distribution, with(Items.graphite, 10, Items.metaglass, 4)); speed = 4f; }}; ductBridge = new DuctBridge("duct-bridge"){{ - requirements(Category.distribution, with(Items.graphite, 16, Items.metaglass, 4)); + requirements(Category.distribution, with(Items.graphite, 20, Items.metaglass, 8)); speed = 4f; }}; diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index 593c714674..0784bfe95d 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -127,7 +127,7 @@ public class ModsDialog extends BaseDialog{ try{ return d.parse(text); }catch(Exception e){ - throw new RuntimeException(e); + return new Date(); } }; @@ -148,7 +148,7 @@ public class ModsDialog extends BaseDialog{ void setup(){ float h = 110f; - float w = Math.min(Core.graphics.getWidth() / 1.1f, 520f); //squish ? 410f : 524f; + float w = Math.min(Core.graphics.getWidth() / 1.1f, 520f); cont.clear(); cont.defaults().width(Math.min(Core.graphics.getWidth() / 1.2f, 520f)).pad(4); diff --git a/core/src/mindustry/world/blocks/defense/MendProjector.java b/core/src/mindustry/world/blocks/defense/MendProjector.java index 6fbf281918..036863d530 100644 --- a/core/src/mindustry/world/blocks/defense/MendProjector.java +++ b/core/src/mindustry/world/blocks/defense/MendProjector.java @@ -34,6 +34,8 @@ public class MendProjector extends Block{ group = BlockGroup.projectors; hasPower = true; hasItems = true; + emitLight = true; + lightRadius = 50f; } @Override @@ -129,7 +131,7 @@ public class MendProjector extends Block{ @Override public void drawLight(){ - Drawf.light(team, x, y, 50f * smoothEfficiency, baseColor, 0.7f * smoothEfficiency); + Drawf.light(team, x, y, lightRadius * smoothEfficiency, baseColor, 0.7f * smoothEfficiency); } @Override diff --git a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java index d11ef77db5..8611801979 100644 --- a/core/src/mindustry/world/blocks/defense/OverdriveProjector.java +++ b/core/src/mindustry/world/blocks/defense/OverdriveProjector.java @@ -39,6 +39,8 @@ public class OverdriveProjector extends Block{ hasPower = true; hasItems = true; canOverdrive = false; + emitLight = true; + lightRadius = 50f; } @Override @@ -89,7 +91,7 @@ public class OverdriveProjector extends Block{ @Override public void drawLight(){ - Drawf.light(team, x, y, 50f * smoothEfficiency, baseColor, 0.7f * smoothEfficiency); + Drawf.light(team, x, y, lightRadius * smoothEfficiency, baseColor, 0.7f * smoothEfficiency); } @Override diff --git a/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java b/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java index 50aacfe31f..7199d603f3 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java @@ -443,12 +443,22 @@ public class PayloadMassDriver extends PayloadBlock{ return Point2.unpack(link).sub(tile.x, tile.y); } + @Override + public byte version(){ + return 1; + } + @Override public void write(Writes write){ super.write(write); write.i(link); write.f(turretRotation); write.b((byte)state.ordinal()); + + write.f(reload); + write.f(charge); + write.bool(loaded); + write.bool(charging); } @Override @@ -457,6 +467,13 @@ public class PayloadMassDriver extends PayloadBlock{ link = read.i(); turretRotation = read.f(); state = PayloadDriverState.all[read.b()]; + + if(revision >= 1){ + reload = read.f(); + charge = read.f(); + loaded = read.bool(); + charging = read.bool(); + } } } diff --git a/core/src/mindustry/world/blocks/power/ThermalGenerator.java b/core/src/mindustry/world/blocks/power/ThermalGenerator.java index c57284c667..1c6d7837eb 100644 --- a/core/src/mindustry/world/blocks/power/ThermalGenerator.java +++ b/core/src/mindustry/world/blocks/power/ThermalGenerator.java @@ -18,6 +18,13 @@ public class ThermalGenerator extends PowerGenerator{ super(name); } + @Override + public void init(){ + super.init(); + //proper light clipping + clipSize = Math.max(clipSize, 45f * size * 2f * 2f); + } + @Override public void setStats(){ super.setStats(); @@ -52,7 +59,7 @@ public class ThermalGenerator extends PowerGenerator{ @Override public void drawLight(){ - Drawf.light(team, x, y, (40f + Mathf.absin(10f, 5f)) * productionEfficiency * size, Color.scarlet, 0.4f); + Drawf.light(team, x, y, (40f + Mathf.absin(10f, 5f)) * Math.min(productionEfficiency, 2f) * size, Color.scarlet, 0.4f); } @Override From 8ec62e9dba6ef13a27bc04050c2838e4763a1a3c Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 11:08:53 -0400 Subject: [PATCH 56/69] Duct bridge polish --- .../world/blocks/distribution/DuctBridge.java | 33 ++++++++++++++++++- 1 file changed, 32 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/distribution/DuctBridge.java b/core/src/mindustry/world/blocks/distribution/DuctBridge.java index 10d3c287e6..f71d46514a 100644 --- a/core/src/mindustry/world/blocks/distribution/DuctBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DuctBridge.java @@ -37,6 +37,7 @@ public class DuctBridge extends Block{ group = BlockGroup.transportation; noUpdateDisabled = true; envEnabled = Env.space | Env.terrestrial | Env.underwater; + drawArrow = false; } @Override @@ -55,6 +56,37 @@ public class DuctBridge extends Block{ Placement.calculateNodes(points, this, rotation, (point, other) -> Math.max(Math.abs(point.x - other.x), Math.abs(point.y - other.y)) <= range); } + @Override + public void drawPlace(int x, int y, int rotation, boolean valid){ + super.drawPlace(x, y, rotation, valid); + + int length = range; + Building found = null; + + //find the link + for(int i = 1; i <= range; i++){ + Tile other = world.tile(x + Geometry.d4x(rotation) * i, y + Geometry.d4y(rotation) * i); + + if(other != null && other.build instanceof DuctBridgeBuild build && build.team == player.team()){ + length = i; + found = other.build; + break; + } + } + + Drawf.dashLine(Pal.placing, + x * tilesize + Geometry.d4[rotation].x * (tilesize / 2f + 2), + y * tilesize + Geometry.d4[rotation].y * (tilesize / 2f + 2), + x * tilesize + Geometry.d4[rotation].x * (length) * tilesize, + y * tilesize + Geometry.d4[rotation].y * (length) * tilesize + ); + + if(found != null){ + Drawf.square(found.x, found.y, found.block.size * tilesize/2f + 2.5f, 0f); + } + + } + public boolean positionsValid(int x1, int y1, int x2, int y2){ if(x1 == x2){ return Math.abs(y1 - y2) <= range; @@ -88,7 +120,6 @@ public class DuctBridge extends Block{ Draw.rect(bridgeBotRegion, cx, cy, len, tilesize, angle); Draw.reset(); Draw.alpha(Renderer.bridgeOpacity); - //Draw.rect(bridgeTopRegion, cx, cy, len, tilesize, angle); for(float i = 6f; i <= len + size * tilesize - 5f; i += 5f){ Draw.rect(arrowRegion, x + Geometry.d4x(rotation) * i, y + Geometry.d4y(rotation) * i, angle); From 944b9ae2cf51dcf372789a17af978eccc8fff2c6 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 11:35:01 -0400 Subject: [PATCH 57/69] No payload source power --- core/src/mindustry/content/UnitTypes.java | 4 ++-- core/src/mindustry/entities/bullet/SapBulletType.java | 2 +- core/src/mindustry/entities/bullet/ShrapnelBulletType.java | 2 +- core/src/mindustry/world/blocks/payloads/PayloadSource.java | 2 +- core/src/mindustry/world/blocks/sandbox/PowerSource.java | 1 - 5 files changed, 5 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 6619aa7f11..b44eec609b 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1375,7 +1375,7 @@ public class UnitTypes implements ContentList{ shrinkX = shrinkY = 0.7f; - speed = 0.001f; + speed = 0f; collides = false; healPercent = 15f; @@ -1810,7 +1810,7 @@ public class UnitTypes implements ContentList{ shrinkX = shrinkY = 0f; - speed = 0.001f; + speed = 0f; splashDamage = 50f; splashDamageRadius = 40f; diff --git a/core/src/mindustry/entities/bullet/SapBulletType.java b/core/src/mindustry/entities/bullet/SapBulletType.java index ee3cd6699c..8482388071 100644 --- a/core/src/mindustry/entities/bullet/SapBulletType.java +++ b/core/src/mindustry/entities/bullet/SapBulletType.java @@ -17,7 +17,7 @@ public class SapBulletType extends BulletType{ public float width = 0.4f; public SapBulletType(){ - speed = 0.0001f; + speed = 0f; despawnEffect = Fx.none; pierce = true; collides = false; diff --git a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java index ccc5532e7d..40d9b86bf5 100644 --- a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java +++ b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java @@ -19,7 +19,7 @@ public class ShrapnelBulletType extends BulletType{ public float serrationLenScl = 10f, serrationWidth = 4f, serrationSpacing = 8f, serrationSpaceOffset = 80f, serrationFadeOffset = 0.5f; public ShrapnelBulletType(){ - speed = 0.01f; + speed = 0f; hitEffect = Fx.hitLancer; shootEffect = smokeEffect = Fx.lightningShoot; lifetime = 10f; diff --git a/core/src/mindustry/world/blocks/payloads/PayloadSource.java b/core/src/mindustry/world/blocks/payloads/PayloadSource.java index 68bf32e744..52ba318699 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadSource.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadSource.java @@ -24,7 +24,7 @@ public class PayloadSource extends PayloadBlock{ size = 3; update = true; outputsPayload = true; - hasPower = true; + hasPower = false; rotate = true; configurable = true; //make sure to display large units. diff --git a/core/src/mindustry/world/blocks/sandbox/PowerSource.java b/core/src/mindustry/world/blocks/sandbox/PowerSource.java index 8953a595b6..3a8685bb5e 100644 --- a/core/src/mindustry/world/blocks/sandbox/PowerSource.java +++ b/core/src/mindustry/world/blocks/sandbox/PowerSource.java @@ -4,7 +4,6 @@ import mindustry.world.blocks.power.*; import mindustry.world.meta.*; public class PowerSource extends PowerNode{ - public float powerProduction = 10000f; public PowerSource(String name){ From a1cae3bc294c7acca497ae27354d97ebf7e020e0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 11:52:27 -0400 Subject: [PATCH 58/69] No timers for driver payloads --- .../blocks/payloads/PayloadMassDriver.java | 53 +++++++++++-------- 1 file changed, 31 insertions(+), 22 deletions(-) diff --git a/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java b/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java index 7199d603f3..c24755d89f 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadMassDriver.java @@ -122,7 +122,8 @@ public class PayloadMassDriver extends PayloadBlock{ public float turretRotation = 90; public float reload = 0f, charge = 0f; public float targetSize = grabWidth*2f, curSize = targetSize; - public float payLength = 0f; + public float payLength = 0f, effectDelayTimer = -1f; + public PayloadDriverBuild lastOther; public boolean loaded; public boolean charging; public PayloadDriverState state = idle; @@ -151,6 +152,16 @@ public class PayloadMassDriver extends PayloadBlock{ targetSize = payload.size(); } + boolean pos = effectDelayTimer > 0; + effectDelayTimer -= Time.delta; + if(effectDelayTimer <= 0 && pos && lastOther != null){ + var other = lastOther; + float cx = Angles.trnsx(other.turretRotation, length), cy = Angles.trnsy(other.turretRotation, length); + receiveEffect.at(x - cx/2f, y - cy/2f, turretRotation); + reload = 1f; + Effect.shake(shake, shake, this); + } + charging = false; if(hasLink){ @@ -192,7 +203,7 @@ public class PayloadMassDriver extends PayloadBlock{ payVector.setZero(); payRotation = Angles.moveToward(payRotation, turretRotation + 180f, payloadRotateSpeed * delta()); } - }else{ + }else if(effectDelayTimer <= 0){ moveOutPayload(); } } @@ -270,26 +281,22 @@ public class PayloadMassDriver extends PayloadBlock{ transferEffect.at(x + cx, y + cy, turretRotation, new PayloadMassDriverData(x + cx, y + cy, other.x - cx, other.y - cy, payload)); Payload pay = payload; other.recPayload = payload; + other.effectDelayTimer = transferEffect.lifetime; - Time.run(transferEffect.lifetime, () -> { - receiveEffect.at(other.x - cx/2f, other.y - cy/2f, other.turretRotation); - Effect.shake(shake, shake, this); + //transfer payload + other.handlePayload(this, pay); + other.lastOther = this; + other.payVector.set(-cx, -cy); + other.payRotation = turretRotation; + other.payLength = length; + other.loaded = true; + other.updatePayload(); + other.recPayload = null; - //transfer payload - other.reload = 1f; - other.handlePayload(this, pay); - other.payVector.set(-cx, -cy); - other.payRotation = turretRotation; - other.payLength = length; - other.loaded = true; - other.updatePayload(); - other.recPayload = null; - - if(other.waitingShooters.size != 0 && other.waitingShooters.first() == this){ - other.waitingShooters.removeFirst(); - } - other.state = idle; - }); + if(other.waitingShooters.size != 0 && other.waitingShooters.first() == this){ + other.waitingShooters.removeFirst(); + } + other.state = idle; //reset state after shooting immediately payload = null; @@ -341,8 +348,10 @@ public class PayloadMassDriver extends PayloadBlock{ if(payload != null){ updatePayload(); - Draw.z(loaded ? Layer.blockOver + 0.2f : Layer.blockOver); - payload.draw(); + if(effectDelayTimer <= 0){ + Draw.z(loaded ? Layer.blockOver + 0.2f : Layer.blockOver); + payload.draw(); + } } Draw.z(Layer.blockOver + 0.1f); From dd9ec950be45ab34bec6cb74777be2e06b4493cf Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 13:14:21 -0400 Subject: [PATCH 59/69] Faster payload blocks & voids --- core/src/mindustry/world/blocks/payloads/PayloadBlock.java | 2 +- core/src/mindustry/world/blocks/payloads/PayloadVoid.java | 1 + 2 files changed, 2 insertions(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java index 20db57c296..b0b1d1c5a8 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadBlock.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadBlock.java @@ -13,7 +13,7 @@ import mindustry.world.*; import static mindustry.Vars.*; public class PayloadBlock extends Block{ - public float payloadSpeed = 0.5f, payloadRotateSpeed = 5f; + public float payloadSpeed = 0.7f, payloadRotateSpeed = 5f; public @Load(value = "@-top", fallback = "factory-top-@size") TextureRegion topRegion; public @Load(value = "@-out", fallback = "factory-out-@size") TextureRegion outRegion; diff --git a/core/src/mindustry/world/blocks/payloads/PayloadVoid.java b/core/src/mindustry/world/blocks/payloads/PayloadVoid.java index 2c8cd68bf2..e1cb184f48 100644 --- a/core/src/mindustry/world/blocks/payloads/PayloadVoid.java +++ b/core/src/mindustry/world/blocks/payloads/PayloadVoid.java @@ -19,6 +19,7 @@ public class PayloadVoid extends PayloadBlock{ update = true; rotate = false; size = 3; + payloadSpeed = 1.2f; //make sure to display large units. clipSize = 120; } From f9c48d0a02319f5437f5c4abadb51f156bef5fb0 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 17:32:53 -0400 Subject: [PATCH 60/69] WIP packr update --- build.gradle | 3 +- core/src/mindustry/content/UnitTypes.java | 10 +- desktop/build.gradle | 11 +- desktop/packr_minimize.json | 116 ---------------------- 4 files changed, 15 insertions(+), 125 deletions(-) delete mode 100644 desktop/packr_minimize.json diff --git a/build.gradle b/build.gradle index 9c75d7a3c9..a0e3c900b1 100644 --- a/build.gradle +++ b/build.gradle @@ -13,11 +13,12 @@ buildscript{ google() maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" } maven{ url 'https://jitpack.io' } + maven{ url "http://artifactory.nimblygames.com/artifactory/ng-public/" } //packr } dependencies{ classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.11' - classpath "com.github.anuken:packr:-SNAPSHOT" + classpath "com.badlogicgames.packr:packr-all:4.0.0" classpath "com.github.Anuken.Arc:packer:$arcHash" classpath "com.github.Anuken.Arc:arc-core:$arcHash" } diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index b44eec609b..934546ec78 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1759,7 +1759,7 @@ public class UnitTypes implements ContentList{ armor = 3f; - buildSpeed = 2f; + buildSpeed = 1.5f; weapons.add(new RepairBeamWeapon("repair-beam-weapon-center"){{ x = 0f; @@ -1833,7 +1833,7 @@ public class UnitTypes implements ContentList{ trailY = -4f; trailScl = 1.9f; - buildSpeed = 2.5f; + buildSpeed = 2f; weapons.add(new Weapon("plasma-mount-weapon"){{ @@ -1906,7 +1906,7 @@ public class UnitTypes implements ContentList{ trailY = -9f; trailScl = 2f; - buildSpeed = 3f; + buildSpeed = 2f; weapons.add(new RepairBeamWeapon("repair-beam-weapon-center"){{ x = 11f; @@ -2044,7 +2044,7 @@ public class UnitTypes implements ContentList{ trailY = -17f; trailScl = 3.2f; - buildSpeed = 3.5f; + buildSpeed = 3f; abilities.add(new EnergyFieldAbility(35f, 65f, 180f){{ repair = 35f; @@ -2085,7 +2085,7 @@ public class UnitTypes implements ContentList{ trailY = -32f; trailScl = 3.5f; - buildSpeed = 3.8f; + buildSpeed = 3.5f; for(float mountY : new float[]{-117/4f, 50/4f}){ for(float sign : Mathf.signs){ diff --git a/desktop/build.gradle b/desktop/build.gradle index 948b5413f9..872b8a5891 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -72,7 +72,12 @@ task steamtest(dependsOn: dist){ } } -//TODO replace with jpackage templates +//required templates: +//- Windows64 +//required JDKs: +//- Windows32 +//- Linux64 +//- Mac PackrConfig.Platform.values().each{ platform -> task "packr${platform.toString()}"{ dependsOn dist @@ -102,6 +107,7 @@ PackrConfig.Platform.values().each{ platform -> }else{ def config = new PackrConfig() config.with{ + //TODO consider useZgcIfSupportedOs = true config.executable = appName config.platform = platform verbose = true @@ -112,8 +118,7 @@ PackrConfig.Platform.values().each{ platform -> classpath = ["$rootDir/desktop/build/packr/desktop.jar".toString()] removePlatformLibs = ["$rootDir/desktop/build/packr/desktop.jar".toString()] - vmArgs = [] - minimizeJre = "$rootDir/desktop/packr_minimize.json".toString() + vmArgs = ["XX:+ShowCodeDetailsInExceptionMessages"] jdk = JDK_DIR + "jdk-${platform.toString().toLowerCase()}.zip" if(platform == PackrConfig.Platform.MacOS){ diff --git a/desktop/packr_minimize.json b/desktop/packr_minimize.json deleted file mode 100644 index d18eb478a8..0000000000 --- a/desktop/packr_minimize.json +++ /dev/null @@ -1,116 +0,0 @@ -{ - "reduce": [ - { - "archive": "jre/lib/rt.jar", - "paths": [ - "javax/transaction", - "javax/tools", - "javax/swing", - "javax/sql", - "javax/smartcardio", - "javax/rmi", - "javax/print", - "javax/naming", - "javax/management", - "javax/lang", - "javax/jws", - "javax/swing", - "javax/imageio", - "javax/annotation", - "javax/activity", - "javax/activation", - "javax/accessibility", - "com/sun/corba", - "com/sun/jmx", - "com/sun/org", - "com/sun/imageio", - "com/sun/jndi", - "com/sun/xml", - "com/sun/script", - "sun/awt", - "sun/java2d", - "sun/font", - "sun/rmi", - "sun/swing", - "com/sun/media", - "sun/print", - "sun/awt", - "sun/instrument", - "sun/security/tools", - "sun/security/smartcardio", - "sun/audio", - "javax/xml", - "javax/sound", - "javax/script", - "java/beans", - "java/applet", - "java/rmi", - "com/sun/naming", - "java/awt", - "com/sun/org/apache/xpath", - "com/sun/rowset", - "com/sun/script", - "sun/applet", - "sun/corba", - "sun/management" - ] - }, - { - "archive": "jre/lib/charsets.jar", - "paths": [ - ] - }, - { - "archive": "jre/lib/jsse.jar", - "paths": [ - ] - }, - { - "archive": "jre/lib/resources.jar", - "paths": [ - ] - } - ], - "remove": [ - { - "platform": "*", - "paths": [ - "jre/lib/rhino.jar" - ] - }, - { - "platform": "linux", - "paths": [ - "jre/lib/amd64/libawt.so", - "jre/lib/amd64/libawt_xawt.so", - "jre/lib/amd64/libjawt.so", - "jre/lib/amd64/libhprof.so", - "jre/lib/amd64/libdt_socket.so", - "jre/lib/amd64/libsplashscreen.so", - "jre/lib/amd64/libunpack.so", - "jre/lib/amd64/libnpt.so", - "jre/lib/amd64/libmlib_image.so", - "jre/lib/amd64/libinstrument.so", - "jre/lib/amd64/libjava_crw_demo.so", - "jre/lib/amd64/libfreetype.so", - "jre/lib/amd64/libmanagement.so", - "jre/lib/amd64/libsctp.so", - "jre/lib/amd64/libjpeg.so", - "jre/lib/amd64/libfreetype.so.6", - "jre/lib/amd64/libjsoundalsa.so", - "jre/lib/amd64/libjsound.so", - "jre/lib/amd64/libattach.so", - "jre/lib/amd64/libawt_headless.so", - "jre/lib/amd64/libfontmanager.so" - ] - }, - { - "platform": "windows", - "paths": [ - "jre/bin/*.exe", - "jre/bin/client", - "jre/bin/awt.dll" - ] - } - ] -} From 0a7d5b20c79add34d0f1260eed2e0cede287fcd9 Mon Sep 17 00:00:00 2001 From: Tegas Aziz <49786146+WilloIzCitron@users.noreply.github.com> Date: Sat, 5 Jun 2021 05:18:40 +0700 Subject: [PATCH 61/69] 7.0 Indonesian Bundle (#5349) * 7.0 Indonesian Bundles * Update bundle_in_ID.properties * small additions --- core/assets/bundles/bundle_in_ID.properties | 14 ++++++++++++++ 1 file changed, 14 insertions(+) diff --git a/core/assets/bundles/bundle_in_ID.properties b/core/assets/bundles/bundle_in_ID.properties index da3a524ae7..437c6a07fc 100644 --- a/core/assets/bundles/bundle_in_ID.properties +++ b/core/assets/bundles/bundle_in_ID.properties @@ -626,6 +626,7 @@ status.wet.name = Basah status.muddy.name = Berlumpur status.melting.name = Meleleh status.sapped.name = Melemahkan +status.electrified.name = Dialiri listrik status.spore-slowed.name = Spora Melambat status.tarred.name = Berminyak status.overclock.name = Melebihi Batas @@ -1060,6 +1061,11 @@ unit.minke.name = Minke unit.bryde.name = Bryde unit.sei.name = Sei unit.omura.name = Omura +unit.retusa.name = Retusa +unit.oxynoe.name = Oxynoe +unit.cyerce.name = Cyerce +unit.aegires.name = Aegires +unit.navanax.name = Navanax unit.alpha.name = Alpha unit.beta.name = Beta unit.gamma.name = Gamma @@ -1120,6 +1126,7 @@ block.sand-water.name = Air Pasir block.darksand-water.name = Air Pasir Hitam block.char.name = Bara block.dacite.name = Dasit +block.rhyolite.name = Riolit block.dacite-wall.name = Dinding Dasit block.dacite-boulder.name = Batu Besar Dasit block.ice-snow.name = Salju Es @@ -1227,6 +1234,7 @@ block.solar-panel.name = Panel Surya block.solar-panel-large.name = Panel Surya Besar block.oil-extractor.name = Pengekstrak Minyak block.repair-point.name = Tempat Perbaikan +block.repair-turret.name = Menara Pembaikan block.pulse-conduit.name = Selang Denyut block.plated-conduit.name = Pipa Terlapis block.phase-conduit.name = Selang Phase @@ -1269,6 +1277,12 @@ block.exponential-reconstructor.name = Rekonstruktor Eksponensial block.tetrative-reconstructor.name = Rekonstruktor Tetratif block.payload-conveyor.name = Pengantar Massa block.payload-router.name = Pengarah Massa +block.duct.name = Saluran +block.duct-router.name = Pengarah Saluran +block.duct-bridge.name = Jembatan Saluran +block.payload-propulsion-tower.name = Menara Penggerak Muatan +block.payload-void.name = Penghilang Muatan +block.payload-source.name = Sumber Muatan block.disassembler.name = Pembongkar block.silicon-crucible.name = Pelebur Raksasa block.overdrive-dome.name = Kubah Projektor Pemercepat From 5f28e261761d61deeb0c56b1fd128a57895d6527 Mon Sep 17 00:00:00 2001 From: Volas171 Date: Fri, 4 Jun 2021 18:17:53 -0500 Subject: [PATCH 62/69] Add Mindustrypvp.ml to 7.0 BE list (#5360) * yeet * lol almost forgot that --- servers_be.json | 3 +++ 1 file changed, 3 insertions(+) diff --git a/servers_be.json b/servers_be.json index a510096842..00d82b09bc 100644 --- a/servers_be.json +++ b/servers_be.json @@ -13,5 +13,8 @@ }, { "address": "46.17.104.254:9999" + }, + { + "address": "mindustrypvp.ml:6000" } ] From 3e636cba6b1bf703aba2f7a4310ad01e5eb6d8f2 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 4 Jun 2021 20:19:11 -0400 Subject: [PATCH 63/69] Finalized packr update --- build.gradle | 2 -- desktop/build.gradle | 75 ++++++++++++++++++++++---------------------- gradle.properties | 2 +- tools/build.gradle | 2 -- 4 files changed, 39 insertions(+), 42 deletions(-) diff --git a/build.gradle b/build.gradle index a0e3c900b1..85f4e052b6 100644 --- a/build.gradle +++ b/build.gradle @@ -13,12 +13,10 @@ buildscript{ google() maven{ url "https://oss.sonatype.org/content/repositories/snapshots/" } maven{ url 'https://jitpack.io' } - maven{ url "http://artifactory.nimblygames.com/artifactory/ng-public/" } //packr } dependencies{ classpath 'com.mobidevelop.robovm:robovm-gradle-plugin:2.3.11' - classpath "com.badlogicgames.packr:packr-all:4.0.0" classpath "com.github.Anuken.Arc:packer:$arcHash" classpath "com.github.Anuken.Arc:arc-core:$arcHash" } diff --git a/desktop/build.gradle b/desktop/build.gradle index 872b8a5891..7cd4befa2a 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -1,7 +1,4 @@ -import com.badlogicgames.packr.Packr -import com.badlogicgames.packr.PackrConfig - -sourceSets.main.java.srcDirs = [ "src/" ] +sourceSets.main.java.srcDirs = ["src/" ] project.ext.mainClassName = "mindustry.desktop.DesktopLauncher" project.ext.assetsDir = new File("../core/assets") @@ -9,6 +6,7 @@ project.ext.assetsDir = new File("../core/assets") def enableTemplates = true def JDK_DIR = "$System.env.JDK_DIR" def ICON_DIR = new File("$rootDir/core/assets/icons/icon.icns") +def platforms = ["Linux64", "Windows64", "Windows32", "MacOS"] task run(dependsOn: classes, type: JavaExec){ main = project.mainClassName @@ -36,7 +34,6 @@ task run(dependsOn: classes, type: JavaExec){ } } - task dist(type: Jar, dependsOn: configurations.runtimeClasspath){ from files(sourceSets.main.output.classesDirs) from files(sourceSets.main.output.resourcesDir) @@ -74,11 +71,11 @@ task steamtest(dependsOn: dist){ //required templates: //- Windows64 +//- Windows32 (not provided by Packr!) //required JDKs: -//- Windows32 //- Linux64 //- Mac -PackrConfig.Platform.values().each{ platform -> +platforms.each{ platform -> task "packr${platform.toString()}"{ dependsOn dist @@ -93,7 +90,8 @@ PackrConfig.Platform.values().each{ platform -> delete "build/packr/output/" } - if(enableTemplates && (platform == PackrConfig.Platform.Windows64)){ + //the Windows32 version uses an old java-8 based template, because packr and jpackage don't support win32 + if(enableTemplates && (platform == "Windows32")){ copy{ into "build/packr/output" from "${JDK_DIR}/templates/${platform.toString().toLowerCase()}" @@ -105,30 +103,35 @@ PackrConfig.Platform.values().each{ platform -> from "build/libs/${appName}.jar" } }else{ - def config = new PackrConfig() - config.with{ - //TODO consider useZgcIfSupportedOs = true - config.executable = appName - config.platform = platform - verbose = true - bundleIdentifier = getPackage() + ".mac" - iconResource = ICON_DIR - outDir = file("$rootDir/desktop/build/packr/output") - mainClass = project.ext.mainClassName - classpath = ["$rootDir/desktop/build/packr/desktop.jar".toString()] - removePlatformLibs = ["$rootDir/desktop/build/packr/desktop.jar".toString()] + def jarPath = JDK_DIR + "packr.jar" + def args = ["java", "-jar", jarPath] as String[] - vmArgs = ["XX:+ShowCodeDetailsInExceptionMessages"] - jdk = JDK_DIR + "jdk-${platform.toString().toLowerCase()}.zip" + args += [ + "--platform", platform == "MacOS" ? "Mac" : platform.toString(), + "--jdk", JDK_DIR + "jre-${platform.toString().toLowerCase()}", + "--executable", appName, + "--classpath", "$rootDir/desktop/build/packr/desktop.jar".toString(), + "--mainclass", project.ext.mainClassName, + "--verbose", + "--bundle", getPackage() + ".mac", + "--icon", ICON_DIR, + "--output", "$rootDir/desktop/build/packr/output".toString(), + "--removelibs", "$rootDir/desktop/build/packr/desktop.jar".toString() + ] - if(platform == PackrConfig.Platform.MacOS){ - vmArgs += "XstartOnFirstThread" - } + if(platform == "MacOS"){ + args += ["--vmargs", "XstartOnFirstThread"] as String[] + }else{ + //TODO unneeded for windows? + args += ["--vmargs", "Dhttps.protocols=TLSv1.2,TLSv1.1,TLSv1"] } - new Packr().pack(config) + exec{ + commandLine args.toList() + standardOutput = System.out + } - if(platform != PackrConfig.Platform.MacOS){ + if(platform != "MacOS"){ copy{ into "build/packr/output/jre/" from "build/packr/output/desktop.jar" @@ -138,10 +141,8 @@ PackrConfig.Platform.values().each{ platform -> delete "build/packr/output/desktop.jar" } - file("build/packr/output/config.json").text = file("build/packr/output/config.json").text.replace("desktop.jar", "jre/desktop.jar") - } - - if(platform == PackrConfig.Platform.MacOS){ + file("build/packr/output/Mindustry.json").text = file("build/packr/output/Mindustry.json").text.replace("desktop.jar", "jre/desktop.jar") + }else{ copy{ into "build/packr/output/${appName}.app/Contents/" from "build/packr/output/Contents/" @@ -153,7 +154,7 @@ PackrConfig.Platform.values().each{ platform -> } } - if((platform == PackrConfig.Platform.Windows64 || platform == PackrConfig.Platform.Windows32)){ + if((platform == "Windows64" || platform == "Windows32")){ copy{ from "build/packr/output/jre/bin/msvcr100.dll" into "build/packr/output/" @@ -163,12 +164,12 @@ PackrConfig.Platform.values().each{ platform -> if(versionModifier.contains("steam")){ copy{ - def lib = platform == PackrConfig.Platform.MacOS || platform == PackrConfig.Platform.Linux64 ? "lib" : "" - from zipTree(platform == PackrConfig.Platform.MacOS ? "build/packr/output/${appName}.app/Contents/Resources/desktop.jar" : "build/packr/output/jre/desktop.jar").matching{ - include "${lib}steamworks4j${platform == PackrConfig.Platform.Windows64 ? '64.dll' : platform == PackrConfig.Platform.Windows32 ? '.dll' : platform == PackrConfig.Platform.Linux64 ? '.so' : '.dylib'}" - include "${lib}steam_api${platform == PackrConfig.Platform.Windows64 ? '64.dll' : platform == PackrConfig.Platform.Windows32 ? '.dll' : platform == PackrConfig.Platform.Linux64 ? '.so' : '.dylib'}" + def lib = platform == "MacOS" || platform == "Linux64" ? "lib" : "" + from zipTree(platform == "MacOS" ? "build/packr/output/${appName}.app/Contents/Resources/desktop.jar" : "build/packr/output/jre/desktop.jar").matching{ + include "${lib}steamworks4j${platform == "Windows64" ? '64.dll' : platform == "Windows32" ? '.dll' : platform == "Linux64" ? '.so' : '.dylib'}" + include "${lib}steam_api${platform == "Windows64" ? '64.dll' : platform == "Windows32" ? '.dll' : platform == "Linux64" ? '.so' : '.dylib'}" } - into platform != PackrConfig.Platform.MacOS ? "build/packr/output/" : "build/packr/output/${appName}.app/Contents/Resources" + into platform != "MacOS" ? "build/packr/output/" : "build/packr/output/${appName}.app/Contents/Resources" } } diff --git a/gradle.properties b/gradle.properties index edd4da555a..cf506d1790 100644 --- a/gradle.properties +++ b/gradle.properties @@ -9,4 +9,4 @@ kapt.use.worker.api=true kapt.include.compile.classpath=false # I don't need to use the kotlin stdlib yet, so remove it to prevent extra bloat & method count issues kotlin.stdlib.default.dependency=false -archash=423d5bb934a66c0ba0f68906b45d7e514342d5c5 +archash=759b136340ea98d4cb9881e340fb219c6d602a66 diff --git a/tools/build.gradle b/tools/build.gradle index 3a1141fb1f..c98a6c8525 100644 --- a/tools/build.gradle +++ b/tools/build.gradle @@ -1,7 +1,5 @@ sourceSets.main.java.srcDirs = ["src/"] - - import arc.files.Fi import arc.graphics.Color import arc.graphics.Pixmap From c6242fe7f1b210403abf21019245730ebc824736 Mon Sep 17 00:00:00 2001 From: Sharlotte <60801210+Sharlottes@users.noreply.github.com> Date: Sat, 5 Jun 2021 09:28:07 +0900 Subject: [PATCH 64/69] [KO] Bleeding-Edge Bundle Update (#5352) * [KO] Bleeding-Edge Bundle Update * Update bundle_ko.properties --- core/assets/bundles/bundle_ko.properties | 484 +++++++++++++---------- 1 file changed, 266 insertions(+), 218 deletions(-) diff --git a/core/assets/bundles/bundle_ko.properties b/core/assets/bundles/bundle_ko.properties index 99d67537e7..3a9f26652e 100644 --- a/core/assets/bundles/bundle_ko.properties +++ b/core/assets/bundles/bundle_ko.properties @@ -67,6 +67,14 @@ schematic.delete.confirm = 이 설계도는 완전히 삭제될 것입니다. schematic.rename = 설계도 이름 바꾸기 schematic.info = {0}x{1}, {2} 블록 schematic.disabled = [scarlet]설계도 비활성화됨[]\n이 [accent]맵[] 또는 [accent]서버[] 에서는 설계도를 사용할 수 없습니다. +schematic.tags = 태그: +schematic.edittags = 태그 수정하기 +schematic.addtag = 태그 추가하기 +schematic.texttag = 텍스트 태그 +schematic.icontag = 아이콘 태그 +schematic.renametag = 태그 이름바꾸기 +schematic.tagdelconfirm = 이 태그를 완전히 삭제하시겠습니까? +schematic.tagexists = 이 태그는 이미 존재합니다. stats = 전투 결과 stat.wave = 패배한 단계:[accent] {0} @@ -153,11 +161,11 @@ mod.folder.missing = 창작마당에는 폴더 형태의 모드만 게시할 수 mod.scripts.disable = 이 기기는 스크립트가 있는 모드를 지원하지 않습니다. 게임을 플레이하려면 이 모드를 비활성화해야 합니다. about.button = 정보 -name = 닉네임 : +name = 닉네임 : noname = 먼저 [accent]플레이어 이름[]을 설정하세요. planetmap = 행성 지도 launchcore = 코어 출격 -filename = 파일 이름: +filename = 파일 이름: unlocked = 새로운 콘텐츠가 해금되었습니다! available = 새로운 콘텐츠 해금이 가능합니다! completed = [accent]완료됨 @@ -306,7 +314,6 @@ data.exported = 데이터를 내보냈습니다. data.invalid = 유효한 게임 데이터가 아닙니다. data.import.confirm = 외부 데이터를 가져오면 현재 게임 데이터를 [scarlet]모두[] 덮어쓰게 됩니다.\n[accent]이 작업은 취소할 수 없습니다![]\n\n데이터를 가져오면 게임이 즉시 종료됩니다. quit.confirm = 정말로 종료하시겠습니까? -quit.confirm.tutorial = 튜토리얼을 종료하시겠습니까?\n튜토리얼은[accent]설정->게임->튜토리얼[]에서 다시 하실 수 있습니다. loading = [accent]불러오는중... reloading = [accent]모드 새로고침하는중... saving = [accent]저장중... @@ -448,7 +455,7 @@ toolmode.square.description = 정사각형 형태의 브러시로 교체합니 toolmode.eraseores = 자원 초기화 toolmode.eraseores.description = 자원만 초기화합니다. toolmode.fillteams = 팀 채우기 -toolmode.fillteams.description = 블록 대신 선택한 팀으로 블록 팀을 채웁니다. +toolmode.fillteams.description = 블록 대신 선택한 팀으로 블록 팀을 채웁니다. toolmode.drawteams = 팀 그리기 toolmode.drawteams.description = 블록 대신 선택한 팀으로 블록 팀을 그립니다. @@ -477,6 +484,7 @@ 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 = 타일 @@ -498,6 +506,7 @@ load = 불러오기 save = 저장하기 fps = FPS: {0} ping = Ping: {0}ms +tps = TPS: {0} memory = Mem: {0}mb memory2 = Mem:\n {0}mb +\n {1}mb language.restart = 언어 설정을 적용하려면 게임을 다시 시작하세요. @@ -530,7 +539,7 @@ launch.from = 출격 출발지 : [accent]{0} launch.destination = 목적지: {0} configure.invalid = 해당 값은 0에서 {0} 사이의 숫자여야 합니다. add = 추가... -boss.health = 수호자 체력 +guardian = 수호자 connectfail = [scarlet]연결 오류:\n\n[accent]{0} error.unreachable = 서버에 연결하지 못했습니다.\n서버 주소가 정확히 입력되었나요? @@ -574,6 +583,7 @@ sector.attacked = [accent]{0}[white] 지역이 공격받고 있습니다! sector.lost = [accent]{0}[white] 지역을 잃었습니다! #note: the missing space in the line below is intentional sector.captured = [accent]{0}[white] 지역을 점령했습니다! +sector.changeicon = 아이콘 바꾸기 threat.low = 낮음 threat.medium = 높지 않지만 낮지도 않음 @@ -626,11 +636,12 @@ status.wet.name = 젖음 status.muddy.name = 질척해짐 status.melting.name = 융해 status.sapped.name = 흡혈됨 -status.spore-slowed.name = 포자 느려짐 -status.tarred.name = 타르 +status.electrified.name = 과전류 +status.spore-slowed.name = 포자감속 +status.tarred.name = 타르화 status.overclock.name = 과부하 status.shocked.name = 감전 -status.blasted.name = 피폭됨 +status.blasted.name = 파열 status.unmoving.name = 멈춤 settings.language = 언어 @@ -654,6 +665,7 @@ settings.clearcampaignsaves.confirm = 정말로 캠페인을 초기화하시겠 paused = [accent]< 일시정지 > clear = 초기화 banned = [scarlet]금지됨 +unsupported.environment = [scarlet]지원되지 않는 환경 yes = O no = X info.title = 정보 @@ -668,7 +680,7 @@ stat.input = 입력 stat.output = 출력 stat.booster = 가속 stat.tiles = 필요한 타일 -stat.affinities = 밀접성 +stat.affinities = 작용 가능 stat.opposites = 상성 stat.powercapacity = 전력 용량 stat.powershot = 전력/발 @@ -692,6 +704,7 @@ stat.memorycapacity = 변수 용량 stat.basepowergeneration = 기본 전력 발전량 stat.productiontime = 소요 시간 stat.repairtime = 건물 완전 수리 시간 +stat.repairspeed = 수리 속도 stat.weapons = 무기 stat.bullet = 탄환 stat.speedincrease = 속도 증가 @@ -706,7 +719,7 @@ stat.buildtime = 건설 시간 stat.maxconsecutive = 최대 체인 stat.buildcost = 건설 비용 stat.inaccuracy = 오차각 -#stat.shots = 발사 수 (안쓰임) +stat.shots = 발사 수 stat.reload = 초당 발사 수 stat.ammo = 탄약 stat.shieldhealth = 보호막 체력 @@ -717,7 +730,7 @@ stat.lightningchance = 전격 확률 stat.lightningdamage = 전격 피해량 stat.flammability = 인화성 stat.radioactivity = 방사성 -stat.charge = 과충전율 +stat.charge=과충전률 stat.heatcapacity = 열 용량 stat.viscosity = 점성 stat.temperature = 온도 @@ -736,14 +749,16 @@ stat.healthmultiplier = 체력 배수 stat.speedmultiplier = 이동속도 배수 stat.reloadmultiplier = 재장전 배수 stat.buildspeedmultiplier = 건설속도 배수 -stat.reactive = 반응성 +stat.reactive = 작용 받음 +stat.healing = 회복량 ability.forcefield = 보호막 필드 ability.repairfield = 수리 필드 -ability.statusfield = 상태이상 필드 +ability.statusfield = {0} 상태이상 필드 ability.unitspawn = {0} 공장 ability.shieldregenfield = 방어막 복구 필드 ability.movelightning = 가속 전격 +ability.energyfield = 에너지 필드: [accent]{1}[]타일 내 [accent]{2}[]개 목표물에게 [accent]{0}[]피해량 bar.drilltierreq = 더 좋은 드릴 필요 bar.noresources = 자원 부족 @@ -766,6 +781,7 @@ bar.power = 전력 bar.progress = 건설 진행도 bar.input = 입력 bar.output = 출력 +bar.strength = [stat]{0}[lightgray]x 치료 속도 units.processorcontrol = [lightgray]프로세서 제어됨 @@ -780,7 +796,7 @@ bullet.knockback = [stat]{0}[lightgray] 넉백 bullet.pierce = [stat]{0}[lightgray]번 관통 bullet.infinitepierce = [stat]관통 bullet.healpercent = [stat]{0}[lightgray]% 회복 -bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수 +bullet.multiplier = [stat]{0}[lightgray]배 탄약 배수 bullet.reload = [stat]{0}[lightgray]배 발사 속도 unit.blocks = 블록 @@ -898,7 +914,7 @@ keybind.press = 키를 누르세요... keybind.press.axis = 마우스 휠 또는 키를 누르세요... keybind.screenshot.name = 맵 스크린 캡처 keybind.toggle_power_lines.name = 전선 가시도 설정 -keybind.toggle_block_status.name = 블록 상태 가시도 +keybind.toggle_block_status.name = 블록 상태 가시도 keybind.move_x.name = X축 이동 keybind.move_y.name = Y축 이동 keybind.mouse_move.name = 커서를 따라서 이동 @@ -974,6 +990,7 @@ rules.wavetimer = 시간 제한이 있는 단계 rules.waves = 단계 rules.attack = 공격 모드 rules.buildai = AI 건설 +rules.corecapture = 코어 파괴 시 점령 rules.enemyCheat = 무한 AI (빨간팀) 자원 rules.blockhealthmultiplier = 블록 체력 배수 rules.blockdamagemultiplier = 블록 공격력 배수 @@ -1003,7 +1020,7 @@ rules.explosions = 블록/유닛 폭발 데미지 rules.ambientlight = 자연 조명 표시 rules.weather = 날씨 추가 rules.weather.frequency = 빈도: -rules.weather.always = 항상 +rules.weather.always = 항상 rules.weather.duration = 지속 시간: content.item.name = 자원 @@ -1029,6 +1046,7 @@ item.blast-compound.name = 폭발물 item.pyratite.name = 파이라타이트 item.metaglass.name = 강화 유리 item.scrap.name = 고철 + liquid.water.name = 물 liquid.slag.name = 광재 liquid.oil.name = 석유 @@ -1060,6 +1078,11 @@ unit.minke.name = 민케 unit.bryde.name = 브라이드 unit.sei.name = 세이 unit.omura.name = 오무라 +unit.retusa.name = 레투사 +unit.oxynoe.name = 옥시노 +unit.cyerce.name = 사이어스 +unit.aegires.name = 에어리어스 +unit.navanax.name = 나바낙스 unit.alpha.name = 알파 unit.beta.name = 베타 unit.gamma.name = 감마 @@ -1122,6 +1145,7 @@ block.char.name = 숯 block.dacite.name = 석영안산암 block.dacite-wall.name = 석영안산암 벽 block.dacite-boulder.name = 석영안산암 +block.rhyolite.name = 유문암 block.ice-snow.name = 얼음눈 block.stone-wall.name = 돌 벽 block.ice-wall.name = 얼음 벽 @@ -1227,6 +1251,7 @@ 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 = 메타 파이프 @@ -1269,10 +1294,16 @@ block.exponential-reconstructor.name = 재구성기 : Exponential block.tetrative-reconstructor.name = 재구성기 : Tetrative block.payload-conveyor.name = 화물 컨베이어 block.payload-router.name = 화물 분배기 +block.duct.name = 도관 +block.duct-router.name = 도관 분배기 +block.duct-bridge.name = 도관 다리 +block.payload-propulsion-tower.name = 화물 추진탑 +block.payload-void.name = 화물 소멸기 +block.payload-source.name = 화물 공급기 block.disassembler.name = 광재 분해기 block.silicon-crucible.name = 실리콘 도가니 block.overdrive-dome.name = 대형 과부하 프로젝터 -#experimental, may be removed / 이 아래의 블록들은 테스트용 임시 블록들입니다. +#experimental, may be removed / 이 아래의 블록들은 테스트용 임시 블록들입니다. block.block-forge.name = 블록 제작대 block.block-loader.name = 블록 로더 block.block-unloader.name = 블록 언로더 @@ -1290,7 +1321,6 @@ block.memory-bank.name = 메모리 보관소 team.blue.name = 파랑색 팀 team.crux.name = 빨강색 팀 team.sharded.name = 주황색 팀 -team.orange.name = 주황색 팀 team.derelict.name = 버려진 팀 team.green.name = 초록색 팀 team.purple.name = 보라색 팀 @@ -1311,6 +1341,7 @@ hint.placeConveyor.mobile = 컨베이어는 자원을 드릴에서 다른 블록 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][[왼쪽 ctrl][]을 누른 채로 [accent]클릭[] 하십시오. @@ -1344,7 +1375,7 @@ item.graphite.description = 탄약 및 전기 부품에 사용되는 무기질 item.sand.description = 제련에서 합금 또는 플럭스에서 광범위하게 사용되는 일반적인 재료. item.coal.description = 화석화된 식물 물질. 씨앗이 나오기 훨씬 전에 형성되었습니다. 연료 및 자원 생산에 광범위하게 사용됩니다. item.coal.details = 발화 작용 이전, 오래전에 생성된 화석화 작용을 거친 식물체로 보입니다. -item.titanium.description = 액체 수송, 드릴이나 항공기에 광범위하게 사용되는 희귀 초경량 금속. +item.titanium.description = 액체 수송, 드릴이나 공장에 광범위하게 사용되는 희귀 초경량 금속. item.thorium.description = 구조적 지지 및 핵연료로 사용되는 고밀도의 방사성 금속. item.scrap.description = 오래된 건물과 유닛의 남은 잔해. 미량의 다양한 금속들이 포함되어 있습니다. item.scrap.details = 오래된 구조물과 유닛의 잔해. @@ -1505,9 +1536,9 @@ block.memory-cell.description = 프로세서를 위한 데이터를 저장합니 block.memory-bank.description = 프로세서를 위한 데이터를 저장합니다. 저장 공간이 셀보다 큽니다. block.logic-display.description = 프로세서를 이용해 그래픽을 출력할 수 있습니다. block.large-logic-display.description = 프로세서를 이용해 그래픽을 출력할 수 있습니다. -block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 코어를 행성 간 이동을 위한 탈출 속도까지 가속합니다. +block.interplanetary-accelerator.description = 거대한 전자기 레일건 타워. 코어를 행성 간 이동을 위한 탈출 속도까지 가속합니다. -unit.dagger.description = 주변 모든 적에게 일반적인 탄환을 발사합니다. +unit.dagger.description = 주변 모든 적에게 일반적인 탄환을 발사합니다. unit.mace.description = 주변 모든 적에게 화염 줄기를 발사합니다. unit.fortress.description = 지상 목표물에 장거리 포탄을 발사합니다. unit.scepter.description = 주변 모든 적에게 장전된 탄환을 일제히 발사합니다. @@ -1522,19 +1553,19 @@ unit.atrax.description = 지상 목표물을 약화하는 광재 구체를 발 unit.spiroct.description = 적에게 흡혈 레이저 빔을 발사하며, 흡혈을 통해 체력을 회복합니다. 대부분의 지형 위를 밟을 수 있습니다. unit.arkyid.description = 적에게 큰 흡혈 레이저 빔을 발사하며, 흡혈을 통해 체력을 회복합니다. 대부분의 지형 위를 밟을 수 있습니다. unit.toxopid.description = 적에게 큰 전격 포탄 무리와 관통 레이저를 발사합니다. 대부분의 지형 위를 밟을 수 있습니다. -unit.flare.description = 지상 목표물에 일반적인 탄환을 발사합니다. -unit.horizon.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.quad.description = 지상 목표물에 적에게 피해를 주고, 아군 구조물을 수리하는 큰 폭탄을 투하합니다. 중간 크기의 지상 유닛들을 수송할 수 있습니다. +unit.oct.description = 주변 아군들을 재생 역장으로 보호합니다. 대부분의 지상 유닛들을 수송할 수 있습니다. +unit.risso.description = 주변 모든 적에게 탄환과 미사일을 일제히 발사합니다. unit.minke.description = 주변 지상 적에게 일반적인 탄환과 포탄을 발사합니다. -unit.bryde.description = 적에게 장거리 포탄과 미사일을 발사합니다. +unit.bryde.description = 적에게 장거리 포탄과 미사일을 발사합니다. unit.sei.description = 적에게 방어력 관통 탄환과 미사일을 일제히 발사합니다. unit.omura.description = 적에게 장거리 관통 레일건을 발사합니다. 플레어를 생산합니다. unit.alpha.description = 적으로부터 코어: 조각을 방어합니다. 구조물을 짓습니다. @@ -1549,8 +1580,8 @@ lst.drawflush = 대기중인 [accent]Draw[]실행문을 디스플레이에 출 lst.printflush = 대기중인 [accent]Print[]실행문을 메시지 블록에 출력하기 lst.getlink = 순서별로 프로세서 연결 가져오기. 0부터 시작 lst.control = 건물 조종하기 -lst.radar = 건물 주변의 유닛 검색하기 -lst.sensor = 건물 또는 유닛의 정보 얻기 +lst.radar = 건물 주변의 유닛 검색하기 +lst.sensor = 건물 또는 유닛의 정보 얻기 lst.set = 변수 선언/할당하기 lst.operation = 1~2개의 변수로 연산하기 lst.end = 실행줄의 가장 위로 점프하기 @@ -1565,7 +1596,7 @@ logic.nounitbuild = [red]유닛의 건물 로직은 여기서 허용되지 않 lenum.type = 건물/유닛의 타입\n예로 분배기는 문자열이 아니라 [accent]@router[]를 반환합니다. lenum.shoot = 특정 위치에 발사 lenum.shootp = 목표물 속도를 예측하여 발사 -lenum.configure = 필터의 아이템같은 건물의 설정 +lenum.config = 필터의 아이템같은 건물의 설정 lenum.enabled = 블록의 활성 여부 lenum.color = 조명 색 설정 @@ -1573,6 +1604,7 @@ laccess.controller = 유닛 제어자. 프로세서가 제어하면, 프로세 laccess.dead = 유닛 또는 건물 사망/무효 여부 laccess.controlled = 만약 유닛 제어자가 프로세서라면 [accent]@ctrlProcessor[]를 반환합니다.\n만약 유닛/건물 제어자가 플레이어라면 [accent]@ctrlPlayer[]를 반환합니다.\n만약 유닛이 다른 유닛에 의해 지휘되면(G키)[accent]@ctrlFormation[]를 반환합니다.\n그 외에는 0을 반환합니다. laccess.commanded = [red]이제 사용되지 않으며, 곧 제거될 예정입니다![]\n대신 [accent]controlled[]를 사용하세요. +laccess.progress = 작업 진행률, 0 에서 1 로 감.\n포탑 재장전이나 구조물 진행률을 반환합니다. graphicstype.clear = 이 색으로 화면을 채우기 graphicstype.color = 아래 그래픽 실행문들의 색 설정하기 @@ -1581,7 +1613,7 @@ graphicstype.line = 선분 그리기 graphicstype.rect = 직사각형 채우기 graphicstype.linerect = 직사각형 외곽선 그리기 graphicstype.poly = 정다각형 채우기 -graphicstype.linepoly = 정다각형 외곽선 그리기 +graphicstype.linepoly = 정다각형 외곽선 그리기 graphicstype.triangle = 삼각형 채우기 graphicstype.image = 일부 콘텐츠의 이미지 그리기\n예: [accent]@router[] 또는 [accent]@dagger[]. @@ -1604,9 +1636,15 @@ lenum.min = 두 수의 최솟값 lenum.max = 두 수의 최댓값 lenum.angle = 벡터의 각(도) lenum.len = 벡터의 길이 + lenum.sin = 사인(도) lenum.cos = 코사인(도) lenum.tan = 탄젠트(도) + +lenum.asin = 각도상 아크 사인 +lenum.acos = 각도상 아크 코사인 +lenum.atan = 각도상 아크 탄젠트 + #not a typo, look up 'range notation' lenum.rand = 범위 내 십진법 난수[0 ~ 값) lenum.log = 자연 로그(진수) @@ -1683,205 +1721,215 @@ lenum.build = 구조물 건설 lenum.getblock = 특정 좌표의 빌딩과 블록을 반환합니다.\n위치는 유닛의 인지 범위 내여야 합니다.\n자연 지형은 [accent]@solid[]의 타입을 가집니다. lenum.within = 좌표 주변 유닛 발견 여부 lenum.boost = 이륙 시작/중단 -#1665 줄 매칭 +#1724 line matching / 줄 매칭 -#-------------비공식 번역주------------- +#-------------비공식 번역------------- #팁, 패치 기록, 약간의 관련 드립을 넣는 곳입니다. 이미 쓰여진 줄이 있다면 \n\n를 입력한 다음 작성하고 끝에 깃허브 작성자 닉네임(또는 디스코드)을 적어주세요. -#심각한 노잼, 뇌절, 무례한 말들을 적지 말아주세요, 이는 목적이 어떠하든 공통적으로 적용됩니다(친근함 유도를 위한 평어 x). 다음 패치에 업데이트되어 그 언어를 쓰는 모든 유저가 보게 됩니다. +#심각한 노잼, 뇌절, 무례한 말들을 적지 말아주세요, 이는 목적이 어떠하든 공통적으로 적용됩니다(친근함 유도를 위한 평어 x). 다음 패치에 업데이트되어 한국어를 쓰는 모든 유저가 보게 됩니다. #양이 너무 많으면 사족을 더 붙이는걸 추천하지 않습니다. #이 비공식 번역주는 공식 디테일이 추가되면 언제든지 삭제될 수 있습니다. -#비어있는 디테일은 아래 details가 전부이므로 추가 또는 삭제를 따로 안하셔도 됩니다. +#비어있는 디테일은 아래 details가 전부이므로 추가 또는 삭제를 따로 안하셔도 됩니다. #유색코드가 아닌, 흑백 색코드만 사용 가능합니다. 되도록이면 그냥 안쓰시는걸 추천. -#관련 문의는 공식 디스코드에서 절 불러주세요. Sharlotte#0018 +#관련 문의는 공식 디스코드에서 절 불러주세요. Sharlotte#0018 #아이템 -item.metaglass.details = 쓰임세가 가장 적은 아이템 -item.graphite.details = -item.sand.details = -item.titanium.details = -item.thorium.details = -item.silicon.details = -item.plastanium.details = -item.phase-fabric.details = -item.surge-alloy.details = -item.blast-compound.details = 화력 발전기에 넣어보세요. -item.pyratite.details = +item.metaglass.details = [lightgray][비공식][]쓰임세가 가장 적은 아이템 +item.graphite.details = +item.sand.details = +item.titanium.details = +item.thorium.details = +item.silicon.details = +item.plastanium.details = +item.phase-fabric.details = +item.surge-alloy.details = +item.blast-compound.details = [lightgray][비공식][]화력 발전기에 넣어보세요. +item.pyratite.details = #액체 -liquid.water.details = -liquid.slag.details = -liquid.oil.details = -liquid.cryofluid.details = 티타늄을 갈아서 물에 희석했다는 소문이 있다. +liquid.water.details = +liquid.slag.details = +liquid.oil.details = +liquid.cryofluid.details = [lightgray][비공식][]티타늄을 갈아서 물에 희석했다는 소문이 있다. #블록 -block.resupply-point.details = -block.armored-conveyor.details = -block.illuminator.details = -block.message.details = -block.graphite-press.details = -block.multi-press.details = -block.silicon-smelter.details = -block.kiln.details = -block.plastanium-compressor.details = 석유를 정말 많이 먹는다. -block.phase-weaver.details = -block.alloy-smelter.details = -block.cryofluid-mixer.details = -block.blast-mixer.details = -block.pyratite-mixer.details = -block.melter.details = -block.separator.details = -block.spore-press.details = -block.pulverizer.details = -block.coal-centrifuge.details = 가성비가 매우 뛰어나다. -block.incinerator.details = -block.power-void.details = -block.power-source.details = -block.item-source.details = -block.item-void.details = -block.liquid-source.details = -block.liquid-void.details = -block.copper-wall.details = -block.copper-wall-large.details = -block.titanium-wall.details = -block.titanium-wall-large.details = -block.plastanium-wall.details = -block.plastanium-wall-large.details = -block.thorium-wall.details = -block.thorium-wall-large.details = -block.phase-wall.details = -block.phase-wall-large.details = -block.surge-wall.details = -block.surge-wall-large.details = -block.door.details = -block.door-large.details = -block.mender.details = -block.mend-projector.details = -block.overdrive-projector.details = -block.force-projector.details = -block.shock-mine.details = -block.conveyor.details = -block.titanium-conveyor.details = -block.plastanium-conveyor.details = -block.junction.details = -block.bridge-conveyor.details = 티타늄 컨베이어보다 빠르다. -block.phase-conveyor.details = -block.sorter.details = 자원을 분류하여 주변 블록에 건내는 과정이 거의 한순간에 일어난다. -block.inverted-sorter.details = -block.distributor.details = -block.overflow-gate.details = -block.underflow-gate.details = -block.mass-driver.details = 발사할려면 최소 아이템 10개가 필요하다. -block.mechanical-pump.details = -block.rotary-pump.details = -block.thermal-pump.details = -block.conduit.details = -block.pulse-conduit.details = -block.plated-conduit.details = -block.liquid-router.details = -block.liquid-tank.details = -block.liquid-junction.details = -block.bridge-conduit.details = -block.phase-conduit.details = -block.power-node.details = -block.power-node-large.details = -block.surge-tower.details = -block.diode.details = -block.battery.details = -block.battery-large.details = -block.combustion-generator.details = -block.thermal-generator.details = -block.steam-generator.details = +block.resupply-point.details = +block.armored-conveyor.details = +block.illuminator.details = +block.message.details = +block.graphite-press.details = +block.multi-press.details = +block.silicon-smelter.details = +block.kiln.details = +block.plastanium-compressor.details = [lightgray][비공식][]석유를 정말 많이 먹는다. +block.phase-weaver.details = +block.alloy-smelter.details = +block.cryofluid-mixer.details = +block.blast-mixer.details = +block.pyratite-mixer.details = +block.melter.details = +block.separator.details = +block.spore-press.details = +block.pulverizer.details = +block.coal-centrifuge.details = [lightgray][비공식][]가성비가 매우 뛰어나다. +block.incinerator.details = +block.power-void.details = +block.power-source.details = +block.item-source.details = +block.item-void.details = +block.liquid-source.details = +block.liquid-void.details = +block.copper-wall.details = +block.copper-wall-large.details = +block.titanium-wall.details = +block.titanium-wall-large.details = +block.plastanium-wall.details = +block.plastanium-wall-large.details = +block.thorium-wall.details = +block.thorium-wall-large.details = +block.phase-wall.details = +block.phase-wall-large.details = +block.surge-wall.details = +block.surge-wall-large.details = +block.door.details = +block.door-large.details = +block.mender.details = +block.mend-projector.details = +block.overdrive-projector.details = +block.force-projector.details = +block.shock-mine.details = +block.conveyor.details = +block.titanium-conveyor.details = +block.plastanium-conveyor.details = +block.junction.details = +block.bridge-conveyor.details = [lightgray][비공식][]티타늄 컨베이어보다 빠르다. +block.phase-conveyor.details = +block.sorter.details = [lightgray][비공식][]자원을 분류하여 주변 블록에 건내는 과정이 거의 한순간에 일어난다. +block.inverted-sorter.details = +block.distributor.details = +block.overflow-gate.details = +block.underflow-gate.details = +block.mass-driver.details = [lightgray][비공식][]발사할려면 최소 아이템 10개가 필요하다. +block.mechanical-pump.details = +block.rotary-pump.details = +block.thermal-pump.details = +block.conduit.details = +block.pulse-conduit.details = +block.plated-conduit.details = +block.liquid-router.details = +block.liquid-tank.details = +block.liquid-junction.details = +block.bridge-conduit.details = +block.phase-conduit.details = +block.power-node.details = +block.power-node-large.details = +block.surge-tower.details = +block.diode.details = +block.battery.details = +block.battery-large.details = +block.combustion-generator.details = +block.thermal-generator.details = +block.steam-generator.details = block.differential-generator.details = -block.rtg-generator.details = -block.solar-panel.details = -block.solar-panel-large.details = -block.thorium-reactor.details = -block.impact-reactor.details = -block.mechanical-drill.details = -block.pneumatic-drill.details = -block.laser-drill.details = -block.blast-drill.details = -block.water-extractor.details = -block.cultivator.details = -block.cultivator.details = -block.oil-extractor.details = -block.vault.details = -block.container.details = -block.unloader.details = -block.launch-pad.details = -block.duo.details = -block.scatter.details = -block.scorch.details = -block.hail.details = 일점사하면 립플보다 더 뛰어난 정확도와 연사력을 보여준다. -block.wave.details = -block.lancer.details = -block.arc.details = -block.swarmer.details = -block.salvo.details = -block.fuse.details = -block.ripple.details = -block.cyclone.details = -block.spectre.details = -block.meltdown.details = -block.foreshadow.details = -block.repair-point.details = -block.segment.details = -block.parallax.details = -block.tsunami.details = -block.silicon-crucible.details = -block.disassembler.details = -block.overdrive-dome.details = -block.payload-conveyor.details = -block.payload-router.details = -block.command-center.details = -block.ground-factory.details = -block.air-factory.details = 건설&연구 재료는 구리와 납뿐이지만, 정작 유닛을 생산할 땐 실리콘이 필요하다. -block.naval-factory.details = -block.additive-reconstructor.details = -block.multiplicative-reconstructor.details = -block.exponential-reconstructor.details = -block.tetrative-reconstructor.details = -block.switch.details = -block.micro-processor.details = -block.logic-processor.details = -block.hyper-processor.details = -block.memory-cell.details = -block.memory-bank.details = -block.logic-display.details = -block.large-logic-display.details = -block.interplanetary-accelerator.details = +block.rtg-generator.details = +block.solar-panel.details = +block.solar-panel-large.details = +block.thorium-reactor.details = +block.impact-reactor.details = +block.mechanical-drill.details = +block.pneumatic-drill.details = +block.laser-drill.details = +block.blast-drill.details = +block.water-extractor.details = +block.cultivator.details = +block.oil-extractor.details = +block.vault.details = +block.container.details = +block.unloader.details = +block.launch-pad.details = +block.duo.details = +block.scatter.details = +block.scorch.details = +block.hail.details = [lightgray][비공식][]일점사하면 립플보다 더 뛰어난 정확도와 연사력을 보여준다. +block.wave.details = +block.lancer.details = +block.arc.details = +block.swarmer.details = +block.salvo.details = +block.fuse.details = +block.ripple.details = +block.cyclone.details = +block.spectre.details = +block.meltdown.details = +block.foreshadow.details = +block.repair-point.details = +block.segment.details = +block.parallax.details = +block.tsunami.details = +block.silicon-crucible.details = +block.disassembler.details = +block.overdrive-dome.details = +block.payload-conveyor.details = +block.payload-router.details = +block.duct.details = [lightgray][비공식][]무중력 환경에서 쓰일 컨베이어 대체재입니다. +block.duct-router.details = [lightgray][비공식][]교차기가 없어서 루터체인을 할 수 없네요. +block.duct-bridge.details = [lightgray][비공식][]사거리가 3타일입니다. +block.payload-propulsion-tower.details = [lightgray][비공식][]원문이 Turret가 아니라 Tower에요. +block.payload-void.details = [lightgray][비공식][]본격 유닛 쓰래기통 +block.payload-source.details = [lightgray][비공식][]유닛 설정해놓고 방치해두면 나중에 랙걸립니다. +block.command-center.details = +block.ground-factory.details = +block.air-factory.details = [lightgray][비공식][]건설&연구 재료는 구리와 납뿐이지만, 정작 유닛을 생산할 땐 실리콘이 필요하다. +block.naval-factory.details = +block.additive-reconstructor.details = +block.multiplicative-reconstructor.details = +block.exponential-reconstructor.details = +block.tetrative-reconstructor.details = +block.switch.details = +block.micro-processor.details = +block.logic-processor.details = +block.hyper-processor.details = +block.memory-cell.details = +block.memory-bank.details = +block.logic-display.details = +block.large-logic-display.details = +block.interplanetary-accelerator.details = #유닛 -unit.dagger.details = 이전에 디거란 이명으로 종교가 생겼었다. -unit.mace.details = -unit.fortress.details = -unit.scepter.details = -unit.reign.details = -unit.nova.details = -unit.pulsar.details = -unit.quasar.details = -unit.vela.details = -unit.corvus.details = 정말 느리다. -unit.crawler.details = 최근에 자폭 AI가 향상되면서 컨베이어로 자폭을 유도할 수 없게 되었다. -unit.atrax.details = -unit.spiroct.details = -unit.arkyid.details = -unit.toxopid.details = +unit.dagger.details = [lightgray][비공식][]이전에 디거란 이명으로 종교가 생겼었다. +unit.mace.details = +unit.fortress.details = +unit.scepter.details = +unit.reign.details = +unit.nova.details = +unit.pulsar.details = +unit.quasar.details = +unit.vela.details = +unit.corvus.details = [lightgray][비공식][]정말 느리다. +unit.crawler.details = [lightgray][비공식][]최근에 자폭 AI가 향상되면서 컨베이어로 자폭을 유도할 수 없게 되었다. 분배기를 대신 쓰자. +unit.atrax.details = +unit.spiroct.details = +unit.arkyid.details = +unit.toxopid.details = unit.flare.details = -unit.horizon.details = -unit.zenith.details = -unit.antumbra.details = -unit.eclipse.details = -unit.mono.details = -unit.poly.details = -unit.mega.details = -unit.quad.details = -unit.oct.details = -unit.risso.details = 뭉치면 연사력이 무시무시하다. -unit.minke.details = -unit.bryde.details = -unit.sei.details = -unit.omura.details = -unit.alpha.details = -unit.beta.details = -unit.gamma.details = +unit.horizon.details = +unit.zenith.details = +unit.antumbra.details = +unit.eclipse.details = +unit.mono.details = +unit.poly.details = +unit.mega.details = +unit.quad.details = +unit.oct.details = +unit.risso.details = [lightgray][비공식][]뭉치면 연사력이 무시무시하다. +unit.minke.details = +unit.bryde.details = +unit.sei.details = [lightgray][비공식][]세이 sei! +unit.omura.details = +unit.retusa.details = [lightgray][비공식][]바다를 지뢰로 뒤덮어보죠. +unit.oxynoe.details = +unit.cyerce.details = [lightgray][비공식][]폭죽놀이다! +unit.aegires.details = [lightgray][비공식][]플레이어가 할 수 있는건 운전과 공사뿐... +unit.navanax.details = [lightgray][비공식][]플레이어에게 잠깐의 섬광뽕을 입힙니다. +unit.alpha.details = +unit.beta.details = +unit.gamma.details = From 151c4f13df5dd07b03ef5baf67afae3d918cece9 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 5 Jun 2021 08:57:25 -0400 Subject: [PATCH 65/69] Fixed #5362 --- core/src/mindustry/logic/LCanvas.java | 1 - core/src/mindustry/net/BeControl.java | 3 ++- core/src/mindustry/ui/dialogs/BaseDialog.java | 8 +++++++- desktop/build.gradle | 6 +++--- 4 files changed, 12 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/logic/LCanvas.java b/core/src/mindustry/logic/LCanvas.java index e6ca89e23b..1be513c7de 100644 --- a/core/src/mindustry/logic/LCanvas.java +++ b/core/src/mindustry/logic/LCanvas.java @@ -112,7 +112,6 @@ public class LCanvas extends Table{ jumps.cullable = false; }).grow().get(); - //pane.setClip(false); pane.setFlickScroll(false); //load old scroll percent diff --git a/core/src/mindustry/net/BeControl.java b/core/src/mindustry/net/BeControl.java index 588d35cfc7..318ebe04d0 100644 --- a/core/src/mindustry/net/BeControl.java +++ b/core/src/mindustry/net/BeControl.java @@ -7,6 +7,7 @@ import arc.func.*; import arc.util.*; import arc.util.async.*; import arc.util.serialization.*; +import mindustry.*; import mindustry.core.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -39,7 +40,7 @@ public class BeControl{ public BeControl(){ if(active()){ Timer.schedule(() -> { - if(checkUpdates && !mobile){ + if(Vars.clientLoaded && checkUpdates && !mobile){ checkUpdate(t -> {}); } }, updateInterval, updateInterval); diff --git a/core/src/mindustry/ui/dialogs/BaseDialog.java b/core/src/mindustry/ui/dialogs/BaseDialog.java index 42fb7ac7ff..b99b164ca4 100644 --- a/core/src/mindustry/ui/dialogs/BaseDialog.java +++ b/core/src/mindustry/ui/dialogs/BaseDialog.java @@ -4,6 +4,7 @@ import arc.*; import arc.scene.ui.*; import arc.util.*; import mindustry.core.GameState.*; +import mindustry.game.EventType.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -43,7 +44,12 @@ public class BaseDialog extends Dialog{ } protected void onResize(Runnable run){ - resized(run); + Events.on(ResizeEvent.class, event -> { + if(isShown() && Core.scene.getDialog() == this){ + run.run(); + updateScrollFocus(); + } + }); } public void addCloseListener(){ diff --git a/desktop/build.gradle b/desktop/build.gradle index 7cd4befa2a..4c8a14f86f 100644 --- a/desktop/build.gradle +++ b/desktop/build.gradle @@ -1,4 +1,4 @@ -sourceSets.main.java.srcDirs = ["src/" ] +sourceSets.main.java.srcDirs = ["src/"] project.ext.mainClassName = "mindustry.desktop.DesktopLauncher" project.ext.assetsDir = new File("../core/assets") @@ -70,9 +70,9 @@ task steamtest(dependsOn: dist){ } //required templates: -//- Windows64 -//- Windows32 (not provided by Packr!) +//- Windows32: Not provided by Packr! This uses Java 8 //required JDKs: +//- Windows64 //- Linux64 //- Mac platforms.each{ platform -> From 9f087214a1d86afed0c8f1819d12285b5c4a7c54 Mon Sep 17 00:00:00 2001 From: genNAowl <68400583+genNAowl@users.noreply.github.com> Date: Sat, 5 Jun 2021 06:01:38 -0700 Subject: [PATCH 66/69] Just a Few Small Changes to Status Effect Stat Displays (#5361) * Messing Around with Status Effect Stats * Longer, but cleaner and less buggy Co-authored-by: Leonwang4234 --- core/src/mindustry/entities/bullet/BulletType.java | 10 ++++++++-- core/src/mindustry/world/meta/StatValues.java | 8 ++++---- 2 files changed, 12 insertions(+), 6 deletions(-) diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 9509424f12..70562ee8df 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -401,8 +401,14 @@ public class BulletType extends Content implements Cloneable{ //pierceBuilding is not enabled by default, because a bullet may want to *not* pierce buildings } - if(lightningType == null){ - lightningType = !collidesAir ? Bullets.damageLightningGround : Bullets.damageLightning; + if(lightning > 0){ + if(status == StatusEffects.none){ + status = StatusEffects.shocked; + } + + if(lightningType == null){ + lightningType = !collidesAir ? Bullets.damageLightningGround : Bullets.damageLightning; + } } } diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index 319dd27eb3..c3d3141332 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -270,10 +270,6 @@ public class StatValues{ sep(bt, "@bullet.incendiary"); } - if(type.status != StatusEffects.none){ - sep(bt, (type.minfo.mod == null ? type.status.emoji() : "") + "[stat]" + type.status.localizedName); - } - if(type.homingPower > 0.01f){ sep(bt, "@bullet.homing"); } @@ -285,6 +281,10 @@ public class StatValues{ if(type.fragBullet != null){ sep(bt, "@bullet.frag"); } + + if(type.status != StatusEffects.none){ + sep(bt, (type.minfo.mod == null ? type.status.emoji() : "") + "[stat]" + type.status.localizedName); + } }).padTop(unit ? 0 : -9).left().get().background(unit ? null : Tex.underline); table.row(); From 2f2dc01c6ba7335c4ed38712b2a52a7a28bff286 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 5 Jun 2021 09:49:00 -0400 Subject: [PATCH 67/69] Heal player cores on start --- core/src/mindustry/core/Logic.java | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index cd9c86810b..981fa4a506 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -184,6 +184,11 @@ public class Logic implements ApplicationListener{ } } } + + //heal player cores on start - fixes any potential core health increases + for(var entity : state.rules.defaultTeam.cores()){ + entity.heal(); + } } public void reset(){ From c80f2d6cf49edd7fbc3ee0d0bbd39f4615ea62eb Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 5 Jun 2021 10:01:15 -0400 Subject: [PATCH 68/69] Heal *all* cores on game start --- core/src/mindustry/core/Logic.java | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/core/Logic.java b/core/src/mindustry/core/Logic.java index 981fa4a506..169ffcc2b9 100644 --- a/core/src/mindustry/core/Logic.java +++ b/core/src/mindustry/core/Logic.java @@ -185,9 +185,11 @@ public class Logic implements ApplicationListener{ } } - //heal player cores on start - fixes any potential core health increases - for(var entity : state.rules.defaultTeam.cores()){ - entity.heal(); + //heal all cores on game start + for(TeamData team : state.teams.getActive()){ + for(var entity : team.cores){ + entity.heal(); + } } } From b4dad32b2bf13b733f0a8d460f5a4f4a30cd3798 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 5 Jun 2021 11:10:26 -0400 Subject: [PATCH 69/69] Status effect particle color pass --- core/src/mindustry/content/Fx.java | 4 ++-- core/src/mindustry/type/StatusEffect.java | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 519a142088..792bae65df 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -963,7 +963,7 @@ public class Fx{ }), overdriven = new Effect(20f, e -> { - color(Pal.accent); + color(e.color); randLenVectors(e.id, 2, 1f + e.fin() * 2f, (x, y) -> { Fill.square(e.x + x, e.y + y, e.fout() * 2.3f + 0.5f); @@ -971,7 +971,7 @@ public class Fx{ }), overclocked = new Effect(50f, e -> { - color(Pal.accent); + color(e.color); Fill.square(e.x, e.y, e.fslope() * 2f, 45f); }), diff --git a/core/src/mindustry/type/StatusEffect.java b/core/src/mindustry/type/StatusEffect.java index c173492ab6..6d4c332a37 100644 --- a/core/src/mindustry/type/StatusEffect.java +++ b/core/src/mindustry/type/StatusEffect.java @@ -120,7 +120,7 @@ public class StatusEffect extends UnlockableContent{ if(effect != Fx.none && Mathf.chanceDelta(effectChance)){ Tmp.v1.rnd(Mathf.range(unit.type.hitSize/2f)); - effect.at(unit.x + Tmp.v1.x, unit.y + Tmp.v1.y); + effect.at(unit.x + Tmp.v1.x, unit.y + Tmp.v1.y, color); } }