From e8c277d7b837aedbc096a359b4dbadd4e91e7c06 Mon Sep 17 00:00:00 2001 From: Anuken Date: Fri, 11 Feb 2022 20:08:59 -0500 Subject: [PATCH] Disperse turret mostly done --- .../turrets/disperse/disperse-blade-heat.png | Bin 0 -> 9768 bytes .../turrets/disperse/disperse-blade-l.png | Bin 0 -> 1022 bytes .../turrets/disperse/disperse-blade-r.png | Bin 0 -> 986 bytes .../turrets/disperse/disperse-mid-heat.png | Bin 0 -> 12942 bytes .../blocks/turrets/disperse/disperse-mid.png | Bin 0 -> 2328 bytes .../{disperse.png => disperse-preview.png} | Bin .../turrets/disperse/disperse-side-l.png | Bin 0 -> 590 bytes .../turrets/disperse/disperse-side-r.png | Bin 0 -> 578 bytes ...blimate-back2.png => sublimate-back-l.png} | Bin ...blimate-back1.png => sublimate-back-r.png} | Bin ...imate-front2.png => sublimate-front-l.png} | Bin ...imate-front1.png => sublimate-front-r.png} | Bin ...ate-nozzle2.png => sublimate-nozzle-l.png} | Bin ...ate-nozzle1.png => sublimate-nozzle-r.png} | Bin .../{titan-side2.png => titan-side-l.png} | Bin .../{titan-side1.png => titan-side-r.png} | Bin core/src/mindustry/content/Blocks.java | 58 +++++++++++++----- .../src/mindustry/content/ErekirTechTree.java | 4 ++ core/src/mindustry/content/Fx.java | 8 +++ core/src/mindustry/content/UnitTypes.java | 2 +- .../mindustry/entities/part/RegionPart.java | 8 +-- core/src/mindustry/ui/dialogs/ModsDialog.java | 3 +- .../defense/turrets/ContinuousTurret.java | 2 +- .../blocks/defense/turrets/LaserTurret.java | 2 +- .../world/blocks/defense/turrets/Turret.java | 13 +++- core/src/mindustry/world/draw/DrawTurret.java | 9 ++- 26 files changed, 79 insertions(+), 30 deletions(-) create mode 100644 core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-l.png create mode 100644 core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-r.png create mode 100644 core/assets-raw/sprites/blocks/turrets/disperse/disperse-mid-heat.png create mode 100644 core/assets-raw/sprites/blocks/turrets/disperse/disperse-mid.png rename core/assets-raw/sprites/blocks/turrets/disperse/{disperse.png => disperse-preview.png} (100%) create mode 100644 core/assets-raw/sprites/blocks/turrets/disperse/disperse-side-l.png create mode 100644 core/assets-raw/sprites/blocks/turrets/disperse/disperse-side-r.png rename core/assets-raw/sprites/blocks/turrets/sublimate/{sublimate-back2.png => sublimate-back-l.png} (100%) rename core/assets-raw/sprites/blocks/turrets/sublimate/{sublimate-back1.png => sublimate-back-r.png} (100%) rename core/assets-raw/sprites/blocks/turrets/sublimate/{sublimate-front2.png => sublimate-front-l.png} (100%) rename core/assets-raw/sprites/blocks/turrets/sublimate/{sublimate-front1.png => sublimate-front-r.png} (100%) rename core/assets-raw/sprites/blocks/turrets/sublimate/{sublimate-nozzle2.png => sublimate-nozzle-l.png} (100%) rename core/assets-raw/sprites/blocks/turrets/sublimate/{sublimate-nozzle1.png => sublimate-nozzle-r.png} (100%) rename core/assets-raw/sprites/blocks/turrets/titan/{titan-side2.png => titan-side-l.png} (100%) rename core/assets-raw/sprites/blocks/turrets/titan/{titan-side1.png => titan-side-r.png} (100%) diff --git a/core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-heat.png b/core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..da0a55f816154661cf6e20fc4aa90ede5d1e641b GIT binary patch literal 9768 zcmai2byQSew7vsF3@zPVB2r4%kP?#80)sSC(jYY;NJ&Xb4G2gH3P^Xz(2bNZLr6-u z)SKU1>;3)KoVoX|yY9W`oc-TZer z!NXshw^vtD%1>M!HcR!BWLxlw7<#nfJdxs_G z+LdVD&b7jAtM(7^>$hbmxA|x7N2Y_<4Iu)%K8GDW;@GOG^+I|BSE&Z8C(D+Pc<-`@ z{1e_C^#+%Dk7`aF5(WQFg9p{NCE9#|;caEJhUP>b6y67%TO6MFCuSU2mmSc098VFd zw=)PLrq;jl2p}E}qAba7J2#Q6sFuaH&AJx7wCEk_!aS>zMC6+_&hyE zTN&g5EFNEZJ>LG*Ab(Ohof*L6HWCw6jCTiX?S@(0q!>5)1w`w+AgZk`=1;QhBs}j% zEr5^v4B`P;H%D)KSULt-^r^sqAYL}_I7VkVz7z>I88YV(UOkYcOrTR^e*cel0L zUDoH1hw3kWo8R1clAae>Yda!GBo2z8e2gnL zO=&g5x1KnoN<#clUq$(65ze;A4@W~i!xubFuYQ)tlzkH26*F_HQ=hW0tXozcYwHY~ ztb6I+b|LIZ`~0c@FZ5kk|8VWFl-EUVp%?O?<{#Lg6tC z<(~zwZr~@4&kM&rp2=d8MDm|M*Hg1kUY(1`WfW%p%465GP0=FQe@pGAu;9LueoxYb z9>3*DB7|OWxXCNHwv1NdRU1>ieQs0muQ6l+zloTp?#MmyK6u<1X}Pv0_@2M4$UaS> z-qGYeH>YZUj0oK?5SKzmXk+tU6{K(@R z$9XjO$9nh2R8?Qru@Ic@$-lC8PZfjZ`dy_qq-e}W6>&21_N#rD`kA_eJrN?MZ#b=?s@9Y_AdE znk&z#;C5Q54{)fKj$CR8(eF4)ZTm$p{G!jd?)#Z0YxWX-YQR|e%tHCdXkB6bER#Qj zDTA2g$WESsYZK#!!>Y>^58|9(u8YD0`yTh(`z2E^VRb>P(Wm@t2GXA*rJjrwu{(P+ zzucE3A#Hji7SSrUF{P-{#+2NaGxKX8!DECIBuT=-{%}q4m4ol3?XTb7dF}4{N+t!n zRS!oj-TLotgpcl1vXhDR$ya%1^CfB?Crbe@`HIvaBWCD3?8trNx8IJ6WVnvyuAV*f zKpd!24KPc*-UEoMULJ(ymr**w(lq)q=;jA`!!HD=-&425v=o-M^g;Vc1FF^CbF+D$ zyR5`K+uX4h3fR_h>^ez!7!<^JZle$Qgia`F#E<%XD z{+Ijt&TgV_g0180sSFw0rz#mYrGdZ1p`+!5GJa-k=VS)Njo{&boS@*uc;S~r6@k#u zkqU_~%ke}VtRpYZb1Ep$c}tIJ^&g|!-6X0l2N@wH{M_4Bam?}Ma^*HL4bkoWFcyyG zh&wJ5o{xk-(*53qS7fPmBx_Pi{4D)mGv2Aj8F5)eA%SIOMjuHnBP?43+**?fx+GS&$ z1m(X0CU9m)2$;>_b+#H zblr(GF1MzN#P^fjcr^B_AA|(0ZF;{*ryPqf9aRj{6!#bCrbc_e#T)rUmuBanRW}Ov zoC@PVj#3mIE1D~)%NbYjk_fM3 zxmB@XYixdP@{OuJS&j)bZ-4K4)U;vS>h;wNQ`Wx`P9L0(7^mDHr9lwNvhP1_D5VOQ z^X1Sh#2s|(@Mn-ltHRF7hTJ5D|7mZOd_V!Bmodr`ZHj#@(YEy2$drWIWG|P(m7>fY z^?8zkzbRbXk3W&0YC7!Iz9X~a%ccG@{x;c4-0 z8LPVqaUPpE{Kgj>`R4ioY&PAd?`X>T(z$L8NBeR1ZNSaJH;UcO8N@)C`td5Xj7p9K z_iGex3NPW5x60~wZ`+z(u4$THRbTlH7!tbJf2HBXAZmK}uEF1mD7ccWSpGw9^Cl{> zHebiz#uF=XpICRB+(_J=NAq=wRKuNK3cW@Mu|B?%@m~wfR(Ri*8~e-V!e= zK4HRD%R3%QsblA-DAZN3NoRyJKKQ;H6L53Yg|D zQ>4?z`I%IZ!*deSq9=n}x{e4+%aRX=^LiZW^Q_vZ^wPl^=eKK){zV_-Ql0*7O*lfA z{!BXCsjNIA4htap4JUp>s*=Vs7&g*2#FiKg;u(n2;Af$AQx}=Dq{rkw{Bt8`l}? z{BEp4O`+UQR=f|3lYR5-tmcK3ga7@^)Fct9U;9K0cO|iLWC7{YmlHuOT!y*)dI5f6 z;X&h0D`Kf5+xWuw&2YH!7KlWgziv*tS{txZC*Ru2evC z>x7!WaouXmd-YVIheDr<1zEkph{qF(7jeCt@v-{Ho3(=o%A~?R0X$Q=ZCY~){^t)> z?_ozrLqB_OlbS-o4qw*^H&r^~eu5%%LsuHQ>Sq zJQTWX$2wx>B*e$8?)A@n;W&@8kX1iSnZib%7JA5_z)KIxL)#*C`HPLV&G;-^Q#h9? zmdblGaWfWTiYGJd;Ju`=4p$>?qM3|Ne8O``We#%3EZandV;c6?OeD!=u3+<4Yo8c473#VuFJQ z{GUAb$4{MOrnlK|E0rhr0~s!;roW=@2_bQvu^cDsg}Rl--_8+^>PKQ?H}ZDsUU4s^ zk|_WH6z-&?q^qu^^ncOZb!Wr#hm6<4h!u-S?Dm`dY zZ@frYpWr`Ap_=&677-deiWK5f6ulGfbQz9dbcHrInYlRY+Jfc}wf|AX|I2R}Kuuao)i z>ci#v1YVdwGFhdyp<*aRKfCQZaBDLNg$X~T4Qr-B-EW2eW9oOmzPqSC*wo42psUKM z2|dGqFQR1j{p4(zn+3HcOY-n zOuYbr5Q7yV1qjH>p~c+9^H$eV!P~$h0ys%6q7}yhfM!@-S-}9K1ud?ODb#7&Or_Z% zkR*VeHJhEC_1%`l$vxu9<_nMU2g>FqV7+MQd0Pid>1-?IjJjX9#Cz}DDITz*$$n+S z?~5H#G{1x7km;yrdTq|1|L4+e!Bg@+9C1VHH*-JaW8sHC9^W~%+rb{L1V<2sa1b8C zk~-Nsb+Ax>JZFNRTV=~ifg8inElc}Sg!#Mw(smtQVn+e;prD3D3%`lk*L7w~XP7tE zpl4p47jN4RuY&#?mfKfB zjG;)4;&8J{`(CWm5h?w%=5Jq5p0I6XaOWhCJskHH)ZOG=Qe?~rR@ z$hERs#*t-IHPCT6df_kAH%c0*7_H2{wYR4t!Kf-k8!@}9QfZ`AW}qmLp(K`Vi2L3a zVw(%!#U}xUC>-8~bbvzK-39;s`!_y28)d@({*43?Vl3))U94gO+*>N%fDfkw1$&0| z34iAGS*&Iw3AqILGNbF@-~fq6v*P06JxD}8h*vFeqA#D}tC{B?9UV=2&P|-riLGQR z&bo(|Qb+d!uFC&JE-|L+vLah~Lp$L}dF0R7)6+xCz|hm%3;t44A}lExQ(Z00Ne)pi z)Wd9*gUjH`Z)Q_sYp)NSfa7R0JG5=dN(R-@A!Sd-$E;Q8>C*^lzkRE>Z|VIGmVZu9 zQ@SlR+qD|=rFE~Yu=)D=O)M_PSqYhJ5^Syh$~WMnONUSQ`0|I@fEED6qoAxWbZAl{ zBJ{7ymzg;^y|>pF)jxhj%*+@nvnMxSOg$yWtS?5nTjD&ES$vXEI8&*!P_`?RDg!?XqDZ#~j<#2*9yDiYguQnli z_wF4n3k&k^Uw$JaqwkH4j#rz#Ye$ca!jTNeRmO%7_CEga_fO0_8X9P@v9W3C=(>i7 ziPAGNj@Ab#7UdHsRcpE4Eek*xu}nT(8ltC0Hx*Fp>ztVB4>u8^-Mg-j`}ViDyT-?L zd$wRR&&CP|&!WE_j#IcjAT(6%b zbT4^l*2vvun8o$mqexj+x2H;G@2*cTE;#7p={qa%J7cV(zzJlwprE|XC`C35w!PN> zflNe7x;C0C?SF^{h1}ozY08Jc^seZbJvT_ky$Rt(Py>-{%d|V%M6U!yu(-?ol(9inHpHQ7Ho;knnXz={b*WK> zj}g>OxbT^Fcoi`ggUUb8C&a5;-M7q!f9Qb5ia9PMGFxxXt_k6Lt$4Mc--wW{{^Yz(SFjC3GzbICks2; z64TePFkDumgZQ;~r@GCu4Ypvy9^dD|O6p@FiHc8kx3vYQq@=uObmmy)>CkDB$F;(T zcKBOT1IF-lRqv2G zRDhM=_dcKX-OENe^ASB2$Q&5_fS;~L7WXri^9_Ff<+H>0nopd^cNU+Bqa8S-L9}G~ zG^RpZufhtmA4I6>Rx5?Kx63K2x@o~=gk{(T`@AsFe~UJp3Ec{ z630-Q)Boo3C`|%`w3RP2j2pzG7}vrQ>z$k93waRjY#fAN~k%rm815MEVKiTKWQ>mP+mB_z-{W_h?k$*Z{hAYO_ zE1J{i^AJmk6dP6#$ejmtutSRs?eoRCx;i_7|NN;a+O6Swl`IzfYHX9X7T0p%AZ7ld zcBleC#3|0$vp=X@S$TztsC=_ZDe(82tTdBKjOXJ#6g%XNwyMAWb5XNS09XYD{g$xY zXau11F!#E?Ww19d^z$H0i#<$J<6eT!oZv8kjJF~}OI_&6lXtJ{7IIDD1O`-)(x0)o zPk&UOKrU+M%(dq~zd03X2#$#*|Kv?gYO=$Hp{0E{ntXOp7_8DrPas2&pL%iW zmI_2|csB|viXiC>#A^MBArM4#>Q5CWHlBWEtmL5ts;wPbC{AmTVTB=wRSkZ#COg#d z?_?`*k0(%sjxGYq&5*4hw_dzLBUV1g`g7;e{JeN$Y&AgO-$E5MgEZ$_>!CCA1_jM- z^j7J7Zl_aDTMgh`=@(q)i5PnS(b8OP5VS4p5=U)eL7aLPI+L1scNfxv_Id;b^9m7? zrS`JWNyuNz=uoLE?(4Niy(G`^jsl3MWleWW23bbV)j7#&nV5cJSiKL4{KkQuv;_b1 z9gt}|d8o#^i_I59i=jcFy`1<%7Sw&IIWi^&GCVT!DkS7i3e1X?#;>4y>Bb)R93CsQ zmjf161z&xi96rozy$JR8ro<4YiJ95!1{@+?7JNv|jeJ5}UT5?r{nbqkK3QBi zzy=CQHN{S3#eW#X6$5Uz0p-hG7G!Pr=={^x*0v4_Va6n?*)!)xEqtNqxGHoh@PqSt zh<1>rHzVk*q!*40iNhP9zCDtQNpbr#kN7@ilG;m(8EU z5t?~o3AzCU7J6>GZyazGCb72I3C~|QPG7Szj{!OOlj|OJHI9#%50`BZo$@IlGEbYb zecM$IEx5;gQu<+3H_7rPkNU7$q8t4^N?5P1W#ULjBQjIde?v#As3hd&4}$)~k!7Ej zmR5+{Pe)4&gZi>Y)xqnesiBV*<*3BdYg&OZ9DQ$=Ub_lEwV-(T7-T4kTn=FjdO_g) zD)3^rIYAKC?kxtQkM~)r4Wx*PC^%ed@gpT9B+Sgps$rNJ@_8${rOyP8QL~rl?&K*z za&!{L=9*jAc)WK4>_F|KHSc5DseZIx>*(ktYZObR{0DgdPe%G(5mC{|rY6ao^F?=~ z_Y&nKe*G3wp3dn*oCgOq;4P(Kszj0qMW9UhO+a00T_b?6n-p$R??k~5+{rssS6L>zXU36ds_G*n{X>=K3x6^j05e!Z= zZ~s#Q|6@%OAD^5UQPv!*&+oX-W%qJ~6;qq#DghPf3S8+qMs)v)zs8#4uwM#<4VG(n zC83KNd4wbojZ6@nJ!+EtCj41X@>31`Noiu*%LMGt6OImK`FiTchBFNG^xc=268lRn zQGfo}Jt_$_*TQPbJY3PEZlf_t&9j$m%Eob4Q6<+niY-03z}smFWou%VujTf}$(Iwu z{k{I4EUg!l>uOAH(9w8oiX|pVA0&`?98~8GiBhzA5ctse3&w@{!I&*kqp_{T;tRg z_3vHtXlX%YylKMOqUq$}#7f1vl>GoqZ}{-}%4=a=7XTfD$05tixT?%MY&RrmHFIRC zJD$5bWO(yrZgFwykvQKIXxtT9hWsGee;+tJrFOmv?tLkMSTn(EqJ0TeP`WnIYl#wzl}(+}u$@tn3G2=8A;qo}x^ORNnxyjNrE+ z=@;2PJD%kIC6P5B3_$ice8ZlM!dO8Lk*pfBc8A#?t-QP_Smc5_G4$=g7Zx8q-e*EH zPjDDU%xLBLKp;|at83<6o&bo}=k|@^fq5*)&2aO2#2C-Xy_SrQxaEK}W=6?U~ z#Z*9t7-29v3HsUxnH8FO_Y&Jswv$7)nW|Ii_{s@HFRO3-CK@M+l5iT_Z*Z+slZ$u) zxyuUg=;%lkcV9;LM3G8JNL-%1gK~U+wKif1OF_Vpt}_M9o%xUWBP+VNzEKKXU-e_@ z{_W%mhr)C0tzW1n-Wuw z_BdlLnYk!dC6!}<3Wyo@?s_&Z;J>aQJsipq^uIdhT5b!B%FShBWMW!5J*Av?sjtN! z$M=^Sf??z;FQplX*)iw~qS}eCs(6vP!9B?Gy+Uf8vB#ovx#wX+Z*F7&$eyfzu>o6lLh@I z_IEW26M3>}hm-W1U|XLZdio#2%CNL-($6N^PwS{~_&O zg^Z3_Gj-zlVB-t+mU;#my5|#aXmJWaOqM~tEkS%j2mh-1&s#%o>AzXFb^rR6UVWmY zt^Fn>B;h&tyCAtl{j$?tlu$TcsF6C9C)n@;RhN$&uHIcfQF+YizA)nm1t;2y@(uq? zE$Xa#U9d)S+soBj5+{hKGe)N#BSL%AMEvf866 zw}zGi)@h8u*5$RGCFtZ#OX2Y`q~bP~^Y%>2Uolc}7b*i~R*?_!@$=hwx;XBl1AZsm#8+RLvx;Jl z=V+IC@(GSzwyzO#!QJxrH}7;1aw}*wfJ7oCq@|Ula*e`a6*E$sc?u%YL5I~YT8A5Pr0Nzp~v{J>Iah);*^QLKFAU3hE zaP>Wa1yIXViee=ymZvQ?a+I<_ya;@p8j2~}uY#Ci9U-F1%#vd~#RfisR|(wk=U9Nx z#n6ix;>*ifjMJs1QDGFZbXb9=24t!6tztAdF9*n81?Z0yu{ktu}>wQKDGUW zE~R@g{15+fAfKp(_l-+g?dJMAcnl$r?CZmo3%&c$)1$p>V`gD#c*3~wTyCQzC_uJ@wK&wSG+Ua!>fJkRnb12%cT~G5Cn_a{A}2TZ zQ@DFNGfE9BGr5yrD3!&PnHMx21@%!eXNA>gOJnHaaP=pli;Ii-#I@w5`K~+oE}jco zn+a9HYL;P6oLNwKGMoRXfBfr0iFvU;M9{KTXy+QkR1z{W2Kzz#C)r`495sNnb@Kck z>@uFR%=gXxUGSnjxv|d1&Ynga2F;(lv)`&Q*`=*bmXVox6%(F5AQn7W@wup(_%AGz zYVZw$3-y?j41cc87+QOo|7q3V&eh$0R@94`k#V{>5G<#1?b~%gfZ0L*gvzHd)Io!Y zPAL`pQx$t>XF?34s4|F`1sfbDzi2b+JfO#VI!Lk}N}mxw^hd;8!1zhQ*23)mzJO(W zPzqXDTSAh(lk~=@2?RP z14GU?j6qe0bp#=^5Ar`rqsP?wKYQVBd(+pM5l=Y&SdxwvHxIo%qgiebc4kDQyYh%a zq@_EYAyz74={6uf=He+Q3K8U0uwfP)JN#s%~nESz20Z#wBe(F*I!RCGGYV z1r1{y{Cqa(jen^#kfE+R9amR^k5xz*U{6 literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-l.png b/core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-l.png new file mode 100644 index 0000000000000000000000000000000000000000..78a096b9482fa64ed3e35e512802bf612c2704a5 GIT binary patch literal 1022 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>VBX>B;uumf z=j~m?JYh$XhKK1#6fGD^3Ys}IOE0;c;tg`^nrsw0sq0da<4Infr5m$Vj_@vM-pw;r zdGqTv^^XvcH z-Cq-aasB_CY2_*To9v_(&6ykjY-KJJlR=s+BcnxvBqO89mw$)VUoXGl%+Old-N3+8 z(bd4vQ_@9pZX0=bM)U1Dl`Ty2bzYr9mx9IN=Or z>6kU$;W)r}8fX;fY9Jxl4J2k>5)^1~Ru{j%DaJDC3dEvQw}@ksqkb@HLPRGwz1Ss}p%FpYPjS2;bQC^X}wd*A*C^ zZ&3#7<*a6$I**fa#z!GWMu|@XjEou`H}{=g_dt2_rtf;|{~a_b+uhe0?Wu z%9VJ>vF6Q(-R{4DVy3gtZaUW^s^EC4{NKB&`>s69PGEf@v5|>o;=}D3&ZqyS?e(gR ziry*C5Z2(KU%Ka;@y`pq3(lR>58l7+l({xz&-G}jU4lJ(e}_A0F|9s zbnRhxf$jqJmJQ#NE);!y@M!C!Ce?mvv4FO#nH~t&so# literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-r.png b/core/assets-raw/sprites/blocks/turrets/disperse/disperse-blade-r.png new file mode 100644 index 0000000000000000000000000000000000000000..0ca5e511d1256d42f987b706344a7847cbae9981 GIT binary patch literal 986 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>V4mXX;uumf z=j~nFJP|{Q_K*LS_zp5IXqHw`(U`1tN^pVmqs1+13mc8(g=FtAxHxM#I^9tyImx)g zb%ooloV4`Z^>4p_{qeK3ae+>y{F!$*W=;iK00n0*ANs|3=IXh3|E|7Te|PWq2e*zd zKi>ZA{{QG}{0q|c<7Dr3EHPs;NRwq`v`CO-WDF^(EX?~Wkf+daYLBY}1Dg$yaNFbJ zz%W<2;hdnu^So&LhIwn^xV|-rE+}TXV9E4ChB4&H)2;uFm{y#LW?@M<5DX-ac(Xv| zO8UGHiWX{0yc2ME&H>aBaPdlZ{p!UJSpsHm=ioTdupCHqOa~GZ+W#^@+)>iUFh^?l zK^M+9tP&h|g>T%vyZ=|=x2-Q?T_PCgXzvvgXlR_gxOv5SeV}tCJ_-SePXa)qyH~-S zso;PS6H~zUNy;&gCE6rBy;fTQOj_q>hI5QAAc0z%rHkA z7-|w7cR%T(xI{#txMp_nLF36qW%rGkK5y5bKY7B#`L+Kyefw@#^RM*nY zF{MnZ{vqUkXjWj-59YoW%kUyFC2I6%Xi!-`NwAo8^D?DKf&=i~^vCoC! zU|73-M4!SlS;r(L4bz&==M2%(^JW~~Cwpf9{{78%>z{m34Qohv9oBGg_VWJCb6!Ws zNqX_eC$XN;I=<}O2BRw=Gj2ZZSa9uwDw9UiY!1JE{?-4s`!KXFaR~rApHW0qxbY}R zPEUnt^+RtKft=aQGlK;q_~MlsGIhH)m~(*zt4U zW+oPnoBy}(yXdUNbVK3UoceA-fdeg5dNjI1m%oB82V#y1%{2eg0awu$` zHjlxJWkP5+NY!kycAzS;wS4hO`UzKV)H%Gny}8ox^!^aO(}HJ8f80+68YJN9>gTe~DWM4fjvSb? literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/disperse/disperse-mid-heat.png b/core/assets-raw/sprites/blocks/turrets/disperse/disperse-mid-heat.png new file mode 100644 index 0000000000000000000000000000000000000000..be012916f35262f3c5d3e6e19beaf5c614ca1f4f GIT binary patch literal 12942 zcmXw91ymbd(@uiByGw!MP~4s1Uff-ay99T)7K#)p@)mc8;%)_sySqDl>3`0Dvb)*r z*_$1C?wy%uHd<9#77dvg82|vF$$_QRq2G{yJ0d*v*ehZ>3IJdf_-g97tDAaJI=g+h+ZmprLT@-w^TYPe<^$li; zTm@jv=H}-7t-G!_pB2#uxf;vN`adhKcP~X5dIv&fZ;!V3RS)j(Yk7%H-mj|x_klFd zOs?^hqcg_ag7>$B(H8ze>vIc&KRW4B?)&cPmqzaV19(!NH(S^axz&~@Q&;RB9ge(} zxQt<{K31*Y@Eo`NwZC7D56R4^RYf(GjedKpNQ9dXlsvg#YGI2@{p(F`?m1bpV8OT3 zb{b&N@qUtj{{7{0Ea3L-d68g0@~xGk>w&Y&zb`eflj>PSUWDPHSARUchn5 zZS14{M2iJYi;vN*nE{h>}B|oLL+KAT5l{$2Q1MSD-94si2YWTqFz0u zJLZo<8x9|*85^%}hD8%*t1v}#{x=|Yg`$7l_O-A%d|i4%_u!2p*)8mBu=$nNZuDrS z9m}tF%KwOFaqzj#lfbU2U_Qvl@^+fKre|iL%bznN=g;WTe@!V~v&GAsJ?t}KweTqB zdzB(GC(55PJ0@7^@6uyJzE)QYZ1tMVZaI^ejZYWSYX z%>6e`J`Qw4mxPEP%Z8(}EYW{aG??b&wKxS??=Bl%RH_r}K8t?D;BSb7dl8-IK%xD>Oni}TsoTn-hk|CIQwV8h(mqtb_l!yHZa6R&n+BQbvHugPPw%^z_Wfm1Sf?X4 zvtdjog8jITA874ci7Be?+Fek`-lE8|@Nn*9a>ytj@t0hTFMA&TOjA`VJ6J@&_M#;d zc2^=DHugRZGnodDI`8RlU-LJWRs-S$Iwv0U2qNRSdV ze=nC9@YQo#UIv1a)Rx!OUr^8~Y#=Zn%++Mkdi!wc@?*S@3+V3GD7`=BKf`gS{P=kH zQvH&1_P&V(MzSAQwE&!UJA z<`VARiII~HiO#KGE{mvjgeueH4aK9SFMAZoXRuM`JTAim9O9H$3GeV`L67t z&Jai=12HbN7CddmXx*g<3o_R}_NuAt{F!Z_U>A_lGvS-OKTKh8+{eoWe@H{-^}QO0 zS1(~A_s|v}??3po7f?!o{)SGSR>H$Xmaq&J_E5r5QQ8jsMux7t0uNRVv3SFkg>YXq z!5%$+2p_E_gMY#jFYCvH7dg|&yGOo;h!@PRk3UP7!knfc{*Oomu@T=kzmiK8rYqkS zRWC92Uk2|y5U5|)uxU*&ytc_ zdz|HRJApruGnm}0YN3D4W9!URrnbkI?o{^Or#0ibJf#oq>(bY`E9X>BTFM)uzB`)g z+!=erVTpx`xhJ6JMNZ8^i24xO&_tVQ4)-H5M$7e;^AZ3_8c(0Y(HyqFeMj(thWMb~ zmSMUBoa+kFDrYSYhU@vFIR@{eU0u{tARChYO^i`5mKDf6zxGUT_e^5_ezc@k$*<)N z4#gu2!|%7~hLw-R5s)7jQm0c?5^Ph|wXAEw!YB6jI@s^s#(jw=uXEhx0v1_P@ANcg zr3WUbqjZ+W&scXRWpkwYH0RI$rn0PUX>GECvktHbrctj)h$;AjnclOu5az$CS?$z( z+Q{DG0bwIf9|JW$Kk3&b2b%h5{#Q6#nnCs1Y#_Zp=NF_*UC(V^WLRfK=}W?NVtM@- zqzs>Pt#+vtnPT@$4beX-KUFsUimBHC%SD0VXXdj}R|(Voe*2vP&TIU)x)ctJc;MeL zq3Tjq0-g>{qZ=h$8&2)L@oSg4`=NQ*ZK=4=L^hI)(OW8g-7(|Y)7|URDKVS2i{EAf z`{nkFKzg>no9JYn=_lfg^x5{5c!Zc+FauBsaL@$6?$O1B+|;TF(I+9UP7a%XDb_kX zrs;Y_=?>{}mm82q!zKUXbaS2?FCN1xxU{`x%CD#pN#W%3FRbnKB3ycq9-eWBsliBu z)%BLAg#|X8beY@GdK)E|fOIXVkbI2l=vwQTJTv0_KZ+5jUmdOKNho^u^F6yBqwXl< zvyuT*Y#;V?){#XQ7m?9vMyTl^+*mA32nTYD%i<;L?bY#DHsh&D>-pU{V7*2Zc$Qh; zoDk=#1=hGo3q;zqR`}g02)=z97^}|aL(N?T=2X9ocT7SJhM1O#ojQ7b;k?w~lQMHF z#oTs~m&fGM?aExXMaoTwfU_92)YD;Y{a*8XXdIYjTsW|PTa($4={L?IpLV~2i$t%7L8Q| zT+?D|WUs?t>-_<7FQkdNnlXtU@!YDizshjk>2FNR+~K9!9eo|rNX!0G)VjXAMXbQ} zOdBTGcEk&t%j_mv&LEl86<~?3^4KwA+;|SoaGNlchhv_qxi)iZzzaJHjK#*bgmO6HQ5(MKjE4Ra#AN~>hl_KrWVZ5r?P?pJQz_Vj+_DhS&h&wA- zJ(lN+f6+^;`L7|1%xdf@JhMmYC>^LK(qP?l#%0O7<;6k6NoXBy75zuDX(wFt-1Jj| zosh9isL(K;eb%5bfzKRUuhmggi1;xL6}ufr`47`p#_#FRj&)XI92+#XZ-GRMaYc-c zoCs24qL+Tdcl8Afol3P!nP^dXg7;2zPhJiu6)SrtsI&9*Y<3NkNHxFA#ip5MdsSj| za$`kdSA|?_t*(bEbhmwB&4Q_ayyKlTBbxJ;j+IS5w39Q=1*7GP88cg6J;R}it$sgA^+Z$<4Uw9tJJ6cF=s@lQVeqBp>c5(1`r!GgEYoFHP z;>J`^;)Sob|IBk}lu35^w+4VJX9YyrtIP~!@R%p&iE%y^{QFIPOuw-Af$4x{QD>>% zCt}*_HtoSi;2sWN@F!R07>$u^@mx_ubYV;mT&tOE6-5kcXLK%v6?C zwUx2nW|2p?h9m57wUl|SonBO8l6k$a*9j@5h%wsVAoA{bu7h^)S&sh>;as8w_D=TO zP7h;<=0XZZ`A*4v-l_tMV}hOVb^P7JCet=sRfhA-BQPfcEOPnv^Z zlpA17z|nPP001z=R#H+`PEzv!t959N{yiX>9}FW-7~b_Oh8hb+BT9$aTN7SNnwcA! znjx$-sWiNe1SkB2*pr4QBc#G)bJ`n^XMRcVFLKBR(9G7d*oMaRl^%&U%EjbsBJVZ% zr!QiHBRY-R%P5VhZsyxq!nt2(kBz4hL1bZQqoWB@g{hik#`my)dgPsdH*=0wpcxD%hvRsAx;Ot8)>{jAK0(7@HIB%QS`$A#`IbxguAF_Xm*R>mAw zKMmb;GUHogh$thgh5?h#7NI#FN#Ta@4icaNF~Sc|YXu;uG)3 zcBJ3&2SA7p?XKYOF!BXi7E!d;R#g|5yR7A3Uje!`t~v3Wl9W&i1>Q_SRtjMA@1ynW z1_-@^{x3!lYrsJ%(XtR+sFCM-z@PX>6#EZ91}ef3%bS23_6Y0Vn$1SUs!64-*k@ZF@Xej zB^p&lIyJ>YkAYnnfNExxX&c-c9S4heXTFnPrptFj#8>3#k%Z`x6ZSy9#5#Z7eXJKS z?G`}BONiVHkhXyqDT&amT(T`h5iLau>f3hNr^6oNh7S#vr0i5?z?G<4fB~RF@9}?H zJ%{C!xoD{$*mj}CM*6p<${~m$k;^%i%!>av=bB4DRWQwvGF;>~OI#$!7cG#JP^a9s z>bVvPo;tsu#6y}0hu_#p?ZY`J(?o`DhwjACW3<%oWD}4nJ7NCvX~CS`k3|Q8NiP91 zfS3@uEMvL^U8=Z1jtu8FDQ0{(L_qg6<*6r0WMrhCW3Tb3+=U^GBCs7+lsr+eyJXgO zY<%3*$qD`X`g+KM6CH_pRDuE5m9}Zssc_Mu;PZd{cAcwEFaYdm*uDMzn(AuEeELeLZF|0FBYK^+5i4+kmw^r@$dw|A6XLyUa!R_UWv9TEUsGCQ>Es$*avC6YG? z9j#u5YgY5MPNr%>^1nHWiqE}0JwV3vm_kQ)JxHoaMia>Xa}T{jUZ{$?sHkY715a#! zzcg;FG&38UxvecyzZuq}KlwMs0kzH09zc#V!mTgat}BtCpdeIXFkNct!Z85S(!$To z!eZ*-fycze1buSf$_nY$WpkZO)3S8ov{87%GmwzW&3_ArAB=QorEFSZ6+=JHa}|f0`vqQJZh1{$Yb^C4C4=5-o47kYX4^2+1ze5o)KqPk7F8$jsxX9tjapqm?gC^{R zv+#9dAsX}$B!Bg1*tc*L0_WWkyp>iD6buTHJ}5jVM)48{Ynq!6XcM65XR##ZcRb9T z?}W|scL2Tjgd&LFza)(Y*x5rTzeSy{y8xLi2^e$$7Q5?y{|IUho}3GW!u;rnk%x!J z`JY~0LF?R%)&R$>1=2y{326>g>fjY*z6WdRkRjdRNkd`Q$A2J56n%?&zCVXzf`#G2 zK)p92?^ukh!c=dN7YhoaB;}InLwA{ah!YbZ3bu|lT&L#qKX>~-ayqRv2mc!w5U|Sj z;0*Mor7UrJdrva0$hU8H+JU+py?F(F2KXzMFt;ejB&T>s!y%9MeITBs+3P%);=*Hw z1V51q%~{f8`D9;Ue6s;wSe}|FxfKc|i65BM$x&{zUNpnbS+v#4$lit=kx+aDs6XGI zt@a)r*fA^n;K z<()r5XQ#`HKgFgYQsCFJ<1`Q*f{7YX#w5A#9#{|j1Mt`AlC}3_@Ghavg%PdN>?*!{ zMu!MM0veQcD<;tf$QPXg9YUbX@IRp7IJ7Dk?5qfUy!iNAmfK&zJ_z}uWoIAHh6#{C zc^ogTTQ zZh=Y`G0zj{i|a=r=(P_;dgBM4oRQwjY^U*JC6jsjRq{iI*xxB$TcrGfNC z5C_Hzv31h2_X54`5bDqJ0kS-^0HR`|f)K#V5z=yZIxKX-@j6=}QXp?}gu7Y!<_Hux zq`y#tBdb4G!CWgA7NzT^uVyVD`~YW>b$TyM_vi>fK<=XjxHb<*8K`!%ae}1qyoDQB z5sdfIoU=_f@F?=_eSC#%^o8NK88U~b?4q7gH->b*8hn(Hob&NKi{^h?T*PSgdMxyj`EEp( ztftu5iobx~RP*brTwJsYdtezuraprxVs#z8IafQ~MY~g8Y%r5jH-HfxsQ<0BYUBD%-4D0h7 zl-3C-t~jgotyEb{eW&b&u;ntgHmq;IvpRbc2S@aRkmIn znx#0vD8m{>5r@HQ_yC1wWoh$s16+Y+E}!ym6t)x3-(!y^I727ZyFTG!uWL|ZGN9f5 zHKWuJEB#>9YbfUQ5KhF86KCUi+lByOJgO<1N4HN=sYKkp_Stc5Np`XnX_v6VQJF(a zgQg1*gpeV^?>j79Jb?bgeQBL}Gduqw+JvIkVn|t8TTf9cq8ROFl|n70Y8+7_{w#b( z6nLWUMe=(GkBwYbDxZ9@`os-Ru3TE#j>a{}otE7ehWa<`h5}3XCl9&JghkLxuIekS z0}TY;h5=I!=H?p$79MR>lmqRg$cUKQ&^bQ9#Ns5L^(fm{VQ`CtAX!9`V1ma(&{oT<7&7@RN8}+<6}zWjQG9-Oxm$ z1n%<&*bx86Lv?|9_T7C~VC=&-ki_U0he?D1iL5j=E;=0vWe;i#oaxwQb!|m7&J9=I zf1`~=%NI>PMn4(NM9E}IegYM{XKi?lHu!*84{Iy7|+Snu#%cS`^z z2U`Nk^ZJ$S_b9m9BbwIKlsSYbDF7c}SFPzrupM3)%qnWT`KbYDAr{pZvO@NK<{*`J zBUy<3Fq60&zig+JQZ5Xu@0i;Z-)3t~whvS8#O?&rP2lz3jN(lSq>Q@Q>oYYWg4+qF z)P&&^hoAaS#u%a9z3aCb+A7)AV^;ORTx{)qVl!;*?+Drydf$FC7g}QQ_NjYclG6`k zSDjROAz)SPyT4!+uk5EKUmpgVKI`7BK!VLSa|LJ0@Z-5rAK=II(>`Qq|`<;(v}j`taP0(Y%JfII6`4Ko`>|p z4LC;iH+r%pdbucX#klZd>+XbqiJ_K}4aUZgpzVK-RyAnAAVgY0q-={+q`g>G&j8aV z4O;8$Jl_C?aFf}bv-$-ViD9!J@D&OS&9MkJuc|4Ze^3k5*qTu0&J zy5w(b6_fflgx^tVn^q&wgLn^Ud(sC{(pi*;z_+sW#5N!Jj1`iJ(v>#K6=B^oM_byi zU)}5K_u37E6r~HOU$bS(`A0!=AL%OU_ZR-0Q<&5^ zIOW??XK~xSC2{ZQ5(1OXW=kmT!00m6S1PpF!6So@JSN|$gPo-KB3!>Ttq8nc)@$>8 zUCP`@UE1HUW?vF-kGR~#`WR1uITz;YLA4w~8B74=M7Cjn9@Ok**LrLwxghm7ClxD4 zG;{&d_l9j`qe>e2sSJG9kZZP`+)trcfK;K-T_zM@#zw&dgAIBTA^<5|lBC?G+za&rUbgaF8m4C(eYGyyw{gFO@(z0{i1$h ziI=jD$;yi=7$Hyn#%q=K)0SjqINA^KB`)JrdXhffz}JzEL(E;Ikq(cId+G0;6Ge8$ zQjZK{3UWl*L|R;1O2qyG7m|wH$Bi_jkvkY1OCj?bxiL;(xjJ|v3$be?#ly#A{kUu$LK&u|D^(M<0i{7+x4vV90J$?MC+hZyY zGBn%-Y`=yE>{X(3�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 t2K&K`wUeNASbOXRViT-@;~;^(`^6% literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/disperse/disperse-mid.png b/core/assets-raw/sprites/blocks/turrets/disperse/disperse-mid.png new file mode 100644 index 0000000000000000000000000000000000000000..edfd63a69e300199f9f1c96e74c70b0cb9415725 GIT binary patch literal 2328 zcmbVO`CAj`7XC6!OeTP#F_c`lB$!ZvhDK2YwJ~99!Y->VTeK>0Wf!nwgdwa}q+ySM zvJ??1i&Yc^(MakoR}dozvWSo>iXb)>9}J824&LYf1NVnn-e=BtzW1E(J?G3R54Ugh zNoz>}0DY0r-V=MGD;IGUc31NDcLP8i7ugHEf56R_?dow6&@%j}YYX=X9Eg+_$COUa z!&a6(jNmEfY`v>;$D~fox2GMMOwy?=sVs{@T4p0ip%c}tK^BrfoV~^J<*uvkS1qs3 zvGP04&CL$a@j`lgZ92;Co)y(m#JgRmY-skKrZPdw4c~WFXW6O6)s@WL5>a{ZMJjT|NMXdA!sU2^ z%>rpXK9rO^Fn#9vHikV~z9)HkQ?BR@QgFL+hqY2E2TN|N2)2xk;qmZTGRc- zC-?611-tIw<9AZVT&p5h*nuS0rB@5iLZ~~0?PBT%{Im@HdnTZjB^z|j{R7s_HeL8XNnD4v1?p9) zbP84t_@ZTBk^b!o!n6i*po_5z)gwDB6#<}@x|AL3q?BBU%NO_*+8wFcQtQaAYTIQ~E?%X~jL`*FD?o+k zDl=&iYAP^fP@I6jR*!5Grc4?M??Y*aqK&)4AF<;$Y@FjU8pZQ;eOZi3VahJfhMU&V(hAwU-jr?r45$eqr$!>xOEK(A{ zUYh|^t!%}ko-Cm+s?snsfQJ+ok+?3}2@3zMj@vldJtF>SF~bIzp-&GNm`W(xPJ-W9 z8C&Rt?oA^%R!|8K0;Xg4BC`uWk7kc7K50J|?0Vp?-wr<{kAm{+j|8R0B&}I?$TqLP zur6WQvOP(aRbJ4}nrJ#uB6E`UJ?yN9Wob>9MdA!{8>R$4<(93nz)+FWL@4w>r^ccv*W4)Vtzm32$6Fs$~V0d^qNq?OWAXwpubmCTc zJYHvl0<52R53Yy0yWb=BTQ5P@Ts)>f^Jb2#I@KKz3;CQTSLt4o>K}OvcD;K%6X@2% zKKR?ol7=_)3k!4KeDu9{-7dr-KXSaeDyFUDL_+*|-iZP0b2+zezJD|JXPI?UoF=yE z@r?dP7dZ=)3*ltC6;q$ig82SO&*T7hs@4?*Ovf)s@efTTG7^YjUFI}l!k-X-xM!Fe zh@Of_FKO2Qcwf2h-20>Di+7xIohH5uVrkz_dX3?ShOWdv_JF?hZy)v@B&n5HQ~U5? z7iJ@&M^BK9~K1kS^{8oEs_wT=#6GgL-n1+~`@^jR7u@Ju&&ZjUQYnUP& z!(J*P%8qJf^?++>**|%@oE+r$bLtSbIQUxP_rZt9L*y)x?&ZY$Z5C?E6>?BWn;a4< z35k}GUaaG|ePL}xKuLb;Gs3O8!*7*;t;kG>qG_g{kG zK3}YIHR)svoT7lil3>g_)7L14m`BVvTM(*!+!UX`^J7%ryGk+55kg!srKZUewOI8T zn5Dp{0Q0#4?;sOoJ4<7TGH0#q4B)Ot965Y9wVf|!`+6+7KDm;pj?oj-YPaYG7%8@@ z-aNf=_MH)L-7o?c3zcx!J#zYj9aFO5`6K#E{yYSj8BU6uOl*u{-6fG+!RRtTH*CZ+e&jV& zGCjDFLAgetZTNN`lm)*RDSXG8ubIhxZTpQBkCNs&Y-gOTWkA)U+k5bJa$!G9(I`{My32RHjhTe0*%g2c;^ literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/disperse/disperse.png b/core/assets-raw/sprites/blocks/turrets/disperse/disperse-preview.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/disperse/disperse.png rename to core/assets-raw/sprites/blocks/turrets/disperse/disperse-preview.png diff --git a/core/assets-raw/sprites/blocks/turrets/disperse/disperse-side-l.png b/core/assets-raw/sprites/blocks/turrets/disperse/disperse-side-l.png new file mode 100644 index 0000000000000000000000000000000000000000..c08e60f14a2e8a9ff68baa2843aa0281a13e43d7 GIT binary patch literal 590 zcmeAS@N?(olHy`uVBq!ia0vp^4Is?H1|$#LC7uRSjKx9jP7LeL$-HD>VB+v}aSW-L z^Y)Hyo`|DJ>qYa9r4A?D3?$#Qt15hZcp;8c@l7hn1rM=J08~gUw-`HHvRPf_)pJXoSpgJ?BD(P^9l_~ zandzuEKCtc)^M?<0kzlx3S>QmEo0~#|Qy-7D789e$MWYuT94rA2=O^qHSjJSqDP%y|j9Ue;JkY-rxPrfA{|N{062? z$NB{vcAfdC%rZf%`VR-=l9dK^Eet^+lJ-sv%U7EK*?yt9K=Cgv58m6e;1EdQ?&r&om!1N$G*+h9tZ&zU2XaZkshf}8IUeX$*w!TP zW%uStNL22dCJ6L8+#`$J=IUxRu=d)-hA?pMtN(q==D~}_sjL&0s5VKqdvhyXoXDXy fM~4p*foq z4Z;dMCmmmY`}O0?Z%e;Cw&|&3==)v#WBT*k8|JbY%&g!0%H8!t-Vynw`va#lGwP(c zurNjVyysxquwb6x4$e6zE+$srk>E-YTD$($W{sDl zW}gLFe_R-zY904y30PGHWTvJ`*b6#zMjrELDcCs^M6SGf%)dtYh0)?;|37>T7TV7@ z@79Zt_qVt_5HeUe?c?Na7l7Wr_VNCY(hrBu_1$-3n7jgL!U2(0AibUc@6HYHo6qsU zsJ?pv$oT2MY?~y(W&=a)u+C$3rWu!Jev}p7zC#=61cRxofnkAXXSx=&$+o5czClY^Gz3XSg0&`reKo=B;Gbm Yn*W(?yTqGG^1DC+p00i_>zopr09K6dHUIzs literal 0 HcmV?d00001 diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back-l.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back2.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back-l.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back1.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back-r.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back1.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-back-r.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front-l.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front2.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front-l.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front1.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front-r.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front1.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-front-r.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle2.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle-l.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle2.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle-l.png diff --git a/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle1.png b/core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle-r.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle1.png rename to core/assets-raw/sprites/blocks/turrets/sublimate/sublimate-nozzle-r.png diff --git a/core/assets-raw/sprites/blocks/turrets/titan/titan-side2.png b/core/assets-raw/sprites/blocks/turrets/titan/titan-side-l.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/titan/titan-side2.png rename to core/assets-raw/sprites/blocks/turrets/titan/titan-side-l.png diff --git a/core/assets-raw/sprites/blocks/turrets/titan/titan-side1.png b/core/assets-raw/sprites/blocks/turrets/titan/titan-side-r.png similarity index 100% rename from core/assets-raw/sprites/blocks/turrets/titan/titan-side1.png rename to core/assets-raw/sprites/blocks/turrets/titan/titan-side-r.png diff --git a/core/src/mindustry/content/Blocks.java b/core/src/mindustry/content/Blocks.java index e7f176009e..1936d7467f 100644 --- a/core/src/mindustry/content/Blocks.java +++ b/core/src/mindustry/content/Blocks.java @@ -3215,11 +3215,11 @@ public class Blocks{ }}; titan = new ItemTurret("titan"){{ - requirements(Category.turret, with(Items.carbide, 250, Items.surgeAlloy, 160, Items.silicon, 300, Items.beryllium, 400)); + requirements(Category.turret, with(Items.carbide, 100, Items.tungsten, 250, Items.silicon, 300, Items.beryllium, 400)); ammo( //TODO 1 more ammo type, decide on base type - Items.fissileMatter, new ArtilleryBulletType(2.5f, 300, "shell"){{ + Items.carbide, new ArtilleryBulletType(2.5f, 300, "shell"){{ hitEffect = new MultiEffect(Fx.titanExplosion, Fx.titanSmoke); despawnEffect = Fx.none; knockback = 2f; @@ -3228,6 +3228,7 @@ public class Blocks{ width = 17f; splashDamageRadius = 65f; splashDamage = 250f; + scaledSplashDamage = true; backColor = hitColor = trailColor = Color.valueOf("ea8878").lerp(Color.valueOf("feb380"), 0.5f); frontColor = Color.white; ammoMultiplier = 1f; @@ -3255,7 +3256,9 @@ public class Blocks{ recoilAmount = 1f; reloadTime = 60f * 3f; shootLength = 7f; - rotateSpeed = 2.5f; + rotateSpeed = 1.4f; + minWarmup = 0.85f; + shootWarmupSpeed = 0.07f; coolantUsage = 30f / 60f; coolantOverride = Liquids.water; @@ -3263,14 +3266,14 @@ public class Blocks{ draw = new DrawTurret("reinforced-"){{ parts.addAll( new RegionPart("-barrel"){{ - progress = PartProgress.warmup.curve(Interp.pow2In); + progress = PartProgress.reload.curve(Interp.pow2In); moveY = -5f * 4f / 3f; heatColor = Color.valueOf("f03b0e"); mirror = false; }}, new RegionPart("-side"){{ heatProgress = PartProgress.warmup; - progress = PartProgress.warmup.curve(Interp.pow2Out); + progress = PartProgress.warmup; mirror = true; moveX = 2f * 4f / 3f; moveY = -0.5f; @@ -3294,13 +3297,11 @@ public class Blocks{ }}; disperse = new ItemTurret("disperse"){{ - requirements(Category.turret, with(Items.carbide, 250, Items.surgeAlloy, 160, Items.silicon, 300, Items.beryllium, 400)); + requirements(Category.turret, with(Items.carbide, 50, Items.oxide, 150, Items.silicon, 200, Items.beryllium, 350)); ammo(Items.scrap, new BasicBulletType(){{ - damage = 50; + damage = 40; speed = 8.5f; - //width = 11f; - //height = 19f; width = height = 16; shrinkY = 0.3f; backSprite = "large-bomb-back"; @@ -3309,27 +3310,24 @@ public class Blocks{ collidesGround = false; collidesTiles = false; shootEffect = Fx.shootBig2; - smokeEffect = Fx.shootBigSmoke2; + smokeEffect = Fx.shootSmokeDisperse; frontColor = trailColor = Color.white; backColor = Color.valueOf("869cbe"); - //trailInterval = 3; trailChance = 0.44f; lifetime = 34f; rotationOffset = 90f; trailRotation = true; trailEffect = Fx.disperseTrail; - //spin = 360f; + + hitEffect = despawnEffect = Fx.hitBulletColor; //controversial //homingDelay = 10f; //homingPower = 0.01f; - hitEffect = despawnEffect = Fx.hitBulletColor; }}); - //TODO bullet. - //recoilAmount = 1f; reloadTime = 9f; shootLength = 15f; rotateSpeed = 5f; @@ -3339,7 +3337,33 @@ public class Blocks{ coolantOverride = Liquids.water; draw = new DrawTurret("reinforced-"){{ + parts.add(new RegionPart("-side"){{ + mirror = true; + under = true; + moveX = 1.75f; + moveY = -0.5f; + }}); + parts.add(new RegionPart("-mid"){{ + under = true; + moveY = -1f; + progress = PartProgress.reload; + heatProgress = PartProgress.reload.add(0.25f).min(PartProgress.warmup); + heatColor = Color.sky.cpy().a(0.9f); + }}); + parts.add(new RegionPart("-blade"){{ + heatProgress = PartProgress.warmup; + heatColor = Color.sky.cpy().a(0.9f); + mirror = true; + under = true; + moveY = 1f; + //lame + moveX = 0.5f; + + //wackier variant + moveX = 1.5f; + moveRot = 8; + }}); }}; unitFilter = u -> !u.spawnedByCore; @@ -3347,10 +3371,10 @@ public class Blocks{ alternate = true; widthSpread = true; targetGround = false; - spread = 4.6f; + spread = 4.7f; inaccuracy = 8f; - restitution = 0.1f; + restitution = 0.11f; shootWarmupSpeed = 0.08f; outlineColor = Pal.darkOutline; diff --git a/core/src/mindustry/content/ErekirTechTree.java b/core/src/mindustry/content/ErekirTechTree.java index b190c19db8..1271d504e8 100644 --- a/core/src/mindustry/content/ErekirTechTree.java +++ b/core/src/mindustry/content/ErekirTechTree.java @@ -196,6 +196,10 @@ public class ErekirTechTree{ node(titan, () -> { }); + + node(disperse, () -> { + + }); }); }); diff --git a/core/src/mindustry/content/Fx.java b/core/src/mindustry/content/Fx.java index 96cc76b8df..a99ab6219d 100644 --- a/core/src/mindustry/content/Fx.java +++ b/core/src/mindustry/content/Fx.java @@ -1496,6 +1496,14 @@ public class Fx{ }); }), + shootSmokeDisperse = new Effect(25f, e -> { + color(Pal.lightOrange, Color.white, Color.gray, e.fin()); + + randLenVectors(e.id, 9, e.finpow() * 29f, e.rotation, 18f, (x, y) -> { + Fill.circle(e.x + x, e.y + y, e.fout() * 2.2f + 0.1f); + }); + }), + shootSmokeTris = new Effect(30f, e -> { color(Color.white, e.color, e.fin()); diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index a72a9158c8..334837d1f6 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -3041,7 +3041,7 @@ public class UnitTypes{ speed = 4.5f; maxRange = 80f; outlineColor = Pal.darkOutline; - health = 45; + health = 70; homingDelay = 10f; lowAltitude = true; engineSize = 3f; diff --git a/core/src/mindustry/entities/part/RegionPart.java b/core/src/mindustry/entities/part/RegionPart.java index 191144a97e..a315d9d55d 100644 --- a/core/src/mindustry/entities/part/RegionPart.java +++ b/core/src/mindustry/entities/part/RegionPart.java @@ -146,13 +146,13 @@ public class RegionPart extends DrawPart{ //TODO l/r if(mirror && turretShading){ regions = new TextureRegion[]{ - Core.atlas.find(realName + "1"), - Core.atlas.find(realName + "2") + Core.atlas.find(realName + "-r"), + Core.atlas.find(realName + "-l") }; outlines = new TextureRegion[]{ - Core.atlas.find(realName + "1-outline"), - Core.atlas.find(realName + "2-outline") + Core.atlas.find(realName + "-r-outline"), + Core.atlas.find(realName + "-l-outline") }; }else{ regions = new TextureRegion[]{Core.atlas.find(realName)}; diff --git a/core/src/mindustry/ui/dialogs/ModsDialog.java b/core/src/mindustry/ui/dialogs/ModsDialog.java index 1377dc3abe..233f60004e 100644 --- a/core/src/mindustry/ui/dialogs/ModsDialog.java +++ b/core/src/mindustry/ui/dialogs/ModsDialog.java @@ -44,6 +44,7 @@ public class ModsDialog extends BaseDialog{ private BaseDialog browser; private Table browserTable; + private float scoll = 0f; public ModsDialog(){ super("@mods"); @@ -314,7 +315,7 @@ public class ModsDialog extends BaseDialog{ cont.pane(table1 -> { pane[0] = table1.margin(10f).top(); rebuild.get(""); - }).scrollX(false); + }).scrollX(false).update(s -> scoll = s.getScrollY()).get().setScrollYForce(scoll); }else{ cont.table(Styles.black6, t -> t.add("@mods.none")).height(80f); } diff --git a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java index 750e443e0e..436c464c54 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/ContinuousTurret.java @@ -109,7 +109,7 @@ public class ContinuousTurret extends Turret{ return; } - if(cons.canConsume() && !charging){ + if(cons.canConsume() && !charging && shootWarmup >= minWarmup){ shoot(peekAmmo()); } } diff --git a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java index be06972e26..1ddda57500 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/LaserTurret.java @@ -95,7 +95,7 @@ public class LaserTurret extends PowerTurret{ return; } - if(reload <= 0 && (consValid() || cheating()) && !charging){ + if(reload <= 0 && (consValid() || cheating()) && !charging && shootWarmup >= minWarmup){ BulletType type = peekAmmo(); shoot(type); diff --git a/core/src/mindustry/world/blocks/defense/turrets/Turret.java b/core/src/mindustry/world/blocks/defense/turrets/Turret.java index ac91d6c78a..83ac4dbaf3 100644 --- a/core/src/mindustry/world/blocks/defense/turrets/Turret.java +++ b/core/src/mindustry/world/blocks/defense/turrets/Turret.java @@ -49,6 +49,7 @@ public class Turret extends ReloadTurret{ //visuals public float ammoEjectBack = 1f; public float shootWarmupSpeed = 0.1f; + public boolean linearWarmup = false; public float recoilAmount = 1f; public float restitution = 0.02f; public float cooldown = 0.02f; @@ -83,6 +84,8 @@ public class Turret extends ReloadTurret{ public float xRand = 0f; /** Currently used for artillery only. */ public float minRange = 0f; + /** Minimum warmup needed to fire. */ + public float minWarmup = 0f; /** Ticks between shots if shots > 1. */ public float burstSpacing = 0; /** An inflexible and terrible idea. */ @@ -334,8 +337,12 @@ public class Turret extends ReloadTurret{ public void updateTile(){ if(!validateTarget()) target = null; - //TODO make it approach instead and add interp curves to parts - shootWarmup = Mathf.lerpDelta(shootWarmup, isShooting() && cons.canConsume() ? 1f : 0f, shootWarmupSpeed); + float warmupTarget = isShooting() && cons.canConsume() ? 1f : 0f; + if(linearWarmup){ + shootWarmup = Mathf.approachDelta(shootWarmup, warmupTarget, shootWarmupSpeed); + }else{ + shootWarmup = Mathf.lerpDelta(shootWarmup, warmupTarget, shootWarmupSpeed); + } wasShooting = false; @@ -486,7 +493,7 @@ public class Turret extends ReloadTurret{ protected void updateShooting(){ - if(reload >= reloadTime && !charging){ + if(reload >= reloadTime && !charging && shootWarmup >= minWarmup){ BulletType type = peekAmmo(); shoot(type); diff --git a/core/src/mindustry/world/draw/DrawTurret.java b/core/src/mindustry/world/draw/DrawTurret.java index 6d18c66ddc..42babad0d5 100644 --- a/core/src/mindustry/world/draw/DrawTurret.java +++ b/core/src/mindustry/world/draw/DrawTurret.java @@ -36,7 +36,10 @@ public class DrawTurret extends DrawBlock{ part.getOutlines(out); } if(preview.found()){ - out.add(block.region); + out.add(preview); + if(block.region.found()){ + out.add(block.region); + } } } @@ -75,7 +78,9 @@ public class DrawTurret extends DrawBlock{ } public void drawTurret(Turret block, TurretBuild build){ - Draw.rect(block.region, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.drawrot()); + if(block.region.found()){ + Draw.rect(block.region, build.x + build.recoilOffset.x, build.y + build.recoilOffset.y, build.drawrot()); + } if(liquid.found()){ Liquid toDraw = liquidDraw == null ? build.liquids.current() : liquidDraw;