diff --git a/core/assets-raw/sprites/blocks/units/ship-reconstructor-top.png b/core/assets-raw/sprites/blocks/units/ship-reconstructor-top.png new file mode 100644 index 0000000000..7c91e756cd Binary files /dev/null and b/core/assets-raw/sprites/blocks/units/ship-reconstructor-top.png differ diff --git a/core/assets-raw/sprites/blocks/units/ship-reconstructor.png b/core/assets-raw/sprites/blocks/units/ship-reconstructor.png new file mode 100644 index 0000000000..bc9ddfe97f Binary files /dev/null and b/core/assets-raw/sprites/blocks/units/ship-reconstructor.png differ diff --git a/core/assets-raw/sprites/shapes/shape-3.png b/core/assets-raw/sprites/shapes/shape-3.png deleted file mode 100644 index d8dfb1f9cf..0000000000 Binary files a/core/assets-raw/sprites/shapes/shape-3.png and /dev/null differ diff --git a/core/assets/icons/icons.properties b/core/assets/icons/icons.properties index aaed9537d4..ac28a9737e 100755 --- a/core/assets/icons/icons.properties +++ b/core/assets/icons/icons.properties @@ -549,3 +549,5 @@ 63154=avert|unit-avert-ui 63153=latum|unit-latum-ui 63152=tank-reconstructor|block-tank-reconstructor-ui +63151=mech-reconstructor|block-mech-reconstructor-ui +63150=ship-reconstructor|block-ship-reconstructor-ui diff --git a/core/assets/logicids.dat b/core/assets/logicids.dat index dbc563b734..1f91b12fa9 100644 Binary files a/core/assets/logicids.dat and b/core/assets/logicids.dat differ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 9ce33b575e..3b52d98371 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3701,11 +3701,26 @@ public class Blocks{ ); }}; + shipReconstructor = new Reconstructor("ship-reconstructor"){{ + requirements(Category.units, with(Items.graphite, 250, Items.tungsten, 120, Items.silicon, 200)); + regionSuffix = "-dark"; + + size = 3; + consumePower(3f); + consumeLiquid(Liquids.hydrogen, 3f / 60f); + consumeItems(with(Items.silicon, 100, Items.tungsten, 100)); + + constructTime = 60f * 20f; + + upgrades.addAll( + new UnitType[]{UnitTypes.stell, UnitTypes.avert} + ); + }}; + tankAssembler = new UnitAssembler("tank-assembler"){{ requirements(Category.units, with(Items.graphite, 600, Items.beryllium, 600, Items.oxide, 250, Items.tungsten, 400, Items.silicon, 500)); regionSuffix = "-dark"; size = 5; - //TODO remove ducts and crushers, replace with 2-3 high cost special blocks with silicon requirements plans.add(new AssemblerUnitPlan(UnitTypes.vanquish, 60f * 50f, PayloadStack.list(UnitTypes.stell, 4, Blocks.tungstenWallLarge, 10))); consumePower(3f); areaSize = 13; @@ -3719,8 +3734,7 @@ public class Blocks{ requirements(Category.units, with(Items.beryllium, 700, Items.oxide, 300, Items.tungsten, 500, Items.silicon, 800)); regionSuffix = "-dark"; size = 5; - //TODO not stell - plans.add(new AssemblerUnitPlan(UnitTypes.quell, 60f * 60f, PayloadStack.list(Blocks.berylliumWallLarge, 20, UnitTypes.stell, 2))); + plans.add(new AssemblerUnitPlan(UnitTypes.quell, 60f * 60f, PayloadStack.list(UnitTypes.avert, 2, Blocks.berylliumWallLarge, 8))); consumePower(3f); areaSize = 13; researchCostMultiplier = 0.4f; @@ -3734,8 +3748,7 @@ public class Blocks{ regionSuffix = "-dark"; size = 5; //TODO different reqs - //TODO not stell - plans.add(new AssemblerUnitPlan(UnitTypes.bulwark, 60f * 60f, PayloadStack.list(Blocks.tungstenWallLarge, 12, UnitTypes.stell, 2))); + plans.add(new AssemblerUnitPlan(UnitTypes.bulwark, 60f * 60f, PayloadStack.list(UnitTypes.latum, 2, Blocks.tungstenWallLarge, 10))); consumePower(3f); areaSize = 13; researchCostMultiplier = 0.4f; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 5abc7ee9f6..0982af9713 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -2506,10 +2506,42 @@ public class UnitTypes{ damage = 50f; hitColor = Color.valueOf("feb380"); hitEffect = endEffect = Fx.hitBulletColor; - shootEffect = Fx.shootBig; - smokeEffect = Fx.shootBigSmoke; pierceDamageFactor = 0.8f; + smokeEffect = Fx.colorSpark; + + //lines - messy + if(false) + smokeEffect = new Effect(22f, e -> { + 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, length - 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); + } + }); + + endEffect = new Effect(14f, e-> { + color(e.color); + Drawf.tri(e.x, e.y, e.fout() * 1.5f, 5f, e.rotation); + }); + + shootEffect = new Effect(10, 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); + }); + lineEffect = new Effect(14f, e -> { if(!(e.data instanceof Vec2 v)) return; @@ -2519,6 +2551,7 @@ public class UnitTypes{ }); pointEffectSpace = 8f; + if(false) pointEffect = new Effect(20, e -> { color(e.color); @@ -2822,7 +2855,7 @@ public class UnitTypes{ smoothReloadSpeed = 0.15f; recoil = 2f; - bullet = new BasicBulletType(3.5f, 40){{ + bullet = new BasicBulletType(3.5f, 50){{ backColor = trailColor = hitColor = Pal.techBlue; frontColor = Color.white; width = 7.5f; @@ -2853,7 +2886,7 @@ public class UnitTypes{ weapons.add(new PointDefenseWeapon("latum-point-defense"){{ x = 16f / 4f; y = -20f / 4f; - reload = 10f; + reload = 9f; targetInterval = 9f; targetSwitchInterval = 12f; @@ -2863,7 +2896,7 @@ public class UnitTypes{ shootEffect = Fx.sparkShoot; hitEffect = Fx.pointHit; maxRange = 100f; - damage = 35f; + damage = 38f; }}; }}); }}; diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index 2bdc7301af..7c860da285 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -27,8 +27,9 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw @Import Vec2 vel; IntSeq collided = new IntSeq(6); - Object data; BulletType type; + + Object data; float fdata; @ReadOnly diff --git a/core/src/mindustry/graphics/Drawf.java b/core/src/mindustry/graphics/Drawf.java index b9e1a9c062..ef2d7087f2 100644 --- a/core/src/mindustry/graphics/Drawf.java +++ b/core/src/mindustry/graphics/Drawf.java @@ -1,6 +1,5 @@ package mindustry.graphics; -import arc.*; import arc.graphics.*; import arc.graphics.g2d.*; import arc.math.*; @@ -393,8 +392,16 @@ public class Drawf{ } public static void tri(float x, float y, float width, float length, float rotation){ - float oy = 17f / 63f * length; - Draw.rect(Core.atlas.find("shape-3"), x, y - oy + length / 2f, width, length, width / 2f, oy, rotation - 90); + float + fx = Angles.trnsx(rotation, length), + fy = Angles.trnsy(rotation, length), + rx = Angles.trnsx(rotation - 90f, width / 2f), + ry = Angles.trnsy(rotation - 90f, width / 2f); + Fill.tri( + x + rx, y + ry, + x + fx, y + fy, + x - rx, y - ry + ); } public static void construct(Building t, UnlockableContent content, float rotation, float progress, float speed, float time){ diff --git a/core/src/mindustry/mod/ClassMap.java b/core/src/mindustry/mod/ClassMap.java index f256913501..3a32c32a7c 100644 --- a/core/src/mindustry/mod/ClassMap.java +++ b/core/src/mindustry/mod/ClassMap.java @@ -91,7 +91,6 @@ public class ClassMap{ classes.put("PayloadStack", mindustry.type.PayloadStack.class); classes.put("Planet", mindustry.type.Planet.class); classes.put("Publishable", mindustry.type.Publishable.class); - classes.put("Satellite", mindustry.type.Satellite.class); classes.put("Sector", mindustry.type.Sector.class); classes.put("SectorRect", mindustry.type.Sector.SectorRect.class); classes.put("SectorPreset", mindustry.type.SectorPreset.class); diff --git a/core/src/mindustry/type/Satellite.java b/core/src/mindustry/type/Satellite.java deleted file mode 100644 index 986d53a01a..0000000000 --- a/core/src/mindustry/type/Satellite.java +++ /dev/null @@ -1,11 +0,0 @@ -package mindustry.type; - -//TODO -/** Any object that is orbiting a planet. */ -public class Satellite{ - public transient Planet planet; - - public Satellite(Planet orbiting){ - this.planet = orbiting; - } -} diff --git a/core/src/mindustry/ui/Styles.java b/core/src/mindustry/ui/Styles.java index fc3e02a5f7..c6f25cd7c0 100644 --- a/core/src/mindustry/ui/Styles.java +++ b/core/src/mindustry/ui/Styles.java @@ -30,7 +30,7 @@ public class Styles{ public static TextButtonStyle defaultt, nodet, cleart, nonet, clearPartialt, clearTogglet, logicTogglet, clearToggleMenut, togglet, transt, fullTogglet, squareTogglet, logict; public static ImageButtonStyle defaulti, nodei, emptyi, emptytogglei, selecti, logici, geni, colori, accenti, cleari, clearFulli, clearPartiali, clearTogglei, clearTransi, clearToggleTransi, clearTogglePartiali; - public static ScrollPaneStyle defaultPane, horizontalPane, smallPane, nonePane; + public static ScrollPaneStyle defaultPane, horizontalPane, smallPane, noBarPane; public static SliderStyle defaultSlider; public static LabelStyle defaultLabel, outlineLabel, techLabel; public static TextFieldStyle defaultField, nodeField, areaField, nodeArea; @@ -284,7 +284,7 @@ public class Styles{ vScroll = clear; vScrollKnob = scrollKnobVerticalThin; }}; - nonePane = new ScrollPaneStyle(); + noBarPane = new ScrollPaneStyle(); defaultSlider = new SliderStyle(){{ background = sliderBack; diff --git a/core/src/mindustry/ui/dialogs/SchematicsDialog.java b/core/src/mindustry/ui/dialogs/SchematicsDialog.java index 187223139a..ed8b2380bb 100644 --- a/core/src/mindustry/ui/dialogs/SchematicsDialog.java +++ b/core/src/mindustry/ui/dialogs/SchematicsDialog.java @@ -79,7 +79,7 @@ public class SchematicsDialog extends BaseDialog{ in.add("@schematic.tags").padRight(4); //tags (no scroll pane visible) - in.pane(Styles.nonePane, t -> { + in.pane(Styles.noBarPane, t -> { rebuildTags = () -> { t.clearChildren(); t.left();