From 06416f9b615a535686d06a889903357053368004 Mon Sep 17 00:00:00 2001 From: SpontanCombust <61706594+SpontanCombust@users.noreply.github.com> Date: Mon, 10 Jul 2023 14:30:14 +0200 Subject: [PATCH 1/6] next gen v4.03 port --- README.md | 4 +++- .../scripts/game/gui/commonMainMenuBase.ws | Bin 12690 -> 12666 bytes .../scripts/game/gui/main_menu/ingameMenu.ws | Bin 120182 -> 194332 bytes .../content/scripts/game/r4Game.ws | Bin 121188 -> 125090 bytes settings-parser/Cargo.toml | 2 +- 5 files changed, 4 insertions(+), 2 deletions(-) diff --git a/README.md b/README.md index 5b0c8bc..eb3c79d 100644 --- a/README.md +++ b/README.md @@ -125,7 +125,9 @@ The most common usage of this would be overriding `ReadSettings()` method to run ## Remarks -WitcherScript side of the framework was made using scripts from [Community Patch - Base](https://www.nexusmods.com/witcher3/mods/3652), so you should need to install it as well. Due to this it _may not_ be possible to be used with Enhanced Edition as that does not use CPB. Seperate compatibility versions may appear in the future, but for now if merging modSettingsFramework with your mod setup produces nasty results you may need to hold off with using it for now. +Framework version support: +- 0.3+ for game version 4.03 +- 0.2.0 for game version 1.32 (requires [Community Patch - Base](https://www.nexusmods.com/witcher3/mods/3652)) ## Documentation diff --git a/modSettingsFramework/content/scripts/game/gui/commonMainMenuBase.ws b/modSettingsFramework/content/scripts/game/gui/commonMainMenuBase.ws index 0fe0ad2855079629507d557be12d6a6c218e74b8..735bcab0a737031600e86f53134340180e8c3179 100644 GIT binary patch delta 74 zcmbP~{3~h09PY^pd_0qvaG%;-#KXfV>dH{TP{5GGkk3%WkjPNNkO^evZJy8jo(+f8 IdXdL60CScW9RL6T delta 116 zcmeyBG%0z*9PY^rxGyntGH`A#$Up&`_=!s`af0< z)uq+m>i=F{TD`Y=XZ7ytxAxuj)eZaqi`AXg?bZKU-CX@~bt-`W3tn1E+I*CQK)xgOh?_YFqix@6FPVp6>F}<`gU9w(|7x?nv-;abV?43}tS3EB&S_tqNY z(}6=yj9X(YU&;H6#`)CVgQIwJ`j0?*#;D{rWq=3qCx{ND7xA%TL(^OiMkFbn0uiH9Yt4QBvsx0Hr zFHQH|F-VS0Lqb_er^B&~PknYQTwVqCcL`tIusOdq{yH=ZbYf#1+5bp8FuB|S%XwaQM7o*=KBlz^PbJe`th^S9xn%v0Nel#9C~T+1m0iBp|S|>%RM?B z&Gn*tC>n1W&muJsjcf5~952o-@2{3|YsT<+ENJ!qLY}=lz<~sRV=!SY9N#|1GTyyw z-14ox4aQsJ`B}uZ|=LoefjHSi*Y_)eQwxCe&LKG`-F4dcJY1q z!p>>Z(|H`eN8WxMG%{KYIgoaQ#xGZYu)jSvO8F@AB&J7U%>Qi^aqX@VJYsRZAe*sg zR^ZM6H4@*Sowwl8_Iq>lePHiqjMvcn&pc7m;^u%~#b5H!9mlRU!Txcgl(_Wz>cBMV zV~Ya6v;XfKE}qzvFYUKjP$Dmv-@Sn|WB&a9*dIGEy1RY_AA82(@0iW3JtOA6YqLHb zW<^RL+HbPe<6R#C`~AVl%VmW8Jma}nFO9rsZ@shn=aH4+O_#m$9iNYN{*yud&m(V= z_uQf#m+KIjAdQe_7G`h6<(EfdE5{e({a=vGAk-vi-s5!&maIdC* z{&+-9s4E|4danHBfvwc(cwi&CmHp`y);x1y2JC!iD|}YylP_)V2R0I%bQJ^qr@{O_DPg>f8d#8`#rpH#h!g^zelRz24wl}z+-pqS+s$y>J?kv+xEu44w}q! zJGX7jd-e`I8E*;;WEB3}zV=sd{c2YKR(JKE8%Nw2xB_fAuACb(Kfn=7Waz3<0Y2R& zJ)u8xa5C^)=D&UWJ-NG*zT*{2cK6J;^0ofe#>BJ7kH1vO!Tv9X$A90YGE(pK{dLh+ zQV-v@sLECC|G~gXhxR)nI(csJ!cWFuc-tPc`?LBx@i?5qh|-y! zQ|BGL1NUKN$Dc0L+k1mIu&xD~nz<*n#Nl`rL)rs; zTxKe=&A<=EHWRP3J+ASbj|VRbN?bbgr=FU&|IR4;xzXaPrk zM>eZxG&~QmyA?k&58%hMOzf^_b8AP%?eVGSdJ!{zVYEXUo){NBH~#cm(ynky+)T}j z3~0_+?4EPwK~lXqw0~4D@HFxI4u@6mYRx%z$!qrL10QvFQrnxG)qiUeR zu1`$sJ+!X}HoG#>yTUtBvEp*qN6buy6}dh!oBhD@BfHjEw~V`<*?d^Xz``#1J<~ka zPff?`oV&vJABI&DT@e*x?T*Yd!Y=#IJM)gKRdi5$&!r^bcxF6nR!0;g5!}j#aU$Au=OuY-)iQsErWh-p#Kx& zOUa|&Apb^{LYcN431PKbk+Aa08lyL>ETH^9J-^AE?WnPw8Hr-Gy%==;mEtD}GlIT7 zXYNPSlbfs)P9k#-<~2@x#vAELVOno2p`z*%*G+%AKi-~ESZ!6fTJLVMYCHt#aWo{I zBVM~uZC%_PRhCPG)O}~qdA-d$CZ|X73_kC8mT(E4#;{3-&IemPN)NVqEpR+YFuL9Q zRK7j6GLA_+z^KQ#4={zr^+uzz==HRRXSq8;Ox>Rv&wYC)vS`$$q5_AH3g7WRS_u6q zT4Ouwte$6zy?WPrR}>WtXympQgRaaVI*DxY>d_^>ZbXWzFk z`ar1kBcc5C#J&%CrE3%UoPu%P@u28>5`r{=W6wsRFUc|BccNqXD|q%8bY1ArGxqu` z$+Gh05Tzdt-W%&7w@hp`kMU)rw4s~lTaTg9c~o5=8m*8We*4Ek?wy0(!<*&{qJ_C} z`W)PnZseiPjH+v|hR9bszh1l(G}z&=x4~XT_TTQUY#t)~D^B++$KRPmw&Cl&?{K|yX0N8SF>Cf&GlsnP5}FEzHUz!59RfOf#`daJfAClmt5j#Q zmeQ&{!Zd}@*kcQhPA3BJ4iC3dp6j8?5C4B}P-4YPp6_93*=Tc+_U*ja3hDmEtG+jA z64&7+?UwQ*G{6ohi=A`HzGnAt82#{!zEeCV2)(BBV2dNW1PJ20#>wPi@0$z>dhySB zVQ!BN2lPg6@i~~tl>use*j?F>-grT~)~KGB!*^1hMdQ^xI*ut?@3!@BuXgyttSmTi z4!}B4xxQn+`FN1$m-ZXqeN)Oy3zlUgZ38}h829ObPFyl&Y1`{8$C;DjmcEg6D6ci{ zrW15Md2aE9M!jbm3l8(ntgPdmN1%zu-7`#-7I4WZP@~rKcnYpX$W4-;R^*PJW(Nn| zU(VG(pMLJ0#ZbV*&Z!$F9dz^GHeLK@8_zo$g$*(xvYof8H)M5U%=^Zr+7rjqb=(Cu zz=iiv0PWP%)8p43qB=2pGxVMx&jNkG$s^PDTqzKula_l``&$h|4F&*uX1#*RTx#(ZA>2 z{F+tV@8Z5u=6Ce!HgV}tPR}|8?^m|U=#SYI7Ry3gY=L4bheKx zWb3JEdVG=W`8ZsPs`pN%?5EQRO4S^!M5~);+i+eoJ?FAHH}hrF2)Tn)y6#KU<;vIO zbw=d23z&08r#vM8?!Ef7vHhnZM18c`!o08UfQL!U3~yQKQ}C?!j(N$ z&+U?1@VYLsR}XsEr?*T7$30HFz_rU@d%hlwS@L4Nc%bCbw~yB>bM<^Z7^8bBVpaD7 z{AYTnb^+^mh6Q%9j(fJ`^Thn~u=hK!b^*KdLSU{xyDWWg1M^|d>!_vh@vnx*iXX$$gy@Ls=9Z2Q<=7lz(i<~z-{jrq&Pu4TNlad%tWlT$B3 zyEAROIKFK5#C`JCY;E{9?OfYFhVNSh8|R)78`nK_be~WQ#^-FW#x==w-`n;fpPp|D z(&-+#?L#^}-xQ?de!A^LH=d&n(R8=n_ThRo??UT?OAViy?Bn=&xWI(7P%>6ptvb$=@pTm%USr=-ffSg#ZUEl4-Uz= z??%zLd`0p9^7oh4Yx@w0m*IuHn_W@LCqri3^)KB&NX79`!3dgZjHSCM9hz6O*Paz9 z*O2Qn(>o>|;u=Su(f!yk^mxd$K0D?7qX9q4_!7IWKVzHAu#si(6)@EM9cpLPt#yz@0KG#)$$p5|&? zZ`+ejT{3&pp3o#ik>{*4?W%i~^vUz~-dHyGTs17OcDfq2Y(B}j=$qFLhu2oEO>L}A zy>7=)OFQljw##$RWd^tX^iuu9NwVJi{llro&pU^_iv+IEx}xUy<#Rdqm(2InpkYo~ z>3UA#o^vl;7jatLHrA7@9A?Q)2Gq(2OAaORSq9!MsJy(~}d zsmu2Ep}ozyLFxzOyd_5ci~Y8=dSuan@b~ub9s5U~IP%-2w%JR%MOZF1E!7QHK;4sy z)VKqhCqn;(2Fl+-sr^$LN%uQ_a;$UPW*{2{7RVLB>7pona5!KrB#D`w?wq0GJMcKq zL*L&V=uU43IONnQ_N(15@EBe!qXo>dB6?}iz4)De#!Qy=T6(4D0?MDyszaPf(v$bP zuN+vQ_N$ZjIqBPl#7}7$Y1}=dFqL@r04NXO+yU?4_0q4A`KtEMg39ghMCZ1DLlk_y z>EGP4+5L>LYsPtgx}16k-B!jLGFR*wclA09+#0y;#p}2~tX}6AePmj~_d$>;b3SJ$ zrgM&VXL?km-UUA)3p|ly@RO@*DG2TdHs}A>19rL%O3Y5d9x$Jmrtg`JtY@C5X}jy= z^`~jz&3W_U*0F@XrKZj@tSYF-XZ`Fkw&$7A^ZC%f%hOLxx8JkfD9??~N2f7e#Jm1G z^o}HNe?n&89!~t4f4hy<(x=X=>+vwq#eOz=fABT1S$_W7z0!csk_iVfO;b)@B z9}3&-o{aQs*|S&fYr$_|RL^ou%f#_%-j)+SiJtuoNi>sST1V663fRHvZg{!{@f6%Y z3b@b`IaYy(@b~0j^t=X6?s#mYaf14Dt4O0W@wo6#9^3!!ZRN;MK1txxxp8xh$~P$C z4;>xfNmqxjG94Gaede2Fd(`(*+HpqDPZ8W1JG<~2USCgT8v9r6%pc!RjW%j`5+F|* zf1#PB4IUX!vZEBu`S7ey_MUMo{sQ%zX_8+mV_TdNi=@x+h=y7+x2b?Men zE3>D*nlB8l(z9)AWF(Z6IMK-a=}asC%||vXXD1R_kTHHZlJSs?c|RtyEWJo5MvLzx zaiU8pM^nAao{^a9Tz)(CND}EmrQ8c$V_7i7X_)B3{6@~(Di)r4=BnWxD?-eU?ECIx z_rJ*u0|ETOTCSY&pfn%xdcc%1GZhK7bxc1R6792;WUC49!ELQwbyK|U-aj~Z$t1G$ ze7;yJu1Ju;9op~5aS5I;4k89;POWLE#EFUdB?Of8Y77=;H zF7;ZTuG!y!fjp=4p+hbINm=32mWB4{Wm?(rnRQgLjnVgx(|s8!w#AS+u|R2`G8=RdWP@MZDrO1_9$?;H2WNvxj^D>@ubapo*- zvbFdm%k7gx^OcQLpXv>5{C1(ocH3NVaqnF3-tz|o+`e53Mov z7TOVxhnL`;8n#l;m0GU<4kOOZoH1BinZQ_k|HKlzb7>U!l~%9^J&{R?%dAI3K2%d@ z9M&q$*NbJHBC2@RvBhl>AKyHuJMgTjgk%VT2q^2EY&=`TU#_9VA8#op1UsD8f(68`>zpj8&dVz#};JZPs^;pdB^-Qy{xM==Bb6*{5K#n7Uk*DCc}jo;GC7rp&+3DwaT zJzCD&FYPOb-xXPf1rSdl3)9wW$?k36t#>row3n&($+?)$hP;#e_8>{)r^nFM7-by3 z+8oPYw5~_Sh57ba-tZ2p9H-;Od!OKV?tZ0r83dc|C6`3$v-FHUHEwNroWBJB8M_TP zy5w!wdoHom@*jU$zH^PM{)*;T9=t7{dZW{~qtkO{cU|vPw8&$u`#af`7^C#v+GjQ1 z9V)Od%%Y=7O0U!{rPo?d%<_|oduo|+zsr2w8RpS={k(h2!FSTe_yOu*;!Aak9@Kds${4{cl%`oGl&|oon?umQ%PHV|&i-<@NTg9??&G#r@osu#PWEZJnOa z-uPuqE__Wx-p1qfJG;Pd4=?Vq$rjcT^uF1dxl?i0i|)ai#|LxX((>5;=Tvb++qZK8 z>&Eq^$NPFk^@1(ysEE+&dqCR$c&V+T5;4u2!Ox{;*fae`R5$iT-E%E@I^Qr|*LHHg zcdRF**E7xayU^XSnl|5iovD=*CcFNopD|8*a$nE2q-S|^q_$Zv=8}H5UC{JRKjZi` zuh)sb(rWHG{TezMLw}JIrBX*<0_V5ix9_PD9u653vUjRmXT9w2yDZdsEuDcxo|QZ# zXE*Y$KOOq9)_}eD2!80y0)Uz zC+D>0a8CCr_qO|q;IYnj|5lBg-K|D_Nd2|cT-%0Ny%E8+z6Q7B<2VK@op(E|zl+AD zB06A~?V&j`F5~P#_^Ir{7rgEDwPlNlBhFtQOBy`wIr8XEX-T*;b=1A{sh#p!C7CW$ z%XU8s;>ZK$(d!z&b^!He=sh2^2!DANJlgRZawK@YTJfQ2S7@UZzimJH4l*d`TGlmF z%YH@K||;nvP;I)t*@jgV3Ixvk2cTL!={g>tU$(1?~SGSA=hxp zY*z4BZ^Y2eeN6S<-5$1VhF+&s2Ph-tF{ful3yt5;XK-kh zo*m1hwKH=8qqLs7Im=xp?g!&1!G(34taoew&SN#+b*yjR2NhD3ebT+b0+y%e_M~OJ zQb8?TWo_QZ)-Ljx>+xfTaea;ieqXIlgBXvof95H(hapGUzX8X@OwU^sW5 zQ2T_h*58#t1onA(?Hox2j@rj8s{(y|)uX$f?pG%0Me_a1F8}nG zmNy)JVe4ln52z?n0cuKMVu;i*fX7JIW=+p^VZJxqo zp%V@1@zcWR#tGi)!-F+z-@3U3ivHV6=4MYRd351hwa^zG`j!~zzrAGc>>q75|MUn; zV4z3n$Frz!GbrZ9SOQ1J>t;|)kFX2|bnSP>3+#79#y8~)bj18fQ!w2(nV8NkWG@Mf z<)>?%xis$FFJex#Z=DZlOXM81oG-ObMlCQie=^KiuViR?v2W?UWc>BsSc=1oirp^~ zqsUf2{w#5MWAfQ`usA(yn-izsxd=WKKYHZl|F>={8|NP*{ww=E!zN+jKQw#w-1N(X zQBGc-V&5XRan^sneJymdjf!X=9)F5+J3(s1$?-AHH zNhO-_-D*??salc~q<4#-=X6Pa-#dh;p^k4zXk)7VtlNtiIa~X(cGh0il8WGXA4b#! zW9EAQjxeuJY47Q}QI7KOp2ib*4adZjXvb+xYsFKev{#%p?|Km5HVS$#^O0r0oJx3m z^UzLnTjUgSb$6Lv6Ble}CHaPLbdgR%oZ|V{ac$zKPmP=W{%_)vKiK!wr(e%?jq5wN zhK#{e>%l0`gn%lSY%Tso2WSR=ypu z@QqPOZNd*+9uJ2%rB@(J3MX`Nw0ALK*Bx97T#2Z;S%dHF?I^Nz78 zN@)aH)9isdZAuK)mW5}sb>Zi2*fO7c-P#KsZO5jE*u(I$z=_rwQS01Fm+?Z|MxKuw z{%z39CzajMo^E+uSjurMj-{Kjs2UqD?6Q6F>28 zzx_1WFHXMnJ~Fo)W9xAqX~6~_+82^pO3Zmi)gF9KNr3Mhx8(iRXS@Bmwl^Ztsh;C^0~TuiJ5X_t!=-G0c-E_Je2&z z^uiOf0wtdun@m5qh(&*m(?qw+r?&?`*iR;|G0Co}yTjLC>?tBKx&svRm;QuqBV%vC z+_U4m!NzOKazb2Eo*+^}?S78iacn8L`^r8&?|9c>268{UnXIULKCI-P{o@RWR-`=* zlju`IGDW4lBCItrNVzKS(DD02wf8|i!#&F_JKG-(IbLtRZF0BUC3TNs1CP#ly5#tE zBQ*Jhtr`0M;dvzWbAvv56-wyu*}AyRgzg!nq&61wjUa?gB}Pdo1D zG$N;mpTv%JBxMd_VZR(tv&-_Jo=cXA-CA%66)ZF@q6cy z+VIoWX;k7z`KGr98!FBg56opP+=rWsfu|ziF?{1#cpUq-_i3*e3D;fab@pjVZe>~` z*zt>`kM(ew#W@ds{pO&LY#uUwwO!m)C;O=E>t)p7&1Ifbu1YM+)8`xl`j=V9x%%=c zPG)BhuJ2;?JX@Ax&KBeAJlOr%q?C$S_HDPB)2?eN@znm|bH6;z z3mx0fZtpVhkpXuNHGXgE^v(16a9^0kV~2=m@QHT5SiM{EP))@$Q>uuLck6q=h`_L` zbnp8)bY;K(c|Fh;^zZEidOBskwXEek!bOEKPRQ}B`*!dW)o=Wk zR?SrP@bgs4$r(I2l@DbdKDKk2;?w}TP1O@!>N2g*S2owJ^vN*FgF#A^36!>|yBhkP zj%1$5h`DaXzTY=$kvBUrZsxRy?+t6Jz_em_d>wACirOf80_d@a@kUsbdYzn1NrwSC z<&wR@>`{BYlstLS7Hf5A8iDwboJi{iLC0d~J8Aa%Q@XO2RQI7-i?Etw%<`TN_pJR5 z@-_9T)o^QS{7uT6*+Bpxgz%gRoN>~CK#_ko_};)!F#QJrosn(7e|Igs_T5>Kl#4s zz$@~}O)%&MZXR_lK`q5;q8k~>hB)VqD==8i6MMV#>BZ^#bf}i~FwescysQk0;zj*r zKhu8$j3)ymeYr>8`W-#x%|lq4xxSwKM)+o;Lc4D$zoSU)!1(&Sna@0K_$bR^;Y1Di z3h8@lni2gMc~!9OCstn`FzuN4ie62P(0O~ds#fn*hIM*gdzvBjjQ0$N6C3-X zc^4FAF%+h8(*M_f$P<9h_LdyaY|sN#WTCs9m2}{ubKP=R)FkcC5gNy8F1m| zb(SN);}mGI5D{yPakd*ys&Vx?OV{g$tJhiPmg8!-R*gGaxH-+e?^o~V{8+$qF!*0y z0lz4TBVK%NUjL^S0~4dadYlj~0TI{`Og)Xgw8O#u@bJB}x9mQ!bA|lp4@-&_knu^BYgB+59WU4L$cOpNugZ#0Z>W3Tzpz}svW(hS9o9jVU4mWo(NYeW z?w>4ujm&Ai6}WyLpZV)HAXDTE%iKW;-T>kn9|!iE>xH~8$HBDrnbLG0Y+1*|K5;Uo zZK}Iu_x_r(K2QDWmCxzjEF})r<<+0;OMCU`4>+(>aM^zmn&>}Q|7pH=NHtu%8%Rst zoS~&#;>GIPX$;VZ8qe~DLFYYfg2(T>G}MM$G($j}y}3c=*Y>9H!o!KV4xRDCHCPphR;!^tnzhJsz+tf3XCgo7KfN0~K85 z&dbdGIP-BSoi!kCTLR%lc*OZcihYxH;aRvX_bNxHC>@}lOQoZgpW>E*+{2XnGUILf z6Y+|uz_0r*Ik%5(Zwse7cx+34nX140S$rQoNO^v`Qu)^{Rm#%dpj>`kzUMZuA4*SKl1&N^AD|`J0r85@~CbeLjikfebCToZt`R8K1K9L zDUa9fS$23)MP}#bQ`2)~eCe?y%kRCS->ZEq zm=E6)4eswLd(^U);=|Uv=>-N11H{C!OCfd< z+_5=j<3(d6Ag~#{7Mv5m(>vLBT^H+R?#DH85BH&6odOPLK$h`eOYb!8*MZ`JVT~9h z!yrrq1f_nO%N={hIMd_U`i;>G4~*k}EcBAE+BJwvR!^H`eSp6r4w7`&IP%e!YPj%) zG@f@os$)IqvP^H3ZwsUA_}&=~c385L;L%22yhcKDW27$z$(Yt^!m&QbIKBw4zrFEuWLqY{*8rS1-MN+{oHswcyf=fU~4^NsXQi?~Vthn@g=x z!nh57#N%(TZp@SI=Q4kaPJDWQ!lk6G^Ix+TuYd1(t5QOGK5mVJu<33~`1!K=S?>Q( zkMN#ge*X`HbOWa#*!9fHF8||&&ir0l^FLkq%v$q5U+B#5r!~K8djjFoi=i_!Yt8Q( zzg^tS9~5hT?}BHJHNSs>Gyk?&^9L6^bFBHd)y&c;`keN^mPCf{8dqgqi!ZQe-oVtz zb!>)J3oo#(&zE+9E%B_d@bX?uA4~SFv}k`d8I{d1qsrxwbMj&MY#zN}ZE8!gzV|kV zIa$oP=R`&EhCX+jyDIG|XP5YX+#H>;f^oh`@Wz=I4l!M)bJ?n;JLY}FpU*6@;+FYL z8Xm^^DkPrOpl1Ot<0O@*LvIXR!^n~EK~8)A_jY=3+{33UuiRG)jIkrtE9_L@sVums zuZ&q)2U&tYR<)G(HtA;)f1kg)oikfKsyPq${u;atb?33OzLuamQl2UikrA-9A|kTA zz~c29#pO8?_3FZ_fL=LD&w#GG0`HP%CEj!Xx~#)3_d2wQs-gF=ytzBZQt=F`{}0rzVs3z|EKe)=XY~^WY^o} z(X022W!X=iB=cO`&3Ro?N^fXI*Y)GMt`6DnBcqkN4sGU==jdeV;VIh~2X9R2c==R{_?w?k@i(i#F}T;A$GOD! z+{eibHwL@^jnx&XQN{0X4Y={%*)I(qYE*t}1(hKDT0d3s$bOHtDQoRuwr!EgJhtj1 z;s<>?$KD!x>F`M&4z^xrp6E1-Omn>{Isg^*6S8gKlXGd>Fs*k&i{>74TS#V2o0_BW zmcTdu3teWJd&RTsaI7SR(`8OV50{4ZLZl`o?9i z|GHeldolm?Y}v;O`3tWJk6V<<{JzqNmGMz*RWb1@-jY%i&!$g~qS>_Her#`Fnip50g50N(UbB6MY#T)T#V6>L& z>007#!^gEQ*P&laY1YYFbJC~Cl70VZRit0*ak;&2RQTZRci<9x8?=<3ZI9qFVtb6Y zPb*g5so`^H%@?%D-EQ^$OD)Y19cxqPV{%F@l9YR)em;x2iHKTjx@sO7+VqLhA4~{a zCFHzaYyFa=ZrUgh35?V2ON()}j5x32JaLbm4?FozfK2;ByC+@&AvF znjQx*#si~ooafNf6O4U$3WGQRe<;SukbGrNqKi1ev0TYA`28u@f1yD_KIG$+V*@+# zcV*C{jti_ckaJqF`;FemvdlA5k1;V9=P+`*7y9n|vsE$6SA(8zcN!x*4~@D<_QrlX z&$84Y<=&Qpjf%Ik7tT{>qr0MxkD4~dU4Md?^*8$N9J zNw*U|hY3}Je zmwFV}TWvh{C_eYrG{yDydKA}NZAi~g@#*m|mg1uS9L?Kasc0SjK$7qA^F0c;p6pX~ z{B-s=RmG6(j-Nh1^~PhKpJGHk=)S)U*7m?O&s~$++x9=XarT~g9yZIb<9^TnLMQ7O zDn)SF%hx-hkM+Kv+pP!>Z6Xcxbofpg0QZ*s=BDygZS5w&O4cW8SXkSjyXw{-R7 zq<%j{rtjHz^7hbUc}?&E@GpVdwfq=rV&84S{kJyOyF=U@R@SwzY)$sMZYNI_xIFsb zlyk!tX!lUxR;Ro1oEkHti!{SH8>Ba-Pp;T%*r)bl$f@5qxsH5L_Lj%*m7a)lNOk7WA;TNpHA(ub;+7JEN-?a zWFNx}#rwgS|nj)pQt>t9a;gKzRj7k_ZyNVd$)Hs*ZMdo;=-=r>;L<}dxHDbVY`HBH+Zh+ zxEKuo$7_gT?%3J|Cua;Z$Hidy-%Weay@@_W3SSTX5%6TJ{QHhD-=FPbXz(AuAR6q7 z``a{FM-HTi^|?&9(=(=SjcaC!=wTpt;awX#p%yO0FLMv%{4(O_WQL_K{g$?+RR&1+ zQfBYQPjd}xd~A7g*3yQ*r@!{BR_48yey1aqH2gulF3!FrcHm4hoxsX|qKp@QrXK@6 zqO*VMGvAfv@#t%8`?D3@Js#Tf4Q$)T#5BtvmJ-rM0X!C;OLl9*cdOSYnxb;VFbIln0+rT!JCGKwo(|LUtjpOSB z6eSGX!Et-!i^TCK123bsUL}UxP;3Xsy|K58Wikri8J{Zp%h)7`i`~GAo}YK+f3Fjx zE`@G87+*fyQW{8y>vNfQsdIDWII-h>Pha^_x()VEbBXQD=-Woiau>P#D4uyNZBxYD zs;&DxeIKZwQ&B*;)g!4cfe4YHODIe=j`l>JZgSEuZ5?3 z&&f~g(+0omu3=X>@Z5Qj^Fxup8CR1t#`jF_${cNm+iMe|^%zGroX3`9T7uW{dwJF# zcBde%F+BC`#b7zCetfr{gl6s|8~NP0i;DgmNqtb{&R?aZ&eLcc5*r*8->t_>b*ZST={N57%GzDp`pQfIbeyX7en(dmW*5fVC0*F1W4~<&v*`o{Z zc+gkSuif(!R;pEH2%P2EzwKFkZ1c6x?A1;XonezDcHb)Z)NnYt$v?^9$4+26R>o^1 zn^CTg+dqgBJnuoSgHC9AEU@%ofj$85ZSs>dF4@kf8@8kCz%qQ_o7J4EMXX1SvO;;o zAd|1aPBI{84_?HMJ)hg{cWrde@lo>02Ze>$04$_F6=3({P ztFJel6DwP%}cz~-nHS8knaSXI?15yzijo8 zW9KthqBHXv#+dRQJb3qX)sFYR6WN3%$sV34QO*!pa%%MZs`6NSLnpv^_7b|fXH6bk zme%aswEVR5&)VkLJnz`260W9cad+TXZiBsVU);Fvbtmm~>1hW#6zTKqy;tJRV;+S*f{_YH#&GW^d4czsYp@+}US#$5EpNsd3dvqj>$E5Sl$J*`ca-YPPR*wWG zpvS`{nnr4RbP?63C4~5V+!vwhtoE#3weuRIW1|Pjl#kSkS?X-V(m6r~$_Qjr9{Sig z*l|hzf?jd_62GJF;G&OIMjtm8wFcy?n9i{JA)?(YzOIjxP8 z#%kSLYsMbk&j*+9gAAz-9k>o$oE^Gde7!%6m*J9~TGBtPXZ0xzPwUeuYuuAr_G$Tv z=J{O68^)bK3_KaPRkBCdcQfEAEYYX2V~ST1K)#z_S`MQtzXX!hozkAB(7Hh8+W5V>(DeL zUmPYG&YUam2v6R7D)0v$ul~y@OvK78%D8K^J;OtbsxeZ%o4GeKeSYl1U?0Y#vw5;) zAnmRC|5pZq*DyadNa-FFmFOBH(j($#4P>d;lP~Wua2~pC@Cgrn>1tsE9`DuHOZ;VP zWt{PdA2>r8B-lc79I!1?@S#YeclwCmh3i zd)h1O;Vcz-Rx-yeOpBjGrENb@Y6Qi>WQ)VfsuV zUv&*a6`_2dgs(c&p^tBQHJL+~MY>aX?`hs1K1IuE`YhM)RQI^OFwa+Gj_AYBX(Ymv zJ`axdC^|zFe+yfeany!jct$vy(;w;#sAqR2SPCh&~4ka7mc8$HenX|Lqs5P>C75(l4qH%bOJoU@r>{sT( z&ptV`qV(uRPMd7d6VvjK>?z+rQJ+=N=9jh(3SFHu6P#|;TcLPRJ&UC+4jI+ROY@WN zd-Qy#<@PxHaRJTT*{tiIisXKppILp|_CDV;|BN%F4(#lgJLaQ-Lw?S>qSk?Ax0gny zJwIccrzUYewP&fH7hdeX{r+R~M5otT+OSeH2Tv~No5+D(HV-1>F-x4r`{i(spQqKr z=&zq=bkbT`TOnJRIV69dJ*&ABp0j2T*>7ngVu;|cl5_Knw^JmDo}HGq@ra=<XwK>Btg4K9M>s5P?HG%-KTDR7Eb7;WQ%;yZHb2`> z<9TA7oONo}s2Qu{5vFiD#*|jVr(5{BHPok;h2GCFerf!uEOLfuUPjvyS6(v^~ zdB^W&oOIJN%vZ zIe*MKnZ2E=N3?B09dl>fFgI%8q}Dg_m%u^xQ|0M6KD@i{2cs96g4WH1Sr*pyRUR7k zb(RD->gc5QsXGmUg}W7Wdvxvy)v0TBKYpBOo}UiQR*y+X6?*HX&Ex08^+$|neLV4z z;ETU|hHM#sUbRdJeByYgzv-!I(O5@}8a{44b6)E<=g#BC?C_A*oS#tVE;@sK`Pj2q zN1Q55R|6TML;FOIWlQ>Jp0&8m<9zrE`8qKQq8&?4UmwbkOj0>P8(F$M=(}Ts)NkwN ztVrN}%T|`TIa^N67*xAz7L8ioqqEzK0w)=J?45-NzA>#D=j7$FMfIh8<@uJFEnxE1 zWsQ4meTP}TwQr|hyI_p5N{kD}TBFTn5#x?0?0?*v6ws3$@pCl}4gZ-Nv$ry@#n$&Z z`nRsO#=^tR7LfkfRwbC{vZv}XY^Han$L3K?9%Xr4aDJSQ@lZ<5G8^z^ijwAXC*}A^ z>NuN$?#g3k4`#E-E8~|n=MiiAmJs%6%_!?+J8B4)#x3j7IM0&T$So;U0Hi69Q@3Tv zXkT{ncyoB$h6F9={k=jHZb$N76;0>wn_h z`8CD>*_QUQdZjNanah}&j!|A$@Be=qt;uoH3rRJ_cf7r!EZx$N((Q_6JT#X@$TE;) zr;Co{TLR_uNh8r!x>GC^P!&&D=s}dPqeNzx2LY z1o}_PdvvJ^yN#fW;iB?NZ41%Y589_PcNRaa^0-oldG_D9?u+ zS?2kn@#!_=Q@@|gJF6}ta*j$`d$#aVx9f?#iJGQs-Rnh7>(;W~#87YQE^~F4T33yE zj95K)ZC_Nbr)|l`@V)V|F2cu}=abR{e>HWyUk1;-v5MQYimFNEu9n=v<(*k?Y~dSQ zIA;sBH?XuQuQpl~cb70-bVl)w#@eRFQU>7TqTBG-q_gPLj5-bH-X2$33-2A%K7v+n zn7?(n;JwIuw`cNGgIZm@qQqFb0wQkN2L3T5^W(O1HE(twwCWQVmyM}+WVJIQxpp!Q z+mf!MJ`Z`;uHUm5yTRJMi@C0(9?0Ho?cGc3QzM^r;Cm6uQ)hG+31^;W__Sjw&dHJF z{(RPHxk*P$Nde!r#m+>!4ZWY4(@cB^+gC##_%D`;b0}N8aRW}_W>@(!ji0&g*I23h z%IH9j{{DsK-up6;HM?hp-%$6F?W*t{SuW4(?eF@7b?x4@91-^ev6t(jJmxnvuJ@Zw zTdMQW_;szZi3ds#PSr5|wf5bzRgw+QY2(d^sR z?3_6LMyJ2g>F0|^>PjV9eNHmZXFgn1gwodS z@-ylO*!@nb1vOO%N^<-p1l5;ujKb0E?eW} zQ$_+S=R0R4x-D~_AtWk)r#m3x?xw&_tS{qJT4Oz&Wtc>z^I%PR^KIcwcIX0bp z88bf|FFf&1G@AY_VV<_9Ul_)o89YyhQ`UYkYI3q8oc@u0;(_2d`h1}y#95qR7-xEx zEBeC5KqkQTVOn3{Sfl8!6F*<`75bTS?|_I(i{I^A#pW}U#v7Kks(JcOfeWWFl6m>G=6QMWcIatv z-|=9eBlo2o7-jKrxts3Do;t9f!cXF_oa_L{fakJ;$_!r`JRjLxw~aHe4^MK->678y zy?0md*q1-`nXQfc3Z^0F*((F>g17dD934=>zdGNv#yEVSvwW7_+$Sza=j|KpeLjEN zMsD?zxD=F-NCJHHHV69Ot`6%84))Qqv~XJuvhRL%IgfNoXj_Nz3&TC9V}B%D@Zw+J0+x4<3(e%1ms3b$F$m zU-@!4C+^rd7Kw2gxagHl!7^TzXz1E=Y!|Td*#bORWCPF^+;@uIZCTte?Jw>(q2F&d zpHU8mGBbYD@7Fy#<kEAJ~8aJ{Wf8Ws)C;oQr1-5s@4`Y&dtnE2Q;#< z!v7Mj)jP@3F@ZkGR%?zvdBz@v*eTN1mHix!YmndvZoKG?k5wPz1f6>xNxx+jy=fW* zyZ6#YVilejh#0DuX_3BvYtT5GXwY5xJf+t|EWVjf250I#+_>4bv_?6;4U4ol_zuT~ zXZ@haoVfR|NH8cX%@|_|&prNnRrhpWu`U=+zjd2a-e&6FOr4$XJzw8Z%G)Xf^H5_M&hwfAYqeI) zQD_S@%JSYdJU%uXCqHdn82XY_j`XQZ1Z6~ zM++LbuN;5;RHjlrW(ykEROP6x=kmBU&G8-Z&hS|Tk?36O)8L$*AHgb@)}yC)0%eb* zhNC^ZA`5)3xs&5_JbBO7zVsA%q9=ujXWV!Z%M}5owd4xRA zCqVc++cOb#UP?>PrD2uF-sKp^t0oB%!DkrT_;9!cRbP7?TZ}=b>6(pC#Ev1(?Onwd)fhc?N9mNuMSbC zszRI19awI`G3}T4;hTPMyKu(}L}y_UzsR!;&x|{eoF9x^a^!W(c;>~B5y<(<9?xt( z-W2}`>Zn-FQGY)2L_bGn$z!g$==1H<`1-2lPRM7C-*O4h_-nfzhh-{kY|pn zd46xm9Zf~tC0_+?l~JheOBp!?AH{c~4QJLXPwFy!*EkApq7R*HN1wvuckvV54$r-- z`Kcu+yLQ*!rsnj(;zl5#j^dO#wBJ9rJm=wH>HQSV1LJQrBi5gcDn0-?n3_tOiN7z) z;J{HgEAI`t<$&Uv0*Q@uNxw+ODp1Y4+ zvFCH0H=tOym7*>Cu9iTReZ8n4+_QI2472o*P-Q5!&G|<5o7|Bn<%Xc(iQ$j?WS*YJ zcw^s8vr-N84Bg8?-opPm7<_;u<6YMv2R0h{Jk>?CkL~;;9jyM{>Y^^;wJz4^ElLJA zTpeJ0W-C#KRMK8kbm@5P9XT2*Iql4_^WVI*WNunIx9(L{6_ZM(bg0ie&H`m`2ps%x z!-eOy*%|rmS;kj)ubbgBrlO`ta?vYY1-43&44%Lr{A(M z-RJaMIawWEsq+}x6ph}d#ros){gOSC0sMz?t;1!$=S^j(OAGGU6^8Wb@u)mS-X>mq zWSsqXL;u^m$wCOL{dfMw-XkOBW85A-y+(OFSo3W8`lF!D^1Q(p&h7VX2J8zO8r|^H z>Y1M#zTgO`HD1mBp!bg&e+fRO?7wm@6J)3sYM0ve4%hJ9fK7-Rd2BxZmMvM2L6j3>v z4j$p&bgUNLH9UoW;uGIT(z|!+8`onIn-L3RQ?Mb2_8vc@KhaR$bwcEO&BlE)f~B-3 zg8%PK<}|aYuTTH|xO>5SndmD*i)Y);94#v2@xL|jCH}bI;prJQou2xIjpkkW^de}K zGE3nYxn(PVHsJE%AdPPAsfc?gb=FT~&nH6*1YjRKEy|Zz5+?N7!-!-+(u;M02KX94 z_R=h=dKPXPWt`je^u5!+BiY~wc+ebh&dXtqZa;EYf-p3;K^o!MM#E+i8Td$8cXrVD z42Sj!Ut*t#zb>tQ->^(>?vE9^RlG&FWs5gv*5yBN^K$3{P_>dRsl%^i_l$vt}p9r~chv61mE zd6soW$6GuVSS|T6GJwaY*l2Ul?+1_YosM)#8*7Yl7DGG-eKJPLH@HWKb_yOIj}R*; zvxA~jk2>f(JVSU;Il;T8C*cdh3%{3m?C~!CX}tBP^ivye|C!_>ICJl8jPW|1uXDcV z?kQy?^Ll5U{ElGOyTNyxWOCLYZPV-x77I_}$Z|GloXE=1lj>2@kM>t=;X`{ykm1L< z9B01KUt3sU^d)(fsWC!Z!zXPXx@s_zspMQD*X>Io)O*e$bE8M>uyp**vN4&fk+n_o zF@2n7sg&lLJ~s+ZL*nTs4ILkr6ifMcqumLcXj{RfPuE0q(c>I^ZXf3?y>rmCRj;ky z-Aa#?I1zVcj4QgSdrpF) zgO+$Jy>X7s;%)9r$-2qHwtbfL7F!>F?$0wrlK0C zs;JKQ*dJ)ptFOIv+E3}31~N?Qq!-*bi~?l&k;~rx7s;V;RBCdMMKqq)>JpOmMbJW7 za;-A+WuK~J-{+cn&-l;oJ!ei@$NTBeIPd+eTW<0<_1C|NzjoQ+?|W;4fhxF1kAWZe?eM;+8P>jdaMjrI zznYcO^R?bu+jPw<3mOYkW1YFY`ZqO(e@osLU|?ZD0^=D=!Wqv z*5Hx(H0<7Fm+Q0BQFOLKP+OFdHLoq}T>e9qdg(lBvY*+E5yeFuN`_ihxpn7J)uJ3* zcF(0I=DcM(7fS=b$L>kzXLyV|!_dV?L!FboW9)?_B3CXuG;OwP)7%@mn9Nb+Ki2WM zVw9j#>FLGq#ihXw(-5}gtLA`dyOXi8-nuk*4ZY^q=NunHQ|;Sq^Ey0&rFq+=!F#Zf z0+C zcaQCzr}jQtfgC_y$<%vzYsXe)!RBc|mf1DSunNG)dWDOpRp*#7>Pqlbtd#L-n*~hRU7xk?5zH+F(85BW3WnrTi5)WHF zJ-ILPviX6nu1F$4q>7lM?jWmIFlT?%8CtLO#wl0%4tn2>9=qbFJUh?JW*?Ty1Uu&8 z1HAc{1~oD-jmGzRKRiFz^zmo38@{9ge``@b<6Imj?J@R~e@=OU8jFfkzh1p(wDOur zFGgUIm+ko7wJrJpU!*N{$M|&1K6hm=Sw4%TB%3b zJ=@njw?Cj~2O~>Drv^IcWMmJ0-et4k5gi-fvp$b<4u;=6?T+d=x??heg@gL|&0xSa zqwiP9zpu5ySSG?k0eksVOI~Vy#;HE+VNlN>^tx}@A%liC+c#}O)*Da#zS$90%8C!| zl#G|FKic13nrw5%4IS#G&im1RKC!p(&8Rn?41G6f3irh1k&HQYb1F}HJ0*SsSNcw$ zE+ykwq2z9MslWkcv>+=i9{^nkOwn<;EOHQs%65WzsKSiy8Q(nB?|MS;qS3EdgU+oFbM-iGAe-n*I9vsdry+$8LTFWi> z72|DWgqVo`-!*^lN{XMPZQC^_A46X4?~Dd|UZ2v=o5nZOE9zA)#u(gQtTP8u&{I}B zVx4WqJ=1xc$O)C2scrN6-AccfXlXgsq(R5NTDCjqk1`}7;u2}ItEnStI_}aNb!~Fb z^lMu~A_eu|j#o>olaVtFFMhd)S=v=WQO6QMNGFD}zRSn2GdzqO(MyhqG9Aa*zh-)q z-S6`F$TTUo!#|jw$JcXc_{TG>a}~i`8JD$8Uc7G~y!a~p`+x%b=-#b(JbMJPI%U4h zpTHw-`#Ad}&c9<6`mTyG0tQ*Gd061t&&|jD!u&(_oB25hL`BQFZZ2yDtP#u54S*L# zw=|LIvHi^Hd_AqdEE;I%-o(qq|DsCG*UQFVC)zk)oRQ^h96^-w-}lv^D;dCS(KqeE z-A+v>YYnt~L?=`@f<7&&$-G$SKZus#rr=}rA714X)1nWoo)~gLj5dukryagL-u~2H z+{-o#*{9$!Wp@tJ9IjIXnlbn7Sw0*K|BYqpOKOc*My!LUtGdl5Yg-mcE?XNA0*}`S z#`$gVy?k}#>z`YO;mL+n+vdv16FoPbNJZwn>yrNS$OhXA&W=xGexj_Cjkt81>xBa& z`Vx#@3*e`Au4XxHkxAk-cBLbkH|;y`gWiOPw=JI;vd|CbmDL=ZmOQYTR@x@L%gDK; z{(AhL?NzPg=W<(tYos7@v1Q!1%tE(4fT?^`K(6of=@w(0fg+Ci&j4lPur*6uq{K`6pZy^7#o%zu7r6q+2$ZsK`?b{=SouKk`9IxC; zrlxH1d1FwGqm@EuQN}Yz-(V|Jt40bcAu|i#{2oa`*O|bFKPzUYt8SpDCS-UJH)q&S~^KGL@nay#{ z*?P9DvdearGtwLI^O=63wx8F5p7a~%iIa&^f3ly|qZfIiG5-g(qYgJmcRWt^*8AOX zVX0k($yoSu(9E1z;C>HPB;pRRK8;nE@ZC^3^35eBYly~_ z&TIQO>*CY8SQGyq8|Tr#gElWYD<~Y_&Cy!b5_*K3(ysrY_AY5YPv=i;jmN`^6{q2; zx<$gT@{f ztb100MqCaT7CLZ?g^X^?F{H95dZR_}vY)dYQ5LU^o_o|NVaw+$wC2tGDaX~l7LP|? zYu&LXini>2NS?5<9NYgg>@(puJW(oaKRU`g5uyB3<03L7`TVH%4(r>dcm13fZUC!K zbaJh{ZyMSwljMoxnK)7E%BfAjDzYBG;}qK;T=1$P#G|6C8f!rONZd8!I6pO~ zIT`7khY+8D2W$YbDV!MVyL+mwJSJCO`!jnEeXZHDE)=gYBF`w|@e|#o0d*=T@_5Uj zr)mXt-9yf&Z$e||EMn%?E*^4+?Mgz{fq+0dW;rHH?Nq)$8>&#QTg=gX0y%|vize6Xf!XsqlTBo809$cpH*>lhc$bs)w zoNWqE9NHIfaGUo{!=ZMdaUR{ACaks7{CI(d_I&Yo>839Yn-2^s^m^9WpAL|M!?s@9 z=2@F32~WQFOIpZv3({Kh>7hxGa~(WNtkuebWqffjE+;|~sgqF%E_UmgIkFy2wl^YY zc*;G!^4#R`C!Cwtvzeb54W1Ze>sU+C@jO13B(GjKyJX_TJ#v3!fRQOd3hu;H()wEY z^tr$H2APD4Si`#aY`@Yowbe&Ao!HzTnqN7667aaAnOrOu;?2%d>d3M~*aLlkbBLV4 zFnybCi-aD=CTbstxB!p6=A-GHG&3)`oB5Z%vsCgCKECAc=d);b&o~p^!oHc$?Ys8= zLe8?~{E2%eJ7~YsCWowqY(f>y7Li^5O+Onq_6OcHo%EjhLDGa+u6hsQ_?eh7uP{S0 z=9OCmS5ap|GhhesP|@0Cgg!OhtvJU06Z}?ouYYUMaToSGXP@r7mbsBWPOsWbLQ2*eY@YW&Reb?AzD%g}(dS9mxV`^Pa!kIr)8K z|9|Q}=_TuQeA9tmVlDVSI6tD>^?2~z1w2?jb5T5qSNg8;BEHHSo>R2>I`LeO6O;?^ zJc~z+^zKfd{1&6tS+CHq=&Z2@kG_+)lTJn#lv44LL6vB`=qpj7;P{C?Kn4 zr{vWVPJGrJx%kTR9Pz!r)2FY0SzLF1U(P+eT>V-S^B|4$XYYuT=d)I>B}xxeP?slC z5KY$pm7iJ&tU+(V)mp{!+3NjR?A9j(7xOG%H=U_u4&wYIMsirlIF7N+-#nwK^Ei6& zWM64JE5BtBy%?b7BprF|v2NMBHr#%Td3gTq(ZX_Nxm%9W#|4bXhCw`L&$D9lemcc2 zI~oIW$zWKr_8P$a5{{%+o6oj7Fh4wS7xOM(*YRk?ywdeJW*WNS8(~G7X*%z+L@)NU zD%<^4Qz$x`OeIxn&AiA2J5@SkL9SL@i_Zr&-p>~1IT7=txU zyjIq-6`z`3Kuc`*d>-*ht)ENpbC>7y2!ehtv?uH1UfG<@$LHa^P4Xx7==mw7{*!wY zkp(4c{lRR7p058ceIH!&gN;jPtKZ_RTI`+G2g4{>N;2$tT7JWFXj8q356It3IDMq? zd4$4}=0noeGg()Fea2q4#Q$3Qe?3^3CH4l#8UzjU-#-zF?vPJT{f7UtPco|DpZuLy zIRoRsqnj;DN(uL+kK2};^=8cT1drhjFRv!MypFR;S8U}((Vi!Eum6hqQI8j6#NVOr zf@xo3Qg7ng6PdQjBE+;)%O{HtMWIX8S|98a~w&sm!1 zgi{zmOv{@=Ruc>jx^GZ#5Db;(@R8Qw>R z(G%lgc6ElX6>pY$6Kg&`S+LC8)D#*&@AxgByJ1jJ)lmlzcG!E0oZp_>-`)Cx?`1l6 zj?N|ANbEYNj*wlL?iA`(Wz{`3b>_&D(U+e%;+WX%Ttjh!K3&ScGh970Pc-t$k_osP zpAv~7mneRQdj4)`PkEVhy-0XFzB{Y-BFl~w?>P)E&f}ve=}~)d23hOf^UtI8#^|@L z=J;pB2H4_^y!kou8|~E`8)m;f!)<%6P3MswpQDO3`GKktQ8x-}u zNFFggu-*`lGRw0>&I?WKdAKypkNn3G<9Nma{aE9|KxR%M| zHsvMyl(s7^d0g=1_Uxw7K6-L;r}EO3XC4(rH?<Q^_k5Q zhQCjCa{b%3Mb|ps(tf#Z-0FZ0QB;)o4x%%2{Rv$VdkK{reCN!rIOZMVWgY^#I;tgk z7S#u3^;;YuoIfz?q3uJnhpg#@=JodDgpQmZn>_4NS(~=f0deNyfa6w@L-9Lj%TP~j z--0v7;4(6?gT$t6QmG+V?=l8Dz~FN*J%Ba6g|i)c7uOA^(~t1iQ#>}881 zr*^UAYNF1skWHAPNnfWflfZR)%$DiFvhpbGdVIG2PHdkOO65D3B>#_3b#wi9X-#a_ zQ+oz!tu?4JGkL#vU>;g=kNiE0_|$i&wPc*{Stf_5&$C6q!(8Y@y3YJA9EU=`;qUzA zH}=naQw43<3=y2#$iqT6D(zIr@Vs>nChE>b8nw4aOkk@ z&;h>)z4HB_{ha2%1X{GP(_H_>zRhQ_=QVV2 zX_grI5`y5ysc%qPRjsVm`8}Rlc?+#(dS*R6H?w3+IeXW^HQab#8j&@$=bq28MAWaf z>vI`(IctaAyVOnZ*gs}`Y5D0dO$R(N-T1&h$tk&}&Y6KJYP&W4Y1JM*uf4t7kDPJ; zjD!ru7*emyN;^3=mf<4Karwe#_tUzmL1nz~Gx1XS#Aeu09W3VcS{r`W`SH?*w1pkv zYA%|J$c$_XISxOM%TJ)fRt5a!xkF2MWz*5ym@4&xWRgAF(>D<5#&BeFK3C&+Al^4z zP;ucl@I(9VaL6M&R=mfMymCHoo($RF4)$8MHe0$b>r2PgG{!Tx*JqQlx0mXX_lXJ0 z|B1L?2TL^-!oPHS)I6WZ{?hRM#5n(%d5Yv8?+>y^1mWEY|8u#29W3=I;MkkD1oGA8 z*IcuHzPR(2>LeNpPXgUPzUAEK@knTY^_J=7oT-zKl|6;Nmn3fkJN?wSfv(M5i)vel zX&(b?#$L+L4KD0GkVMoUneldoq3#ZQwGjI0EY!D&)LQ2-N&ki4Ec%2d+Z$!2l&=!C zN}H=O^(oF`FELehGD!4ewodhtw=WMl&(M!CWas89PVTQw za@;?uh;jO-6;16{CId|08s|>&UEC|~I~1=Ne8A{?bf~0xe#Lj_1$S+lgDh#-ukN^S z8qo%Ely|snQsYt7z^>6LY1kgG&gIhUthsEHw1?jqtbCg4mHWdEj=AhOe~(PcuOnB^ zU7Y)q)RR1XYLY`X9T|0bb6$SO__}2&Wbd$^o1VlcyD@E(=CeA=507)2o61|}!@jf; z6Ov64zpb0^51&|=a7=GvM{7xdhHvbsbH-9Gn6C4cIymcxH+J+ZlLMXl_r{KT?_}l> zY0%fjjtU-qZfaLmVf)PJPvij?EU~llk6JiFT8U$bE;$eWO+}hm=_JLb%dFF};f^?Y zbL%ATP@Q93%k=y0NcUjK zQ028!N%J?qwAntgCvICVD`$XvwtrdGU(s{9FM$q!b_Iw6o-LdA0;aXn-bUT*;+^TS z|EEL_+vVf>+&ZG(*pmZSvhOI)i8(MSbk6XzFrN;RM?LVU!KE#oEDbP4%}pZ-vUHp6 zP4S(ek8K^}JO1YDK(0&3Kh0Nxs6wEvz%+JFI6k!B^Sg{;bVBF|VuD_-aQCs(wruH= zI}6d4?UNmIzcXEL;IPh&utRvsIm^mOMW%L{HFTL!jwm!Gwt>2WYwIcg-k$c})Z3EX zQC{Q2fhSJ}3k8m;`YcR zUGFlE0P-3${H}+Qxs`_gE2HvUvASe9j{6H_Z|Q>d+H0;E;tTlcP<=~W+XwdZbC!Wq zj_;n?8u4vT&h}B^Hz~6?2kF!})KuccEr(V3gq~>GpUek9|1CQqmz?8~@c~|I;D-DA zo*P}Fc} zeY?*=!Sy{KdMv5Y!8bK8lvj7uRQ60Xt5--pWBK@Ps<_VkY0xjhLHAGfL1=+HCYPK* z4;?tM`g?<&sNji7S;=YA4f=Entrur7%ke-J-3_dhbIHz9MV-QzYHDR?@eRW@blz5_ z?%J6ym>)5ol?L52EW&ei&_6Nx_l!o}N#m<7|27`s@#&f#4;pj)cb`E$i4HAuOOw&T zgID?cGyNX=LQs~tR1Mq5f+9N8WITKM<_(+Y*w#DsrewPQl(!Vv+-ANtMlJbSP_*fU z-m2x&^?HkT<;blO71j9LMARkqvNjTA(NPX308!abUXD=eYIT|aW_Yi6FO_BrzF?A2Nh58eod=C znN9r9(`-}7MGJG137{nhR6d>8DO*tDUJz-ImETsK-}|}1R*f&|MnyaL(&PGjxz_QX z)HY0+V_Exl=Eh4zk9Zta&MX}>o;hPAs>~tz?8PUe^~iE)-`MEirz~j6i}j4o`}K^n zftg$5cY>z=To#9jR_(~Nw;vN5fxh(eZVl7xQuszT@jv z*l}UIO~Gwil#*itkD4C)FU})d-hqT2;wClZ>u600 zlV{b^C7XG-!nW)ceIZ}3-XC^8kR3+50_XJsUyqGi&Zo-E@;B(GakBlIh87!2{GdoM z@S|UZJMU!Cg(B<`_m(D&&STx3Veo*LY73UkR_zc zCH835!{5{j$cirGuNF+p-jp3}@y--ylG_M=h+dQP@nkDYgs%R^G+l|o{UN&&5Ztq8 z4lN_9NMtJa;a%_KpXiVvC%Wtu&~2QT`h{t8xP@N-lhb<=N?iI%p#5cg@{d-5`Fx1B z9$Lgx{_H3I#Ho_1K$n=xvZ|P=)C4X~>u3d!7Rz})HX5-X>xFggLyMY15q}}^K_|DJ z`q`lfOD5a69QQX23i$EJd^dJC2paCGn8Uqb1p8M8E$ehTurcY|V0R`Om^*-|AW9Df zy!Ec`xlu%s$eV^$WOuoDi@si~e{UfhhW>KWyixcU#avU*1OC9eLrTUkA$ zv{o-|LTnUg2VF@|mwLNpEyJdj+PT)owY@~+c|E>-FD(0qR)G%7#Am_|SjD#Ct$H_IiCtO6-gryL z@lmJnCCE1Q(DeR1&k-9;^LucSMy)@8KC}OOhVvGODb8-i2FQ5nk%R{oTv}%I1wou; z)1KGw_bKm4Dfe*i+3MRo=}{995Wf(8dLDq&m8b8SKQ>R5F+VcNiM5D({HCzd1IuyC zIP2Z!Y2e$$|8$wCXAF$)4ZRS4>QK8z)W%r9I>d@HkMQ$yS=*crf$gwIJ@%NRN$>@nF|T?3R)o1x#lx!BeQ)#$do26rW0i1o+wKzE=zHn# zt}dUEA8nHS03{vviF_k`YTfm(+SAG=7PRY0t!=9alP;V?4uNl~b7>+pFQ8 zfvl^sj4xl+*TetoK<=Ysg?hHryM)mw-c|LW@~^}}^Rlcb$6CdEY}vcp&Ot4wa4l;k zcJfd8``~P40@lG{oBAc)*BMU~=LEjLw_Na%b;GFM?-H@BbKB=UFkj)Bje=i}PtGlo z*{^o(85r0zpWAnmkPjo0@LRm`T7AcN9pg;#Z%OOGd3>jt=QUdBy+0OOD(s#2L?9)l zKIS)(zgwQ=@o0+ikA_^=v{fx>?7B1Jy?$htakOb}aU7%GH97BXvw>Cd(@WeshA<+K{~?dKH^*lb}9M^Qsa0a zbJ}w4v&2fE0~Fhm%W-)?VqXrYLwW~}dbPQGLC>&LCZvKq-Ld^+w_$nG9JkwW3qdI_ zvM8HnH~O-{z6YuvKiVgIMW_|4b`RtyLq|dMc_Tg4_HuOi;A}SmmLacG-ci)n>LlU#$%T zQ26;(!Dr#a5RG_L)1m>E%HQWaLTsq-@AlgtTI0c)=yvu`JhFKs&Ip?94O|nr-2_kY zz>#&xhkTSAChXO`lYj5gu3Kod1oo9a_L3ii+u*OVe`(L2pW5N@m5ut?F!9jj+-twJ z+%Q|oX+htJX-Zja-DO3c@a2FHB=D}y>t627p^oV55-miDa#Z>=9uNKn*;&qVbIBnO zj{c+`38Zeh{S45DmZN`W&wXouLCRfD;+|DH>9gh~6SU4~a7LWRBTt|QDRY%jX8utA zd)Zz%&E+yScT%2vL}M(K^GiqiK2rQ2?}%I8k>b#Zes%44Zv9%*G~LJCb@wz58m~`W z02j;CDS2Q@C&Np!Zn=|>*nJKs`FX7?_HX2oTb(A_fwmqm#Q1LI+~Yo8T{BAhzKtc2 z$J1lD%W?A>myDdBACLXmu&OVxi{8tXsBBG2dP;AUIh>5+JoCkL>+TJjsKq_%Fv8PP zPj2u)oasov%Zcf(rMFCBMf(z<)8Df8-W0~LL&P&t=ec1JW6x@vamD}4LtnBa^TnhfnI8+&Ot{9IdlA0+#LYL zDqqd9P|v%UD$JY7Q8}}FduXs1wtkNoi&ceNM@RpBPx;J?1Yha@g)| zTDcgttiIEkhm9Wl8O!%Xm9b1|r?ai- z;86bL)N1x{SyF!U*-OiYq%k*MzGuLl-`+8;nDM^(nI{=9Zn3h&9-EcNVv#RG3m%;D z(#s}3@@OT5iWb1klVLpZ%Fhe5#Wv+6!&pm7UVDCSnqx|u?baI<)@lw5uH7cCV$>Q_ zJvn%zQ(Eyt#^dHXWz)S8nUmWxj$PMj_}h?iacMio=%2dhr!JG}`oi=LnNzQ=M&xzZ zv=APTpQliAWk17k+dKzFdDIEE7yWGClbt^KTYA(nJeN^g2P1DXFE5A8#$3)QWI25O zAB-QV50qLl%iZoXFM?t0GkCscoUM_RlKDp_f&h> z0k?6gxcV3IB^h~qhhmv$de!!_KmR%wb1AlN4jB%w0Os>vGe?Rh<7z~X-)gw?2;1~D z^0=i|hkN^SHSL*&tg>3NF`M}Ec-OTb?rYx-J;d`%a*t!ka%X}|{-)R~{o2+{WM{^| zFFk)?kf!1L-FY$FiBy2`V*Qq=(BeQ!TkSaXk@S6T0-9dg$!=2E1D9(Ni=jz+%XTlS9MVdN2-cjx4>@hiMT z{jF1dddpz+oynXwNX0YeBHqg*k@cTn&o#5?>_-REfEHRYTI@!Q40ZVIVU_R+`c;;j z2DS3t^d{hOzBTv}OW%n(=U3!j**fq<9?-eN|A%huKcsfhx;5>AWzzjDS)LSqKegEU z&?*bQACn&9Cl(o88N8nd_KCf}y!w;P~7u w3!luj`!A|?;ptzt)7Q#+%QhjWjtSiFuHLhM|G4^x)o<@~ delta 3017 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 delta 737 zcmaiyT}V@57{}kUt+TVa_Tf&;eKfW?Waq+R*hSd~&OR&|HSA7_W@)ex+teaQ9hOGd zYyXRL7m)-Z1;@SO)IdfTAq280VnhW=byF8(bk$YwhAkRJygVQ8^ZuV7&kN6km-
14K-nM4jUpI~-`9A>_&aqoof z{Vrq{&G1Ts)<^tUos*jX)iS)@eUA9x|7eH#jTPSZpryuYn$*zHB9fPotOjT)Q1zqt zxS7UJEO9h8Fce1V6p!^-8k0D1z+^CvhUKUV#@rTfZqE6Qk?$0~6g@IZl?O3X4Fdh>Ag&yJz zNL6?L4?GBQ<<|s(`Hj_CrFWh)=3Wa0^$@4&P?#5yEt?eeBFDQ=*Y_yGwr!eaeJoyL eXR5X>82;c^?ngKQ#q&bp-6*%2DFnZ8vgRkxgzP5( diff --git a/settings-parser/Cargo.toml b/settings-parser/Cargo.toml index 958bf84..c76be67 100644 --- a/settings-parser/Cargo.toml +++ b/settings-parser/Cargo.toml @@ -1,6 +1,6 @@ [package] name = "tw3-mod-settings-framework-parser" -version = "0.2.0" +version = "0.3.0" edition = "2021" [[bin]] From 982103a88765e3bdb128d4e8aea731a4ea50648a Mon Sep 17 00:00:00 2001 From: SpontanCombust <61706594+SpontanCombust@users.noreply.github.com> Date: Mon, 10 Jul 2023 15:12:10 +0200 Subject: [PATCH 2/6] Added support for purely cosmetic vars (only SUBTLE_SEPARATOR for now) --- settings-parser/src/var_type.rs | 16 ++++++++++------ settings-parser/src/xml_parsing.rs | 5 ++++- 2 files changed, 14 insertions(+), 7 deletions(-) diff --git a/settings-parser/src/var_type.rs b/settings-parser/src/var_type.rs index 595980e..466721f 100644 --- a/settings-parser/src/var_type.rs +++ b/settings-parser/src/var_type.rs @@ -4,15 +4,16 @@ pub enum VarType { Options, SliderInt, SliderFloat + // SubtleSeparator not included as it's just a cosmetic var } impl VarType { - pub fn from_display_type(display_type: &str) -> Result { + pub fn from_display_type(display_type: &str) -> Result, String> { if display_type == "TOGGLE" { - return Ok(VarType::Toggle); + return Ok(Some(VarType::Toggle)); } if display_type == "OPTIONS" { - return Ok(VarType::Options); + return Ok(Some(VarType::Options)); } if &display_type[0..6] == "SLIDER" { let spl: Vec<&str> = display_type.split(';').collect(); @@ -58,14 +59,17 @@ impl VarType { } if (max - min) % div == 0 { - return Ok(VarType::SliderInt) + return Ok(Some(VarType::SliderInt)) } else { - return Ok(VarType::SliderFloat) + return Ok(Some(VarType::SliderFloat)) } } } + if display_type == "SUBTLE_SEPARATOR" { + return Ok(None); + } - return Err(format!("Invalid display type: {}", display_type)); + return Err(format!("Unsupported display type: {}", display_type)); } } \ No newline at end of file diff --git a/settings-parser/src/xml_parsing.rs b/settings-parser/src/xml_parsing.rs index e259e45..332e502 100644 --- a/settings-parser/src/xml_parsing.rs +++ b/settings-parser/src/xml_parsing.rs @@ -144,7 +144,10 @@ fn parse_var_node(var_node: &Node, group_id: &str, cli: &CLI) -> Result vt, + Ok(vto) => match vto { + Some(vt) => vt, + None => return Ok(None), + }, Err(err) => { println!("Error parsing Var node's display_type in Group {} at {}: {}", group_id, node_pos(var_node), err); return Ok(None); From 3c75e68c15adbf780313ecc098803993f3865ed7 Mon Sep 17 00:00:00 2001 From: SpontanCombust Date: Tue, 11 Jul 2023 22:28:50 +0200 Subject: [PATCH 3/6] refactor sample to not edit vanilla file --- .../content/scripts/game/r4Game.ws | Bin 121182 -> 0 bytes .../content/scripts/local/difficulty_mod.ws | 14 +++++ .../scripts/local/difficulty_mod_execs.ws | 48 ++++++++---------- 3 files changed, 34 insertions(+), 28 deletions(-) delete mode 100644 samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/game/r4Game.ws diff --git a/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/game/r4Game.ws b/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/game/r4Game.ws deleted file mode 100644 index 053d112d9f117467793c0feea574ad4fecbb9b60..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 121182 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 diff --git a/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws b/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws index 18f3d09..ffa9b56 100644 --- a/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws +++ b/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws @@ -36,4 +36,18 @@ class ModDifficultySettings extends ModDifficultySettingsBase LogChannel('DifficultyMod', "Preset " + IntToString(presetIndex) + " has been applied" ); } +} + +function GetModDifficultySettings(): ModDifficultySettings +{ + var settings : ModDifficultySettings; + + settings = (ModDifficultySettings)GetSettingsMasterRegistry().GetSettings('ModDifficultySettings'); + if (!settings) + { + settings = new ModDifficultySettings in theGame; + GetSettingsMasterRegistry().AddSettings(settings, 'ModDifficultySettings'); + } + + return settings; } \ No newline at end of file diff --git a/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod_execs.ws b/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod_execs.ws index f92d40b..3151514 100644 --- a/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod_execs.ws +++ b/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod_execs.ws @@ -1,61 +1,53 @@ -exec function settings_difficulty_init() -{ - var game: CR4Game; - - game = theGame; - if(!game.difficultySettings) { - game.difficultySettings = new ModDifficultySettings in theGame; - GetSettingsMasterRegistry().AddSettings(game.difficultySettings, 'DifficultySettings'); - } -} - exec function settings_difficulty_easy() { - theGame.difficultySettings.general.Reset(0); + GetModDifficultySettings().general.Reset(0); } exec function settings_difficulty_default() { - theGame.difficultySettings.general.ResetToDefault(); + GetModDifficultySettings().general.ResetToDefault(); } exec function settings_difficulty_hard() { - var game: CR4Game; + var settings : ModDifficultySettings; + settings = GetModDifficultySettings(); - game = theGame; - game.difficultySettings.general.enabled = true; - game.difficultySettings.general.healthMultip = 2.0; - game.difficultySettings.general.dmgMultip = 2.0; + settings.general.enabled = true; + settings.general.healthMultip = 2.0; + settings.general.dmgMultip = 2.0; - game.difficultySettings.WriteSettings(); + settings.WriteSettings(); } exec function settings_difficulty_toggle() { - var game: CR4Game; + var settings : ModDifficultySettings; + settings = GetModDifficultySettings(); - game = theGame; - game.difficultySettings.general.enabled = !game.difficultySettings.general.enabled; - game.difficultySettings.WriteSettings(); + settings.general.enabled = !settings.general.enabled; + settings.WriteSettings(); } exec function settings_difficulty_read() { - theGame.difficultySettings.ReadSettings(); + GetModDifficultySettings().ReadSettings(); } exec function settings_difficulty_write() { - theGame.difficultySettings.WriteSettings(); + GetModDifficultySettings().WriteSettings(); } exec function settings_difficulty_log() { + var settings : ModDifficultySettings; + settings = GetModDifficultySettings(); + LogChannel('DifficultyMod', - "Enabled: " + theGame.difficultySettings.general.enabled + ", " + - "Health multiplier: " + theGame.difficultySettings.general.healthMultip + ", " + - "Damage multiplier: " + theGame.difficultySettings.general.dmgMultip + "Enabled: " + settings.general.enabled + ", " + + "Health multiplier: " + settings.general.healthMultip + ", " + + "Damage multiplier: " + settings.general.dmgMultip ); } From 01d49157b18ef42766e6fd97d48e5d8ef0aaf094 Mon Sep 17 00:00:00 2001 From: SpontanCombust Date: Thu, 13 Jul 2023 22:48:48 +0200 Subject: [PATCH 4/6] fix typo --- .../content/scripts/local/difficulty_mod.ws | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws b/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws index ffa9b56..ee91b2b 100644 --- a/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws +++ b/samples/DifficultyMod/modSettingsFrameworkSampleDifficultyMod/content/scripts/local/difficulty_mod.ws @@ -18,7 +18,7 @@ class ModDifficultySettings extends ModDifficultySettingsBase { super.WriteSettings(); - LogChannel('DifficultyMod', "Mod has been written to config"); + LogChannel('DifficultyMod', "Mod settings have been written to config"); } public function ShouldResetSettingsToDefaultOnInit() : bool From 8567590e4d9b69d463c49b96f8fea5932aff58ff Mon Sep 17 00:00:00 2001 From: SpontanCombust Date: Fri, 14 Jul 2023 00:10:49 +0200 Subject: [PATCH 5/6] update README --- README.md | 64 ++++++++++++++++++++++--------------------------------- 1 file changed, 25 insertions(+), 39 deletions(-) diff --git a/README.md b/README.md index eb3c79d..3903857 100644 --- a/README.md +++ b/README.md @@ -61,66 +61,52 @@ To see all the possible options that can be used with the parser use the `--help 4. Add generated script file to your mod structure -5. Let the framework know about your settings class +5. Write a convenience function to get your settings object -```ts -public var settings : MyModSettings; +```js +function GetMyModSettings(): MyModSettings +{ + var settings : MyModSettings; -mySettings = new MyModSettings in thePlayer; + settings = (MyModSettings)GetSettingsMasterRegistry().GetSettings('MyModSettings'); + if (!settings) + { + settings = new MyModSettings in theGame; + GetSettingsMasterRegistry().AddSettings(settings, 'MyModSettings'); + } -GetSettingsMasterRegistry().AddSettings(mySettings, 'MyModSettings'); + return settings; +} ``` -First argument is the settings object itself. -Second argument is the ID you want this object to be identified with. - -The `AddSettings()` function needs to be used only once. It is up to you when and where you use it. It can be done with Bootstrap or for example in player's OnSpawned function, your choice. The registry will hold the settings object through the entire time the game runs and even if you try to add these settings multiple times with the same ID given, the framework will detect it and won't add a duplicate. +The `AddSettings()` function needs to be used only once. It is up to you when and where you use it. It can be done with Bootstrap, in player's OnSpawned function or by writing a short function like above that will do this automatically on the first call. The registry will hold the settings object through the entire time the game runs. The second argument of this function is an arbitrary identifier by which you will later be able to retrieve settings object with `GetSettings()` method. -If you don't want to you don't need to store the settings object yourself. You can use registry's GetSettings() method to get access to your settings object. -```ts -// creating the object without assigning it anywhere -GetSettingsMasterRegistry().AddSettings(new MyModSettings in theGame, 'MyModSettings'); - -... - -var mySettings : MyModSettings; - -mySettings = (MyModSettings)GetSettingsMasterRegistry().GetSettings('MyModSettings'); - -if(mySettings) -{ - if(mySettings.tab1.option == 1) - { - ... - } -} -```
6. Use the settings object in your mod ```js -if(thePlayer.mySettings.tab1.toggle) +var settings : MyModSettings = GetMyModSettings(); + +if(settings.tab1.toggle) { doSomething(); + settings.tab1.sliderInt = 50; + settings.WriteSettings(); } ``` -From the moment the settings object is added to the registry it gets updated whenever user changes settings in the menu. You do not need to refresh said object yourself, but if you really need to you can do so by calling `ReadSettings()` on it. +The structure of the generated settings class is meant to resemble the structure of the XML. The class contains variables analogous to XML's Group nodes. Those variables in turn contain variables which are equivalent to individual Var nodes. Their types are appropriate, for example a variable for TOGGLE will be of type bool and a SLIDER variable will be either int or float depending on whether said slider can produce fractions.
+Now instead of using CInGameConfigWrapper's methods to access user configuration you can use this dedicated settings object. -It is also possible to change values of these variables and use it to write the data back into game configuration. -```js -mySettings.tab2subtab1.anotherSlider = 0.8; -mySettings.tab2subtab2.anotherToggle = false; - -mySettings.WriteSettings(); -``` +Whenever you fetch the settings object its data is always up-to-date. You do not need to refresh said object yourself, but it is possible with `ReadSettings()` method. +It is also possible to save the data back into user configuration. To do this, after you assign new values to members of the settings object, call the `WriteSettings()` method.
-7. Extend settings master +7. (Optional) Extend settings master -If the basic functionality that framework classes provide is not enough for you you can extend the settings class generated by the parser and use that child class instead. +If the basic functionality that framework classes provided is not enough for you you can extend the settings class generated by the parser and use that child class instead. The most common usage of this would be overriding `ReadSettings()` method to run arbitrary code whenever the settings class gets updated. To see all the functions available for overriding refer to the [class specification](doc/class_specification.md) or code itself. From 823e60c00f2a766dfb2e03f1d7605443b6e1b7dc Mon Sep 17 00:00:00 2001 From: SpontanCombust Date: Fri, 14 Jul 2023 00:14:46 +0200 Subject: [PATCH 6/6] fix bad relative links --- doc/class_specification.md | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/doc/class_specification.md b/doc/class_specification.md index 05a6dc3..3baf394 100644 --- a/doc/class_specification.md +++ b/doc/class_specification.md @@ -1,7 +1,7 @@ # Class specification -## [ISettingsGroup](modSettingsFramework/content/scripts/local/settings_group.ws) +## [ISettingsGroup](../modSettingsFramework/content/scripts/local/settings_group.ws) Abstract base class which is an analogue to settings groups in xml. Child classes generated by the parser store settings variables. ### Public member constants @@ -14,7 +14,7 @@ Abstract base class which is an analogue to settings groups in xml. Child classe - `ResetToDefault() : void` - calls Reset() with defaultPresetIndex -## [`ISettingsMaster`](modSettingsFramework/content/scripts/local/settings_master.ws) +## [`ISettingsMaster`](../modSettingsFramework/content/scripts/local/settings_master.ws) Abstract base class for the settings class generated by the parser. The child class generated by the parser stores instances of classes extending ISettingsGroup. ### Public member constants