From 9a35471143fcb0881bb3012b3a36e66503de7c80 Mon Sep 17 00:00:00 2001 From: fjay69 Date: Tue, 1 Aug 2023 11:28:30 +0300 Subject: [PATCH] Projects merged into one solution --- GameMakerStringsEditor/.gitignore | 5 +- .../.vs/GameMakerStringsEditor/v14/.suo | Bin 68608 -> 0 bytes .../.vs/GameMakerStringsEditor/v15/.suo | Bin 55296 -> 0 bytes .../{GameMakerStringsEditor => }/App.config | 6 +- .../AssemblyInfo.cs | 0 .../{GameMakerStringsEditor => }/Class1.cs | 0 .../Form1.Designer.cs | 0 .../{GameMakerStringsEditor => }/Form1.cs | 0 .../{GameMakerStringsEditor => }/Form1.resx | 0 .../GameMakerStringsEditor.csproj | 6 +- .../GameMakerStringsEditor.sln | 22 - .../GameMakerStringsEditor/.gitignore | 3 - .../Properties/AssemblyInfo.cs | 36 - .../Properties/Resources.Designer.cs | 71 -- .../Properties/Resources.resx | 117 -- .../Properties/Settings.Designer.cs | 30 - .../Properties/Settings.settings | 7 - .../{GameMakerStringsEditor => }/Program.cs | 0 TXTRCut/App.config | 6 +- TXTRCut/TXTRCut.csproj | 6 +- UndertaleTools.sln | 43 + WinExtract/.gitignore | 5 +- WinExtract/.vs/WinExtract/v14/.suo | Bin 54784 -> 0 bytes WinExtract/.vs/WinExtract/v15/.suo | Bin 65024 -> 0 bytes WinExtract/{WinExtract => }/App.config | 0 WinExtract/{WinExtract => }/Program.cs | 1056 ++++++++--------- WinExtract/WinExtract.csproj | 65 + WinExtract/WinExtract.csproj.user | 10 + WinExtract/WinExtract.sln | 22 - WinExtract/WinExtract/.gitignore | 3 - .../WinExtract/Properties/AssemblyInfo.cs | 36 - WinPack/.gitignore | 5 +- WinPack/.vs/WinPack/v14/.suo | Bin 46080 -> 0 bytes WinPack/{WinPack => }/App.config | 6 +- WinPack/{WinPack => }/Program.cs | 0 WinPack/{WinPack => }/WinPack.csproj | 5 +- WinPack/{WinPack => }/WinPack.csproj.user | 0 WinPack/WinPack.sln | 22 - WinPack/WinPack/.gitignore | 3 - WinPack/WinPack/Properties/AssemblyInfo.cs | 36 - 40 files changed, 674 insertions(+), 958 deletions(-) delete mode 100644 GameMakerStringsEditor/.vs/GameMakerStringsEditor/v14/.suo delete mode 100644 GameMakerStringsEditor/.vs/GameMakerStringsEditor/v15/.suo rename GameMakerStringsEditor/{GameMakerStringsEditor => }/App.config (60%) rename GameMakerStringsEditor/{GameMakerStringsEditor => }/AssemblyInfo.cs (100%) rename GameMakerStringsEditor/{GameMakerStringsEditor => }/Class1.cs (100%) rename GameMakerStringsEditor/{GameMakerStringsEditor => }/Form1.Designer.cs (100%) rename GameMakerStringsEditor/{GameMakerStringsEditor => }/Form1.cs (100%) rename GameMakerStringsEditor/{GameMakerStringsEditor => }/Form1.resx (100%) rename GameMakerStringsEditor/{GameMakerStringsEditor => }/GameMakerStringsEditor.csproj (95%) delete mode 100644 GameMakerStringsEditor/GameMakerStringsEditor.sln delete mode 100644 GameMakerStringsEditor/GameMakerStringsEditor/.gitignore delete mode 100644 GameMakerStringsEditor/GameMakerStringsEditor/Properties/AssemblyInfo.cs delete mode 100644 GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.Designer.cs delete mode 100644 GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.resx delete mode 100644 GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.Designer.cs delete mode 100644 GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.settings rename GameMakerStringsEditor/{GameMakerStringsEditor => }/Program.cs (100%) create mode 100644 UndertaleTools.sln delete mode 100644 WinExtract/.vs/WinExtract/v14/.suo delete mode 100644 WinExtract/.vs/WinExtract/v15/.suo rename WinExtract/{WinExtract => }/App.config (100%) rename WinExtract/{WinExtract => }/Program.cs (97%) create mode 100644 WinExtract/WinExtract.csproj create mode 100644 WinExtract/WinExtract.csproj.user delete mode 100644 WinExtract/WinExtract.sln delete mode 100644 WinExtract/WinExtract/.gitignore delete mode 100644 WinExtract/WinExtract/Properties/AssemblyInfo.cs delete mode 100644 WinPack/.vs/WinPack/v14/.suo rename WinPack/{WinPack => }/App.config (60%) rename WinPack/{WinPack => }/Program.cs (100%) rename WinPack/{WinPack => }/WinPack.csproj (95%) rename WinPack/{WinPack => }/WinPack.csproj.user (100%) delete mode 100644 WinPack/WinPack.sln delete mode 100644 WinPack/WinPack/.gitignore delete mode 100644 WinPack/WinPack/Properties/AssemblyInfo.cs diff --git a/GameMakerStringsEditor/.gitignore b/GameMakerStringsEditor/.gitignore index ad3bdac..5d2b667 100644 --- a/GameMakerStringsEditor/.gitignore +++ b/GameMakerStringsEditor/.gitignore @@ -1,2 +1,3 @@ -*.pdb -.vs/GameMakerStringsEditor/v14/.suo \ No newline at end of file +/bin/* +/obj/* +/Properties/* \ No newline at end of file diff --git a/GameMakerStringsEditor/.vs/GameMakerStringsEditor/v14/.suo b/GameMakerStringsEditor/.vs/GameMakerStringsEditor/v14/.suo deleted file mode 100644 index 9107941aea25bc9d4adafd4435989774221f812c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 68608 zcmeHQdvILUdB5@_*kA$#0)!Y4#1I@?+m&`#4;us0>S4z=7DzS*i`XmaYAtKED|T1N zGBP+os7uYOg+M8UQUZ0tW5P_JhNd1vGwoj~cHB%m=`hnWoj#bh8KyAFKj8j;_uQks zd-uLpTCKFwJv-l?`#ASJzVrHC=bV!tT<|Y1zIoZdDkgV>vRL`z%yQ*RhUbfLP0-x= zigF$l$jGiUg0G2klz-1@FUFmS7q!Y`{-D{V>=ep(r4ReE+8D@!Nq`%0IuI;-Pv zbzFJ6Y9+#*SR(>=BE^)lPuYaj2XNJy`D*${holN&@c+O{+!oL{6 z_%4Kh5#TJqgMiflhPg%eiGymuRe-Aj-vC?#VC`QE_$J^wz*>MY%|_fa9hG6gWm~Y-nQ${WS(v}-QR)x9{t&v z>7D#$Cj3=Mi@o^(;2yvP;2?nYe;?qxfO7W#V03U^_Wy4IkCod0WxJE(0NeAIQ6Bl+ z*#G4-hB+5umH@sEVE<>Im;ImNWdA2#*#G&A-%X|e^IPfs{x31%?tAI~90TqLux?mS z-vc}Z_Mmcn0t%fM)@J3V06i zJm3d_7XW_-coFdDfR_M_=T+T5s{22J|6~37HTbXV*9_~s>0=-X`Xdf1Ckwnz#jVik zpDKLJ+<1v&5d!s)S%7n*e@K(nieR??q<66YOt>m@*FC**)deq%WZ3MYsYD_t!(VR)-M%8k2H!u)X*65)Ny>B6X zj@Jy~HGTFS8I#}tWy@KZzTf`^|G7~6e+xL?lrp3YgWFBR_saLm@na>%AJQ4**}RTF zKAN#tLy&4am#Ry2wIHQNN^DzETj{RQKCm%$5mu?4A=+UF12TJB~HC`!*Bn8A}lV0)|}7kWS&Ps+cTHl0ndyvIiTZ%1pR)GdZKrvmcnF{>7r z7Zqej#rOYW(sz?bUJLw_misDTCdyBWlr&&Czu1#^Xn&J^Zz}1#(ckrxDOq2z{;Tnd zZQ5)4hY*&0ADvtJ4I-HBzifYO(_Yhm1Y!SOkI^lCw;ni^`R8Gz{gIx27e?Pcz14Hh zVJ}E40n9@A<5B=Kr069aB}TPbfKl84{8PrtveW6&I(mPBw{re*D}R$?Oo~GMuSOUS zXI|5P1!4b9kJl}Iaz9QE{cp1DUeo^}BK*`T(jwn6UFnMav?Rf0+VqQ!&<+0{>c43G z`}JRJEjfpu$@=#?{uk5#51}|E9RG`MeSPJ+OfO86Y zB+~Y011R4jk3%|>@+Q)|@>}}kLFkhXx)?xxp?rTCuBj)G_tLM%v#S7C1HJ)R1-J%q zE#R8~@`#*U7@qPi`Ze$afZqdfW}tkq4iEy6Mv4F!j&uX(ZeFj0zh1xI0G~R*8}<8U z_$~T%EBrPxw5wHpHZNO&07Qj}(&46uyPQWdITLE2wZoqZ`Y3thnI{~)??f~op z^Z@PzdD1AsVSFJKU`4=@Bs0EPicKngGd$O0&*B&E!5ki zFb3EU7zZ2x@SPDJ(4UdoAb&@Wvj^Hxasnz+=|yVelUn%z^2Zd|LXLwUTZgb6_$mt= zjUsFh%1y3O#6~_=o#d(+uk+guV1fMSR`^3&9F#(&5kK|e8PrL?mKJsMOt+ZO?Z8wT zvDc#2h%&HM6VD>Gzpt8JX^#H(ymwZrZ*6|`j?X%GJrOx_R+0HXKF#zw?q2@kiQm2Y z>gZ=j7e95{j4iwJ%eu{K`03FpP;#NfuEZ5bfdhJd6MMyC-@UGWHqG)Ewl()OOV^s( z`c70-{snh!tYr)fXUMWnKTH$9apvZwc>vF zq*SI*It=-vX8$B{gy!Swu0V*lIU&P&OTQc8wjzHq%z2!La;{!apK&q|xi|J#Rd~gj zjLsBDq%THB&XY!m^e6j{*Yx>4X(>84{)@DYlOz94nu&Cj z*Yru#zo17-`BE?D@VH*;+faVW-uL2peo6HYOdj-~MVFtl>WggBZvmcF*!sIw}J|x{5v22l>d{GqWp*Q zXEz-LVm+76);XWhBE`*3 zSO3z2vAz$ZJ!w*ocpUqrq}xgFC-cSjN7(`84PMJnTA@~tz$|B%IymMgf!Wz@9)SKa zZ@ko_b@W(QtOL4yeOEWIFbb?^CpmBOuAGtWbdc1)vMo`*;aBe?Em+}E6R9|%uo(|`QO5p{}uMmnUtRuw(c7qIy`#%<;$wh{l(sY`1$5F6tfqMAWqWY z^5)+-LXmPb+6oJq>5DJDbo88~zgaraG4S%~_a;tTmB%>#z46M!OO5i|(o0y4BV1wr zDTm-FJ5|@VwY{6PM*v!pHc-_$Imwtts}8|3WQR^m3L0hu^b=u(kBD@cIHwtzi4`2} zZn=51L(K-dQ>jE|ZS@W{of%9eH-rLV{AxpWwQH-RqlxTjTHTOTN3-czVr_NjXm4V$ zZ?ihyof=Y;8+wDGfyh9^Ky7V*Bp3_DmNNb;v}kv9we8QUNk$pa9(1YM>|ipUVUR1Y zzilwtpBj_TZW!9VyCv2)g!k=(YNCJf6N|dWGg);w5KSc#YF`$yWC9&(QcVx`1zHES z2eI_{p1NJT^nhL2G`?P2J)G%Fr4xg_xdMd)LH<0HrlBDg>5J6YHig1!u(9dRwYvm{ zI+3+lT-_Q=;(u68W&_(d1-56@w9Nn7YWsl9NO}8DVgEmP&A!#of4%P~D=+=K_gDPo zU$H6q{U0=;)K77Kb{hYR8?6ibe@nEh)2zdK7P8rIw{%6bsEg^%j^%A##o$7W)*~9% zxlj4g&bQl|urgT=LTrV5E3EXgEW(mK0Iq_Ty+asj_hFu*{6IR?d6fL;t!QP`)YAS_ z1&!N`Fyl%!%n6;Xu1S> zRR=A69i9Xy?OLf{6!{+3IBhV~d5-VLG>NDRxh!?#!g0bN$CpAb_CYI|Uy|bH&;a6P z++Rg}l>d(dYa`&oL&$5dCUap9RcPhe7kNcJy|9qT&zsaKXs_|t3W#dDa-;l+TGXwG zw@+((teFAu_j3O1v6w-7^cgdVP}I(ZfY~O*LK)2f@;r)KU<@KR%r|8Qlov72lqS%z zZFjV6*~ChUaRXGf0 zLW=37E)x}6!u%OLFxf*np1HSRTKvt;7VN@$A>YpKp(?>4%#3xIQFdXTTQ*_z8o+oV z=9Azjbz>ht){=T|%_Hmo_oF@EXRb*l8l6>1o-14at!D=3QjLyeo>{YL^?(1h;ubX-!)hrL&t|XxD`_XaG6q zDsghB-bzaw`pPJ+xfjz8jWjWBaoB5F&+cP#rM6^AMRG5Iq;i*QS;+%Q*n>J2l!!ea z)B{aKm&WVYf_D?#F0I|G!S`|(gak%K@+o5HKT2rG8HsiIa}& zv_JCgzl{6O`1W7M{ZC1)`u1O#*c{w+?Z4!z2C1!glKdL^M6YxiZC%~MR+-9I$#P9I z$FTxs%ctsO2&+<;pWkHu%sDYthvThp|54fYAHM#dyN~<&e_#La>;HRnp4iv_`}%)- zovyt-r?3C__5WgTjvO~3ZGC;ZRJ8M+l; z|C@yco3H=1vofnxt(mX?b+aGz^}j;OJJ)SOef@9w^}kb<|L4;Q(#j}j*XwR?#9bJs z9*bFKUCBCw9QFjgRj4zNA*@P0z0qx|_3x(Bk=%~2|1r1nxuyS^YW+{W=gOAh_kX*! z5asOuv$+Dq-nxxzV9YJ7FtpWZICm}Wy>i;da$A+Kw5wtK`sWI}*4tu z=m}^y1LbF-_ z`Rk9$F%Gy((y58h?+^ChSoMtgp+(_Z^L#7_`G{4CD|JM)llT<&2y;j?7UVhr>2r^Z zF9U;IJuUV(_PW2tQhYU_S>`9SU7A}VHE+Rw7#-NXVk)~_oH=tAVjRJ&mV*61_mlL# z%Y`@(L+;j)D~rFwh0_ifJg>tFXSw|iW@~qgQsvCw*@Ao1&ZnI%O4Ty_T`l}wEv)tz zD&@`{M*d9Fu$<%UG^_K29&;*TX?U@@NQ*m_y7Fahb}e=fTJ!XI>vGhmZ`I;kwK(xheN|DsQE>WV7VLjbf4#4Emgh{9O&ow@01V zemQ@v8p=VVas zyh`P7>^SwpK5PzYg@ySmN%g7P@=>+(byjO_>x#DF#Fq4MZJ;kxz3b$&Cy$@}>r>x7 zb^obDrye-@?y37v9zS*H&awV=J@LWp-qGHk(PY1x&c+gImS-uMZ{xAzPgV-m_6~#^ zBlWTVP<>bpMee+F5$3Api}AOFfAj2sq*5S=XgNzi#cEkJH9QhatLbGMW0}2Og9lV) zv9j!9{j8{M>HfiFEHN1dA1ce`xgtw=VH1*L={dUx7TaES#;(^M^Kx6#Q}iKLil-W(Q`%EKVXB#hQyAteHq+mJ??o7M?TU z{I;00Tzm9f8BcNW`n{xI^e8khtDXJ21K0WUK{v|6{gVQi)u}T{p>$khLZFjz@iYfg z25Dd;39H!afQ@n7b8oZN2zN7}7jJp;D(H^03kWb7ktO{lPW9ut5sdpI#6?;SpXdaY z*Rz8c3Hr-x@csSTNv7hQuQ+nf54j3M(0M%BPnI`>H^!5@iVMv%z0!zTo(g)eRy2X# z*Q!J=;#xb~tGBb!f_9cg9P&I5=eNb>t+>#v#^ZB7$8&SPJ+rRB3!UlP|B2IViaGf+ zzo+(rONe2V%1rjY?P6?EHuBhJ&0qic zg9~52?Yu3@$#*~5dHCvg+Fo1ttG;J`yZ>^2!m+q<;G*}xc>jtmKYYIbji;~pO_N$USJ?!kJ%CKRF_Kb|4mh|^)~aiUNy zxEyhIEKiLUC&uzT;TnXC;1>k&%UYZo8^Kpm<)C)P(U>XSZDN(6Ayu(Tp63#o^CnLF zW)7Dr*CL0-=B@npUtGoLpK4`);;nE0IeTXmFFgBC-~P`@(k0KRmU3NxSGz*XO0PS7 z7ut+UtV(uAn_}@tn^E8X&xno6m$Vr!)j zGD{SthDn}yYaSVmynwhC_Fr;tn7&^M^Cs#}efzJ?>Uei*NKI}iG?1Ia_FrsqzW!g> z3oJzazpwu(97BEmkEUA6K+Tm?=`$?d6V-XGE}FJ~h!&B$jK zy6C%6mMHR0YYS>(&V_Fu^Lo5p54AtPKOhVzgj&4=Mfa+YFK!D+8Yh~&_Q7lRt$zOD zs&ZwZ-JsVeZZg1I91{)gLju5KMtQI6zQ4Ub`+uwdW9hHoUKiZ?F%X0`kok_!jIIHw zz7P+VDF0K{x-N*{JuOYa_V$M6#+v#_ZL}ub(h{j@Y>PD4v_~SrNJ~>~DAE``IMERs zR=386)O1%iJ(!GV+WH5xsdSI^V=T5ANvHNrcwbjDtPV5sjEGznk;jpy#p8jLSkE&t zaZhu7v>_Zu-h*x7=9+MOw7#aXvA($`SRbxy3yabLjkt2WS@>lX2u z99RwAuUzS@jj44FvHIR%jT#C^YA|*;)-=`k57b1|*g&W$tg4~bZx z@61e75YzOGNAI;Egd%kj4-H`*8Uh)#*4dmi_s<6VKxSd*FP?t+g?~K%vD<(3`n&)9 z^XOebge$YaFeX>HBHofjFD2!Em2AzWSie7&+}fr)!`*9I?O)LjV-RMTiZVH?vO3MP zs%8Jl|9+AY+xY?ca7EFWKbKmz%Ks`zDQIgxq}jsrj4#?#@6b$KX~7?FXWjn`IesJSe=-J#A2dc{a0ivj;v9}AsGG-$3|a2 z_32Ne+m{^fJa+8LH;JfxcK^&7psMZOKduQrzVjT+*Q^?@yyv%U>$1 z>cOTJD8~W495W-L`k5|&nyr;X#kCY;-4h>eeJ3g^|5ml^r4zDaTD!-0ymRdFU!J<8 z>A@#!pF6-X<_=ugJB=&9jN_IWyJF4Hy))YWjOklpM^U&4Yocs>+=-i@u9 zBenwV44tZM1>G>Dyz$DzOE3TM#P42xb@a2Ni=R53uk_}rDfz1r<@a)}so8esERE_i zuKqN~m_OqjpXU5QNzqjDFX=xgZJn?GbJ9f${hhV`kM_ULnoeK;R~r3aXj1>TfMlZ! zP-ifkGOk&W5iK0qE(90`{oexW#J=uNsKm>qlPgy`R#L(ub$@q|Le*T&i6ne(9PjJ? zTz0Z8MiO30y1!MTC20Tk_~-61tqW&<@O6Jy76EfY_eZ*@()EAF&9QCNKQ@o0(%7pN zn`X7=>;7CUVm#>XI1>8$KWOjzA#0kh{_k^$>+c6b9{@ZE_#S|YO0yK-zn`BN@b$mN z8qymj!gl%*U;j&~xfjg(`d_Ywk=lfeC!85|migKQ=N-3u^c~HLH^RV#VB>uKuN%&b bt05~rC3QT${?}QL=2i<NCyZws!0^aqPrNYPUIT=NQMyG}D>paGXqYOlH!wX*)?K$0TmjnI`J@ z?Y;#bfCu0KJS5Us^2feo-=6>f@4x^4yZg;=T=1h0KK+`1(+b>8+A8gjXPUJ})AI(? zwYE{yHsGGm{&?oh8NPA=jsS35cgv&(_Gn4`WwaJ8pe5j^v^h4VZFi}*CfnXuRQT#w zlfGv*Y2S8qAl$Y$$-u)%F$t_0KrsbfyOmy`U1RDuh!$5&-j^oHf>zL27Wu>jR1zRa_fw+ zeCIS>7lsX6ymR5%>k6JX~H#ejJVrudQO@qeV=DM zTMeIKNbjWoQuMCkRsLep|ErJ(^4^t7|HM<);bPJMpCbN01F#+Mfd5Y8n)i3%`Y!@o5u`SQTrf4JoE9=?0=dyeZjPY_ zT-x;|qkSXfKM&rz0CvkynotqG(&(RMue)3g)ahT2KVPZz@56{UsU6kg811Iu+a32R z{;>)CZ!>PxI7K}#=f4*(uQdXUAl)?59W;1fNINXX;2Cg0j*QdgBEq{`#=q~uca(SO zMv=mZsDl{BVM+8jA;F7}AwT57mE2Xv_?x;gQdOn!eE(Mf_8D~SeM*WN~esi_51?jVo+ytVG+wF6Y?)wjcn<33k(eJHk@#qpOrY z$MNMH(`UNMl?$uh-Ght&G;S)T->p6>;WK^eA}G@^4<&--J$@JNer!Am0m~+hwkFO+ z1THv%g-PH6DIh9Z-U$jx0z)DiF=19<0i(Fdz`ttB|2V!=_`e@<#*xw>d}^O&;Zq)L z17>=)ZluXr zPNeUI|GFyDCsnKROT8a;erf#4y0%+(L<2t7;An&Y27ul2Uxctfpppk}2r0+WqSU)8 zK2+HDyGoW`gY4JfV0_ep*-f9aI`NfmcQ#dWoG@_lsDS}}@TmjcfgG0B2}Ay@n*NwB z`4wF+%0|5_xh>O^EkJFsl*13>S$>Pl@6<2rpE`g`0CvkyS^Y92f@;Mb`h5$POy8y$0-GDuS5MTtb7eF2EKEQrJq5k(Eo+0c;?*P2g=^s@vZ-;8n zx_L)dLj>8xaZ&B(L2%#zD9M9gKd7k|Kgrw5Im(~pnXFFcpqd8Y3`Omt5^Is5VxtKR!kVeOl9Bioa`x(11kGS*bZ)+_aWdTcrz z*W+Q8{&ZT8L^H{h@%X5oN@r5hME3DyESyfaJ15hpPTk(y>F@G*db`_P0nZb^JO9~D z`lol?d+W=?2OjX=z1HpWdOEv2rovFT{$@a)9cY$BqkGU1q>NhV`y-X7od z_?d6{KidC=3!e*Lec#XSkB5trmKiO2oXt_$_|3_ch^WNlZ2YZZy`wAKIpJ#4-5zh7 zr=z>Ot*0|G)#la1Q|=y*uDd&XoGzEk+ug-3I?r9EIf(uyrzEhx|913kapCWFUymyo z>_UBZdfWYN9-q(K)*bNnwgtUjm)F*Ie1{maBA*Q$AJSzKsnxSZHcERlc`vAB3B@f)5Sj4R0wNUh=ejW&8G#s1Nhr`iS8f&{&HN9KZQ6>FPPhrCp+(Z7Wn*V+T zar}o7Po?x}{aDUj1N}Gk>74f?8z~o7z56gOerw#A`@a!rf2B31c^=#eJ#FckaLm6~ zUH(5u+A5<;vXb^^>8zCpwX;@s0JQ%xJK8_6+?-RjTmB;mtK`3q(alcqJG8^5fHR{v0C?4b zs}A@sVQ0WlYXP#Harl{>kquwM@%?czOQyr>FWdDBx@FnVM$6^q+eVQy9r-I|X~+^3 zJC6U!cQ~VEm;adcPn=8Rs!Lk7ah|o19~P&W{{;4zB7KS~i;+IX87_ScEr6Voq2);YI6hZ*D_Nh zXE415- z;oXQR>kO`H84Eg#>Z@1eoY+bGP+C5-7C48^y4!)=mcme#6IxZ$s(lU?3zVDKK9uC7 zJ%_Zj9tYR$LfT!Ru^@ikuzPXgsvD(j1J(IZZXd3EkT5$DwheFig$qw8oBB{^UW9co zO5R+Ew-YHa9WQ`3IUeMIb~+wGMa(br%ASZC<(8aUrX}kW5{w)}PTOk3=?W!%?c`INF8k^W8$SCvO0s!F z30uRNI~_}98CqVRcKy2J_)qWiB_F!}o*RDg<3sPWTbPHIEdRBP5@u)84_-fT-Os=K z@`f+B+;F{NDYF_9m3560KjvbJFKA~mvdbi*CV;&>MqV=PMlar{v>l)5_g z9q}|}#6gWmMvQG%-bjw~OqE7`4umngl`+aYgd!~u&RS}mYHkx=vt5?!n5A%h$~pM_ z-cyCJ!p8g&E47N|_1F8Lqu|~PhwU3eUh;VI^$gan%JjJ&ZWwuBf1y@oTj7JNhW5V`>2to0t`BLHN?+-r z)fioVk^k$gA${}w3+vgu&jKlj>!P>^6ziYVAlIblr>pL`{{h!HpAWEG|8od?(lBP( z1?oG3UWGFYGHt1SA=ZyV$63j7{_7e9;;JCK=^sbfQ6u67*#AMS53kk!yb%9$`lkpm zvcCTVv2ii?e@F_OGgM%#f=+sU1@?!vffUi}`o* z9y)`ql=V25y^!|b)Lhlqf7|E(Tr2p9(L&qNyKyFty?+QjVM1shV&VyBfGat*|CMZg zd+l%Te|_j-x#tY~KT155ebi1z3TMmZf%4Dm5rF%R*u_8UiQ0`wt^0pkMNlp%$9ZK0 zkUt!>FrYkVH~pgstK=^^x<7*Y=l+u;NS8KUnXI)y3X)kl83gi|gO&{3W5sUz=K43= zKi0Vak4U$g_D5D1(*ED^D#S+%6T9W7>`8ffp`0qa-SihKT@}xK(l3<1a^nxq711V+ z)Kc2jGX62+Ut#*@{jkhqky4zf7W*e^Oh=3&6{c@J{xs(#zbiQ5~DEzNvf9)+5iSb<7|5cMdZOT7xd|xSj$_nKi z)4vJtSIVoU{M!)OQ$~bRN1V@jEB89N+#r3iPgXVc|13UN z_-9)G)9&f;)Yt#i*Z+uN4{aXn>wmcFY(9&$&i(a2_4OZic6?gARVvlmQ`7!+MvP95 zVAid^{-eJBgPQxr*om!_b#*ngP`CfD+y4_kE3XBw+y7gwO;~*U|D4sc(zaP?y;q{; zE45~Ya|6Y8vR1XR{Ow|M<<70H%&p+Dw{E7s{-eJBqx|ZY@QEXjJ&n(K2pjt&gB>POit}3a|Wi6jpuwag|;7@^@&ok4p z1C{pX=Y~l|PMs}aUE;iB4W=E2{8Zw!gNl3qt9?yM@BP2ols{T-?F8iZ{%8G@7cKVQ zK}Z5Fd+b8CYE=8n_wu*wK@d~PRNQn9#E*V)<_yn)ATIbj+q%0ud)r){I3q!w1JM*T zK6s1eF%XpP2y`kh;$VuR^B$~G0eH4fE8O@@Mbs$c&HF7l;DWYXGJSmH&|0g}j#nA{ zYeo^7yL%nF*s5h(7=;|hL=cZHk>+#eV@qf-LK7Y?8=Hn98I`d#D3iywQ2CeJ{)gt) z%EZKW=o3q|{8ufCR2zou|JwT>d*oj?-uLG3eB!wue8qno8%Y^KD4)+NIV!ux1nN}P zc6$*o8)7>*05kt_8x;9h{z`>XKJ)p-7vFyHxFwn!r=4WU4u_ved=6=w*Z-mS`g^{# z{ps(2>>C$7w(tBw?VHd2djDNlJsbG=mhVhH_`4H4at$t|bx&RV!XIC_eDK2$M?U%f z%YWHZDkN5jm=h}K3i9blu8HINL9UYs;g`FgWPpl1)mrYor)gWU<0Rb;*cpark#ScY z?y|!jcX+yF8}@SX!Y0!%_Kxw1-EQPgJKW8t4dJ}_a{>5eJ9dweXH%ZWST2Iuh5U4- z{fs$PIRdoGo3y)R*d}rA+(PE<2IPIAOPjwNSK*F$POMy^MXg-HR`(agZj=T2GmErJP=-;o*7 ziT#sL3`HkX$#ilm;~b5qXTz~jW;PN{I(OqTn!y&y;3v+J=nQ^lqcg@P!nu8k+r73o zCbrsUd25N(N3geaVbY&>%dzxR(m z`^^2{dhyjgcf6GLful)0J*0;r#FEso|!1mm}8y3u&hdDMHzC(){{m#ShDJ@wW);Cw{qR zs(h^q=r!IWa$m8;p_M~hlR}LxtlNxqr5Bkkl4`m-` zPs6RB|9eiI|9keho|d?($ZjiXT$$ zqpR=#wzQH}eg8M}4(3+a_)4-^t?&P%_OvgwbKL;m#8F7~Co8(!C#Kxp-p+8u-RaTY z-h&6JgJ`BoV>N$P*a3+PQ9-Ph(r5EwZnWuAW2Nw}R3w@R$Fk@5;X|!i*@&#>MTwB4 z^!4M>=|nQ6`@?Bnb2x-@ywb-s0g$I2C=9XU87tB9xxW5Kw!Bq)PXU{1*D0L6F-5*z zx02iB?7#VhkNj{}HLzUA9M#%?*X@55|0}J9v%-)0Y2D5qh2)RA*+t~*BJ1|QPV7G? z_iHa~ck}pMUQ7F5n$0CKH^_Bk+##KNHF0P50ciRH@Q*>W%zN79#PEI!_i`6rIq#c4 z?`A&fY78^U+^>BW-^PTM)2uLov6C84y2>CO<*dJF8SD1Hs*a>zxBo4k)s!_;xBu1Z z_P_EdNyA#WZvQJxeUufiJO;6D|68~J)lS3Oxfg76AuWoX6|73@_P;!_m1m{ewH~L1 zjy(UOZvWdds!MHG-TqgM0E(p`v;7Ze!|V3Hb^G7tZU3vso&IDjrcY+D*Jaw-uP5|W zbW-_&+vI`)rH?+;e&B$isSb&CkgYB8^kgy>i%#TL57fS4=E0_y9Tr<=s!Z+B=SIV^ zS$#MhO&#i3)SR@cVwx*wdpLbK6P}3a3tZ|02iHJOXy!BuO#|dq3h&-st~QKXS?VT2 zwzRdJ&=4z6nDJG=DVNQa+Gwl)4~uSIktHW)t~#pEtvN?;ReNCFU%z<2NcpJSX9uXQwIljs*6Pj1C0$1@_3CaZbkZ zE0r@^*4%k^a@IezKe%hB$eWQhP7JOlu9QV=a_V)1$#5hXp3EduMbo<*Ndo?4L?2Ei zk43Sdwuuiy(UbaWu*7tu=*iOB$)#FV1OvNpAmpt$TaipJqO851t4270`N?lW*)TQAhxRjUAX`}IIfu| zw}>NLQ~;8x5d%*)YTksOjm!;Eu92&`FAmLM8RuwJKkghz?@ELwQ@WmLq_NATxi_K1 z$>ZWKqo*3Lz`ILw?{=l4dLk31%-7hGAK`E+8V{%DM#2+~SLR1JtfwaV)wJ&1-*^?? zU6zY*Z(2|JXVaNv90(q1e0|9;-@K7k%91oW_}|R!Et;?9{rWGzeC^Fm4o4Fi=gk{g zy{yc}Yw!~Q%b!Ud8QYrxC5@!QiF7Ossw=u53P%(BqKQcIxbs9f9vcrK$2u!&{MKYL z-uMPYH8k(2dQ+K+WH=QW)Tc6y*CNWn1&eYdIn#I@V%%vnMslxYLZCvbu*52xjPs3% zGiWo;y(9Vw5u;udrKrT~5!Wu8aoNeAsK(YR3SB0Hs>~wJHpFSSwQa*OsrqJva_mX%>QX9!uNMX(772-R~ z2$|AGa-S?UI-0lgi<|J%wEi9AZ!l3KIgyS0kyn}W7hrTj5nVQajt%{Iu+L!0l33GD z?(&jefHCA6@{<;;$ekvp$63#{LVO(`*P56gy47Su>y2;wXQL4^qK5Hs!}vtQ_+-O) zq+wid7@ukwpKcgG+%O((7(dc5ew1Gtu4(Ps2E(m-eD|@RG`@JjyU!Ujx4dr#jrRanDlluB!;&^@i z@A6m&SUh}0&kiiEum7Z#RTQ&`+#RCQ8r9XPvHJSY-cEm)$J5)*eg6u#-dn5o{cHBe z!s#@33LG!DBiivzkDvLL|D*k1xbV5~)%X4E{y0UR{LL6Etw=2!zj-6H5)qYnoL%u+ zaSuq{-Pz-Gxm>09fCSoP9Z!0viXgWKq_4*n40fSDJH74xHjmHeZR-wrd)tCuugmM} YX?J_O{ijbAN`6uxga)qeUcoi+|EDWZkN^Mx diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/App.config b/GameMakerStringsEditor/App.config similarity index 60% rename from GameMakerStringsEditor/GameMakerStringsEditor/App.config rename to GameMakerStringsEditor/App.config index 8e15646..4bfa005 100644 --- a/GameMakerStringsEditor/GameMakerStringsEditor/App.config +++ b/GameMakerStringsEditor/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/AssemblyInfo.cs b/GameMakerStringsEditor/AssemblyInfo.cs similarity index 100% rename from GameMakerStringsEditor/GameMakerStringsEditor/AssemblyInfo.cs rename to GameMakerStringsEditor/AssemblyInfo.cs diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Class1.cs b/GameMakerStringsEditor/Class1.cs similarity index 100% rename from GameMakerStringsEditor/GameMakerStringsEditor/Class1.cs rename to GameMakerStringsEditor/Class1.cs diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Form1.Designer.cs b/GameMakerStringsEditor/Form1.Designer.cs similarity index 100% rename from GameMakerStringsEditor/GameMakerStringsEditor/Form1.Designer.cs rename to GameMakerStringsEditor/Form1.Designer.cs diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Form1.cs b/GameMakerStringsEditor/Form1.cs similarity index 100% rename from GameMakerStringsEditor/GameMakerStringsEditor/Form1.cs rename to GameMakerStringsEditor/Form1.cs diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Form1.resx b/GameMakerStringsEditor/Form1.resx similarity index 100% rename from GameMakerStringsEditor/GameMakerStringsEditor/Form1.resx rename to GameMakerStringsEditor/Form1.resx diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/GameMakerStringsEditor.csproj b/GameMakerStringsEditor/GameMakerStringsEditor.csproj similarity index 95% rename from GameMakerStringsEditor/GameMakerStringsEditor/GameMakerStringsEditor.csproj rename to GameMakerStringsEditor/GameMakerStringsEditor.csproj index 988ebc3..fccffce 100644 --- a/GameMakerStringsEditor/GameMakerStringsEditor/GameMakerStringsEditor.csproj +++ b/GameMakerStringsEditor/GameMakerStringsEditor.csproj @@ -9,8 +9,9 @@ Properties GameMakerStringsEditor GameMakerStringsEditor - v4.5 + v4.8 512 + AnyCPU @@ -26,7 +27,7 @@ AnyCPU pdbonly true - bin\Release\ + ..\Release\ TRACE prompt 4 @@ -67,6 +68,7 @@ True Resources.resx + True SettingsSingleFileGenerator diff --git a/GameMakerStringsEditor/GameMakerStringsEditor.sln b/GameMakerStringsEditor/GameMakerStringsEditor.sln deleted file mode 100644 index a1e8089..0000000 --- a/GameMakerStringsEditor/GameMakerStringsEditor.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 14 for Windows Desktop -VisualStudioVersion = 14.0.24720.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameMakerStringsEditor", "GameMakerStringsEditor\GameMakerStringsEditor.csproj", "{B90FF7A8-651C-4BB5-8E5A-F5505B91358C}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Debug|Any CPU.Build.0 = Debug|Any CPU - {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Release|Any CPU.ActiveCfg = Release|Any CPU - {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/.gitignore b/GameMakerStringsEditor/GameMakerStringsEditor/.gitignore deleted file mode 100644 index 5d2b667..0000000 --- a/GameMakerStringsEditor/GameMakerStringsEditor/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -/bin/* -/obj/* -/Properties/* \ No newline at end of file diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/AssemblyInfo.cs b/GameMakerStringsEditor/GameMakerStringsEditor/Properties/AssemblyInfo.cs deleted file mode 100644 index 96701aa..0000000 --- a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Управление общими сведениями о сборке осуществляется с помощью -// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, -// связанные со сборкой. -[assembly: AssemblyTitle("GameMakerStringsEditor")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("GameMakerStringsEditor")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми -// для COM-компонентов. Если требуется обратиться к типу в этой сборке через -// COM, задайте атрибуту ComVisible значение TRUE для этого типа. -[assembly: ComVisible(false)] - -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("b90ff7a8-651c-4bb5-8e5a-f5505b91358c")] - -// Сведения о версии сборки состоят из следующих четырех значений: -// -// Основной номер версии -// Дополнительный номер версии -// Номер сборки -// Редакция -// -// Можно задать все значения или принять номера сборки и редакции по умолчанию -// используя "*", как показано ниже: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.Designer.cs b/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.Designer.cs deleted file mode 100644 index 34bd61e..0000000 --- a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.Designer.cs +++ /dev/null @@ -1,71 +0,0 @@ -//------------------------------------------------------------------------------ -// -// Этот код создан программным средством. -// Версия среды выполнения: 4.0.30319.42000 -// -// Изменения в этом файле могут привести к неправильному поведению и будут утрачены, если -// код создан повторно. -// -//------------------------------------------------------------------------------ - -namespace GameMakerStringsEditor.Properties -{ - - - /// - /// Класс ресурсов со строгим типом для поиска локализованных строк и пр. - /// - // Этот класс был автоматически создан при помощи StronglyTypedResourceBuilder - // класс с помощью таких средств, как ResGen или Visual Studio. - // Для добавления или удаления члена измените файл .ResX, а затем перезапустите ResGen - // с параметром /str или заново постройте свой VS-проект. - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("System.Resources.Tools.StronglyTypedResourceBuilder", "4.0.0.0")] - [global::System.Diagnostics.DebuggerNonUserCodeAttribute()] - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - internal class Resources - { - - private static global::System.Resources.ResourceManager resourceMan; - - private static global::System.Globalization.CultureInfo resourceCulture; - - [global::System.Diagnostics.CodeAnalysis.SuppressMessageAttribute("Microsoft.Performance", "CA1811:AvoidUncalledPrivateCode")] - internal Resources() - { - } - - /// - /// Возврат кэшированного экземпляра ResourceManager, используемого этим классом. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Resources.ResourceManager ResourceManager - { - get - { - if ((resourceMan == null)) - { - global::System.Resources.ResourceManager temp = new global::System.Resources.ResourceManager("GameMakerStringsEditor.Properties.Resources", typeof(Resources).Assembly); - resourceMan = temp; - } - return resourceMan; - } - } - - /// - /// Переопределяет свойство CurrentUICulture текущего потока для всех - /// подстановки ресурсов с помощью этого класса ресурсов со строгим типом. - /// - [global::System.ComponentModel.EditorBrowsableAttribute(global::System.ComponentModel.EditorBrowsableState.Advanced)] - internal static global::System.Globalization.CultureInfo Culture - { - get - { - return resourceCulture; - } - set - { - resourceCulture = value; - } - } - } -} diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.resx b/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.resx deleted file mode 100644 index af7dbeb..0000000 --- a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Resources.resx +++ /dev/null @@ -1,117 +0,0 @@ - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - text/microsoft-resx - - - 2.0 - - - System.Resources.ResXResourceReader, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - - System.Resources.ResXResourceWriter, System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089 - - \ No newline at end of file diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.Designer.cs b/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.Designer.cs deleted file mode 100644 index 14be937..0000000 --- a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.Designer.cs +++ /dev/null @@ -1,30 +0,0 @@ -//------------------------------------------------------------------------------ -// -// This code was generated by a tool. -// Runtime Version:4.0.30319.42000 -// -// Changes to this file may cause incorrect behavior and will be lost if -// the code is regenerated. -// -//------------------------------------------------------------------------------ - -namespace GameMakerStringsEditor.Properties -{ - - - [global::System.Runtime.CompilerServices.CompilerGeneratedAttribute()] - [global::System.CodeDom.Compiler.GeneratedCodeAttribute("Microsoft.VisualStudio.Editors.SettingsDesigner.SettingsSingleFileGenerator", "11.0.0.0")] - internal sealed partial class Settings : global::System.Configuration.ApplicationSettingsBase - { - - private static Settings defaultInstance = ((Settings)(global::System.Configuration.ApplicationSettingsBase.Synchronized(new Settings()))); - - public static Settings Default - { - get - { - return defaultInstance; - } - } - } -} diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.settings b/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.settings deleted file mode 100644 index 3964565..0000000 --- a/GameMakerStringsEditor/GameMakerStringsEditor/Properties/Settings.settings +++ /dev/null @@ -1,7 +0,0 @@ - - - - - - - diff --git a/GameMakerStringsEditor/GameMakerStringsEditor/Program.cs b/GameMakerStringsEditor/Program.cs similarity index 100% rename from GameMakerStringsEditor/GameMakerStringsEditor/Program.cs rename to GameMakerStringsEditor/Program.cs diff --git a/TXTRCut/App.config b/TXTRCut/App.config index 731f6de..4bfa005 100644 --- a/TXTRCut/App.config +++ b/TXTRCut/App.config @@ -1,6 +1,6 @@ - + - + - \ No newline at end of file + diff --git a/TXTRCut/TXTRCut.csproj b/TXTRCut/TXTRCut.csproj index 6d26c88..7186131 100644 --- a/TXTRCut/TXTRCut.csproj +++ b/TXTRCut/TXTRCut.csproj @@ -8,9 +8,10 @@ Exe TXTRCut TXTRCut - v4.6.1 + v4.8 512 true + AnyCPU @@ -26,7 +27,7 @@ AnyCPU pdbonly true - bin\Release\ + ..\Release\ TRACE prompt 4 @@ -44,7 +45,6 @@ - diff --git a/UndertaleTools.sln b/UndertaleTools.sln new file mode 100644 index 0000000..7f007cc --- /dev/null +++ b/UndertaleTools.sln @@ -0,0 +1,43 @@ + +Microsoft Visual Studio Solution File, Format Version 12.00 +# Visual Studio Version 17 +VisualStudioVersion = 17.6.33815.320 +MinimumVisualStudioVersion = 10.0.40219.1 +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinPack", "WinPack\WinPack.csproj", "{D93F0BC3-593E-4B16-9C75-883DA4D66542}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinExtract", "WinExtract\WinExtract.csproj", "{569D8DBC-847A-4E15-987A-79D9A8AB58E2}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "TXTRCut", "TXTRCut\TXTRCut.csproj", "{3F60250E-E053-4AA9-845F-9485743D26AC}" +EndProject +Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "GameMakerStringsEditor", "GameMakerStringsEditor\GameMakerStringsEditor.csproj", "{B90FF7A8-651C-4BB5-8E5A-F5505B91358C}" +EndProject +Global + GlobalSection(SolutionConfigurationPlatforms) = preSolution + Debug|Any CPU = Debug|Any CPU + Release|Any CPU = Release|Any CPU + EndGlobalSection + GlobalSection(ProjectConfigurationPlatforms) = postSolution + {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Debug|Any CPU.Build.0 = Debug|Any CPU + {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Release|Any CPU.ActiveCfg = Release|Any CPU + {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Release|Any CPU.Build.0 = Release|Any CPU + {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Debug|Any CPU.Build.0 = Debug|Any CPU + {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Release|Any CPU.ActiveCfg = Release|Any CPU + {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Release|Any CPU.Build.0 = Release|Any CPU + {3F60250E-E053-4AA9-845F-9485743D26AC}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {3F60250E-E053-4AA9-845F-9485743D26AC}.Debug|Any CPU.Build.0 = Debug|Any CPU + {3F60250E-E053-4AA9-845F-9485743D26AC}.Release|Any CPU.ActiveCfg = Release|Any CPU + {3F60250E-E053-4AA9-845F-9485743D26AC}.Release|Any CPU.Build.0 = Release|Any CPU + {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Debug|Any CPU.ActiveCfg = Debug|Any CPU + {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Debug|Any CPU.Build.0 = Debug|Any CPU + {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Release|Any CPU.ActiveCfg = Release|Any CPU + {B90FF7A8-651C-4BB5-8E5A-F5505B91358C}.Release|Any CPU.Build.0 = Release|Any CPU + EndGlobalSection + GlobalSection(SolutionProperties) = preSolution + HideSolutionNode = FALSE + EndGlobalSection + GlobalSection(ExtensibilityGlobals) = postSolution + SolutionGuid = {95883F20-1F32-4F2B-A2D7-815CE296CADE} + EndGlobalSection +EndGlobal diff --git a/WinExtract/.gitignore b/WinExtract/.gitignore index 3b8665e..7eb4e9e 100644 --- a/WinExtract/.gitignore +++ b/WinExtract/.gitignore @@ -1,2 +1,3 @@ -*.pdb -.vs/WinExtract/v14/.suo \ No newline at end of file +bin/ +obj/ +Properties/ \ No newline at end of file diff --git a/WinExtract/.vs/WinExtract/v14/.suo b/WinExtract/.vs/WinExtract/v14/.suo deleted file mode 100644 index 45f725832f84b5516f185d553d34ddd6e9b7f28c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 54784 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 ben9hk(z9nTPfqC#|DWQFBr9C75%&K9C#ysk diff --git a/WinExtract/.vs/WinExtract/v15/.suo b/WinExtract/.vs/WinExtract/v15/.suo deleted file mode 100644 index 7701be9b7f9503be2711586d076b8d4e20385aec..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 65024 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 Dj)}V( diff --git a/WinExtract/WinExtract/App.config b/WinExtract/App.config similarity index 100% rename from WinExtract/WinExtract/App.config rename to WinExtract/App.config diff --git a/WinExtract/WinExtract/Program.cs b/WinExtract/Program.cs similarity index 97% rename from WinExtract/WinExtract/Program.cs rename to WinExtract/Program.cs index 920294e..88c88af 100644 --- a/WinExtract/WinExtract/Program.cs +++ b/WinExtract/Program.cs @@ -1,528 +1,528 @@ -using System; -using System.Collections.Generic; -using System.IO; -using System.Drawing; -using System.Xml.Linq; -using System.Text; - -namespace WinExtract -{ - class Program - { - static BinaryReader bread; - static BinaryWriter bwrite; - static string input_folder; - static uint chunk_limit; - static uint FONT_offset; - static uint FONT_limit; - static uint STRG_offset; - static string[] fontNames; - static bool translatale; - static bool showstringsextract; - static bool strgWithBr = false; - static bool correctTXTR = false; - static bool unpackAUDO = false; - static bool UTswitch = false; - static bool oldUndertale = false; - - struct endFiles - { - public string name; - public uint offset; - public uint size; - } - - struct spriteInfo - { - public uint x; - public uint y; - public uint w; - public uint h; - public uint i; - } - - static void Main(string[] args) - { - if (args.Length < 2) - { - Console.WriteLine("Usage: winextract "); - return; - } - string output_win = args[0]; - input_folder = args[1]; - if (input_folder[input_folder.Length - 1] != '\\') input_folder += '\\'; - for (int i=0; i filesToCreate = new List(); - - if (chunk_name == "FORM") - { - full_size = chunk_limit; - chunk_size = 0; - } - else if (chunk_name == "SPRT") - { - StreamWriter tpag = new StreamWriter(input_folder + "SPRT.txt", false, System.Text.Encoding.ASCII); - uint sprite_count = bread.ReadUInt32(); - long sprtoffset = bread.BaseStream.Position; - uint i = 0; - for (; i < sprite_count; sprtoffset += 4, i++) - { - bread.BaseStream.Position = sprtoffset; - long sprt = bread.ReadUInt32(); - bread.BaseStream.Position = sprt; - string what = getSTRGEntry(bread.ReadUInt32()); - bread.BaseStream.Position += (UTswitch ? 0x48 : 0x34);//Skip - //TPAG - uint spritec = bread.ReadUInt32(); - for (int k = 0; k < spritec; k++) - { - tpag.Write(what + "(" + k + ")");//Sprite name - tpag.Write(";"); - - long backup = bread.BaseStream.Position; - sprt = bread.ReadUInt32(); - bread.BaseStream.Position = sprt; - tpag.Write(bread.ReadInt16());//x - tpag.Write(";"); - tpag.Write(bread.ReadInt16());//y - tpag.Write(";"); - tpag.Write(bread.ReadInt16());//w1 - tpag.Write(";"); - tpag.Write(bread.ReadInt16());//h1 - tpag.Write(";"); - bread.BaseStream.Position += 12; - tpag.Write(bread.ReadInt16());//txtr id - tpag.Write((char)0x0D); - tpag.Write((char)0x0A); - bread.BaseStream.Position = backup; - bread.BaseStream.Position += 4; - } - } - tpag.Close(); - bread.BaseStream.Position = chunk_limit; - } - else if (chunk_name == "STRG") - { - STRG_offset = (uint)bread.BaseStream.Position; - - recordStrgList();//Beta! into txt (for Undertale) - - long bacp = bread.BaseStream.Position; - recordFiles(collectFonts(input_folder), "FONT"); - bread.BaseStream.Position = bacp; - filesToCreate.Clear(); - } - else if (chunk_name == "TXTR") - { - List entries = collect_entries(false, correctTXTR); - if (!correctTXTR) - { - for (int i = 0; i < entries.Count - 1; i++) - { - uint offset = entries[i]; - bread.BaseStream.Position = offset + (UTswitch ? 8 : 4); - offset = bread.ReadUInt32(); - entries[i] = offset; - } - } - filesToCreate = new List(); - for (int i = 0; i < entries.Count - 1; i++) - { - uint offset = entries[i]; - uint next_offset = entries[i + 1]; - uint size = next_offset - offset; - endFiles f1 = new endFiles(); - f1.name = "" + i + ".png"; - f1.offset = offset; - f1.size = size; - filesToCreate.Add(f1); - } - } - else if (chunk_name == "AUDO" && unpackAUDO == true) - { - List entries = collect_entries(false); - filesToCreate = new List(); - for (int i = 0; i < entries.Count - 1; i++) - { - uint offset = entries[i]; - bread.BaseStream.Position = offset; - uint size = bread.ReadUInt32(); - offset = (uint)bread.BaseStream.Position; - endFiles f1 = new endFiles(); - f1.name = "" + i + ".wav"; - f1.offset = offset; - f1.size = size; - filesToCreate.Add(f1); - } - } - else if(chunk_name == "FONT") { - FONT_offset = (uint)bread.BaseStream.Position; - FONT_limit = chunk_limit; - } - - if (chunk_name != "FORM") - if (filesToCreate.Count == 0) - { - string name = "CHUNK//" + chunk_name + ".chunk"; - uint bu = (uint)bread.BaseStream.Position; - bread.BaseStream.Position = chunk_offset; - - bwrite = new BinaryWriter(File.Open(input_folder + name, FileMode.Create)); - bwrite.Write(bread.ReadBytes((int)chunk_size)); - bwrite.Close(); - bread.BaseStream.Position = bu; - - if (chunk_name == "CODE") - { - using (var stream = File.OpenRead(input_folder + name)) - { - var md5 = System.Security.Cryptography.MD5.Create(); - byte[] hashByte = md5.ComputeHash(stream); - StringBuilder sBuilder = new StringBuilder(); - for (int i = 0; i < hashByte.Length; i++) - { - sBuilder.Append(hashByte[i].ToString("x2")); - } - string hashString = sBuilder.ToString(); - if (hashString == "ff44e9b4b88209202af1b73d7b187d5f")//Undertale 1.01 - { - //oldUndertale = true; - unpackAUDO = true; - } - } - } - } - else - { - recordFiles(filesToCreate, chunk_name); - - if (chunk_name == "TXTR") collectFontImages(); - } - - chunk_offset += chunk_size; - bread.BaseStream.Position = chunk_offset; - } - - if (translatale) - { - string ext = strgWithBr ? "strg" : "txt"; - if (!File.Exists(input_folder + "translate." + ext)) { - //File.Copy(input_folder + "original."+ext, input_folder + "translate."+ext); - } - } - else - File.Open(input_folder + "translate.txt", FileMode.OpenOrCreate); - - Directory.CreateDirectory(input_folder + "FONT_new"); - File.Open(input_folder + "FONT_new\\patch.txt", FileMode.OpenOrCreate); - - //Console.Write("Done! Press any key to exit."); - //Console.ReadKey(); - } - - static List collect_entries(bool fnt, bool correctTXTR_=false) - { - List entries = new List(); - uint files = bread.ReadUInt32(); - for(uint i = 0; i < files; i++) - { - uint offset = bread.ReadUInt32(); - if (offset != 0) - { - entries.Add(offset); - } - } - if (correctTXTR_) - { - for (int i = 0; i < files; i++) - { - long bacup = bread.BaseStream.Position; - bread.BaseStream.Position = entries[i]; - bread.BaseStream.Position += 8;//00 00 00 00 FF FF FF FF - entries[i] = bread.ReadUInt32(); - bread.BaseStream.Position = bacup; - } - } - entries.Add(fnt ? FONT_limit : chunk_limit); - return entries; - } - - static void recordFiles(List files, string folder) { - Directory.CreateDirectory(input_folder + folder); - for (int i = 0; i < files.Count; i++) - { - string name = files[i].name; - uint bu = (uint)bread.BaseStream.Position; - bread.BaseStream.Position = files[i].offset; - - bwrite = new BinaryWriter(File.Open(input_folder + folder + "\\" + name, FileMode.Create)); - bwrite.Write(bread.ReadBytes((int)files[i].size)); - bwrite.Close(); - bread.BaseStream.Position = bu; - } - } - - static List collectFonts(string input_folder) { - bread.BaseStream.Position = FONT_offset; - List entries = collect_entries(true); - List filesToCreate = new List(); - - StreamWriter fontsIndex = new StreamWriter(input_folder + "FONT\\" + "fonts.txt", false, System.Text.Encoding.UTF8); - fontNames = new string[entries.Count]; - - for (int i = 0; i < entries.Count-1; i++) - { - XDocument xmldoc = new XDocument(); - XElement xfont = new XElement("font"); - - uint offset = entries[i]; - bread.BaseStream.Position = offset; - string font_name = getSTRGEntry(bread.ReadUInt32()); - - fontNames[i] = font_name; - - xfont.Add(new XElement("name", getSTRGEntry(bread.ReadUInt32()))); - xfont.Add(new XElement("size", bread.ReadUInt32())); - xfont.Add(new XElement("bold", bread.ReadUInt32())); - xfont.Add(new XElement("italic", bread.ReadUInt32())); - - XElement xrange = new XElement("ranges"); - ushort lrange = bread.ReadUInt16(); - bread.ReadUInt16(); - ushort urange = bread.ReadUInt16(); - bread.ReadUInt16(); - xrange.Add(new XElement("range0",""+lrange+","+urange)); - xfont.Add(xrange); - - spriteInfo fontSprite = getSpriteInfo(bread.ReadUInt32()); - fontsIndex.WriteLine(i.ToString() + ";" + font_name + ".font.gmx;"+ fontSprite.i+";"+fontSprite.x+";"+fontSprite.y); - bread.BaseStream.Position += 8; - uint glyphCount = bread.ReadUInt32(); - xrange = new XElement("glyphs"); - for (uint g=0; g fonts = collect_entries(false); - //Console.WriteLine("i\tx\ty\tw\th"); - for (int f = 0; f < fonts.Count - 1; f++) - { - bread.BaseStream.Position = fonts[f] + 28; - spriteInfo sprt = getSpriteInfo(bread.ReadUInt32()); - //Console.WriteLine(""+sprt.i+"\t"+ sprt.x + "\t" + sprt.y + "\t" + sprt.w + "\t" + sprt.h); - using (var texture = new Bitmap(Image.FromFile(input_folder + "TXTR\\" + sprt.i + ".png"))) - { - using (Bitmap cropped = texture.Clone(new Rectangle((int)sprt.x, (int)sprt.y, (int)sprt.w, (int)sprt.h), texture.PixelFormat)) - cropped.Save(input_folder + "FONT\\" + fontNames[f] + ".png"); - } - } - bread.BaseStream.Position = bacup; - } - - static spriteInfo getSpriteInfo(uint sprite_offset) - { - spriteInfo result = new spriteInfo(); - long bacup = bread.BaseStream.Position; - bread.BaseStream.Position = sprite_offset; - result.x = bread.ReadUInt16(); - result.y = bread.ReadUInt16(); - result.w = bread.ReadUInt16(); - result.h = bread.ReadUInt16(); - bread.BaseStream.Position += 12; - result.i = bread.ReadUInt16(); - if(oldUndertale) - if(result.i>20) result.i--;//Some old versions - bread.BaseStream.Position = bacup; - return result; - } - - static string getSTRGEntry(uint str_offset) - { - long bacup = bread.BaseStream.Position; - bread.BaseStream.Position = str_offset-4;//??? - - uint string_size = bread.ReadUInt32(); - byte[] bytes = bread.ReadBytes((int)string_size); - bread.BaseStream.Position = bacup; - return System.Text.Encoding.UTF8.GetString(bytes); - } - - static byte[] getSTRGEntryByte(uint str_offset) - { - byte sy; - long bacup = bread.BaseStream.Position; - bread.BaseStream.Position = str_offset; - - uint string_size = bread.ReadUInt32(); - List listByte = new List(); - - sy = bread.ReadByte(); - while (sy != 0) - { - listByte.Add(sy); - sy = bread.ReadByte(); - } - bread.BaseStream.Position = bacup; - - byte[] bytes = listByte.ToArray(); - return bytes; - } - - static void recordStrgList() - { - uint strings = bread.ReadUInt32(); - recordStrgTranslated(strings); - //bread.BaseStream.Position += strings * 4;//Skip offsets - byte sy; - bwrite = new BinaryWriter(File.Open(input_folder + "original." + (strgWithBr ? "strg" : "txt"), FileMode.Create)); - if (strgWithBr) { - for (uint i = 0; i < strings; i++) - { - uint string_size = bread.ReadUInt32();//00 after string - bwrite.Write(string_size); - bwrite.Write(bread.ReadBytes((int)string_size)); - bread.BaseStream.Position++; - } - } else { - for (uint i = 0; i < strings; i++) - { - uint string_size = bread.ReadUInt32();//Bytes or Unicode symbols? - if (i < strings - 1) string_size++; - sy = bread.ReadByte(); - for (; sy!=0x00; sy = bread.ReadByte()) { - //for (uint j = 0; j < string_size; j++) { - if (sy == 0x0D || sy == 0x0A) - { - System.Console.WriteLine("Warning: string " + i + " have line brake. Will be replaced with space."); - bwrite.Write((byte)0x20); - } - else - bwrite.Write(sy); - } - //bwrite.BaseStream.Position--; - if (i < strings - 1) { - bwrite.Write((byte)0x0D); - bwrite.Write((byte)0x0A); - } - } - } - bwrite.Close(); - } - - static void recordStrgTranslated(uint strings) - { - byte sy; - bwrite = new BinaryWriter(File.Open(input_folder + "translate.txt", FileMode.Create)); - for (uint i = 0; i < strings; i++) - { - if (showstringsextract) - { - Console.WriteLine("String " + i + " of " + strings); - Console.SetCursorPosition(0, Console.CursorTop - 1); - } - byte[] strByte = getSTRGEntryByte(bread.ReadUInt32()); - for (uint j = 0; j < strByte.Length; j++) - { - sy = strByte[j]; - if (sy == 0x0D || sy == 0x0A) - { - //System.Console.WriteLine("Warning: string " + i + " have line brake. Will be replaced with space."); - bwrite.Write((byte)0x20); - } - else - bwrite.Write(sy); - } - if (i < strings - 1) - { - bwrite.Write((byte)0x0D); - bwrite.Write((byte)0x0A); - } - } - bwrite.Close(); - } - } -} +using System; +using System.Collections.Generic; +using System.IO; +using System.Drawing; +using System.Xml.Linq; +using System.Text; + +namespace WinExtract +{ + class Program + { + static BinaryReader bread; + static BinaryWriter bwrite; + static string input_folder; + static uint chunk_limit; + static uint FONT_offset; + static uint FONT_limit; + static uint STRG_offset; + static string[] fontNames; + static bool translatale; + static bool showstringsextract; + static bool strgWithBr = false; + static bool correctTXTR = false; + static bool unpackAUDO = false; + static bool UTswitch = false; + static bool oldUndertale = false; + + struct endFiles + { + public string name; + public uint offset; + public uint size; + } + + struct spriteInfo + { + public uint x; + public uint y; + public uint w; + public uint h; + public uint i; + } + + static void Main(string[] args) + { + if (args.Length < 2) + { + Console.WriteLine("Usage: winextract "); + return; + } + string output_win = args[0]; + input_folder = args[1]; + if (input_folder[input_folder.Length - 1] != '\\') input_folder += '\\'; + for (int i=0; i filesToCreate = new List(); + + if (chunk_name == "FORM") + { + full_size = chunk_limit; + chunk_size = 0; + } + else if (chunk_name == "SPRT") + { + StreamWriter tpag = new StreamWriter(input_folder + "SPRT.txt", false, System.Text.Encoding.ASCII); + uint sprite_count = bread.ReadUInt32(); + long sprtoffset = bread.BaseStream.Position; + uint i = 0; + for (; i < sprite_count; sprtoffset += 4, i++) + { + bread.BaseStream.Position = sprtoffset; + long sprt = bread.ReadUInt32(); + bread.BaseStream.Position = sprt; + string what = getSTRGEntry(bread.ReadUInt32()); + bread.BaseStream.Position += (UTswitch ? 0x48 : 0x34);//Skip + //TPAG + uint spritec = bread.ReadUInt32(); + for (int k = 0; k < spritec; k++) + { + tpag.Write(what + "(" + k + ")");//Sprite name + tpag.Write(";"); + + long backup = bread.BaseStream.Position; + sprt = bread.ReadUInt32(); + bread.BaseStream.Position = sprt; + tpag.Write(bread.ReadInt16());//x + tpag.Write(";"); + tpag.Write(bread.ReadInt16());//y + tpag.Write(";"); + tpag.Write(bread.ReadInt16());//w1 + tpag.Write(";"); + tpag.Write(bread.ReadInt16());//h1 + tpag.Write(";"); + bread.BaseStream.Position += 12; + tpag.Write(bread.ReadInt16());//txtr id + tpag.Write((char)0x0D); + tpag.Write((char)0x0A); + bread.BaseStream.Position = backup; + bread.BaseStream.Position += 4; + } + } + tpag.Close(); + bread.BaseStream.Position = chunk_limit; + } + else if (chunk_name == "STRG") + { + STRG_offset = (uint)bread.BaseStream.Position; + + recordStrgList();//Beta! into txt (for Undertale) + + long bacp = bread.BaseStream.Position; + recordFiles(collectFonts(input_folder), "FONT"); + bread.BaseStream.Position = bacp; + filesToCreate.Clear(); + } + else if (chunk_name == "TXTR") + { + List entries = collect_entries(false, correctTXTR); + if (!correctTXTR) + { + for (int i = 0; i < entries.Count - 1; i++) + { + uint offset = entries[i]; + bread.BaseStream.Position = offset + (UTswitch ? 8 : 4); + offset = bread.ReadUInt32(); + entries[i] = offset; + } + } + filesToCreate = new List(); + for (int i = 0; i < entries.Count - 1; i++) + { + uint offset = entries[i]; + uint next_offset = entries[i + 1]; + uint size = next_offset - offset; + endFiles f1 = new endFiles(); + f1.name = "" + i + ".png"; + f1.offset = offset; + f1.size = size; + filesToCreate.Add(f1); + } + } + else if (chunk_name == "AUDO" && unpackAUDO == true) + { + List entries = collect_entries(false); + filesToCreate = new List(); + for (int i = 0; i < entries.Count - 1; i++) + { + uint offset = entries[i]; + bread.BaseStream.Position = offset; + uint size = bread.ReadUInt32(); + offset = (uint)bread.BaseStream.Position; + endFiles f1 = new endFiles(); + f1.name = "" + i + ".wav"; + f1.offset = offset; + f1.size = size; + filesToCreate.Add(f1); + } + } + else if(chunk_name == "FONT") { + FONT_offset = (uint)bread.BaseStream.Position; + FONT_limit = chunk_limit; + } + + if (chunk_name != "FORM") + if (filesToCreate.Count == 0) + { + string name = "CHUNK//" + chunk_name + ".chunk"; + uint bu = (uint)bread.BaseStream.Position; + bread.BaseStream.Position = chunk_offset; + + bwrite = new BinaryWriter(File.Open(input_folder + name, FileMode.Create)); + bwrite.Write(bread.ReadBytes((int)chunk_size)); + bwrite.Close(); + bread.BaseStream.Position = bu; + + if (chunk_name == "CODE") + { + using (var stream = File.OpenRead(input_folder + name)) + { + var md5 = System.Security.Cryptography.MD5.Create(); + byte[] hashByte = md5.ComputeHash(stream); + StringBuilder sBuilder = new StringBuilder(); + for (int i = 0; i < hashByte.Length; i++) + { + sBuilder.Append(hashByte[i].ToString("x2")); + } + string hashString = sBuilder.ToString(); + if (hashString == "ff44e9b4b88209202af1b73d7b187d5f")//Undertale 1.01 + { + //oldUndertale = true; + unpackAUDO = true; + } + } + } + } + else + { + recordFiles(filesToCreate, chunk_name); + + if (chunk_name == "TXTR") collectFontImages(); + } + + chunk_offset += chunk_size; + bread.BaseStream.Position = chunk_offset; + } + + if (translatale) + { + string ext = strgWithBr ? "strg" : "txt"; + if (!File.Exists(input_folder + "translate." + ext)) { + //File.Copy(input_folder + "original."+ext, input_folder + "translate."+ext); + } + } + else + File.Open(input_folder + "translate.txt", FileMode.OpenOrCreate); + + Directory.CreateDirectory(input_folder + "FONT_new"); + File.Open(input_folder + "FONT_new\\patch.txt", FileMode.OpenOrCreate); + + //Console.Write("Done! Press any key to exit."); + //Console.ReadKey(); + } + + static List collect_entries(bool fnt, bool correctTXTR_=false) + { + List entries = new List(); + uint files = bread.ReadUInt32(); + for(uint i = 0; i < files; i++) + { + uint offset = bread.ReadUInt32(); + if (offset != 0) + { + entries.Add(offset); + } + } + if (correctTXTR_) + { + for (int i = 0; i < files; i++) + { + long bacup = bread.BaseStream.Position; + bread.BaseStream.Position = entries[i]; + bread.BaseStream.Position += 8;//00 00 00 00 FF FF FF FF + entries[i] = bread.ReadUInt32(); + bread.BaseStream.Position = bacup; + } + } + entries.Add(fnt ? FONT_limit : chunk_limit); + return entries; + } + + static void recordFiles(List files, string folder) { + Directory.CreateDirectory(input_folder + folder); + for (int i = 0; i < files.Count; i++) + { + string name = files[i].name; + uint bu = (uint)bread.BaseStream.Position; + bread.BaseStream.Position = files[i].offset; + + bwrite = new BinaryWriter(File.Open(input_folder + folder + "\\" + name, FileMode.Create)); + bwrite.Write(bread.ReadBytes((int)files[i].size)); + bwrite.Close(); + bread.BaseStream.Position = bu; + } + } + + static List collectFonts(string input_folder) { + bread.BaseStream.Position = FONT_offset; + List entries = collect_entries(true); + List filesToCreate = new List(); + + StreamWriter fontsIndex = new StreamWriter(input_folder + "FONT\\" + "fonts.txt", false, System.Text.Encoding.UTF8); + fontNames = new string[entries.Count]; + + for (int i = 0; i < entries.Count-1; i++) + { + XDocument xmldoc = new XDocument(); + XElement xfont = new XElement("font"); + + uint offset = entries[i]; + bread.BaseStream.Position = offset; + string font_name = getSTRGEntry(bread.ReadUInt32()); + + fontNames[i] = font_name; + + xfont.Add(new XElement("name", getSTRGEntry(bread.ReadUInt32()))); + xfont.Add(new XElement("size", bread.ReadUInt32())); + xfont.Add(new XElement("bold", bread.ReadUInt32())); + xfont.Add(new XElement("italic", bread.ReadUInt32())); + + XElement xrange = new XElement("ranges"); + ushort lrange = bread.ReadUInt16(); + bread.ReadUInt16(); + ushort urange = bread.ReadUInt16(); + bread.ReadUInt16(); + xrange.Add(new XElement("range0",""+lrange+","+urange)); + xfont.Add(xrange); + + spriteInfo fontSprite = getSpriteInfo(bread.ReadUInt32()); + fontsIndex.WriteLine(i.ToString() + ";" + font_name + ".font.gmx;"+ fontSprite.i+";"+fontSprite.x+";"+fontSprite.y); + bread.BaseStream.Position += 8; + uint glyphCount = bread.ReadUInt32(); + xrange = new XElement("glyphs"); + for (uint g=0; g fonts = collect_entries(false); + //Console.WriteLine("i\tx\ty\tw\th"); + for (int f = 0; f < fonts.Count - 1; f++) + { + bread.BaseStream.Position = fonts[f] + 28; + spriteInfo sprt = getSpriteInfo(bread.ReadUInt32()); + //Console.WriteLine(""+sprt.i+"\t"+ sprt.x + "\t" + sprt.y + "\t" + sprt.w + "\t" + sprt.h); + using (var texture = new Bitmap(Image.FromFile(input_folder + "TXTR\\" + sprt.i + ".png"))) + { + using (Bitmap cropped = texture.Clone(new Rectangle((int)sprt.x, (int)sprt.y, (int)sprt.w, (int)sprt.h), texture.PixelFormat)) + cropped.Save(input_folder + "FONT\\" + fontNames[f] + ".png"); + } + } + bread.BaseStream.Position = bacup; + } + + static spriteInfo getSpriteInfo(uint sprite_offset) + { + spriteInfo result = new spriteInfo(); + long bacup = bread.BaseStream.Position; + bread.BaseStream.Position = sprite_offset; + result.x = bread.ReadUInt16(); + result.y = bread.ReadUInt16(); + result.w = bread.ReadUInt16(); + result.h = bread.ReadUInt16(); + bread.BaseStream.Position += 12; + result.i = bread.ReadUInt16(); + if(oldUndertale) + if(result.i>20) result.i--;//Some old versions + bread.BaseStream.Position = bacup; + return result; + } + + static string getSTRGEntry(uint str_offset) + { + long bacup = bread.BaseStream.Position; + bread.BaseStream.Position = str_offset-4;//??? + + uint string_size = bread.ReadUInt32(); + byte[] bytes = bread.ReadBytes((int)string_size); + bread.BaseStream.Position = bacup; + return System.Text.Encoding.UTF8.GetString(bytes); + } + + static byte[] getSTRGEntryByte(uint str_offset) + { + byte sy; + long bacup = bread.BaseStream.Position; + bread.BaseStream.Position = str_offset; + + uint string_size = bread.ReadUInt32(); + List listByte = new List(); + + sy = bread.ReadByte(); + while (sy != 0) + { + listByte.Add(sy); + sy = bread.ReadByte(); + } + bread.BaseStream.Position = bacup; + + byte[] bytes = listByte.ToArray(); + return bytes; + } + + static void recordStrgList() + { + uint strings = bread.ReadUInt32(); + recordStrgTranslated(strings); + //bread.BaseStream.Position += strings * 4;//Skip offsets + byte sy; + bwrite = new BinaryWriter(File.Open(input_folder + "original." + (strgWithBr ? "strg" : "txt"), FileMode.Create)); + if (strgWithBr) { + for (uint i = 0; i < strings; i++) + { + uint string_size = bread.ReadUInt32();//00 after string + bwrite.Write(string_size); + bwrite.Write(bread.ReadBytes((int)string_size)); + bread.BaseStream.Position++; + } + } else { + for (uint i = 0; i < strings; i++) + { + uint string_size = bread.ReadUInt32();//Bytes or Unicode symbols? + if (i < strings - 1) string_size++; + sy = bread.ReadByte(); + for (; sy!=0x00; sy = bread.ReadByte()) { + //for (uint j = 0; j < string_size; j++) { + if (sy == 0x0D || sy == 0x0A) + { + System.Console.WriteLine("Warning: string " + i + " have line brake. Will be replaced with space."); + bwrite.Write((byte)0x20); + } + else + bwrite.Write(sy); + } + //bwrite.BaseStream.Position--; + if (i < strings - 1) { + bwrite.Write((byte)0x0D); + bwrite.Write((byte)0x0A); + } + } + } + bwrite.Close(); + } + + static void recordStrgTranslated(uint strings) + { + byte sy; + bwrite = new BinaryWriter(File.Open(input_folder + "translate.txt", FileMode.Create)); + for (uint i = 0; i < strings; i++) + { + if (showstringsextract) + { + Console.WriteLine("String " + i + " of " + strings); + Console.SetCursorPosition(0, Console.CursorTop - 1); + } + byte[] strByte = getSTRGEntryByte(bread.ReadUInt32()); + for (uint j = 0; j < strByte.Length; j++) + { + sy = strByte[j]; + if (sy == 0x0D || sy == 0x0A) + { + //System.Console.WriteLine("Warning: string " + i + " have line brake. Will be replaced with space."); + bwrite.Write((byte)0x20); + } + else + bwrite.Write(sy); + } + if (i < strings - 1) + { + bwrite.Write((byte)0x0D); + bwrite.Write((byte)0x0A); + } + } + bwrite.Close(); + } + } +} diff --git a/WinExtract/WinExtract.csproj b/WinExtract/WinExtract.csproj new file mode 100644 index 0000000..15e7799 --- /dev/null +++ b/WinExtract/WinExtract.csproj @@ -0,0 +1,65 @@ + + + + + Debug + AnyCPU + {569D8DBC-847A-4E15-987A-79D9A8AB58E2} + Exe + Properties + WinExtract + WinExtract + v4.8 + 512 + + + + AnyCPU + true + full + false + bin\Debug\ + DEBUG;TRACE + prompt + 4 + + + AnyCPU + pdbonly + true + ..\Release\ + TRACE + prompt + 4 + + + + + + + + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/WinExtract/WinExtract.csproj.user b/WinExtract/WinExtract.csproj.user new file mode 100644 index 0000000..0dbf558 --- /dev/null +++ b/WinExtract/WinExtract.csproj.user @@ -0,0 +1,10 @@ + + + + "C:\VS\UndertaleWin\data.win" "C:\VS\UndertaleWin\DataWin" + + + "C:\VS\UndertaleWin\data.win" "C:\VS\UndertaleWin\DataWin" + true + + \ No newline at end of file diff --git a/WinExtract/WinExtract.sln b/WinExtract/WinExtract.sln deleted file mode 100644 index 61791e4..0000000 --- a/WinExtract/WinExtract.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 14 for Windows Desktop -VisualStudioVersion = 14.0.24720.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinExtract", "WinExtract\WinExtract.csproj", "{569D8DBC-847A-4E15-987A-79D9A8AB58E2}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Debug|Any CPU.Build.0 = Debug|Any CPU - {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Release|Any CPU.ActiveCfg = Release|Any CPU - {569D8DBC-847A-4E15-987A-79D9A8AB58E2}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/WinExtract/WinExtract/.gitignore b/WinExtract/WinExtract/.gitignore deleted file mode 100644 index 7eb4e9e..0000000 --- a/WinExtract/WinExtract/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bin/ -obj/ -Properties/ \ No newline at end of file diff --git a/WinExtract/WinExtract/Properties/AssemblyInfo.cs b/WinExtract/WinExtract/Properties/AssemblyInfo.cs deleted file mode 100644 index 865ea5e..0000000 --- a/WinExtract/WinExtract/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Управление общими сведениями о сборке осуществляется с помощью -// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, -// связанные со сборкой. -[assembly: AssemblyTitle("WinExtract")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("WinExtract")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми -// для COM-компонентов. Если требуется обратиться к типу в этой сборке через -// COM, задайте атрибуту ComVisible значение TRUE для этого типа. -[assembly: ComVisible(false)] - -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("569d8dbc-847a-4e15-987a-79d9a8ab58e2")] - -// Сведения о версии сборки состоят из следующих четырех значений: -// -// Основной номер версии -// Дополнительный номер версии -// Номер сборки -// Редакция -// -// Можно задать все значения или принять номера сборки и редакции по умолчанию -// используя "*", как показано ниже: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")] diff --git a/WinPack/.gitignore b/WinPack/.gitignore index 9a37c8c..7eb4e9e 100644 --- a/WinPack/.gitignore +++ b/WinPack/.gitignore @@ -1,2 +1,3 @@ -*.pdb -.vs/* \ No newline at end of file +bin/ +obj/ +Properties/ \ No newline at end of file diff --git a/WinPack/.vs/WinPack/v14/.suo b/WinPack/.vs/WinPack/v14/.suo deleted file mode 100644 index 6fc8cec549f73ace7c91ca6e2c1653fed433e4fb..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 46080 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 + - + - \ No newline at end of file + diff --git a/WinPack/WinPack/Program.cs b/WinPack/Program.cs similarity index 100% rename from WinPack/WinPack/Program.cs rename to WinPack/Program.cs diff --git a/WinPack/WinPack/WinPack.csproj b/WinPack/WinPack.csproj similarity index 95% rename from WinPack/WinPack/WinPack.csproj rename to WinPack/WinPack.csproj index 16e690d..9402aaf 100644 --- a/WinPack/WinPack/WinPack.csproj +++ b/WinPack/WinPack.csproj @@ -9,8 +9,9 @@ Properties WinPack WinPack - v4.5 + v4.8 512 + AnyCPU @@ -26,7 +27,7 @@ AnyCPU pdbonly true - bin\Release\ + ..\Release\ TRACE prompt 4 diff --git a/WinPack/WinPack/WinPack.csproj.user b/WinPack/WinPack.csproj.user similarity index 100% rename from WinPack/WinPack/WinPack.csproj.user rename to WinPack/WinPack.csproj.user diff --git a/WinPack/WinPack.sln b/WinPack/WinPack.sln deleted file mode 100644 index 87cd784..0000000 --- a/WinPack/WinPack.sln +++ /dev/null @@ -1,22 +0,0 @@ - -Microsoft Visual Studio Solution File, Format Version 12.00 -# Visual Studio Express 14 for Windows Desktop -VisualStudioVersion = 14.0.24720.0 -MinimumVisualStudioVersion = 10.0.40219.1 -Project("{FAE04EC0-301F-11D3-BF4B-00C04F79EFBC}") = "WinPack", "WinPack\WinPack.csproj", "{D93F0BC3-593E-4B16-9C75-883DA4D66542}" -EndProject -Global - GlobalSection(SolutionConfigurationPlatforms) = preSolution - Debug|Any CPU = Debug|Any CPU - Release|Any CPU = Release|Any CPU - EndGlobalSection - GlobalSection(ProjectConfigurationPlatforms) = postSolution - {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Debug|Any CPU.ActiveCfg = Debug|Any CPU - {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Debug|Any CPU.Build.0 = Debug|Any CPU - {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Release|Any CPU.ActiveCfg = Release|Any CPU - {D93F0BC3-593E-4B16-9C75-883DA4D66542}.Release|Any CPU.Build.0 = Release|Any CPU - EndGlobalSection - GlobalSection(SolutionProperties) = preSolution - HideSolutionNode = FALSE - EndGlobalSection -EndGlobal diff --git a/WinPack/WinPack/.gitignore b/WinPack/WinPack/.gitignore deleted file mode 100644 index 7eb4e9e..0000000 --- a/WinPack/WinPack/.gitignore +++ /dev/null @@ -1,3 +0,0 @@ -bin/ -obj/ -Properties/ \ No newline at end of file diff --git a/WinPack/WinPack/Properties/AssemblyInfo.cs b/WinPack/WinPack/Properties/AssemblyInfo.cs deleted file mode 100644 index 0949b1a..0000000 --- a/WinPack/WinPack/Properties/AssemblyInfo.cs +++ /dev/null @@ -1,36 +0,0 @@ -using System.Reflection; -using System.Runtime.CompilerServices; -using System.Runtime.InteropServices; - -// Управление общими сведениями о сборке осуществляется с помощью -// набора атрибутов. Измените значения этих атрибутов, чтобы изменить сведения, -// связанные со сборкой. -[assembly: AssemblyTitle("WinPack")] -[assembly: AssemblyDescription("")] -[assembly: AssemblyConfiguration("")] -[assembly: AssemblyCompany("")] -[assembly: AssemblyProduct("WinPack")] -[assembly: AssemblyCopyright("Copyright © 2016")] -[assembly: AssemblyTrademark("")] -[assembly: AssemblyCulture("")] - -// Параметр ComVisible со значением FALSE делает типы в сборке невидимыми -// для COM-компонентов. Если требуется обратиться к типу в этой сборке через -// COM, задайте атрибуту ComVisible значение TRUE для этого типа. -[assembly: ComVisible(false)] - -// Следующий GUID служит для идентификации библиотеки типов, если этот проект будет видимым для COM -[assembly: Guid("d93f0bc3-593e-4b16-9c75-883da4d66542")] - -// Сведения о версии сборки состоят из следующих четырех значений: -// -// Основной номер версии -// Дополнительный номер версии -// Номер сборки -// Редакция -// -// Можно задать все значения или принять номера сборки и редакции по умолчанию -// используя "*", как показано ниже: -// [assembly: AssemblyVersion("1.0.*")] -[assembly: AssemblyVersion("1.0.0.0")] -[assembly: AssemblyFileVersion("1.0.0.0")]