From 067996f80fec387486e9485289ff0b8570e62e04 Mon Sep 17 00:00:00 2001 From: "Nick J. Connors" Date: Fri, 7 Jan 2022 18:52:21 -0500 Subject: [PATCH] Made rings support full texture --- NewHorizons/AssetBundle/shader | Bin 28653 -> 30612 bytes NewHorizons/AssetBundle/shader.manifest | 6 +- NewHorizons/Builder/Body/RingBuilder.cs | 121 +++++++++++++++++- .../Components/ShipLogStarChartMode.cs | 2 +- NewHorizons/Components/ShipWarpController.cs | 36 ++++++ NewHorizons/External/RingModule.cs | 3 +- NewHorizons/Main.cs | 26 ++-- NewHorizons/Utility/Patches.cs | 3 + 8 files changed, 168 insertions(+), 29 deletions(-) create mode 100644 NewHorizons/Components/ShipWarpController.cs diff --git a/NewHorizons/AssetBundle/shader b/NewHorizons/AssetBundle/shader index 148eca35bfb86bb521405608730df269f2ee95fc..7f913501a98c7b565e6732e306a78a0340051b9c 100644 GIT binary patch literal 30612 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 literal 28653 zcmV(yKz>% zTL1t6LmmJD0I>l80pPR%0B?E#K@I>38~^|s0Pq+91VceWEoC)kV>e+kHDx(rIW%E6 zF*0OjIXPxEVm4x8VmLBkHUM1!00;m80AeHmY2e_rzd|UJ(2F?(2^))S$uh{cCR~v@ z(_zfBIpt-I=O>)ccI-nQX+(=jMflCdc@rrBVPSwMS5P1)yZfVJ0=OnFlsi+yKSBU> zF7?i?t5E2w-TV_#lXU$4X=}6POkeMVb8=hHY=9G99E;x1?Qt=2kyx|81}>@5nAbMk z=_4NFvoJ*Y;%2T+W!(bCX*MbW5Fbweqk(fZwCm5s;vZaHMj#S4c&KydWXt%k>Md#+ zy;uw~zcx@YI_H?}HMP2zvfspcDXI0k}j$`Oa;ch zcWi+-G`{ZiWo`sEm%TRv-D z@{IZ}8%lSZ2R$mZU`X<)x@#T%{aM`*>8wcqdVRJTSmw{x$f|F3B^pk374S|zlx;=j z!t^3h?On(L&d_ocB&7jVv}M0Z zD)w;BOlXLA_Z;$w>pOOVxU5IIw(&3lq>e z8aY=0q5U&6-P|Yn0hz|aVVDyonrm&AJMI5pAxJe4JoI*|5-s}bQe>D9Us_{c z6}JH-=9c$K*MmUBn*|=_0L3f*V8}iA5xzc%AGg59mUI@nCd`jW_hn@Mr>~@GYmKuT z=U5t`hCsdxvAu2Z?>PA8U7`~|_YMZpy%V3A@3>Z`36OCftB6s}A z^ML6&#pp5>_MbNF2^xifkvT|de%69W8BS~{*;!19$A}4g7FNq&0oW}VV7%rVxfqZ0 zqJg)>S1a6vy=0bhioV&jM&UIx3*nKcKF)ou_5}r`wA(Ved_UOMM@V>8z(y2E!e!rx z&Q~!_3D0$rl%1OT;ue9f@MBN=S$N#)U;v;{S!=iE?j^H}}V#`kaNU@VPg@@bS1 zISWMO0{wIu1(8YRo%M$gZ+NehAxX3J`zW(uoTyw(9M95)qk{v&(LAxQQaca2O20h* z$n(uGsIeEHW-4q|9-0edXKqn(B%+rWY_#09AYsl2+HZn zt5X;Z715cUW+-Wf=M6kK!vp{cg z$-<%kAE0@>pd2x;Qk4qqQ_o`UjbWy`haLOA&f;brvf}!;6-T=izs)!$v_84Rks#!# zPEaH9X!=dIEreaqU3PbYnCs}(keLMQQsIf>yTmbezBqWD|3hhmwu zw8?0hQBp@`Q+hQDs!sm&zEjVE@uGkq zf{}k(yZd?jV9PZQtM6><>zH^;`1>iVbr*jQq4@?pF8#`3^6fyvIk-Ya3rI=a5KCz0 zh-PnhBc#zCTi4Gera{gwv{>?D8W3-pR#M@hegwS_)sB6Em` z<-ViGNLhRz)xhU6#Ky}70MsHXzc-FH5e4xiP&RdrB<2?C(T-BXBz}>b`Av}SER-#E z@^yb$`t9*%pB?8Ce5LGK>_KkgezR&|&-1m5Kn)_}to87hp}U?*b?E!sJ6^WZQ8dsi z2)6j!kj({Myv{#cB@$9B%>v#(7gTyFj(1BRR)*?2iLp<9k&{&Uvv|2l{D_#Val2)( z-~3OoqylW~Vo|%|t`=>DYCI&nG_*4Hm7#e!Y{ScW`Mp}mzddgB1VC`LHF~OHx8f)S zrGCkXyBgf6jeq9-Hhxwouc(#!k0@e-_}lfosjS8`87Y2+FQXCAAO${{V7t*`u~7K8 zLG05`B`!QC6r{t7o2Q^!WhP5#Vz`baEmD-lO^o>Wfzq_^?iybnTsL@^tG{v)z2Z3O2uJ%SWe%+=aZ-j$F zACQsr0zAkAkq5|sO16n$yWa^9b5P&c-Sp043{RB?X!>pg^W*2_pW@3-JZl6R$6Iab z0ghqp4>^yg7=`81w|7Dq4Z*$C%#0PKb@2|%W#*LBq-uUDRj zgPIL8Cg#5AK#cRfS2F!VAencQhI`k>*U0Vio?D`IJ}PMKe*^9Pl(S?G3b;T2rs)xu zyXB1hs1i(5MNb+95e;wmP_j%V!K^Rmkj&dFG+Qjj0SE%lcluPlI~C| zb^s+cs3$H@rU+}n%)SH`s;8)~7{Ai`gqvs_T(SZzIP4>j-G!=!V=%HJ6d*@h^6gJ} zHtW*Q)Q&gx44Lsv8bwTTN%8rK*>miWYgiRFZo=YL6rWE2y~8ilxO<>cBA)B)19C2j z^iIwAGcG1FxTCaae}q}WJ~$+R(JzC@R;*)biiz$6f`DrrHEHs-C#I7kI>=uZf}RQ+ zZ>QV=1^o5be($CkMsOdM`T%MV6L*Z9_$r3T7&gS7ciD+Diva<{J9OsRGSE2qDv6wF z-sDd9PXySis~0T;#sxZn3Rp{dOSWErm|K&8ey8);AEWfT)(6P;Vl2oskm6SDsv>PY z>tr%_MnDi#@K{h2K`?X*4_ z+gKeZwS14}IVTThgo>lW=tvy&51Tkw?=mynxApP)f$>CK1JJJwTL~1F4v9~P6 zMoz54SA*2gGy`347$da#(EpNc(UX(bV*;0X%N=)@>O>AQrI>S{BLef7FrS) zji41i0z~L3Kkp9^`VTpQ!0k3q?mzRxr7HfU84}FNq{bOgi$_=ew!bxUfA2r(kd#;S zHbZh6$We#a^I1$O&pq>v!^U9rOXD8#2l0HfX4laQ2s>+oU-k=tkUPC36d1-lR%g%h->tZb8z#?4}I$qFhL zSGI+Wbdj zWQAkZ*vWi?_?~8C<5%~6m1Lg{cxR-YAi-ned55dp0ke4pC2@}y0R>Z10t1ake2uz7 z^{WNWD0|a8`g8zJTa{~7;u9KufywT$!w}Sg;_?FCEy_!u*scVGgW)00lw7oo6AU4e zc;y`@qiM{ckWAty*>@Y!HZbwT?brhrMVw5~jwz}On#wFf_8k~hVu+ktJitDacDoRA zX*SPLmUw^mh9z%B`Gs36OW<49a!>W>W@zu&Eqv;u8<(?X$hl<+WM)h_WXMZmm<@pk zy5OZ!omPVYoiZJOTx{s1jDzOzXiGarF8!PYl3v%A5`Fh zjai?Q(Uc7)z87sg0;-lUwSggxhdE8Tgt%-XGXvevQ{)3LQOu23;uWEzYw=w_l#3Ec zV5r9+ApICg1O1`=%b>>+R$=30Dxvqg;D{>fqN`cm$OC)lz}p?3J(w?j<>NMG7RaLT zuVL_$=>c`N^0WD&(N^$F#0hJTm(=Z{iR~?KC>xfxx1{rX2 zK1}0S)rb&L0(+>yy7J)ts_KqD@xk~z?jv#re3hBvMfg<^2kgAT>9TC!x1I&G&C0)_ z0r4xCiv*7Pj=!|?W35eU;PaD&$lI~R2BMU+$!i|bjSzQ+6YiPRKEMS5R#dTYG+tEi z@!W2_y6x9D?aT;|vm%;>K_-!2_tJbx^-fV5jwqGDX7Mieq~@4|fK?Rg(J8KNg*B7b z1a+ouxK#>TxjrH$z@$zZ;_Dacp;ezXpGKk8x1zcC6U1at@yvyYSXkoCU<8r5W8kC% z>ar*t1gnASYMgES{d`)>Bxfyp6Kk%~+p2SbDYU{B5dfbxPAn z$VLQdR#Y0y%JQwCykE3*md>iB{ZvpN0n|-4cMlF^KvvLNix~{8=RFF@aXmS{VX^6& zM>(w|h5nB_Onkv$>PuF?(ePsk24&g7%{G9VR89|V$~&t3n*CNi5E?umO^xkI%i2al zc}gtiX5T_(Q}MaFvcQ@jBvfyC=2AJ|(gH>O$+pv7RrcXHMspI|u#<~(9yAoS)3f#T zZH@H{CgTeypE1%tRlU*71^((II%##4i%UviBqGmQP{xAoXnvYa@+v|t;@#I9AKZ=t z`O14{J5Zi0y3A>ls~9HPdvU|c)&@QJs3H7)JVk9%w)GM|IIEZ)GxW0^KZbw*vIC(6 z5-GgVnP{{;s&dHi7%I3tlX?Ewz^o56Ad5u^xR=lSIg2uRM*5BceR(%sLR654_$2$2IgD;sxp|Z| zkI}eoc4P>RX(fV}F|WXnv8S7?X-}C_blDud(26CcoH@#(_q?=&j-bgl5n`x43mj%F z3tAOt^l(D${g%u1ik3Ae(LVn0G@^y`)eWHC;=o<&RV@uK(!YvMY7rH9hvsw(c0$LN zAv8;5Su~lb8X+2^7A2R)uxIR@vvkkJGX6v?nfMh@p@p)n7-=pdO<6Zg6a;pu-s7_K z&89YZ!6WN}SKR%q1WkVp`s+uremkR&q0r z=Vc>`8}lkM$)7Z?4H`gIR5?VjnXgL7Ak!Dwm1%C;oH*RlWdN%-1hMQY5XIJz)abuz z$+(%=2biYqQsapwjnpM|K*8!;%Zb20o-&D7chI6>As!>g{k&hc5}x||6PDEpH`-iz z(!iW|Um^H8siOr7e|Fgk&LG|}tAx{BjqN745Kfeuv(hbRhl8X^IYshZ+E4*SH*Bwu zU*W7pB5|ER+^O?tGT?@cnRQMVOqjm8hF=|$OiTpd!>03>x{eXCg{=JCT4@ax-r%uJ zZC_PmVt9qbJ^o1^llgv(98AwJb>7**+LUrA@+mS)!uuZaD#bIotbSi*l|Y57+VyqG zhn^`YkhG4Fy-!1%!d3uA*kEq<*5aQR=S_PdWfn>WKeRL!w@?JjKx$TWXaOyo8i(3*9kZzRXy3tsR{)~KWQFt1R#xvn zg*4mqb0Hl7&ti2$(ez9xaHNgT9*m*QdYD5EsqeRpyVzH4QSYd!hHmS%Myf3S-Y8!2 z(VlGq$T0y+WVv4?tUFM$7g_dECS_vhyAV`hp0$XG0;t`WFZ>Wh)-qC$5uj@t1@;N4 zz>{6&-G`DG_-WA9i^t9kp4CzdhA0Gr*tDTm5I=Yb2@5URi5 zuDy)}sJ97@6}=CjG2xasa$0XNb~Mi~f?k86kPE_~{Ko~TH~sU>O(xCNBug;dwqfSZ z#%e;NHiwX5-T2Z_IZl+lFoB0G@?>d4u>x!T(hkQ_^UGl_Q*K<{xwyK#X7?#7g%@^M z_m#;&$3Xtl?AI7`E0Tzs6dC5vj>h{=4%_$Ab3J5cS$ij%CJ*@8aN+0|u|wSsmJTjc0O`NBes9DU3a?B#;{qWp->?b?fQ zwD62#3vYQJYT(l@sor}$lG(d7y?wQ>><+Ro3OtoVWQjAlLdR_;L3wd?t}-Y$ghto7 zKpi*lsX)A_VO79dFk>+5gx^%_74Rx9R<3kEU=Vx(-4Rg#h|OJSBc@;zkO+LhXGHmZK z=MiB@yci@Or##2u3Hhwk>}5`~PsokjOZxCI(q*gJY`w$SvhHOJ-XoXP>6XAf!C<(6 z*pm^DAa0RWNwvR_MQ@0}u1KXlibLpyq7K~bX*mg5m-IeanXPoCfn%zxQU72Q|XdsPP zpS0H^=6pSP|Mu&uFohZ4+Fa}aJMLVl88Gn{F^z^Y$7jpqvfdC^4A_i#dMf{kBNi(O zV|U*bO-kR^dZoYJkvOp@*B6D^)}bwAUA^`{N=9!BvvTG{w-l;CFOP?!$+xRvJA01dBknIgx(TbfCe0e-2qszBqJ3<>$w> zI|<8oK!d1&Wc#a#t`yn5H^+d&dtbP1M8U;o<;A!9#l?SX0dB?f zX!>h0_#SspLbGZ{f>LooBu0HV$IK9-?pLdCHk>TP{mV^#kq`e4jrjET`u4KM+tM$Y z%PM!4lk?0Ynj8+W?}d(i^=!!_kQoczBtc1j`O-|w&O}-uWS%rfMfD|2jTbcQpcR!I z{9GV$NX3P#VM2^0=-rfoPydRpOPFxHm8*z%)C?l;R2&~ceJ0^ z%m{jO;(FY;cTb^3O=X|-1V$og!2}jgqN%^Z3q<2UiQ`|4Xjn+lt2TbFU|o-E3sqE) zqcB!~mCnuP9*nRr=_j&$Z3Eatd5TF65irOB9UO{&U@p3+A6a;7Q1uak{dEet%b8c9 zcV-V(58|_pANCI2`4RI^SspG;)oCOds2?w|dsUNP3CAj}9RFip@bsEu?VP<;>>Pan z_s4D*j8LxceER6kV=MJliVbmJ%Vuq{Q8Pao?)g*~Ddz5H8p=()mRE2R8yDy4Q|T+$ zQ9rAfz73O?uO-rnC3DYjaZ^N>q!t(@gR$7is=JLm_75TXp) zeh4rjdX^}6c=U7d!!Gu-M)L1iTmm%raR;7;dKFcJ8M9X{j8kr=_a1q`yPH&3a@CQH zI;=+Ksvr`pj71&!+psqK$Bi|6^rM$_xRnarI~;shvaK26)q zrTNt5tJagirJG4bZN<%K5_0-j$t^CkkM~lz&e6xQ$THQE%3;^CePSZ!gx4+Y%Hu-q zeM_kmQ6rAV<&wm9t7){9{g3=vfcnV|e8b7RNa3T!{fYwA1YORLX2)$g8B=Bpt6^7vy4ivHRk+Qo;;>R^}q;T&NqfrxF&c z#{J-eRz4kc(wdRfspJsaOq5I^70O}Mw9#fu z!3BiwJU423GZZD9-`syfI@!g6GnGDZ*K2==yOeG&r%z3+&o6`J^Gy56B9^!8LkQ{l zoiA^i3@viv`TBIin1*vC7z=5~Z?(x;EwJ%d#@IaC^cW=yL4-43d+O{BpC|_uusx__ zn#f2Jk-tJkktWW0kBq3pL5l-SdPf^nLf1uev`O7xY zwGDtd1g0FG(9A6l@N*V@_n7LL-&_HfOXmdz1Qo{=o_8@;dR+l9ZuV3w9m(3v5Ya)< zkn=V=IJn42dq7Xww}pb2>zHxa_OM4ou~Tg*(F&fxvimb8gBdNDa9S#bQRK})F{t}H zcILr2@9=oQiOEnDo4)T`b=Qm}QEJWlXt>Dk3>kwFS&D-KjZE5bB7KN_UDt6BmWRIff`DOlv-Ij2y7Q1_ zw9AabVHnL^G13h$q(-=8s661uoI#~u3$@4v+*J<`3cUFWryI0TViY&<(vg%?6c^G= zxLj;2Ql<0A?|&3a%R-Nn0xg(eAXyTfBk{MShHp{#aY(|m6)&V43!nY?XBNiu_?xbm z&3&8g=K&ZuE0$-K-e0T}Tp+k)QM*757E2)XZu);|{ehnC@$|8Pp54RnjNGke2oE!bD@BGB^I0-K+uT$_VsKCYOx>(`Ri}m&n-xNBu4z&z1~v3D zju##24kBSX}xo81Vr^`vv;52lsI3f{F(3Ie_9Bnw$0@G?5H zOgy4L0pBakdK3|8>}2v<>(yc=*1l?cq8RxyKwH69K4kaS(Z#QS?N38e#lRJhXzsJq zJc0xQ5`w@pTedDsd;05rAjlxD%SIf&6D}wg*@ZD>eW_5)^4R)9X!Yf{n9~;Lv1f~; z@U?D@vdbVO?WApWMJX?uu6@c&Tngn9;%tjd^dQaG)Z5jN0@-OVRFlzSMjQsn=;IeJ zy(p0o|4Nyd)W|-Qzfu#^Xb!IpAWyrf{6NfBiQ+i8r;RFM3TfVx7=tllmxlx3^#d&0 z?76$Yio?lx`WPBM;OKFVmCNbXW0wweK<2-c-CkD`ZU1< z^kzKJdtJgf7E^#q3U)o^LZF`phtRd<@l(q+m9!$Oe)YA4w(D}Vq&?zMBBI6oLTf*? zVU>oQ9h|FqH=%Er8Nshib%FvcGRs<8V#A2A2@XPU8`p`8wOA9R2)6NBvYO6~Yfxv{m%jHAPd8VJq9}dbM%Ox}2d1)3*SxBWxX<54Y&cmcKCw3xWbY zIM!ITq@BqX$Xjpy(h#5g#4rpD{`abJmlLpy5UBU zz?~EeB}BdNMr)!)dxyyFCY;RQ|0hpIBF4o~GZ`q`pmd3fZ-$q0{l1Xm%fohGKV?QS zAFP1|!-2Z3$iI~!>le3|EIJ_Kkdcw;wl&hur5Z-vpAldioi)JlK8!U`w6b7c{1%?o z7GvG_$&c`lRX@nyWgAXlR5o>_mFA zMWY6J*l7U%45%!Vl7Luf9eBJvRvD+LaOu>*QocI>NiTo%n^6JxgJFFFWC0X{S16Gy zPU#pmz&ITyR?aoP^4>PmK3)_SW?x(NJLy-?Vn-I8-Ilp04jqb7T45u1t?1(m7lLCk zi_{pnzBa|zPy2yiWng%mR{c`(Q{r(gX02Je2$OwsQd=VS4`gr)I0Wx)wd;C&0wmv8Ce}re-V~oCm3C7Yd#n3iKD=8jdNS*vwaTx^}tEFugJ!qyhcAXk*x3JwZF2}J0&?- z&&SO>`l61*)cB;9i5sDQ4y?T-z$^nqY5CpPK#}&4+c!Kumvzul243b-q$tZ%FD_V@dG#iYO>dPD37D)EP z9x7W3feV>KwvFx^h~wMiXwA0v%#RU5F`3lm9ALwc6C?}o^tPcS1G{!s=*57QREBXQ#kHz|-`@y}PZhbKQn4%Wzwp{^{C|NO6_-J47?(eb{HE-R_ zCBZK36u`x-yE!%sG{EM8zjq zzLe>iod%_3)TuK`*T)2I4YutMH+|P{9s{mKPV(C8Ps^*8TL_h>IVr65O)gsPTXWnl z`JWi@xeq>KC4BWHSG_Xw0vwsE2B;#o){R*$xJJn<7~@#jde;LbaK(y{N(Z2U+a1Yb zd|6bR3h_Ak%L1Q))^UovB`vmJ&3Q{P2otU2G}t3JvH%tFZX(aWZvRCiNX8PEpY}a`TBmOJ;+K&!6j(Ek~PJEMp9jr9E%Rd9BaDwIV8{2BVlE zQrLyFjG$iFzr@d7vE(3u#T9-^lahgszca2+ITHgwN{@v7)xFQ$C#-DN$%NtrjV6{c zWkyi@C|g6oMGv-~AVeMI>dauaLAK?18Yrr>IzOqXDpY{CcXjMhQ*WRS?rk1}@&WCd z=nwJ?cBhYfod*;Wn`=mF!T-_7{;5Y7dm8E~t$N;Lm{dKOVx;kkA@{RoaZzOmz6rG> zdbQl+&3DTs(wAU`#?bl!H81F=9K3#-&4xNmS2^pmP~@ zsoWMhRS~Y`bE>TQ5`2#+Q?wE@Z~3+LO z6(kX~-x!*3Gcv9A$Saj`)nwor7GY>Y>u&$ar2%CnmJeHDA>FBj{H2?%(G)T9I6PL# zX|*gLI2thz=dy(d+`c9osl5=Nb(qtRKOyOasjoPMQ!#|gUElyjfc=b7)Z3)m|F_t% znKje6Do5aOX%1$E*ga0d`!7IOU=cD3C#05;ex&E}0UNHn z<152XnexmRWDw6vY0?LT&eOgf6meN-E~;yXL_^o*vwIrZqr65hi(Nz zaQKqxG&F)P^e{8%Gox9FZOxua?YAd|_uQrr)gV$BPDmwJ$SFU(FIO~#`sf)nIX+15 z$p72Ca*psJ9nT9cXbPuu02B0VjAjGhr=5x-rK)!T(y!Hp@L6;hS58+v7oOn($E@NA zsq&3$1l=b)eogl?IqrYEjqh_3-u}+(TNc8Cnrcwug5MsHqT^Q-OsI2$W#F>duw$Da zz0RS$OvCB5`E<2O!@xB@l$=H{$fl#)9-SDkzf%rp5PAE5La6%nt2Qx06kv5%ix#D0 zG6)$<=RW&jzL~ro0uI<@3#&p_?+F7~7124c%K;mWAHmcHD~8S@Z@9vy-X|Pqpn13f z%XwhDXWrVuDQx@J-F_V=IK4N}j#5Lu((Mtf8})KDhmLJ7x`lHewc8YS4YV@GcOLlL zIlu8Rl;8}G&p%Jps2kuRhx$FzF|X>qPU*4kOsH#2NkK~ObTjQF0%kIWkbu3LT!fy| zD(W}csOy@bvKD}|9bB>}`8rGNc}Pjk`AB|oZt@Wfvt12K$|p5B&6A$tG8lJ`@1mPxyBrl~&v@Jmz%EKLj> gU{ZvKQt3&n9kO*&J1!nFhZ-L`HkoyrG z>3uRHs}mC6wpm;mB+1IY24}2aL08La`XblVLeLx+k&NM*D-wAD?M*C)Oi z>*{fyQf{nKhX%%PoGY8>Q98&A6HUXVZR?Qa|X=e>@zenp|N z6NMw3w-mn_1ok;d8c3@HObnUiG*7)O+-nL~ET`_i`f0dDk_R3vA!vVAA1WBl7d|oE z$OadtwGCMxQ)>B)+q`EnO~Yph9%RJ^cRafPA{z*GItL)F=-hl)1Z|*cYdMKWK4xgy znJgvI5_TQ*0#t}%w~$CxxSrS=?Rgp^p4~-QVa5W~7ih$PL%puT0(@k82z;J`Q0kX~uX++=5>P7NwENu?r2SbolU~|&ED~4V8XDjY)hZ7j^{@B09zE*-Vy@@vi?nv=Fch>twrE+3Z zsO!TIJhS~DoEw!w870y$()S2y<65$G=fW zx{o+LETYnT#XAMn=hP{&vJ%Adqya?T&3*g~;i-?g%DJOOWqIfR?#5mlG&)5X0gvXG zL+2K~GVdhC)C;FaRqqx4m_e@OvmI;WK;R@gJP2vU##YS8Z~!|8W8Ba-C2q-;Dr-!9 z!~y|%2!wbiGJEB!59n{$wmPA)=Lsc1B-B~s6Mo;opt$j4N(F31!%xcYk^3#4 z%Jrs3uh?|9eQucAuX|`cN^f!=Z4^5oo@1~^fsa0bX0nt~dm3FuR(w9hMpuhoT$iKn zT=KuCSr;;P$3ez~l8FL0e@{2*1x$#L-uzpUn5VVXlTfD(P`0ohY+zlUiBrXen+MT! zFK}kH_-hD%L1YBzDVBRSSoYTv&np%WTKimE-RMBmY;Y^;F_(9almMg&iG5+J(S$kY zz#2i|pPWoI2L^{~MKGsup5;AEXq4Rm%Py=#wl8&-N~aoee-ZXel7OfEy}UB{C+I;& zERQ&QKsp&TUT$7FoUG6~N%{Lh_VEm*O9$Zy{LS7iaR#MR8Ow=IrBsL9i} zjaYTe3#Lu*r?yi4e^29ZpDp#jK{2ae{^lAg8%10q-Lnk9&iF^TkA@ddcc(P&g{8I^ z=>Cy}>PMo1E>}-k#_ zdSk*u{IT8g5meA07iB>d2aGg0w#+MJ!-d{|2f!(}gtoW5fxSv|Cc7MQZ8o>@fVi;Z z58fk`hA#wOj7y`c0bJ_?wXK0RC>@%4Vy$4^X=Qp_OUV}P3CRq=HrJcds5tY#4M}E} z^9VS*Ron9v4PHJOy8vXd!P)V(CqyaJcHhCx5rGnHj!GH{kM{GOTElK>9Au}0v(2lC z3p^sk2-T2unA^@GsTfG08wd9--CsKW6N55Kox9_2f;3T-$}7cL(#iJera-?%ETrcC z>J-C<;K!cPzH!pLm$W#Hc}cAv7l4c;$GGntb~y5BA}TBc zd?wY5_Y$@Bjo~4!!g=>?(x@P5KDspT2sml~1)d(8x3U{-9QY z64ngPi1f?#)Xn^(ZG%Na`?ni+;R-A%B!sOvWmpF%FQbbo&1~%$hLc~h!~_lf8tS8* z+kqlp;S9%u|7(@&py{Gl^25O`ffV~%g|_>9D3OYt3s#A}s>zaF=ETfSR#6AvU#1vP z^sU(PNZmd^z4r!Ew~Xmijl1vR=Rpi6l@+X>bY@eSd#S|y zAT;uoHHk=~}dQylUSz{JBlTCo_wJ3~m{S!q3+x^sFB{p{x& z`2(B#@g^!jHDe?dMN!TVp3~UYS$lv9Go8GboB*=rmWfs-haSf@(08pqB_jiKv<4 zt0R%uyI9VU?IILU_iJjyIT1My0dKvhvCh+r$ul9on@rvN8%nhPz$Ze6@s&&m?-G^h zESiz=Zen=^qx9t`DBk)c#Wyr#35VY1TOoK?`*{QChpqTIp%7L}9?Z$41~t{~n#LVw zX8e)iT||hIX<^eVd4|cmxRq-vgKdruXr_bPMCTQzc%!mv$M@v?P`9v4F-iS+!WU19 zSFglDf0gfnoZy7r{|1FS=;}uA#KjHYe5nF75qT!^t`6VNw_3mAhkw3_-Ql<$tGdBQ z*O5ALvI{u8+GfYEOfV?>9|mAb!ioteo8U4Y^TsA<3`8HO#}sX30lO;P_H3}|Wd!%g z==l5C#)yD@M<|kC@bgKmGNI;u`&xEx7Pl@uwMt#Nd77Frb9w`^G;qRx#_yHLNylPF z74I&t7jA0h$sK?yq~9)CO5(^clVnO$>{mv>&(!M-A zj6kh30&*skxvH^2M1#QX)0z@Lw)1O)r5uv8nq`u_k!^qF60D1XMC=M$!JkqYK|}P4 z8f)}vj`%lKHZ1>L+OBmWol`a}i-Dc;IPl|F^ z+=c@n2;s!I=|JDJI^oi#o=%}y!;MtMxvPh873RA>kB3_ma zi75dz5l9h`Y$El0?RstRtSD!9flJ54@iG92^F+taqOA9{3)C6%7sO{LXG5{ zqsu3IhU%Y_%Vj8cFCoTTCg2G@Tx2jZBP&P=hoD)xu7(~W3sv=cPLNE3+Vzz#>^>dE ze+kv#BKbYUu*seg+=uspK-m}y2-TUeCq4TO-s2ITHekaa`HpV~?P#}=_Q zn}9^-G%}qC{*O)liarq2I>0ctgc66!lVg-Z5}e2%VWo$lk%)-H$?P{g4WTR}Z(t9+ zeq^E<>;#4u*K&VcycQr@DxUO@|HIu39@q-e{PAGwNefiy+)*E;+u}@Bg()B z@VNni#?HOHV{(?{ToY6^DOB{=E+cVomYDzZP%ufiHNsIgU;1zL46NcnG}%c<`C7g( z2NiCK=R|Pb=%uxs#F)(-;l(@^9|j~pToK^JU}Yu((Yl5e?^+sNKj5`zJ;g{&HYK08 zWcf_9KT%Vcp}#i|26N|L)T?Q)FCNY4MH#N}2Q5>rdb$1jvS#y|KJU^HBxS0vmVBVb z%qs!G=Y>qdaBgPBQg~iqE^BjoTg12_Cfo~H1x|H_p-LFaB~YE>RIMQk$zC^0mF4(e z<%a#xZK`+sVf<2&{kxW4xO0R_vhOI&JUwoN4O91{e!Vo0_3)g+ecc}kybs1r6J zZSL8nH4Ycy?LwL&&!U8iUEFx)(@$d^wGrY^$@hn@Wl2mW{Fbz-i0`IATKi$f=ICqr zL{qcyeaIr-S38eP8q?M=!+JJ^XB#1(e^q)SLQ7-P*cllTWWCPNkR`ss$zw)$O4-}`^IH8$qW`-%#AB6FKd=5!r!f1xM zNrZ_PNFO=5iE9B}E@lWxHsiLXbU0J5r0FElA*X+8%lZ54x_?@BG$>UlYjAv`E{ev6 zOg#Jfw=9UUJ%^C(Z-=5(VMbf8eG8!u{(){^d$?r}hr3AD=!I(zd9|Wb_-Wy``o4)r zl+tj=vcb~f7rcf`yvCCiL@}!%)Dwi?$R8>3EUEgCoLT1TV;X7#{zP(t0(d>S#^Csp z)`svxhGO2}>+%q&@NlIm0bq(#W-ii%KFbl8a)52Tg;A3sJuP)DRw|j&{7*1V7S82J zN_YK~IrNcqVk~{sDi#}fL6hQ>T7F&E2yM7F-<1#U@E8Wc24!}bt?E^M3|)~N42Cv7pb?(A9HHzSHn@Uv+0h-4;@t_ef4-=x%N^ytXiWnxp3QACVIyAI-f^9h zJLQ17UJU?m%EywGD{Qt%YhIRKaqjTpnFWN0OEQrx4itQr*R36O$ zu1T}J25iBOPH!ynkbzM^jloF}krrLo-d~t75rjzN#TK(8Kr|QRWUj3*szgf`sBH9_ z%=XB}#Z9k*>oYLsHCteF|D^D9S$@WQ<6Z?ZOP4VT$%p{&ei)%Fx1(z}qrnZEP%JVO zBRI03cQY&gS$Gp$K7sdz_P{M784}!L>#ag^kOcGakNS$Do_9lrwz(u5Or^vMP3p?T zi|U{u{NTg66!q*#y_g~Xlr_Z+@Xcho>lYT}9q_5D+V=2*z`|OKsTZT#JWcJ7QOs6l zf#*IjOM3SysTpG%0>f%)BElqOwoo831`s;p$z}@AA{omSaa{nBSd>vD3}8ha5UHYE z9GW;jLcA|fsykAU-A#O7CQ@wO!u)Elho8o=ttK2q!_qRm*wG^o@Bp+vxYg0VV@!Rz-p#dd&cIWS)HrQ&7Qcu4dAa2Y=fhb+-!BK7%4g5anO4 z1tYSJ4s}@z*=leICcOSRN>Y=wXE(WqRAHp5=is~$nW7f~)h{a0S%b%ri{rK3lqLrz zl9(QzcR(S1+zgad9XX0jAlQDJ0uz0CE#5ImYqN5k723+#Zk7iACOQ&{ge6t+g<}t* z+?5jp^s>NU0YUH>Q5vDL*#$E*Pumy*zW1ui=#TBlGtzFQaGPYHj-WGar#fVE=?@J zHAN0O;d{6v$eyI~?Q*pEF%Azs8&Y+4J}^{z3#mb!#h%nt3Tqku$ix3URq&-2swGB0zD zu$#9!lVMq^9t%LXP}0q;P1+>^qQ5~HcnP>tgRTG%-iV+OC*rJO;Zw;n=$4UJp-YVE zcLc(slci^%3o5<9JPRl>sQjwzb_>+PuGdR5Y#Oi>;0VBFbEzs{ibl;&+K_^(wjgYm zL*SCu7X8rD&`ny{pMj0wc!?G$M~=-8KS5|qr59e}s`sV}U_Ts4D=mtd1Nz8-+IpnS zPy@{ic!!P}@N1%~716+VZQczy6F#7V>}m{5$q5uIlmw&5W9>ZBu+TQ!t~y-r%L<{( zLzbcqodXB%Y!6v!vKu+ zkk9Xhg01WBF9>K=#l7!yHKXLbhlc5)MX+V>=!*Vav8fCOLtcJNjTmkLddrSNNiTMdJ`$tS-IPSX?zJW#qvQiJmj?R~<#j+-lC)dD z$TPMz*WVwF&Hz0$MYf0njVdoGTvyQ8#iSfFszoHV(LJ{&T<$I+`a=5Uk@8LF&dnF{ z(@AsC4XC0?K(?te@OD9Z_uZbe>a}ZJkIVD_M3(7IFbbj_8z+};3txt*t)W|Z8tSKS&W9A4`CqfD5o?-E&RFGbc3ZPuKw}<7nA}X@`?#bJg zT(%0)DtUS^ZMU{D`X)Xtg0s{d);W5?s)M2S&;@Jq$1WT5TJSc-7ooVOY8cRSGl8*}O{MkQ z3hex*B{sKC5u6aE5sT{yQkq=x5~bQKM=9_cpr7$GNlcC=oXP~l5WQiHSCCaET5b)U zzl5kR@N?<{OxR~OFqh!3A~0GECc~=Q(N%zMC|`96&|KSA01s?X-B?~Z8<--v_^_u! z@PL&34NTSKE7m>~2+!zmBY?DFwu$Uldygt}E3|I!txUj>$_lxRNwW-&vQpEmWm#9wCyPDEZmg63Dr(;Sy+#P1cK zuB`k^eT1j~<0^ga*fY+iwZP6ldY(=gGeog^5Z_1U@eHLRTg&3M^(D;*X{N>1;}Sdw zg0VcdNP{uG>Z?cj>B$sGKvhticFY#HMh}uI(m9g4~ZDgF# zJJTGUnCadf$n~wY{&dnl3}_KIF;`M6XRan$N5Nx13g3pa1(M;OL0+$nz*;r~U`toS1Zd z)~8Mj6A;00bNG+L2GmDis&m6F@#K9A=SvIN89$X&52GZpv?D6`XC$lf_6v0*84~2& z|GJITOmhRW;#HmH~BrP&lLJE^e%llJ`Gk*`MK5^OY-c(PLU-R?=sH-7RJs7 zx4>%i9|IuqvHr6Qy*^zf)Xq0$4oM$uCwO>?{59Klcp~mkxzH+o8A})qe5zYvt zs@DKia;(SSB5fZOI*BO(W!K?Yg@Ow^YmMV|YYowG`y9TPZhhu4n}&uuPSLG{Vp!ey%{d@8~A*C^Oc00yM2@k_iC0^N4s}m<4it8x`&3T%u52seOkBJWf ztFbPMByQuyyr7}yHXvyVsrA|E?^^xMd|6l)#X{f&0WhPLp3$97$iXEv<#clyA5W%A zy4>3o2DZK{jCP6Zjlx#YCo|nV5o1JCZ--`jZHK_Ua8GE{gQ;Rp?qdyZUrT3$?|5|L z=JRDa%D^9Ljj;K9y&R~7|6w!@<&*cr$RHY8QMLP@V>+3L44=LNxy|I{K_|tmC8wg8 zSykbC{PAEknQ1x5}ezdL2RBl#bgnQ;U5dI{w}k!Go<()D30uz%pBeY=v4njPF!)F zv)iC?LuOl;8ug#s|)MhyKW!*LsLTzr7#z1Fz)r8^IeID;AO zb*q{cNZZfz!*OSCsU9EA69~9e3{)LbxkLLOx)l{p_V+LXbEu4P0^o#%T@m{$L>nOY zK)Ja7s1qhtVWc+LplfH%3m6H$nU6fzpko+x`Ig&!I$aq%<>I)ye@ZM~fqNH|ZZ*%d zJtmu0(s6^s)1nE1ea@f|VyYcDK|;)`QM-nf~Quo_J& z#JqjR*LRFqm(pg|(KvcI0w3?o@Lra!IOnvbTgYRuO~BPo=gUtD>8NIgVU=*=4HWwQ}qa63*`!!5r_;N zRP?tJqBUVo0)6|$$h3YOmrOUOf~9nF7bYt%p-GJyTfz_t-G&fr>SG2CY`TX8`!aC< zW}W7SxQa_oM|0R!YJ$OD-s)r60V-!FpJZ51w%1RTpI!q7liLc}++J&-q44}Df{G{Q z?+w3 zC5Yi2SG>Dwuqlqm@R@q2O{@UV$62MVexK53 z5v16B&=F{cYGR|cb8z1YW*t|`dp5UqnWZhP{?+lJA~yn_m)FTj4*(!q3mU~a%dY%~ zsf&k#>ck7c;?~3wks^xzf_7D`RY-7>2+@MM^CB=VYe_9fb<;$EV>oq%kCc150gAG~ z#3#gUN>)8W8slzbaRe3!GXLc3E?{U;V&$peVELj))Uhz8CSOL5-OOJpF@>ZNe7RXgxX`?OwyZyW2nbEcyp#4SzmuhjF8 zqbrm7`Yk*S$;teuF~x;zg-K&N;Dl2g)# zy0JbRvoDziaVVwQ{D&7BIEPx0ZAt`ej*3^pTM1F@jnrHj-ipWOs4a-DxwUYx)IWja z$qq5Hq7yyjvFQaNS7Xmq|JTsDbY@!@#%mroX)X?!hl_Ib#=VVBaO_Ghaz3JQO`E2n~^|AYTkH zkw{b!oQdkRpQ1(wBWt;o-~#rF7b;+( zFKo2M3EG@SkN4iEBD3k@-!i1GD}_iw+yyZB*>mVDcQFjlHX1zPc~$7n(6e&IK*3+yNqtf!RnRSiOE%9}p;zN1vloQcmLWcPBVA5LrUTAaW>ki3Qn=5S zzm8T|1>72+`!;n%kwsay{xv)}=n*VlLf7D8mK0DAEYvt*B|@@>SKu|v-A(`moc;j* z4OuO81C0@F5fvC!L`!tbV>Y_(xS8`3%6tRlhk1jO05Lu+RV=aKIUv zeB9L3z+^hwa|sUINb2rr2v4D>n2l(s;<+HYeP9vvD+>GCUoZ7PF8M}LJ7a>R3x<<7 zd7PDMz-(ke;4~^+Q;eBT&CrUi3beH3I!UB|YP`&G+d3*3KCzBJ3PXO1z~+>=FIgdz z3xAXwdSo-t5U?r2tN$B_5Ef9#rXOU~3MZxv!$Asu90lJEh*}AAtUCaG7V@}X+=RbD zr@T#4_dWtvgL0pXLZaVh2+ICyMXGnqF}8CI9oRGiCc_>ud6whFl@ld+)cytXyFt`dboyHf?@T zG^QjVY_MX2Vgry(3F_7Q7I-|6Dq~{C>nunS$1=EgJ_z!P*Gf`{u~z~L6)K3lW`{P!3As*Bs-7n|GV}5XgvN*=`oExs3g*JDMxjAG1S# zBDNmXdTBPXSij6p?u_&PqT4qA?hmW)1dYvIT{Ekxy4SQA$V4YQ3?kCW;C`FEzVTh1 zJ%o%Z#pNlQNvOfYq#q~rXuXlPeHrvrvWYKp`6Rbq3OS1w+iwAp{m9CL_tEORIS%sY zjE)GnMtoFsX4At=^vz5cymOuuWhb9hta@Bd7a8P&nhue+W`;29%=(vE?(cZZ3&#w0 zI;`=iI0C)LTCFcVX05I{L_oj}kMi7^A?DWX_Sc`KCzKGP5A z^SDOH@Fcs*VD7-o0V?8nwtbBguA8>i_4v;zs~8w*NCmqlF8=m~l&$}I_NBp4%!NYy zp&C_(=357rz97rjo&MF!i8h#=+5#JG@dn-o31j+__)C2gDJ8Mc(Qk-zKfq@$=L{@7(-^W%%@92mC zCc_UG8E8Cc`Z{H+afJX273o68UgA-UtAi{UkZ_w&sMKVSB?b?r433z4%f4{u$xR*Z zFKb8f`mAwEROroOC-#;DE^BZOZSn>3{)f|y)ys;vzVl#l`hxD~?OiOfy)NOtr_Y(v z7W8cKLf!cG=EY4IIc*)i1290>$3=ln+N8Vw_H2>I9i>W!-eHMGJAAfN^4hh{kxiMxrRNuQ7yJzZ2DZYL@fnoKA>}H_6yv;N`rHjM-j=50D%sM$ z2l+jctaR@4U{BOtMZ~w^9NjaDmlvZOkI7vnNR0&kW5x*6@rQN^@$N5w``n%%I-M&y z{~K5X#5q>_qZEbqj@H0ioN(%pD6vnaovN(K@PK@9L;G1a4{ZkW=lV(|4`Ecox-ycm z$Q1~^U7-lp=^Gry8+V+w*ZEM5pDZPsMNCsS*O#}X(lm+FWS8{rx*X=ed4|Tg;ptM` zRsnFwCtIq2jSxt7aH}PM$lv9UNIov?FlM-`eg{rMq}wDNv+XUU>?6YawYk+;pjM!r zs2@vP21fiJpGHrWhNOdi9HayMtlaM7Wv{~dW@ty7Z4(IyMQ=qZQko_Ws_CWX ziFl?-gN?MB4jrMPcrljU!jqz-etwKNmMGO#}5bT-Ks>OOy7#%WluT^rN((KQ6qh&`_$IqZ%A zwv5d>KP2ki5~58_s8TP8G#Jm~tazAW63TVk4jLwi8PY~CPrf@^*LpgHw3vPBQbDGL z6P4Gu2pGH}a7I{53edWOfVl<-AgP%?lwAc+rh|Y{-)H%p%et`=$9dy;TXQToVABa#C9!R)25t05#Ul2Yd?L@ox&=g^^s7cR zPt)akOXYyK<%gJ0A-Mq`8>$A}h2f^n17!{@jgf~dhd-P|$8ooTgZOi_UWELB!ROu? z4ppit#f^nnCTXUo;+kS@m2qOj3-os3$*b4_a+#)~3H9;W)e+f6zo~W428p8Vb++s; z=?w%^ae~j=(N)(>EPvvFv`J#DQP3t9!hty&`v>hY4uX80rba`tUnD1QlG*}O;F9IV2=t78jp(9L2Y?!F&RM(56}MW|L=DLPpWl< z>d^SDPSWii@vInTy+rlSYU!vx>*G8zks(gZ$bx{0g3~}mO4wW3y_eb$TZ?sy-!5_o z3?copCW_zqhrHocLDi6V&Zww0j`!1{UEY;saC!3(w;ah=oZ>XJeAsIXiQ`-q40_?Y zAY*SjP>MaqG# zJ`&d2D7i^IiNI)|E-EQ4!uuYT7jZw(k6^jZw}xAeyU&ELVS`EL#JaJYF}Ef$0l2(P z@n8^4#in1e!IV4|NW^gw<@Kp&yqqeakp!f_=k#9bCpd_3vEQb_1)N^bYNhql^pF&q ze@<-TQ__^;sJpr4GnwN}-j{G7XeQU_#IP_9wQ1gI25|MzaZ#4~gA)oKAccm7h$O?b zT(h$21hQf!=)s*x%$Oviu5x$Lt%RC9!{k>%cGm1_vp`1EtP<;y`(m0lymi}Qg4^A> zK?nYG#K(xBj$iv1gCCO9r`aDf#-pahQZs*RuRI+_YJlT5z;+h}n(`|RtfdU421#c3 z-bBvc-{^)H)8+2oPK0ZV9Rtzza)RDcITHJ;jOa2$jk!Oj8K67|rvsZ5cBW(wTk8*| zvSF2asda`E6H47Huu8lv_fg1mUFa~YIV+Feda~l}Q1?prO%XF7JL2v-rrGfPEnpFF zft#4&)ObRM%Bp0=(H9N6~T;uQ1 zl-}fH59I2um*2oIsv+%c)OM3TQ^)X$gws3ffM5P95&kRpRcnuHtQD^t=8IYhB7`?W z;BDZ^#T-MWc1+6n!|4^;T6`5Q`6g{$V!fK+Dg%8~({obv987+kmNFHwK5RCwI>`5s zc|4j>5KWkB|B+c1x8i`t6u_FxIBacF8ra%WnV7qx%=gwsKa-bgAZ|!$@VBu9i3KKK z21S`9y4B*6@h_QFp%@WI-QHw zPclZDZ$Dg{Xds{n4!)@3?XOstm;6dx44ML0;A3s=*V2QM{;$fUa=pXbmAo*DR1fhCYO zFX3}cp|c(p^Z+EtYhg_?jdP#8{}RI}0`OuExkO!psK!aQUa`b#x9mJxx^_6_x|yT} z{}=(FblYz=np2he_iy4frI_c^B0wvFqdSZbPGS^tg^Oh;ZQJe(r5_j)qO1%-OJR^g>B!vwixc8ubjE%?YGuL+N5g9YR&9ul zL?RkRdEM&DqsA*sE&y_$l#sW`VUpoAK?w4?kpSyT;Njc+CD$iB1zuT4S=Mb0 zwV=%<_zQg@rWQ?6O_fjn)B1`0*kBNz>U2yN3~wR)CDl_h*hA-(Q^iZx?TVB1i9r6T z9b=)BJLXkqxnD`$nV4l3U4HVn?GZRz|4}+}I;zvOtln1Rd;n~YRlWDd8wW8d%#p=x zZ?P;#x%v&rmJ2ZoW0KZUghc_kBA+*{t_Y|!h5Xh_aK6IAW=;1J z(@}eI;cDV&n?ejry=6_n1)wHaNWxXNkRnwhEauDoN0AWBf1a3|c!lrX%SpJJ^|}Dw zZlOSHbe8qaY5kgMnt#2~s}bp|+$s3ajM`uiI#E;79e8%^rGty;l#ihE(33o&y!S#B z*+1YIB{Q&-X_%fbp{dh!uqiIH6mJQ1ZXmItRak39toX#acDZA2f--7wIi14rHOWi# zC0L#%N~zKO$aofZOueUkvP1N(<2guR8+g-Ry~#`DD{2ut;ssH9^??)<2V)@*B(S3B zU`(WQ8nW`kJRY~@G)lGbdRn!i^woIhq!G-^iRrXPqJO23e>pab<6v} z#Tt7lr5{qn)PClfmav0Y4!1*$A_igiWCAQSn@uD&jB6!=y#RPO4OSJyd_u;o4Jh;~ z0X>|K$c~Rf1WW^Yf+kFYg)9q<`Vc&BmvCN0Q~j3441BrW4{LJx=deV0FLRg$S7&Wy z-ofQ|D%(+^eLe3RD4w_!hV60CGD&{BDj?!C{*O>u?}r=n^)#zJ#Y?pKk{SPEqHHaX z>CuwgMIJ15#Yijsm~=O$@3IlM!&)060~H?YR10YZw*wl6aIn|Lr$X>e#QGVwEs6w_ z?OJJF0?JbmJe8iXPpooTzgAw{NnguShIKn`p}tk|Kv+6rkjYJHM`S+ zv=sr{n`LjJ*G9mGWLU_oA3*0zzUgABlh04@_3{nhsQwKlIgqc=JgkqiW*wr|(5fxX zmoL_7ia>bgV-E5syB&F2AAV6pc9id==BG~w1>H;3FU;N*&mf}908lXq!uoy?ZZWwT zcf}bL{Jp9m#-<2c3^rD54hxnVN5jkdns<=34pbZlJgpBW(}Ep?2)T|~v`AelTpwY1 zd|+B{3|u%{VrP-0|C%ovh-&5ColcS~U8a4_`B7lXg>hraFV`>wwATp$&jS0Y~p3m>VT~MQsBse_S=$Kc^<*HTOStNweNc=5M zyG9+9GU^dWE+QuYTvo*$d{2#G$BYhx=Pyzj?6fhNgq|&cl?GFkOleynw>|`F)C|p5 zAL|$lWUnS9qOd*POV@lGCIlIidVgrL?|318uC$y_3yBOW zXW?!@=z`We=z}Wd?p5wxBhi1jc$V|4_rC=_1>CeN z-UVw)cIxYH?d=zy*;gzggv7&&WYuD=lO6P5^uL9?YzjrIJ#{{Aa&i*UbAFXPPz{0xV9g7IetH8&- zKnB~FH0+-z{2yDtYvLc*fCn~p>_+Ba_(ZPtT8S(Yn0W`<8G+Qi_w04Ay27iK7>01_ zP_500B@oY7f;5d!5=!k-+eA*~DuJb6;~#q^Rt^U9H3Gpl^Hgj~j55lp%uet?s~0(8vy^*95N?qm;RhH{Yz69hfllJvpb;BXbHv5XrA z-Kz^|aZ>VNP%bVy$r3f`beEn*77JkObqtKvgoG@OGqim=$&DoIvkwiD6>U>SrvtXv z&^U!g`fP$>lD(p<0dIT|Vt-IlQ;jGJE^y$ue}_M1O$Kmhob}?$PG~*`b(;aPG%|1Y3vJv--sWW}W#|e^b2?U` z;!oST(if8i9RB0ZWMPuBHPkdmnF*c~y)dupzLsQY+`o4y4x}O%pxWQl#pds^eAo20 zJdA8=MJp1*`2NB*Dt(k0E3R5B6KDrlwCQXjvdglco|;z%J7D(s7eeokC5p{KTjig2 zsAiyoJ~$`ic!h}xl00>FAjzaJiTIx(oCo2xci%<>anq6PmlbMnrG-U9A! zh_^||mbrvgLKKfacWyEWY}u!w@5fb)38 z?Q=REb#%O*#!##Xe1b&4r`q6(8RjOmvgqHD`g3=l`6F+$9lAV^=`wEaOrub3Ly+(B z+6Sh+>WmnXpqnxuhWD}KR@QfEKJpM-jUz4@Z9ObY-McFT9#2aVU^Z+n`zQhSqMm#~ z#*!$=NGb#`2N#kbEtl&ZN3L5V1oahF9Ad{{Si2YBZs5Yv9P!qA1r?B?aNRm0xO9R0 zN<9ZsVh?HSB@19+EW$yF?p08>n!Xho90kVjA&3ryaR7~9@%=1$4!5huQRJd*Bd2QA zo4Y{Jdedi+!~!j-`o=?9K#oT?lN`+pa2)X<|CsB}!#mWXX0Uvqjcu{Db7j+XMVf2* zo560d2Jmw$C2+{&WRx4z@5NNh$zFZ!qkK4u_naZFdZUFKDl+Gv5C_XB0A#MSpt{kw zSvOD>82QNy-((NAZjaPoB?%l2ag6Bg)nm0Ydnt51-Oj~^D%nA1*Ynyf-pe&v zwY`Pm8Vl*W6%HNtKjFklDSe#|xQax~v%t)NO3Nh^ztW z$@$WRNEYjOHt-N@waBT0e6H1-db4;h9nf?BGrdo?Au^fAXn+1bYQCH5qxYl)_lqFS zL&MEoJ(E*08#K6++nC%lf+8_8+RDHI0kl721ZpY==Br5N;4n*s?z1OOBm$|kAl{;{ z{hnQ)dJZ|8O1yt|`&E3N(AZNmifdIs0!4?2D zqnF5uz|#oeT;pSyn1W^MwUkAb+&fRk^_-5jvs+ie!g;p*%mDpTKvY?NlBB0Wt_ zxnYeTcs(YdJ^W63=D>ypAjp~il=CYJNOazQKK;0l6!Ie-9MEbL`vkl6`^JsgfQb#@@69r^EYGZBZS15ElZ+1~k#G(YX&LNnnCDzQ zMD*hZW8szH0p8G$f+)urzbRq)%^8_?J*nGGlG|Ml^|`q#2~{E686>R)ev^krh4akB z|1vtCk)oOpm-6puOY!*MnS#~iK(*tFB=Z3aYKO*a<9?Krd{q374JU@h-fgCx(-ux3 z(Mk9fRoS$iw)_Ebq{=`^75&InhSr~%6fG0lE|D$iT5V1M0qU#cONQ59Dz{rmT8jhp z0>$bx0c)=R+HESJdgB#6Rs#jW9WdMadzAG;zl<$Z(u_r%o}D12BCF%GycbprV7zm29=>J@%+-29i>RDpQZZ2Be)ul_ZBF4u;pa!OZcw&!tC+*f6`9 zVJ^ALs`V|(ECQ#${P^1|9xLR=*4zPLM|X29Osl1*H;lmql6uK~@+Q})`|qTls}R;Q zk~2s6aPsk7dc2Y2);WXSWb~p@@~>Y*_oHxr4Qw%Gu;Cs`xLck4^xc4_gpsrKVUE-s z#!gO^ws-L^{JHHsYbk)FCLDI8yNc#LH1V}lxZ4n)FO#{JDV=@!u_ny7h#c=3Eox>= zNfG<#tpre&p#Hn`bQ^R4M@A8sPBt&O>YuGbd1g~fs%#O|kf7nByi!LBh}!BXj~l|v zu%NCm=)6J~yTP`(G6rjzVyv)MZI|elG#wuzqpEEGtmL)(}&&K*r@Pqk%^Q z;veM26jhAK&TQL<3cY;dXh=yH7Zx|T3o*hP~ z=(QvMSrs}}Jz_lkixbLWdMu0aMLLzL(>&a|HdAvZk5-wr1mH~85xR2Q#&#^YF4tyI zG(?_kon4zruwHz+#Sb~0yrTI@)S-pDld8o zS(VNz1#o!#pWx*7c}t_Rb6}uy^fg{V@)pc}ndE#a)Q!4wV!j#IqvS>O5UqVQFqnswjh+lF*qW}%CpYd@xc2&~QEh8!b?~gK! z6U=as*W("Assets/Shaders/Ring.shader"); - if (UnlitShader == null) UnlitShader = Main.ShaderBundle.LoadAsset("Assets/Shaders/UnlitTransparent.shader"); + if (UnlitRingShader == null) UnlitRingShader = Main.ShaderBundle.LoadAsset("Assets/Shaders/UnlitTransparent.shader"); + if (RingShader1Pixel == null) RingShader1Pixel = Main.ShaderBundle.LoadAsset("Assets/Shaders/Ring1Pixel.shader"); + if (UnlitRingShader1Pixel == null) UnlitRingShader1Pixel = Main.ShaderBundle.LoadAsset("Assets/Shaders/UnlitRing1Pixel.shader"); + + bool doubleSided = false; + var mat = new Material(ring.Unlit ? UnlitRingShader : RingShader); + if(texture.width == 1) + { + mat = new Material(ring.Unlit ? UnlitRingShader1Pixel : RingShader1Pixel); + mat.SetFloat("_InnerRadius", 0); + doubleSided = true; + } + ringMR.receiveShadows = !ring.Unlit; - var mat = new Material(ring.Unlit ? UnlitShader : RingShader); mat.mainTexture = texture; mat.renderQueue = 2895; ringMR.material = mat; // Make mesh - var segments = (int)Mathf.Clamp(ring.OuterRadius, 20, 2000); + var segments = (int)Mathf.Clamp(ring.OuterRadius, 20, 2000); + + //BuildQuadMesh(ringMesh, ring.OuterRadius * 2); + //BuildCircleMesh(ringMesh, segments, ring.OuterRadius); + //ringGO.AddComponent(); + BuildRingMesh(ringMesh, segments, ring.InnerRadius, ring.OuterRadius); + if(ring.RotationSpeed != 0) + { + var rot = ringGO.AddComponent(); + rot._degreesPerSecond = ring.RotationSpeed; + rot._localAxis = Vector3.down; + } + return ringGO; } + public static void BuildQuadMesh(Mesh mesh, float width) + { + Vector3[] vertices; + int[] tri; + Vector3[] normals; + Vector2[] uv; + + vertices = new Vector3[4]; + tri = new int[6]; + normals = new Vector3[4]; + uv = new Vector2[4]; + + vertices[0] = new Vector3(-width / 2, 0, -width / 2); + vertices[1] = new Vector3(width / 2, 0, -width / 2); + vertices[2] = new Vector3(-width / 2, 0, width / 2); + vertices[3] = new Vector3(width / 2, 0, width / 2); + + tri[0] = 0; + tri[1] = 2; + tri[2] = 1; + + tri[3] = 2; + tri[4] = 3; + tri[5] = 1; + + normals[0] = Vector3.up; + normals[1] = Vector3.up; + normals[2] = Vector3.up; + normals[3] = Vector3.up; + + uv[0] = new Vector2(0, 0); + uv[1] = new Vector2(1, 0); + uv[2] = new Vector2(0, 1); + uv[3] = new Vector2(1, 1); + + mesh.vertices = vertices; + mesh.triangles = tri; + mesh.normals = normals; + mesh.uv = uv; + } + // Thank you https://github.com/boardtobits/planet-ring-mesh/blob/master/PlanetRing.cs public static void BuildRingMesh(Mesh ringMesh, int segments, float innerRadius, float outerRadius) { @@ -72,8 +142,10 @@ namespace NewHorizons.Builder.Body vertices[i * 2] = vertices[i * 2 + halfway] = new Vector3(x, 0f, z) * outerRadius; vertices[i * 2 + 1] = vertices[i * 2 + 1 + halfway] = new Vector3(x, 0f, z) * innerRadius; - uv[i * 2] = uv[i * 2 + halfway] = new Vector2(progress, 0f); - uv[i * 2 + 1] = uv[i * 2 + 1 + halfway] = new Vector2(progress, 1f); + //uv[i * 2] = uv[i * 2 + halfway] = new Vector2(progress, 0f); + //uv[i * 2 + 1] = uv[i * 2 + 1 + halfway] = new Vector2(progress, 1f); + uv[i * 2] = uv[i * 2 + halfway] = (new Vector2(x, z) / 2f) + Vector2.one * 0.5f; + uv[i * 2 + 1] = uv[i * 2 + 1 + halfway] = new Vector2(0.5f, 0.5f); if (i != segments) { @@ -95,5 +167,40 @@ namespace NewHorizons.Builder.Body ringMesh.uv = uv; ringMesh.RecalculateNormals(); } - } + + public static void BuildCircleMesh(Mesh mesh, int segments, float outerRadius) + { + float angleStep = 360.0f / (float)segments; + List vertexList = new List(); + List triangleList = new List(); + List uv = new List(); + Quaternion quaternion = Quaternion.Euler(0.0f, angleStep, 0f); + // Make first triangle. + vertexList.Add(new Vector3(0.0f, 0.0f, 0.0f)); // 1. Circle center. + vertexList.Add(new Vector3(0.0f, 0f, outerRadius)); // 2. First vertex on circle outline (radius = 0.5f) + vertexList.Add(quaternion * vertexList[1]); // 3. First vertex on circle outline rotated by angle) + // Add triangle indices. + uv.Add(new Vector2(0.5f, 0.5f)); + uv.Add(new Vector2(0.5f, 1f)); + uv.Add(quaternion * uv[1]); + + triangleList.Add(0); + triangleList.Add(1); + triangleList.Add(2); + for (int i = 0; i < segments - 1; i++) + { + triangleList.Add(0); // Index of circle center. + triangleList.Add(vertexList.Count - 1); + triangleList.Add(vertexList.Count); + vertexList.Add(quaternion * vertexList[vertexList.Count - 1]); + uv.Add(quaternion * (uv[uv.Count - 1] - Vector2.one * 0.5f) + Vector3.one * 0.5f); + } + + mesh.vertices = vertexList.ToArray(); + mesh.triangles = triangleList.ToArray(); + mesh.uv = uv.ToArray(); + mesh.RecalculateNormals(); + + } + } } diff --git a/NewHorizons/Components/ShipLogStarChartMode.cs b/NewHorizons/Components/ShipLogStarChartMode.cs index 25a2b5d4..aa64f160 100644 --- a/NewHorizons/Components/ShipLogStarChartMode.cs +++ b/NewHorizons/Components/ShipLogStarChartMode.cs @@ -247,7 +247,7 @@ namespace NewHorizons.Components public string GetTargetStarSystem() { - return _target.name; + return _target?.name; } } } diff --git a/NewHorizons/Components/ShipWarpController.cs b/NewHorizons/Components/ShipWarpController.cs new file mode 100644 index 00000000..16b39f65 --- /dev/null +++ b/NewHorizons/Components/ShipWarpController.cs @@ -0,0 +1,36 @@ +using System; +using System.Collections.Generic; +using System.Linq; +using System.Text; +using System.Threading.Tasks; +using UnityEngine; + +namespace NewHorizons.Components +{ + public class ShipWarpController : MonoBehaviour + { + private SingularityController _singularityController; + private OWAudioSource _oneShotSource; + + public void Start() + { + GameObject singularityGO = GameObject.Instantiate(GameObject.Find("TowerTwin_Body/Sector_TowerTwin/Sector_Tower_HGT/Interactables_Tower_HGT/Interactables_Tower_TT/Prefab_NOM_WarpTransmitter (1)/BlackHole/BlackHoleSingularity"), GameObject.Find("Ship_Body").transform); + singularityGO.transform.localPosition = new Vector3(0f, 0f, 5f); + singularityGO.transform.localScale = Vector3.one * 10f; + _singularityController = singularityGO.GetComponent(); + + _oneShotSource = singularityGO.AddComponent(); + } + + public void WarpIn() + { + _oneShotSource.PlayOneShot(global::AudioType.VesselSingularityCollapse, 1f); + } + + public void WarpOut() + { + _oneShotSource.PlayOneShot(global::AudioType.VesselSingularityCreate, 1f); + _singularityController.Create(); + } + } +} diff --git a/NewHorizons/External/RingModule.cs b/NewHorizons/External/RingModule.cs index bcb35531..91b22c33 100644 --- a/NewHorizons/External/RingModule.cs +++ b/NewHorizons/External/RingModule.cs @@ -13,6 +13,7 @@ namespace NewHorizons.External public float Inclination { get; set; } public float LongitudeOfAscendingNode { get; set; } public string Texture { get; set; } - public bool Unlit { get; set; } = true; + public bool Unlit { get; set; } = false; + public float RotationSpeed { get; set; } = 0f; } } diff --git a/NewHorizons/Main.cs b/NewHorizons/Main.cs index 13cd3cdd..27015f96 100644 --- a/NewHorizons/Main.cs +++ b/NewHorizons/Main.cs @@ -37,9 +37,9 @@ namespace NewHorizons private string _currentStarSystem = "SolarSystem"; private bool _isChangingStarSystem = false; - private bool _warpIn = false; + private bool _isWarping = false; - private SingularityController shipSingularity; + private ShipWarpController _shipWarpController; public override object GetApi() { @@ -195,13 +195,10 @@ namespace NewHorizons var map = GameObject.FindObjectOfType(); if (map != null) map._maxPanDistance = FurthestOrbit * 1.5f; - GameObject singularityGO = GameObject.Instantiate(GameObject.Find("TowerTwin_Body/Sector_TowerTwin/Sector_Tower_HGT/Interactables_Tower_HGT/Interactables_Tower_TT/Prefab_NOM_WarpTransmitter (1)/BlackHole/BlackHoleSingularity"), GameObject.Find("Ship_Body").transform); - singularityGO.transform.localPosition = new Vector3(0f, 0f, 5f); - singularityGO.transform.localScale = Vector3.one * 10f; - shipSingularity = singularityGO.GetComponent(); + _shipWarpController = GameObject.Find("Ship_Body").AddComponent(); - if(_warpIn) Instance.ModHelper.Events.Unity.FireInNUpdates(() => WarpInShip(), 3); - _warpIn = false; + if(_isWarping) Instance.ModHelper.Events.Unity.FireInNUpdates(() => _shipWarpController.WarpIn(), 3); + _isWarping = false; } #region TitleScreen @@ -546,12 +543,12 @@ namespace NewHorizons #endregion Body generation #region Change star system - public void ChangeCurrentStarSystem(string newStarSystem, bool warpIn = false) + public void ChangeCurrentStarSystem(string newStarSystem, bool warp = false) { - shipSingularity.Create(); + _shipWarpController.WarpOut(); _currentStarSystem = newStarSystem; _isChangingStarSystem = true; - _warpIn = warpIn; + _isWarping = warp; Locator.GetDeathManager().KillPlayer(DeathType.Meditation); LoadManager.LoadSceneAsync(OWScene.SolarSystem, true, LoadManager.FadeType.ToBlack, 0.1f, true); } @@ -561,13 +558,6 @@ namespace NewHorizons // We reset the solar system on death (unless we just killed the player) if (!_isChangingStarSystem) _currentStarSystem = "SolarSystem"; } - - private void WarpInShip() - { - var ship = GameObject.Find("Ship_Body"); - Teleportation.teleportPlayerToShip(); - ship.GetComponent().OnPressInteract(); - } #endregion Change star system } diff --git a/NewHorizons/Utility/Patches.cs b/NewHorizons/Utility/Patches.cs index d071e567..46fd29bc 100644 --- a/NewHorizons/Utility/Patches.cs +++ b/NewHorizons/Utility/Patches.cs @@ -392,7 +392,10 @@ namespace NewHorizons.Utility { var targetSystem = ShipLogBuilder.ShipLogStarChartMode.GetTargetStarSystem(); if (targetSystem != null) + { Main.Instance.ChangeCurrentStarSystem(targetSystem, true); + return false; + } } return true; }