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!ia0vp^aX{?N!3HFMo-}X+QjEnx?oJHr&dI!FU|^E)ba4!+ znDcgaVBR4E0hh^Lv$srd_|2_%ao*CuD^<0P6hE%BHO{yvE{8fK#!De@XG47&rkfYt!9~};5Kes$GK4N%!x#<3<&p&!twy|=4OmA6rV!8Nz zY)W32MH}}eIy(K4T&VTw<x3MMoYwWP zwZhwD9;AowoK>@O!}?`nsy~e!`_Dbs`n2$D-jhciaWfJhU2I)!>~Q3}h)vdZ1FwH2 zA169}KjOCSwc-^aMlf~jV*O3ybmhTbY!F~^xLH1o1z@iP93vO=em?$3Q> z*L?3w*jCdvC$oNmNS^rOlxs6S@wzds^f5J+oOw9B=E>I5Cy%5o%a5)8weZkuhWXcD z?-cI7;xC8d zwh79vQat}S+HvMm@hD06t*q^)POlDdUE(giHgWHbExTu>uPCcOU6)urP1cA6zW`^fJ9G2FYM;mjdmf?@D<^>bP0l+XkKKdT+J 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 zcmV;^0WAKBP)Px$jY&j7RA_QG2pkb3bOgka5jq%R3pg2BCUG7Av>~GJoHP&D zafnN_v9TWK%lPt)8-|l>oQECy04aUDj@jo)>1n#d>p~AmMLH#)iZm)8o@}Lul(*6Y zkq=Gu{%ey^*{^!VN zTK~xkZ%%!CK@T1&y6E3pW*APd(nCc@K5~VF%VA_u`9q`kPFOs8Ste@Gf@8XDPjuN3 z>aqp*3(`b^&FO6b$#Fl?W@fr<>@!_{N?}@kysAQr&xIQsPTp~%6++10&ZqzY002ov JPDHLkV1kna(v<)J 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 zcmV+!0p|XRP)Px#(@8`@R9J=Wmcb2!FbqXqra%nF2pkb3FhbR1M_@3-7H|S3X<~nqxIHvJLGs0W zF^Gid-|L|XkJG#(xz}@sp9=?3xK;uRY2g|PF>n`-O0bi;a73a>P4xXx1Wv>+Bx>fu z+pa6+5$(jsKy2lf65b8hb}NbN;#=@gBKZ+o!rc-Dtg8xCfhr&hZ0l+&@bh1>*MVhu zC--elC%7!T8J(5W2^St_q3sxv(9|iBIu)@;vQiS463CH|;IP0Q2?VYZ f&`6;0T0}$#s%uw}r`|V|00000NkvXXu0mjfqbF|W literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/units/spiroct-leg-base.png b/core/assets-raw/sprites/units/spiroct-leg-base.png new file mode 100644 index 0000000000000000000000000000000000000000..0c2a1783e1e3924a5c1e35efe8831d8ac0d9da26 GIT binary patch literal 411 zcmV;M0c8G(P)Px$RY^oaR9J=8n9U8sFbsuV#1N>1bp(!x5jq0m*by>V#TIai6t#Bz5A+>F>-WAS zB8>qKuHkl{-|fKjF%J=iYu%`Nly(3B0Izi=Unpf^17%GLrV}=J8AtMkX}a!!TVWG| zjYSCs0I)&yf@VRWTc}lUJGJToTk35^ZC!E&swBar;kD1UqE?*+;7l!nA|XToJyYwJ zh=LFU^h|#Vp#t!jM%SwlY5>gC3*~_@0ko!3f1g$eGl0glhR=X-0Z6nB9SxBRK!uHj zNCV(PMnR-+p=_lAa5KpLEJ7n?$ZDO002ovPDHLk FV1iLepPx$sYygZR9J=8m_3ezFc5{Gqa0$DIu(c5Vzp;TMU7G+j^HC8s)#yO&am2I58;YB z+FOujS@AQ2$HqeT>##BNKE@uf)vdkv_|vt>6%x~7d@+VeMTdDqY7h$mAT0=0R=Ur! zGue49a#dCu0MOJLxArc6@U_T;7_>>1mF@w6f-t5d+bMm2{jhy+r_-YC_xY51#N*Mj z#pQnr8PiQVhUA*U)d1l?*dsEwcdx=Vp8(mVtQr3 zrakw^3jmh|OKI=T{RDuU&$viLvNXPx*K1oDDRCt{2oIPtKM-Ya~#=^>+DA-`ZdvGA5P=UdTkQF#k-aJZa7U#6CZt{sr*^_%%J-gbX;2LJ$r(Xes+x8EFYd|VsvAO}6@ zDZ<}q=OoaBo*Mj(aP0Ezu>ttsFaBs8mx3Nd!T;>-SB-67k3a1^?vJ~6fP(%Zwi&Ba z@Ff5ii)&act~+VlL!E&yg--o$(}z-ZKGbMMfi8jHl{x`WWh+=0SLft*4sdE;%9hlZ zT527<75Z#C&)QBMvx)Glr&V|y#VI0{=3zj`KR#RirhxA4JqG}~rym_3u6|E{{d@KM zyDz_Q9Gmi~cFI}RcszOGATf|w`v+UAoScIm#KFJ6xr0A{|1a4VzQA#3s0qK?P-D#) z_7ApJza`L9+wi&Arbacho+{v9ynNLfbZ(yqd}}N@x&M`dqq`3$jeU5i$=&_~tPdd^ z^pbOMnSq*j{@VTx004ge=?7O6TS<0Pv{b1;3@c8+ik-y1}}9acN1fQ&TX@_k@GRg1AYhAz;xlEB9ou?_gH=_HoL`I@=bJ02XH+SsC&h6K>7oS75$L-Ha1>W0%)Z@5# zNXV54xc#Z&Mf)hwyTggW=M2|^PAPXGq&7?7TlQm#z{du+cW&37ZEB&X@?#3nY&s{G zZ={Bn#p0TLP@aOX&DC+Ni^X;0d?|};RzpF@4O5Ti-W~I-u{}N?fbZcLV5%)Fe1T@u zc_Xu0D|o^Cf>+Mphkrh2+lr5oz*mj&RPTs;BiDl@%kTi+IZhp`T{}6O&c!{D^DT~v zYD@di5rdZ)F0DWU){wXjF3>K(rbe9oY@u8|rtq<}2z<5RXZOGhMeN;zc5c#mEj zbaZ^!m=LYK(Xu8Uw}msBy}jqI4^Sk`T3@Cu3DCOS&T7jOx>Q;4XTMC`m-&T2sa_jE zX@-E5f(;6OXuAe<2{TcT*TUDVSq$Um_RehsPzn6_-2H>CwYIPi8ap{jS*d`IPbb-O zCw5d4Se(XDfojKdi495h6wgNzA2c0QJ&bVhses#tUjw?t2kod}8ow#{++VUS_%)$( zK3L{KQ&tl=zbiNVLCFfWt;F6&=R@GWfPBoxodG`E` zuGIud0>W=fb0r9C**5(9a<}-Bm&m-K131=dVsY@P*VD1h_*^agc*w)xC_o(i8qfg> zN(NT=+&2Nnr;{c3CbvYXd1kS=W&u&~Ye5HasMX|-!5}3cV&HmT$z8Fw?V8X59KPNm zg|GSgMGC&9EDWIg^2Upoua>o;1309U5(l)O9HEYvz@U!tXgik2b7;2**{Pmi;$-Og z)<=IO-i+g4kIPCoOf5T5Z=@ap9)%>11hzwTb%B;_20^8~qRZ+!Ra{egTRA O0000DYS_3;J6>}?mh0_0YbgZG^=YI&~)2O zCE{WxyDIj)B7hJE5k;TOEMrcRlJFc~_we!cF2=LG&;2?2)ttoupGZ8*4AUmwAfDc| z4bJ<-VOEq?;&bAtNf#u3?RNSu0mr>z@3D!JNLb%ypV0NMI35kRU=q6(y8mBSx!EiiH&I$36VRO}|7gg4!CxZDATo($QPo06ZVkk13}XY@^3VBi)Athv3l_Hp_Eq^Yaq4RCM> zj1?$*-Q(T8oxS~grq$mMUqy1Cddk&x0002+Nkl)a1WzmSma7-vw5L5JCtc-(!K8wB9zi zX}#Yyko$-L1m?|;pd^-vNn^Yc`xNu1a?oSYXy0Fh>()uY6Ug&*P+KSAvV`UmmY549 zSt?1EK8>R!Uh! zU83Vt2}>XecuK&Qke7tpTL^`@0P^q>1CqcyiA}xw{oiR-jY?QIF9O^Hsv0zmXr2&4 f2qAPx$cu7P-RA_K^VpH2MUKlAV`Wp^#;4>5~566q4_$X0w}lzn#tY%Sw^R-_7gW`^LS-v3mhG!VZwUh$;X{dYa8G zh-v`IgQyCSc!UiwnKs#?B*FqHl~17%IABP5GAN*Sc?kp@qPzqFhLk_Qydak9r0Q$b zfv^F_GC>z9)&;weRsZuAc6r(kBt+70Cqj|k`G~f3oRC( zonvhTF%MY)edSYV1P&;bPazQ~pk4mu<2idSg}?y0J6}Q&K>&T_x8F=oM72@Eg|Lni z?KlwjQKB6hQDu~9heTLMiIcOh;&u0TH%I%fZ676ah_nm)BC3oM&YjqM3scfRX=#*L zuSP$=XY*TRZ44j{`#P~+jj-|({0KchG&_rtC~wbX+H4N> o$q~!H2Sg%~NF)-8L?YRI1F&z7c_di$8UO$Q07*qoM6N<$f>89hqW}N^ 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)); } }