From dad5b186dbd82acdf8b583d8ba7fcd7806b72e10 Mon Sep 17 00:00:00 2001 From: Anuken Date: Sat, 11 Jul 2020 23:35:58 -0400 Subject: [PATCH] Bugfixes / Negative knockback / Unit progress --- core/assets-raw/sprites/units/spiroct-cell.png | Bin 0 -> 606 bytes core/assets-raw/sprites/units/spiroct-foot.png | Bin 0 -> 467 bytes core/assets-raw/sprites/units/spiroct-joint.png | Bin 0 -> 281 bytes .../sprites/units/spiroct-leg-base.png | Bin 0 -> 411 bytes core/assets-raw/sprites/units/spiroct-leg.png | Bin 0 -> 495 bytes core/assets-raw/sprites/units/spiroct.png | Bin 0 -> 1668 bytes .../units/weapons/mount-purple-weapon.png | Bin 0 -> 697 bytes .../sprites/units/weapons/spiroct-weapon.png | Bin 0 -> 446 bytes core/src/mindustry/content/Fx.java | 9 +++++++++ core/src/mindustry/content/StatusEffects.java | 9 ++++++++- core/src/mindustry/content/UnitTypes.java | 14 +++++++++----- .../mindustry/entities/bullet/SapBulletType.java | 2 ++ core/src/mindustry/entities/comp/BulletComp.java | 3 ++- core/src/mindustry/entities/comp/PuddleComp.java | 6 +++--- core/src/mindustry/graphics/Pal.java | 2 ++ core/src/mindustry/type/StatusEffect.java | 6 ++++-- 16 files changed, 39 insertions(+), 12 deletions(-) create mode 100644 core/assets-raw/sprites/units/spiroct-cell.png create mode 100644 core/assets-raw/sprites/units/spiroct-foot.png create mode 100644 core/assets-raw/sprites/units/spiroct-joint.png create mode 100644 core/assets-raw/sprites/units/spiroct-leg-base.png create mode 100644 core/assets-raw/sprites/units/spiroct-leg.png create mode 100644 core/assets-raw/sprites/units/spiroct.png create mode 100644 core/assets-raw/sprites/units/weapons/mount-purple-weapon.png create mode 100644 core/assets-raw/sprites/units/weapons/spiroct-weapon.png diff --git a/core/assets-raw/sprites/units/spiroct-cell.png b/core/assets-raw/sprites/units/spiroct-cell.png new file mode 100644 index 0000000000000000000000000000000000000000..180d3e986b29d9a3b870aa29d96fb85931b99b61 GIT binary patch literal 606 zcmeAS@N?(olHy`uVBq!ia0y~yV2ER2VDRQ(V_;zTdD6g*fq{XsILO_JVcj{ImkbO{ z5}q!OAr*7p&JN5wWFX)&xoh^8=?%ZR^)Aj^`gf(Owvpn;b+*PC_r&EV8vo`fJ7IM? zsmJh`L~@TI^N+vkuPxZ@E-=PjR1R{q+xnx!q3q|DN5)4CPcIkU|MdAs56d=I&X4IW zt4=HzzmHAH>#}I$zC=f-KavZzKD|8py(46z|HX{ zBazd({66F z+HTxksTxzyFh$<{fns3 zS6KYzP~0{_*;R_?A4faRTq+(V>Asb<-PGyT0j^8jrPn6zy|HEYtn?LS6>itXrfm`r t2(3y?$<<7XV!XOk{N7Hp?H<9kl=e literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/spiroct-foot.png b/core/assets-raw/sprites/units/spiroct-foot.png new file mode 100644 index 0000000000000000000000000000000000000000..c501d7843d38c1c5c0b9d68d097777a64d4c0e09 GIT binary patch literal 467 zcmeAS@N?(olHy`uVBq!ia0y~yV9*0$4mJh`hVY%*<_ruBjKx9jP7LeL$-HD>VC?mD zaSX|5d^__X?;!&oSKeR+w$~gog32WH6aMRk9o}0u zZj^g|`p2gp>9)z)bJ}HpF=*EA?z{Qi^JV6)!>^tAJzT9+=XaTC$FKrBj|4Nh->0ROJb75Og4M=p=_Qx@ z6WfmzGfj(dnKkiK!I5aj&gY+Qo+^GX=b`vnrf-MX#}3ygU!Uo$dR#o!m8(#1@zV(! zv8Q+2HvD^jB0cK=Nv?dq+G?CNe;)Y^PHF(vS)^WyJ*5jItk zYFQVWl6U3!m)sP1wTbmR_a&FcvoCWQP8QlmdKI;Vst0FwjKl>h($ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/spiroct-joint.png b/core/assets-raw/sprites/units/spiroct-joint.png new file mode 100644 index 0000000000000000000000000000000000000000..1fe4fdbd3eed70f09635a22168d8aa0a3c550067 GIT binary patch literal 281 zcmeAS@N?(olHy`uVBq!ia0y~yU{C;I4mJh`hT^KKFANL}jKx9jP7LeL$-HD>V7Tn* z;usRq`gYnu-ev1eFb(t|q%D7#tBRU{cLYs-L{W*2K>7)6r_fj+Phq zUoYhBzr06z=k?;Y`P}S*JHnW_G9OBD8WxE6d2N`yv%qDMr|*})0W5w;^i{H+9lE_v z`>EjDBgY+bo=y|G$9ug@yYuy<=nnx(KLw)>-4$Y8vzjZUQA>d<=XI9WhtKgFuQ#Sv zs(;V*Ro|hrTXOEy%benJX$#*-9NQv?t0e{ohaPY z>&nT>u)*<5Q<~#~=oO*))>~gOM!(8+&5bQ$U8Qnx$-}MZw=D{r%lg1aw^2#ag~2xX z^|X#A0p>40^_&ZtKFn~tzFHuQ;mj58r;P@TTb2dZ&ky4;ZaB83?R-N4qsJCrS>B0U z4z0Z{9?TD%+#HwWFU(oWSYUkOub!<;aCifkq^R5j?r4wd7n%0nF$}kMJC#&0us3`u zSaphnKY`_foZqdgpsAa9vKaDjtf>0hwUTMUnKklBg5Q%357@V{3ov~-qvNP#Ev(aU z#79_T*V>|Ovl3Z%$_2Z1PmE#ouHPbVu-d+hsbbddhzn<)y?c23b^CSp*-9rLiRHb! R%)r3F;OXk;vd$@?2>?+^p3NZkcif+Gi>{s4Fp=}FP2G~Y9-o!BWY{8hih+;V&4O0g;gC^q31T-O5%UmWpyih zLR#cU-B8wv!GS~8}-tXEni&4{M z+FWzSe9h(8G*ha7?6}XK^m@C)7PcJKhDiCoz*+@{n@`P4YMC_oW<_OFz4lrv&;tsANZPW6_d|7 z`~Bc<*_=Y_O(A}(PHIi*s%&8JIB8?R>~YqHVGqN#nlG6wA5&}@7#J8lUHx3vIVCg! E0HB@J)Bpeg literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/spiroct.png b/core/assets-raw/sprites/units/spiroct.png new file mode 100644 index 0000000000000000000000000000000000000000..a69a0b26575f0322a643f3f08f4f7da67a9ff75a GIT binary patch literal 1668 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 Gp$Py6t~=oX literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/weapons/spiroct-weapon.png b/core/assets-raw/sprites/units/weapons/spiroct-weapon.png new file mode 100644 index 0000000000000000000000000000000000000000..91ff27033e72d03102542119c7b2ff92969577d3 GIT binary patch literal 446 zcmeAS@N?(olHy`uVBq!ia0y~yU@%}{V6fm|V_;y|9a#N}fq{XsILO_JVcj{ImkbPy z6`n4RAsLNtZz%dPJ4zh=$j;U7sNm7%@RjWjYqR2tW$rhW1w>Zn9at2Y!FM4f;e)M1 zY@qY3yK`So`gdPs()*QZn`c+28-hLg=JxF%Gz@EXiCySYf^5R=AK|Ahh;2_BV38VkxQIay>D?O|bTn_|CzkHWN9 zOI~GPY23hg?D6V*k4+9SotWycC}@$e`_IcyR@HK?4ve+s`&ty57`^&?g&P^lY(G!p zPpszF6`MadIhVzdKa!#LX>bM$p9V;q#)8;?Paj)W>$M(W*l8W_B;d$U`*iz#A3v9^ zfrnZ*^a;JS5cn3jNLDH^bxKCNON4vpF*3QJbd*V~o3ihBPYeSYFw<8#W z#2;$ppHI1!!}s;1;OYJBE=m(URD?QRly25AZ^-YfREhW^#lXP8;OXk;vd$@?2>?*^ BxT637 literal 0 HcmV?d00001 diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 6212d64e63..b7dde19ab8 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -632,6 +632,15 @@ public class Fx{ }), + sapped = new Effect(40f, e -> { + color(Pal.sap); + + randLenVectors(e.id, 2, 1f + e.fin() * 2f, (x, y) -> { + Fill.square(e.x + x, e.y + y, e.fslope() * 1.1f, 45f); + }); + + }), + oily = new Effect(42f, e -> { color(Liquids.oil.color); diff --git a/core/src/mindustry/content/StatusEffects.java b/core/src/mindustry/content/StatusEffects.java index 173a8bd6fc..55672f886c 100644 --- a/core/src/mindustry/content/StatusEffects.java +++ b/core/src/mindustry/content/StatusEffects.java @@ -9,7 +9,7 @@ import mindustry.type.StatusEffect; import static mindustry.Vars.*; public class StatusEffects implements ContentList{ - public static StatusEffect none, burning, freezing, wet, melting, tarred, overdrive, shielded, shocked, blasted, corroded, boss; + public static StatusEffect none, burning, freezing, wet, melting, sapped, tarred, overdrive, shielded, shocked, blasted, corroded, boss; @Override public void load(){ @@ -74,6 +74,13 @@ public class StatusEffects implements ContentList{ }); }}; + sapped = new StatusEffect("sapped"){{ + speedMultiplier = 0.7f; + armorMultiplier = 0.8f; + effect = Fx.sapped; + effectChance = 0.1f; + }}; + tarred = new StatusEffect("tarred"){{ speedMultiplier = 0.6f; effect = Fx.oily; diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index 0b2c5e26cf..18cf72ad22 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -71,7 +71,7 @@ public class UnitTypes implements ContentList{ hitsize = 9f; range = 10f; health = 500; - armor = 1f; + armor = 2f; immunities.add(StatusEffects.burning); @@ -91,7 +91,7 @@ public class UnitTypes implements ContentList{ rotateSpeed = 3f; targetAir = false; health = 790; - armor = 4f; + armor = 5f; weapons.add(new Weapon("artillery"){{ y = 1f; @@ -267,6 +267,7 @@ public class UnitTypes implements ContentList{ legTrns = 0.6f; legMoveSpace = 1.4f; hovering = true; + armor = 3f; weapons.add(new Weapon("eruption"){{ shootY = 3f; @@ -290,7 +291,7 @@ public class UnitTypes implements ContentList{ spiroct = new UnitType("spiroct"){{ speed = 0.4f; drag = 0.4f; - hitsize = 10f; + hitsize = 12f; rotateSpeed = 3f; health = 600; immunities = ObjectSet.with(StatusEffects.burning, StatusEffects.melting); @@ -300,6 +301,7 @@ public class UnitTypes implements ContentList{ legMoveSpace = 1.4f; legBaseOffset = 2f; hovering = true; + armor = 3f; weapons.add(new Weapon("spiroct-weapon"){{ shootY = 4f; @@ -314,12 +316,13 @@ public class UnitTypes implements ContentList{ bullet = new SapBulletType(){{ length = 75f; - damage = 14; + damage = 15; shootEffect = Fx.shootSmall; hitColor = color = Color.valueOf("bf92f9"); despawnEffect = Fx.none; width = 0.54f; lifetime = 35f; + knockback = -1f; }}; }}); @@ -331,12 +334,13 @@ public class UnitTypes implements ContentList{ bullet = new SapBulletType(){{ length = 40f; - damage = 9; + damage = 10; shootEffect = Fx.shootSmall; hitColor = color = Color.valueOf("bf92f9"); despawnEffect = Fx.none; width = 0.4f; lifetime = 25f; + knockback = -0.5f; }}; }}); }}; diff --git a/core/src/mindustry/entities/bullet/SapBulletType.java b/core/src/mindustry/entities/bullet/SapBulletType.java index e3007ac0f1..6dab6ce13c 100644 --- a/core/src/mindustry/entities/bullet/SapBulletType.java +++ b/core/src/mindustry/entities/bullet/SapBulletType.java @@ -23,6 +23,8 @@ public class SapBulletType extends BulletType{ hitSize = 0f; hittable = false; hitEffect = Fx.hitLiquid; + status = StatusEffects.sapped; + statusDuration = 60f * 3f; } @Override diff --git a/core/src/mindustry/entities/comp/BulletComp.java b/core/src/mindustry/entities/comp/BulletComp.java index f8096bee81..3b0be13cd7 100644 --- a/core/src/mindustry/entities/comp/BulletComp.java +++ b/core/src/mindustry/entities/comp/BulletComp.java @@ -19,6 +19,7 @@ import static mindustry.Vars.*; abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Drawc, Shielderc, Ownerc, Velc, Bulletc, Timerc{ @Import Team team; @Import Entityc owner; + @Import float x,y; IntSeq collided = new IntSeq(6); Object data; @@ -91,7 +92,7 @@ abstract class BulletComp implements Timedc, Damagec, Hitboxc, Teamc, Posc, Draw if(other instanceof Unit){ Unit unit = (Unit)other; - unit.vel.add(Tmp.v3.set(unit).sub(x, y).setLength(type.knockback / unit.mass())); + unit.impulse(Tmp.v3.set(unit).sub(this.x, this.y).nor().scl(type.knockback * 80f)); unit.apply(type.status, type.statusDuration); } diff --git a/core/src/mindustry/entities/comp/PuddleComp.java b/core/src/mindustry/entities/comp/PuddleComp.java index 61eed49b69..5c29a04d57 100644 --- a/core/src/mindustry/entities/comp/PuddleComp.java +++ b/core/src/mindustry/entities/comp/PuddleComp.java @@ -68,7 +68,7 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ //effects-only code if(amount >= maxLiquid / 2f && updateTime <= 0f){ Units.nearby(rect.setSize(Mathf.clamp(amount / (maxLiquid / 1.5f)) * 10f).setCenter(x, y), unit -> { - if(unit.isGrounded()){ + if(unit.isGrounded() && !unit.hovering){ unit.hitbox(rect2); if(rect.overlaps(rect2)){ unit.apply(liquid.effect, 60 * 2); @@ -80,11 +80,11 @@ abstract class PuddleComp implements Posc, Puddlec, Drawc{ } }); - if(liquid.temperature > 0.7f && (tile.build != null) && Mathf.chance(0.3 * Time.delta())){ + if(liquid.temperature > 0.7f && (tile.build != null) && Mathf.chance(0.5)){ Fires.create(tile); } - updateTime = 20f; + updateTime = 40f; } updateTime -= Time.delta(); diff --git a/core/src/mindustry/graphics/Pal.java b/core/src/mindustry/graphics/Pal.java index a7f40ca968..84121a9893 100644 --- a/core/src/mindustry/graphics/Pal.java +++ b/core/src/mindustry/graphics/Pal.java @@ -8,6 +8,8 @@ public class Pal{ items = Color.valueOf("2ea756"), command = Color.valueOf("eab678"), + sap = Color.valueOf("665c9f"), + shield = Color.valueOf("ffd37f").a(0.7f), shieldIn = Color.black.cpy().a(0f), diff --git a/core/src/mindustry/type/StatusEffect.java b/core/src/mindustry/type/StatusEffect.java index ae0a773476..2295fa6e0a 100644 --- a/core/src/mindustry/type/StatusEffect.java +++ b/core/src/mindustry/type/StatusEffect.java @@ -19,6 +19,8 @@ public class StatusEffect extends MappableContent{ public float speedMultiplier = 1f; /** Damage per frame. */ public float damage; + /** Chance of effect appearing. */ + public float effectChance = 0.15f; /** If true, the effect never disappears. */ public boolean permanent; /** Tint color of effect. */ @@ -51,8 +53,8 @@ public class StatusEffect extends MappableContent{ unit.heal(damage * Time.delta()); } - if(effect != Fx.none && Mathf.chanceDelta(0.15f)){ - effect.at(unit.x() + Mathf.range(unit.bounds() / 2f), unit.y() + Mathf.range(unit.bounds() / 2f)); + if(effect != Fx.none && Mathf.chanceDelta(effectChance)){ + effect.at(unit.x + Mathf.range(unit.bounds() / 2f), unit.y + Mathf.range(unit.bounds() / 2f)); } }