From 0c513c737f5c66c8ce799a10ee23b1b82fa77e5a Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Tue, 4 Nov 2025 03:31:16 +0100 Subject: [PATCH 01/31] maybe --- core/src/mindustry/content/Blocks.java | 11 ++++++++--- 1 file changed, 8 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index ae8f695ec0..6090ce80e6 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3895,19 +3895,24 @@ public class Blocks{ coolant = consumeCoolant(0.3f); float brange = range + 10f; + final ShootPattern pattern = ((ShootPattern)shoot); ammo( Items.titanium, new ShrapnelBulletType(){{ - length = brange; + length = brange + 64f; + rangeChange = 64f; + width = 5f; damage = 66f; - ammoMultiplier = 4f; + ammoMultiplier = 2f; width = 17f; reloadMultiplier = 1.3f; + serrations = 9; + serrationSpacing = 20f; }}, Items.thorium, new ShrapnelBulletType(){{ length = brange; damage = 105f; - ammoMultiplier = 5f; + ammoMultiplier = 2f; toColor = Pal.thoriumPink; shootEffect = smokeEffect = Fx.thoriumShoot; }} From 08fd0b4e1851ac5542fa7b68edaf8259e471bcc8 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 9 Nov 2025 05:40:26 +0100 Subject: [PATCH 02/31] scepter --- .../sprites/units/weapons/scepter-mount.png | Bin 0 -> 581 bytes core/src/mindustry/content/UnitTypes.java | 92 ++++++++++++++++-- 2 files changed, 82 insertions(+), 10 deletions(-) create mode 100644 core/assets-raw/sprites/units/weapons/scepter-mount.png diff --git a/core/assets-raw/sprites/units/weapons/scepter-mount.png b/core/assets-raw/sprites/units/weapons/scepter-mount.png new file mode 100644 index 0000000000000000000000000000000000000000..df2b7c82982f48910078078633f50ddf94815221 GIT binary patch literal 581 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_7>k44ofy`glX=O&z`&C3 z=Pl#(?K|_1zgCM^`X*5e2m>C!*ursiL!oLw5W|CiXwfkG`{(SeOvx{?V|%KPybpe&B~E{@ba;ROUUCRJP(TNxHTMCGpla6 zw#tF?Oq4UPMq{Z#&Y1wA88c6_HO#F3`6z_3xapC*Hp6|!Jr?EncUyd4J3H*_@9Q1G z=NW$4mIzF@4i@;WUe6%X{h8B(GwHi8)3r)RRs9uDnCvfEp6iQ$X%F(Wr>mdKI;Vst E0I2b(ga7~l literal 0 HcmV?d00001 diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 90d83fb036..652e6f4043 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -200,11 +200,81 @@ public class UnitTypes{ abilities.add(new ShieldRegenFieldAbility(25f, 250f, 60f * 1, 60f)); - BulletType smallBullet = new BasicBulletType(3f, 10){{ - width = 7f; - height = 9f; - lifetime = 50f; - }}; + BulletType smallBullet = new RailBulletType(){{ + length = 150f; + damage = 15f; + pierceArmor = true; + pierceDamageFactor = 0.8f; + hitColor = Pal.bulletYellowBack; + hitEffect = endEffect = Fx.hitBulletColor; + + smokeEffect = Fx.colorSpark; + + endEffect = new Effect(14f, e -> { + color(e.color); + Drawf.tri(e.x, e.y, e.fout() * 1.5f, 5f, e.rotation); + }); + + shootEffect = new MultiEffect( + new Effect(5, e -> { + color(e.color); + float w = 1.2f + 7 * e.fout(); + + Drawf.tri(e.x, e.y, w, 30f * e.fout(), e.rotation); + color(e.color); + + for(int i : Mathf.signs){ + Drawf.tri(e.x, e.y, w * 0.9f, 18f * e.fout(), e.rotation + i * 90f); + } + + Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); + }) + ,new Effect(2, e -> { + Color color = Pal.bulletYellow; + + color(color); + float w = 1.2f + 7 * e.fout(); + + Drawf.tri(e.x, e.y, w, 30f * e.fout(), e.rotation); + color(color); + + for(int i : Mathf.signs){ + Drawf.tri(e.x, e.y, w * 0.9f, 18f * e.fout(), e.rotation + i * 90f); + } + + Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); + })); + + lineEffect = new Effect(20f, e -> { + if(!(e.data instanceof Vec2 v)) return; + + color(e.color); + stroke(e.fout() * 0.9f + 0.6f); + + Fx.rand.setSeed(e.id); + for(int i = 0; i < 7; i++){ + Fx.v.trns(e.rotation, Fx.rand.random(8f, v.dst(e.x, e.y) - 8f)); + Lines.lineAngleCenter(e.x + Fx.v.x, e.y + Fx.v.y, e.rotation + e.finpow(), e.foutpowdown() * 20f * Fx.rand.random(0.5f, 1f) + 0.3f); + } + + e.scaled(14f, b -> { + stroke(b.fout() * 1.5f); + color(e.color); + Lines.line(e.x, e.y, v.x, v.y); + }); + }); + + fragBullets = 1; + fragBullet = new BombBulletType(27f, 25f){{ + width = 8f; + height = 12f; + hitEffect = Fx.flakExplosion; + shootEffect = Fx.none; + smokeEffect = Fx.none; + + damage = splashDamage * 0.5f; + }}; + }}; weapons.add( new Weapon("scepter-weapon"){{ @@ -222,7 +292,7 @@ public class UnitTypes{ shoot.shots = 3; shoot.shotDelay = 4f; - bullet = new BasicBulletType(8f, 80){{ + bullet = new BasicBulletType(8f, 70){{ width = 11f; height = 20f; lifetime = 27f; @@ -235,19 +305,21 @@ public class UnitTypes{ }}; }}, - new Weapon("mount-weapon"){{ - reload = 13f; + new Weapon("scepter-mount"){{ + reload = 10f; x = 8.5f; y = 6f; rotate = true; + shootSound = Sounds.shootSnap; ejectEffect = Fx.casing1; bullet = smallBullet; }}, - new Weapon("mount-weapon"){{ - reload = 16f; + new Weapon("scepter-mount"){{ + reload = 13f; x = 8.5f; y = -7f; rotate = true; + shootSound = Sounds.shootSnap; ejectEffect = Fx.casing1; bullet = smallBullet; }} From e5ef8e68fc4ab2a79df8b15f645784cc07101576 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 9 Nov 2025 05:52:54 +0100 Subject: [PATCH 03/31] ugh --- core/src/mindustry/content/UnitTypes.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index c26613bc28..278f7646e1 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -14,6 +14,7 @@ import mindustry.entities.abilities.*; import mindustry.entities.bullet.*; import mindustry.entities.effect.*; import mindustry.entities.part.*; +import mindustry.entities.part.DrawPart.PartProgress; import mindustry.entities.pattern.*; import mindustry.gen.*; import mindustry.graphics.*; From 1346f567330ec77e73505351a301f308b7178483 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 17 Nov 2025 03:59:01 +0100 Subject: [PATCH 04/31] please build from safety thx --- core/src/mindustry/ai/types/BuilderAI.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/ai/types/BuilderAI.java b/core/src/mindustry/ai/types/BuilderAI.java index 87bf7ad2a4..7bbf1dfa32 100644 --- a/core/src/mindustry/ai/types/BuilderAI.java +++ b/core/src/mindustry/ai/types/BuilderAI.java @@ -121,9 +121,9 @@ public class BuilderAI extends AIController{ Build.validPlace(req.block, unit.team(), req.x, req.y, req.rotation))); if(valid){ - float range = Math.min(unit.type.buildRange - 20f, 100f); + float range = Math.min(unit.type.buildRange - unit.type.hitSize * 2f, buildRadius); //move toward the plan - moveTo(req.tile(), range - 10f, 20f); + moveTo(req.tile(), range, 20f); moving = !unit.within(req.tile(), range); }else{ //discard invalid plan From b3901651d051bf36058d6ecca18d8772f7cba58b Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 17 Nov 2025 04:05:32 +0100 Subject: [PATCH 05/31] hmm --- core/src/mindustry/content/UnitTypes.java | 93 +++-------------------- 1 file changed, 10 insertions(+), 83 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 278f7646e1..1e67543989 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -14,7 +14,6 @@ import mindustry.entities.abilities.*; import mindustry.entities.bullet.*; import mindustry.entities.effect.*; import mindustry.entities.part.*; -import mindustry.entities.part.DrawPart.PartProgress; import mindustry.entities.pattern.*; import mindustry.gen.*; import mindustry.graphics.*; @@ -201,81 +200,11 @@ public class UnitTypes{ abilities.add(new ShieldRegenFieldAbility(25f, 250f, 60f * 1, 60f)); - BulletType smallBullet = new RailBulletType(){{ - length = 150f; - damage = 15f; - pierceArmor = true; - pierceDamageFactor = 0.8f; - hitColor = Pal.bulletYellowBack; - hitEffect = endEffect = Fx.hitBulletColor; - - smokeEffect = Fx.colorSpark; - - endEffect = new Effect(14f, e -> { - color(e.color); - Drawf.tri(e.x, e.y, e.fout() * 1.5f, 5f, e.rotation); - }); - - shootEffect = new MultiEffect( - new Effect(5, e -> { - color(e.color); - float w = 1.2f + 7 * e.fout(); - - Drawf.tri(e.x, e.y, w, 30f * e.fout(), e.rotation); - color(e.color); - - for(int i : Mathf.signs){ - Drawf.tri(e.x, e.y, w * 0.9f, 18f * e.fout(), e.rotation + i * 90f); - } - - Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); - }) - ,new Effect(2, e -> { - Color color = Pal.bulletYellow; - - color(color); - float w = 1.2f + 7 * e.fout(); - - Drawf.tri(e.x, e.y, w, 30f * e.fout(), e.rotation); - color(color); - - for(int i : Mathf.signs){ - Drawf.tri(e.x, e.y, w * 0.9f, 18f * e.fout(), e.rotation + i * 90f); - } - - Drawf.tri(e.x, e.y, w, 4f * e.fout(), e.rotation + 180f); - })); - - lineEffect = new Effect(20f, e -> { - if(!(e.data instanceof Vec2 v)) return; - - color(e.color); - stroke(e.fout() * 0.9f + 0.6f); - - Fx.rand.setSeed(e.id); - for(int i = 0; i < 7; i++){ - Fx.v.trns(e.rotation, Fx.rand.random(8f, v.dst(e.x, e.y) - 8f)); - Lines.lineAngleCenter(e.x + Fx.v.x, e.y + Fx.v.y, e.rotation + e.finpow(), e.foutpowdown() * 20f * Fx.rand.random(0.5f, 1f) + 0.3f); - } - - e.scaled(14f, b -> { - stroke(b.fout() * 1.5f); - color(e.color); - Lines.line(e.x, e.y, v.x, v.y); - }); - }); - - fragBullets = 1; - fragBullet = new BombBulletType(27f, 25f){{ - width = 8f; - height = 12f; - hitEffect = Fx.flakExplosion; - shootEffect = Fx.none; - smokeEffect = Fx.none; - - damage = splashDamage * 0.5f; - }}; - }}; + BulletType smallBullet = new BasicBulletType(3f, 10){{ + width = 7f; + height = 9f; + lifetime = 50f; + }}; weapons.add( new Weapon("scepter-weapon"){{ @@ -293,7 +222,7 @@ public class UnitTypes{ shoot.shots = 3; shoot.shotDelay = 4f; - bullet = new BasicBulletType(8f, 70){{ + bullet = new BasicBulletType(8f, 80){{ width = 11f; height = 20f; lifetime = 27f; @@ -306,21 +235,19 @@ public class UnitTypes{ }}; }}, - new Weapon("scepter-mount"){{ - reload = 10f; + new Weapon("mount-weapon"){{ + reload = 13f; x = 8.5f; y = 6f; rotate = true; - shootSound = Sounds.shootSnap; ejectEffect = Fx.casing1; bullet = smallBullet; }}, - new Weapon("scepter-mount"){{ - reload = 13f; + new Weapon("mount-weapon"){{ + reload = 16f; x = 8.5f; y = -7f; rotate = true; - shootSound = Sounds.shootSnap; ejectEffect = Fx.casing1; bullet = smallBullet; }} From 661d1331767e148ae431ff9ebad871d6b24b663d Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 17 Nov 2025 04:09:23 +0100 Subject: [PATCH 06/31] some basic poly nerfs (no hp nerf yet) --- core/src/mindustry/content/Blocks.java | 1 - core/src/mindustry/content/UnitTypes.java | 7 ++++--- 2 files changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 6090ce80e6..bb792f8631 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3895,7 +3895,6 @@ public class Blocks{ coolant = consumeCoolant(0.3f); float brange = range + 10f; - final ShootPattern pattern = ((ShootPattern)shoot); ammo( Items.titanium, new ShrapnelBulletType(){{ diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 1e67543989..8c365f727c 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1283,7 +1283,8 @@ public class UnitTypes{ accel = 0.1f; range = 130f; health = 400; - buildSpeed = 0.5f; + armor = 1f; + buildSpeed = 0.3f; engineOffset = 6.5f; hitSize = 9f; lowAltitude = true; @@ -1292,7 +1293,7 @@ public class UnitTypes{ mineTier = 2; mineSpeed = 3.5f; - abilities.add(new RepairFieldAbility(5f, 60f * 8, 50f)); + abilities.add(new RepairFieldAbility(5f, 112f, 50f)); weapons.add(new Weapon("poly-weapon"){{ top = false; @@ -1318,7 +1319,7 @@ public class UnitTypes{ frontColor = Color.white; hitSound = Sounds.none; - healPercent = 5.5f; + healPercent = 3f; collidesTeam = true; reflectable = false; backColor = Pal.heal; From 2e88aacfacc3a78557a05abbc77e2beb55f1b249 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 17 Nov 2025 04:22:10 +0100 Subject: [PATCH 07/31] some fuse changes --- core/src/mindustry/content/Blocks.java | 3 ++- core/src/mindustry/entities/bullet/BulletType.java | 3 +++ core/src/mindustry/world/blocks/defense/turrets/Turret.java | 4 +++- 3 files changed, 8 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index bb792f8631..8bdf430314 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3901,12 +3901,13 @@ public class Blocks{ length = brange + 64f; rangeChange = 64f; width = 5f; - damage = 66f; + damage = 60f; ammoMultiplier = 2f; width = 17f; reloadMultiplier = 1.3f; serrations = 9; serrationSpacing = 20f; + shootPattern = new ShootSpread(3, 10f); }}, Items.thorium, new ShrapnelBulletType(){{ length = brange; diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 63a1092317..6b0bcb70d8 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -15,6 +15,7 @@ import mindustry.content.*; import mindustry.ctype.*; import mindustry.entities.*; import mindustry.entities.part.*; +import mindustry.entities.pattern.ShootPattern; import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.gen.*; @@ -72,6 +73,8 @@ public class BulletType extends Content implements Cloneable{ public Effect despawnEffect = Fx.hitBulletSmall; /** Effect created when shooting. */ public Effect shootEffect = Fx.shootSmall; + /** Pattern used to shoot this bullet. If null, uses turret's default pattern. */ + public @Nullable ShootPattern shootPattern = null; /** Effect created when charging starts; only usable in single-shot weapons with a firstShotDelay / shotDelay. */ public Effect chargeEffect = Fx.none; /** Extra smoke effect created when shooting. */ diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index 105be42df5..7f50fa0720 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -695,7 +695,9 @@ public class Turret extends ReloadTurret{ type.chargeEffect.at(bulletX, bulletY, rotation); } - shoot.shoot(barrelCounter, (xOffset, yOffset, angle, delay, mover) -> { + ShootPattern pattern = type.shootPattern != null ? type.shootPattern : shoot; + + pattern.shoot(barrelCounter, (xOffset, yOffset, angle, delay, mover) -> { queuedBullets++; int barrel = barrelCounter; From c106c79b8c45a6b49522700657ae211543865dbe Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 17 Nov 2025 04:25:32 +0100 Subject: [PATCH 08/31] tiny fix --- .../sprites/units/weapons/scepter-mount.png | Bin 581 -> 0 bytes .../src/mindustry/entities/bullet/BulletType.java | 2 +- 2 files changed, 1 insertion(+), 1 deletion(-) delete mode 100644 core/assets-raw/sprites/units/weapons/scepter-mount.png diff --git a/core/assets-raw/sprites/units/weapons/scepter-mount.png b/core/assets-raw/sprites/units/weapons/scepter-mount.png deleted file mode 100644 index df2b7c82982f48910078078633f50ddf94815221..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 581 zcmeAS@N?(olHy`uVBq!ia0y~yU@!n-4rT@hhJ-tuTNxM_7>k44ofy`glX=O&z`&C3 z=Pl#(?K|_1zgCM^`X*5e2m>C!*ursiL!oLw5W|CiXwfkG`{(SeOvx{?V|%KPybpe&B~E{@ba;ROUUCRJP(TNxHTMCGpla6 zw#tF?Oq4UPMq{Z#&Y1wA88c6_HO#F3`6z_3xapC*Hp6|!Jr?EncUyd4J3H*_@9Q1G z=NW$4mIzF@4i@;WUe6%X{h8B(GwHi8)3r)RRs9uDnCvfEp6iQ$X%F(Wr>mdKI;Vst E0I2b(ga7~l diff --git a/core/src/mindustry/entities/bullet/BulletType.java b/core/src/mindustry/entities/bullet/BulletType.java index 6b0bcb70d8..ed81fa1adc 100644 --- a/core/src/mindustry/entities/bullet/BulletType.java +++ b/core/src/mindustry/entities/bullet/BulletType.java @@ -15,7 +15,7 @@ import mindustry.content.*; import mindustry.ctype.*; import mindustry.entities.*; import mindustry.entities.part.*; -import mindustry.entities.pattern.ShootPattern; +import mindustry.entities.pattern.*; import mindustry.game.EventType.*; import mindustry.game.*; import mindustry.gen.*; From 3f5457cc3315660b7fdfa6f2e4df1d16c1a369f3 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 17 Nov 2025 04:45:01 +0100 Subject: [PATCH 09/31] fortress and minke range nerf --- core/src/mindustry/content/UnitTypes.java | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 8c365f727c..5e66314964 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -172,7 +172,7 @@ public class UnitTypes{ bullet = new ArtilleryBulletType(2f, 20, "shell"){{ hitEffect = Fx.blastExplosion; knockback = 0.8f; - lifetime = 120f; + lifetime = 114f; width = height = 14f; collides = true; collidesTiles = true; @@ -1586,7 +1586,7 @@ public class UnitTypes{ bullet = new ArtilleryBulletType(3f, 20, "shell"){{ hitEffect = Fx.flakExplosion; knockback = 0.8f; - lifetime = 80f; + lifetime = 73.5f; width = height = 11f; collidesTiles = false; splashDamageRadius = 30f * 0.75f; From 2dd9e7ade39bc1acd4c723a50b2b01de881d6789 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Tue, 18 Nov 2025 05:53:51 +0100 Subject: [PATCH 10/31] forgot about this --- core/src/mindustry/content/Blocks.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 8bdf430314..1471d6a31e 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3905,6 +3905,7 @@ public class Blocks{ ammoMultiplier = 2f; width = 17f; reloadMultiplier = 1.3f; + pierceCap = 3; serrations = 9; serrationSpacing = 20f; shootPattern = new ShootSpread(3, 10f); From bb9f5828938be5d13b3764048f254f92e0eed799 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Wed, 26 Nov 2025 16:06:10 +0100 Subject: [PATCH 11/31] arkyid minor buff --- core/src/mindustry/content/UnitTypes.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 5e66314964..023bbac39a 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -840,6 +840,7 @@ public class UnitTypes{ lightningLength = 10; smokeEffect = Fx.shootBigSmoke2; shake = 5f; + maxRange = 190f; status = StatusEffects.sapped; statusDuration = 60f * 10; From 70f0a8828345633161c803246d9dfdcf9fd30bb0 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Thu, 27 Nov 2025 21:27:14 +0100 Subject: [PATCH 12/31] humongous rtg buff --- core/src/mindustry/content/Blocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 1471d6a31e..2f87ceea71 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2568,7 +2568,7 @@ public class Blocks{ }}; rtgGenerator = new ConsumeGenerator("rtg-generator"){{ - requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 25, Items.plastanium, 75, Items.thorium, 50)); + requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 15, Items.plastanium, 40, Items.thorium, 50)); size = 2; powerProduction = 4.5f; itemDuration = 60 * 14f; From ee7f4a53ac96440afe0fd10d13f0af99b1d51456 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Fri, 28 Nov 2025 22:29:36 +0100 Subject: [PATCH 13/31] shale buff to 200% --- core/src/mindustry/content/Blocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 2f87ceea71..dec79c8d77 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -567,7 +567,7 @@ public class Blocks{ shale = new Floor("shale"){{ variants = 3; - attributes.set(Attribute.oil, 1.6f); + attributes.set(Attribute.oil, 2f); }}; moss = new Floor("moss"){{ From c881cd969015d1f145be2d3de91178d56c4a5413 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sat, 29 Nov 2025 21:01:59 +0100 Subject: [PATCH 14/31] cruc scale output with efficiency --- core/src/mindustry/content/Blocks.java | 1 + .../blocks/production/AttributeCrafter.java | 37 +++++++++++++++++++ .../blocks/production/GenericCrafter.java | 9 +++-- 3 files changed, 44 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index dec79c8d77..9aaeee4675 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1077,6 +1077,7 @@ public class Blocks{ size = 3; hasPower = true; hasLiquids = false; + scaleOutput = true; itemCapacity = 30; boostScale = 0.15f; drawer = new DrawMulti(new DrawDefault(), new DrawFlame(Color.valueOf("ffef99"))); diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 0cff4eb1b7..e33837d63f 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -3,6 +3,7 @@ package mindustry.world.blocks.production; import arc.*; import mindustry.game.*; import mindustry.graphics.*; +import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; import mindustry.world.meta.*; @@ -17,6 +18,8 @@ public class AttributeCrafter extends GenericCrafter{ public float displayEfficiencyScale = 1f; public boolean displayEfficiency = true; public boolean scaleLiquidConsumption = false; + /** Scale output ammount on efficiency */ + public boolean scaleOutput = false; public AttributeCrafter(String name){ super(name); @@ -75,6 +78,40 @@ public class AttributeCrafter extends GenericCrafter{ return scaleLiquidConsumption ? efficiencyMultiplier() : super.efficiencyScale(); } + public float scaleOutputs(float amount){ + return scaleOutput ? Math.min(itemCapacity, Math.round(amount * efficiencyMultiplier())) : amount; + } + + @Override + public void craftOutputs(){ + if(outputItems != null){ + for(var output : outputItems){ + for(int i = 0; i < scaleOutputs(output.amount); i++){ + offload(output.item); + } + } + } + } + + @Override + public void dumpOutputs(){ + if(outputItems != null && timer(timerDump, dumpTime / timeScale)){ + for(ItemStack output : outputItems){ + for(int i = 0; i < scaleOutputs(output.amount); i++){ + dump(output.item); + } + } + } + + if(outputLiquids != null){ + for(int i = 0; i < outputLiquids.length; i++){ + int dir = liquidOutputDirections.length > i ? liquidOutputDirections[i] : -1; + + dumpLiquid(outputLiquids[i].liquid, 2f, dir); + } + } + } + @Override public void pickedUp(){ attrsum = 0f; diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 4bdd25d7b4..50ab68e0e3 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -287,9 +287,7 @@ public class GenericCrafter extends Block{ return totalProgress; } - public void craft(){ - consume(); - + public void craftOutputs(){ if(outputItems != null){ for(var output : outputItems){ for(int i = 0; i < output.amount; i++){ @@ -297,6 +295,11 @@ public class GenericCrafter extends Block{ } } } + } + + public void craft(){ + consume(); + craftOutputs(); if(wasVisible){ craftEffect.at(x, y); From 93fd64608bff1bff47e96c5a20c96e3f15e54e75 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 30 Nov 2025 20:22:01 +0100 Subject: [PATCH 15/31] I hate this --- .../blocks/production/AttributeCrafter.java | 41 +++++-------------- .../blocks/production/GenericCrafter.java | 27 +++++++----- 2 files changed, 27 insertions(+), 41 deletions(-) diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index e33837d63f..7e25631ce3 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -1,6 +1,7 @@ package mindustry.world.blocks.production; import arc.*; +import arc.math.*; import mindustry.game.*; import mindustry.graphics.*; import mindustry.type.*; @@ -18,7 +19,7 @@ public class AttributeCrafter extends GenericCrafter{ public float displayEfficiencyScale = 1f; public boolean displayEfficiency = true; public boolean scaleLiquidConsumption = false; - /** Scale output ammount on efficiency */ + /** Scale output amount on efficiency */ public boolean scaleOutput = false; public AttributeCrafter(String name){ @@ -63,6 +64,8 @@ public class AttributeCrafter extends GenericCrafter{ public class AttributeCrafterBuild extends GenericCrafterBuild{ public float attrsum; + public float accumulator; + public float scaledOutput, lastScaledOutput; @Override public float getProgressIncrease(float base){ @@ -78,38 +81,16 @@ public class AttributeCrafter extends GenericCrafter{ return scaleLiquidConsumption ? efficiencyMultiplier() : super.efficiencyScale(); } - public float scaleOutputs(float amount){ - return scaleOutput ? Math.min(itemCapacity, Math.round(amount * efficiencyMultiplier())) : amount; - } - @Override - public void craftOutputs(){ - if(outputItems != null){ - for(var output : outputItems){ - for(int i = 0; i < scaleOutputs(output.amount); i++){ - offload(output.item); - } - } - } - } + public float scaleOutput(float amount, boolean accumulate){ + scaledOutput = amount * efficiencyMultiplier(); - @Override - public void dumpOutputs(){ - if(outputItems != null && timer(timerDump, dumpTime / timeScale)){ - for(ItemStack output : outputItems){ - for(int i = 0; i < scaleOutputs(output.amount); i++){ - dump(output.item); - } - } - } - - if(outputLiquids != null){ - for(int i = 0; i < outputLiquids.length; i++){ - int dir = liquidOutputDirections.length > i ? liquidOutputDirections[i] : -1; - - dumpLiquid(outputLiquids[i].liquid, 2f, dir); - } + if(accumulate){ + accumulator = accumulator > 1f ? accumulator - 1f : accumulator + scaledOutput % 1f; } + + lastScaledOutput = scaleOutput ? Math.min(itemCapacity, scaledOutput + Mathf.floor(accumulator)) : amount; + return lastScaledOutput; } @Override diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index 50ab68e0e3..cb75fd9a22 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -193,7 +193,7 @@ public class GenericCrafter extends Block{ public boolean shouldConsume(){ if(outputItems != null){ for(var output : outputItems){ - if(items.get(output.item) + output.amount > itemCapacity){ + if(items.get(output.item) + scaleOutput(output.amount) > itemCapacity){ return false; } } @@ -263,7 +263,7 @@ public class GenericCrafter extends Block{ if(outputLiquids != null){ max = 0f; for(var s : outputLiquids){ - float value = (liquidCapacity - liquids.get(s.liquid)) / (s.amount * edelta()); + float value = (liquidCapacity - liquids.get(s.liquid)) / (scaleOutput(s.amount) * edelta()); scaling = Math.min(scaling, value); max = Math.max(max, value); } @@ -287,19 +287,24 @@ public class GenericCrafter extends Block{ return totalProgress; } - public void craftOutputs(){ - if(outputItems != null){ - for(var output : outputItems){ - for(int i = 0; i < output.amount; i++){ - offload(output.item); - } - } - } + public float scaleOutput(float amount){ + return scaleOutput(amount, false); + } + + public float scaleOutput(float amount, boolean accumulate){ + return amount; } public void craft(){ consume(); - craftOutputs(); + + if(outputItems != null){ + for(var output : outputItems){ + for(int i = 0; i < scaleOutput(output.amount, true); i++){ + offload(output.item); + } + } + } if(wasVisible){ craftEffect.at(x, y); From 0d0bd2066015e7d6dedda1a821b4a226b89e5622 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 1 Dec 2025 14:26:24 +0100 Subject: [PATCH 16/31] AAAAAAAAAAAAAA --- core/src/mindustry/content/Blocks.java | 2 +- .../blocks/production/AttributeCrafter.java | 27 +++++++++++-------- .../blocks/production/GenericCrafter.java | 8 +++--- 3 files changed, 21 insertions(+), 16 deletions(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 9aaeee4675..8a91ad2519 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1077,7 +1077,7 @@ public class Blocks{ size = 3; hasPower = true; hasLiquids = false; - scaleOutput = true; + scaledMultiplier = 1f; itemCapacity = 30; boostScale = 0.15f; drawer = new DrawMulti(new DrawDefault(), new DrawFlame(Color.valueOf("ffef99"))); diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 7e25631ce3..9727f4f26c 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -4,7 +4,6 @@ import arc.*; import arc.math.*; import mindustry.game.*; import mindustry.graphics.*; -import mindustry.type.*; import mindustry.ui.*; import mindustry.world.*; import mindustry.world.meta.*; @@ -19,8 +18,8 @@ public class AttributeCrafter extends GenericCrafter{ public float displayEfficiencyScale = 1f; public boolean displayEfficiency = true; public boolean scaleLiquidConsumption = false; - /** Scale output amount on efficiency */ - public boolean scaleOutput = false; + /** Scaled output multiplier, scales with efficiency. <=0 to disable. */ + public float scaledMultiplier = 0f; public AttributeCrafter(String name){ super(name); @@ -64,8 +63,9 @@ public class AttributeCrafter extends GenericCrafter{ public class AttributeCrafterBuild extends GenericCrafterBuild{ public float attrsum; - public float accumulator; - public float scaledOutput, lastScaledOutput; + public float accumulator, lastAccumulator; + public float scaledOutput; + public int scaledInt; @Override public float getProgressIncrease(float base){ @@ -82,15 +82,20 @@ public class AttributeCrafter extends GenericCrafter{ } @Override - public float scaleOutput(float amount, boolean accumulate){ - scaledOutput = amount * efficiencyMultiplier(); + public float scaleOutput(float amount, boolean accumulate, boolean consumer){ + scaledOutput = amount * scaledMultiplier * efficiencyMultiplier(); if(accumulate){ - accumulator = accumulator > 1f ? accumulator - 1f : accumulator + scaledOutput % 1f; + if(consumer){ + scaledInt = Mathf.floor(accumulator + scaledOutput); + }else{ + accumulator += scaledOutput; + scaledInt = Mathf.floor(accumulator); + accumulator -= scaledInt; + } } - - lastScaledOutput = scaleOutput ? Math.min(itemCapacity, scaledOutput + Mathf.floor(accumulator)) : amount; - return lastScaledOutput; + + return scaledMultiplier > 0f ? Math.min(itemCapacity, scaledInt) : amount; } @Override diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index cb75fd9a22..ec47bf1966 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -193,7 +193,7 @@ public class GenericCrafter extends Block{ public boolean shouldConsume(){ if(outputItems != null){ for(var output : outputItems){ - if(items.get(output.item) + scaleOutput(output.amount) > itemCapacity){ + if(items.get(output.item) + scaleOutput(output.amount, true, true) > itemCapacity){ return false; } } @@ -288,10 +288,10 @@ public class GenericCrafter extends Block{ } public float scaleOutput(float amount){ - return scaleOutput(amount, false); + return scaleOutput(amount, false, false); } - public float scaleOutput(float amount, boolean accumulate){ + public float scaleOutput(float amount, boolean accumulate, boolean consumer){ return amount; } @@ -300,7 +300,7 @@ public class GenericCrafter extends Block{ if(outputItems != null){ for(var output : outputItems){ - for(int i = 0; i < scaleOutput(output.amount, true); i++){ + for(int i = 0; i < scaleOutput(output.amount, true, false); i++){ offload(output.item); } } From 26a64c5ff640911d1d3a450f73df1503f81f7e1b Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Fri, 5 Dec 2025 02:45:28 +0100 Subject: [PATCH 17/31] minke changes --- core/src/mindustry/content/UnitTypes.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 023bbac39a..e1f29a5093 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -1563,7 +1563,7 @@ public class UnitTypes{ ejectEffect = Fx.casing1; shootSound = Sounds.shoot; bullet = new FlakBulletType(4.2f, 3){{ - lifetime = 60f; + lifetime = 52.5f; ammoMultiplier = 4f; shootEffect = Fx.shootSmall; width = 6f; From c1625d7e10954ec481dd5d0a06479b7db47193ac Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 21 Dec 2025 03:13:31 +0100 Subject: [PATCH 18/31] if it works it works --- .../src/mindustry/world/blocks/production/AttributeCrafter.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 9727f4f26c..37609f83b4 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -87,7 +87,7 @@ public class AttributeCrafter extends GenericCrafter{ if(accumulate){ if(consumer){ - scaledInt = Mathf.floor(accumulator + scaledOutput); + scaledInt = Mathf.floor(accumulator + scaledOutput) + 1; }else{ accumulator += scaledOutput; scaledInt = Mathf.floor(accumulator); From 9184851f4beb8ee7f7ca8e02a7901b86c67884e7 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 21 Dec 2025 04:56:40 +0100 Subject: [PATCH 19/31] YES IT S NOW FIXED HOLY SHIT --- .../mindustry/world/blocks/production/AttributeCrafter.java | 4 ++-- .../src/mindustry/world/blocks/production/GenericCrafter.java | 3 ++- 2 files changed, 4 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 37609f83b4..5863304263 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -63,7 +63,7 @@ public class AttributeCrafter extends GenericCrafter{ public class AttributeCrafterBuild extends GenericCrafterBuild{ public float attrsum; - public float accumulator, lastAccumulator; + public float accumulator; public float scaledOutput; public int scaledInt; @@ -87,7 +87,7 @@ public class AttributeCrafter extends GenericCrafter{ if(accumulate){ if(consumer){ - scaledInt = Mathf.floor(accumulator + scaledOutput) + 1; + scaledInt = Mathf.floor(accumulator + scaledOutput); }else{ accumulator += scaledOutput; scaledInt = Mathf.floor(accumulator); diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index ec47bf1966..e6cd2bd7bf 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -300,7 +300,8 @@ public class GenericCrafter extends Block{ if(outputItems != null){ for(var output : outputItems){ - for(int i = 0; i < scaleOutput(output.amount, true, false); i++){ + float maxOutput = scaleOutput(output.amount, true, false); + for(int i = 0; i < maxOutput; i++){ offload(output.item); } } From d62705c0cf4475ff9e37198d99a44c798fc3bd27 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 21 Dec 2025 23:18:08 +0100 Subject: [PATCH 20/31] asdj89233yr9rewfhdwe9r23 --- core/assets/bundles/bundle.properties | 1 + core/src/mindustry/content/Blocks.java | 2 +- .../blocks/production/AttributeCrafter.java | 56 +++++++++++++------ .../blocks/production/GenericCrafter.java | 6 +- 4 files changed, 43 insertions(+), 22 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index fc95300e51..a3aaeed8a9 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1159,6 +1159,7 @@ bar.cargounitcap = Cargo Unit Cap Reached bar.drillspeed = Drill Speed: {0}/s bar.pumpspeed = Pump Speed: {0}/s bar.efficiency = Efficiency: {0}% +bar.outputscale = Output: +{0}% bar.boost = Boost: +{0}% bar.powerbuffer = Batteries: {0}/{1} bar.powerbalance = Power: {0}/s diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 8a91ad2519..1cb9097961 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -1077,9 +1077,9 @@ public class Blocks{ size = 3; hasPower = true; hasLiquids = false; - scaledMultiplier = 1f; itemCapacity = 30; boostScale = 0.15f; + outputScale = 0.15f; drawer = new DrawMulti(new DrawDefault(), new DrawFlame(Color.valueOf("ffef99"))); ambientSound = Sounds.smelter; ambientSoundVolume = 0.07f; diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 5863304263..3b157b88ae 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -1,7 +1,6 @@ package mindustry.world.blocks.production; import arc.*; -import arc.math.*; import mindustry.game.*; import mindustry.graphics.*; import mindustry.ui.*; @@ -12,14 +11,15 @@ import mindustry.world.meta.*; public class AttributeCrafter extends GenericCrafter{ public Attribute attribute = Attribute.heat; public float baseEfficiency = 1f; - public float boostScale = 1f; public float maxBoost = 1f; public float minEfficiency = -1f; public float displayEfficiencyScale = 1f; public boolean displayEfficiency = true; + public boolean displayScaledOutput = true; public boolean scaleLiquidConsumption = false; - /** Scaled output multiplier, scales with efficiency. <=0 to disable. */ - public float scaledMultiplier = 0f; + /** Scaled output multiplier, scales with attribute. <=0 to disable. */ + public float outputScale = 0f; + public float boostScale = 1f; public AttributeCrafter(String name){ super(name); @@ -29,23 +29,39 @@ public class AttributeCrafter extends GenericCrafter{ public void drawPlace(int x, int y, int rotation, boolean valid){ super.drawPlace(x, y, rotation, valid); - if(!displayEfficiency) return; + if(!displayEfficiency && !displayScaledOutput) return; - drawPlaceText(Core.bundle.format("bar.efficiency", - (int)((baseEfficiency + Math.min(maxBoost, boostScale * sumAttribute(attribute, x, y))) * 100f)), x, y, valid); + drawPlaceText( + (displayEfficiency ? + Core.bundle.format("bar.efficiency", + (int)((baseEfficiency + Math.min(maxBoost, boostScale * sumAttribute(attribute, x, y))) * 100f)) + : "") + + (displayScaledOutput ? "\n" + + Core.bundle.format("bar.outputscale", + (int)(Math.min(maxBoost, outputScale * sumAttribute(attribute, x, y)) * 100f)) + : ""), x, y, valid); } @Override public void setBars(){ super.setBars(); - if(!displayEfficiency) return; + if(!displayEfficiency && !displayScaledOutput) return; - addBar("efficiency", (AttributeCrafterBuild entity) -> + if(displayEfficiency){ + addBar("efficiency", (AttributeCrafterBuild entity) -> new Bar( - () -> Core.bundle.format("bar.efficiency", (int)(entity.efficiencyMultiplier() * 100 * displayEfficiencyScale)), + () -> Core.bundle.format("bar.efficiency", (int)(entity.efficiencyMultiplier() * 100)), () -> Pal.lightOrange, entity::efficiencyMultiplier)); + } + if(displayScaledOutput){ + addBar("outputscale", (AttributeCrafterBuild entity) -> + new Bar( + () -> Core.bundle.format("bar.outputscale", (int)((entity.outputMultiplier() - baseEfficiency) * 100)), + () -> Pal.lightOrange, + entity::outputMultiplier)); + } } @Override @@ -72,6 +88,10 @@ public class AttributeCrafter extends GenericCrafter{ return super.getProgressIncrease(base) * efficiencyMultiplier(); } + public float outputMultiplier(){ + return baseEfficiency + Math.min(maxBoost, outputScale * attrsum) + attribute.env(); + } + public float efficiencyMultiplier(){ return baseEfficiency + Math.min(maxBoost, boostScale * attrsum) + attribute.env(); } @@ -82,20 +102,20 @@ public class AttributeCrafter extends GenericCrafter{ } @Override - public float scaleOutput(float amount, boolean accumulate, boolean consumer){ - scaledOutput = amount * scaledMultiplier * efficiencyMultiplier(); + public float scaleOutput(float amount, boolean item, boolean accumulate){ + scaledOutput = amount * outputMultiplier(); - if(accumulate){ - if(consumer){ - scaledInt = Mathf.floor(accumulator + scaledOutput); - }else{ + if(item){ + if(accumulate){ accumulator += scaledOutput; - scaledInt = Mathf.floor(accumulator); + scaledInt = (int)(accumulator); accumulator -= scaledInt; + }else{ + scaledInt = (int)(accumulator + scaledOutput); } } - return scaledMultiplier > 0f ? Math.min(itemCapacity, scaledInt) : amount; + return outputScale > 0f ? Math.min(itemCapacity, scaledInt) : amount; } @Override diff --git a/core/src/mindustry/world/blocks/production/GenericCrafter.java b/core/src/mindustry/world/blocks/production/GenericCrafter.java index e6cd2bd7bf..86ddd25459 100644 --- a/core/src/mindustry/world/blocks/production/GenericCrafter.java +++ b/core/src/mindustry/world/blocks/production/GenericCrafter.java @@ -193,7 +193,7 @@ public class GenericCrafter extends Block{ public boolean shouldConsume(){ if(outputItems != null){ for(var output : outputItems){ - if(items.get(output.item) + scaleOutput(output.amount, true, true) > itemCapacity){ + if(items.get(output.item) + scaleOutput(output.amount, true, false) > itemCapacity){ return false; } } @@ -291,7 +291,7 @@ public class GenericCrafter extends Block{ return scaleOutput(amount, false, false); } - public float scaleOutput(float amount, boolean accumulate, boolean consumer){ + public float scaleOutput(float amount, boolean item, boolean accumulate){ return amount; } @@ -300,7 +300,7 @@ public class GenericCrafter extends Block{ if(outputItems != null){ for(var output : outputItems){ - float maxOutput = scaleOutput(output.amount, true, false); + float maxOutput = scaleOutput(output.amount, true, true); for(int i = 0; i < maxOutput; i++){ offload(output.item); } From 51bf275fd275980bba07d5df6a431c8805928531 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Wed, 24 Dec 2025 06:31:15 +0100 Subject: [PATCH 21/31] arc pierce changes --- core/src/mindustry/content/Blocks.java | 1 + core/src/mindustry/entities/Lightning.java | 4 ++++ 2 files changed, 5 insertions(+) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 1cb9097961..22dd115216 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3578,6 +3578,7 @@ public class Blocks{ lightningLength = 25; collidesAir = false; ammoMultiplier = 1f; + pierceCap = 5; //for visual stats only. buildingDamageMultiplier = 0.25f; diff --git a/core/src/mindustry/entities/Lightning.java b/core/src/mindustry/entities/Lightning.java index 0bd26d7ceb..9959298d1a 100644 --- a/core/src/mindustry/entities/Lightning.java +++ b/core/src/mindustry/entities/Lightning.java @@ -73,6 +73,10 @@ public class Lightning{ } }); } + + if(hitter.type.pierceCap > 0 && hit.size >= hitter.type.pierceCap){ + break; + } Unit furthest = Geometry.findFurthest(x, y, entities); From d2d80ec4238a21a010c9b039b75c92c6292be1b7 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Thu, 25 Dec 2025 20:12:49 +0100 Subject: [PATCH 22/31] liquid capacity 120 spectre, 60 to fs and meltdown --- core/src/mindustry/content/Blocks.java | 3 +++ 1 file changed, 3 insertions(+) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 22dd115216..908dd8c68c 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -4188,6 +4188,7 @@ public class Blocks{ envEnabled |= Env.space; coolantMultiplier = 0.4f; + liquidCapacity = 60f; scaledHealth = 150; coolant = consumeCoolant(1f); @@ -4243,6 +4244,7 @@ public class Blocks{ reload = 7f; recoilTime = reload * 2f; coolantMultiplier = 0.5f; + liquidCapacity = 120f; ammoUseEffect = Fx.casing3; range = 260f; inaccuracy = 3f; @@ -4290,6 +4292,7 @@ public class Blocks{ }}; scaledHealth = 200; + liquidCapacity = 60f; coolant = consumeCoolant(0.5f); consumePower(17f); }}; From a0a4ffc14f922dff61e2bf1b258fd322b9703ecc Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Mon, 29 Dec 2025 04:09:45 +0100 Subject: [PATCH 23/31] removerafterpierce fase --- core/src/mindustry/entities/bullet/ShrapnelBulletType.java | 1 + 1 file changed, 1 insertion(+) diff --git a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java index 349b2adc8c..f1837da143 100644 --- a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java +++ b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java @@ -29,6 +29,7 @@ public class ShrapnelBulletType extends BulletType{ pierce = true; hittable = false; absorbable = false; + removeAfterPierce = false; lightOpacity = 0.6f; } From bc07e961d8f981cfa7893920bc756ed5895e1d89 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 4 Jan 2026 17:32:07 +0100 Subject: [PATCH 24/31] airblast cost increase --- core/src/mindustry/content/Blocks.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 908dd8c68c..faab5d65bc 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2874,7 +2874,7 @@ public class Blocks{ }}; blastDrill = new Drill("blast-drill"){{ - requirements(Category.production, with(Items.copper, 65, Items.silicon, 60, Items.titanium, 50, Items.thorium, 75)); + requirements(Category.production, with(Items.copper, 90, Items.silicon, 90, Items.titanium, 75, Items.thorium, 125)); drillTime = 280; size = 4; drawRim = true; From 2e0417b0e5124481f61377c740131409f1ebf831 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:56:25 +0100 Subject: [PATCH 25/31] am I finally free? --- core/assets/bundles/bundle.properties | 4 +- core/src/mindustry/content/Blocks.java | 19 ++-- .../entities/bullet/ShrapnelBulletType.java | 1 - .../blocks/production/AttributeCrafter.java | 21 ++--- core/src/mindustry/world/meta/StatValues.java | 89 +++++++++++++++++-- core/src/mindustry/world/meta/Stats.java | 4 + 6 files changed, 107 insertions(+), 31 deletions(-) diff --git a/core/assets/bundles/bundle.properties b/core/assets/bundles/bundle.properties index 301f5c878f..5a42508dd7 100644 --- a/core/assets/bundles/bundle.properties +++ b/core/assets/bundles/bundle.properties @@ -1102,7 +1102,7 @@ stat.buildspeedmultiplier = Build Speed Multiplier stat.reactive = Reacts stat.immunities = Immunities stat.healing = Healing -stat.efficiency = [stat]{0}% Efficiency +stat.efficiency = {0}% Efficiency ability.forcefield = Force Field ability.forcefield.description = Projects a force shield that absorbs bullets @@ -1160,7 +1160,7 @@ bar.cargounitcap = Cargo Unit Cap Reached bar.drillspeed = Drill Speed: {0}/s bar.pumpspeed = Pump Speed: {0}/s bar.efficiency = Efficiency: {0}% -bar.outputscale = Output: +{0}% +bar.yield = Yield: +{0}% bar.boost = Boost: +{0}% bar.powerbuffer = Batteries: {0}/{1} bar.powerbalance = Power: {0}/s diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 1500f6a266..949959a296 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -2594,7 +2594,7 @@ public class Blocks{ }}; rtgGenerator = new ConsumeGenerator("rtg-generator"){{ - requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 15, Items.plastanium, 40, Items.thorium, 50)); + requirements(Category.power, with(Items.lead, 100, Items.silicon, 75, Items.phaseFabric, 25, Items.plastanium, 75, Items.thorium, 50)); size = 2; powerProduction = 4.5f; itemDuration = 60 * 14f; @@ -2899,7 +2899,7 @@ public class Blocks{ }}; blastDrill = new Drill("blast-drill"){{ - requirements(Category.production, with(Items.copper, 90, Items.silicon, 90, Items.titanium, 75, Items.thorium, 125)); + requirements(Category.production, with(Items.copper, 65, Items.silicon, 60, Items.titanium, 50, Items.thorium, 75)); drillTime = 280; size = 4; drawRim = true; @@ -3608,7 +3608,6 @@ public class Blocks{ lightningLength = 25; collidesAir = false; ammoMultiplier = 1f; - pierceCap = 5; //for visual stats only. buildingDamageMultiplier = 0.25f; @@ -3933,22 +3932,16 @@ public class Blocks{ ammo( Items.titanium, new ShrapnelBulletType(){{ - length = brange + 64f; - rangeChange = 64f; - width = 5f; - damage = 60f; - ammoMultiplier = 2f; + length = brange; + damage = 66f; + ammoMultiplier = 4f; width = 17f; reloadMultiplier = 1.3f; - pierceCap = 3; - serrations = 9; - serrationSpacing = 20f; - shootPattern = new ShootSpread(3, 10f); }}, Items.thorium, new ShrapnelBulletType(){{ length = brange; damage = 105f; - ammoMultiplier = 2f; + ammoMultiplier = 5f; toColor = Pal.thoriumPink; shootEffect = smokeEffect = Fx.thoriumShoot; }} diff --git a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java index d17c791691..2683d35361 100644 --- a/core/src/mindustry/entities/bullet/ShrapnelBulletType.java +++ b/core/src/mindustry/entities/bullet/ShrapnelBulletType.java @@ -29,7 +29,6 @@ public class ShrapnelBulletType extends BulletType{ pierce = true; hittable = false; absorbable = false; - removeAfterPierce = false; lightOpacity = 0.6f; } diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 3b157b88ae..7bf59096af 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -1,6 +1,7 @@ package mindustry.world.blocks.production; import arc.*; +import arc.struct.*; import mindustry.game.*; import mindustry.graphics.*; import mindustry.ui.*; @@ -13,12 +14,12 @@ public class AttributeCrafter extends GenericCrafter{ public float baseEfficiency = 1f; public float maxBoost = 1f; public float minEfficiency = -1f; - public float displayEfficiencyScale = 1f; public boolean displayEfficiency = true; public boolean displayScaledOutput = true; public boolean scaleLiquidConsumption = false; - /** Scaled output multiplier, scales with attribute. <=0 to disable. */ + /** Scaled output (yield) multiplier, scales with attribute. <=0 to disable. */ public float outputScale = 0f; + /** Scaled efficiency (speed) multiplier, scales with attribute. <=0 to disable. */ public float boostScale = 1f; public AttributeCrafter(String name){ @@ -32,12 +33,12 @@ public class AttributeCrafter extends GenericCrafter{ if(!displayEfficiency && !displayScaledOutput) return; drawPlaceText( - (displayEfficiency ? + (displayEfficiency && boostScale > 0f? Core.bundle.format("bar.efficiency", (int)((baseEfficiency + Math.min(maxBoost, boostScale * sumAttribute(attribute, x, y))) * 100f)) : "") + - (displayScaledOutput ? "\n" + - Core.bundle.format("bar.outputscale", + (displayScaledOutput && outputScale > 0f ? "\n" + + Core.bundle.format("bar.yield", (int)(Math.min(maxBoost, outputScale * sumAttribute(attribute, x, y)) * 100f)) : ""), x, y, valid); } @@ -48,17 +49,17 @@ public class AttributeCrafter extends GenericCrafter{ if(!displayEfficiency && !displayScaledOutput) return; - if(displayEfficiency){ + if(displayEfficiency && boostScale > 0f){ addBar("efficiency", (AttributeCrafterBuild entity) -> new Bar( () -> Core.bundle.format("bar.efficiency", (int)(entity.efficiencyMultiplier() * 100)), () -> Pal.lightOrange, entity::efficiencyMultiplier)); } - if(displayScaledOutput){ - addBar("outputscale", (AttributeCrafterBuild entity) -> + if(displayScaledOutput && outputScale > 0f){ + addBar("yield", (AttributeCrafterBuild entity) -> new Bar( - () -> Core.bundle.format("bar.outputscale", (int)((entity.outputMultiplier() - baseEfficiency) * 100)), + () -> Core.bundle.format("bar.yield", (int)((entity.outputMultiplier() - baseEfficiency) * 100)), () -> Pal.lightOrange, entity::outputMultiplier)); } @@ -74,7 +75,7 @@ public class AttributeCrafter extends GenericCrafter{ public void setStats(){ super.setStats(); - stats.add(baseEfficiency <= 0.0001f ? Stat.tiles : Stat.affinities, attribute, floating, boostScale * size * size, !displayEfficiency); + stats.add(baseEfficiency <= 0.0001f ? Stat.tiles : Stat.affinities, attribute, floating, boostScale * size * size, outputScale * size * size, Seq.with(outputItems), craftTime, !displayEfficiency); } public class AttributeCrafterBuild extends GenericCrafterBuild{ diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index 8556ef3adc..56f2310d5b 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -225,7 +225,7 @@ public class StatValues{ } /** Displays an item with a specified amount. */ - private static Stack stack(TextureRegion region, int amount, @Nullable UnlockableContent content, boolean tooltip){ + private static Stack stack(TextureRegion region, float amount, @Nullable UnlockableContent content, boolean tooltip){ Stack stack = new Stack(); stack.add(new Table(o -> { @@ -236,7 +236,7 @@ public class StatValues{ if(amount != 0){ stack.add(new Table(t -> { t.left().bottom(); - t.add(amount >= 1000 ? UI.formatAmount(amount) : amount + "").style(Styles.outlineLabel); + t.add(amount >= 1000 ? UI.formatAmount((int)amount) : fixValue(amount)).style(Styles.outlineLabel); t.pack(); })); } @@ -259,7 +259,7 @@ public class StatValues{ return stack(item.uiIcon, amount, item); } - public static Stack stack(UnlockableContent item, int amount, boolean tooltip){ + public static Stack stack(UnlockableContent item, float amount, boolean tooltip){ return stack(item.uiIcon, amount, item, tooltip); } @@ -294,6 +294,13 @@ public class StatValues{ return t; } + public static Table displayItem(Item item, float amount, float timePeriod, boolean showName){ + Table t = new Table(); + t.add(stack(item, amount, !showName)); + t.add((showName ? item.localizedName + "\n" : "") + "[lightgray]" + Strings.autoFixed(amount / (timePeriod / 60f), 3) + StatUnit.perSecond.localized()).padLeft(8).padRight(5).style(Styles.outlineLabel); + return t; + } + /** Displays the item with a "/sec" qualifier based on the time period, in ticks. */ public static Table displayItemPercent(Item item, int percent, boolean showName){ Table t = new Table(); @@ -320,6 +327,10 @@ public class StatValues{ return blocks(attr, floating, scale, startZero, true); } + public static StatValue blocks(Attribute attr, boolean floating, float scale1, float scale2, @Nullable Seq outputs, float timePeriod, boolean startZero){ + return blocks(attr, floating, scale1, scale2, outputs, timePeriod, startZero, true); + } + public static StatValue blocks(Attribute attr, boolean floating, float scale, boolean startZero, boolean checkFloors){ return table -> table.table(c -> { Runnable[] rebuild = {null}; @@ -364,6 +375,74 @@ public class StatValues{ }); }); } + + public static StatValue blocks(Attribute attr, boolean floating, float scaleEff, float scaleAmount, @Nullable Seq outputs, float timePeriod, boolean startZero, boolean checkFloors) { + return table -> { + if(table.getCells().size > 0) table.getCells().peek().growX(); + table.row(); + + table.table(c -> { + Runnable[] rebuild = {null}; + Map[] lastMap = {null}; + + rebuild[0] = () -> { + c.clearChildren(); + c.left(); + + if(state.isGame()){ + var blocks = Vars.content.blocks() + .select(block -> (!checkFloors || block instanceof Floor) && indexer.isBlockPresent(block) && block.attributes.get(attr) != 0 && !((block instanceof Floor f && f.isDeep()) && !floating)) + .with(s -> s.sort(f -> f.attributes.get(attr))); + + if(blocks.any()){ + for(var block : blocks){ + c.table(Styles.grayPanel, b -> { + b.image(block.uiIcon).size(40f).pad(10f).left().scaling(Scaling.fit); + b.table(center -> { + center.left(); + + if(outputs != null && outputs.any()){ + for(ItemStack output : outputs){ + float scaled = output.amount * (1f + block.attributes.get(attr) * scaleAmount); + + center.table(it -> { + it.left(); + it.add(displayItem(output.item, scaled, timePeriod, true)).left().padLeft(6f); + }).padRight(8f); + } + }else{ + center.add("@none"); + } + }).left().grow(); + + float eff = 1f + block.attributes.get(attr) * scaleEff; + b.add((eff < 1f ? "[negstat]" : "[stat]") + Core.bundle.format("stat.efficiency", fixValue(eff * 100f))).right().pad(10f).padRight(15f); + + }).growX().pad(5).row(); + } + }else{ + c.add("@none.inmap"); + } + }else{ + c.add("@stat.showinmap"); + } + }; + + rebuild[0].run(); + + //rebuild when map changes. + c.update(() -> { + Map current = state.isGame() ? state.map : null; + + if(current != lastMap[0]){ + rebuild[0].run(); + lastMap[0] = current; + } + }); + }).growX().colspan(table.getColumns()).row(); + }; +} + public static StatValue content(Seq list){ return content(list, i -> true); } @@ -479,7 +558,7 @@ public class StatValues{ c.table(Styles.grayPanel, b -> { b.image(item.uiIcon).size(40).pad(10f).left().scaling(Scaling.fit); b.add(item.localizedName + (timePeriod > 0 ? "\n[lightgray]" + Strings.autoFixed(time, time < 0.01f ? 4 : 2) + StatUnit.perSecond.localized() : "")).left().grow(); - b.add(Core.bundle.format("stat.efficiency", fixValue(efficiency.get(item) * 100f))).right().pad(10f).padRight(15f); + b.add("[stat]" + Core.bundle.format("stat.efficiency", fixValue(efficiency.get(item) * 100f))).right().pad(10f).padRight(15f); }).growX().pad(5).row(); } }).growX().colspan(table.getColumns()).row(); @@ -494,7 +573,7 @@ public class StatValues{ for(Liquid liquid : content.liquids().select(l -> filter.get(l) && l.unlockedNow() && !l.isHidden())){ c.table(Styles.grayPanel, b -> { b.add(displayLiquid(liquid, amount, true)).pad(10f).left().grow(); - b.add(Core.bundle.format("stat.efficiency", fixValue(efficiency.get(liquid) * 100f))).right().pad(10f).padRight(15f); + b.add("[stat]" + Core.bundle.format("stat.efficiency", fixValue(efficiency.get(liquid) * 100f))).right().pad(10f).padRight(15f); }).growX().pad(5).row(); } }).growX().colspan(table.getColumns()).row(); diff --git a/core/src/mindustry/world/meta/Stats.java b/core/src/mindustry/world/meta/Stats.java index d9651e9b6d..4edac17e8e 100644 --- a/core/src/mindustry/world/meta/Stats.java +++ b/core/src/mindustry/world/meta/Stats.java @@ -80,6 +80,10 @@ public class Stats{ add(stat, StatValues.blocks(attr, floating, scale, startZero)); } + public void add(Stat stat, Attribute attr, boolean floating, float scale1, float scale2, @Nullable Seq outputs, float boolean startZero){ + add(stat, StatValues.blocks(attr, floating, scale1, scale2, outputs, timePeriod, startZero)); + } + /** Adds a single string value with this stat. */ public void add(Stat stat, String format, Object... args){ add(stat, StatValues.string(format, args)); From 69fd476de7c909b86b94d826074853b33fb756e3 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:57:02 +0100 Subject: [PATCH 26/31] ah not yet --- core/src/mindustry/world/meta/Stats.java | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/core/src/mindustry/world/meta/Stats.java b/core/src/mindustry/world/meta/Stats.java index 4edac17e8e..d132a41169 100644 --- a/core/src/mindustry/world/meta/Stats.java +++ b/core/src/mindustry/world/meta/Stats.java @@ -80,7 +80,7 @@ public class Stats{ add(stat, StatValues.blocks(attr, floating, scale, startZero)); } - public void add(Stat stat, Attribute attr, boolean floating, float scale1, float scale2, @Nullable Seq outputs, float boolean startZero){ + public void add(Stat stat, Attribute attr, boolean floating, float scale1, float scale2, @Nullable Seq outputs, float timePeriod, boolean startZero){ add(stat, StatValues.blocks(attr, floating, scale1, scale2, outputs, timePeriod, startZero)); } From dd7bbefeb4f522567b49700c0d28ac2842bb3c53 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:59:14 +0100 Subject: [PATCH 27/31] more reverts --- core/src/mindustry/content/UnitTypes.java | 8 +++----- core/src/mindustry/entities/Lightning.java | 4 ---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 4ab61abf18..10364fe776 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -907,7 +907,6 @@ public class UnitTypes{ lightningLength = 10; smokeEffect = Fx.shootBigSmoke2; shake = 5f; - maxRange = 190f; status = StatusEffects.sapped; statusDuration = 60f * 10; @@ -1382,8 +1381,7 @@ public class UnitTypes{ accel = 0.1f; range = 130f; health = 400; - armor = 1f; - buildSpeed = 0.3f; + buildSpeed = 0.5f; engineOffset = 6.5f; hitSize = 9f; lowAltitude = true; @@ -1393,7 +1391,7 @@ public class UnitTypes{ mineSpeed = 3.5f; wreckSoundVolume = 0.9f; - abilities.add(new RepairFieldAbility(5f, 112f, 50f)); + abilities.add(new RepairFieldAbility(5f, 60f * 8, 50f)); weapons.add(new Weapon("poly-weapon"){{ top = false; @@ -1419,7 +1417,7 @@ public class UnitTypes{ frontColor = Color.white; hitSound = Sounds.none; - healPercent = 3f; + healPercent = 5.5f; collidesTeam = true; reflectable = false; backColor = Pal.heal; diff --git a/core/src/mindustry/entities/Lightning.java b/core/src/mindustry/entities/Lightning.java index 895bec0d41..48e42b4e5f 100644 --- a/core/src/mindustry/entities/Lightning.java +++ b/core/src/mindustry/entities/Lightning.java @@ -77,10 +77,6 @@ public class Lightning{ } }); } - - if(hitter.type.pierceCap > 0 && hit.size >= hitter.type.pierceCap){ - break; - } Unit furthest = Geometry.findFurthest(x, y, entities); From 14827aad82ddd83a660b5320dd9593b445fcb305 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sat, 10 Jan 2026 21:59:22 +0100 Subject: [PATCH 28/31] more --- core/src/mindustry/content/UnitTypes.java | 8 +++++--- core/src/mindustry/entities/Lightning.java | 4 ++++ 2 files changed, 9 insertions(+), 3 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 10364fe776..4ab61abf18 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -907,6 +907,7 @@ public class UnitTypes{ lightningLength = 10; smokeEffect = Fx.shootBigSmoke2; shake = 5f; + maxRange = 190f; status = StatusEffects.sapped; statusDuration = 60f * 10; @@ -1381,7 +1382,8 @@ public class UnitTypes{ accel = 0.1f; range = 130f; health = 400; - buildSpeed = 0.5f; + armor = 1f; + buildSpeed = 0.3f; engineOffset = 6.5f; hitSize = 9f; lowAltitude = true; @@ -1391,7 +1393,7 @@ public class UnitTypes{ mineSpeed = 3.5f; wreckSoundVolume = 0.9f; - abilities.add(new RepairFieldAbility(5f, 60f * 8, 50f)); + abilities.add(new RepairFieldAbility(5f, 112f, 50f)); weapons.add(new Weapon("poly-weapon"){{ top = false; @@ -1417,7 +1419,7 @@ public class UnitTypes{ frontColor = Color.white; hitSound = Sounds.none; - healPercent = 5.5f; + healPercent = 3f; collidesTeam = true; reflectable = false; backColor = Pal.heal; diff --git a/core/src/mindustry/entities/Lightning.java b/core/src/mindustry/entities/Lightning.java index 48e42b4e5f..895bec0d41 100644 --- a/core/src/mindustry/entities/Lightning.java +++ b/core/src/mindustry/entities/Lightning.java @@ -77,6 +77,10 @@ public class Lightning{ } }); } + + if(hitter.type.pierceCap > 0 && hit.size >= hitter.type.pierceCap){ + break; + } Unit furthest = Geometry.findFurthest(x, y, entities); From 683d4356da568f8ca4cb5b873f84582e04f7d9fd Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sat, 10 Jan 2026 22:02:17 +0100 Subject: [PATCH 29/31] more --- core/src/mindustry/content/UnitTypes.java | 8 +++----- core/src/mindustry/entities/Lightning.java | 4 ---- 2 files changed, 3 insertions(+), 9 deletions(-) diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 4ab61abf18..10364fe776 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -907,7 +907,6 @@ public class UnitTypes{ lightningLength = 10; smokeEffect = Fx.shootBigSmoke2; shake = 5f; - maxRange = 190f; status = StatusEffects.sapped; statusDuration = 60f * 10; @@ -1382,8 +1381,7 @@ public class UnitTypes{ accel = 0.1f; range = 130f; health = 400; - armor = 1f; - buildSpeed = 0.3f; + buildSpeed = 0.5f; engineOffset = 6.5f; hitSize = 9f; lowAltitude = true; @@ -1393,7 +1391,7 @@ public class UnitTypes{ mineSpeed = 3.5f; wreckSoundVolume = 0.9f; - abilities.add(new RepairFieldAbility(5f, 112f, 50f)); + abilities.add(new RepairFieldAbility(5f, 60f * 8, 50f)); weapons.add(new Weapon("poly-weapon"){{ top = false; @@ -1419,7 +1417,7 @@ public class UnitTypes{ frontColor = Color.white; hitSound = Sounds.none; - healPercent = 3f; + healPercent = 5.5f; collidesTeam = true; reflectable = false; backColor = Pal.heal; diff --git a/core/src/mindustry/entities/Lightning.java b/core/src/mindustry/entities/Lightning.java index 895bec0d41..48e42b4e5f 100644 --- a/core/src/mindustry/entities/Lightning.java +++ b/core/src/mindustry/entities/Lightning.java @@ -77,10 +77,6 @@ public class Lightning{ } }); } - - if(hitter.type.pierceCap > 0 && hit.size >= hitter.type.pierceCap){ - break; - } Unit furthest = Geometry.findFurthest(x, y, entities); From dd1641f75c414620daee832569d127e0a36b15a4 Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 11 Jan 2026 10:24:10 +0100 Subject: [PATCH 30/31] oops I forgot to displayItem stat entry with efficency --- core/src/mindustry/world/meta/StatValues.java | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/core/src/mindustry/world/meta/StatValues.java b/core/src/mindustry/world/meta/StatValues.java index 56f2310d5b..db55a3969b 100644 --- a/core/src/mindustry/world/meta/StatValues.java +++ b/core/src/mindustry/world/meta/StatValues.java @@ -397,6 +397,8 @@ public class StatValues{ if(blocks.any()){ for(var block : blocks){ c.table(Styles.grayPanel, b -> { + float effiency = 1f + block.attributes.get(attr) * scaleEff; + b.image(block.uiIcon).size(40f).pad(10f).left().scaling(Scaling.fit); b.table(center -> { center.left(); @@ -407,16 +409,14 @@ public class StatValues{ center.table(it -> { it.left(); - it.add(displayItem(output.item, scaled, timePeriod, true)).left().padLeft(6f); + it.add(displayItem(output.item, scaled, timePeriod / effiency , true)).left().padLeft(6f); }).padRight(8f); } }else{ center.add("@none"); } }).left().grow(); - - float eff = 1f + block.attributes.get(attr) * scaleEff; - b.add((eff < 1f ? "[negstat]" : "[stat]") + Core.bundle.format("stat.efficiency", fixValue(eff * 100f))).right().pad(10f).padRight(15f); + b.add((effiency < 1f ? "[negstat]" : "[stat]") + Core.bundle.format("stat.efficiency", fixValue(effiency * 100f))).right().pad(10f).padRight(15f); }).growX().pad(5).row(); } From 9d731719bdc9df7c86509064699ea0d58f12402f Mon Sep 17 00:00:00 2001 From: EggleEgg <125359838+EggleEgg@users.noreply.github.com> Date: Sun, 11 Jan 2026 18:15:12 +0100 Subject: [PATCH 31/31] dont break condensers good god --- .../world/blocks/production/AttributeCrafter.java | 14 +++++++++----- 1 file changed, 9 insertions(+), 5 deletions(-) diff --git a/core/src/mindustry/world/blocks/production/AttributeCrafter.java b/core/src/mindustry/world/blocks/production/AttributeCrafter.java index 7bf59096af..f001390537 100644 --- a/core/src/mindustry/world/blocks/production/AttributeCrafter.java +++ b/core/src/mindustry/world/blocks/production/AttributeCrafter.java @@ -30,10 +30,10 @@ public class AttributeCrafter extends GenericCrafter{ public void drawPlace(int x, int y, int rotation, boolean valid){ super.drawPlace(x, y, rotation, valid); - if(!displayEfficiency && !displayScaledOutput) return; + if((!displayEfficiency || boostScale <= 0f) && (!displayScaledOutput || outputScale <= 0f)) return; drawPlaceText( - (displayEfficiency && boostScale > 0f? + (displayEfficiency && boostScale > 0f ? Core.bundle.format("bar.efficiency", (int)((baseEfficiency + Math.min(maxBoost, boostScale * sumAttribute(attribute, x, y))) * 100f)) : "") + @@ -47,7 +47,7 @@ public class AttributeCrafter extends GenericCrafter{ public void setBars(){ super.setBars(); - if(!displayEfficiency && !displayScaledOutput) return; + if((!displayEfficiency || boostScale <= 0f) && (!displayScaledOutput || outputScale <= 0f)) return; if(displayEfficiency && boostScale > 0f){ addBar("efficiency", (AttributeCrafterBuild entity) -> @@ -74,8 +74,12 @@ public class AttributeCrafter extends GenericCrafter{ @Override public void setStats(){ super.setStats(); - - stats.add(baseEfficiency <= 0.0001f ? Stat.tiles : Stat.affinities, attribute, floating, boostScale * size * size, outputScale * size * size, Seq.with(outputItems), craftTime, !displayEfficiency); + if(outputScale > 0f){ + stats.add(baseEfficiency <= 0.0001f ? Stat.tiles : + Stat.affinities, attribute, floating, boostScale * size * size, outputScale * size * size, Seq.with(outputItems), craftTime, !displayEfficiency); + }else{ + stats.add(baseEfficiency <= 0.0001f ? Stat.tiles : Stat.affinities, attribute, floating, boostScale * size * size, !displayEfficiency); + } } public class AttributeCrafterBuild extends GenericCrafterBuild{