From ccfc1f57cc0070040171ff09695ab04ef95754da Mon Sep 17 00:00:00 2001 From: Anuken Date: Sun, 8 Nov 2020 18:52:09 -0500 Subject: [PATCH] Unit prefRotation / Class unification (monos will vanish) --- .../src/main/resources/revisions/block/3.json | 1 + .../main/resources/revisions/corvus/3.json | 1 + .../src/main/resources/revisions/flare/3.json | 1 + .../src/main/resources/revisions/mace/3.json | 1 + .../src/main/resources/revisions/oct/2.json | 1 + .../src/main/resources/revisions/risso/3.json | 1 + .../main/resources/revisions/spiroct/3.json | 1 + core/assets/sounds/minebeam.ogg | Bin 0 -> 36087 bytes core/assets/sounds/pew.ogg | Bin 6580 -> 6528 bytes core/src/mindustry/ai/types/LogicAI.java | 4 +--- core/src/mindustry/content/UnitTypes.java | 16 +++++++--------- .../mindustry/entities/comp/MinerComp.java | 12 ++++++++---- .../src/mindustry/entities/comp/UnitComp.java | 9 +++++---- .../entities/units/AIController.java | 4 +--- core/src/mindustry/input/DesktopInput.java | 8 +++----- core/src/mindustry/input/InputHandler.java | 12 ++++++------ core/src/mindustry/input/MobileInput.java | 4 +--- core/src/mindustry/type/UnitType.java | 2 ++ 18 files changed, 41 insertions(+), 37 deletions(-) create mode 100644 annotations/src/main/resources/revisions/block/3.json create mode 100644 annotations/src/main/resources/revisions/corvus/3.json create mode 100644 annotations/src/main/resources/revisions/flare/3.json create mode 100644 annotations/src/main/resources/revisions/mace/3.json create mode 100644 annotations/src/main/resources/revisions/oct/2.json create mode 100644 annotations/src/main/resources/revisions/risso/3.json create mode 100644 annotations/src/main/resources/revisions/spiroct/3.json create mode 100644 core/assets/sounds/minebeam.ogg diff --git a/annotations/src/main/resources/revisions/block/3.json b/annotations/src/main/resources/revisions/block/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/block/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/corvus/3.json b/annotations/src/main/resources/revisions/corvus/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/corvus/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/flare/3.json b/annotations/src/main/resources/revisions/flare/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/flare/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/mace/3.json b/annotations/src/main/resources/revisions/mace/3.json new file mode 100644 index 0000000000..811f101bd5 --- /dev/null +++ b/annotations/src/main/resources/revisions/mace/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:baseRotation,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/oct/2.json b/annotations/src/main/resources/revisions/oct/2.json new file mode 100644 index 0000000000..87371c85dd --- /dev/null +++ b/annotations/src/main/resources/revisions/oct/2.json @@ -0,0 +1 @@ +{version:2,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:payloads,type:arc.struct.Seq},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/risso/3.json b/annotations/src/main/resources/revisions/risso/3.json new file mode 100644 index 0000000000..75c7a4a245 --- /dev/null +++ b/annotations/src/main/resources/revisions/risso/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/annotations/src/main/resources/revisions/spiroct/3.json b/annotations/src/main/resources/revisions/spiroct/3.json new file mode 100644 index 0000000000..364fdca813 --- /dev/null +++ b/annotations/src/main/resources/revisions/spiroct/3.json @@ -0,0 +1 @@ +{version:3,fields:[{name:ammo,type:float},{name:armor,type:float},{name:controller,type:mindustry.entities.units.UnitController},{name:elevation,type:float},{name:flag,type:double},{name:health,type:float},{name:isShooting,type:boolean},{name:mineTile,type:mindustry.world.Tile},{name:mounts,type:"mindustry.entities.units.WeaponMount[]"},{name:plans,type:arc.struct.Queue},{name:rotation,type:float},{name:shield,type:float},{name:spawnedByCore,type:boolean},{name:stack,type:mindustry.type.ItemStack},{name:statuses,type:arc.struct.Seq},{name:team,type:mindustry.game.Team},{name:type,type:mindustry.type.UnitType},{name:x,type:float},{name:y,type:float}]} \ No newline at end of file diff --git a/core/assets/sounds/minebeam.ogg b/core/assets/sounds/minebeam.ogg new file mode 100644 index 0000000000000000000000000000000000000000..27f75a8531c18238d7045f521ceee928c5766708 GIT binary patch literal 36087 zcmeZIPY-5bVt@j*Ck(|P=IV8?=P}ALmgN^EWr7758+L=l85kJK8NrMlj9{H$Hi!V} z1j%?UePkhE^B)DAWQG`|!@$50ky((T=UEs;7$iTtCz+mX3aJ1pVgirU~8EEHnKqmMgG#1wOFkJoHs9 zId9pPW!ZV>G*vlxBUu?3m>3*96kA1tKtxi9Vw*%#hhn=-(Fw)nbBegMRxD`ZGCHBq z>|^wD$z(sPmn#0pPcgrO&AH%C*$?NvA#nu#`vwS`WN^pYxp}@ev;>0GI zBH+XUGQLA|*^DACqZ1HsDKIpEeC|F`#B-y_>5VdHFRJ)|(g_qcy=d$j9O4@q8X8&} z8(x-ry{z*y{?63=5Pkr#;qOq$IWI zk>w)hmbNua3@M->QQ(}Uq&aD^=d!e{b(yobWvt$odwP@3=}kOfB@B!VEFjk~EXbU- z3?>95PO5F*qe zY~x%#uF03!2$|siG>`_JP?~$7#KPhK2ex;VbSe6vC<$n$5m;<)vB0=Omxc;X5Xo zIH&kr=A~KeD{n^3E$Tm)0qb&1Z~G>wt(ghtFBP-f&pJ zna6O;B`+P*t6|B#Tc6D#ofDD9BCGfCTwqEnj7 z7c_A}f)f&PA5_i@%3ef5=Re8>3aJJPsa`bF4K}t74G9e|%Z;2~dV70o?2Xd<*K6-z z?~NC4Lr+-noWtP6q1Xb>lT(s<43E!g_H*KdL@+Gp6p9?5D06b6iuWcJ-%C1YKbiP{ zHn}M58ffAhEE;=JwDhuAYOq=CWz*Elp{ZBPQg3ccjow}xxeb(CAbAEvUM~fE5t4I2 zSwzXQ@3F@u7I3xz=bQx^eUB{qlszY@L{3txoR;1>Yvs&&FIO(&0xLn}oQ$sJGrE>{ zbUp9r)99R***R;~&P6$=*1g_E5W#bfdy$HJ5h&-l7O5cRoCAh3&Os{2H|h9(hWOF; zqOomgiK{qr1TZihn84!=E=K}`bgu@PUJcR>4Y9?aV?skiubTK?Hfg*tVJZWIBm;x8 zBb#K4Kv&TOr##yT4#Q_EtP3sK79NpkSuSAAW67&jGQm;ZcE=>k!#tlK1Zjx6_%!#b zn)fO29$FUT`P72L$vKRLA&`Ng!SICP5s9L6o+lT$oHOK{JLQC>`qIglJT-NvNf>LY zE)zILrDHeM5ns4aV((BV|UL#NdyUQ12fUV2|6b5>^7q7|!VX{=hca@Drn zRqNJ9FM6?R(W+CM(pRlpb86H2)$4Lz&(c`6ZpEriI;&RctlqTd_bQ#&+g7aFwf5Ae z4YSv+e!cBI_hFsay9!pVTeo`C8<6a-wXcsAzTRa}vrO~!vemD4t=zRM@Aa<2Guv`y z7O#4>PwVud4W~A}f4xh8OQ~XDXzAT4v5&)3Bfsaym(Pp--nuE*djHzrrwU*1y7a^H ze7?-iZMia=^Q8B${eA4Swtb>S-_rD1+j3W}T048y>erj{v=6U&?GzYV8#^`izIkk< zc;0>UzUb?{i&nkbrFDAWhEtmi?;OjQ*=-;bd)urp`uf~WYq@KaPkiS*pMCpS;cu(Q z-%1y+=ixlw&%n^Y2ud5mryLe4YBM!hFfy_^E?T%9Bjwa8B_S2yk<5} z^72|cbyCooIg>#~HTQXWYHpk4<+E_gH7~D?twB*ahS%l<<(N*n6y>RTY?4=w?y;z7 zpRJ_=QQTlxt=$@yowfE@fLFHaQVDObja$XC^9-L!d1bBzS-$e9SahH6v01^{rpvBn zfh3}HZLiHL_F8-GN>H!vv02Hvd#}!_eh>3`QkL$qYe{QCmTPUCIw>m0@Y$`X9?L10 zk~~))ofOogdu&dz1ivT_Wc%?j$?`s`M5j_J26QENbUcyGNHRouVxYZwE=fd*y< zhX&5n1)w4Xlx-b5g3ftn3KX5O)Z%nHW2wHf$j3=jGxUrjhw9dImYSMJuUT@aE*10E z(mfiMt*NVF5VXviWu%W#r(J3^96||BFO?uOC^f^ zyq1b2pYuE^QOxJ0C7FEAQA4vOz)MTBRlv(rbtw}A1D6Z~15?h0DG@RYVC6^xPZEz| zn?gy5k(OYKkC*z&Mu8~qwWZgBvX>q`6P2}g%MAyPwXN5Tyj71~iAr00WJZ)W1H+pG zj0|tU<%lZ71a<}oiNzwx=Pc6&lFnGZkTKyfd?wSvr*&*jGoKTOX!1En4#k!;mK=&L z0#46lS_GUp7B&kwaV(v32_zBZ^-`flz)5py2}oi}5Elc3RsjP8$A-X^;--lUoSeg$ z7%D+!rk5rA!YOW=#}uYa3R*0ZEa2t2vWUk?Q}bvTNMcIV8-*#CqH;{j1iUhJk3~6q ztvwo%y-soIwWKws*RMqNY<)H>+e`OYRQB1O3=DTz*%>x4OS_t>OK@tLq<}rqps++F zxyP_gB&o~r`5b2s&7(7l&uK1`0JTo0B=vyWA3cWPHtew(ATb#bF{ii>B!Sep1#>yE zcw!|31A|~#5~x8g%>ikZy9t50$vF`2u^A99NC|So9V!cJ$76D%v)69D7KKbOIPB+Q zXZX)99p-MKDaEY=@}mGB1B1lj8O42;Y_ctFnlF~L@HufTboR2;P;CkD($p;W^YU7{ zWJ;9R%;KORE!Cydf?g>sxf122yY*TWyXw+wL0N0JUbEs@y5$PUsvC|TnoF-mb?Y7r z@bX%_^+r;UXtlGYe5xfGP6drTsE&B7_yqOuK-No4D4ZoQV&v-Mb1w&%*N z*OIzTuSIb)Jjg3xXz^=0g`Bfa6+`k%7et9NM6cK~R_B^97*PqUhpf_)G?r zMig6mU}7y3;9>$+&ml>xCCKYJMBS7CCvei@SlANer77DY;G_X&skR6>aY7n!;KbM> zFwRp&HcjY0Bh`>QiT=;7R8REj3N^nnuYT!9`X9`ILK+`x|9#x1Af53AjiNkiB~~M zX_jRlUqAl@fr)~XgeD750r!A5FgEZrG^nt4babTkEk691S;Zx#Wyz5zEUI8>5W&F# z>Y;*qRSXOq9FQKeLl8)YfdSM*23eDIT+UTY{mQXJCypIGaq!rs!>2BtK791@g`)?L z@mM7@O^BItBZond^KgTu)vT+lIv+etv+wzEWql&Ilh#=)zU14bvQa$hv4lJ6aH-4?J=O;(2Qt4Fnq(@j31jLw;keEo?PF3l2l$UoG7NaXGvbB(ly%axuYVCa z6Df4@jKZdhqxuDU#(m;{#E*Mjvhk79mGqRD)Dq3=_&?VBvQPi@pZBKdZP(m(Z~B2C zYYRE4FP{%=S4e9&-yVPbR*VhD#V!?2v8#0l-y~>UNOe23 z@(Ni7JFUCFRIObY59F?roNj=%ie_}`ORZ@(;DUd?}lH8^j1 z_pGpYGH2EY3akmgv!V3boaNiDWj?ICZLKxYp#19cPoFpJpSgX5n#&iN;I{dKUwo{0@qXtYS}!-uzIS-S zX{Y@bd)ki9`p>?7-S^0OhROa(@=NYlHwg1h(sv2YztzPf)o^w0i%CxR?j#&(v720e zw1rKMbM8wM)-${hww&M5QpL06)bqcWt|_Y-xhg#gTD;@^-6WIeuTT2@y4a9J! zn-ylS{FK{fl%;%pa-X=#$^7TsCzj5!=LmTJ^j%?;+G??48Ku0NZUG-3p1EDed8+l^ zp`QiCwjTB@i3=XT6q8x^G%EP?DtUcQsox?3N6QVj>^M~FULF4XSDCw2&-A_B^CrcA zEoqXd@nE>eX}j#Fn&TXK;b9*$I z*5=p6$){`oSvuDn_# z+WEYdoGaJ2Uu9nSYq#1?Z@uLr+h^!qxs|HEiibZ{yq7oL<@+CN!#80Qg1#r8k7YNS zBslwk@Y;&)>sqBk(r?WEdvj@ytACW;4~EVef31^hv$O&u?*7mG6ng9a117(PM~?nn zF_}4Dbg^%>#g<=x_5NtG{oQ6Pmc;z^ubIeCX2FLR{`Z|?OIH-e@OaHPSGe>-bZ^RP z<)r0o4D&4Ko}Q&B!BFwXD)4fIgRxrfm&r#|oB~;n2W!98IA`c?WBI~z|M`@g@2VeX zdg^UI)@~BENbjvn){AQrD!aZNo8I?x`}60md#-4`XLZk=V{q7Mrj&^3GWNY1asGBf z=l{%ca@6PwP2Y4R(@)M$`Sah~g()+heS36xv^U!CYW;p)e2r?{G1 z?!3O2ns3GsCw2FmDf1bY1F@SWPH>CN{TB1{oT^`-O`6?~)TtIZ^D@!@T#`pZ#pSE=U#0ekcb#h8r~W#9f^ThiE>m&k zjHE)oR3&cBrMqVL75yn~$t_B~YrX1>LO$EN=A3M%U7Iq(Ztzzv;WrI^?yxbgKkMYi z6tCpv%F~R_H8DN?{>3_5H_ZOyd5zI_@myI=Q>`^~>b=%pe745Wvzg(1LfH2>4u>w~QtSH;w@qB; z_lRxP{Iaq!wQNc%v+#Z4@ZC4gz292%vZJ{5_x*pndU6~Uui3TAO^*BTr(Ckyt+UAg zpj=qFx=39Lr?&>znaf|No{wei^%dOvL}yiY9gF<6QxjLD?zr2?5mOiPc-5BMk>?nB z&m3U3J9TH4rO*l9gr6)s7*;hD$=kX|IhEfdUN2J z^0S|dcYb?WdZNg(YHe)J&nXj`!y2uVpO;YZa(}`Rcy+*Mg-k zw*Jv$>id2>e_zarNvrA^m9uP*PyBw)C-SY(L2)<7s6z35#c$TWf92AtYkVs!)y>S* z<5u)&HcoE{ohU z>+P=TSO1;zyq3www?a|qv-jGS+BX{1F6?ZLDmOiQX7m23Gg*4YFLjo)B)B)6@4uXJ z>E4YfR|heUD4o|AcE-xGCGU$ZI)1@@#fgX7Ez|oyND5q8l=tDAi{t+*hYGp!oX+)| z2*~qD&RlfW>Q}ttm)8uZK3qDG={;+k^`R?UL>HHaM6Z0fS@#^5W`g=BuE5m?vjUfX zn%NULiR1OHgslON4O3kh;$H1}p~}R;FsJD26-Lp?UL~QfzFb|~S7x)XS#MX8`tSJB z&LwYu=cjG^^z+H0-qardy)%7Xm3)}yMoO7q{A9h`eM?vPF6GZr?qcEVXEOJFUov}F ziA~k}jx0Z;_DdGE1uy4tOs-M6lUQ;h{WsfuIT5F(%XRe+&wV$1B5_pd=n6e^jTt(z zao?YuY&8|U_i55{MNb~z8rDLMbFv(sk9Qrp`oglM{k`(kn$mS4d2Vl1%(@iB3a|ba zUDvn#gy71!GQO-BR=@CR`bzu^^SJi@QhmiEQeef+7ZX;){_57MEmD!+dfXE`%eUu9 zfBE11*}mqE^}RRz-!4413QfPhSS{SKQ`;(H-J2yJQVw2K7Cj`oA2EjFeeWo62` zJz)n8KChD5`N?>CI~R+uhhp>c6??uJslWVf)TN{U&a-6a#9F1JIcn`oZY^c8+SdBS zqej{LiADC}u&^mtr$2A!%U%}7)Ov45$4KjZQJCGL~Y-tkHP`|<3- zj`asunQ~3gUfFxR`s91tAFobu)co4%|0-h1&aBgX!m|6gYG+t7B{i_lNv)myV$UIi z%Qvb*-7=pVX1zXrUvhok#=rUZ>b_O{c=qDUwQtXU)@_dSHhwl?S?Xm*sayQFv;uQF z8x~FGQoCJoY5V&Lin~Im-c_pp_g7D^d6M8>>xNs74<6j#mVfdK`=ft(i63Tpq+NZN zbVkQg}-XLtu6LRs(uc)cs}n#_SWeWlU{ah zzPbPO5k1|s;x*fKPdfjY##Z89G5^+`g3J1r627N*{A7^S6x6CZ&QfQ!ccvxVLxu;- z4#v)6IHvL|P9(R^){*`~rJ#zA!y;w# zs>CN~J>9gsq%rHQ?aO;>6Bg+^9AR$R_U^n%)#+cCJ?7j0gX zaGhz^I-&hNiOWro&i!j3vr@-!L%R0dr|&B4W+u&?dG3bM^TOn$NteWPkF9K~my2Zj zF!$Q2tdb=bmy5n@rTklIczbW(?nFOUW3Mmy>o@}+mzKAE&Hj0VNxAJF*DJT&*K9l0 zZg{Gc`~N<>{`2dr9M?5pDz8#FA2+qy{B6&J%~?;PO^<~dTsE{;<4)YhVa@(K@y?f> zwOQY8%!uI5|U})oaZ||BDRse(gD8x@-pTgNj$F z@)-@QHm=%pM71gD^PK93ou!vQAF)^#$@7eJ zlDzHaOlzDYd{-&>UCE^oF%@nD9rw3OTpi+DSJvCa$jw*pxz1Dk>h_y+rng;x@lHLg z$05DBzP~KuCWqx~ZFA}Tl|cr*w!%s0_y1gUDfa+Rd2Qn{CzWa4da}XBcbTTR{p9;O zpK0H(J;yDDlA0x-yHAc2QduzbnAZN3^X7_O?GcXE`-AVz(y5oeu~lYv<%{x1FSJ|^ zmSwHq{@H)iJcDa0X3vjpe!JhjGWSHt?92$YoCe#&b3^ZK-FfnjWJQLv=*B5u8TaTK zXZoz!#&++EenI1rPBR&!?|XB8Ej$_itmNSLaEW=7pF{;(v$h<~Y{#zg~Rozp3?fJ+=hxd^P^(8(g2>O7#?Ambv%bc#TlG)8$!DGcQ!1T{D_K#c)LqqwN36+W_BEc8Kv_m%;ui<@c*(5R7c+Z^PJ%zV< zPsL7ZUao#pde_~j$G^XC{`z;?)EYsT&71e_U}`BgpS;bnYG+{P<=hKLRKrfWBt5nL zmXOu@eb3i(BHw$Y?`@3U&6c>uYJQVp&E~6WQ~ewiWUoxkm9W^`=v%yg^Sd8E7Ibem zJX)i1kSq4@rB_jhC6fZ8Hj4dMJ=O5Ci{&(bU}0jZR^`R7+eE+p+`RY89q-~*sz!y+ z*VavV<-z)v>+BsyCWbh#y)R7pgu?`;8^&DmxyEp5S&F@u>XyYnzCU*S_3X2K@uLUt zU+O01$W^?pdA(=h^P98&9EncXt6kkxKI68<*4HzoqfZ8lyDXb1@bdSG-)7%`z6dyx@hVJz^6Rq)o>(xg+Hu3d?^4+6 zwY${Ze#pBqT~TBBCsq5ylBHNZV8-W_+k9s+JB9u%^1EiYQe)ZXpPSyVPfuC@{vFTz zxTw9G>}xIF+?OfLuH|I={?+V26%T^|yNcAN4gS!Y=W>estjH!H@6nT=DVWS@Ut- z`en9PJKkPOOzxXc))*S`W@Y4=+UTl8!zBt?8-c;=E#63GzCQX#wSd!ZP zQf8-#@ttK8Hq8CT+o$H7(6(u-U|E^?>Nm-OC9f7PH+;hu+$^XvfORu?o z3o^Nu6Iw9;P{`pE;a9GBF5dL!`qPP8!L}2(xD?2~PfgQwJ{A1sh|RR~#Vv>59DY-9 zB>yve$TC}v*%liv{ARQWTV5EkXiCNTz5U{nT31!o7p}A}TIgCH`cgh%P3GZ;XCJ!h zWZ&^Qve01~|1a$u=_mI{Uv+Q#d@w+;PecC(zYqI4GvCzBY}>eY&XtYd%T{C*uup9x zqn&l_cgvHkEo>DlvgaLL)G$RYdFs_AVoi&tJ^XC1uJ&;@yQJ4#+n?KPkA77<-L)-l zUxdoeM}0xMGS6GywS;7e*PcCos8MO*_2A6t1%6%Lydt(7iUGp;-x#hq>zi#2`EVpd zRZ2_fw~2Ykrau!(FX-ilAGs`XPrm&!yFm%lY0({OX>G^475VLcY)JG!E3WbR7l+AX ze(J2_pc(aH8yiKbu!G8+WS(K z&zND(`?FJB8fF=G8tOjIPS>=1vz2@0PqVnK)w3o}UH{+q_AV7a@lBaJMzd;G)_v4F zU^rvJO3#ZM)c5~mVw=aSaQWYCN0b~C!!B(YWsgLT#{z3DIX`2Q-NQ>8IMy!wHn-;8f;A_r7P$AV5)8Pyz+v~(4$BSgS5y1e zs(GMQikQx`bSvVMRIj^_83N4a6NnbX|C_`+q0}Dq<{YYYH{igseRM3 ze3ymg?Rht0ZvUk4k~sb;38H;lHA{WYmcJ7&e(t#MyKZ8)5$DvDbC2)NzLU`OnDybl z^J^10r~ekUt2)YZiYGSyP^yH{iFu4ZElYM5Myt*L7z*}C|9-)qvC7T<$lbkMX3uLCq50%`>&K|THJTtAUnK$ zvB*7_{K>b^UrGD;>ey+XlY;+bbA;!w%h9MTh@79e)3El#qU@MI%8yzv7c5*Q+UyoK ztLx1P!OdycmWRilIbYQ&(Dmw^T&-O;3rAl?d(rcI$~WHb;lEUVJimEeT~y8X;x|vH zD5`-X!Y^BcvEi8UlgEr(Lic&jx#$;sB<9)P)$z|dRkLq?IdJAr^*o*WcY9tKA8W1r zn~*9h`jyFK>ZX;e(mDl1|9D?G6yR*$+g3SUcZXVT@|$-ne?-rkyWnS)a)5_b#i{;gsB`ui?NS2>Fa?ptr_QY?4%sYXVfPzvN-Cwt!#bBjVb*2Quxxf^6v)}KCFrBXxrpfDBRJ#<8n;Y{QiQXdVz%kK0@=X z_Rf3#hbfKWfzEbWhAp1=raX5^nvoR7Tle@#Mc>s*(?$ahrH1zVOL?Dk5H_^M2dE+64xT`#57?8BIR=OP(R- z^7fR4jRx0Dwk@l9YqE6bpW46Yf9_TP|Fl8k#WqY zM~uZ;ZS&PVyn3JGpKjcxKRsLDXWc%n@BQ%|Y%GFn-a36KewF6-eDa|wu{ms+Y$eQl ze|TF4ZC0M-PI!heMb_b??;a%=Kc4l^_`S|v0~}@ImLJS_O{($e0KFc zt3NS{!6MInIVJ^Y%3m(I|95rFf^D2XTTdQ&xMzXbPFFzStI_`HC~m|M>V!{ z=MKkZg>U7Y8n)Hm)%|hubEcA;3fHQHw7+X#DmsS#+j#U>-OaLpt)CyQmDkq~UFvXL zS&~1;hT$LQ-B+5zYz=L-ZJIBxs3e;{t-ht)yR0HNbw-Y2`Cqx|w;matt6s39xmI?s zU)wKrwyS5d@`Wa=TS~cV#2vP5S*-kTnbwJE6J&JvEUuVx|AIpE^fOysXZmgwIH;<7 zt)18ZXpfVy-L3%@>!&b$)IVa-i29DUwxRJWqEw&iL;t&x8EO| zC4J5(Ie*Ii)o%B@vPwPS7+`_-7luyZaZG7-+ zw#x>O(pcs?tJ>Z3nlv3adbhuQXwEz3U|eeaV`lG)3SwJlwCDfEVHd0FiJ>f)Z2f5jdvygn%M)|jnw z8K3x(sE(xv1ZKC3CwsERvgOWkj@ZA$YW8D|ud6jTxPA@&6i~MBEaPRq+u>1HAFbxXn!-(9BgL@@gH!Gw!jCQkaaYnOjl%l(h+ zTYvp@IIGfhNn={+`HTFMl^FM({G*()_m0xTO=72H=2h5cT*zjuGW{yFw0C3QqE_eN z3H(8ti9c%1Z*GmB`S{@WJ=d1Lzpr-vH*+0-)HKPf)syy|l~54hck#x}r$MC;(`Ihk z^w8q)-iPm6uN-CEoT`3Id&iTheFhJEFKI-}tYCb9BmMr-(lZl2uG{vd`xm#X-jy?V zugtii<7gIDCUkp25#OJz$2kf5(^sy}QTO%;I46;MK=pZx(Gu;M2Iu0V1upM6(s6Ou z)V$@>N_z|Z=2!lZRA2ZhvOAh(?ve{_3XJo({-#eo`?T$B!AnD*!@L@=daMpu^r`;# zw0y2{X?x6O%Uxd=ia*=6-v0Udn|@0x->nbZWRWsIBb)ib4$0V@Ssu=QSC;sEuPO>W zE_Lf@+cjC$mtX#`?Ag}0%poJua*9dRrfJ2(1(W$){kJiy3GS^6@E5dOG~cCDQE=Dt zKerzWdQ5ClYL%Hg^M&zr`4!|Oo+gmNyMtf(hTlHak+K1V%+6{xZ=p`4g39HL}v?G(Dj_dF2m`ck@ znT!^9mnSoQxa1||f9;rSm-5MvuiiMmpBFq$^YQg73uYF+`n&Mzjobf@eM;31H)A*9 zKDF%R-<|oc`MrgI>sn4Mu3~&yJu^9%L-6~mgZ?^S9|>?vJp0tx{9w0ywOH1(JQ4V9Uv-+!l>Qj+& zOFR34NN=8;1!^AaytWueWgPo=U}EUMuLraYEgpZ@u4ca0FDAL{j@RTXcVEP>iL-2UQ7Q?{%N375J?E1P!Z~0D{%=U8k{{1QD ziCzI#8TWs_eD(TG@!S_DWEcXU=gwR|<(SZk9EB|xgb%$gGvw*Y`m1{{KL3(ls{Ip} z=+45^5w=@P#0o>Vt)KH`s+!@^P8F?Rdz1XNUw%CQ+oeHUK{YC2;m?w-YmP7rG1OVz zwfV`TEV(iKtDpa&Li<&h zqU7galihH7dea1XwR0Divi*Md#D{;AQTV^E-_D+{`NB>DOV>Ynvn$SPOUOFeX|Fo( zX)@G#{av%xV3MIjndrJJw>F151n2&o7_u+X_v88Z#~tNk-rw4`=BLA-pF1M+eeJKW zUAg<~ zv&(Cp8s%%&M;Cu^HjXo2vj0o_ZJQU9WgG7vNZDojDycQ^&Z;hrjfJ^CM3S{P8*%UW zz3-Oy6X_D;HA|k{UskUk)H`8HuV(JSi8g6Z>wY>1?A#YLCr3PJt@!hF2AOc9+-k)Y z3=DQwdyi`#xWS-v{pf;)v$y^F6dK4K6ny6If6@5`na}>+`+9Zu-MveE-`oERH##SJ zF4CxY*^@WQv*b9c(<7fpiEo~0k-suY%JHs{PVZe+j+fihX2{PDeD2`9CH4Bng`eiI zf0@yAhWBjq9|3>83GZg=_Nr=2p1UUUB(r};Z_s4(U&m5}rg#3Z*O>UC=SSy?>t{Se z%5_>4xdO9a)VeGz+xouLHMKEp>E`wq>1(pqwd%34!RJnXfR|G?KWfqsXM(zb0oP0OEZJxbahV|?N8JNHdZM`ieo?Qmkymidg8#@b9P*Ne`U@x zsOJxO_NR?O-^GN<?reUC&#%i5GbewRBAxSS|nqRX@LijCfksRw2*T=7FsnS)>L)2C}}Z$b)AZc5b> z>dC7rSsYUE;^eaE?~CkKs&uK%_#S(^IMLi>UbaSr;ywEq(Rs2pdk<$8d5frPKD+4n zJvM6AP6md3R<(M?LWdZQE7D5p85ut|=m=+BUR+kEVB zx{S?)$+N63n2D@hz5K~ejSr4fWv^YlBg)U>pEtkp>y_8Pna(KlH7~qV-evIczIXVC z&>#ut0}m!{IbxU6>s%@Cd8u_qqs3pvsBP@ZU7qJwPg}QVJL_RD^K+-xM@79A`?|op zZ>#h7sd5?}k%{bk-_6WuX1OpYI^cZxsjG2r3>E=%ewiO}Dv?{~)m`MBC2`Q~h3Q1C zB_EGCeU0ilpcm(5drjFnU5H`brgixi{28~Tm_z+CpKIuSdVc-(FYn6*#pTa0od2?P z{y#Mve~!zVX3vG~Us!}+m@G5%%f0B97Au>}Uhifx-1E$~%H=&fCGS=L|C>kJv;~CS=#iY-RLssyfxPw&&e9y_CIy?MW7C{I4gKY5G61P}gVelDn4B zTy`ny>x@f>a*SLOUNgk~viT*|#qeNcowE~u5H1Y!&|GSw^vO+t6n_ulwYJ$)y&t@ z%Wq%WzWvc!!@nNaqc{UvvqEck*08&@UrK+>+WLBFh(nv6mz{2X#cQMG`oTuG%qB%^ z3#BGqpA__>S8&~`se*apx$OcxTZ+Ch>c9Iv`R$!{@#0CTJg28CiC4NT?qHq6GWmeU zanEbbm3Hj6kGjYt{@j(Q;x7DPQ4V7q*WP26Ov~0Nh)T&_c2H4Zcqp~{Q>U3;P)pmL z;=n!g`(C>EE$6y-W9Bk<{rU6z#pb@ae@(-Beb>F-JLLh#`|6hL)Zq4LwiESY;VRo< zp=OlbF{d^!JGu24qj>bW&fe+Dt(6WxeqZEyBU0rV#dLD}zNIyG|BX)VZJF|l<=aN< zTpf9-M=UBl%5FK{etr{-vqU28SIF7@@Ga9!KfLPH+j_IDJNOcBU$s+oe`dt?^Qx$@ z6t}#s278vB*anxk;=d=zF5H}ScZE)+Y=a}iyqht1Cds5QSiC9jIk?u$AzWu?$;(f= zu4#w2Oj#xOwXAfZ=;l*;YEyszZ?32jer{{}I%daqw&VZ5H(Jb0;ZMjEy2y5}B>bKG z+f3csyrmEAI%nAE{%;Sxabm+c6P^iqmd3ZH-s!Cy7tO!ooDU6DR4aE`Og8nO`sORg}JOk&6WP4TgU|ZO+PYZ({r)cEp*fVMC0n zd%8)WvD~Nn{^H)>{>z;fpNoq7^FHT8+UI^(wdcFfpAOSJJk81Q?4#Du1r1hn9SVLO zZ$O*Qw{ry0q_K)NgK`D{}JRB7ctw?osbtCdki! z^7Gck-zr=^*+)7*>Qv&sl%|8w_&0?mU&bs33jdk9b;IPMmLfu+ur{Qsuhk zpMG8QS#-kNV*di>m%Denp8q(>C&htlrJsDU(7Rg^y(bSo3Q=R{O?&oin`d;{R~@sZ z)fIj2|1Stwnr~h5|Ff1t%GUXY-IM-J{TWo&{=CF$M_kIx+>n>WOC~gKu8g!0Ijxz; za8GmYS-D6TWk#FWN!6<(O(qHD&gR71s*P&r2Rz7X1^DTD*v6$qadX6#b)JxgB7Pc4qZ5;%<;xcBuk=lv-f?gzX#M- z9X(uE%qlLZF8pkj?k>)Uo7lU|!u9OBZX}kR-({j*5mEou#Nk1}yw{#5d4PnVnVu1UAk=Ec`dk5!A#@Qs$g@$^=%WpK8v zrNXm&AziK$-(I_F3E z;yne%N&KF&A9JWQ^)kGpSki|ZS%(o8S{$RCii#keW;tv zpn0K$;oq-4*GrD2t!=KaeTgGKiLx%OVZlYM^8&V6<^sb6L@{$3b= zLOgj!YyI5Z*GyAg0@vFIm7dJ(({I)KSRlD&uMoE#S5;KVlcW+4orv^|dq={qiA)P# zx*&LYoW1&|BBy}!gniuYToAKh7=5h5oMG^
    ePPtXu_{I-s)VpYuBC7E&mc{;QdwZ>-mFQbA>`mjzw*L zD^{+y(5Z9(jbqnb=QG54*`AqLkXFXm_MqyC6F0w!X_#bki&)bml|0)tyJxcAc5|$3 z?Dl#4*ge}UsdIQ{ipjk+&ll<{i(jo>cQrk1namD3CFvU_=Cev|WW%m}n;#%H_MHuRkbM0#F`q#+Rz*_Z+~D5QsmksF8g(wRH`2pYA0LlqDL=aA&T5MXM?@}6X68;lvL+`w z&CIk=;@+SC7ZMD&{m#&DKXLt$ zxjm}QiJ?wv?+aUtO`JNs40CqP>tQyyrm?(pj>}t(LoY8syDJ{Q*W38&P5TeuyT44c zp1Vmp_t}B-b$N3qoZkGlv-aNO3oCnRMG^ z+Qy{#Z^`{mYJW3lO}_Aaf4=6rwHw$(h02YpUbVFg%|EHPXY$^V)Ur)}=l`1f2&5&Y zn@=?lf4xKD&YV9EKH5Unr!sq8Pphu6;-9u;se6SuKHOQDBs7Ye-M&nYcfA>pfZdY)OI($|@P=NZ0u zx1h1^%cHy5-|d%pe$Tik)i!O;tqm^0FY;F=PmNe`V7Bd(&}kYwjgQ{~DXQn^~PyYN#kXVljdCyQPROrJfEW0p_*7WR3@ zOFUny?M$`T{`J}EqSH!E&n43|TbZ)vT;PAOf9t}Rt}D0_^SsX8O_Hf_Kc4b^$+tNL zX5rIzTsP@4Ir=bPoMRy)gWT(yt(s;W4Cl`4{aTsGIIF;SmC#$8wVGeP9-2Sr)7B5y z#rO=fpRU??KJ!(Y|H)|f%Q4q9pWJjh;;npJW}4oDlUJsnZ94QK{ibE@^PUx~JeTe^ zSWmvCBaw1N_v+h|6PL-DK5V-y<=Vg{+%1`ROH*o4)S+ z`wiIZwsQaMeg8W%`?O#1I@Z&5_xWYI4j)*}Qk46r?4@?j5-XOT_ooB?cr04eyjq}U zdo1sZ$cwe9=i6UM{NnZudN`F+F8x%(r-CoJpUk3VKPZ;`Ih59!R=1SbZ%*d+2ltl- zY!BPhe&=MrqqI}GNBaCHwqHdj3eA4p=zM9(@)bf7>!sri{iX-bPTW5C#lv;89Lf)R zF1`{y!EU|0r;$~O#<7oJR8ZhEQZ%CBT4_n_0~0&9L+ z9N$y*+wG5_6`ppo--crZ@I9{;pX=o=|@+y&cuGnpW+>_QSZZ^!0ffG zZSh6TYd>fDdrRHlu?(fZ7yRvCz1T{V2XX* z%)0IM-+%ADyX@+f%a6N5H04%VmFujp)wEmoz}{Ej?xVuboFCrZfAviE#f&T5vA;8K z9=#^A($64z%aMHrb-VLomg*YY*6lo!9vibgsq@^oTM2%K222urR!c75DSdlOK>7Nn zy}l-%UIAu@uPdy#;+U%XO7D4RFZ){2MO*KNv%mQGU|HsMp%od+-&OOp{@b?8o=Nd<)XUg|nDV}(Xf_w4$8 zeN9A_=-E`^Ip(igXeCJT_sd7JSsaxSa?@-THsnT|3N)B$?q8K6 zZtA=~Z^nz$U-KU?n*VC=t$ROm^WN#7-Z4S{eEI(;KKglkcm9&qk)2oKE-(A>Xw06! z{AUlG;oF+A?(U`DgQ{yMrJQ;xn;bYr{?u2e9RkzWuzfvqBa6RACx_#?dB6i*6@enw z=xUSZ*Bmn+6;FIT|5|lg>?Vt*2;0qVziu^}xmwQS{A|O1@5xsSU0?GQp_Khe%T3RH zHG6mK6qC{N;QbHp$@#pP@#Xe2i?C~rbMA*se0Oc%*~)UJ#!_|Iatc4tc?pnxA*>7x z4Clk|pA|iQ@$laLC(rCZedgq`(`Qc~*?0KVrQ>xk=iHgZV#M&_kw;m*o`XVw=(ovB zyj~xv6!AJ7$huVL$+G;JJ~Q@j@t!0=piW?^>xZ_;zoY`KkRzudYwKt6aS@x&Qs! zW8OPo)JX+R-}C*&xm}rZGRd~C<`=9uzgFA+IO8R}u+8H^w43gGR->4U%XoOZI=-{} zFBEQj>c!J@Pk&|$|q{OxT%L)&9mpz)S=kK+gll7k@ z7`#`Pr_rQ!+FN_)yyI+E0<(8HRPsu70kVKp4(XLGJm-Sf*MGF6By*OvUTBhO z+p$JQZD;hAywFl!qdQOE*7m=7^Xc$<=2NNfJ9hPQO+0a(&qJzCYp>5~9mOqt4cR&} z&l#8YhTk&RTB6w}S6gIfIWKI|Yrj1XR@yl~;_b2Kmxmh@&#?VubuxK7*J+`b zWRaZpeI51pxwA7wkBMBLTIzW;b=fq@?Qw_y=%jdFTx_-Wy#oKMi0@%1*NJWtydlCr zH)ht0vP;I7%d&W$7^TUCPQ56(=G=0t<#%2xOxXT(ITzEO_IDR=%SqgdtyG`#e{0I8 zCX4keBiS=;ri9t73YLGMccvj{OKW6$`N0)^f~vDv{#n{Swz5>I4`+yDxunZbu%c{A zvgF#iizK3i_Ugx3-@0l)W9oC6Sw6Wp)zeSL{K-{)Tkz(~-OvM?jQ;YQZT~acJq~%6 z>e#nQ>_z5_Y*XRqms$gv6r%%}4lYS+ZB0Ak_on3GYCY$J-;CH6RqM_;r`RZ}^yIQ_ zqW$ZCoLA2*+{%9{bU#O?!o=;H^rZ|Y&#;kLY{Pb5Qtm{Lwbz@>Qx9FjI@d*IU;LH! zFf4`pOpa_@kXzb`OGbHS@5Op@136rt@4BM6Usv?&dntxEE89~SYZT`kb*NdD@K8@vm& zX%!j^JZ?|R={56;>{|VwcT@KHf4isn+Gbr9_y75R^^^}^iumq4-fw(_XYZEg=H=BF zbY(S9d_T>y_uH-Lr0*5iF9lA1C-HKc;$<}}cNw3{x_YV4)+&U!iNzKCy`omTWl!I! zpGReWy2ov3S6h|q?>V7ZS|$3`<*rv67i}D-@VsHW{gCBfPFVGvX&HOEq681i_k}F~ zu(aKGs-NaZzR6R&!@e$)zVPa3IP)4o^&pVK_U@=BbZdqL1e- zp*^$3-{(8;%FJ#y`{;U7=)T~c346NEhpMf5BB1qq!olrjH>^^$tr+5F?lGQz$4P{H z)utU`r&2F61!T^TKbHAevTKXy{a;tge72wFHP`v{pmFEPJD(;*gxp&yVJtSeOZso4 zkna9_ckL=HIxF;!pJtllnKw1u!bn|dTFUB^{DzD&>Mr6Jyl!785qHg&Dznjv2IfGb&EMR{qc@JdhA{tKb*f!%uAm$&06SZ&*cgi)AG+^vjYn) zIA(5ezct&x-+cECNB6*UdmrTdXwzYHyE>QS>&Fee^Hp@NEUucx^4@~y)^8Wze2EXN zZo0|!@#X)Vs~UHb@>jyDqkeN5ai|Av zjz|>L%KNfh`%|3K+eJt6K6?oJA9fOdSk0ky;(^i7q(9RnDohFMMuesO)^Ej$L4-~@%~b-YVCf9l4sG2 z-?PM7{oS4=-LQ7S@<4~l%Wq^%P-2|*VMeT>)^ZU~!3Mp8hoAOUtO$F(cJ2*)Zx6ZOIg?MRC%-M#(F-JV4uM2&4HHQ zSEuJ+H{HRtXywg<4JJFo#5~U42)WZMA$x*vi|fn9+M4{fTH7!6U*7TM!ggmf)4g+V zyeOG_UryeRwR>}n+yhod-a4+kHnVz|A8uM;w|q9UdK#Wu8C(m~rFv@svVAA!lpOC8_M=UJm<{Z}bjpri2e`wbUeb8YXX6{ib z5zke6{LqY77p8>Qu%~l~*7r7XmNM+~+&jZCjMMx?ZCiOvN|wNChEW58??DtPR=^J$PyLjCC9R4{nx1yiD<79t#FC#UtF-{^? z%2MUfk2kG*&wupY!KKHUViB`U?#uGlhn?|GCo7(tPCcmZr}zJP`J#9COzdO?ITnBO zn&tdXW1EDI(IqMQiZ!BrN;kJ~CN7Yk&{23 z>c+Hs%YGKTrnYi#zF5DTj9`|JtGT8Ni>*;vHgoOSiL9cl-}iVIGp@#OKu)Gw&g@Z_${WN3;MciOLtUH z$&)we4tsk@Z4d81&AY#L&Yke9xN*mnWe=yN&A-g-G1*JY&}}l8#V%D}nP)H8TF2Ye z3(D>IaYikFV{dS2^d-LBdkc>ptNbnF5yZPZXj7f`(^kjqhcC4DS44Q6-ZAA%xYyz< zAI?m8S@Pv<^{g2+922In)SXWX7j=E#lA6bVq)W~AU(Ce={M%zr@;%wKAZUKr(H#+! z8_adnm#&SrJ$c9@`TrUHbc^>>R^AD{em@|mGhF`toi#E}k?mSqR@2lj9BED|jM*IS zs=LZv;@Z0nRhpCSf7DLn+GjcUwc+_Wm6sw|^PBJ0c~0OCFx|Fm=))qc(*_sj)8Z&&(FfESm(LqR*2TEuQ-{dh5R>k85M} zY?r9sm*3)Bwlg&*X=eAL$8pMhS;gmA-aoxKgJB=n-gVxelo%fTl8Kqb(506d^jN*E zH}whI-lCW5-mc!>|I%Pi?pf|K|I5?f2^I(6jF>U={o3iDdS`oQCd^-JvHr}d)9pL& z_0N#pm*d^=d!ydprw==oZsl!{{dn&9wSt3(dp@`a{AW6PyFkLx_j$}K??)_KSNk5? zBEx@X9;@3Y=8fxDEvi}bgVA*E{?)D0nyCltnC{PF|5`BRe!`z65l^3dF%k$YoL5<) zaPbwp8dD`lHXf4!#OjLRhsSJIkD(_)12h#H@{w6=J~q!SkyxZ+JN_SScxpE5(&MwtZZnR2Rn7~(R($ixESt@eg~9zdTy~{19FKVF zk$Gclw1suiim4)PAtiT1H|)%?2@%?2U~_eLl<&R6htC)N{dRIe z>&R2qVSRIpD~{{6yjuIz%a7l$O+RP8)Rxs^KkKCS{<36CV|Y;Zl9lzsu|0iPt&~lY z&;9euKM}eXGLRJu=oF(W?n^G;LU!vbAZ+XO&Nf1KFz#SyLxgJ&av= z_{FnMrIqPBKc3~QSrJ~kEaePKlg>@YnPSuIJ3E(6IQ!{cP{pnT3Ab{-+iu?weQN#L znV(MeTjp>@E#Z}$An-J6?GF2Exgwklb(V8)2t}S@IS`!kNO&WI!8NW2t8AW5S$3jx z)wxx-ZPZu&oV|XJ=Rwo#d(V2Ll-!RRbuUp8UKx7$%g)tySs!jRY-4|=6jA)U{qvEy zrWK8U7e~mgnX}-EQr=>Pd+YtbRWB>K@SsLUe{Fr}@>?5D-cR{8J+hRoI-e_f^#v8C zy7N`u;$i<7UJ0I_Xqy|f%ILrsjmafRC@}gr z=XCVplA>3C5550ex^!P~=Z0msHm)j(T&l5Y zb^reT{q6sa&wqL^?XF{dy;pwLye#7si->)FwQplQUdKF~^E_$?YE)*v%lo&I z`R#{_UcQ>UdzEJS-BUU;`J#@sPH1A%42PxXA6D#5VlY{B_~OCtfQAVxF2{Q-pIGug zUtOb`o7dRVH&QV{?UM1ES(PepXNhkK3*Ku#GuvR{-${P6tX&q~neFjWfr;s3mDthi zD`jt<+WU0P&LbzvzrshFxCeu*qg?Z>QRQ%lq+H7T4|c+juYdQbSt8>Jne_V3=)s1lmWxq(gOLSdV5(P=$i&Bp4>-?%+=H5cyPVo)R- zJ>`{+Xv7q*InQE47j0ouy7H#e>Y9n!-k+~zV%2Z%F3|kSU?+8VmL-?5R>!i14_gK2 zm`gFFF8Z7jyDvV&V_D$(+PwcO%1rcFH?ckqYmO0c*cn6N5Mw7chM ziPCY;LviwXVqKxjJq}g2hprWRBJeu)rpQCaI1 z5yP+3uYX^;d-KeKxsp5LJho-dv`-7#l6Q8Jyj;+%T`Wae0TMIank_EK)O&^69qhMQ z$vpMP-G%XwuSw+ghPSxi(fEJX>F1ry_ZN;P+u!d}S+wm-?!AqePBEs9S#NJl7VG@7P($eHeWx7>#d%+URJ(_Yyc8+zncZ;Q z^Kj*Jtqkv> zlGQb9x7$71XMXtB^LzK-yw#X@;B@=xi;Vs|>?a9IZoAkgwRF81*EGuwzu9J7YkJ|k zCiCzv4kf<7JyCAERYZ<13zmD?5Mh0TMb7H(S*gfF3m9w?w^gf_XbH4v8!F~*32sYL z)~e8y|5Q`cJWILo;IqkQZL^sc2`S&g3Xl!{ zP=zTXbpGY}T`zBZx+vDM?up3zb=PY|kE{seP?k>*pIyFB)JVo;VQmSs)4|+tQ)gP$ zE6EA|c`bOWLFzZ_ttb1<541d+7~`$6FT=Q}A+{i}?D^l?-5xTYQuB_)(v+|axOB=i`skC^w7-9j3$+(A`=?V`Yp&SAG7BEP~EM0UdL0X`JS=+YWU@%UF?K?vtRJo&B&j0 zn|t9j4c(H(67GGr_XOOReyLHmbW1!jKj+mc=hUiNrdrvXv*x6{d&M?0e%jOQS1gXI ztxk`2pY~c>_&ZQ>hRSv0mX4#6X=}Pmc&425c(m>|^BU>Ws!4HoFBmqi`k`3HUBV_C zwd+*g=QRwI=SNTZ7ctvcz`S07* zyA~CxnitnD{3>jEdX3AB!@1mDV&0!C7To;SdZNhdM8l6Oe$7WR&b+g+pLS@G>*U(% zYWtP3Hn*!~y7%ln-go8j*U87KZeH!XHT%!xGjXqXnrKyb>m7-+++x~Ty3mJJ`N}!| zw`a`Hp59xwE;O+)?0&W;i(K?yiR&o>3?`M$t=gu&?TfN{L>CuN)2y3kRP=F0s+L+s zwduxV$8O%c$7Ww@%71Ii=AyvBmEM=-p4GOfS9C3C$a~0wXivQIzQk~ID^<{#YfXy*NrEH7R6R9DY8WxMwDRh;}Yd%MZcMBUFd z4_uT@|NRR+p?q6Icu|y&MS|s=b&aA^jf^yB3h!jiYxgTSruX&X9HHe>(OPb9&)VLa z2G|E)(@37XQ+v_t#E$_Cby9banYtM?GtH3~H*yqiShZ?N$)ZJzZtQMNP?oUh^lLl( zq~=w{g&fmw-?mloPn#Bh!bjV#(DQ7p^vvyU{w7wo&l!^b{+P=BHTF*3hF{t&w?r)^ z`J(MDS1sp=p3*v}WBxj+FU7UKLbr?9wpMpPagXA7-hD}8r$ z=e)WZXZu8BPDI`Rs`Onc&haC|KhC?4g}5&^2uR&~p!#9%N_~bB(WgsNBFknyGR!rt zTRG!L)#(q}z2f2Lf7wrqo@%wV+~VVb@-IG4^S(>RuF~&_+O^nh%5(-25pi`oBR*>+`? zKl+^~KfKOK*&h4PY_+7iOP6P*-p^AalRbO_%O5x@-+fYm;8cD0jVdNV|QpXLi~0Pm}J?d?CtRcJZCq zW7UH#4PTsoc2Kv%H%V^!&QRZ~ndXb&NxlJ?rPWO8? zm-gOyUVBdL`z+0AiKiZ~x={a|C2rT9W2&4d7&cU7OFoJeuvy|Iv@>Z+?OTm7E6IAZ z>orxcmx~?uU1s#+*FU#eop0KGwr1u&eIsanIeg-c+ZWAtc5rR<`&r#Oh4=aQwkHC6 z4s4yQv{Le~p!(goPkW}H$XIg50L=2P6gzkcSbx92~sFE2cHm?MH|(+AG@^}$X1KPx0n z2ym3L7I3g>UnDkD;H2Rr<+Hm^fAvv3yH{?HFQc86?O7>iW5xo}?UQCPs%cE05+4}3 zS|crg*Iv8oGv9yJB)vMBTYYIeUs9@dyP>6L&-y^N;}a{?#nq<1yY?&G8Qw@!Bb zqV*CQcUHUS`|)vYVzCUrnEg6*4To8s zE_|VXGGOzEYb9BAsl8Ktx5a$;rI|Hz-mLdi%5Eh**jM;zbFS&+jM)$FToTBxI^e#V z=OxpA8=;w{%PpT@QU15&PLlC z|H7W}h=D1u`^PN(mGU``oipBZoZs_5?##yP53|*OE@Nr`v0OarUtCgvpsjcgQ&zyE z-*4Qu)*bbdh?=x|;kMJ$O8U=A6n!v!D-g}_Ptx|(Bwiop3m=~C5;Edoa?tlo654vr zkNNt;k33$H+m3}VHjm=oTzxF;@V_am4wpXr?Db`dztPjHQA{)X47!?1O?NB!Bs^*H z)@E|FIOboTcGdQkb7j@t?ag)dPgLhkbKBj#NNWAQ)dG7Sl;7Rlz97$fUGGInhN%;# zH@dFhf4k%1t<1NN`!`H9^FF1>Dqr|;@`b0O%1vuhUxW*~+_)2^&H6>(yr6zjZ2#o% z^?P(?OPAf#+F*9LhR2Vo>YCq5_iqz5U}Fs55MvDN3=9l>)33b~J$&)(m1D=x9ous7 z^zjq>&K^5)?&$F&^Q`Xnx%(J0Z1ArNVvy}IedSeh$SH8nlybG&@Fgcz7Q26I=U#nq z=8whUjwQA%|1LUz%98Z@{6)av^s(pf8jJI})@vCC_n29~(XME`>t~i^%Vpvlb7|Kv z-rSz4e;t@?^Y7kR&b_wdTkwm>|J`|eL%3v~eQZ<+s1n=t$=$K9{uQqn&(R5b?tND- zvR!z%Ca9+-O}cB}nQO;O{`)CJ&nW#8yEXE;-@4xLEf;2;_<75#EO~C8VCKV^Ra0w< zS3lQs{+oZE=bz==1=uBqi>{H zm*y+XE!(`+v%qbWlb6b=W4v$nlxz>E{qB73)Om$l>w4{@7kFQuX5gjUa&DqhT0p&0 z$xGF#rs~E#*$aP95|)|RwdUK47mKdH+-9G(Xx+TUta~obeX~#hXyvTVc^1ku6?@Zj z^^b6fR%F&1`$%X^NXZPi^X-_=A)mS5k0=-7ivmBr^aXgojSze&4&s`QUb7S_jk>%%lHHr`Jv+3+!x z^@`_W*9$81kF8!-xT#7)Xm0Lz{)N%EX5SCVdNtwfyYAFBxhvY;Gd{hXcymHS#kA%S zN0u!=OP#*%)c z)w>qWG1!({bt0+GV`kllq@vf_{_AUIhL_w3(YT(zF>d8vEmwJ!Mozo!wR?*~LekS8 zF&j;Lv|~<}W6WK)rB_S;oV=#%cVUTZ`E|(%*5Vy)M~*ySrm%D6hq(#?H#Q$lJNu&I z{lDaG!mCbL&OGsJy5u~OMY(a}8&BK*@OYRpi<{@BL(6|{LjkAL+MaIQO)FJRj{VsZ zc{lor*s@?VgXvS2-Pjnk@_NYjO{+B6Z*@3sZ8>}L7Z@_5cG;{IT`B2r+R8oxhJFTV0hUU|z?*H8W5 zN9_eu z&Iy}h-kjrHlwqhXXZiEos|8yYi*0^&y}j(t-gt!&Y0DHvJ3r^-&d1e(zwH!ir!^M7 zkeO9y>U4Bv=sFWd@0n9Cob`!bZF4HYevP=u`fVrDLwPM5Uf$fut6-wW%3x<1dqhNF z4`W4am|BYzLyPvW&iB=~CWyG+6mBV-B)i}J+v=~UOQz12O1l-V^zlyEu8bv>XSA$h z6CdsP=HtEg^d%qn?R^Ivw;0sFd6*Qi?(IdvhZFtxbvek^e~p{8!L_b4bpMvwZh3PT z>{|Ui=E99V@dsGSTl8N{nYcqf?y1iT@h%qGZ7Mv!_~FG6n^c$+cQN!2cw z>rQBhku$mHbV-?U)iEu5kxRD%p4|PAl)BbBI_FK;{JuN8r<$zk)K}}6m^35(q#mFA z$+Z13H;!)mcUR!0#-f8;fBMfqRNcMmaOp!+3-!F44vqo3lM5OTRh(F>xw&ok=OE@e zDUXxSW-&kg#ZLJ!|%QHcD9vZ{_*rM|G(;~ z&Iec+>OB9N*oj*%-W9Ouq;$9k=V=ROxrZe^z2bAPaXm<{6_tDtkt!w5v9I@6a@^f# z&laiVtMYYRT3zn=&pyq8Z~D(09?GTJj)fncZMInGPyKlEUgJ?o$HoAS)d2wpd5oW4 zAC$aMEFy4LR=l+_+mlb@o$t$Ak!}*sp-0d7$8PcX?iBy?Rlj8T8o{zW)z>+PW3F8m zaGiBEY(is(zI#eVM)117wpw`?ef_8Y?Yn!ge4WVcnGb~;PQR3~+EpGnZR^{E!m4-g zr|+(;i~6g-v&eeW%rNZ>PehBEW_9p7sH#pk=$hHM^r557*S}#gMIyE0e`~X6Z@1sf zS2=6{(yzK&|L#@zmsWE~^(+reKgeR?o{?SmRjJ06|MmArt{;SD3Z6`U%kuW|z0QkL z6Xkz>@_B5z@QRPfdd&lmdLOrTcIvF!&bPqe&1K;}4zJ~t<&AYsPX#`k@V<^itL%5k ztUTs8Ro{JCE9bljKl`J$_kQF5{cBfp>h^p4T`VaJ)H&i~Zddj9`s`0dhj*-T=sh`G zE{G*#EpyQRuhRY*%Ox}V1e1+w9$Tw^<(|Jk-T(UH!mnA6=0;BPxGnH=&uMkH1*^P` zg1^tb&zk-!XQP4A^fNQJnWivTTfCaO(MKlbTiLgJI(L_8_39=#wZ+Ikzja(uL}ljI z7nAFl8Sa|8J!Fa1UAtz*QKg+bgr-M-sC?7B?Ed%f$=i=dmp)r{!18`g;LQ`3#g!`V zboJEJITKSEZEF8AZncZCQgu0`Lr~4<;IEMG@h<-wW=xOc<`b3 zDoggeyA>1eTdEv+tTIvMN!ZI7A`^`+UUzrqU14}8l27X6S8LgC%TBsomC8z~QLhYM z?Jw=K;_%il8zc5`3a!0f8hd&B(*?$or&29fnceXvbM z!a5bReNP_Bf7}saZW6oIW|!?go+}QVTc5feYFfBdDO>EDXWAZCIj+A?V>aFtunK6q z-P`nMsW0=xEYI*woo<0P_x_(-YrNUb z60I)W?kHy!_Wa|rq?*1-MhkDY1utTstI8A=emSJy!~S4(OImmlvtr5o7o4`oU1CqY z{J*DW!}NLfsTLKcI}Rx@ZM$<`;=y4n$=cu@cd}lw-xPfK<>4{cUHqJh{y~8&x3o$a zs7~X&T)~^yZ1y|Z<;DJ#^?PSXRBCnz%2gLhvVKc2zrJN}oJgtz<2=s29b(Fy(oc*o zeW)o?LxNpUivGCK; z;;i~*M>lL&%}hG$o1H1n?e$75=ZpZSXY0eR))y(a%yO?~ezH5dN}by%Av|JRjAEp3 z&?~WtHILGIC!SS!nR@XvFXx@Bf4{M2UY%8Yz1Kyzb&KJo-%DI?s$a3*?tJvfr52XS zH%gMvO)FSq!My69)491niWW~$Ty5mPFGXL{Xhnmd>W_P=X;0_a@l9rwliE8=lj|W{ z!cO@}!#|;}=l!Q}RyHxLjJAtk(yzbutmn@9*DvM<>D0T3-`RY8d%4K1vhU~Jwd7RJ z1RbAj_W5CNmCMb2p_(z5Z|_<%FZ`gW)3;?_%|n#*dTCW*qYZtRN!yJ*|H&nBr~{4yioV6MZ{V%La}`stfrH1~K-e4tbCH~PTS zr>C^SwU%BBQHYaGymfFHdu8#Tz0Oy%_T>9r3-nY<48Pth`|AGpXFlwOU$0L+)*iEX z|D}UXFWLT065aaIa!YAjq{DO%r)8HOALuy$x#U963dw`5A7W}tzuP;hGstnyJ#b@> z!E@#Zf3&m@%-LYYm}q~BQD1OYk4W~`pt?6M+cRR{9J&(qtJY(w?k=DGZ=*iB$|dzX z9q{Gc_0#l7f@S@$pTt%jH_0zDP=RrOwkU zl5VRWH5l~YJ7l#waN!Oor_3IuvWU*PmMe`nY4hf#?mJgidZK-k&XfyLjPtDaezO&N zb|GSNWhbwBC*y(@Qgh>Px#nulJD%68Jxj!QmQerZI(r$f`t+OMQ-Tqvo*dJTA znRm;~@P}TP-@i!ud?S|eWoze@lsBKE=YKP?NWGJ$rcgX-?}w$0j-j`|Ut?Yn%AdI2 zQ#LBBzgGU#jwfyNW#+ox*peG`{9|XuKHiLV%X~S1?_S$AW!|gr!F#6pKG~ziqx+)t zR-NTb2fwV%mNt@8%Faf<+p;7w@V7~TlZ8j+E{_n|swk1L=*l+@wq^(3%*bHaw`to#_sc&*$&n>e1 zdZ#PH{H|2M!5?0t$L3V;d{)1Eg4Dx~*ll7{wN)3#?OYZZ!uovGdigm|_PDpblozp$ zwVy3JD_W`eZ0;-GM4Rh7r{3RjWAU{&d}`BGHr{9ne!K2<Ptl!3^ zjJ!dHjCEXlzgk+lFg0aF#PJDk4i^%>sS6(}uHrlU=f=r9PQ{B(l}$V}>!4GA!M|rMXE{IWs+N6Zd2bzUTE1K$E~x(UN0&g) z6^46%3kU2KS;l!s=E-sOila84dHxxG+2VNJ%$#-YWCnBjpO2Ts%vez6*VMAX^yAU$ z{NSI7*Vu%LJ#Qz^5dG(J{zd6cTcKdK6IzWYmt;o&c!8T43|iGX_b>ZRZu(eYu{o*7V)pmKy)n^q-p-xqvgevg z&aY!ebB*SHvY5X9N@ls_(tT{xHCBEopP?tYHHSwpyXfU9!@x;JUp|ywn6hd1B(X^j_oas)b{I1UzPBpOMim>>b@wYRZ>R9GGY5A zwHn)xZNDJ0aMSmP8=v0Tl=R1GCEt$b3->;lYCO2M`jORz=POSvh`zC8-cO!_Z+j~j zCOwHc!OOxRr)B#^E}@L!L0ZJ+-^^8>UnWcRUYz!*G17nb%H~gJE%&^SzAV3Gd+lx; zTgg+6C;LNZU)5sEyQz?uwRDmCV)m`a>^60zH)URPS5I-PusO#Xx|eHr3cw*zdR6Cm+d{ey@l-^wx-nHnb*V9D`pD)e)C+qjtPfWD=TGlMzUp1Dz%sZp6 z)OC8^wY={n?Idvd_$m8Ka~BF#AIP$j{C{EMA_l>0Ibo02goZu+9kjx=Ja^OiV~b9m zKDAAG+XCp#l@4B@+c+4&_i})4?f6(ODJ^>G^vRPu&h9^W?D)asM~|I6eE8I{b7$tA zl({)eY{I4H40#(t#l22#3>n#LF4ZN~ob9lDBJQPe$I4Kry75MO0IV-cI8p-ZsFqz`Xi&#CI|2|MN& zxc6LHluC!yHkY@F3v(9FJ~Ks5aAmglqnkci(_OYN_#pIIYx~(LFVk!sgsX7*plqC98jH2-VM7j2i`CnQ^WGqbwI`R$sm91Y>=rAJmy-!W-HnWlo!-6c!Z z_iX=taZ7C4CASs(=AZq}r9El-)==?#${tzW*IgTLPCj@y?PbCWart9n9QI!X^DkHX z9$N6vc3q;&-WY)^je=*Dn%1bryY1%c+;eV)!{r$bhGk_E0!(Xjb+W~tUz;v=wnO7) z;7<{;lXd%9%fqXW{Cd?Kah$DgmCYrg$O&%DV&C&iZ5FIs z#P7k|^Up6|*DGCY^dmFtbd2fx^*vtuLjOh`+`P?Fr%Y@`SdwXr5c@sDo7eML{vP`q z*cXr+DYogN-^=4wU%S&rgfdv^fNc7%oMx&U2gVv>$8TA zHSe#S+LLa+arfFhSF@^M_nkKym@Y8h`&Dy9(`}~b0fXh66F27a8aHg&bgJl)WU`Y8 zw^{r?o8PbYTc0^`d#!U(VZv&|&BuzQ)PD*m2`R0L7UOy-3^|K`)B>;xq0!^tTi<=mm1t|x)hRF%Mxt2Z&^~sy`%?3ii!rW*6bth?=Z%{^u=D zp$qZr=U`Hwo!`(O6z*_{78V#S5p@?NV2g9IZD9%R1yc-nBr z_T191PTTiSm^j~Lnz*pWN}mm1MWs~Nh8&f+ulq+dw}9W{(Z2LkIkVTEx$1W=qae%d z((Q@-dmJymzgr%CvU`@<;j^+`BEf3Wv5&gLLs-SUw?5x6``CJ6kxJ_wE&KHOG_7|$ zZu_+4{>qNaa=}uce#?P&j9)bsF=RBk!zF%mLc*GjJ?oCV@(_%x{or6Xo4JzN+-$eL ze{;L!_Ft#;9HZsbU$4EmwRGdz=%y(J&vVwLsyLmqDLgb|;aWR`43oT;GcU{LtiF1z zv^s%Ln&sTyt!onkZeLuVFwUn|1G4n z{<&E6`F}gRpLs?IZCPrkGeugjGjQU4gD-ZU3e>Ao1g6eai+sIp>SpWgRP_+oiNE4I zPugrg9@QaoU{TV@BMDd(#&LHV`lWNF*ZXbG<1{jH7?(aXYWsS zKBOJIIPL5g)AB5n3(IQKOLV@O9c!NO`a@BR>72zJYd-u?`S>pCqxocY*UOJsBDCjO z-haRR`ath#;jW_V_pQEx!s8Q?6yyVB6mwoQ5rL{J4*DyXz+w4EN^LbT|b*tUx zX~Fz8$u$oJdzsfS+vmNtbaLyH&{G^f>+Y@66kMFlr1tlU)~0yvZ&Al{<}7mh^loQN zn}AqmU-L%6!xgcDi?1-&dF`EMDz=RA0nfjc3?|8{Q!D)3b2V=rygjX^{r=z2CI3>7 zb%&R{`@Zq@N#6}C%YuKo&XHOla^Zu+ZJuL?HWcSD?T=nNueau`^CAY8zwMvA-$ma{ z{MhxPKvBs2hsW9DTGcih8eA%O|A+M5y*GEpXO|3DtMJYD19UEm|D4Vpm8f=9?byEK zJKgP8b{nbIn)ppk*cTE0uriH9?qAZ4KWbqs=e)S3P&of<8|x3L>lz*^;;C{T_RVvr zF7f@B5Yy~c@6EaI*Pf%QT!l&={g-c=#Kl>0dX$s|>b(tJk|BAl{pqQa|HAt&-#c^C zVs`O)wHkwWuK62f=SWQs&iGe)f9uSfkNybV^=p0d-}s-1SM8F9ySLJp6il7|*w28= z=ZfL}6vc~kr0?JJnJ5x3+uimmRP2Go-$^rLFZX$uMSlD;pU-C_@0Yy!m!IwV�z& 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 literal 0 HcmV?d00001 diff --git a/core/assets/sounds/pew.ogg b/core/assets/sounds/pew.ogg index eb960f5537da7df02b6bfc5bf4d287c3e018d070..6a15b963e3f97ee9155260d06707de332ac54d12 100644 GIT binary patch delta 2479 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 E05)pId;kCd delta 2531 zcmZoL-eN4}pPnAfz{CIryZ&5f1~L5=1fnNO>G6R0j0_A6f9Go-*%;!*Uk?%hsg~uu zSR{~7Uoe_r; zex{t=J6rR})0mmc=L5eKG}|3zzT4>ZN0s#vCp$ykJ_q*j`2DjopLA47*|jC`g+ATV z6JRm<(}af`w|lAiYj@pc+v~8jI*4Dyu9Rf~vsjHxgZHd+4;)Vhow3*$!YNr-?;DkV znd_X(G`=;9CT*U{AYxbQb$F&xfnffL1A-gdpWm`unmH-sIlJS#_0}eS+h1IW*%ENb z(8V?FjVJd8##9FJvjGNHXFlg{do3(p9iQa8tK;aSM<1N_+i9h7ERtW6#Oz{~$zhe< zTEe`45u50;xXoyMMJdS#ZdDwsdUfpl-}jB{Y*!RZD=Ta`tI>8qRd8kYmsrL*d5Q)z zmYIoltTUc;AaGsYJaf;72{$5ixMxq+wmp8TabHl(?!QkwN`LyFj^-|W|DsN%I_hT# zBP-K{dWL&zOLp_V?hfJiwN$9i(e~7ua$*+e`k6=GoL}B^`?vPvi-C_7Yb!VJ&iMc4 z&6}yY`{PcU+_Fhf?4PPSZEZ`sZ=cvtQ>pVB(GO#P6iFH}_?(%t?Ha?k`%HC5`r=QX zS4`->vgqSi5mxmxc3Q!=c0F;vuy1C9mW;Sj^SU#XWRneRpft=lu> zgkt2cTgl$*>d!^KkFB?{>P$1b7ZJZv@OI;wjD0(f?6tFa-Osl>^l-+qoj-pFOkfRl zuJmO#@;GZI();FI_rCtH!yE4jE&bf|z}?8=#`ir@mzN&i_B3|`cj^1t3%-_|784O$ zzWZ$|yN#r2e)iOqihPg1nWxo*F7Hmc`9AG%)iUme?hU2aZ6r>%7ES2cRWcB^OL&um(-@u z?LE3<8`smxE_Q;QfeD>*K(NZ@U@*O z?ChdvQw*mpWcX7NcfKWf6JuR_NU?5E4Bww-sR@^h4mhYJtXb8T@>HXtrQW9K&Gj?) z7mMr5?f)_J&;OFCFLlqv7=5dY-m-qN-gS|%hh-CX7M!{BRWj0XvaX0veU?#?yzUBz z*C*z3RUh6OcI8TXtrqj0jGZ}uAG7RhcZuPTyWk?0)xMlxe#0+@jMd>!XQaGj*dmqt zfA^#XGs&ag7&Gconm{X-JQl70gm=$<%-Il9z z70SLZLWJA)=P>MFKjFCk(rcoZpWHlNzi~60sl_7S-N6=Rxh6}E3?Nac#Tw9&;Lnp^mBhL4JtIavt9D*vz33}#4I?nWI}XC)Urgu zzb8|#E-2aYWQy)QjW6uYX6N)Atgp)RvR@6>mr)jaFyX}8iP<`Qhnjv&HSu1f^mOgn z&jt4vh202i7uQLsH(!2YR`hm`)Q$7EGHuU!<0Tu)%W$vt$xq`I&gFM}O)Q@^WL>{F zW0kL$7T2^srWK#xv__v?|9OAX;`O)l=GU5h^^ACVdA9f5%*|}mzRs^+^znS`(thWv zurF3QjeFhw+^!lO?tcJ!e)E6#+ntkx#Lenc3^#;GK0kj{{F=9a zR+M|_vakK-FCX2nZ+1Fu{AOwMoK=oZM{WDt7xh2Z{&r}cP(V$P_=>!x_Q&-Y%pSDy z%C(g|I@bK}f}rHTS--UPA~%ViHp%@N>chzJ;P1`5fBfxl#N6JMA~$oAH~;PH-*qdd zs69=2z94k}k2O)=3$7jf8&O}j!Df5OpCS{mpV5IT}|2;vZC%zhRuOu*KIL! zp%GK|2NrHE7K>c`=&jy)CBp|tHza*kcJgPaYqj|`b^0w|mH6LRMEJKiJkpp@RhPoR zz~HcV-aHlMe^q(b7ux>U*)IP5f7#hHe(TE)%~(9oOUM1r@!+~bE4Q!=rs)$y${y^v z!EiS)L~w^s$~T+HNU`^}EWtlC7aiQgdFtf!*I#S0(-Jt|FUd+Q^b)$)`sew~A04tE y+GZ^Z>nZ>>(hk(d@BBMs*L?Rl-D2}NmV_jWl2k9fV2K}73Ud7NPV8Kx#s>fblDNqL diff --git a/core/src/mindustry/ai/types/LogicAI.java b/core/src/mindustry/ai/types/LogicAI.java index da86af9f59..20650efe53 100644 --- a/core/src/mindustry/ai/types/LogicAI.java +++ b/core/src/mindustry/ai/types/LogicAI.java @@ -104,9 +104,7 @@ public class LogicAI extends AIController{ //look where moving if there's nothing to aim at if(!shoot){ - if(unit.moving()){ - unit.lookAt(unit.vel().angle()); - } + unit.lookAt(unit.prefRotation()); }else if(unit.hasWeapons()){ //if there is, look at the object unit.lookAt(unit.mounts[0].aimX, unit.mounts[0].aimY); } diff --git a/core/src/mindustry/content/UnitTypes.java b/core/src/mindustry/content/UnitTypes.java index ed1fe92341..c5dcea0d42 100644 --- a/core/src/mindustry/content/UnitTypes.java +++ b/core/src/mindustry/content/UnitTypes.java @@ -21,7 +21,7 @@ public class UnitTypes implements ContentList{ public static @EntityDef({Unitc.class, Mechc.class}) UnitType mace, dagger, crawler, fortress, scepter, reign; //mech + builder + miner - public static @EntityDef({Unitc.class, Mechc.class, Builderc.class, Minerc.class}) UnitType nova, pulsar, quasar; + public static @EntityDef({Unitc.class, Mechc.class, Builderc.class}) UnitType nova, pulsar, quasar; //mech public static @EntityDef({Unitc.class, Mechc.class}) UnitType vela; @@ -33,16 +33,13 @@ public class UnitTypes implements ContentList{ public static @EntityDef({Unitc.class, Legsc.class, Builderc.class}) UnitType spiroct, arkyid, toxopid; //air (no special traits) - public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra; - - //air + mining - public static @EntityDef({Unitc.class, Minerc.class}) UnitType mono; + public static @EntityDef({Unitc.class}) UnitType flare, eclipse, horizon, zenith, antumbra, mono; //air + building + mining - public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType poly; + public static @EntityDef({Unitc.class, Builderc.class}) UnitType poly; //air + building + mining + payload - public static @EntityDef({Unitc.class, Builderc.class, Minerc.class, Payloadc.class}) UnitType mega; + public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class}) UnitType mega; //air + building + payload public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class}) UnitType quad; @@ -51,7 +48,7 @@ public class UnitTypes implements ContentList{ public static @EntityDef({Unitc.class, Builderc.class, Payloadc.class, AmmoDistributec.class}) UnitType oct; //air + building + mining - public static @EntityDef({Unitc.class, Builderc.class, Minerc.class}) UnitType alpha, beta, gamma; + public static @EntityDef({Unitc.class, Builderc.class,}) UnitType alpha, beta, gamma; //water public static @EntityDef({Unitc.class, WaterMovec.class}) UnitType risso, minke, bryde, sei, omura; @@ -1214,7 +1211,7 @@ public class UnitTypes implements ContentList{ reload = 30f; ejectEffect = Fx.none; recoil = 2f; - shootSound = Sounds.pew; + shootSound = Sounds.missile; shots = 1; velocityRnd = 0.5f; inaccuracy = 15f; @@ -1230,6 +1227,7 @@ public class UnitTypes implements ContentList{ smokeEffect = Fx.hitLaser; hitEffect = despawnEffect = Fx.hitLaser; frontColor = Color.white; + hitSound = Sounds.none; healPercent = 5.5f; collidesTeam = true; diff --git a/core/src/mindustry/entities/comp/MinerComp.java b/core/src/mindustry/entities/comp/MinerComp.java index 77a6e0433d..37a0fd2393 100644 --- a/core/src/mindustry/entities/comp/MinerComp.java +++ b/core/src/mindustry/entities/comp/MinerComp.java @@ -16,8 +16,8 @@ import mindustry.world.*; import static mindustry.Vars.*; @Component -abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{ - @Import float x, y, rotation; +abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc{ + @Import float x, y, rotation, hitSize; @Import UnitType type; transient float mineTimer; @@ -28,7 +28,7 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{ } public boolean offloadImmediately(){ - return isPlayer(); + return this.self().isPlayer(); } boolean mining(){ @@ -87,13 +87,17 @@ abstract class MinerComp implements Itemsc, Posc, Teamc, Rotc, Drawc, Unitc{ mineTimer = 0f; } } + + if(!headless){ + loops.play(type.mineSound, this, type.mineSoundVolume); + } } } @Override public void draw(){ if(!mining()) return; - float focusLen = hitSize() / 2f + Mathf.absin(Time.time(), 1.1f, 0.5f); + float focusLen = hitSize / 2f + Mathf.absin(Time.time(), 1.1f, 0.5f); float swingScl = 12f, swingMag = tilesize / 8f; float flashScl = 0.3f; diff --git a/core/src/mindustry/entities/comp/UnitComp.java b/core/src/mindustry/entities/comp/UnitComp.java index 0f3f968d3a..4c199542c3 100644 --- a/core/src/mindustry/entities/comp/UnitComp.java +++ b/core/src/mindustry/entities/comp/UnitComp.java @@ -31,7 +31,7 @@ import mindustry.world.blocks.payloads.*; import static mindustry.Vars.*; @Component(base = true) -abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Commanderc, Displayable, Senseable, Ranged{ +abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, Itemsc, Rotc, Unitc, Weaponsc, Drawc, Boundedc, Syncc, Shieldc, Commanderc, Displayable, Senseable, Ranged, Minerc{ @Import boolean hovering, dead; @Import float x, y, rotation, elevation, maxHealth, drag, armor, hitSize, health, ammo, minFormationSpeed; @@ -88,11 +88,12 @@ abstract class UnitComp implements Healthc, Physicsc, Hitboxc, Statusc, Teamc, I public float prefRotation(){ if(this instanceof Builderc builder && builder.activelyBuilding()){ return angleTo(builder.buildPlan()); - }else if(this instanceof Minerc miner && miner.mineTile() != null){ - return angleTo(miner.mineTile()); - }else{ + }else if(mineTile() != null){ + return angleTo(mineTile()); + }else if(moving()){ return vel().angle(); } + return rotation; } @Override diff --git a/core/src/mindustry/entities/units/AIController.java b/core/src/mindustry/entities/units/AIController.java index a861c81060..d3a7fb9ba2 100644 --- a/core/src/mindustry/entities/units/AIController.java +++ b/core/src/mindustry/entities/units/AIController.java @@ -65,9 +65,7 @@ public class AIController implements UnitController{ if(unit.isFlying()){ unit.wobble(); - if(unit.moving()){ - unit.lookAt(unit.vel.angle()); - } + unit.lookAt(unit.prefRotation()); } } diff --git a/core/src/mindustry/input/DesktopInput.java b/core/src/mindustry/input/DesktopInput.java index 45dbfb6bea..3dd48dad58 100644 --- a/core/src/mindustry/input/DesktopInput.java +++ b/core/src/mindustry/input/DesktopInput.java @@ -482,8 +482,8 @@ public class DesktopInput extends InputHandler{ deleting = true; }else if(selected != null){ //only begin shooting if there's no cursor event - if(!tileTapped(selected.build) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && (player.builder().plans().size == 0 || !player.builder().updateBuilding()) && !droppingItem && - !tryBeginMine(selected) && player.miner().mineTile() == null && !Core.scene.hasKeyboard()){ + if(!tileTapped(selected.build) && !tryTapPlayer(Core.input.mouseWorld().x, Core.input.mouseWorld().y) && !player.builder().activelyBuilding() && !droppingItem && + !tryBeginMine(selected) && player.miner().mineTile() == null && !Core.scene.hasKeyboard()){ player.shooting = shouldShoot; } }else if(!Core.scene.hasKeyboard()){ //if it's out of bounds, shooting is just fine @@ -621,9 +621,7 @@ public class DesktopInput extends InputHandler{ if(aimCursor){ unit.lookAt(mouseAngle); }else{ - if(!movement.isZero()){ - unit.lookAt(unit.vel.isZero() ? movement.angle() : unit.vel.angle()); - } + unit.lookAt(unit.prefRotation()); } if(omni){ diff --git a/core/src/mindustry/input/InputHandler.java b/core/src/mindustry/input/InputHandler.java index f52f6bed59..47d0723c25 100644 --- a/core/src/mindustry/input/InputHandler.java +++ b/core/src/mindustry/input/InputHandler.java @@ -931,11 +931,11 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ boolean canMine(Tile tile){ return !Core.scene.hasMouse() - && tile.drop() != null - && player.miner().validMine(tile) - && !(tile.floor().playerUnmineable && tile.overlay().itemDrop == null) - && player.unit().acceptsItem(tile.drop()) - && tile.block() == Blocks.air; + && tile.drop() != null + && player.miner().validMine(tile) + && !(tile.floor().playerUnmineable && tile.overlay().itemDrop == null) + && player.unit().acceptsItem(tile.drop()) + && tile.block() == Blocks.air; } /** Returns the tile at the specified MOUSE coordinates. */ @@ -1042,7 +1042,7 @@ public abstract class InputHandler implements InputProcessor, GestureListener{ } public boolean canShoot(){ - return block == null && !onConfigurable() && !isDroppingItem() && !(player.builder().updateBuilding() && player.builder().isBuilding()) && + return block == null && !onConfigurable() && !isDroppingItem() && !player.builder().activelyBuilding() && !(player.unit() instanceof Mechc && player.unit().isFlying()); } diff --git a/core/src/mindustry/input/MobileInput.java b/core/src/mindustry/input/MobileInput.java index 3e1aadd2f7..92c069b597 100644 --- a/core/src/mindustry/input/MobileInput.java +++ b/core/src/mindustry/input/MobileInput.java @@ -866,9 +866,7 @@ public class MobileInput extends InputHandler implements GestureListener{ if(aimCursor){ unit.lookAt(mouseAngle); }else{ - if(unit.moving()){ - unit.lookAt(unit.vel.angle()); - } + unit.lookAt(unit.prefRotation()); } if(payloadTarget != null && unit instanceof Payloadc pay){ diff --git a/core/src/mindustry/type/UnitType.java b/core/src/mindustry/type/UnitType.java index 3c2cc4a1be..97902e48b2 100644 --- a/core/src/mindustry/type/UnitType.java +++ b/core/src/mindustry/type/UnitType.java @@ -81,6 +81,8 @@ public class UnitType extends UnlockableContent{ public AmmoType ammoType = AmmoTypes.copper; public int mineTier = -1; public float buildSpeed = 1f, mineSpeed = 1f; + public Sound mineSound = Sounds.minebeam; + public float mineSoundVolume = 0.6f; /** This is a VERY ROUGH estimate of unit DPS. */ public float dpsEstimate = -1;