From 4fa88296a74769ddc75522f5d85fd4551d37ce42 Mon Sep 17 00:00:00 2001 From: Anuken Date: Tue, 28 Dec 2021 16:00:25 -0500 Subject: [PATCH] Bugfixes & balancing --- .../sprites/blocks/attack/nuclear-warhead.png | Bin 1158 -> 0 bytes .../blocks/drills/plasma-bore-glow.png | Bin 7265 -> 2306 bytes .../sprites/blocks/drills/surge-drill.png | Bin 0 -> 3037 bytes .../blocks/payload/warhead-assembler.png | Bin 1360 -> 0 bytes .../effects/drill-laser-boost-center.png | Bin 0 -> 499 bytes .../sprites/effects/drill-laser-boost-end.png | Bin 0 -> 559 bytes .../sprites/effects/drill-laser-boost.png | Bin 0 -> 131 bytes core/src/mindustry/async/AsyncCore.java | 2 +- core/src/mindustry/content/Blocks.java | 13 +++-- .../src/mindustry/content/ErekirTechTree.java | 8 +++ core/src/mindustry/content/Items.java | 4 +- core/src/mindustry/content/UnitTypes.java | 9 ++-- core/src/mindustry/world/Block.java | 7 ++- .../blocks/defense/turrets/BaseTurret.java | 6 ++- .../blocks/defense/turrets/ItemTurret.java | 10 +++- .../blocks/defense/turrets/ReloadTurret.java | 2 +- .../world/blocks/defense/turrets/Turret.java | 4 +- .../blocks/distribution/DirectionBridge.java | 2 +- .../distribution/DirectionLiquidBridge.java | 2 +- .../world/blocks/production/BeamDrill.java | 49 ++++++++++++++---- 20 files changed, 84 insertions(+), 34 deletions(-) delete mode 100644 core/assets-raw/sprites/blocks/attack/nuclear-warhead.png create mode 100644 core/assets-raw/sprites/blocks/drills/surge-drill.png delete mode 100644 core/assets-raw/sprites/blocks/payload/warhead-assembler.png create mode 100644 core/assets-raw/sprites/effects/drill-laser-boost-center.png create mode 100644 core/assets-raw/sprites/effects/drill-laser-boost-end.png create mode 100644 core/assets-raw/sprites/effects/drill-laser-boost.png diff --git a/core/assets-raw/sprites/blocks/attack/nuclear-warhead.png b/core/assets-raw/sprites/blocks/attack/nuclear-warhead.png deleted file mode 100644 index 6963fe4a5265666b8ff0d3cce4ac9f4e02e8290d..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1158 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 My85}Sb4q9e0G_vglmGw# literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/payload/warhead-assembler.png b/core/assets-raw/sprites/blocks/payload/warhead-assembler.png deleted file mode 100644 index f65306b2f02340eafdb2c01b609e13aec578a70a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1360 zcmeAS@N?(olHy`uVBq!ia0y~yU`POA4mJh`hDS5XEf^RW7>k44ofy`glX=O&z{=(6 z;uumf=k46RUNMd$$NQ5K(~}bwj~w9I^nm$B>y%0XYkRqa;T$hNIoUOA;LvkBct}a$ z&83-6$L`2J|6Fs%viSQy$A~@U>FNLW&o#bZZGKLFecb-K-%Md!imR1o{X2beYsRmw zw^$e|>MAasJANxmm?2?fgrC5aEidCD8Wkj!*0jnuFfue0I&a9ZYhY(cm?N-e7QX-k zgMl8$w6p9T3=A8X6W`qOijC2k#=x+le1rU+e}6uFsqEd-m=9{o?Nb)mne~ zU*7%w@@j3J-{+q?ulzd~nI6y#6E=9(A9%%MBCEi!2`B%A1}dmHPx!C6@cQI?Q@F1i zie6>#y?QKV-S?!Hm7GUS59H@WU2A%K_jt}@$*TUgtZb)1-VbN*TihEq;s)M*5txz3K`E_OUVKTy@O?)R^NLt4hQABTP%yiWy=T?iA{HG_9)N79nA*#SzI8KUyNFHXp0 zc)ftLVUrreDI?y7?C7r4nQROW#us+|WSG0ABlGQTor|~DbY#AX(Gz85;%c~7l=6D- zZ_`6gE7%t76`NxeVf`#w!R0!0Op?gqzkwRhYxaiRV%SpiTVPIoD7TT!@?*OCvzDk# zeLsEi>rJYjnxCu1-Df&oOkq8cQWqs8u&rp>^KRWhrkU@^i_aCyE(;mJ;i}B!3TNU$n}5l9=1YTa^LK3t~SkH2Lhr zR!~(K_E*mPnRVt{`_z?;rUFaq4t6Q?_R8MKQCz{|l>ON-bE{qRfm>_|hXOr>9<#sH z(+zvmYarV6USv4L>cP|(^emH%I)3HRxfQ@6L zQGw$Pi~W15eD6Bc`i1%2_XCz~$( z(%oIvC*iuXDQSIX&9MNxmRTzT|H>G47EBR7He>GX$;*C6{B4(+x@wi+wTc7ksn1>c zcbl!c&TNw1l=`#R@OAN#8sGk1u~YNyUKbxpnx(Ku^BS-2S9NQ?3u2|uXI@k0om*t9 z^m(~Tb@)298EgkWUe1)s44B%KAjYt~aGK%_7KOwap&ZW`JfuI e#m@`(kJIcVoz~JfX=d#Wzp$P!y>3`V( diff --git a/core/assets-raw/sprites/effects/drill-laser-boost-center.png b/core/assets-raw/sprites/effects/drill-laser-boost-center.png new file mode 100644 index 0000000000000000000000000000000000000000..e8ed8c4a68d2c3af3bb45d869aa2540487a644cd GIT binary patch literal 499 zcmeAS@N?(olHy`uVBq!ia0y~yVDJE84mJh`hS0a0-5D4d7>k44ofy`glX=O&z_`}a z#WAE}&fD3BL5Cf9Tv?r+9S`$bFq$uXCRgI=yXy{fR34M~3EoQqOH8hs&ATya?cY-^ zmFv%}x&CqUmd(>rjTs?B_eFAk?`vioYnV}U} z^d!Db6m(WU!Om{{(k-6w)3KQxpY)T9dEvvDP*jsV~C>fju$y?d-@?hVktyDTU-cUG)Q)4I+eN83wFtgdz_u(MbyoM3e1<0#S) z6{+18bbcd?(h0{;8&=)&4S&Drte%Kt_N66OTcv~?C*C?UiTm6%YoildT~k?&jeVk44ofy`glX=O&!1&VB z#WAE}&fD3BK}QUDTt(a3n%blb8lS3dIc@u5lGVxwash{YA29870& zOL~m|PqmIq|E#3Baj_~B0~9#KnpDf}sr{X$`nYX*`@vt^*F4no&`RaakIZZGI(p`# zP-ra6*^OeQsg^t0ZykCbqTg{MY*JNMtH6rPYs>%E8%fP$8%e`GznV#J0vA^aIOK+t`;H=hYUx9G;pv7&6y(e`kdFsZtB zwWKDL{h+or{NhX;LrvZEy0d+Qw&>mx~5C%s~+ zTpm^0w5L&ljU%Z6M6B?eP*S_hwX|uEVdR>k*Ng6?OTJ&8v1qQ6hPv;bVC^I&k4@&2 ziw-TlEvq`?twvSe48faA#3w%NdsHH6y>iK=FB`k$l-jpTUHg4$+V6`le6F`Xy^1;~ zd$8M?ZBJF&jirrR=Cf2Zm);Fn8rSUfpgCn%PpsG934QO+tAEYg{3`l`QrOyx_J}o6 z-!#MYPweUx&ON|$_3DDdW|Q;-5625aV}^ktK)OD^=EeSpSB^!1#5`U7T-G@yGywn( C==hod literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/effects/drill-laser-boost.png b/core/assets-raw/sprites/effects/drill-laser-boost.png new file mode 100644 index 0000000000000000000000000000000000000000..f2ae1a24f2582d2d5ff43f5d709bf187620acadb GIT binary patch literal 131 zcmeAS@N?(olHy`uVBq!ia0y~yU|?ZjU@+idV_;w~le&GBfq{XsILO_JVcj{ImkbOH zww^AIAsQ2t6BaNgtcfbz$Q9YZ8Ov(Q647EI8l9QPoyd6X|NsC0^OXuay&d lSMmLCo$1-!g`5lwe^q(jOo@M7&cMLH;OXk;vd$@?2>_!9D7F9q literal 0 HcmV?d00001 diff --git a/core/src/mindustry/async/AsyncCore.java b/core/src/mindustry/async/AsyncCore.java index 5de761d0ca..df07bda1ac 100644 --- a/core/src/mindustry/async/AsyncCore.java +++ b/core/src/mindustry/async/AsyncCore.java @@ -77,7 +77,7 @@ public class AsyncCore{ private void complete(){ //wait for all threads to stop processing - for(Future future : futures){ + for(var future : futures){ try{ future.get(); }catch(Throwable t){ diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index 614c44d236..572aafbaa6 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -121,7 +121,7 @@ public class Blocks{ duo, scatter, scorch, hail, arc, wave, lancer, swarmer, salvo, fuse, ripple, cyclone, foreshadow, spectre, meltdown, segment, parallax, tsunami, //turrets - erekir - breach, sublimate, titan, + breach, sublimate, titan, afflict, //units commandCenter, @@ -2266,7 +2266,7 @@ public class Blocks{ }}; cliffCrusher = new WallCrafter("cliff-crusher"){{ - requirements(Category.production, with(Items.graphite, 20, Items.beryllium, 20)); + requirements(Category.production, with(Items.graphite, 25, Items.beryllium, 20)); consumes.power(0.8f); @@ -2282,7 +2282,7 @@ public class Blocks{ drillTime = 150f; tier = 4; size = 2; - range = 3; + range = 4; consumes.liquid(Liquids.hydrogen, 0.25f / 60f).boost(); }}; @@ -2929,6 +2929,9 @@ public class Blocks{ ); //TODO no coolant? + coolantUsage = 10f / 60f; + coolantOverride = Liquids.water; + coolantMultiplier = 6f; shootShake = 1f; ammoPerShot = 6; @@ -2997,6 +3000,7 @@ public class Blocks{ length = range; }}; + acceptCoolant = false; scaledHealth = 320; shootLength = 7f; size = 3; @@ -3045,7 +3049,8 @@ public class Blocks{ shootLength = 7f; rotateSpeed = 2.5f; - acceptCoolant = false; + coolantUsage = 30f / 60f; + coolantOverride = Liquids.water; draw = new DrawTurret("reinforced-"){{ parts.addAll( diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index 9e490643a4..72cbd4a736 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -2,6 +2,7 @@ package mindustry.content; import arc.struct.*; import mindustry.game.Objectives.*; +import mindustry.type.*; import static mindustry.content.Blocks.*; import static mindustry.content.TechTree.*; @@ -11,6 +12,13 @@ public class ErekirTechTree{ public static void load(){ Seq erekirSector = Seq.with(new OnPlanet(Planets.erekir)); + //TODO use these multipliers! + var costMultipliers = new ObjectFloatMap(); + costMultipliers.put(Items.silicon, 4); + costMultipliers.put(Items.surgeAlloy, 4); + costMultipliers.put(Items.thorium, 6); + costMultipliers.put(Items.graphite, 5); + Planets.erekir.techTree = nodeRoot("erekir", coreBastion, true, () -> { node(duct, () -> { node(ductRouter, () -> { diff --git a/core/src/mindustry/content/Items.java b/core/src/mindustry/content/Items.java index 34dd7bb293..ae76f8916c 100644 --- a/core/src/mindustry/content/Items.java +++ b/core/src/mindustry/content/Items.java @@ -92,7 +92,7 @@ public class Items{ pyratite = new Item("pyratite", Color.valueOf("ffaa5f")){{ flammability = 1.4f; - explosiveness = 0.5f; + explosiveness = 0.4f; }}; beryllium = new Item("beryllium", Color.valueOf("3a8f64")){{ @@ -113,7 +113,7 @@ public class Items{ }}; carbide = new Item("carbide", Color.valueOf("89769a")){{ - cost = 1.6f; + cost = 1.4f; healthScaling = 1.1f; }}; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index a07477ed3c..28515f02de 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -69,15 +69,14 @@ public class UnitTypes{ public static @EntityDef({Unitc.class, BlockUnitc.class}) UnitType block; //special tethered (has payload capability, because it's necessary sometimes) - public static @EntityDef({Unitc.class, BuildingTetherc.class, Payloadc.class}) UnitType manifold, assemblyDrone, payloadDrone; + public static @EntityDef({Unitc.class, BuildingTetherc.class, Payloadc.class}) UnitType manifold, assemblyDrone; //tank - //TODO tank comp public static @EntityDef({Unitc.class, Tankc.class}) UnitType vanquish; //endregion - //missile definition, needed for codegen + //missile definition, unused here but needed for codegen public static @EntityDef({Unitc.class, TimedKillc.class}) UnitType missile; //region neoplasm @@ -2525,10 +2524,8 @@ public class UnitTypes{ y = 1f; }}); - float es = 3.9f; - setEnginesMirror( - new UnitEngine(62 / 4f, -60 / 4f, es, 315f), + new UnitEngine(62 / 4f, -60 / 4f, 3.9f, 315f), new UnitEngine(72 / 4f, -29 / 4f, 3f, 315f) ); }}; diff --git a/core/src/mindustry/world/Block.java b/core/src/mindustry/world/Block.java index a379818b10..b81ef11dc8 100644 --- a/core/src/mindustry/world/Block.java +++ b/core/src/mindustry/world/Block.java @@ -271,6 +271,8 @@ public class Block extends UnlockableContent{ public Effect destroyEffect = Fx.dynamicExplosion; /** Multiplier for cost of research in tech tree. */ public float researchCostMultiplier = 1; + /** Multipliers for research costs on a per-item basis. Format: ID to multiplier. */ + public ObjectFloatMap researchCostMultipliers = new ObjectFloatMap<>(); /** Whether this block has instant transfer.*/ public boolean instantTransfer = false; /** Whether you can rotate this block after it is placed. */ @@ -867,7 +869,7 @@ public class Block extends UnlockableContent{ public ItemStack[] researchRequirements(){ ItemStack[] out = new ItemStack[requirements.length]; for(int i = 0; i < out.length; i++){ - int quantity = 60 + Mathf.round(Mathf.pow(requirements[i].amount, 1.1f) * 20 * researchCostMultiplier, 10); + int quantity = 60 + Mathf.round(Mathf.pow(requirements[i].amount, 1.1f) * 20 * researchCostMultiplier * researchCostMultipliers.get(requirements[i].item, 1f), 10); out[i] = new ItemStack(requirements[i].item, UI.roundAmount(quantity)); } @@ -925,9 +927,6 @@ public class Block extends UnlockableContent{ scaling += stack.item.healthScaling; } - if(scaling > 1){ - Log.info("@: @ -> @", name, scaledHealth * size * size, (Mathf.round(scaledHealth * scaling, 5) * size * size)); - } scaledHealth *= scaling; round = true; } diff --git a/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java b/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java index e3d33c56e2..ea9ca99e57 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/BaseTurret.java @@ -1,11 +1,13 @@ package mindustry.world.blocks.defense.turrets; import arc.struct.*; +import arc.util.*; import mindustry.content.*; import mindustry.entities.*; import mindustry.gen.*; import mindustry.graphics.*; import mindustry.logic.*; +import mindustry.type.*; import mindustry.world.*; import mindustry.world.consumers.*; import mindustry.world.meta.*; @@ -22,6 +24,8 @@ public class BaseTurret extends Block{ public Effect coolEffect = Fx.fuelburn; /** How much reload is lowered by for each unit of liquid of heat capacity. */ public float coolantMultiplier = 5f; + /** Liquid that is used by coolant; null to use default. */ + public @Nullable Liquid coolantOverride; public BaseTurret(String name){ super(name); @@ -39,7 +43,7 @@ public class BaseTurret extends Block{ public void init(){ if(acceptCoolant && !consumes.has(ConsumeType.liquid)){ hasLiquids = true; - consumes.add(new ConsumeCoolant(coolantUsage)).update(false).boost(); + consumes.add(coolantOverride != null ? new ConsumeLiquid(coolantOverride, coolantUsage) : new ConsumeCoolant(coolantUsage)).update(false).boost(); } super.init(); diff --git a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java index b1688d1596..9e1051a14c 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ItemTurret.java @@ -199,7 +199,7 @@ public class ItemTurret extends Turret{ } public class ItemEntry extends AmmoEntry{ - protected Item item; + public Item item; ItemEntry(Item item, int amount){ this.item = item; @@ -210,5 +210,13 @@ public class ItemTurret extends Turret{ public BulletType type(){ return ammoTypes.get(item); } + + @Override + public String toString(){ + return "ItemEntry{" + + "item=" + item + + ", amount=" + amount + + '}'; + } } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java index 729ecb3035..c16659490f 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ReloadTurret.java @@ -20,7 +20,7 @@ public class ReloadTurret extends BaseTurret{ super.setStats(); if(acceptCoolant){ - stats.add(Stat.booster, StatValues.boosters(reloadTime, consumes.get(ConsumeType.liquid).amount, coolantMultiplier, true, l -> consumes.liquidfilters.get(l.id))); + stats.add(Stat.booster, StatValues.boosters(reloadTime, consumes.get(ConsumeType.liquid).amount, coolantMultiplier, true, l -> l.coolant && consumes.liquidfilters.get(l.id))); } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index f8cf19332f..ab466fb31c 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -466,8 +466,8 @@ public class Turret extends ReloadTurret{ /** @return whether the turret has ammo. */ public boolean hasAmmo(){ //skip first entry if it has less than the required amount of ammo - if(ammo.size >= 2 && ammo.peek().amount < ammoPerShot){ - ammo.pop(); + if(ammo.size >= 2 && ammo.peek().amount < ammoPerShot && ammo.get(ammo.size - 2).amount >= ammoPerShot){ + totalAmmo -= ammo.pop().amount; } return ammo.size > 0 && ammo.peek().amount >= ammoPerShot; } diff --git a/core/src/mindustry/world/blocks/distribution/DirectionBridge.java b/core/src/mindustry/world/blocks/distribution/DirectionBridge.java index 7addb04d30..f7c9b6bc7a 100644 --- a/core/src/mindustry/world/blocks/distribution/DirectionBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DirectionBridge.java @@ -171,7 +171,7 @@ public class DirectionBridge extends Block{ Draw.rect(dirRegion, x, y, rotdeg()); var link = findLink(); if(link != null){ - Draw.z(Layer.power); + Draw.z(Layer.power - 1); drawBridge(rotation, x, y, link.x, link.y, null); } } diff --git a/core/src/mindustry/world/blocks/distribution/DirectionLiquidBridge.java b/core/src/mindustry/world/blocks/distribution/DirectionLiquidBridge.java index f9b62d0a7c..d55f77ed45 100644 --- a/core/src/mindustry/world/blocks/distribution/DirectionLiquidBridge.java +++ b/core/src/mindustry/world/blocks/distribution/DirectionLiquidBridge.java @@ -48,7 +48,7 @@ public class DirectionLiquidBridge extends DirectionBridge{ Draw.rect(dirRegion, x, y, rotdeg()); var link = findLink(); if(link != null){ - Draw.z(Layer.power); + Draw.z(Layer.power - 1); drawBridge(rotation, x, y, link.x, link.y, Tmp.c1.set(liquids.current().color).a(liquids.currentAmount() / liquidCapacity * liquids.current().color.a)); } } diff --git a/core/src/mindustry/world/blocks/production/BeamDrill.java b/core/src/mindustry/world/blocks/production/BeamDrill.java index 521845cfaa..904f35d323 100644 --- a/core/src/mindustry/world/blocks/production/BeamDrill.java +++ b/core/src/mindustry/world/blocks/production/BeamDrill.java @@ -25,6 +25,11 @@ public class BeamDrill extends Block{ public @Load("drill-laser") TextureRegion laser; public @Load("drill-laser-end") TextureRegion laserEnd; public @Load("drill-laser-center") TextureRegion laserCenter; + + public @Load("drill-laser-boost") TextureRegion laserBoost; + public @Load("drill-laser-boost-end") TextureRegion laserEndBoost; + public @Load("drill-laser-boost-center") TextureRegion laserCenterBoost; + public @Load("@-top") TextureRegion topRegion; public @Load("@-glow") TextureRegion glowRegion; @@ -33,7 +38,7 @@ public class BeamDrill extends Block{ public int tier = 1; public float laserWidth = 0.65f; /** How many times faster the drill will progress when boosted by an optional consumer. */ - public float optionalBoostIntensity = 2.5f; //TODO would be nice to change laser color when this is active. + public float optionalBoostIntensity = 2.5f; public Color sparkColor = Color.valueOf("fd9e81"), glowColor = Color.white; public float glowIntensity = 0.2f, pulseIntensity = 0.07f; @@ -41,6 +46,7 @@ public class BeamDrill extends Block{ public int sparks = 7; public float sparkRange = 10f, sparkLife = 27f, sparkRecurrence = 4f, sparkSpread = 45f, sparkSize = 3.5f; + public Color boostHeatColor = Color.sky.cpy().mul(0.87f); public Color heatColor = new Color(1f, 0.35f, 0.35f, 0.9f); public float heatPulse = 0.3f, heatPulseScl = 7f; @@ -185,7 +191,7 @@ public class BeamDrill extends Block{ public @Nullable Item lastItem; public float time; - public float warmup; + public float warmup, boostWarmup; public float lastDrillSpeed; @Override @@ -245,7 +251,10 @@ public class BeamDrill extends Block{ float multiplier = 1f; if(cons.optionalValid()){ + boostWarmup = Mathf.lerpDelta(boostWarmup, 1f, 0.1f); multiplier *= optionalBoostIntensity; + }else{ + boostWarmup = Mathf.lerpDelta(boostWarmup, 0f, 0.1f); } lastDrillSpeed = (facingAmount * multiplier * timeScale) / drillTime; @@ -291,26 +300,46 @@ public class BeamDrill extends Block{ Draw.z(Layer.power - 1); Draw.mixcol(glowColor, Mathf.absin(Time.time + i*5 + id*9, glowScl, glowIntensity)); if(Math.abs(p.x - face.x) + Math.abs(p.y - face.y) == 0){ - Draw.rect(laserCenter, lx, ly, width * laserCenter.width * Draw.scl, width * laserCenter.height * Draw.scl); + Draw.scl(width); + + if(boostWarmup < 0.99f){ + Draw.alpha(1f - boostWarmup); + Draw.rect(laserCenter, lx, ly); + } + + if(boostWarmup > 0.01f){ + Draw.alpha(boostWarmup); + Draw.rect(laserCenterBoost, lx, ly); + } + + Draw.scl(); }else{ - Drawf.laser(team, laser, laserEnd, - (p.x - dir.x/2f) * tilesize, - (p.y - dir.y/2f) * tilesize, - lx, ly, - width); + float lsx = (p.x - dir.x/2f) * tilesize, lsy = (p.y - dir.y/2f) * tilesize; + + if(boostWarmup < 0.99f){ + Draw.alpha(1f - boostWarmup); + Drawf.laser(team, laser, laserEnd, lsx, lsy, lx, ly, width); + } + + if(boostWarmup > 0.001f){ + Draw.alpha(boostWarmup); + Drawf.laser(team, laserBoost, laserEndBoost, lsx, lsy, lx, ly, width); + } } + Draw.color(); Draw.mixcol(); Draw.z(Layer.effect); Lines.stroke(warmup); rand.setState(i, id); Color col = face.wallDrop().color; + Color spark = Tmp.c3.set(sparkColor).lerp(boostHeatColor, boostWarmup); for(int j = 0; j < sparks; j++){ float fin = (Time.time / sparkLife + rand.random(sparkRecurrence + 1f)) % sparkRecurrence; float or = rand.range(2f); Tmp.v1.set(sparkRange * fin, 0).rotate(rotdeg() + rand.range(sparkSpread)); - Draw.color(sparkColor, col, fin); + Draw.color(spark, col, fin); float px = Tmp.v1.x, py = Tmp.v1.y; if(fin <= 1f) Lines.lineAngle(lx + px + or * ddx, ly + py + or * ddy, Angles.angle(px, py), Mathf.slope(fin) * sparkSize); } @@ -321,7 +350,7 @@ public class BeamDrill extends Block{ if(glowRegion.found()){ Draw.z(Layer.blockAdditive); Draw.blend(Blending.additive); - Draw.color(heatColor, warmup * (heatColor.a * (1f - heatPulse + Mathf.absin(heatPulseScl, heatPulse)))); + Draw.color(Tmp.c1.set(heatColor).lerp(boostHeatColor, boostWarmup), warmup * (heatColor.a * (1f - heatPulse + Mathf.absin(heatPulseScl, heatPulse)))); Draw.rect(glowRegion, x, y, rotdeg()); Draw.blend(); Draw.color();