From 0dbee935e747b94b7cd726ba650c96910ae9f562 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 10 Aug 2013 18:02:29 +0200 Subject: [PATCH 01/44] load the Dune 2000 mouse curser from the native MOUSE.R8 format --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 2 -- mods/d2k/bits/mouse.r8 | Bin 0 -> 160330 bytes mods/d2k/bits/mouse.shp | Bin 622780 -> 0 bytes mods/d2k/cursors.yaml | 4 ++-- 4 files changed, 2 insertions(+), 4 deletions(-) create mode 100644 mods/d2k/bits/mouse.r8 delete mode 100644 mods/d2k/bits/mouse.shp diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index ca5f3fbc17..9fe313a59f 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -375,7 +375,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "4745", "4759", Path.Combine(pathToSHPs, "marker"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "4760", "4819", Path.Combine(pathToSHPs, "researchzaps"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "4820", "4840", Path.Combine(pathToSHPs, "deathhandlaunch"), "--building" }, - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/MOUSE.R8"), pathToPalette, "0", "264", Path.Combine(pathToSHPs, "mouse") }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BASE"), "--tileset" }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "748", "749", Path.Combine(pathToSHPs, "spice0") }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBAT.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BAT"), "--tileset" }, @@ -678,7 +677,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "marker.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "researchzaps.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandlaunch.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "mouse.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "spice0.png"), "32" }, }; diff --git a/mods/d2k/bits/mouse.r8 b/mods/d2k/bits/mouse.r8 new file mode 100644 index 0000000000000000000000000000000000000000..363b1e3de46e1ac42d6fa91caead00173ec45ee4 GIT binary patch literal 160330 zcmeIb50G8gc^`H!;#Qi3n-aydEyc1IyR#hZW+e{ynZvLRc499)2_8pn1n{wVO|%nb zs9kshD8X}f7fPEqRLeMa6M3>IK#G)9RZ-coN;|F6Dl=^UOiWbUU>_EU6PT^4Vnj{G zaTHe+DVm^3XKnZQ`~IAB?w_{+Dbo0}_W=9uIp6R5zH`oZzVF;~&%5v5{Euc?#=md> z{_p=j|L*_pd-kB1z4yNRUKtLV^E4Qw#Y-sWxno(eh*E;GG_nZr(xpqT>eArSkjXTo zkZWQ^j_lwwzk7#|;K|>+ z!#jBY@897ayz7B>7x2IVYiyRG44!s>cAVM`J#b(~ zJEIifU9KoF5XQjHX!C?HH8rcaF-#LK;9@Q|X6gX`!NvAcXqR z@2Q#G(RTYJWd+vye65oY78cqkyPb}sRv(%`L&T)AEVFrd>C zj~W3@oMR@*%`$7Kc*!&hikd+PPJii3UlMd?dN5$Lgm3`>MBE(>MzqWzbbxB703n&P zW0XBsyvwL!7O_H;0<{W*{aDsW8I8`8TV-8oI7*ZVx)5{{qz_J6jHo3@aWO%q(|HJ> z5MM$O5aI8#5vApTGGH)xicfoNWI9oKGzmNfdxnI8Q4p;~;IO0^;-Wu0?I2Nv%`~PY zj|#YoJHB+oE$K&00Ft#nI=Ogs1BiP0Fc}^qSk5_^?+5aJ{P~&WJFf?4uMrQv3W>S| zKb(%aA88%7PPr;stw@pGK6;M~xFpg`d8v=UAvGAGS4Hduq;!VqjlMWR4j z08cQ@&cI^E_!xl;x!doK!r9uXepegF7%D~y+*>#h>!AWa!3cr&WC~|WJyr1pq_{G` zrKRZ65&}&IOr4qx0at^tK^$ZCT;LKfV0uPlf^c`n-JS|;h$N!uBC|t8Q4j}1E_2(o zok?Vzaq^)RH6e!}^8qAa$?$j;W|Ah?gb1fNg{=Xpn$lkD(-kp(f;XZ5%OKm(~#V--9Q zCZ{YWEjUGEGFWB=onhc?CEQ~}=NI6Z<(aGj?6GLjl@M1r3WaIUrVI8IGE{&A+&hE^ z*S)Zm=>$VDyg1KIC+=(Lfdi&*foH!U9>a@EN+vluik-E|Y^{VK&fz@WAb2!ckK7(p zvJ7)i2b1BX2#<-$0mJ~SzBIfdB)L>DQCr|Ltp!@CP!-MhgCz~FuV$YYA?)?ZF?_HC z@Rm?6XEd~mp%Zx!TxumaaHLvJgG=!=bQJdBk_KSG6hZ?qXgXf7CUJxg99Kg_VE73J zOzo=^=B&FuagJ(Ouvu)y;7aFR4wjDsgNx28K0yW3Hk4!l+bma&u#_lIttK!VZMX#| zr&Xxeq$t`d>zGP#xzd1_f{WVOB%X}X6j%otWH84YZcHS4SsN z>5rp0a)OhjddqNRFgy{pY!HmK7MKEFpe6-pNJwb-eiYN-dgBk(1(%O_deVVlNFG@= zks~~E(E%m(ID<=Sm`)?Zm1}SbE};`+M>uS}WckLkPDur>S~R$(apg)ASa8XiK||BV zI;d)Q8{rr0bt3>FeN&#{3pGXor&flG8I(Z%4>uPoSE zFlhL(u~eYJWjb*n133goiNR$S6=Nxb#TVM^aA>fopfnTqF5J)wgEUp+$3`iD%%Byp zhb3!Sfgvm6Ma)VfS1YUxZv)TwLo^MpgYT&eE_Imcd$gX?XK#F3m<7^Br37r|;ovRBjS;{bWEVwi_s6m2@%We-61{Yhb>fsoD8BHwi+Ryh1dr^_2@Y@8egR8^OM8P5w%}sZ7}Pi9+PJ zK_zRD9LkuMBgYPS3g!DzN`vcDf4DZd;GD$~PL!B4jlgYec2t?F=22?d%PkB*9;hJ%n*J8y8;FmjHb&Zv7W+SLm{}R zGr-bai2HUPgcauui{OyGG2m1Rz+hRTa5s>_VX=kIQPLAQWyd7qQ|BGy5xA|qJUC0i zmj;(uF0A1+dcxMXL^lEmO;K+p_f%$QF4jf6YxuFG_2FBJ5M1yI3%`gX3Sw_jHEiIC z9fkqZ*#K1sj!A&UYgCOavT(!V8AxhMf(uQj4kp1gn=r6tN(64G^_P&RfM~|a#iL+F zQlSJqDd#_m0(S#_>-%eC)!>)xc5AazSwg0ig!Vu9I`Cg7l0F~ z$4fYX2=CGs>oQQ>IuTsM7PNxoW))&x z6YX^9wrliw4V6`*2nTq)ea#tsnvSd2NcoC>$0;7Ky9eGUh`U##RwTgICDa_&PxLjS zp+|7)!ezfs-6pxPQ1p0IBEtCS_vM1$dWC~_FOz8<-)M?c8!ez9(n3haZd`$^pnZy1 zlpTS&rT|AV&pG7ftm4!k-S-xqng*4W_@$_)Q`;D?t-xz5PAzWBaV}nxr%nxzFE}*@ zOPty~p51|`m}VVGSdb{aT51>1#7Nsfn#a5IiD&@f)$lEN3 zJOQZ-j0_1=D{B~fmlyzTgbG1d3QjH2rM^i&$XCwxZTUe_2t>a{zUiseKx+ zcWQTCnOay662~k$wQUhgmlYF#jZUrp>VnQEnv^J6DrE}vB%??@8nKFS0g{623`oVP z-}gg}Q=4nP(@rfDbvjeuxKnf7-f5@CoU>b;`q$pqIQ6^a)R@O_rI~scIraLFyhW!r z4_MRnf$Ees=7?|9oZMV~!y1e|*^#`q4ovGv6$-WRQ@5s$TO*|lMb!jR-5TM}iC+q0 z7_{v>Z;j}Q-MpFtwgBa6+>%en5%lZCur%IzYlIg|P)j{#PiRiJM%J*AP~IA0?4RZR zu=QIbl?z3Bu67vTbLsX+xKNB9KYC4#g?;rx(TuUWTDnj~`?1DU;28b$KjL~a{N4r^Mh(*%_$)y3yg?rTquu$ zat$fMba3$x9vn>~!$Lzh1{DVD1M*S4_gPTtNMkId>cgN@@*EzVr9ilzPct~YFNdDZKT95Q&VKa zw?&F8yrvvv;5Qz^AVb2hh^JOpry~Qu@_<**#ye~QBPj=!QVSS#NO7ye>go(`v7HGF z#8;_6S^zJzbC@vbeh%?)hppq-L1GfARo%Wso?c3gNSINO#NmK*2h;EnJIb&&g;@># z3Jri1z9%BLR-v$&2r;GxB)-BL6vp>Pq}W%yLbs2#HT_yi8^Euim;{7nx$B0?^_wBc z`*&)%69AJYoB)&K+q%QH-;Xy5>X(nwJ{gdkdWUTqJb(Q_6Fg1u@Jm;5&LlLN;IVKG zhkQS>Y4CjUk2k^71Wyw@Awnc0r~V=drF=g=(%|{phnnDNf~N@{ghi5WFnGRwUlTk{ z@HD}bL=Lhy7(92~-vmz+JWcStt>C%uPc*^P1Wyw@Z!37Z|8WyMP4G0qb3?&%H@J9{ zz<2S;ApU;hsreW@$@aeJs+Re!iX^SeOZxQ}Xa$r!3A2cl%VZFMAG%MATNu0uK^mZEHEob%37ZgxP;cCaHujT z#rloK;UMA!S7BfMg<`QkLRRH@d9XkIr{Z9TzUg;DvG1X5o$;ShSuuX~XN1@e?d<3> z%@fe*T-v{pW&7gHeanmPY$`2k#kr(xwTN?(;I*2tkb(h3qGs^D!-7MDmA#mjRloKh zxK{^)DtA&SI*Y?zwy|}7C{hmBXoRFl4i+ne{R98WcLm^+C_-Pu;0B7QlHZT9`R~$T zhuUsdWC!mub5_dYJ8M7lzY7kV;3iBaFQ#R&m=ZWTS`-OY?j-*~mzTrX29Y8^6e+J+xzQM{>Sm+W`k~CyU?9(H(yCc(ccd=l@N9w53l#C(L@ICH{E{<@} zcF{pp+?>>%4 zXTMCLRvaPd2#7S+pl;|yxvAuG5$#=}=y1YC?h>af*bzzEqx?A^%(4%EdC@(F*33oDtWEjDvB&JCZnhcn`OQI&{mGobB|Vr4?j$* zs?f>3Usx9i7iO>73vQA`PE0F<=s)61Kw6X`;1vbaqfa>iqX+wuOf&naSw_il6{Yj6 zEs~(4GO%kV1K`1?jZi`4XXTO3$k=Zh1rQ$Opbe6$+cb&cQB9d_0}_52>FhGb;w4lX zGFAggphae(8whF~w*UyWsK>C#o%4DtJ&%8Csb-MV$up>znXNS63Wzv@EquIE{s%7L z0dNE`b0#_ylXF}WQ5g&A9OP1fTD5=Zpj#MWDYZEO0qs8K4ili54>wF^lF=TfR8BGF z9#E|U!KmhpA`cIcxBTciM`n$nR~gW0{Dv#GM7zM|FsbuM2V&oNts(+OkDXRRr~yUf zrD1YNff2G!j!f81~E|!pmP65-U9VECMWv7@#K|xUk!)e(W1+x!G`b7$Qzy?MxEvT4d zQd9gOGuo>ii)68aVxhf`iszUde-P?)9O0DkZ(u|csUfMY`Tf+!H!D~N@t>AIK?B^bjSHebS0gMT0W zONoQx-Ce`Yt(JaQi(gjqIi@&F<1lkxzG9!5xyUCr+lwKPxr`DX2g0x44@_Mmh7C48 zpp?&7Mt5KD#NhN3(dXGP^&-DZ|uf);=@{)uIITYAsGejtPj}$W$x{%|o3H;-I zDE#}W6G;a_M@nuMIIz5RX^0lv?E`2n`i!5K>Jwb2_yl+K{hoWY!&A%m*w0=!)hR3r z`Pfy_yoD!zqZvPIZ?uqKr{?+Hf9o2*pVz9V&i9^w-Z}*edmspMqC!8J4P<5lpYumC zfxKv(5GgC7lCp7r`efNSGH9%w3A4^nEFdM=hQ^s0$m3sNCHb=Go;>5jKk=a4TOO!>q`0Z5cWVv-hTkk+GW~;Zn(zz$Gz(?_xbbhk-iFp_m!O@!8<8E76OSv z4-ArVMo}f)TBDUI8j>MZ<9zxPCF7vE;YC3(&KBB#&7}_v=jQP1?+r5!f&q>L+aNf| z0#WHS$l^iwEE7Y^)rd4TwyN3Embv1^%Lk_3pZ~&G=n5pK&a2Pu|Bon43Wa47d7fu&wiWY&-Ot z5pWP;9K|a5RAb~b_lUqW!;MYZl*VND4BA6JLB7Y-><~KS zWg^~D<)cOpe^PF)hEj`Kx5>F`d+yhr>X(dzVxA1Uaa)svJz0sS3J=gK{Mfz6I6ijXZ72CehNXUC@np7 z@ZiBE+=vqBU|l+RkmQ38Euo?;#Km#ame@1@iGXjB2-%8hL3^ zH9X3P(?AQWRwdN%DEgX`mG={`rsV9`+tfRMXlW7LB+JN|hC_#zl_G*Wq4Ov~KHa-mcqcvaNm8>D~<%A50a zXHRk4K5YqjSl*_mJA48gY9Jd&imvgwb;)WX2>b}eMR;N(WK zo9U?b2&Njp<_)5l$%+EYt77{Uz)VngDGAv zzI>RVwi=(cFXuKiyqufuVPeDf@v&Cj&bWI5X#x_ZAiKX;NQ4YiSs@5fb1LVW11gz_ zA-4lmkS+*WA;<H%!Jreq`&TObbXjSi`m` z>YxXNV*B=Pu`UB;94YN!moE->Q2H#oG2m!ghj0BI>>IQ>{v7vx95)FE^i&?)0MDZU z5;W>J%lY1l$4hP0p2OoyucNn?04%(3n?4xeH7oY+jkcv}pJ^L1&ng*4W_@$_) zQ@aPi;|nm&*6k>|w|*K|r{;W-I5mbtoLVH+bF+PW&E<8hU_qdQkxM-jvzdr+suoO3 zdpjZ;K%nqJ;{+&9ZIV2R!MqU^r*;s{WJv7AJcc^aHw-K~xxjf1Sx6CON}O7vOEuCD z^1YASY%HQ2ORG(4E<3ehjEJgJyXEVh+Fe&hf%PD9%%W4b+vd~(6MxNuQ>(wapfnIV zgjOzj^d0lUlBA0@`_~jzt4{}Y7tH`&srY!pr0NF9Z{k~lbdvGXVpY85A`!1V*x^akVoFhgD4JkW^Y=gjs@X)=G1#KX86}Ju* zwr(!qd5IVjR4VmKCSHK=!&yf38>$zUCTdkH%^C?lN7b(=D8@52L}?^OkYEvXf|4sB z6r@O^)#^_0KuI$}IwgjD70urRkk4=bO@t7iRdn!Z45Rsbw<-G2hve{~?PDx`NJ|Gl zBtQH)c<@6cK5(+jhTGxchYzwuEFP8~*=A|`(Z%Fo#QBHrCD9HCKeQxrdU#ne)&iCr zIOKl>OzaY$`^YZ6k#q^<`T3(qsfM}vdFdK*2M->#EOQ~dt(^uufApC2fBxZv^GiAm z4?OTEAL2udkdQt4&@nu>Ezci*_)jiv9~1IJNZT#R;^9Nbjvbe5wz#->oLMwsX-RU( z&mUZRLs@fVUys@2q7~LTxKx*&f5Uu2y2J*U*Oaq@(}sqZvV`TiUHpcHkH6!j`hjlr z1~R}7+h!as9Xz_Ewi0W?GLC{1CJW3`Tv}XI<_F**hhW7;`U1S?frs(XrX}lV_V5D_ zAAJ;xUSE{9&ObcQCpT@wYHa$^qeoE=#cX>UwJf#_MXQioyaryXKE^sw>oJH*gO9%c zItf%vlOJ7VQA#xM(Zx5QDHN9$j|WiD*Tr{579+oTKt~?LFgO4(a;oRtlAc>J35T!bn9sCags0c2WQI`q1kX`B2||0v7H7V!Wu z6!F+DnGNQbj%ANfABK>fhL7XHU|_&#gB|q&3q>iT^vHG`qeDw*su%O@5Sl4o#oE+} zJV+syy(mTw1!WJsJ_3%@K9b1iygUJuowP&wsB~U4@APizKD^fsM z&>x1f7L5`L%+PW>63CEpNI4;S*+^2XMAUP=FlbWaQHur@KKk;@FVBbY%8t^QFJq#! zh+&b0qetPv5>byT<&czN{B4wv9(*~JQC!+S`0`Ru^vmcRS~@ttsO94#jhN$uE)fxn z#?aHjo8K0~%ZHBjgkk>B_9CKi9_sm+P(;w7?SnXRV|)|`Ha~ywB8EbS7DIsGpGS}# zr9w8rW0vC5B#l@WZ3LF+Nt(#uc^+@1oQRNJQq&d*O6OxE8Bu-;`skkvg99pN5=rUaUc49T7IlOWklXZ!?c*{YD6*0B+pqUnMh8$tMT=TQk1%3M5oMId zgqPjK1hTCotqn`&I>Ks3`K&1>I8h|y*Mb+l#IodN3B^J9j-7M9{paH#96f3$2bqi> zQggDK^Oi>kasClS^N5y*wjX7l*?COQ%)+=2AHoR%-HX|yQ~`s7%#p)lL9$0J2iHD| zNl>jy4LAw0H`H)cPd^z<{jy~dP!eY$Ye;f%!5$= z)o*Jt8c9U5Yb`z2e{O8-1Yg@|)xt{M81Lx&xk{?%TCLXM!}uXNe$QQ#<~o3oHfpde zn;Y+R4)d|`wGZc?L!AouYo*7>e+M|E>)|XLcWE_wS&756ei=gTG zX>PneP86Q&^pC_U%Q-k}Eh-h#Q|r;r_)Y=ZQYRk~Vn)}=(4HDT}>1)>t&&{alp996DYxJ`{5v^_A4a1eHUAG)Zp+X;7ah;UWYI>7!v(-tl zk~LIrnqUBOmxlYeAOCnEK>3oyk!ifssvB+N?{qplpzxQGDEx4a!&XTo60DWnm^(t} z9qK#e&{U7&tSWHpNWD!pssybuxuWBT>(81YB6)jgB?a_IU9*XfAIS%` zgMe`DNJQ320<>tYR4E4Dp!Xovq9$2~qD8ckq^d09cn8@mI}%VRsES`FPOVxVM#@sf zC=m1=!5TT8I%)wSj%bSt5UgvAsWVXGldD|DCvQQ$>!;KBJOZb$^>@+I>a;dSqy5A6 zt6LGp`m}bQ4`A)$cH`Q{9DH)bqIyG~Dm7kTE7r^mvJtW^U3o&b-e?-1x_c>2EPNzr zfvyEXamsAvb&GvNJN4#Zn>ShmoYrd;hcjmFFdrUlSgh2Dass4()OrZ2^hl`{9k*TF znrhk2oq~J(9SE`!txh!8v|9VRlW2{Ql12#$s(MGsULS>I&aXImisWuQPmxcZNJFr0 z5)OLcYbiMoivv`MEdi)*dJz(-<-54R83h-Krr?4?=iFd*zi9h7xC8|X&u zHDlJ<(DO~Tm04%pqOXc!9RYnzHJEmL6ed!2a(K<0VRh&Z&`x4EgjM@sVl@Cr(v*5= zC+s?6(E9->O;2(^@K=%uyEZC{uv>yS8jNTVre&lNpj?HGz%qIE;RsOoI7WbTJ4w#T z`E8V>tn@~J(vdpXAphG36qLP1BpvKz{C9Yc^8bla;*2#Onzbmln(=*Fnaxw#Eo z=iy{nf3-KaF~G6~Xzgm0=gGskuo_YGcze)3+#z1yH-LjS&=D}VYuclw1-_0n;SqyI z<>(p5rml5TwOljSp;=C=&}y}9&(UmLT#pZGQCNk`K-jKs8IJ&MGlUMeN3=@m*SY&d#26I4>FgtH6Mcw*oMGhXn^r1}LX11QYPdpY?I zV8gY8zzIT?I2JzenrU?+>7e40CDk%&G!&$PM%KJ?7~KyfdS19=L2@Z71nmg>QsT6t z^%Om;$K4d8V7?q%>{4i0s*4P6m6RUxu#*`rkct`FvC^@W^qc*hoxdUt!(xOagMk0!V*8cJc zRC{O)1cfXwx0QBjCnRfrC=uZSsS=`*uXlB6Z#K&sj_!maEilFtD6;YzUsv zK1wGfP&^uq0$6h58I}_#L0&s#j8agB#1f)1bt;Ct^+!U*wFDWB6R?bkBoiNjreT&= zTTpLZ3bZuiK~^gaMvbvisCIWWDtKC5CSNGACGWCjTh(2P5|xUoa*FY^_UfTa*1JB7!n^F%y{ zlub|VJNx#|o}G5Vn;MTmV*!2qL6rVO{PA_qui$Ux@fxSD^DGWfs)>0S(Gt}iu)xdF zV@ldGHT4YLWttzxOLfy60wD^SB$nwL=3UeBPI?kWBVmF%!#a_(E~ZCx7_$=H7D?F6 z9OlOmCKB4p%8=4_a&T&hN|h>tG&10=&~$1_xip{Do9_jQHQZ7aY^d%UxY21_` zffZ*rYtoLfL&NxPM7dVcwewQ)dRIx(^O`mpsc41jCDM0(p+1a8PV>+UZyyyz@|r+> z-(0y(fX<#>see--#n!}=rYkQBRF!MuWi#2Dy+=>AudYEMW!1|HC@`D~L^Dyy%RBZ= za7FqcC``nv`2s$ssi{>uH9W*nmR6@FJm3WmP6;ah4^YGCz$#Fk@&$$D+FA&X2x_a) z^0VUPs1%Z`8g*z5WznazF*Hz=u;O4V#+*1YK1pG-&^U^nb%?!jm@F%2&uY{Vu!OjP z%o?OfsD_33{fM)|bsT$VzkVk#k+>zEE^IEWzZ*_n@H{ggtZGiJuTeCz9B6VlHRs2h z=G3d!py;>KDp~%xQ`2wQObmXVQ-jtxbr{#1=hV-fZJb(X>c*+>n3?)hPc}~7IQ1R2 z{P^h8jZ-&HeTO;qgP(7lx^e0|%&A-dedE-PQ{Q1u{mS2MoVs!9+uW)7ghl@Gjt4$G za_gC@Q_F+@!_G{S!M)S{q!_dO?LjRhKpkX26$(HZN`N9%08$7yT+45ygrT>&IUX7h zAVCOuU+|>Y6akcew-Bn*{oVwMi0l$48@>TCAVT&!la#%qt7-De0w=Cy%#CC4>ImjiMu%*ASZ<54IpHx^1I+oK`IVB z_4gVFzP%i{nSl#y;P3n|jRW6o2Y!od;Gryo!~BPg&xy%=>2QFY5RNy1kfqA+f;R=J z%)np$UmFK*960!*WZXmL7@z``g`0v@9Qd#QgT{exwgV^YS@V*eF5+|voXG6%8ThB3 zYaF<7;4qoq`ZF+}P{CU}x3LHOZT#K!j|vVPHZ7C=)NUk(jnuw8S4Mz9;{!S@1)39Z zbXr1kT1qln)PEUSl^rvbYa$pp-L ztYOZV;_}eSbnx%~C(YpR+QD!A(`N8@?cl%f`DXBU?cjgl|7Zq(*AD*vjb`w7?ch)S zvu5yj?ch&uHiN%w2LFd}0mvua{2s3H`DWb@UMvj0ULMvz^BULF@#?W~X&&fBs*_7p zQ&XYJQ!vZac8_(IsO?@2wY`BC?3H=j8ykFoVwU;dw=biH!#isN z-~N|(&`|g4hPrsJwxO06Acu4H?ilJ$*HG``75LY`-VF5}zAXD) zTvPM0$Xnki4K-Ia&@f{H*b ztjyvSsb5;-h`TnOyGR9Dpm1r8j9mn)fEB`FC#qd0mw3z9*4~gJ_xDc?*VR7MzjC!1 zY9DP5>K#1PU;Sn?)VpM;zx=Ics7DO7-fVy8OyHmYSItn57-~OX+qrh9vvN2c7kGHH$|ySS$2+xSlY zW?`u9+O_Zk#dnkzFOHG3Y6@4!e9t1<7w$m^+a=yj09ta*eaXJXNQj$ye>wO9(MXha z;^v0jnh;K$&?)z-`}xy2m+i)MAqy>QrzBJ9QhHRr!Wr5~>9uqqMPfp7Vu7T@5{X15 z$^GW(pdS8CGpOnf$-uM+xA&kJJGdR6MyM$hh_PI)i4T6#|wuIG~4E*lY-dA=FJ zqkqqv=P5NlDZ;myK!+z+y8zT)K~oc*_=~#nE4r(M7Qucm5+Ji zwJM+S#qU&~dv9e>tM@6(Xk)45qn;d->%WwtNOr*z)fE=LPZb`mApK5NMU7qolny;5 zRk}#U7qKP4=niaNv{7`r0h^l_6$x|!+M7(g#EEnOZGIJ;CTUgPuBT@JQfB0}7sZQH zvKYMrINg9yOfso>LY6DwLOB#-by;3^maRYBILn}Mmf$OJypXRr%eU@ooTYJ=;2-h! z50EO(^4cG5oTYJ=8+4ZGy}?;r!j}?Wwj)*zB?^nhWk_Hsl3lPwb%mvcMyRN?(1`R3 zp!HUkCIg7>>Y%rFc5~d@H&|Ia%bguUXxrJ%&EQ8FyJIa|Ia}PK04o#vsz9<+ zF%at6vkpYaZ+VJ0Jb7I;h(Y0&sIZ+<*cC~s#TLFDghmN+ZlQ3zDM;lNw;#K=ap1;* zgD*-ZxF|CLDo}44QgPtvxyFGT2M%6(`#JC{Ki)WShGt>omiwEwog4On z!4`LNZGRPf)lJ;Bl`Jdo-;$;~t+K6pR(5DW^!-;Hw~V;Pombni9jqxaEA7?l2G5|d zO>0eRgDQzTwC%nOlsqohH)ng}PUJ5TajPAlq|_S=L{dSd;Ca2fPHF?E-II6BbducO zl7fF|yW&Pv!s#q_RL&bG*6NH~UXrugoyua|f>x?k8#q&ra9^E!%3VLzcnU`d)@nRu zM^E{QKizmr<0)ZQiL*{+PFXqJcuM0bH{vN@eyH)3##3&@Q?7ov@s!3>Zp2gW{)SvFc5bRVQFJlPh%R$O+f-sC0>*nkPtlpJ}Ls#_rTYe~_p7851$ zBbd=Lij=9MtU{Dck{W8VkCKH1j{zwQgpeBw@m+Z<1LN11PffpTR!%e8gB`wG-*`*oEx`iU@s^+XtBtn=TQze_$y<1@1+Soauf-d@-(vOp z-hyoo|NTlZtnam?Pa=vtE$z4igP*0?^M`OJh3&H>zhB|)75@8`nmv~C4vX$al=fGY z*k&`Kf)7BFrwK`0L6ziB7}5^lXDuZ7!-cF@{8_?abHg42ZAAW9L4MTYI~=ZI*?zzx zbk~s5eB;Cg_2_C-s?+3#2?HW6Qd62!i!`N{X{0Jm?jTRc|5K-%@%Mq+jpP6Gf2|q+ z-8}y5|7A1&yLtSd8Z_g-o5%l)k2T}Jo5%ml|5Y>oyLtS-@^~};yJ`G+?Z-WUe}ilP z@9}<%pS}M0^9F_L4uIUY@V0+%VV9_SV?}(vg}o$7$pfQrowavA*=_*otAopHPWI^-4>P#hU-)mD@!!qk|Eqty8UNip{$Kxv zX8d>a_UU$N$@Bn(^Pw4_`eTVIzNQJZ{ymZ?=pJhiPHFoUn9g{ zP{_q+{T2Yf=Z|{;@h1)7u0F~VmsrWKF4|lEs|$V`uV38zyNIMlJmRwccNe^X4?oCQ zMadp(iEr;KcLrc=b9{yGTLF4=z<^X<^a&8|59oHCP5_nbEdtm92y_A3n@s#&MWh30 zCvS=tKzf0%YFYt<1CG{+@Q03{C{kmrE!)K&cZzwzAySWu*V|ri~hxuv(R!(QC>GG z%8#|=%?fdc#ku4D%AggMq`NErTMK=5MR=s8{n(=PM2oiVpw#cH@cs&1UDiLJURd%d5{-?&VY@@Dm zEb|dMT-AqaiK88>_sflAHI7wqBbmqw6e+w#$9nF6ZXBy|tb!Z8GmiDXzu!1k<5=&4 zV}0^}YaFX_tarh&zWxsy$7&qwU2v=ipKBbeajbX1v3>+P-jBamv5&>Sr~YBdv9fhb zh00hsbLGm5-7kD$&(mj4pI%SV^)sjTENE&!wvuA&XC8B8VWIuv+Io~bv-+6H0BN_^ z&IRnu>gpbn2)En)%bz)S&cz7zFAgvELEjn-aNPRfa?8Jlwpv z)f>Aw+#GIwWaR~KMz+4T_K}NQmxjyBL)hONyDt+38n%c(qLLwE!eo+=~jRi`76uWnhjO7mJjTy8)TIk>E-ygwHc)9{U1zJWuX9 zUBciSC)E$zPp^ler`+1==iEU{(CX?J#5u)3Kl2UuCCI=%;kXL6`)ey_s7Ml!;pS!^ z5b*wIqPL@-&u)y3wfgOTXKQQg#pvwtvOWFQSnuNH&EE6J#n*!at~}Oe91L4<>t#ei zbj|FE&-5?%TfO0O@A&4^=T=sNOqQ)YiC?j`HZLM_jv)pTBztYS)f#RtZ(bN4TX})5 z=?%}aPw*8)z1ExGIPt>ibq+^_vexllul3psm=JWF5(tFz=Z##HQr6@%NF_AQjz&T& zDl!2Hz7tr2x-t}j=y9bM2usjZutE_^b%i_xm5ckmoP@s%=j8*kr++1J;4?_+sE7z= z$~_Ae`s!o+f!oP+wgva<9#YHX)jgMmyyr-&eD%exOADa4KaeIdDetWRc?w>p3 z6KIy5d$HGBzD(au=kV;sVXwD!so(9tm^gIyM0;!b;_=?*#gCjzoA+Y>VymZfY|@N3 zhnv0Sv9TWJ>$DkfE^jUmTbRXHQfk&}amM8Y4$l(n$Oqh$jw{rJ4A1?>H$W_V?W-@m zV6L1h$#b0fY=EQcWW*EZdTPB*U3q1mVS$(1MaZ>v1N`E^M_I`st`% z#N^iw=Xhv8wmjVGKe-;=FT+#3EU5(rz1}{k?pRp z?{PgJSzrIG!-W@k0j;OSpRlodHpm(Xe%i{ ziAnoHD6gOS9LoNEZ3h253HDaR$-W%;*Vk4D?O`jH@!R{Y)<$4Iy}H`oIIiNbOtyY* zwcA^kuXe>ySTdhj-XyyebCh4aG%S?y9)n^zDdy|v)}AD4;@SEOwi;J;v{eFE0!Xk# zd{kMrmBjIk=`U~< z_{0heA+2-NK!5XGAR)7U8Ygs+FP%uqr_bQz4{CpSB2{wcNvv_9qV@cn2^r(blmEiS zvGe1}?0$Onvv7-cd+dBG#60U;{oK|%3jiU2r*T~$N7y+CX>v+9I#3lF;kzO^S}G!`TT&=NZWu~skPodcY7;KUN+Mb; zR4?n)NdUYo`fdE3x>R!Qs~p25U48nSC$3(NgsZ0>0p(O+yNbf8Z=M3}#3^!J75ECd zPLXgG5ORc(gy978Pd`HHRUv%%>8r@1eC5Q|Bk0~K5*{J(%84TnqWvFSfAs{2pjeUq~1EKC1JR}4%g~|aO%Wwu$J|)jn+CYdDc&yIw94rpI;w4fBrlP z_rD|@P_RC>4#NH4eeeoIPHj*p2`}A$iUjnUq}KZS{o0PJSJ5w2!*-ltwO1dxdg9b0 z?Ch0ONptQj&5?Lf(_Id5K4p*UO;Py}tg>8}}ONUaMvIT5a6RoXOo!oou9g{lvd)-0Q8l z*J^q8g2y$p*GTvJ@~<`S^?kb6YT3Pn(3~8(_PYE3Zrp36do^pXxE#~7pnSfCwbv*A zpT@mLx>wEGtLEg`%wD6H_TTz{8}}ONUd`e!ou*liUcgBp5&NP$Z^)zne`?M23k8 z6`$yII)G=vKtf=coE!{9ho1lQ+1aiLOxo8`J=}}XBZJ|&Fyq4-fiEWdGh|5c$;n=C zvNt9z#8(tRdXtlW;f*cev9W$1AKVy%_(_-49tqy<&jJSnaEHk*2?X?lWXD04Qi6Ah zKl?1?pMCb(q`%7A@6IX?kjZn$LU}$&wDCvL$?y-nO z9LaE1FadK2d&DPT4iT830BpQq@=^vxIuHJwFz}FspT^Vr(C>*}?r6Jx@>$d-u;DZe z6TVhDd9vH-penpP9T0=U7Dlhp5YhTU0<2^V*8 zA~&=BEz z@67f)IHZx1p!uu_k3tb=tO=T_qMZ7(&@AXe0aVlUJL5ntLg1DzZ6Sbe2NXV8LSd_j zP6SllpB|he6h-&Mq{l`!&}gCaqdfvoz@8xirlg=b#3izba_XFgT@{2ZSkMWHiZ-JH z+B9g)3e=G%2}lsE7bz6;-bGO_AA)Hvg5{j6&G!T0oxOf0dGEg|J3GLTg0BWjF+;C& zcQ!;rh4+9lB*bZh<-r1rOe`Q-M5rTA>NIXJ@IGRKXA*K_ULA8>%M)GLQo2pB$7x(E zH<(7(gpe2;<2)}`4N)UABRS~!IZjuYsG$LULEuQA3Zo$I%^Cz31|KA8hA5C0zzwWs zXJ9eonPdbm0vP$(2`S-2yctTunG*hu6meyMnMA@O zEe0ARL`Fa@5^ysR8pJux1A@aV>RSLb^}9X57BFa!a7;`Pl!zH-c@#$*axkDme9f#e z1N%(|Y2tYfn5VWJGBtf_v6s z5<2FrHg3Wuqq2a+;GvaZ2zPxlpe*-$Nbm^C*a$U{GBM~|@F0&t@0;tJIEb^fFcMXd zjm^&LOT)`F`ymxf)H)n>6eyKKRW#oZrZl*|^3sUl z;)o+vbUMKzM^{Qt3`Yc)Sb*Lih@M$Mve24LLq~BBF3R^1Iw3RwgQVk?WjXQ)9$p1$ zXec}}fdSL;BAnwY$YV#uAvIyvwb%lOYal2I98l+@z~GYLFt_s4fG~hE9I9bH=2t}wPYpk`n!zf;Wpz@38Z^LUtYjt>*t?wP zYDRP{2`*Hv&4GpqPh8CvWR(TI)ub3cUDS>xyo90{1S_J-8}O=Vk)eR+`%z4TtM$FQ z;NoaWsz!#W+c~nbY)s8FBJviHgkds`3{i{^4KBfZ3?27;!!dR|a}kHb;9{xBfU6b_ zE-prBBMUBZcp2`#nU?M*iNS@=Lcdfxp;YC{cu@Bx?w&5ANj^48j6v@u&g6bAsOpr) z3e0wU@KM@v2A7O%`gl{6xBAZxhnF-S`bACnqc6O&jO79&I07+j*DhmD32!NnS6vbEqsTdfKSF2n;j>%CvAQ(&|;Z=Z90EghhslBOTF|;1nb|_0(R?C8=P`)3fG`Oz*_Nd^h zk1U9*w@r+|4V{=kXxX(2WMb+$1FyO)xZ+k5cH3xIq#iabEV$sD(cLh1qG3k*Mh=FK z#}=aFWM8UK9A_>)@0bDx7X;z#YBmW&)aEr5f{Tr2Q>b4r93k%8d5|YgY?6yx2_E3o z3%bGRkL(rp$Ic^ovA`W|f&U-f(1Ftc literal 0 HcmV?d00001 diff --git a/mods/d2k/bits/mouse.shp b/mods/d2k/bits/mouse.shp deleted file mode 100644 index e7d9d70a3501700e0df9f8889dd18fbdf175709b..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 622780 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

9Xr*E=gM?!D2w>vVG&`ToOLU)O9b( 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 I)6OOR9|aYoE&u=k diff --git a/mods/d2k/cursors.yaml b/mods/d2k/cursors.yaml index f3081ee8d1..a603102d8a 100644 --- a/mods/d2k/cursors.yaml +++ b/mods/d2k/cursors.yaml @@ -2,10 +2,10 @@ ShadowIndex: 1 Palettes: cursor: cursor.pal - mouse: d2k.pal + mouse.r8: d2k.pal Cursors: - mouse: mouse + mouse: mouse.r8 scroll-t: start:112 x: 12 From a7504b5dd9b44fc0039fb75c4e060f2194eb6003 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 10 Aug 2013 18:46:55 +0200 Subject: [PATCH 02/44] load Dune 2000 walls directly from DATA.R8 --- OpenRA.Game/Graphics/Sequence.cs | 14 ++++- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 6 -- OpenRA.Utility/Command.cs | 27 --------- OpenRA.Utility/Program.cs | 2 +- mods/d2k/sequences/structures.yaml | 56 ++++++++++++++++--- 5 files changed, 60 insertions(+), 45 deletions(-) diff --git a/OpenRA.Game/Graphics/Sequence.cs b/OpenRA.Game/Graphics/Sequence.cs index 005c63f2dc..5e6d771448 100644 --- a/OpenRA.Game/Graphics/Sequence.cs +++ b/OpenRA.Game/Graphics/Sequence.cs @@ -30,6 +30,7 @@ namespace OpenRA.Graphics public readonly int ZOffset; public readonly int ShadowStart; public readonly int ShadowZOffset; + public readonly int[] Frames; public Sequence(string unit, string name, MiniYaml info) { @@ -39,7 +40,8 @@ namespace OpenRA.Graphics var offset = float2.Zero; var blendMode = BlendMode.Alpha; - Start = int.Parse(d["Start"].Value); + if (d.ContainsKey("Start")) + Start = int.Parse(d["Start"].Value); if (d.ContainsKey("Offset")) offset = FieldLoader.GetValue("Offset", d["Offset"].Value); @@ -79,7 +81,10 @@ namespace OpenRA.Graphics Tick = 40; if (d.ContainsKey("Transpose")) - transpose = bool.Parse(d["Transpose"].Value); + transpose = bool.Parse(d["Transpose"].Value); + + if (d.ContainsKey("Frames")) + Frames = Array.ConvertAll(d["Frames"].Value.Split(','), int.Parse); if (d.ContainsKey("ShadowStart")) ShadowStart = int.Parse(d["ShadowStart"].Value); @@ -136,9 +141,12 @@ namespace OpenRA.Graphics if (reverseFacings) f = (Facings - f) % Facings; - int i = transpose ? (frame % Length) * Facings + f : + var i = transpose ? (frame % Length) * Facings + f : (f * Stride) + (frame % Length); + if (Frames != null) + return sprites[Frames[i]]; + return sprites[start + i]; } } diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 9fe313a59f..6c18e9e843 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -128,7 +128,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2521", "2522", Path.Combine(pathToSHPs, "radara"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2523", "2524", Path.Combine(pathToSHPs, "pwra"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2525", "2526", Path.Combine(pathToSHPs, "barra"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2527", "2558", Path.Combine(pathToSHPs, "walla"), "--wall" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2559", "2560", Path.Combine(pathToSHPs, "conyarda"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2561", "2563", Path.Combine(pathToSHPs, "refa"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2564", "2565", Path.Combine(pathToSHPs, "hightecha"), "--building" }, @@ -146,7 +145,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2681", "2682", Path.Combine(pathToSHPs, "radarh"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2683", "2684", Path.Combine(pathToSHPs, "pwrh"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2685", "2686", Path.Combine(pathToSHPs, "barrh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2687", "2718", Path.Combine(pathToSHPs, "wallh"), "--wall" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2719", "2720", Path.Combine(pathToSHPs, "conyardh"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2721", "2723", Path.Combine(pathToSHPs, "refh"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2724", "2725", Path.Combine(pathToSHPs, "hightechh"), "--building" }, @@ -164,7 +162,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2841", "2842", Path.Combine(pathToSHPs, "radaro"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2843", "2844", Path.Combine(pathToSHPs, "pwro"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2845", "2846", Path.Combine(pathToSHPs, "barro"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2847", "2878", Path.Combine(pathToSHPs, "wallo"), "--wall" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2879", "2880", Path.Combine(pathToSHPs, "conyardo"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2881", "2883", Path.Combine(pathToSHPs, "refo"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2884", "2885", Path.Combine(pathToSHPs, "hightecho"), "--building" }, @@ -452,7 +449,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "radara.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "pwra.png"), "64" }, new string[] { "--shp", Path.Combine(pathToSHPs, "barra.png"), "80" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "walla.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "conyarda.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "refa.png"), "120" }, new string[] { "--shp", Path.Combine(pathToSHPs, "hightecha.png"), "96" }, @@ -469,7 +465,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "heavyh.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "radarh.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "pwrh.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wallh.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "barrh.png"), "64" }, new string[] { "--shp", Path.Combine(pathToSHPs, "conyardh.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "refh.png"), "120" }, @@ -488,7 +483,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "radaro.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "pwro.png"), "64" }, new string[] { "--shp", Path.Combine(pathToSHPs, "barro.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wallo.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "conyardo.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "refo.png"), "120" }, new string[] { "--shp", Path.Combine(pathToSHPs, "hightecho.png"), "96" }, diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index 9669609ebd..3675d4aa4c 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -230,33 +230,6 @@ namespace OpenRA.Utility frame = srcImage[f]; } } - else if (args.Contains("--wall")) - { - // complex resorting to RA/CnC compatible frame order - var d2kBrikFrameOrder = new int[] { 1, 4, 2, 12, 5, 6, 16, 9, 3, 13, 7, 8, 14, 10, 11, 15, 17, 20, 18, 28, 21, 22, 32, 25, 19, 29, 23, 24, 30, 26, 27, 31 }; - foreach (int o in d2kBrikFrameOrder) - { - var f = startFrame - 1 + o; - - frame = srcImage[f]; - - var offsetX = Math.Abs(frame.Offset.X); - var offsetY = frame.FrameSize.Height - Math.Abs(frame.Offset.Y); - Console.WriteLine("calculated OffsetX: {0}", offsetX); - Console.WriteLine("calculated OffsetY: {0}", offsetY); - - var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly, - PixelFormat.Format8bppIndexed); - - for (var i = 0; i < frame.Size.Height; i++) - Marshal.Copy(frame.Image, i * frame.Size.Width, - new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width); - - bitmap.UnlockBits(data); - - x += frame.FrameSize.Width; - } - } else if (args.Contains("--tileset")) { int f = 0; diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index 17660cc513..f5ab0b5ada 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -64,7 +64,7 @@ namespace OpenRA.Utility Console.WriteLine(" --extract MOD[,MOD]* FILES [--userdir] Extract files from mod packages to the current (or user) directory"); Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG"); Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette"); - Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--infrantry] [--vehicle] [--projectile] [--building] [--wall] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); + Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--infrantry] [--vehicle] [--projectile] [--building] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); Console.WriteLine(" --transpose SRCSHP DESTSHP START N M [START N M ...] Transpose the N*M block of frames starting at START."); Console.WriteLine(" --docs MOD Generate trait documentation in MarkDown format."); Console.WriteLine(" --map-hash MAPFILE Generate hash of specified oramap file."); diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 96f71aea6e..7495679c2f 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -1,16 +1,56 @@ walla: - idle: - Start: 0 + idle: DATA.R8 + Frames: 2527, 2530, 2528, 2538, 2531, 2532, 2542, 2535, 2529, 2539, 2533, 2534, 2540, 2536, 2537, 2541 Length: 16 - scratched-idle: - Start: 0 + Offset: -16,16 + scratched-idle: DATA.R8 + Frames: 2527, 2530, 2528, 2538, 2531, 2532, 2542, 2535, 2529, 2539, 2533, 2534, 2540, 2536, 2537, 2541 Length: 16 - damaged-idle: - Start: 16 + Offset: -16,16 + damaged-idle: DATA.R8 + Frames: 2543, 2546, 2544, 2554, 2547, 2548, 2558, 2551, 2545, 2555, 2549, 2550, 2556, 2552, 2553, 2557 Length: 16 - critical-idle: - Start: 16 + Offset: -16,16 + critical-idle: DATA.R8 + Frames: 2543, 2546, 2544, 2554, 2547, 2548, 2558, 2551, 2545, 2555, 2549, 2550, 2556, 2552, 2553, 2557 Length: 16 + Offset: -16,16 + +wallh: + idle: DATA.R8 + Frames: 2687, 2690, 2688, 2698, 2691, 2692, 2702, 2695, 2689, 2699, 2693, 2694, 2700, 2696, 2697, 2701 + Length: 16 + Offset: -16,16 + scratched-idle: DATA.R8 + Frames: 2687, 2690, 2688, 2698, 2691, 2692, 2702, 2695, 2689, 2699, 2693, 2694, 2700, 2696, 2697, 2701 + Length: 16 + Offset: -16,16 + damaged-idle: DATA.R8 + Frames: 2703, 2706, 2704, 2714, 2707, 2708, 2718, 2711, 2705, 2715, 2709, 2710, 2716, 2712, 2713, 2717 + Length: 16 + Offset: -16,16 + critical-idle: DATA.R8 + Frames: 2703, 2706, 2704, 2714, 2707, 2708, 2718, 2711, 2705, 2715, 2709, 2710, 2716, 2712, 2713, 2717 + Length: 16 + Offset: -16,16 + +wallo: + idle: DATA.R8 + Frames: 2847, 2850, 2848, 2858, 2851, 2852, 2862, 2855, 2849, 2859, 2853, 2854, 2860, 2856, 2857, 2861 + Length: 16 + Offset: -16,16 + scratched-idle: DATA.R8 + Frames: 2847, 2850, 2848, 2858, 2851, 2852, 2862, 2855, 2849, 2859, 2853, 2854, 2860, 2856, 2857, 2861 + Length: 16 + Offset: -16,16 + damaged-idle: DATA.R8 + Frames: 2863, 2866, 2864, 2874, 2867, 2868, 2878, 2871, 2865, 2875, 2869, 2870, 2876, 2872, 2873, 2877 + Length: 16 + Offset: -16,16 + critical-idle: DATA.R8 + Frames: 2863, 2866, 2864, 2874, 2867, 2868, 2878, 2871, 2865, 2875, 2869, 2870, 2876, 2872, 2873, 2877 + Length: 16 + Offset: -16,16 guntowera: idle: From 03eaf76cd88f208c991bc7c95b7700cbcc2907a9 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 10 Aug 2013 19:32:49 +0200 Subject: [PATCH 03/44] moved the towers to DATA.R8 sequences --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 24 --- mods/d2k/sequences/structures.yaml | 142 +++++++++++++++--- 2 files changed, 120 insertions(+), 46 deletions(-) diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 6c18e9e843..77df3ca09a 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -133,10 +133,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2564", "2565", Path.Combine(pathToSHPs, "hightecha"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2566", "2570", Path.Combine(pathToSHPs, "siloa"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2571", "2572", Path.Combine(pathToSHPs, "repaira"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2573", "2588", Path.Combine(pathToSHPs, "guntowera"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2589", "2620", Path.Combine(pathToSHPs, "gunturreta"), "--turret" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2621", "2636", Path.Combine(pathToSHPs, "rockettowera"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2637", "2668", Path.Combine(pathToSHPs, "rocketturreta"), "--turret" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2669", "2670", Path.Combine(pathToSHPs, "researcha"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2671", "2672", Path.Combine(pathToSHPs, "starporta"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2673", "2675", Path.Combine(pathToSHPs, "lighta"), "--building" }, @@ -150,10 +146,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2724", "2725", Path.Combine(pathToSHPs, "hightechh"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2726", "2730", Path.Combine(pathToSHPs, "siloh"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2731", "2732", Path.Combine(pathToSHPs, "repairh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2733", "2748", Path.Combine(pathToSHPs, "guntowerh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2749", "2780", Path.Combine(pathToSHPs, "gunturreth"), "--turret" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2781", "2796", Path.Combine(pathToSHPs, "rockettowerh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2797", "2828", Path.Combine(pathToSHPs, "rocketturreth"), "--turret" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2829", "2830", Path.Combine(pathToSHPs, "researchh"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2831", "2832", Path.Combine(pathToSHPs, "starporth"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2833", "2835", Path.Combine(pathToSHPs, "lighth"), "--building" }, @@ -167,10 +159,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2884", "2885", Path.Combine(pathToSHPs, "hightecho"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2886", "2890", Path.Combine(pathToSHPs, "siloo"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2891", "2892", Path.Combine(pathToSHPs, "repairo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2893", "2908", Path.Combine(pathToSHPs, "guntowero"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2909", "2940", Path.Combine(pathToSHPs, "gunturreto"), "--turret" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2941", "2956", Path.Combine(pathToSHPs, "rockettowero"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2957", "2988", Path.Combine(pathToSHPs, "rocketturreto"), "--turret" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2989", "2990", Path.Combine(pathToSHPs, "researcho"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2991", "2992", Path.Combine(pathToSHPs, "starporto"), "--building" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2993", "2995", Path.Combine(pathToSHPs, "lighto"), "--building" }, @@ -454,10 +442,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "hightecha.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "siloa.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "repaira.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "guntowera.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "gunturreta.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowera.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rocketturreta.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "researcha.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "starporta.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "lighta.png"), "96" }, @@ -471,10 +455,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "hightechh.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "siloh.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "repairh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "guntowerh.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "gunturreth.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowerh.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rocketturreth.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "researchh.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "starporth.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "lighth.png"), "96" }, @@ -488,10 +468,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "hightecho.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "siloo.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "repairo.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "guntowero.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "gunturreto.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowero.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rocketturreto.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "researcho.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "starporto.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "lighto.png"), "96" }, diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 7495679c2f..141d8de25b 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -53,38 +53,136 @@ wallo: Offset: -16,16 guntowera: - idle: - Start: 0 + idle: DATA.R8 + Start: 2573 Facings: 1 - recoil: - Start: 0 + Offset: -24,24 + recoil: DATA.R8 + Start: 2573 Facings: 1 - damaged-idle: - Start: 0 + Offset: -24,24 + damaged-idle: DATA.R8 + Start: 2573 Facings: 1 - damaged-recoil: - Start: 0 + Offset: -24,24 + damaged-recoil: DATA.R8 + Start: 2573 Facings: 1 - turret: gunturreta - Start: 0 - Facings: 32 + Offset: -24,24 + turret: DATA.R8 + Start: 2589 + Facings: -32 + Offset: -24,24 + +guntowerh: + idle: DATA.R8 + Start: 2733 + Facings: 1 + Offset: -24,24 + recoil: DATA.R8 + Start: 2733 + Facings: 1 + Offset: -24,24 + damaged-idle: DATA.R8 + Start: 2733 + Facings: 1 + Offset: -24,24 + damaged-recoil: DATA.R8 + Start: 2733 + Facings: 1 + Offset: -24,24 + turret: DATA.R8 + Start: 2749 + Facings: -32 + Offset: -24,24 + +guntowero: + idle: DATA.R8 + Start: 2893 + Facings: 1 + Offset: -24,24 + recoil: DATA.R8 + Start: 2893 + Facings: 1 + Offset: -24,24 + damaged-idle: DATA.R8 + Start: 2893 + Facings: 1 + Offset: -24,24 + damaged-recoil: DATA.R8 + Start: 2893 + Facings: 1 + Offset: -24,24 + turret: DATA.R8 + Start: 2909 + Facings: -32 + Offset: -24,24 rockettowera: - idle: - Start: 0 + idle: DATA.R8 + Start: 2733 Facings: 1 - recoil: - Start: 0 + Offset: -24,24 + recoil: DATA.R8 + Start: 2733 Facings: 1 - damaged-idle: - Start: 0 + Offset: -24,24 + damaged-idle: DATA.R8 + Start: 2733 Facings: 1 - damaged-recoil: - Start: 0 + Offset: -24,24 + damaged-recoil: DATA.R8 + Start: 2733 Facings: 1 - turret: rocketturreta - Start: 0 - Facings: 32 + Offset: -24,24 + turret: DATA.R8 + Start: 2637 + Facings: -32 + Offset: -24,24 + +rockettowerh: + idle: DATA.R8 + Start: 2781 + Facings: 1 + Offset: -24,24 + recoil: DATA.R8 + Start: 2781 + Facings: 1 + Offset: -24,24 + damaged-idle: DATA.R8 + Start: 2781 + Facings: 1 + Offset: -24,24 + damaged-recoil: DATA.R8 + Start: 2781 + Facings: 1 + Offset: -24,24 + turret: DATA.R8 + Start: 2828 + Facings: -32 + Offset: -24,24 + +rockettowero: + idle: DATA.R8 + Start: 2941 + Facings: 1 + Offset: -24,24 + recoil: DATA.R8 + Start: 2941 + Facings: 1 + Offset: -24,24 + damaged-idle: DATA.R8 + Start: 2941 + Facings: 1 + Offset: -24,24 + damaged-recoil: DATA.R8 + Start: 2941 + Facings: 1 + Offset: -24,24 + turret: DATA.R8 + Start: 2988 + Facings: -32 + Offset: -24,24 conyarda: idle: From 341522232e2d51f40e6fa05579d7629c628f0833 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 11 Aug 2013 17:43:06 +0200 Subject: [PATCH 04/44] migrate all other buildings to DATA.R8 sequences 4th conyard might be for the Corrino faction TODO: active animations are yet unused overlays no need to render build-top for refineries --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 154 --- OpenRA.Utility/Command.cs | 5 - OpenRA.Utility/Program.cs | 2 +- mods/d2k/bits/palaceh.shp | Bin 91365 -> 0 bytes mods/d2k/bits/pwra.shp | Bin 19685 -> 0 bytes mods/d2k/bits/pwrh.shp | Bin 20052 -> 0 bytes mods/d2k/bits/pwro.shp | Bin 19492 -> 0 bytes mods/d2k/bits/repair.shp | Bin 93752 -> 0 bytes mods/d2k/bits/research.shp | Bin 163509 -> 0 bytes mods/d2k/rules/structures.yaml | 12 +- mods/d2k/sequences/structures.yaml | 1132 +++++++++++------ 11 files changed, 738 insertions(+), 567 deletions(-) delete mode 100644 mods/d2k/bits/palaceh.shp delete mode 100644 mods/d2k/bits/pwra.shp delete mode 100644 mods/d2k/bits/pwrh.shp delete mode 100644 mods/d2k/bits/pwro.shp delete mode 100644 mods/d2k/bits/repair.shp delete mode 100644 mods/d2k/bits/research.shp diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 77df3ca09a..61c842c72b 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -124,51 +124,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2453", "2484", Path.Combine(pathToSHPs, "combato"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2485", "2516", Path.Combine(pathToSHPs, "combatoturret"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2517", "2517", Path.Combine(pathToSHPs, "frigate"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2518", "2520", Path.Combine(pathToSHPs, "heavya"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2521", "2522", Path.Combine(pathToSHPs, "radara"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2523", "2524", Path.Combine(pathToSHPs, "pwra"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2525", "2526", Path.Combine(pathToSHPs, "barra"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2559", "2560", Path.Combine(pathToSHPs, "conyarda"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2561", "2563", Path.Combine(pathToSHPs, "refa"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2564", "2565", Path.Combine(pathToSHPs, "hightecha"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2566", "2570", Path.Combine(pathToSHPs, "siloa"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2571", "2572", Path.Combine(pathToSHPs, "repaira"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2669", "2670", Path.Combine(pathToSHPs, "researcha"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2671", "2672", Path.Combine(pathToSHPs, "starporta"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2673", "2675", Path.Combine(pathToSHPs, "lighta"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2676", "2677", Path.Combine(pathToSHPs, "palacea"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2678", "2680", Path.Combine(pathToSHPs, "heavyh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2681", "2682", Path.Combine(pathToSHPs, "radarh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2683", "2684", Path.Combine(pathToSHPs, "pwrh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2685", "2686", Path.Combine(pathToSHPs, "barrh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2719", "2720", Path.Combine(pathToSHPs, "conyardh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2721", "2723", Path.Combine(pathToSHPs, "refh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2724", "2725", Path.Combine(pathToSHPs, "hightechh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2726", "2730", Path.Combine(pathToSHPs, "siloh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2731", "2732", Path.Combine(pathToSHPs, "repairh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2829", "2830", Path.Combine(pathToSHPs, "researchh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2831", "2832", Path.Combine(pathToSHPs, "starporth"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2833", "2835", Path.Combine(pathToSHPs, "lighth"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2836", "2837", Path.Combine(pathToSHPs, "palaceh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2838", "2840", Path.Combine(pathToSHPs, "heavyo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2841", "2842", Path.Combine(pathToSHPs, "radaro"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2843", "2844", Path.Combine(pathToSHPs, "pwro"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2845", "2846", Path.Combine(pathToSHPs, "barro"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2879", "2880", Path.Combine(pathToSHPs, "conyardo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2881", "2883", Path.Combine(pathToSHPs, "refo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2884", "2885", Path.Combine(pathToSHPs, "hightecho"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2886", "2890", Path.Combine(pathToSHPs, "siloo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2891", "2892", Path.Combine(pathToSHPs, "repairo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2989", "2990", Path.Combine(pathToSHPs, "researcho"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2991", "2992", Path.Combine(pathToSHPs, "starporto"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2993", "2995", Path.Combine(pathToSHPs, "lighto"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2996", "2997", Path.Combine(pathToSHPs, "palaceo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2998", "2998", Path.Combine(pathToSHPs, "sietch"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2999", "3000", Path.Combine(pathToSHPs, "starportc"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3001", "3003", Path.Combine(pathToSHPs, "heavyc"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3004", "3005", Path.Combine(pathToSHPs, "palacec"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3006", "3007", Path.Combine(pathToSHPs, "conyardh2"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3008", "3013", Path.Combine(pathToSHPs, "plates") }, new string[] { "--r8", pathToDataR8, pathToPalette, "3014", "3014", Path.Combine(pathToSHPs, "unknown3"), "--projectile" }, new string[] { "--r8", pathToDataR8, pathToPalette, "3015", "3078", Path.Combine(pathToSHPs, "rpg"), "--projectile" }, new string[] { "--r8", pathToDataR8, pathToPalette, "3079", "3087", Path.Combine(pathToSHPs, "unknown4"), "--projectile" }, @@ -328,38 +283,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "4106", "4106", Path.Combine(pathToSHPs, "radaraicon2") }, new string[] { "--r8", pathToDataR8, pathToPalette, "4107", "4107", Path.Combine(pathToSHPs, "radaraicon3") }, new string[] { "--r8", pathToDataR8, pathToPalette, "4108", "4108", Path.Combine(pathToSHPs, "conyardaicon3") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4109", "4150", Path.Combine(pathToSHPs, "conmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4151", "4174", Path.Combine(pathToSHPs, "wtrpmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4175", "4194", Path.Combine(pathToSHPs, "barramake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4195", "4212", Path.Combine(pathToSHPs, "barrhmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4213", "4230", Path.Combine(pathToSHPs, "barromake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4231", "4253", Path.Combine(pathToSHPs, "refmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4254", "4273", Path.Combine(pathToSHPs, "radarmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4274", "4294", Path.Combine(pathToSHPs, "highmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4295", "4312", Path.Combine(pathToSHPs, "lightmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4313", "4327", Path.Combine(pathToSHPs, "silomake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4328", "4346", Path.Combine(pathToSHPs, "heavymake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4347", "4369", Path.Combine(pathToSHPs, "starportmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4370", "4390", Path.Combine(pathToSHPs, "repairmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4391", "4412", Path.Combine(pathToSHPs, "researchmake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4413", "4435", Path.Combine(pathToSHPs, "palacemake"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4436", "4449", Path.Combine(pathToSHPs, "cranea"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4450", "4463", Path.Combine(pathToSHPs, "craneh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4464", "4477", Path.Combine(pathToSHPs, "craneo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4478", "4491", Path.Combine(pathToSHPs, "cranea2"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4492", "4501", Path.Combine(pathToSHPs, "windtrapa"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4502", "4511", Path.Combine(pathToSHPs, "windtraph"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4512", "4521", Path.Combine(pathToSHPs, "windtrapo"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4522", "4552", Path.Combine(pathToSHPs, "disha"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4553", "4582", Path.Combine(pathToSHPs, "dishh"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4583", "4613", Path.Combine(pathToSHPs, "disho"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4614", "4643", Path.Combine(pathToSHPs, "highweld"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4644", "4673", Path.Combine(pathToSHPs, "lightweld"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4674", "4721", Path.Combine(pathToSHPs, "heavyweld"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4722", "4744", Path.Combine(pathToSHPs, "unknown20"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4745", "4759", Path.Combine(pathToSHPs, "marker"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4760", "4819", Path.Combine(pathToSHPs, "researchzaps"), "--building" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4820", "4840", Path.Combine(pathToSHPs, "deathhandlaunch"), "--building" }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BASE"), "--tileset" }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "748", "749", Path.Combine(pathToSHPs, "spice0") }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBAT.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BAT"), "--tileset" }, @@ -432,52 +355,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "raider.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combato.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combatoturret.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "frigate.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavya.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "radara.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "pwra.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barra.png"), "80" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conyarda.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "refa.png"), "120" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "hightecha.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "siloa.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repaira.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researcha.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starporta.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lighta.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palacea.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavyh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "radarh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "pwrh.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barrh.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conyardh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "refh.png"), "120" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "hightechh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "siloh.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repairh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researchh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starporth.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lighth.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palaceh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavyo.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "radaro.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "pwro.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barro.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conyardo.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "refo.png"), "120" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "hightecho.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "siloo.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repairo.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researcho.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starporto.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lighto.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palaceo.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sietch.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starportc.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavyc.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palacec.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conyardh2.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "plates.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "unknown3.png"), "16" }, new string[] { "--shp", Path.Combine(pathToSHPs, "rpg.png"), "16" }, new string[] { "--shp", Path.Combine(pathToSHPs, "unknown4.png"), "16" }, @@ -616,37 +493,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "palaceaicon.png"), "60" }, new string[] { "--shp", Path.Combine(pathToSHPs, "palacehicon.png"), "60" }, new string[] { "--shp", Path.Combine(pathToSHPs, "palaceoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conmake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wtrpmake.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barramake.png"), "80" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barrhmake.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barromake.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "refmake.png"), "120" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "radarmake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "highmake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lightmake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "silomake.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavymake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starportmake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repairmake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researchmake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palacemake.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "cranea.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "craneh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "craneo.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "windtrapa.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "windtraph.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "windtrapo.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "disha.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "dishh.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "disho.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "highweld.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lightweld.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavyweld.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown20.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "marker.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researchzaps.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandlaunch.png"), "96" }, new string[] { "--shp", Path.Combine(pathToSHPs, "spice0.png"), "32" }, }; diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index 3675d4aa4c..0911469df5 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -272,11 +272,6 @@ namespace OpenRA.Utility offsetX = frame.FrameSize.Width / 2 - frame.Size.Width / 2; offsetY = frame.FrameSize.Height / 2 - frame.Size.Height / 2; } - else if (args.Contains("--building")) - { - offsetX = Math.Abs(frame.Offset.X); - offsetY = frame.FrameSize.Height - Math.Abs(frame.Offset.Y); - } Console.WriteLine("calculated OffsetX: {0}", offsetX); Console.WriteLine("calculated OffsetY: {0}", offsetY); diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index f5ab0b5ada..e88e33fdb9 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -64,7 +64,7 @@ namespace OpenRA.Utility Console.WriteLine(" --extract MOD[,MOD]* FILES [--userdir] Extract files from mod packages to the current (or user) directory"); Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG"); Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette"); - Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--infrantry] [--vehicle] [--projectile] [--building] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); + Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--infrantry] [--vehicle] [--projectile] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); Console.WriteLine(" --transpose SRCSHP DESTSHP START N M [START N M ...] Transpose the N*M block of frames starting at START."); Console.WriteLine(" --docs MOD Generate trait documentation in MarkDown format."); Console.WriteLine(" --map-hash MAPFILE Generate hash of specified oramap file."); diff --git a/mods/d2k/bits/palaceh.shp b/mods/d2k/bits/palaceh.shp deleted file mode 100644 index d72467ae4a3748a4d0cf7ed29db3c469686dd9c3..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91365 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 diff --git a/mods/d2k/bits/pwra.shp b/mods/d2k/bits/pwra.shp deleted file mode 100644 index d536efdcf5f20aa5defd18f67065b1283407d178..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19685 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 p=ih1j`7fon(G_fHD>{e%} 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

S&gpI4>o@_yo+MOVI(mMxk=%WBRG)64Tq%f!8{ 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 IAwll{0)74e82|tP diff --git a/mods/d2k/bits/pwro.shp b/mods/d2k/bits/pwro.shp deleted file mode 100644 index 0d7b0e9d93553553e8fd72621745bd8ff0703150..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 19492 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

AMw3ss7NhDQ3 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�l(jJ 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 diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index b4bac470bb..ecc9d08a54 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -523,6 +523,8 @@ REPAIR: ValuePercentage: 50 RallyPoint: RallyPoint: 1,3 + RenderBuilding: + Image: repaira ^HIGHTECH: Inherits: ^Building @@ -581,8 +583,8 @@ RESEARCH: FlareType: Building: Power: -40 - Footprint: xxx xxx - Dimensions: 3,2 + Footprint: _x_ xxx xxx + Dimensions: 3,3 Bib: Health: HP: 1000 @@ -592,6 +594,8 @@ RESEARCH: Range: 4 ProvidesCustomPrerequisite: Prerequisite: Ix + RenderBuilding: + Image: researcha ^PALACE: Inherits: ^Building @@ -609,8 +613,8 @@ RESEARCH: Description: Unlocks elite infantry\n Special Ability: Ornithopter Strike Building: Power: -50 - Footprint: _x_ xxx =xx - Dimensions: 3,3 + Footprint: xxx xxx + Dimensions: 3,2 Bib: Health: HP: 2000 diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 141d8de25b..63aac8da31 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -185,632 +185,958 @@ rockettowero: Offset: -24,24 conyarda: - idle: - Start: 0 - make: conmake + idle: DATA.R8 + Start: 2559 + Offset: -48,64 + make: DATA.R8 # TODO: overlay + Start: 4109 + Length: 42 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2560 + Offset: -48,64 +# build: DATA.R8 # TODO: overlay +# Start: 4436 +# Length: 14 +# Offset: -48,64 +# damaged-build: DATA.R8 # TODO: overlay +# Start: 4436 +# Length: 14 +# Offset: -48,64 + bib: bib3x # TODO: read this from BLOXBAT.R8 Start: 0 Length: * - damaged-idle: - Start: 1 - bib: bib3x - Start: 0 - Length: * - #build: cranea - # Start: 0 - # Length: 14 - # Tick: 75 - #damaged-build: cranea - # Start: 0 - # Length: 14 - # Tick: 75 -repair: - idle: - Start: 0 +repaira: + make: DATA.R8 # TODO: overlay + Start: 4370 + Length: 20 + Offset: -48,48 + idle: DATA.R8 + Start: 2571 + Offset: -48,48 ZOffset: -1c511 - active: - Start: 0 - Length: 10 +# active: DATA.R8 # TODO: overlay +# Start: 4746 +# Length: 14 +# Offset: -48,48 +# ZOffset: -1c511 +# damaged-active: DATA.R8 # TODO: overlay +# Start: 4746 +# Length: 14 +# Tick: 60 +# Offset: -48,48 +# ZOffset: -1c511 + damaged-idle: DATA.R8 + Start: 2572 + Offset: -48,48 + ZOffset: -1c511 + +repairh: + make: DATA.R8 # TODO: overlay + Start: 4370 + Length: 20 + Offset: -48,48 + idle: DATA.R8 + Start: 2731 + Offset: -48,48 + ZOffset: -1c511 + active: DATA.R8 # TODO: overlay + Start: 4746 + Length: 14 + Offset: -48,48 + ZOffset: -1c511 + damaged-active: DATA.R8 # TODO: overlay + Start: 4746 + Length: 14 Tick: 60 + Offset: -48,48 ZOffset: -1c511 - damaged-idle: - Start: 10 + damaged-idle: DATA.R8 + Start: 2732 + Offset: -48,48 ZOffset: -1c511 - damaged-active: - Start: 10 - Length: 10 + +repairo: + make: DATA.R8 # TODO: overlay + Start: 4370 + Length: 20 + Offset: -48,48 + idle: DATA.R8 + Start: 2891 + Offset: -48,48 + ZOffset: -1c511 + active: DATA.R8 # TODO: overlay + Start: 4746 + Length: 14 + Offset: -48,48 + ZOffset: -1c511 + damaged-active: DATA.R8 # TODO: overlay + Start: 4746 + Length: 14 Tick: 60 + Offset: -48,48 + ZOffset: -1c511 + damaged-idle: DATA.R8 + Start: 2892 + Offset: -48,48 ZOffset: -1c511 - make: repairmake - Start: 0 - Length: * starporta: - idle: - Start: 0 + idle: DATA.R8 + Start: 2671 ZOffset: -1c511 - active: - Start: 0 + Offset: -48,64 + active: DATA.R8 + Start: 2671 Length: 1 ZOffset: -1c511 - damaged-idle: - Start: 1 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2672 ZOffset: -1c511 - damaged-active: - Start: 1 + Offset: -48,64 + damaged-active: DATA.R8 + Start: 2672 ZOffset: -1c511 - make: starportmake - Start: 0 - Length: * + Offset: -48,64 + make: DATA.R8 + Start: 4347 + Length: 22 + Offset: -48,64 bib: bib3x Start: 0 Length: * pwra: - idle: - Start: 0 - Length: 6 - Tick: 160 - make: wtrpmake - Start: 0 - Length: * - damaged-idle: - Start: 6 + idle: DATA.R8 + Start: 2523 + Offset: -32,64 + make: DATA.R8 + Start: 4151 + Length: 24 + Offset: -32,64 + damaged-idle: DATA.R8 + Start: 2524 + Offset: -32,64 + active: DATA.R8 # TODO: not wired up + Start: 4492 + Length: 10 + Offset: -32,64 bib: bib2x Start: 0 Length: * barra: - idle: - Start: 0 - make: barramake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2525 + Offset: -32,64 + make: DATA.R8 + Start: 4175 + Length: 20 + Offset: -32,64 + damaged-idle: DATA.R8 + Start: 2526 + Offset: -32,64 bib: bib2x Start: 0 Length: * radara: - idle: - Start: 0 - make: radarmake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2521 + Offset: -48,80 + make: DATA.R8 + Start: 4254 + Length: 19 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2522 + Offset: -48,80 + active: DATA.R8 # TODO: wire it up + Start: 4522 + Length: 30 + Offset: -48,80 bib: bib3x Start: 0 Length: * refa: - idle: - Start: 0 + idle: DATA.R8 + Start: 2561 Length: 1 - make: refmake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 - Length: 1 - damaged-build-top: - Start: 2 - Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,64 + make: DATA.R8 + Start: 4231 + Length: 22 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2561 + Offset: -48,64 + idle-top: DATA.R8 + Start: 2562 + Offset: -48,64 + damaged-idle-top: DATA.R8 + Start: 2563 + Offset: -48,64 bib: bib3x Start: 0 Length: * siloa: - idle: - Start: 0 + idle: DATA.R8 + Start: 2566 Length: 4 - damaged-idle: - Start: 4 + Offset: -16,16 + damaged-idle: DATA.R8 + Start: 2569 Length: 1 - make: silomake - Start: 0 - Length: * + Offset: -16,16 + make: DATA.R8 + Start: 4313 + Length: 14 + Offset: -16,16 hightecha: - idle: - Start: 0 - make: highmake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2564 + Offset: -48,80 + make: DATA.R8 + Start: 4274 + Length: 20 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2565 + Offset: -48,80 + active: DATA.R8 # TODO: not wired up + Start: 4614 + Length: 30 + Offset: -48,80 bib: bib3x Start: 0 Length: * -research: - idle: - Start: 0 - Length: 20 - Tick: 80 - make: researchmake +researcha: + idle: DATA.R8 + Start: 2669 + Offset: -48,80 + make: DATA.R8 + Start: 4391 + Length: 21 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2670 + Offset: -48,80 + active: DATA.R8 # TODO: wire it up + Start: 4760 + Length: 80 + Offset: -48,80 + bib: bib3x Start: 0 Length: * - damaged-idle: - Start: 20 - Length: 20 - Tick: 80 + +researchh: + idle: DATA.R8 + Start: 2829 + Offset: -48,80 + make: DATA.R8 + Start: 4391 + Length: 21 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2830 + Offset: -48,80 + active: DATA.R8 # TODO: wire it up + Start: 4760 + Length: 80 + Offset: -48,80 + bib: bib3x + Start: 0 + Length: * + +researcho: + idle: DATA.R8 + Start: 2989 + Offset: -48,80 + make: DATA.R8 + Start: 4391 + Length: 21 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2990 + Offset: -48,80 + active: DATA.R8 # TODO: wire it up + Start: 4760 + Length: 80 + Offset: -48,80 bib: bib3x Start: 0 Length: * palacea: - idle: - Start: 0 - make: palacemake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2676 + Offset: -48,48 + make: DATA.R8 + Start: 4413 + Length: 22 + Offset: -48,48 + damaged-idle: DATA.R8 + Start: 2677 + Offset: -48,48 bib: bib3x Start: 0 Length: * lighta: - idle: - Start: 0 + idle: DATA.R8 + Start: 2673 Length: 1 - make: lightmake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 + Offset: -48,64 + make: DATA.R8 + Start: 4295 + Length: 7 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2673 + Offset: -48,64 + build-top: DATA.R8 + Start: 2674 Length: 1 - damaged-build-top: - Start: 2 + Offset: -48,64 + damaged-build-top: DATA.R8 + Start: 2675 Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,64 + idle-top: DATA.R8 + Start: 2674 + Offset: -48,64 + damaged-idle-top: DATA.R8 + Start: 2675 + Offset: -48,64 + active: DATA.R8 # TODO: not wired up + Start: 4644 + Length: 30 + Offset: -48,64 bib: bib3x Start: 0 Length: * heavya: - idle: - Start: 0 + idle: DATA.R8 + Start: 2518 Length: 1 - make: heavymake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 + Offset: -48,80 + make: DATA.R8 + Start: 4328 + Length: 18 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2518 + Offset: -48,80 + build-top: DATA.R8 + Start: 2519 Length: 1 - damaged-build-top: - Start: 2 + Offset: -48,80 + damaged-build-top: DATA.R8 + Start: 2520 Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,80 + idle-top: DATA.R8 + Start: 2519 + Offset: -48,80 + damaged-idle-top: DATA.R8 + Start: 2520 + Offset: -48,80 + active: DATA.R8 # TODO: not wired up + Start: 4674 + Length: 47 + Offset: -48,80 bib: bib3x Start: 0 Length: * conyardh: - idle: - Start: 0 - make: conmake - Start: 0 - Length: * - damaged-idle: - Start: 1 - bib: bib3x + idle: DATA.R8 + Start: 2719 + Offset: -48,64 + make: DATA.R8 # TODO: overlay + Start: 4109 + Length: 41 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2720 + Offset: -48,64 +# build: DATA.R8 # TODO: overlay +# Start: 4450 +# Length: 14 +# Offset: -48,64 +# damaged-build: DATA.R8 # TODO: overlay +# Start: 4450 +# Length: 14 +# Offset: -48,64 + bib: bib3x # TODO: read this from BLOXBAT.R8 Start: 0 Length: * starporth: - idle: - Start: 0 + idle: DATA.R8 + Start: 2831 ZOffset: -1c511 - active: - Start: 0 + Offset: -48,64 + active: DATA.R8 + Start: 2831 Length: 1 + Offset: -48,64 ZOffset: -1c511 - damaged-idle: - Start: 1 + damaged-idle: DATA.R8 + Start: 2832 + Offset: -48,64 ZOffset: -1c511 - damaged-active: - Start: 1 + damaged-active: DATA.R8 + Start: 2832 + Offset: -48,64 + ZOffset: -1c511 + make: DATA.R8 + Start: 4347 + Length: 22 + Offset: -48,64 ZOffset: -1c511 - make: starportmake - Start: 0 - Length: * bib: bib3x Start: 0 Length: * pwrh: - idle: - Start: 0 - Length: 6 - Tick: 160 - make: wtrpmake - Start: 0 - Length: * - damaged-idle: - Start: 6 + idle: DATA.R8 + Start: 2683 + Offset: -32,64 + make: DATA.R8 + Start: 4151 + Length: 24 + Offset: -32,64 + damaged-idle: DATA.R8 + Start: 2684 + Offset: -32,64 + active: DATA.R8 # TODO: not wired up + Start: 4502 + Length: 10 + Offset: -32,64 bib: bib2x Start: 0 Length: * barrh: - idle: - Start: 0 - make: barrhmake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2685 + Offset: -32,64 + make: DATA.R8 + Start: 4195 + Length: 17 + Offset: -32,64 + damaged-idle: DATA.R8 + Start: 2686 + Offset: -32,64 bib: bib2x Start: 0 Length: * radarh: - idle: - Start: 0 - make: radarmake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2681 + Offset: -48,80 + make: DATA.R8 + Start: 4254 + Length: 19 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2682 + Offset: -48,80 + active: DATA.R8 # TODO: wire it up + Start: 4553 + Length: 30 + Offset: -48,80 bib: bib3x Start: 0 Length: * refh: - idle: - Start: 0 + idle: DATA.R8 + Start: 2721 Length: 1 - make: refmake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 - Length: 1 - damaged-build-top: - Start: 2 - Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,64 + make: DATA.R8 + Start: 4231 + Length: 22 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2721 + Offset: -48,64 + idle-top: DATA.R8 + Start: 2722 + Offset: -48,64 + damaged-idle-top: DATA.R8 + Start: 2723 + Offset: -48,64 bib: bib3x Start: 0 Length: * siloh: - idle: - Start: 0 + idle: DATA.R8 + Start: 2726 Length: 4 - damaged-idle: - Start: 4 + Offset: -16,16 + damaged-idle: DATA.R8 + Start: 2730 Length: 1 - make: silomake - Start: 0 - Length: * + Offset: -16,16 + make: DATA.R8 + Start: 4313 + Length: 14 + Offset: -16,16 hightechh: - idle: - Start: 0 - make: highmake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2724 + Offset: -48,80 + make: DATA.R8 + Start: 4274 + Length: 20 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2725 + Offset: -48,80 + active: DATA.R8 # TODO: not wired up + Start: 4614 + Length: 30 + Offset: -48,80 bib: bib3x Start: 0 Length: * palaceh: - idle: - Start: 0 - make: palacemake - Start: 0 - Length: * - damaged-idle: - Start: 7 - active: - Start: 1 - Length: 6 - Tick: 160 - damaged-active: - Start: 8 - Length: 6 - Tick: 160 + idle: DATA.R8 + Start: 2836 + Offset: -48,64 + make: DATA.R8 + Start: 4413 + Length: 22 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2837 + Offset: -48,64 +# active: DATA.R8 # TODO: overlay +# Start: 4820 +# Length: 20 +# Offset: -48,64 + damaged-active: DATA.R8 + Start: 4820 + Length: 20 + Offset: -48,64 bib: bib3x Start: 0 Length: * lighth: - idle: - Start: 0 + idle: DATA.R8 + Start: 2833 Length: 1 - make: lightmake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 + Offset: -48,64 + make: DATA.R8 + Start: 4295 + Length: 7 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2833 + Offset: -48,64 + build-top: DATA.R8 + Start: 2834 Length: 1 - damaged-build-top: - Start: 2 + Offset: -48,64 + damaged-build-top: DATA.R8 + Start: 2835 Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,64 + idle-top: DATA.R8 + Start: 2834 + Offset: -48,64 + damaged-idle-top: DATA.R8 + Start: 2835 + Offset: -48,64 + active: DATA.R8 # TODO: not wired up + Start: 4644 + Length: 30 + Offset: -48,64 bib: bib3x Start: 0 Length: * heavyh: - idle: - Start: 0 + idle: DATA.R8 + Start: 2678 Length: 1 - make: heavymake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 + Offset: -48,80 + make: DATA.R8 + Start: 4328 + Length: 18 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2678 + Offset: -48,80 + build-top: DATA.R8 + Start: 2679 Length: 1 - damaged-build-top: - Start: 2 + Offset: -48,80 + damaged-build-top: DATA.R8 + Start: 2680 Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,80 + idle-top: DATA.R8 + Start: 2679 + Offset: -48,80 + damaged-idle-top: DATA.R8 + Start: 2680 + Offset: -48,80 + active: DATA.R8 # TODO: not wired up + Start: 4674 + Length: 47 + Offset: -48,80 bib: bib3x Start: 0 Length: * conyardo: - idle: - Start: 0 - make: conmake - Start: 0 - Length: * - damaged-idle: - Start: 1 - bib: bib3x + idle: DATA.R8 + Start: 2879 + Offset: -48,64 + make: DATA.R8 # TODO: overlay + Start: 4109 + Length: 41 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2880 + Offset: -48,64 +# build: DATA.R8 # TODO: overlay +# Start: 4464 +# Length: 14 +# Offset: -48,64 +# damaged-build: DATA.R8 # TODO: overlay +# Start: 4464 +# Length: 14 +# Offset: -48,64 + bib: bib3x # TODO: read this from BLOXBAT.R8 Start: 0 Length: * starporto: - idle: - Start: 0 + idle: DATA.R8 + Start: 2991 + Offset: -48,64 ZOffset: -1c511 - active: - Start: 0 + active: DATA.R8 + Start: 2991 Length: 1 + Offset: -48,64 ZOffset: -1c511 - damaged-idle: - Start: 1 + damaged-idle: DATA.R8 + Start: 2992 + Offset: -48,64 ZOffset: -1c511 - damaged-active: - Start: 1 + damaged-active: DATA.R8 + Start: 2992 + Offset: -48,64 ZOffset: -1c511 - make: starportmake - Start: 0 - Length: * + make: DATA.R8 + Start: 4347 + Length: 22 + Offset: -48,64 bib: bib3x Start: 0 Length: * pwro: - idle: - Start: 0 - Length: 6 - Tick: 160 - make: wtrpmake - Start: 0 - Length: * - damaged-idle: - Start: 6 + idle: DATA.R8 + Start: 2843 + Length: 1 + Offset: -32,64 + make: DATA.R8 + Start: 4151 + Length: 24 + Offset: -32,64 + damaged-idle: DATA.R8 + Start: 2844 + Offset: -32,64 + active: DATA.R8 # TODO: not wired up + Start: 4512 + Length: 10 + Offset: -32,64 bib: bib2x Start: 0 Length: * barro: - idle: - Start: 0 - make: barromake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2845 + Offset: -32,64 + make: DATA.R8 + Start: 4213 + Length: 17 + Offset: -32,64 + damaged-idle: DATA.R8 + Start: 2846 + Offset: -32,64 bib: bib2x Start: 0 Length: * radaro: - idle: - Start: 0 - make: radarmake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2841 + Offset: -48,80 + make: DATA.R8 + Start: 4254 + Length: 19 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2842 + Offset: -48,80 + active: DATA.R8 # TODO: wire it up + Start: 4583 + Length: 30 + Offset: -48,80 bib: bib3x Start: 0 Length: * refo: - idle: - Start: 0 + idle: DATA.R8 + Start: 2881 Length: 1 - make: refmake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 - Length: 1 - damaged-build-top: - Start: 2 - Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,64 + make: DATA.R8 + Start: 4231 + Length: 22 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2881 + Offset: -48,64 + idle-top: DATA.R8 + Start: 2882 + Offset: -48,64 + damaged-idle-top: DATA.R8 + Start: 2883 + Offset: -48,64 bib: bib3x Start: 0 Length: * siloo: - idle: - Start: 0 + idle: DATA.R8 + Start: 2886 Length: 4 - damaged-idle: - Start: 4 + Offset: -16,16 + damaged-idle: DATA.R8 + Start: 2890 Length: 1 - make: silomake - Start: 0 - Length: * + Offset: -16,16 + make: DATA.R8 + Start: 4313 + Length: 14 + Offset: -16,16 hightecho: - idle: - Start: 0 - make: highmake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2884 + Offset: -48,80 + make: DATA.R8 + Start: 4274 + Length: 20 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2885 + Offset: -48,80 + active: DATA.R8 # TODO: not wired up + Start: 4614 + Length: 30 + Offset: -48,80 bib: bib3x Start: 0 Length: * palaceo: - idle: - Start: 0 - make: palacemake - Start: 0 - Length: * - damaged-idle: - Start: 1 + idle: DATA.R8 + Start: 2996 + Offset: -48,64 + make: DATA.R8 + Start: 4413 + Length: 22 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2997 + Offset: -48,64 bib: bib3x Start: 0 Length: * lighto: - idle: - Start: 0 + idle: DATA.R8 + Start: 2993 Length: 1 - make: lightmake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 + Offset: -48,64 + make: DATA.R8 + Start: 4295 + Length: 7 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 2993 + Offset: -48,64 + build-top: DATA.R8 + Start: 2994 Length: 1 - damaged-build-top: - Start: 2 + Offset: -48,64 + damaged-build-top: DATA.R8 + Start: 2995 Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,64 + idle-top: DATA.R8 + Start: 2994 + Offset: -48,64 + damaged-idle-top: DATA.R8 + Start: 2995 + Offset: -48,64 bib: bib3x Start: 0 Length: * heavyo: - idle: - Start: 0 + idle: DATA.R8 + Start: 2838 Length: 1 - make: heavymake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 + Offset: -48,80 + make: DATA.R8 + Start: 4328 + Length: 18 + Offset: -48,80 + damaged-idle: DATA.R8 + Start: 2838 + Offset: -48,80 + build-top: DATA.R8 + Start: 2839 Length: 1 - damaged-build-top: - Start: 2 + Offset: -48,80 + damaged-build-top: DATA.R8 + Start: 2840 Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,80 + idle-top: DATA.R8 + Start: 2839 + Offset: -48,80 + damaged-idle-top: DATA.R8 + Start: 2840 + Offset: -48,80 + active: DATA.R8 # TODO: not wired up + Start: 4674 + Length: 47 + Offset: -48,80 bib: bib3x Start: 0 Length: * -palacec: - idle: - Start: 0 - damaged-idle: - Start: 1 +palacec: # TODO: unused + idle: DATA.R8 + Start: 3004 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 3005 + Offset: -48,64 bib: bib3x Start: 0 Length: * -starportc: - idle: - Start: 0 +starportc: # TODO: unused + idle: DATA.R8 + Start: 2999 + Offset: -48,64 ZOffset: -1c511 - active: - Start: 0 + active: DATA.R8 + Start: 2999 Length: 1 + Offset: -48,64 ZOffset: -1c511 - damaged-idle: - Start: 1 + damaged-idle: DATA.R8 + Start: 3000 + Offset: -48,64 ZOffset: -1c511 - damaged-active: - Start: 1 + damaged-active: DATA.R8 + Start: 3000 + Offset: -48,64 ZOffset: -1c511 - make: starportmake - Start: 0 - Length: * + make: DATA.R8 + Start: 4347 + Length: 22 + Offset: -48,64 bib: bib3x Start: 0 Length: * -heavyc: - idle: - Start: 0 +heavyc: # TODO: unused + idle: DATA.R8 + Start: 3001 Length: 1 - make: heavymake - Start: 0 - Length: * - damaged-idle: - Start: 0 - build-top: - Start: 1 + Offset: -48,64 + make: DATA.R8 + Start: 4328 + Length: 18 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 3001 + Offset: -48,64 + build-top: DATA.R8 + Start: 3002 Length: 1 - damaged-build-top: - Start: 2 + Offset: -48,64 + damaged-build-top: DATA.R8 + Start: 3003 Length: 1 - idle-top: - Start: 1 - damaged-idle-top: - Start: 2 + Offset: -48,64 + idle-top: DATA.R8 + Start: 3002 + Offset: -48,64 + damaged-idle-top: DATA.R8 + Start: 3003 + Offset: -48,64 + active: DATA.R8 # TODO: not wired up + Start: 4674 + Length: 47 + Offset: -48,64 bib: bib3x Start: 0 Length: * + +conyardc: # TODO: unused + idle: DATA.R8 + Start: 3006 + Offset: -48,64 + make: DATA.R8 # TODO: overlay + Start: 4109 + Length: 41 + Offset: -48,64 + damaged-idle: DATA.R8 + Start: 3007 + Offset: -48,64 +# build: DATA.R8 # TODO: overlay +# Start: 4478 +# Length: 14 +# Offset: -48,64 +# damaged-build: DATA.R8 # TODO: overlay +# Start: 4478 +# Length: 14 +# Offset: -48,64 + bib: bib3x # TODO: read this from BLOXBAT.R8 + Start: 0 + Length: * + +plates: # TODO: unused + idle: DATA.R8 + Start: 3008 + Length: 6 From bed3fc24980d635ae9ba2f794e19ec32992ca59b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 11 Aug 2013 21:13:52 +0200 Subject: [PATCH 05/44] replace the infantry sequences with transposed DATA.R8 frames --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 40 -- OpenRA.Utility/Command.cs | 67 +- OpenRA.Utility/Program.cs | 2 +- mods/d2k/sequences/infantry.yaml | 604 +++++++++--------- 4 files changed, 320 insertions(+), 393 deletions(-) diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 61c842c72b..e75089a835 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -87,20 +87,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "162", "177", Path.Combine(pathToSHPs, "sandcrater2") }, new string[] { "--r8", pathToDataR8, pathToPalette, "178", "193", Path.Combine(pathToSHPs, "unknown") }, new string[] { "--r8", pathToDataR8, pathToPalette, "194", "205", Path.Combine(pathToSHPs, "unknown2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "206", "381", Path.Combine(pathToSHPs, "rifle"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "382", "457", Path.Combine(pathToSHPs, "rifledeath"), "--infantrydeath" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "458", "633", Path.Combine(pathToSHPs, "bazooka"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "634", "693", Path.Combine(pathToSHPs, "bazookadeath"), "--infantrydeath" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "694", "869", Path.Combine(pathToSHPs, "fremen"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "870", "929", Path.Combine(pathToSHPs, "fremendeath"), "--infantrydeath" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "930", "1105", Path.Combine(pathToSHPs, "sardaukar"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1106", "1165", Path.Combine(pathToSHPs, "sardaukardeath"), "--infantrydeath" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1166", "1341", Path.Combine(pathToSHPs, "engineer"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1342", "1401", Path.Combine(pathToSHPs, "engineerdeath"), "--infantrydeath" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1402", "1457", Path.Combine(pathToSHPs, "thumper"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1458", "1462", Path.Combine(pathToSHPs, "thumping"), "--infantrydeath" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1463", "1542", Path.Combine(pathToSHPs, "thumper2"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1543", "1602", Path.Combine(pathToSHPs, "thumperdeath"), "--infantrydeath" }, new string[] { "--r8", pathToDataR8, pathToPalette, "1603", "1634", Path.Combine(pathToSHPs, "missiletank"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "1635", "1666", Path.Combine(pathToSHPs, "trike"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "1667", "1698", Path.Combine(pathToSHPs, "quad"), "--vehicle" }, @@ -117,8 +103,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2083", "2114", Path.Combine(pathToSHPs, "devast"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2115", "2146", Path.Combine(pathToSHPs, "combathturret"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2147", "2148", Path.Combine(pathToSHPs, "deathhandmissile") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2149", "2324", Path.Combine(pathToSHPs, "saboteur"), "--infantry" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2325", "2388", Path.Combine(pathToSHPs, "saboteurdeath"), "--infantrydeath" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2389", "2420", Path.Combine(pathToSHPs, "deviatortank"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2421", "2452", Path.Combine(pathToSHPs, "raider"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2453", "2484", Path.Combine(pathToSHPs, "combato"), "--vehicle" }, @@ -319,20 +303,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater2.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "unknown.png"), "64" }, new string[] { "--shp", Path.Combine(pathToSHPs, "unknown2.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rifle.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rifledeath.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bazooka.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bazookadeath.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "fremen.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "fremendeath.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sardaukar.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sardaukardeath.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "engineer.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "engineerdeath.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "thumper.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "thumping.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "thumper2.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "thumperdeath.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "missiletank.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "trike.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "quad.png"), "32" }, @@ -349,8 +319,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "devast.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combathturret.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandmissile.png"), "24" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "saboteur.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "saboteurdeath.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "deviatortank.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "raider.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combato.png"), "48" }, @@ -499,14 +467,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic var shpToTranspose = new string[][] { new string[] { "--transpose", Path.Combine(pathToSHPs, "orni.shp"), Path.Combine(pathToSHPs, "orni.shp"), "0", "32", "3" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "rifle.shp"), Path.Combine(pathToSHPs, "rifle.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "bazooka.shp"), Path.Combine(pathToSHPs, "bazooka.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "fremen.shp"), Path.Combine(pathToSHPs, "fremen.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "sardaukar.shp"), Path.Combine(pathToSHPs, "sardaukar.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "thumper.shp"), Path.Combine(pathToSHPs, "thumper.shp"), "8", "8", "6" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "thumper2.shp"), Path.Combine(pathToSHPs, "thumper2.shp"), "8", "8", "5" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "engineer.shp"), Path.Combine(pathToSHPs, "engineer.shp"), "8", "8", "6" }, - new string[] { "--transpose", Path.Combine(pathToSHPs, "saboteur.shp"), Path.Combine(pathToSHPs, "saboteur.shp"), "8", "8", "6", "56", "8", "5", "112", "8", "3", "136", "8", "5" }, }; var onError = (Action)(s => Game.RunAfterTick(() => diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index 0911469df5..db3dec0340 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -141,44 +141,7 @@ namespace OpenRA.Utility frame = srcImage[startFrame]; - // resorting to RA/CnC compatible counter-clockwise frame order - if (args.Contains("--infantry")) - { - endFrame = startFrame - 1; - - // assuming 8 facings each animation set - for (int e = 8; e < frameCount + 1; e = e + 8) - { - for (int f = startFrame + e - 1; f > endFrame; f--) - { - var offsetX = frame.FrameSize.Width / 2 - frame.Size.Width / 2; - var offsetY = frame.FrameSize.Height / 2 - frame.Size.Height / 2; - - Console.WriteLine("calculated OffsetX: {0}", offsetX); - Console.WriteLine("calculated OffsetY: {0}", offsetY); - - var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly, - PixelFormat.Format8bppIndexed); - - for (var i = 0; i < frame.Size.Height; i++) - Marshal.Copy(frame.Image, i * frame.Size.Width, - new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width); - - bitmap.UnlockBits(data); - - x += frame.FrameSize.Width; - - frame = srcImage[f]; - Console.WriteLine("f: {0}", f); - } - - endFrame = startFrame + e - 1; - frame = srcImage[startFrame + e]; - Console.WriteLine("e: {0}", e); - Console.WriteLine("FrameCount: {0}", frameCount); - } - } - else if (args.Contains("--vehicle") || args.Contains("--projectile")) + if (args.Contains("--vehicle") || args.Contains("--projectile")) { frame = srcImage[startFrame]; @@ -260,34 +223,6 @@ namespace OpenRA.Utility bitmap = tileset; } - else - { - for (int f = startFrame; f < endFrame; f++) - { - frame = srcImage[f]; - var offsetX = 0; - var offsetY = 0; - if (args.Contains("--infantrydeath")) - { - offsetX = frame.FrameSize.Width / 2 - frame.Size.Width / 2; - offsetY = frame.FrameSize.Height / 2 - frame.Size.Height / 2; - } - - Console.WriteLine("calculated OffsetX: {0}", offsetX); - Console.WriteLine("calculated OffsetY: {0}", offsetY); - - var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly, - PixelFormat.Format8bppIndexed); - - for (var i = 0; i < frame.Size.Height; i++) - Marshal.Copy(frame.Image, i * frame.Size.Width, - new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width); - - bitmap.UnlockBits(data); - - x += frame.FrameSize.Width; - } - } bitmap.Save(filename + ".png"); Console.WriteLine(filename + ".png saved"); diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index e88e33fdb9..c0a5a1a091 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -64,7 +64,7 @@ namespace OpenRA.Utility Console.WriteLine(" --extract MOD[,MOD]* FILES [--userdir] Extract files from mod packages to the current (or user) directory"); Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG"); Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette"); - Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--infrantry] [--vehicle] [--projectile] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); + Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--vehicle] [--projectile] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); Console.WriteLine(" --transpose SRCSHP DESTSHP START N M [START N M ...] Transpose the N*M block of frames starting at START."); Console.WriteLine(" --docs MOD Generate trait documentation in MarkDown format."); Console.WriteLine(" --map-hash MAPFILE Generate hash of specified oramap file."); diff --git a/mods/d2k/sequences/infantry.yaml b/mods/d2k/sequences/infantry.yaml index 97762bfdc6..a55ac588c8 100644 --- a/mods/d2k/sequences/infantry.yaml +++ b/mods/d2k/sequences/infantry.yaml @@ -1,385 +1,417 @@ rifle: - stand: - Start: 0 - Facings: 8 - stand2: - Start: 0 - Facings: 8 - stand3: - Start: 0 - Facings: 8 - run: - Start: 8 + stand: DATA.R8 + Start: 206 + Facings: -8 + Transpose: true + stand2: DATA.R8 + Start: 206 + Facings: -8 + Transpose: true + stand3: DATA.R8 + Start: 206 + Facings: -8 + Transpose: true + run: DATA.R8 + Start: 214 Length: 6 - Facings: 8 + Facings: -8 Tick: 110 - shoot: - Start: 56 - Length: 5 - Facings: 8 - Tick: 120 - prone-stand: - Start: 104 - Length: 1 - Facings: 8 - prone-run: - Start: 112 + Transpose: true + shoot: DATA.R8 + Start: 254 + Length: 6 + Facings: -8 + Transpose: true + prone-stand: DATA.R8 + Start: 302 + Facings: -8 + Transpose: true + prone-run: DATA.R8 + Start: 310 Length: 3 - Facings: 8 + Facings: -8 + Transpose: true Tick: 110 - standup-0: - Start: 96 - Length: 1 - Facings: 8 + standup-0: DATA.R8 + Start: 302 + Facings: -8 + Transpose: true Tick: 120 - prone-shoot: - Start: 136 + prone-shoot: DATA.R8 + Start: 334 + Length: 6 + Facings: -8 + Transpose: true + die1: DATA.R8 + Start: 382 Length: 5 - Facings: 8 - Tick: 120 - die1: rifledeath - Start: 12 - Length: 12 + die2: DATA.R8 + Start: 387 + Length: 7 Tick: 80 - die2: rifledeath - Start: 12 + die3: DATA.R8 + Start: 394 + Length: 7 + die4: DATA.R8 + Start: 401 + Length: 7 + die5: DATA.R8 + Start: 408 + Length: 7 + die6: DATA.R8 + Start: 415 Length: 12 - Tick: 80 - die3: rifledeath - Start: 36 + die-crushed: DATA.R8 + Start: 430 Length: 12 - Tick: 80 - die4: rifledeath - Start: 24 - Length: 12 - Tick: 80 - die5: rifledeath - Start: 0 - Length: 12 - Tick: 80 - die6: rifledeath - Start: 12 - Length: 12 - Tick: 80 - die-crushed: rifledeath - Start: 48 - Length: 12 - Tick: 160 + Tick: 1600 bazooka: - stand: - Start: 0 - Facings: 8 - stand2: - Start: 0 - Facings: 8 - stand3: - Start: 0 - Facings: 8 - run: - Start: 8 + stand: DATA.R8 + Start: 458 + Facings: -8 + Transpose: true + stand2: DATA.R8 + Start: 458 + Facings: -8 + Transpose: true + stand3: DATA.R8 + Start: 458 + Facings: -8 + Transpose: true + run: DATA.R8 + Start: 466 Length: 6 - Facings: 8 + Facings: -8 Tick: 120 - shoot: - Start: 56 - Length: 5 - Facings: 8 - Tick: 120 - prone-stand: - Start: 104 + Transpose: true + shoot: DATA.R8 + Start: 506 + Length: 6 + Facings: -8 + Transpose: true + prone-stand: DATA.R8 + Start: 562 Length: 1 - Facings: 8 - prone-run: - Start: 112 + Facings: -8 + Transpose: true + prone-run: DATA.R8 + Start: 570 Length: 3 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - standup-0: - Start: 96 + standup-0: DATA.R8 + Start: 554 Length: 1 - Facings: 8 - prone-shoot: - Start: 136 + Facings: -8 + Transpose: true + prone-shoot: DATA.R8 + Start: 586 + Length: 6 + Facings: -8 + Transpose: true + die1: DATA.R8 + Start: 634 Length: 5 - Facings: 8 - Tick: 120 - die1: bazookadeath - Start: 0 - Length: 5 - die2: bazookadeath - Start: 5 + die2: DATA.R8 + Start: 639 Length: 7 - die3: bazookadeath - Start: 12 + die3: DATA.R8 + Start: 646 Length: 7 - die4: bazookadeath - Start: 19 + die4: DATA.R8 + Start: 653 Length: 7 - die5: bazookadeath - Start: 26 + die5: DATA.R8 + Start: 660 Length: 7 - die6: bazookadeath - Start: 26 + die6: DATA.R8 + Start: 660 Length: 7 - die-crushed: bazookadeath - Start: 34 + die-crushed: DATA.R8 + Start: 668 Length: 26 Tick: 1600 engineer: - stand: - Start: 0 - Facings: 8 - stand2: - Start: 0 - Facings: 8 - run: - Start: 8 + stand: DATA.R8 + Start: 1166 + Facings: -8 + Transpose: true + stand2: DATA.R8 + Start: 1166 + Facings: -8 + Transpose: true + run: DATA.R8 + Start: 1174 Length: 6 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - die1: engineerdeath - Start: 0 + die1: DATA.R8 + Start: 1342 Length: 5 - die2: engineerdeath - Start: 5 + die2: DATA.R8 + Start: 1347 Length: 7 - die3: engineerdeath - Start: 12 + die3: DATA.R8 + Start: 1354 Length: 7 - die4: engineerdeath - Start: 19 + die4: DATA.R8 + Start: 1361 Length: 7 - die5: engineerdeath - Start: 26 + die5: DATA.R8 + Start: 1368 Length: 7 - die6: engineerdeath - Start: 26 + die6: DATA.R8 + Start: 1368 Length: 7 - die-crushed: engineerdeath - Start: 34 + die-crushed: DATA.R8 + Start: 1376 Length: 26 Tick: 1600 thumper: - stand: - Start: 0 - Facings: 8 - stand2: - Start: 0 - Facings: 8 - run: - Start: 8 + stand: DATA.R8 + Start: 1402 + Facings: -8 + Transpose: true + stand2: DATA.R8 + Start: 1402 + Facings: -8 + Transpose: true + run: DATA.R8 + Start: 1410 Length: 6 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - heal: thumping - Start: 0 - Length: 4 - Tick: 480 - die1: thumperdeath - Start: 0 + heal: DATA.R8 + Start: 1458 Length: 5 - die2: thumperdeath - Start: 5 + Tick: 480 + die1: DATA.R8 + Start: 1543 + Length: 5 + die2: DATA.R8 + Start: 1548 Length: 7 - die3: thumperdeath - Start: 12 + die3: DATA.R8 + Start: 1555 Length: 7 - die4: thumperdeath - Start: 19 + die4: DATA.R8 + Start: 1562 Length: 7 - die5: thumperdeath - Start: 26 + die5: DATA.R8 + Start: 1569 Length: 7 - die6: thumperdeath - Start: 26 + die6: DATA.R8 + Start: 1569 Length: 7 - die-crushed: thumperdeath - Start: 34 + die-crushed: DATA.R8 + Start: 1577 Length: 26 Tick: 1600 thumping: - idle: - Start: 0 - Length: 4 + idle: DATA.R8 + Start: 1458 + Length: 5 Tick: 150 - make: - Start: 0 - Length: 4 - damaged-idle: - Start: 0 - Length: 4 + make: DATA.R8 + Start: 1458 + Length: 5 + damaged-idle: DATA.R8 + Start: 1458 + Length: 5 Tick: 150 fremen: - stand: - Start: 0 - Facings: 8 - stand2: - Start: 0 - Facings: 8 - run: - Start: 8 + stand: DATA.R8 + Start: 694 + Facings: -8 + Transpose: true + stand2: DATA.R8 + Start: 694 + Facings: -8 + Transpose: true + run: DATA.R8 + Start: 702 Length: 6 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - shoot: - Start: 56 - Length: 5 - Facings: 8 - Tick: 120 - prone-stand: - Start: 104 + shoot: DATA.R8 + Start: 742 + Length: 6 + Facings: -8 + Transpose: true + prone-stand: DATA.R8 + Start: 798 Length: 1 - Facings: 8 - prone-run: - Start: 112 + Facings: -8 + Transpose: true + prone-run: DATA.R8 + Start: 806 Length: 3 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - standup-0: - Start: 96 + standup-0: DATA.R8 + Start: 790 Length: 1 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - prone-shoot: - Start: 136 + prone-shoot: DATA.R8 + Start: 822 + Length: 6 + Facings: -8 + Transpose: true + die1: DATA.R8 + Start: 870 Length: 5 - Facings: 8 - Tick: 120 - die1: fremendeath - Start: 0 - Length: 5 - die2: fremendeath - Start: 5 + die2: DATA.R8 + Start: 875 Length: 7 - die3: fremendeath - Start: 12 + die3: DATA.R8 + Start: 882 Length: 7 - die4: fremendeath - Start: 19 + die4: DATA.R8 + Start: 889 Length: 7 - die5: fremendeath - Start: 26 + die5: DATA.R8 + Start: 896 Length: 7 - die6: fremendeath - Start: 26 + die6: DATA.R8 + Start: 896 Length: 7 - die-crushed: fremendeath - Start: 34 + die-crushed: DATA.R8 + Start: 904 Length: 26 Tick: 1600 saboteur: - stand: - Start: 0 - Facings: 8 - stand2: - Start: 0 - Facings: 8 - stand3: - Start: 0 - Facings: 8 - run: - Start: 8 + stand: DATA.R8 + Start: 2149 + Facings: -8 + Transpose: true + stand2: DATA.R8 + Start: 2149 + Facings: -8 + Transpose: true + stand3: DATA.R8 + Start: 2149 + Facings: -8 + Transpose: true + run: DATA.R8 + Start: 2157 Length: 6 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - prone-stand: - Start: 104 + prone-stand: DATA.R8 + Start: 2253 Length: 1 - Facings: 8 - prone-run: - Start: 112 + Facings: -8 + Transpose: true + prone-run: DATA.R8 + Start: 2261 Length: 3 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - standup-0: - Start: 96 + standup-0: DATA.R8 + Start: 2245 Length: 1 - Facings: 8 + Facings: -8 + Transpose: true Tick: 120 - die1: saboteurdeath - Start: 0 + die1: DATA.R8 + Start: 2325 Length: 5 - die2: saboteurdeath - Start: 5 + die2: DATA.R8 + Start: 2330 Length: 7 - die3: saboteurdeath - Start: 12 + die3: DATA.R8 + Start: 2337 Length: 7 - die4: saboteurdeath - Start: 19 + die4: DATA.R8 + Start: 2344 Length: 7 - die5: saboteurdeath - Start: 26 + die5: DATA.R8 + Start: 2351 Length: 7 - die6: saboteurdeath - Start: 26 + die6: DATA.R8 + Start: 2351 Length: 7 - die-crushed: saboteurdeath - Start: 34 + die-crushed: DATA.R8 + Start: 2359 Length: 26 Tick: 1600 sardaukar: - stand: - Start: 0 - Facings: 8 - stand2: - Start: 0 - Facings: 8 - run: - Start: 8 + stand: DATA.R8 + Start: 930 + Facings: -8 + Transpose: true + stand2: DATA.R8 + Start: 930 + Facings: -8 + Transpose: true + run: DATA.R8 + Start: 938 + Length: 6 + Facings: -8 + Transpose: true + Tick: 120 + shoot: DATA.R8 + Start: 978 + Length: 6 + Facings: -8 + Transpose: true + prone-stand: DATA.R8 + Start: 1034 + Length: 1 + Facings: -8 + Transpose: true + prone-run: DATA.R8 + Start: 1042 + Length: 3 + Facings: -8 + Transpose: true + Tick: 120 + standup-0: DATA.R8 + Start: 1026 + Length: 1 + Facings: -8 + Transpose: true + Tick: 120 + prone-shoot: DATA.R8 + Start: 1058 Length: 6 Facings: 8 - Tick: 120 - shoot: - Start: 56 + Transpose: true + die1: DATA.R8 + Start: 1106 Length: 5 - Facings: 8 - Tick: 120 - prone-stand: - Start: 104 - Length: 1 - Facings: 8 - prone-run: - Start: 112 - Length: 3 - Facings: 8 - Tick: 120 - standup-0: - Start: 96 - Length: 1 - Facings: 8 - Tick: 120 - prone-shoot: - Start: 136 - Length: 5 - Facings: 8 - Tick: 120 - die1: sardaukardeath - Start: 0 - Length: 5 - die2: sardaukardeath - Start: 5 + die2: DATA.R8 + Start: 1111 Length: 7 - die3: sardaukardeath - Start: 12 + die3: DATA.R8 + Start: 1118 Length: 7 - die4: sardaukardeath - Start: 19 + die4: DATA.R8 + Start: 1125 Length: 7 - die5: sardaukardeath - Start: 26 + die5: DATA.R8 + Start: 1132 Length: 7 - die6: sardaukardeath - Start: 26 + die6: DATA.R8 + Start: 1132 Length: 7 - die-crushed: sardaukardeath - Start: 34 + die-crushed: DATA.R8 + Start: 1140 Length: 26 - Tick: 1600 \ No newline at end of file + Tick: 1600 From d0d2c7a49bbe00f0d6c2e9f4b7d5fddda7284871 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 11 Aug 2013 21:18:41 +0200 Subject: [PATCH 06/44] load Dune 2000 aircraft directly from DATA.R8 --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 15 ------------ mods/d2k/sequences/aircraft.yaml | 23 ++++++++++--------- 2 files changed, 12 insertions(+), 26 deletions(-) diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index e75089a835..4b58f6dcb8 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -98,7 +98,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "1859", "1890", Path.Combine(pathToSHPs, "combataturret"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "1891", "1922", Path.Combine(pathToSHPs, "siegeturret"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "1923", "1954", Path.Combine(pathToSHPs, "carryall"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1955", "2050", Path.Combine(pathToSHPs, "orni"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2051", "2082", Path.Combine(pathToSHPs, "combath"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2083", "2114", Path.Combine(pathToSHPs, "devast"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2115", "2146", Path.Combine(pathToSHPs, "combathturret"), "--vehicle" }, @@ -107,7 +106,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2421", "2452", Path.Combine(pathToSHPs, "raider"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2453", "2484", Path.Combine(pathToSHPs, "combato"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2485", "2516", Path.Combine(pathToSHPs, "combatoturret"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2517", "2517", Path.Combine(pathToSHPs, "frigate"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "3014", "3014", Path.Combine(pathToSHPs, "unknown3"), "--projectile" }, new string[] { "--r8", pathToDataR8, pathToPalette, "3015", "3078", Path.Combine(pathToSHPs, "rpg"), "--projectile" }, new string[] { "--r8", pathToDataR8, pathToPalette, "3079", "3087", Path.Combine(pathToSHPs, "unknown4"), "--projectile" }, @@ -314,7 +312,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "combataturret.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "siegeturret.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "carryall.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "orni.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combath.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "devast.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combathturret.png"), "48" }, @@ -464,11 +461,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "spice0.png"), "32" }, }; - var shpToTranspose = new string[][] - { - new string[] { "--transpose", Path.Combine(pathToSHPs, "orni.shp"), Path.Combine(pathToSHPs, "orni.shp"), "0", "32", "3" }, - }; - var onError = (Action)(s => Game.RunAfterTick(() => { statusLabel.GetText = () => "Error: " + s; @@ -495,13 +487,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic File.Delete(shpToCreate[i][1]); } - for (int i = 0; i < shpToTranspose.Length; i++) - { - progressBar.Percentage = i * 100 / shpToTranspose.Count(); - statusLabel.GetText = () => "Transposing..."; - Utility.Command.TransposeShp(shpToTranspose[i]); - } - statusLabel.GetText = () => "Building tilesets..."; int c = 0; string[] TilesetArray = new string[] { "BASE", "BAT", "BGBS", "ICE", "TREE", "WAST" }; diff --git a/mods/d2k/sequences/aircraft.yaml b/mods/d2k/sequences/aircraft.yaml index eddbd5be7d..c98a23e5fc 100644 --- a/mods/d2k/sequences/aircraft.yaml +++ b/mods/d2k/sequences/aircraft.yaml @@ -1,19 +1,20 @@ carryall: - idle: - Start: 0 - Facings: 32 - unload: - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 1923 + Facings: -32 + unload: DATA.R8 + Start: 1923 + Facings: -32 orni: - idle: - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 1955 + Facings: -32 Length: 3 Tick: 120 + Transpose: true frigate: - idle: - Start: 0 + idle: DATA.R8 + Start: 2517 Facings: 1 \ No newline at end of file From 8718a9cb442b20ca268e107c34e43d6779ed5dae Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 11 Aug 2013 21:54:39 +0200 Subject: [PATCH 07/44] load projectiles, muzzles and explosions from DATA.R8 --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 161 ------------ OpenRA.Utility/Command.cs | 2 +- OpenRA.Utility/Program.cs | 2 +- mods/d2k/bits/bigboom.shp | Bin 62595 -> 0 bytes mods/d2k/bits/deathhandmissile.shp | Bin 1156 -> 0 bytes mods/d2k/bits/doubleblast.shp | Bin 16830 -> 0 bytes mods/d2k/bits/doubleblastmuzzle.shp | Bin 75230 -> 0 bytes mods/d2k/bits/fire1.shp | Bin 1554 -> 0 bytes mods/d2k/bits/fire2.shp | Bin 1799 -> 0 bytes mods/d2k/bits/fire3.shp | Bin 839 -> 0 bytes mods/d2k/bits/fire4.shp | Bin 454 -> 0 bytes mods/d2k/bits/shockwave.shp | Bin 16480 -> 0 bytes mods/d2k/bits/temperat.pal | Bin 768 -> 0 bytes mods/d2k/rules/system.yaml | 2 +- mods/d2k/sequences/misc.yaml | 229 +++++++++--------- 15 files changed, 116 insertions(+), 280 deletions(-) delete mode 100644 mods/d2k/bits/bigboom.shp delete mode 100644 mods/d2k/bits/deathhandmissile.shp delete mode 100644 mods/d2k/bits/doubleblast.shp delete mode 100644 mods/d2k/bits/doubleblastmuzzle.shp delete mode 100644 mods/d2k/bits/fire1.shp delete mode 100644 mods/d2k/bits/fire2.shp delete mode 100644 mods/d2k/bits/fire3.shp delete mode 100644 mods/d2k/bits/fire4.shp delete mode 100644 mods/d2k/bits/shockwave.shp delete mode 100644 mods/d2k/bits/temperat.pal diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 4b58f6dcb8..cdb486b006 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -63,30 +63,12 @@ namespace OpenRA.Mods.D2k.Widgets.Logic var extractGameFiles = new string[][] { - new string[] { "--r8", pathToDataR8, pathToPalette, "0", "2", Path.Combine(pathToSHPs, "overlay") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3", "3", Path.Combine(pathToSHPs, "repairing") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4", "4", Path.Combine(pathToSHPs, "black") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "5", "8", Path.Combine(pathToSHPs, "selectionedges") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "9", "9", Path.Combine(pathToSHPs, "bar1") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "10", "10", Path.Combine(pathToSHPs, "bar2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "11", "11", Path.Combine(pathToSHPs, "bar3") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "12", "12", Path.Combine(pathToSHPs, "bar4") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "13", "13", Path.Combine(pathToSHPs, "bar5") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "14", "14", Path.Combine(pathToSHPs, "bar6") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "15", "16", Path.Combine(pathToSHPs, "dots") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "17", "26", Path.Combine(pathToSHPs, "numbers") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "27", "37", Path.Combine(pathToSHPs, "credits") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "40", "101", Path.Combine(pathToSHPs, "d2kshadow") }, new string[] { "--r8", pathToDataR8, pathToPalette, "102", "105", Path.Combine(pathToSHPs, "crates") }, new string[] { "--r8", pathToDataR8, pathToPalette, "107", "109", Path.Combine(pathToSHPs, "spicebloom") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "110", "111", Path.Combine(pathToSHPs, "stars") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "112", "113", Path.Combine(pathToSHPs, "greenuparrow") }, new string[] { "--r8", pathToDataR8, pathToPalette, "114", "129", Path.Combine(pathToSHPs, "rockcrater1") }, new string[] { "--r8", pathToDataR8, pathToPalette, "130", "145", Path.Combine(pathToSHPs, "rockcrater2") }, new string[] { "--r8", pathToDataR8, pathToPalette, "146", "161", Path.Combine(pathToSHPs, "sandcrater1") }, new string[] { "--r8", pathToDataR8, pathToPalette, "162", "177", Path.Combine(pathToSHPs, "sandcrater2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "178", "193", Path.Combine(pathToSHPs, "unknown") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "194", "205", Path.Combine(pathToSHPs, "unknown2") }, new string[] { "--r8", pathToDataR8, pathToPalette, "1603", "1634", Path.Combine(pathToSHPs, "missiletank"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "1635", "1666", Path.Combine(pathToSHPs, "trike"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "1667", "1698", Path.Combine(pathToSHPs, "quad"), "--vehicle" }, @@ -106,67 +88,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "2421", "2452", Path.Combine(pathToSHPs, "raider"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2453", "2484", Path.Combine(pathToSHPs, "combato"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "2485", "2516", Path.Combine(pathToSHPs, "combatoturret"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3014", "3014", Path.Combine(pathToSHPs, "unknown3"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3015", "3078", Path.Combine(pathToSHPs, "rpg"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3079", "3087", Path.Combine(pathToSHPs, "unknown4"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3088", "3247", Path.Combine(pathToSHPs, "missile"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3248", "3279", Path.Combine(pathToSHPs, "doubleblast"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3280", "3283", Path.Combine(pathToSHPs, "bombs"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3284", "3287", Path.Combine(pathToSHPs, "unknown6"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3288", "3289", Path.Combine(pathToSHPs, "unknown7"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3290", "3303", Path.Combine(pathToSHPs, "unknown8"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3304", "3305", Path.Combine(pathToSHPs, "unknown9"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3306", "3369", Path.Combine(pathToSHPs, "missile2"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3370", "3380", Path.Combine(pathToSHPs, "unload"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3381", "3385", Path.Combine(pathToSHPs, "harvest"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3386", "3389", Path.Combine(pathToSHPs, "miniboom"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3390", "3402", Path.Combine(pathToSHPs, "mediboom"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3403", "3417", Path.Combine(pathToSHPs, "mediboom2"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3418", "3420", Path.Combine(pathToSHPs, "minifire"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3421", "3428", Path.Combine(pathToSHPs, "miniboom2"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3429", "3432", Path.Combine(pathToSHPs, "minibooms"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3433", "3447", Path.Combine(pathToSHPs, "bigboom"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3448", "3470", Path.Combine(pathToSHPs, "bigboom2"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3471", "3493", Path.Combine(pathToSHPs, "bigboom3"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3494", "3501", Path.Combine(pathToSHPs, "unknown10"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3502", "3509", Path.Combine(pathToSHPs, "unknown11"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3510", "3511", Path.Combine(pathToSHPs, "unknown12"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3512", "3530", Path.Combine(pathToSHPs, "movingsand"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3531", "3534", Path.Combine(pathToSHPs, "unknown13"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3535", "3539", Path.Combine(pathToSHPs, "unknown14"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3540", "3543", Path.Combine(pathToSHPs, "unknown15"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3544", "3548", Path.Combine(pathToSHPs, "unknown16"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3549", "3564", Path.Combine(pathToSHPs, "wormjaw"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3565", "3585", Path.Combine(pathToSHPs, "wormdust"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3586", "3600", Path.Combine(pathToSHPs, "wormsigns1") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3601", "3610", Path.Combine(pathToSHPs, "wormsigns2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3611", "3615", Path.Combine(pathToSHPs, "wormsigns3") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3616", "3620", Path.Combine(pathToSHPs, "wormsigns4") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3621", "3625", Path.Combine(pathToSHPs, "rings"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3626", "3630", Path.Combine(pathToSHPs, "minipiff"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3631", "3678", Path.Combine(pathToSHPs, "movingsand2"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3679", "3686", Path.Combine(pathToSHPs, "selling"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3687", "3693", Path.Combine(pathToSHPs, "shockwave"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3694", "3711", Path.Combine(pathToSHPs, "electroplosion"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3712", "3722", Path.Combine(pathToSHPs, "fire"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3723", "3734", Path.Combine(pathToSHPs, "fire2"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3735", "3738", Path.Combine(pathToSHPs, "unknown21"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3739", "3742", Path.Combine(pathToSHPs, "unknown22"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3743", "3774", Path.Combine(pathToSHPs, "doublemuzzle"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3775", "3806", Path.Combine(pathToSHPs, "muzzle"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3807", "3838", Path.Combine(pathToSHPs, "doubleblastmuzzle"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3839", "3870", Path.Combine(pathToSHPs, "minimuzzle"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3871", "3872", Path.Combine(pathToSHPs, "unknown17"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3873", "3875", Path.Combine(pathToSHPs, "unknown18"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3876", "3876", Path.Combine(pathToSHPs, "unknown19"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3877", "3884", Path.Combine(pathToSHPs, "burst"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3885", "3898", Path.Combine(pathToSHPs, "fire3"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3899", "3910", Path.Combine(pathToSHPs, "energy"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3911", "3946", Path.Combine(pathToSHPs, "reveal"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3947", "3964", Path.Combine(pathToSHPs, "orbit"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3965", "3979", Path.Combine(pathToSHPs, "mushroomcloud"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3980", "3987", Path.Combine(pathToSHPs, "mediboom3"), "--projectile" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "3988", "4010", Path.Combine(pathToSHPs, "largeboom"), "--projectile" }, new string[] { "--r8", pathToDataR8, pathToPalette, "4011", "4011", Path.Combine(pathToSHPs, "rifleicon") }, new string[] { "--r8", pathToDataR8, pathToPalette, "4012", "4012", Path.Combine(pathToSHPs, "bazookaicon") }, new string[] { "--r8", pathToDataR8, pathToPalette, "4013", "4013", Path.Combine(pathToSHPs, "engineericon") }, @@ -277,30 +198,10 @@ namespace OpenRA.Mods.D2k.Widgets.Logic var shpToCreate = new string[][] { - new string[] { "--shp", Path.Combine(pathToSHPs, "overlay.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repairing.png"), "24" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "black.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "selectionedges.png"), "8" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bar1.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bar2.png"), "24" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bar3.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bar4.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bar5.png"), "96" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bar6.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "dots.png"), "4" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "numbers.png"), "8" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "credits.png"), "10" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "d2kshadow.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "crates.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "spicebloom.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "stars.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "greenuparrow.png"), "16" }, new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater1.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater2.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater1.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater2.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown2.png"), "64" }, new string[] { "--shp", Path.Combine(pathToSHPs, "missiletank.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "trike.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "quad.png"), "32" }, @@ -315,72 +216,10 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "combath.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "devast.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combathturret.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandmissile.png"), "24" }, new string[] { "--shp", Path.Combine(pathToSHPs, "deviatortank.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "raider.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combato.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "combatoturret.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown3.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rpg.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown4.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "missile.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "doubleblast.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bombs.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown6.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown7.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown8.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown9.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "missile2.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unload.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "harvest.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "miniboom.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "mediboom.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "mediboom2.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "minifire.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "miniboom2.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "minibooms.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bigboom.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bigboom2.png"), "72" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bigboom3.png"), "72" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown10.png"), "24" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown11.png"), "84" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown12.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "movingsand.png"), "72" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown13.png"), "72" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown14.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown15.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown16.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wormjaw.png"), "68" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wormdust.png"), "68" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns1.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns2.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns3.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wormsigns4.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rings.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "minipiff.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "movingsand2.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "selling.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "shockwave.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "electroplosion.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "fire.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "fire2.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown21.png"), "12" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown22.png"), "24" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "doublemuzzle.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "muzzle.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "doubleblastmuzzle.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "minimuzzle.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown17.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown18.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "unknown19.png"), "16" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "burst.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "fire3.png"), "120" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "energy.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "reveal.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "orbit.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "mushroomcloud.png"), "72" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "mediboom3.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "largeboom.png"), "72" }, new string[] { "--shp", Path.Combine(pathToSHPs, "rifleicon.png"), "60" }, new string[] { "--shp", Path.Combine(pathToSHPs, "bazookaicon.png"), "60" }, new string[] { "--shp", Path.Combine(pathToSHPs, "engineericon.png"), "60" }, diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index db3dec0340..c1680b1817 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -141,7 +141,7 @@ namespace OpenRA.Utility frame = srcImage[startFrame]; - if (args.Contains("--vehicle") || args.Contains("--projectile")) + if (args.Contains("--vehicle")) { frame = srcImage[startFrame]; diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index c0a5a1a091..d4c25ca770 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -64,7 +64,7 @@ namespace OpenRA.Utility Console.WriteLine(" --extract MOD[,MOD]* FILES [--userdir] Extract files from mod packages to the current (or user) directory"); Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG"); Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette"); - Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--vehicle] [--projectile] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); + Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--vehicle] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); Console.WriteLine(" --transpose SRCSHP DESTSHP START N M [START N M ...] Transpose the N*M block of frames starting at START."); Console.WriteLine(" --docs MOD Generate trait documentation in MarkDown format."); Console.WriteLine(" --map-hash MAPFILE Generate hash of specified oramap file."); diff --git a/mods/d2k/bits/bigboom.shp b/mods/d2k/bits/bigboom.shp deleted file mode 100644 index 40c6085d5c74d98633f54fe1e6137b6f091ffa87..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 62595 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 diff --git a/mods/d2k/bits/doubleblast.shp b/mods/d2k/bits/doubleblast.shp deleted file mode 100644 index 02743187fc5e147fce2294bf322377e64d5d36db..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16830 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 diff --git a/mods/d2k/bits/fire1.shp b/mods/d2k/bits/fire1.shp deleted file mode 100644 index ca7d6fce7b21215bbc148a7e31c049c2105774f1..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1554 zcmZWp&1)QG82{}@HcCI7MBLrrWx~8d| zwk2s4Jb1CTO{AWy)FzpkcP1a_G%cl9L1<#V4E~;(u@#&>JTtpHzpv+c-WMQOiyyfz z0iR3#qpVYv;`#fs)~m(yd|7wO`g*PS{&HFWEbG~N@%`1w7rU+pF-6$wr{#bu1a>Dy>zt35@k!SDAPpnC7o8-in?8r?MJvXVSmXncO;A zneC=4NPkDRN>AB0fZ*&7kX%Mz8)edK7!r;^XzXml=|vCV37LzD?I-BFN}2E$vghDN zN5BVy9v-i3{($U9LHvq{b!cbA4)`9bPAy)=P-)j_W!KOrvgSJ~S{6sSw%6=|P&5ei z7|vX;xpfbwi?)p*zk4QLMkh|Ll$w1og=A4)pBjmmkc~2kRd@zOi^8sZqv4R)+4CeB!dJ$rCTqE_ zfJxXuOg00pRCGW^N;rJ&#*C&b_t9g~Iopc2;JIjHxE;X0Q^~%StmcJh@2vd8UW79i z`^b)whsmix*$i8l~%+H!oA;}-(}9X^E9 zWmGf&2%{N_~3X?xK#otj>$7INU=DEd(SZHzcJJU=yTN4Lg=fJ(X9YRJYS)oXVk=`t#;I^e3 z932-;58MSz`>tzw&ai7#Ewi(asV1jMF@IT6XD<7-1ePvxF&N+WB@DFT$YFwc3^*#< zkYf89ec}uuamFr549@_SvJVjOz)JVa3_i>E>U@4O>;-rj@MvS>(mTbA%9)7ni+XBk Y)1;H5@$3<;dGn4i)!kV~_7nB}1Bd_&2><{9 diff --git a/mods/d2k/bits/fire2.shp b/mods/d2k/bits/fire2.shp deleted file mode 100644 index d6aebc5620d4c7252ffcc7cfb2314ac433ce3ae2..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 1799 zcmY*Z%WfP+6g?9^LI@@mV|P1I7A zg#5|#F>p@SzsvQlO7FZ`t}pEAoxd&Dr}}#5FUmFO@0~v^*SqC(%Z^SgSVz@Miruu6hkToKSyq(#gT61LeX zFRwaCkxlx6XP2zP`He%qE}=KR60DPSj(S~ciNom~EY#y#jY_ky7-v5m!kHxXI<#0R zn^_6c2b*rA`0RhM2fS6)0FmiEO$#}r2HR&)>|-50G}*Jnls!Lz_u(UWl96Z zel`nT(|wnLn$(6^6UXy;{IE$Pl2F+L7;P|kkP>Gap{r;6D|jZF%-bmFoO8u1Ub_4_ zQJJdfbf)Z+LH05RllNHHCG`YVW5?_6%QPNu5y0d#;wrLbJ52=X7BJb=Wn=Ejs5l{d zv+?s=Jh8IfeHC2C6rRcoQZ}RH=B{lsBsZCc^)^X_yPUhWy#D>jde(CW^Hj; zj6L+^RV;8mXxavcI@?U1v%;70kO(@hMiC@;faCXcecO*2(TLOp=Om&*Xa1NLXg?li z(UO73C_0}*G}`^1BT6%_3Oj4!lVb=l#;6M%I<;Dzb54+DObKK4Y&KL;k90Zcyu=>? z^V$N|$|z`9uO6qUr!4~h$)NI2?Le#bpz>b{JkMT;wc$u5=#;B5qd40_bvmabzn1cy zm4>_d4h7~6WeC%y^{7yO_Fg_ZzgQMZ;D6qf?#uszn)MF3!Ku@t|LS-wU6aT(#(j}F zqLvugvex`NCkr)_9h*feL488O&E{pS>wHT(kO0?ZG_$W;LZE%tYa8%IO9P@opzmmIXx^{ z{>15p)27o8r#rsoj(pzrcj-P+DDyUHpJXXPrlYRftE$dZgBX}@L^$KzVC*Xr+oQ>y0^i=#7Y&NDCzVy>VUk3Fi z!41%{MF(?e!h_Ck@K^D(78QMvg2_;rneo&k5#(#0wcKES&(G?d69s@I_lN$e8ZB1Y zvDB$sqdcLQq@Ysg(|sd$4}%Xq(zhJoj(4Hb>lGeL)4$47?2NIi@#W&aC8TTa1aJWi z%?eE5A=+>ZlP6#GG~$}$0yjm1&5Irigu*BthO8N~8V;Waqm{6WWA(zvN+_JYNGgU= KT=vp^%YFj|!7Zi$ diff --git a/mods/d2k/bits/fire4.shp b/mods/d2k/bits/fire4.shp deleted file mode 100644 index abea58b29f70060376769533ad360864261b123c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 454 zcmd;Q00DL&1c7M`3=JT9HI&{DrLRKi*HD^~5u#2MN^3!BJ189lrBk7FHI$wJr58cz zEl~OxBgj?+_$R@@&=eQR=%gQk)cQG`_p zQ^8{Bh9U%k3gaNwBWd=5IZ2R#p)t;ZU4f$+RfvH}fL(zNtACn&&^)QY)<}v70BNyi Ag8%>k diff --git a/mods/d2k/bits/shockwave.shp b/mods/d2k/bits/shockwave.shp deleted file mode 100644 index 7527644668938ff777bfc626b9e96bbb6c661b8a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 16480 zcmeI2J&WVq6~{+aNVBX=T!>V{sY6_aCyi3LlKa#tMPQ3@GcZn(#uxDE`@bC{E|Nd)t{O7_Q zZ@+cNfB()MfAf2H{L>%Z@vnatsvm8C`m@fyO!F&S?N89+q6kDKfD>HstO16rLLcadMOjpR%v zO!20Uqrallhi0Jv#OG<07FeU_jsq1A>e;6&=Z^o z;D3lM25$%mI00n0hMl?x_w~1DMg_$Fz7^vU-Xq*02!8h%YyQ}Hmu&oSsLM$HnCz>r zzT>~jO>YwY(*FC`o0<(C{NtC_^1J*&G=9eEx9mSvBmTWxe#iR%q>2aUSXJ^th4^b+ z7w`9r{r-W!%MLJ>Kj9MZ(|zg&GA0k*

Xb8bxWk;*frR1JSdIKc{IMts*c9fTroR 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 diff --git a/mods/d2k/bits/temperat.pal b/mods/d2k/bits/temperat.pal deleted file mode 100644 index bb63fcdd50490a6ace83199cf15196a1e551c57e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 768 zcmWlX>5{7;5QV#v78wGj7yAT)^T#DeE+w)r215IPWK<`0|4kh^=V|qs}{yR z)(Lb-lJ&FKUJv_zUDw@qyWJUvvA0aqv~1gUJjZc7*Y*7nAt!YFz;OeFbVv?icwh&#yrBF(A>NpHXDaS@#I@Nd0Wgd^`;d&jf%X9gAl*_evOxb)+ z$By(3u4P>FKolrvh+r4Tb`)C3H+|P|tPP!Cw7b&dNO||^+K;aZ;Qrmtqq_9sd@8#- zS6`{jlPZngKhM`~zFp3juIXx_szMa3APJ3v6y7y}eu4 z)B1pQgjK@N@^`!cj?=5{uSa#M#E|ipWGciGMU@wD2j!NV?p?gK!j0jJZs6*~z9i0h zNKzEVw&xp`9oAJKIO4gPr+X5cL9q3Gu&nX9R@1*wEl&Bg@ogWD#^JQ{VI`+=<421MGttfJm#3KaJG+ Date: Sun, 11 Aug 2013 22:17:16 +0200 Subject: [PATCH 08/44] move vehicles to load sprites from DATA.R8 directly --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 37 ---- OpenRA.Utility/Command.cs | 56 +----- OpenRA.Utility/Program.cs | 2 +- mods/d2k/bits/harvest2.shp | Bin 200238 -> 0 bytes mods/d2k/bits/harvester.shp | Bin 97635 -> 0 bytes mods/d2k/bits/unload2.shp | Bin 11923 -> 0 bytes mods/d2k/rules/vehicles.yaml | 2 +- mods/d2k/sequences/misc.yaml | 3 + mods/d2k/sequences/vehicles.yaml | 161 +++++++++--------- 9 files changed, 85 insertions(+), 176 deletions(-) delete mode 100644 mods/d2k/bits/harvest2.shp delete mode 100644 mods/d2k/bits/harvester.shp delete mode 100644 mods/d2k/bits/unload2.shp diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index cdb486b006..6623770895 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -69,25 +69,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "130", "145", Path.Combine(pathToSHPs, "rockcrater2") }, new string[] { "--r8", pathToDataR8, pathToPalette, "146", "161", Path.Combine(pathToSHPs, "sandcrater1") }, new string[] { "--r8", pathToDataR8, pathToPalette, "162", "177", Path.Combine(pathToSHPs, "sandcrater2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1603", "1634", Path.Combine(pathToSHPs, "missiletank"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1635", "1666", Path.Combine(pathToSHPs, "trike"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1667", "1698", Path.Combine(pathToSHPs, "quad"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1699", "1730", Path.Combine(pathToSHPs, "harvester"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1731", "1762", Path.Combine(pathToSHPs, "combata"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1763", "1794", Path.Combine(pathToSHPs, "siegetank"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1795", "1826", Path.Combine(pathToSHPs, "dmcv"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1827", "1858", Path.Combine(pathToSHPs, "sonictank"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1859", "1890", Path.Combine(pathToSHPs, "combataturret"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1891", "1922", Path.Combine(pathToSHPs, "siegeturret"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "1923", "1954", Path.Combine(pathToSHPs, "carryall"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2051", "2082", Path.Combine(pathToSHPs, "combath"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2083", "2114", Path.Combine(pathToSHPs, "devast"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2115", "2146", Path.Combine(pathToSHPs, "combathturret"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2147", "2148", Path.Combine(pathToSHPs, "deathhandmissile") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2389", "2420", Path.Combine(pathToSHPs, "deviatortank"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2421", "2452", Path.Combine(pathToSHPs, "raider"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2453", "2484", Path.Combine(pathToSHPs, "combato"), "--vehicle" }, - new string[] { "--r8", pathToDataR8, pathToPalette, "2485", "2516", Path.Combine(pathToSHPs, "combatoturret"), "--vehicle" }, new string[] { "--r8", pathToDataR8, pathToPalette, "4011", "4011", Path.Combine(pathToSHPs, "rifleicon") }, new string[] { "--r8", pathToDataR8, pathToPalette, "4012", "4012", Path.Combine(pathToSHPs, "bazookaicon") }, new string[] { "--r8", pathToDataR8, pathToPalette, "4013", "4013", Path.Combine(pathToSHPs, "engineericon") }, @@ -202,24 +183,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater2.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater1.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater2.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "missiletank.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "trike.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "quad.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "harvester.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combata.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "siegetank.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "dmcv.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sonictank.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combataturret.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "siegeturret.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "carryall.png"), "64" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combath.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "devast.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combathturret.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "deviatortank.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "raider.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combato.png"), "48" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combatoturret.png"), "48" }, new string[] { "--shp", Path.Combine(pathToSHPs, "rifleicon.png"), "60" }, new string[] { "--shp", Path.Combine(pathToSHPs, "bazookaicon.png"), "60" }, new string[] { "--shp", Path.Combine(pathToSHPs, "engineericon.png"), "60" }, diff --git a/OpenRA.Utility/Command.cs b/OpenRA.Utility/Command.cs index c1680b1817..757355245f 100644 --- a/OpenRA.Utility/Command.cs +++ b/OpenRA.Utility/Command.cs @@ -137,63 +137,9 @@ namespace OpenRA.Utility var bitmap = new Bitmap(frame.FrameSize.Width * frameCount, frame.FrameSize.Height, PixelFormat.Format8bppIndexed); bitmap.Palette = palette.AsSystemPalette(); - int x = 0; - frame = srcImage[startFrame]; - if (args.Contains("--vehicle")) - { - frame = srcImage[startFrame]; - - for (int f = endFrame - 1; f > startFrame - 1; f--) - { - var offsetX = frame.FrameSize.Width / 2 - frame.Offset.X; - var offsetY = frame.FrameSize.Height / 2 - frame.Offset.Y; - - Console.WriteLine("calculated OffsetX: {0}", offsetX); - Console.WriteLine("calculated OffsetY: {0}", offsetY); - - var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly, - PixelFormat.Format8bppIndexed); - - for (var i = 0; i < frame.Size.Height; i++) - Marshal.Copy(frame.Image, i * frame.Size.Width, - new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width); - - bitmap.UnlockBits(data); - - x += frame.FrameSize.Width; - - frame = srcImage[f]; - } - } - else if (args.Contains("--turret")) - { - frame = srcImage[startFrame]; - - for (int f = endFrame - 1; f > startFrame - 1; f--) - { - var offsetX = Math.Abs(frame.Offset.X); - var offsetY = frame.FrameSize.Height - Math.Abs(frame.Offset.Y); - - Console.WriteLine("calculated OffsetX: {0}", offsetX); - Console.WriteLine("calculated OffsetY: {0}", offsetY); - - var data = bitmap.LockBits(new Rectangle(x + offsetX, 0 + offsetY, frame.Size.Width, frame.Size.Height), ImageLockMode.WriteOnly, - PixelFormat.Format8bppIndexed); - - for (var i = 0; i < frame.Size.Height; i++) - Marshal.Copy(frame.Image, i * frame.Size.Width, - new IntPtr(data.Scan0.ToInt64() + i * data.Stride), frame.Size.Width); - - bitmap.UnlockBits(data); - - x += frame.FrameSize.Width; - - frame = srcImage[f]; - } - } - else if (args.Contains("--tileset")) + if (args.Contains("--tileset")) { int f = 0; var tileset = new Bitmap(frame.FrameSize.Width * 20, frame.FrameSize.Height * 40, PixelFormat.Format8bppIndexed); diff --git a/OpenRA.Utility/Program.cs b/OpenRA.Utility/Program.cs index d4c25ca770..f3c9edea08 100644 --- a/OpenRA.Utility/Program.cs +++ b/OpenRA.Utility/Program.cs @@ -64,7 +64,7 @@ namespace OpenRA.Utility Console.WriteLine(" --extract MOD[,MOD]* FILES [--userdir] Extract files from mod packages to the current (or user) directory"); Console.WriteLine(" --tmp-png MOD[,MOD]* THEATER FILES Extract terrain tiles to PNG"); Console.WriteLine(" --remap SRCMOD:PAL DESTMOD:PAL SRCSHP DESTSHP Remap SHPs to another palette"); - Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--vehicle] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type for correct offset to append multiple frames to one PNG named by filename optionally removing the shadow."); + Console.WriteLine(" --r8 R8FILE PALETTE START END FILENAME [--noshadow] [--tileset] Convert Dune 2000 DATA.R8 to PNGs choosing start- and endframe as well as type to append multiple frames to one PNG named by filename optionally removing the shadow."); Console.WriteLine(" --transpose SRCSHP DESTSHP START N M [START N M ...] Transpose the N*M block of frames starting at START."); Console.WriteLine(" --docs MOD Generate trait documentation in MarkDown format."); Console.WriteLine(" --map-hash MAPFILE Generate hash of specified oramap file."); diff --git a/mods/d2k/bits/harvest2.shp b/mods/d2k/bits/harvest2.shp deleted file mode 100644 index b09ec60ab110f37661b01237e77236ed84fe96b7..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 200238 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 BEt3EM diff --git a/mods/d2k/bits/harvester.shp b/mods/d2k/bits/harvester.shp deleted file mode 100644 index b8de8cc9ee15254cf220e27fb34cc56204b08d51..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 97635 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 z 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 Je7Q0`{eM&il9K=c diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml index 675f66817b..1386f7e212 100644 --- a/mods/d2k/rules/vehicles.yaml +++ b/mods/d2k/rules/vehicles.yaml @@ -1,7 +1,7 @@ ^MCV: Inherits: ^Vehicle Buildable: - Prerequisites: repair + Prerequisites: Repair Queue: Armor BuildPaletteOrder: 110 Hotkey: m diff --git a/mods/d2k/sequences/misc.yaml b/mods/d2k/sequences/misc.yaml index c65ba10d5e..71c1c40a9b 100644 --- a/mods/d2k/sequences/misc.yaml +++ b/mods/d2k/sequences/misc.yaml @@ -40,6 +40,9 @@ explosion: small_napalm: DATA.R8 Start: 3421 Length: 8 + shockwave: DATA.R8 + Start: 3687 + Length: 6 90mm: idle: diff --git a/mods/d2k/sequences/vehicles.yaml b/mods/d2k/sequences/vehicles.yaml index bd2c65da6a..75bca7c6e2 100644 --- a/mods/d2k/sequences/vehicles.yaml +++ b/mods/d2k/sequences/vehicles.yaml @@ -1,113 +1,110 @@ dmcv: - idle: - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 1795 + Facings: -32 harvester: - idle: - Start: 0 - Facings: 32 - harvest: harvest2 - Start: 0 + idle: DATA.R8 + Start: 1699 + Facings: -32 + harvest: DATA.R8 + Start: 3631 Length: 6 - Facings: 8 + Facings: -8 Tick: 80 ZOffset: 1 - dock: unload2 - Start: 0 + dock: DATA.R8 + Start: 3370 Length: 10 - dock-loop: unload2 - Start: 10 + dock-loop: DATA.R8 + Start: 3380 Length: 1 trike: - idle: - Start: 0 - Facings: 32 - unload: - Start: 0 - Facings: 32 - muzzle: minimuzzle - Start: 0 - Length: 1 - Facings: 32 + idle: DATA.R8 + Start: 1635 + Facings: -32 + unload: DATA.R8 + Start: 1635 + Facings: -32 + muzzle: DATA.R8 + Start: 3839 + Facings: -32 quad: - idle: - Start: 0 - Facings: 32 - unload: - Start: 0 - Facings: 32 - muzzle: minimuzzle - Start: 0 - Length: 1 - Facings: 32 + idle: DATA.R8 + Start: 1667 + Facings: -32 + unload: DATA.R8 + Start: 1667 + Facings: -32 + muzzle: DATA.R8 + Start: 3839 + Facings: -32 siegetank: - idle: - Start: 0 - Facings: 32 - turret: siegeturret - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 1763 + Facings: -32 + turret: DATA.R8 + Start: 1891 + Facings: -32 missiletank: - idle: - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 1603 + Facings: -32 sonictank: - idle: - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 1827 + Facings: -32 combata: - idle: - Start: 0 - Facings: 32 - turret: combataturret - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 1731 + Facings: -32 + turret: DATA.R8 + Start: 1859 + Facings: -32 combath: - idle: - Start: 0 - Facings: 32 - turret: combathturret - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 2051 + Facings: -32 + turret: DATA.R8 + Start: 2115 + Facings: -32 devast: - idle: - Start: 0 - Facings: 32 - muzzle: doubleblastmuzzle - Start: 0 + idle: DATA.R8 + Start: 2083 + Facings: -32 + muzzle: DATA.R8 + Start: 3807 Length: 1 - Facings: 32 + Facings: -32 combato: - idle: - Start: 0 - Facings: 32 - turret: combatoturret - Start: 0 - Facings: 32 + idle: DATA.R8 + Start: 2453 + Facings: -32 + turret: DATA.R8 + Start: 2485 + Facings: -32 raider: - idle: - Start: 0 - Facings: 32 - unload: - Start: 0 - Facings: 32 - muzzle: minimuzzle - Start: 0 - Length: 1 - Facings: 32 + idle: DATA.R8 + Start: 2421 + Facings: -32 + unload: DATA.R8 + Start: 2421 + Facings: -32 + muzzle: DATA.R8 + Start: 3839 + Facings: -32 deviatortank: - idle: - Start: 0 - Facings: 32 \ No newline at end of file + idle: DATA.R8 + Start: 2389 + Facings: -32 From 376a6c7a5da5cbc8eae315f5f0f33fe94f7f29f3 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 16 Aug 2013 10:03:05 +0200 Subject: [PATCH 09/44] read the production icons from sequences this allows d2k to read them from DATA.R8 without trouble --- .../Widgets/ProductionPaletteWidget.cs | 13 +- OpenRA.Mods.RA/Tooltip.cs | 5 +- OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs | 12 +- .../Widgets/ObserverProductionIconsWidget.cs | 27 ++- mods/cnc/rules/aircraft.yaml | 5 - mods/cnc/rules/infantry.yaml | 12 -- mods/cnc/rules/ships.yaml | 1 - mods/cnc/rules/structures.yaml | 22 --- mods/cnc/rules/tech.yaml | 1 - mods/cnc/rules/vehicles.yaml | 15 -- mods/cnc/sequences/aircraft.yaml | 13 +- mods/cnc/sequences/campaign.yaml | 4 +- mods/cnc/sequences/funpark.yaml | 10 +- mods/cnc/sequences/infantry.yaml | 23 +++ mods/cnc/sequences/map.yaml | 2 + mods/cnc/sequences/structures.yaml | 46 ++++- mods/cnc/sequences/vehicles.yaml | 32 +++- mods/d2k/rules/aircraft.yaml | 21 ++- mods/d2k/rules/atreides.yaml | 31 +--- mods/d2k/rules/defaults.yaml | 4 +- mods/d2k/rules/harkonnen.yaml | 57 ++----- mods/d2k/rules/infantry.yaml | 58 +------ mods/d2k/rules/ordos.yaml | 64 ++++--- mods/d2k/rules/structures.yaml | 72 +++----- mods/d2k/rules/system.yaml | 38 ++--- mods/d2k/rules/vehicles.yaml | 40 ++--- mods/d2k/sequences/infantry.yaml | 26 ++- mods/d2k/sequences/structures.yaml | 161 ++++++++++++++++++ mods/d2k/sequences/vehicles.yaml | 52 ++++++ mods/ra/rules/infantry.yaml | 3 - mods/ra/rules/structures.yaml | 3 - mods/ra/rules/vehicles.yaml | 2 - mods/ra/sequences/aircraft.yaml | 10 ++ mods/ra/sequences/infantry.yaml | 32 +++- mods/ra/sequences/ships.yaml | 12 ++ mods/ra/sequences/structures.yaml | 62 +++++++ mods/ra/sequences/vehicles.yaml | 36 ++++ mods/ts/rules/aircraft.yaml | 8 - mods/ts/rules/defaults.yaml | 1 - mods/ts/rules/infantry.yaml | 20 --- mods/ts/rules/structures.yaml | 7 - mods/ts/rules/vehicles.yaml | 25 --- mods/ts/sequences/aircraft.yaml | 31 ++++ mods/ts/sequences/infantry.yaml | 52 +++++- mods/ts/sequences/structures.yaml | 16 +- mods/ts/sequences/vehicles.yaml | 100 ++++++++++- 46 files changed, 862 insertions(+), 425 deletions(-) diff --git a/OpenRA.Mods.Cnc/Widgets/ProductionPaletteWidget.cs b/OpenRA.Mods.Cnc/Widgets/ProductionPaletteWidget.cs index b172f81fc9..3d174acd16 100755 --- a/OpenRA.Mods.Cnc/Widgets/ProductionPaletteWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/ProductionPaletteWidget.cs @@ -16,6 +16,7 @@ using OpenRA.Graphics; using OpenRA.Mods.RA; using OpenRA.Mods.RA.Buildings; using OpenRA.Mods.RA.Orders; +using OpenRA.Traits; using OpenRA.Widgets; namespace OpenRA.Mods.Cnc.Widgets @@ -53,7 +54,6 @@ namespace OpenRA.Mods.Cnc.Widgets public override Rectangle EventBounds { get { return eventBounds; } } Dictionary icons = new Dictionary(); - Dictionary iconSprites; Animation cantBuild, clock; Rectangle eventBounds = Rectangle.Empty; readonly WorldRenderer worldRenderer; @@ -71,13 +71,6 @@ namespace OpenRA.Mods.Cnc.Widgets cantBuild = new Animation("clock"); cantBuild.PlayFetchIndex("idle", () => 0); clock = new Animation("clock"); - - iconSprites = Rules.Info.Values - .Where(u => u.Traits.Contains() && u.Name[0] != '^') - .ToDictionary( - u => u.Name, - u => Game.modData.SpriteLoader.LoadAllSprites( - u.Traits.Get().Icon ?? (u.Name + "icon"))[0]); } public override void Tick() @@ -186,10 +179,12 @@ namespace OpenRA.Mods.Cnc.Widgets var x = i % Columns; var y = i / Columns; var rect = new Rectangle(rb.X + x * 64 + 1, rb.Y + y * 48 + 1, 64, 48); + var icon = new Animation(RenderSimple.GetImage(item)); + icon.Play(item.Traits.Get().Icon); var pi = new ProductionIcon() { Name = item.Name, - Sprite = iconSprites[item.Name], + Sprite = icon.Image, Pos = new float2(rect.Location), Queued = CurrentQueue.AllQueued().Where(a => a.Item == item.Name).ToList(), }; diff --git a/OpenRA.Mods.RA/Tooltip.cs b/OpenRA.Mods.RA/Tooltip.cs index c7f5788e69..e014b9b30b 100644 --- a/OpenRA.Mods.RA/Tooltip.cs +++ b/OpenRA.Mods.RA/Tooltip.cs @@ -18,8 +18,9 @@ namespace OpenRA.Mods.RA { public readonly string Description = ""; public readonly string Name = ""; - [Desc("Defaults to actor name + icon suffix.")] - public readonly string Icon = null; + + [Desc("Sequence of the actor that contains the cameo.")] + public readonly string Icon = "icon"; public virtual object Create(ActorInitializer init) { return new Tooltip(init.self, this); } } diff --git a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs index 8b2b49eb94..acdd435eb2 100755 --- a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs @@ -37,7 +37,6 @@ namespace OpenRA.Mods.RA.Widgets List VisibleQueues; bool paletteOpen = false; - Dictionary iconSprites; float2 paletteOpenOrigin = new float2(Game.viewport.Width - 215, 280); float2 paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280); @@ -67,13 +66,6 @@ namespace OpenRA.Mods.RA.Widgets paletteOrigin = paletteClosedOrigin; VisibleQueues = new List(); CurrentQueue = null; - - iconSprites = Rules.Info.Values - .Where(u => u.Traits.Contains() && u.Name[0] != '^') - .ToDictionary( - u => u.Name, - u => Game.modData.SpriteLoader.LoadAllSprites( - u.Traits.Get().Icon ?? (u.Name + "icon"))[0]); } public override Rectangle EventBounds @@ -230,7 +222,9 @@ namespace OpenRA.Mods.RA.Widgets { var rect = new RectangleF(origin.X + x * IconWidth, origin.Y + IconHeight * y, IconWidth, IconHeight); var drawPos = new float2(rect.Location); - WidgetUtils.DrawSHP(iconSprites[item.Name], drawPos, worldRenderer); + var icon = new Animation(RenderSimple.GetImage(item)); + icon.Play(item.Traits.Get().Icon); + WidgetUtils.DrawSHP(icon.Image, drawPos, worldRenderer); var firstOfThis = queue.AllQueued().FirstOrDefault(a => a.Item == item.Name); diff --git a/OpenRA.Mods.RA/Widgets/ObserverProductionIconsWidget.cs b/OpenRA.Mods.RA/Widgets/ObserverProductionIconsWidget.cs index ae598f6916..2b8bde5610 100644 --- a/OpenRA.Mods.RA/Widgets/ObserverProductionIconsWidget.cs +++ b/OpenRA.Mods.RA/Widgets/ObserverProductionIconsWidget.cs @@ -13,6 +13,7 @@ using System.Collections.Generic; using System.Drawing; using System.Linq; using OpenRA.Graphics; +using OpenRA.Traits; using OpenRA.Widgets; namespace OpenRA.Mods.RA.Widgets @@ -20,7 +21,6 @@ namespace OpenRA.Mods.RA.Widgets public class ObserverProductionIconsWidget : Widget { public Func GetPlayer; - Dictionary iconSprites; World world; WorldRenderer worldRenderer; Dictionary clocks; @@ -29,10 +29,6 @@ namespace OpenRA.Mods.RA.Widgets public ObserverProductionIconsWidget(World world, WorldRenderer worldRenderer) : base() { - iconSprites = Rules.Info.Values.Where(u => u.Traits.Contains() && u.Name[0] != '^') - .ToDictionary( - u => u.Name, - u => Game.modData.SpriteLoader.LoadAllSprites(u.Traits.Get().Icon ?? (u.Name + "icon"))[0]); this.world = world; this.worldRenderer = worldRenderer; clocks = new Dictionary(); @@ -42,7 +38,6 @@ namespace OpenRA.Mods.RA.Widgets : base(other) { GetPlayer = other.GetPlayer; - iconSprites = other.iconSprites; world = other.world; worldRenderer = other.worldRenderer; clocks = other.clocks; @@ -67,25 +62,27 @@ namespace OpenRA.Mods.RA.Widgets } foreach (var queue in queues) { - var item = queue.Trait.CurrentItem(); + var item = queue.Trait.AllItems().FirstOrDefault(); if (item == null) - { continue; - } - var sprite = iconSprites[item.Item]; - var size = sprite.size / new float2(2, 2); + var icon = new Animation(RenderSimple.GetImage(item)); + icon.Play(item.Traits.Get().Icon); + var size = icon.Image.size / new float2(2, 2); var location = new float2(RenderBounds.Location) + new float2(queue.i * (int)size.Length, 0); - WidgetUtils.DrawSHP(sprite, location, worldRenderer, size); + WidgetUtils.DrawSHP(icon.Image, location, worldRenderer, size); + var current = queue.Trait.CurrentItem(); + if (current == null) + continue; var clock = clocks[queue.Trait]; clock.PlayFetchIndex("idle", - () => item.TotalTime == 0 ? 0 : ((item.TotalTime - item.RemainingTime) - * (clock.CurrentSequence.Length - 1) / item.TotalTime)); + () => current.TotalTime == 0 ? 0 : ((current.TotalTime - current.RemainingTime) + * (clock.CurrentSequence.Length - 1) / current.TotalTime)); clock.Tick(); WidgetUtils.DrawSHP(clock.Image, location, worldRenderer, size); var tiny = Game.Renderer.Fonts["Tiny"]; - var text = GetOverlayForItem(item); + var text = GetOverlayForItem(current); tiny.DrawTextWithContrast(text, location + new float2(16, 16) - new float2(tiny.Measure(text).X / 2, 0), Color.White, Color.Black, 1); diff --git a/mods/cnc/rules/aircraft.yaml b/mods/cnc/rules/aircraft.yaml index 49fd8db64c..1608909af2 100644 --- a/mods/cnc/rules/aircraft.yaml +++ b/mods/cnc/rules/aircraft.yaml @@ -4,7 +4,6 @@ TRAN: Cost: 750 Tooltip: Name: Chinook Transport - Icon:tranicnh Description: Fast Infantry Transport Helicopter.\n Unarmed Buildable: BuildPaletteOrder: 10 @@ -47,7 +46,6 @@ HELI: Cost: 1200 Tooltip: Name: Apache Longbow - Icon: heliicnh Description: Helicopter Gunship with Chainguns.\n Strong vs Infantry, Light Vehicles\n Weak vs Tanks Buildable: BuildPaletteOrder: 20 @@ -100,7 +98,6 @@ ORCA: Cost: 1200 Tooltip: Name: Orca - Icon: orcaicnh Description: Helicopter Gunship with AG Missiles.\n Strong vs Buildings, Tanks\n Weak vs Infantry Buildable: BuildPaletteOrder: 20 @@ -148,7 +145,6 @@ C17: Tooltip: Name: Supply Aircraft Description: Drops vehicle reinforcements on Airstrips - Icon: c17icnh Valued: Cost: 2000 Plane: @@ -175,7 +171,6 @@ A10: Inherits: ^Plane Tooltip: Name: A10 Bomber - Icon: a10icnh Description: Used to deliver Napalm strikes. Valued: Cost: 2000 diff --git a/mods/cnc/rules/infantry.yaml b/mods/cnc/rules/infantry.yaml index 4750ba8706..de45d06684 100644 --- a/mods/cnc/rules/infantry.yaml +++ b/mods/cnc/rules/infantry.yaml @@ -5,7 +5,6 @@ E1: Tooltip: Name: Minigunner Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles - Icon: e1icnh Buildable: BuildPaletteOrder: 10 Owner: gdi, nod @@ -30,7 +29,6 @@ E2: Tooltip: Name: Grenadier Description: Infantry armed with grenades. \n Strong vs Buildings, Infantry\n Weak vs Vehicles - Icon: e2icnh Buildable: BuildPaletteOrder: 40 Prerequisites: anyhq @@ -62,7 +60,6 @@ E3: Tooltip: Name: Rocket Soldier Description: Anti-tank/Anti-aircraft infantry. \n Strong vs Tanks, Aircraft\n Weak vs Infantry - Icon: e3icnh Buildable: BuildPaletteOrder: 20 Owner: nod, gdi @@ -89,7 +86,6 @@ E4: Tooltip: Name: Flamethrower Description: Advanced Anti-infantry unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles - Icon: e4icnh Buildable: BuildPaletteOrder: 40 Owner: nod @@ -118,7 +114,6 @@ E5: Tooltip: Name: Chem Warrior Description: Advanced Anti-infantry unit.\n Strong vs Infantry\n Weak vs Vehicles - Icon: e5icnh Buildable: BuildPaletteOrder: 50 Owner: nod @@ -153,7 +148,6 @@ E6: Tooltip: Name: Engineer Description: Infiltrates and captures enemy structures.\n Strong vs Nothing\n Weak vs Everything - Icon: e6icnh Buildable: BuildPaletteOrder: 30 Owner: gdi,nod @@ -181,7 +175,6 @@ RMBO: Valued: Cost: 1000 Tooltip: - Icon: rmboicnh Name: Commando Description: Elite sniper infantry unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles Buildable: @@ -224,7 +217,6 @@ PVICE: Owner: gdi, nod Tooltip: Description: Mutated abomination that spits liquid tiberium.\n Strong vs Infantry, Buildings\n Weak vs Aircraft - Icon: viceicnh DrawLineToTarget: SelectionDecorations: ActorLostNotification: @@ -234,7 +226,6 @@ STEG: Tooltip: Name: Stegosaurus Description: A large, heavily built, herbivorous quadruped - Icon: stegicnh Armament: Weapon: tail @@ -243,7 +234,6 @@ TREX: Tooltip: Name: Tyrannosaurus rex Description: Bipedal carnivore with a massive skull - Icon: trexicnh Armament: Weapon: teeth @@ -252,7 +242,6 @@ TRIC: Tooltip: Name: Triceratops Description: Quadruped with large bony frill and three horns - Icon: tricicnh Armament: Weapon: horn @@ -261,6 +250,5 @@ RAPT: Tooltip: Name: Velociraptor Description: Bipedal with enlarged sickle-shaped claw on each hindfoot - Icon: rapticnh Armament: Weapon: claw diff --git a/mods/cnc/rules/ships.yaml b/mods/cnc/rules/ships.yaml index 520c144d20..a4fc8c43c5 100644 --- a/mods/cnc/rules/ships.yaml +++ b/mods/cnc/rules/ships.yaml @@ -4,7 +4,6 @@ BOAT: Cost: 300 Tooltip: Name: Gunboat - Icon: boaticnh Health: HP: 700 Armor: diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml index c8c49ade2e..15884f469a 100644 --- a/mods/cnc/rules/structures.yaml +++ b/mods/cnc/rules/structures.yaml @@ -11,7 +11,6 @@ FACT: Tooltip: Name: Construction Yard Description: Builds structures - Icon: facticnh Building: Power: 15 Footprint: xxx xxx @@ -55,7 +54,6 @@ NUKE: Cost: 300 Tooltip: Name: Power Plant - Icon: nukeicnh Description: Generates power ProvidesCustomPrerequisite: Prerequisite: anypower @@ -79,7 +77,6 @@ NUK2: Cost: 500 Tooltip: Name: Advanced Power Plant - Icon:nuk2icnh Description: Provides more power, cheaper than the \nstandard Power Plant ProvidesCustomPrerequisite: Prerequisite: anypower @@ -103,7 +100,6 @@ PROC: Cost: 1500 Tooltip: Name: Tiberium Refinery - Icon: procicnh Description: Processes raw Tiberium\ninto useable resources Buildable: BuildPaletteOrder: 20 @@ -142,7 +138,6 @@ SILO: Cost: 300 Tooltip: Name: Tiberium Silo - Icon: siloicnh Description: Stores processed Tiberium Buildable: Queue: Defense @@ -174,7 +169,6 @@ PYLE: Cost: 300 Tooltip: Name: Barracks - Icon: pyleicnh Description: Trains infantry ProvidesCustomPrerequisite: Prerequisite: barracks @@ -213,7 +207,6 @@ HAND: Cost: 300 Tooltip: Name: Hand of Nod - Icon: handicnh Description: Trains infantry ProvidesCustomPrerequisite: Prerequisite: barracks @@ -249,7 +242,6 @@ AFLD: Cost: 2000 Tooltip: Name: Airstrip - Icon: afldicnh Description: Provides a dropzone\nfor vehicle reinforcements ProvidesCustomPrerequisite: Prerequisite: vehicleproduction @@ -287,7 +279,6 @@ WEAP: Cost: 2000 Tooltip: Name: Weapons Factory - Icon: weapicnh Description: Assembly point for\nvehicle reinforcements ProvidesCustomPrerequisite: Prerequisite: vehicleproduction @@ -326,7 +317,6 @@ HPAD: Cost: 1000 Tooltip: Name: Helipad - Icon:hpadicnh Description: Produces, rearms and\nrepairs helicopters Buildable: BuildPaletteOrder: 60 @@ -362,7 +352,6 @@ HQ: Cost: 1000 Tooltip: Name: Communications Center - Icon: hqicnh Description: Provides an overview of the battlefield.\n Requires power to operate. ProvidesCustomPrerequisite: Prerequisite: anyhq @@ -399,7 +388,6 @@ FIX: Cost: 500 Tooltip: Name: Repair Facility - Icon: fixicnh Description: Repairs vehicles Buildable: BuildPaletteOrder: 80 @@ -425,7 +413,6 @@ EYE: Cost: 1800 Tooltip: Name: Advanced Communications Center - Icon: eyeicnh Description: Provides access to the Ion Cannon.\n Requires power to operate. ProvidesCustomPrerequisite: Prerequisite: anyhq @@ -465,7 +452,6 @@ TMPL: Cost: 2000 Tooltip: Name: Temple of Nod - Icon: tmplicnh Description: Place of worship and secret missile silo.\n Requires power to operate. ProvidesCustomPrerequisite: Prerequisite: anyhq @@ -500,7 +486,6 @@ GUN: Cost: 600 Tooltip: Name: Turret - Icon: gunicnh Description: Anti-Armor base defense.\n Strong vs Tanks\n Weak vs Infantry, Aircraft Buildable: Queue: Defense @@ -538,7 +523,6 @@ SAM: Cost: 750 Tooltip: Name: SAM Site - Icon: samicnh Description: Anti-Air base defense.\n Strong vs Aircraft\n Weak vs Infantry, Tanks Buildable: Queue: Defense @@ -575,7 +559,6 @@ OBLI: Cost: 1500 Tooltip: Name: Obelisk of Light - Icon:obliicnh Description: Advanced base defense.\n Requires power to operate.\n Strong vs Tanks, Infantry\n Weak vs Aircraft Buildable: Queue: Defense @@ -616,7 +599,6 @@ GTWR: Cost: 500 Tooltip: Name: Guard Tower - Icon: gtwricnh Description: Basic defensive structure.\n Strong vs Infantry\n Weak vs Tanks, Aircraft Buildable: Queue: Defense @@ -652,7 +634,6 @@ ATWR: Cost: 1000 Tooltip: Name: Advanced Guard Tower - Icon: atwricnh Description: Anti-armor defensive structure.\n Strong vs Light Vehicles, Tanks\n Weak vs Infantry Buildable: Queue: Defense @@ -694,7 +675,6 @@ SBAG: Value: 0 Tooltip: Name: Sandbag Barrier - Icon:sbagicnh Description: Stops infantry and blocks enemy fire.\nCan be crushed by tanks. Buildable: Queue: Defense @@ -714,7 +694,6 @@ CYCL: Value: 0 Tooltip: Name: Chain Link Barrier - Icon:cyclicnh Description: Stops infantry and blocks enemy fire.\nCan be crushed by tanks. Buildable: Queue: Defense @@ -734,7 +713,6 @@ BRIK: Value: 0 Tooltip: Name: Concrete Barrier - Icon:brikicnh Description: Stop units and blocks enemy fire. Buildable: Queue: Defense diff --git a/mods/cnc/rules/tech.yaml b/mods/cnc/rules/tech.yaml index 174de04d59..2bbc406fc2 100644 --- a/mods/cnc/rules/tech.yaml +++ b/mods/cnc/rules/tech.yaml @@ -85,7 +85,6 @@ MISS: Dimensions: 3,2 Tooltip: Name: Tech Center - Icon: missicnh Buildable: Queue: Building BuildPaletteOrder: 1000 diff --git a/mods/cnc/rules/vehicles.yaml b/mods/cnc/rules/vehicles.yaml index fa5a5f5b0e..b0c4050320 100644 --- a/mods/cnc/rules/vehicles.yaml +++ b/mods/cnc/rules/vehicles.yaml @@ -4,7 +4,6 @@ MCV: Cost: 2000 Tooltip: Name: Mobile Construction Vehicle - Icon: mcvicnh Description: Deploys into another Construction Yard.\n Unarmed Buildable: BuildPaletteOrder: 100 @@ -45,7 +44,6 @@ HARV: Cost: 1200 Tooltip: Name: Harvester - Icon: harvicnh Description: Collects Tiberium for processing.\n Unarmed Buildable: BuildPaletteOrder: 10 @@ -83,7 +81,6 @@ APC: Cost: 600 Tooltip: Name: APC - Icon: apcicnh Description: Armored infantry transport and mobile AA\n Strong vs Aircraft, Vehicles\n Weak vs Infantry Buildable: BuildPaletteOrder: 30 @@ -132,7 +129,6 @@ ARTY: Cost: 600 Tooltip: Name: Artillery - Icon:artyicnh Description: Long-range artillery.\n Strong vs Infantry, Vehicles\n Weak vs Tanks, Aircraft Buildable: BuildPaletteOrder: 60 @@ -167,7 +163,6 @@ FTNK: Cost: 800 Tooltip: Name: Flame Tank - Icon: ftnkicnh Description: Heavily armored flame-throwing vehicle.\n Strong vs Infantry, Buildings, Vehicles\n Weak vs Aircraft Buildable: BuildPaletteOrder: 50 @@ -201,7 +196,6 @@ BGGY: Cost: 300 Tooltip: Name: Nod Buggy - Icon: bggyicnh Description: Fast scout & anti-infantry vehicle.\n Strong vs Infantry, Vehicles\n Weak vs Tanks, Aircraft Buildable: BuildPaletteOrder: 20 @@ -236,7 +230,6 @@ BIKE: Cost: 500 Tooltip: Name: Recon Bike - Icon: bikeicnh Description: Fast scout vehicle, armed with \nrockets.\n Strong vs Vehicles, Aircraft\n Weak vs Infantry Buildable: BuildPaletteOrder: 30 @@ -274,7 +267,6 @@ JEEP: Cost: 400 Tooltip: Name: Hum-Vee - Icon: jeepicnh Description: Fast scout & anti-infantry vehicle.\n Strong vs Infantry, Vehicles\n Weak vs Tanks, Aircraft Buildable: BuildPaletteOrder: 20 @@ -309,7 +301,6 @@ LTNK: Cost: 600 Tooltip: Name: Light Tank - Icon: ltnkicnh Description: Fast, light tank.\n Strong vs Vehicles, Tanks\n Weak vs Infantry, Aircraft Buildable: BuildPaletteOrder: 40 @@ -348,7 +339,6 @@ MTNK: Cost: 800 Tooltip: Name: Med. Tank - Icon: mtnkicnh Description: General-Purpose GDI Tank.\n Strong vs Tanks, Vehicles\n Weak vs Infantry, Aircraft Buildable: BuildPaletteOrder: 40 @@ -388,7 +378,6 @@ HTNK: Cost: 1500 Tooltip: Name: Mammoth Tank - Icon: htnkicnh Description: Heavily armored GDI Tank.\n Strong vs Everything Buildable: BuildPaletteOrder: 60 @@ -440,7 +429,6 @@ MSAM: Cost: 1200 Tooltip: Name: MLRS - Icon: msamicnh Description: Long range rocket artillery.\n Strong vs all ground units. Buildable: BuildPaletteOrder: 50 @@ -475,7 +463,6 @@ MLRS: Cost: 600 Tooltip: Name: Mobile S.A.M. - Icon: mlrsicnh Description: Powerful anti-air unit.\nCannot attack ground units. Buildable: BuildPaletteOrder: 70 @@ -516,7 +503,6 @@ STNK: Cost: 900 Tooltip: Name: Stealth Tank - Icon: stnkicnh Description: Long-range missile tank that can cloak.\nHas weak armor. Can be spotted by infantry.\n Strong vs Vehicles, Tanks, Aircraft\n Weak vs Infantry. Buildable: BuildPaletteOrder: 90 @@ -554,7 +540,6 @@ MHQ: Cost: 1000 Tooltip: Name: Mobile HQ - Icon: mhqicnh Description: Base of operations Health: HP: 200 diff --git a/mods/cnc/sequences/aircraft.yaml b/mods/cnc/sequences/aircraft.yaml index 369ff97360..ce1e5e54a0 100644 --- a/mods/cnc/sequences/aircraft.yaml +++ b/mods/cnc/sequences/aircraft.yaml @@ -2,6 +2,8 @@ c17: idle: Start: 0 Facings: 32 + icon: c17iconh + Start: 0 tran: idle: @@ -24,6 +26,8 @@ tran: Length: 4 unload: Start: 35 + icon: tranicnh + Start: 0 heli: idle: @@ -39,6 +43,9 @@ heli: Start: 0 Length: 6 Facings: 8 + icon: heliicnh + Start: 0 + orca: idle: Start: 0 @@ -46,8 +53,12 @@ orca: damaged-idle: Start: 32 Facings: 32 + icon: orcaicnh + Start: 0 a10: idle: Start: 0 - Facings: 32 \ No newline at end of file + Facings: 32 + icon: a10icnh + Start: 0 \ No newline at end of file diff --git a/mods/cnc/sequences/campaign.yaml b/mods/cnc/sequences/campaign.yaml index 9053b858f7..075db1aeaf 100644 --- a/mods/cnc/sequences/campaign.yaml +++ b/mods/cnc/sequences/campaign.yaml @@ -34,4 +34,6 @@ boat: wake-right: wake Start: 0 Length: 6 - Offset: -1,2 \ No newline at end of file + Offset: -1,2 + icon: boaticnh + Start: 0 \ No newline at end of file diff --git a/mods/cnc/sequences/funpark.yaml b/mods/cnc/sequences/funpark.yaml index e873e99f79..a2e280c35d 100644 --- a/mods/cnc/sequences/funpark.yaml +++ b/mods/cnc/sequences/funpark.yaml @@ -31,6 +31,8 @@ steg: die6: Start: 176 Length: 22 + icon: stegicnh + Start: 0 trex: stand: @@ -65,6 +67,8 @@ trex: die6: Start: 144 Length: 40 + icon: trexicnh + Start: 0 tric: stand: @@ -99,6 +103,8 @@ tric: die6: Start: 176 Length: 20 + icon: tricicnh + Start: 0 rapt: stand: @@ -132,4 +138,6 @@ rapt: Length: 40 die6: Start: 144 - Length: 40 \ No newline at end of file + Length: 40 + icon: rapticnh + Start: 0 \ No newline at end of file diff --git a/mods/cnc/sequences/infantry.yaml b/mods/cnc/sequences/infantry.yaml index 9291ea3664..105fe23b19 100644 --- a/mods/cnc/sequences/infantry.yaml +++ b/mods/cnc/sequences/infantry.yaml @@ -6,6 +6,9 @@ vice: Start: 0 Length: 13 Facings: 8 + icon: viceicnh + Start: 0 + pvice: idle: Start: 0 @@ -14,6 +17,9 @@ pvice: Start: 0 Length: 13 Facings: 8 + icon: viceicnh + Start: 0 + e1: stand: Start: 0 @@ -109,6 +115,8 @@ e1: Start: 16 Length: 4 Tick: 1600 + icon: e1icnh + Start: 0 e2: stand: @@ -196,6 +204,8 @@ e2: Start: 16 Length: 4 Tick: 1600 + icon: e2icnh + Start: 0 e3: stand: @@ -283,6 +293,8 @@ e3: Start: 16 Length: 4 Tick: 1600 + icon: e3icnh + Start: 0 e4: stand: @@ -374,6 +386,9 @@ e4: Start: 0 Length: 13 Facings: 8 + icon: e4icnh + Start: 0 + e5: stand: Start: 0 @@ -464,6 +479,9 @@ e5: Start: 0 Length: 13 Facings: 8 + icon: e5icnh + Start: 0 + e6: stand: Start: 0 @@ -542,6 +560,9 @@ e6: Start: 16 Length: 4 Tick: 1600 + icon: e6icnh + Start: 0 + rmbo: stand: Start: 0 @@ -632,3 +653,5 @@ rmbo: Start: 16 Length: 4 Tick: 1600 + icon: rmboicnh + Start: 0 \ No newline at end of file diff --git a/mods/cnc/sequences/map.yaml b/mods/cnc/sequences/map.yaml index e6a6f3419c..94cc0a1d8c 100644 --- a/mods/cnc/sequences/map.yaml +++ b/mods/cnc/sequences/map.yaml @@ -734,6 +734,8 @@ miss: Start: 0 Length: * Tick: 80 + icon: missicnh + Start: 0 miss.husk: idle: miss diff --git a/mods/cnc/sequences/structures.yaml b/mods/cnc/sequences/structures.yaml index eb8fa9b1bf..0fa5404bac 100644 --- a/mods/cnc/sequences/structures.yaml +++ b/mods/cnc/sequences/structures.yaml @@ -24,6 +24,8 @@ fact: bib: bib2 Start: 0 Length: * + icon: facticnh + Start: 0 nuke: idle: @@ -44,6 +46,8 @@ nuke: bib: bib3 Start: 0 Length: * + icon: nukeicnh + Start: 0 proc: idle: @@ -71,6 +75,8 @@ proc: bib: bib2 Start: 0 Length: * + icon: procicnh + Start: 0 silo: idle: @@ -88,6 +94,8 @@ silo: bib: bib3 Start: 0 Length: * + icon: siloicnh + Start: 0 hand: idle: @@ -103,6 +111,8 @@ hand: bib: bib3 Start: 0 Length: * + icon: handicnh + Start: 0 pyle: idle: @@ -123,6 +133,8 @@ pyle: bib: bib3 Start: 0 Length: * + icon: pyleicnh + Start: 0 weap: idle: @@ -148,6 +160,8 @@ weap: bib: bib2 Start: 0 Length: * + icon: weapicnh + Start: 0 afld: idle: @@ -178,6 +192,8 @@ afld: bib: bib1 Start: 0 Length: * + icon: afldicnh + Start: 0 hq: idle: @@ -197,6 +213,8 @@ hq: bib: bib3 Start: 0 Length: * + icon: hqicnh + Start: 0 nuk2: idle: @@ -216,6 +234,8 @@ nuk2: bib: bib3 Start: 0 Length: * + icon: nuk2icnh + Start: 0 hpad: idle: @@ -241,6 +261,8 @@ hpad: Start: 0 Length: * Tick: 80 + icon: hpadicnh + Start: 0 fix: idle: @@ -263,6 +285,8 @@ fix: Start: 0 Length: 14 Tick: 60 + icon: fixicnh + Start: 0 eye: idle: @@ -282,6 +306,8 @@ eye: bib: bib3 Start: 0 Length: * + icon: eyeicnh + Start: 0 tmpl: idle: @@ -303,6 +329,8 @@ tmpl: bib: bib2 Start: 0 Length: * + icon: tmplicnh + Start: 0 obli: idle: @@ -321,6 +349,8 @@ obli: Start: 0 Length: 13 Tick: 80 + icon: obliicnh + Start: 0 brik: idle: @@ -335,6 +365,8 @@ brik: critical-idle: Start: 48 Length: 16 + icon: brikicnh + Start: 0 sbag: idle: @@ -343,6 +375,8 @@ sbag: damaged-idle: Start: 16 Length: 16 + icon: sbagicnh + Start: 0 cycl: idle: @@ -354,6 +388,8 @@ cycl: critical-idle: Start: 32 Length: 16 + icon: cyclicnh + Start: 0 barb: idle: @@ -391,6 +427,8 @@ gun: muzzle: gunfire2 Start: 0 Length: * + icon: gunicnh + Start: 0 sam: closed-idle: @@ -429,6 +467,9 @@ sam: Start: 0 Length: 18 Facings: 8 + icon: samicnh + Start: 0 + gtwr: idle: Start: 0 @@ -444,6 +485,8 @@ gtwr: Start: 0 Length: 6 Facings: 8 + icon: gtwricnh + Start: 0 atwr: idle: @@ -459,4 +502,5 @@ atwr: muzzle: gunfire2 Start: 0 Length: * - + icon: atwricnh + Start: 0 \ No newline at end of file diff --git a/mods/cnc/sequences/vehicles.yaml b/mods/cnc/sequences/vehicles.yaml index 03943a467b..0a738cf4bc 100644 --- a/mods/cnc/sequences/vehicles.yaml +++ b/mods/cnc/sequences/vehicles.yaml @@ -2,6 +2,8 @@ mcv: idle: Start: 0 Facings: 32 + icon: mcvicnh + Start: 0 harv: idle: @@ -18,6 +20,8 @@ harv: dock-loop: harvdump Start: 7 Length: 1 + icon: harvicnh + Start: 0 bggy: idle: @@ -30,6 +34,8 @@ bggy: Start: 0 Length: 6 Facings: 8 + icon: bggyicnh + Start: 0 mtnk: idle: @@ -41,6 +47,8 @@ mtnk: muzzle: gunfire2 Start: 0 Length: * + icon: mtnkicnh + Start: 0 ltnk: idle: @@ -52,6 +60,8 @@ ltnk: muzzle: gunfire2 Start: 0 Length: * + icon: ltnkicnh + Start: 0 htnk: idle: @@ -63,6 +73,8 @@ htnk: muzzle: gunfire2 Start: 0 Length: * + icon: htnkicnh + Start: 0 jeep: idle: @@ -75,11 +87,15 @@ jeep: Start: 0 Length: 6 Facings: 8 + icon: jeepicnh + Start: 0 bike: idle: Start: 0 Facings: 32 + icon: bikeicnh + Start: 0 ftnk: idle: @@ -89,6 +105,8 @@ ftnk: Start: 0 Length: 13 Facings: 8 + icon: ftnkicnh + Start: 0 mhq: idle: @@ -97,6 +115,8 @@ mhq: spinner: Start: 32 Length: 32 + icon: mhqicnh + Start: 0 msam: idle: @@ -111,6 +131,8 @@ msam: turret-3: Start: 64 Facings: 32 + icon: msamicnh + Start: 0 mlrs: idle: @@ -125,11 +147,15 @@ mlrs: turret-3: Start: 96 Facings: 32 + icon: mlrsicnh + Start: 0 stnk: idle: Start: 0 Facings: 32 + icon: stnkicnh + Start: 0 arty: idle: @@ -138,6 +164,8 @@ arty: muzzle: gunfire2 Start: 0 Length: * + icon: artyicnh + Start: 0 apc: idle: @@ -155,4 +183,6 @@ apc: Start: 32 Length: 3 unload: - Start: 32 \ No newline at end of file + Start: 32 + icon: apcicnh + Start: 0 \ No newline at end of file diff --git a/mods/d2k/rules/aircraft.yaml b/mods/d2k/rules/aircraft.yaml index ff46bdb260..132e5ffb12 100644 --- a/mods/d2k/rules/aircraft.yaml +++ b/mods/d2k/rules/aircraft.yaml @@ -5,7 +5,6 @@ Tooltip: Name: Carryall Description: Fast drop ship.\n Unarmed - Icon: carryallicon Health: HP: 250 Armor: @@ -17,7 +16,7 @@ ROT: 4 Speed: 30 LandableTerrainTypes: Sand, Rock, Transition, Spice, Dune - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth LandAltitude: 800 RenderUnit: @@ -42,7 +41,7 @@ FRIGATE: Plane: ROT: 5 Speed: 50 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth Health: HP: 500 @@ -85,7 +84,7 @@ ORNI: InitialFacing: 20 ROT: 6 Speed: 40 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth RenderUnit: WithShadow: @@ -108,7 +107,7 @@ ORNI.bomber: Plane: ROT: 5 Speed: 50 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth LimitedAmmo: Ammo: 5 @@ -137,7 +136,7 @@ CARRYALL.infantry: Plane: ROT: 4 Speed: 40 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth RenderUnit: Image: carryall @@ -169,7 +168,7 @@ CARRYALL.Husk: Helicopter: ROT: 4 Speed: 30 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth RenderUnit: Image: carryall @@ -182,7 +181,7 @@ ORNI.Husk: Helicopter: ROT: 6 Speed: 40 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth RenderUnit: Image: orni @@ -195,7 +194,7 @@ ORNI.bomber.Husk: Plane: ROT: 5 Speed: 50 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth RenderUnit: Image: orni @@ -208,7 +207,7 @@ CARRYALL.infantry.Husk: Plane: ROT: 4 Speed: 40 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth RenderUnit: Image: carryall @@ -221,7 +220,7 @@ BADR.Husk: Plane: ROT: 4 Speed: 40 - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh RearmBuildings: starporta,starporto,starporth RenderUnit: Image: carryall diff --git a/mods/d2k/rules/atreides.yaml b/mods/d2k/rules/atreides.yaml index d62f871944..5f7a328a2b 100644 --- a/mods/d2k/rules/atreides.yaml +++ b/mods/d2k/rules/atreides.yaml @@ -22,6 +22,15 @@ BARRA: Buildable: Owner: atreides +REPAIRA: + Inherits: ^REPAIR + Buildable: + Owner: atreides + +RESEARCHA: + Inherits: ^RESEARCH + Buildable: + Owner: atreides HIGHTECHA: Inherits: ^HIGHTECH @@ -92,21 +101,6 @@ MCVA.starport: Valued: Cost: 2500 -TRIKEA: - Inherits: ^TRIKE - Buildable: - Owner: atreides, harkonnen - RenderUnit: - Image: TRIKE - -TRIKEA.starport: - Inherits: TRIKEA - Buildable: - Owner: atreides, harkonnen, ordos - Queue: Starport - Valued: - Cost: 315 - CARRYALLA: Inherits: ^CARRYALL RenderUnit: @@ -119,8 +113,6 @@ CARRYALLA.starport: COMBATA: Inherits: ^COMBAT - Tooltip: - Icon: combataicon Buildable: Owner: atreides RevealsShroud: @@ -141,8 +133,6 @@ COMBATA: COMBATA.Husk: Inherits: ^COMBAT.Husk - Tooltip: - Icon: combataicon RenderUnit: Image: COMBATA @@ -166,7 +156,6 @@ SONICTANK: Tooltip: Name: Sonic Tank Description: Fires sonic shocks\n Strong vs Infantry, Vehicles\n Weak vs Artillery, Aircraft - Icon: sonictankicon Selectable: Bounds: 30,30 Health: @@ -193,8 +182,6 @@ SONICTANK: SONICTANK.Husk: Inherits: ^Husk - Tooltip: - Icon: sonictankicon RenderUnit: Image: SONICTANK diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 367d800a60..8e62a908b6 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -32,6 +32,7 @@ DebugMuzzlePositions: Guard: Guardable: + RenderUnit: BodyOrientation: UpdatesPlayerStatistics: @@ -65,10 +66,11 @@ Types:Tank GivesBounty: Repairable: - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh DebugMuzzlePositions: Guard: Guardable: + RenderUnit: BodyOrientation: UpdatesPlayerStatistics: diff --git a/mods/d2k/rules/harkonnen.yaml b/mods/d2k/rules/harkonnen.yaml index 0bc3b78092..f81561214c 100644 --- a/mods/d2k/rules/harkonnen.yaml +++ b/mods/d2k/rules/harkonnen.yaml @@ -23,6 +23,16 @@ BARRH: Owner: harkonnen -RepairsUnits: +REPAIRH: + Inherits: ^REPAIR + Buildable: + Owner: harkonnen + +RESEARCHH: + Inherits: ^RESEARCH + Buildable: + Owner: harkonnen + SILOH: Inherits: ^SILO Buildable: @@ -97,38 +107,6 @@ MCVH.starport: Valued: Cost: 2500 -#TRIKEH: -# Inherits: ^TRIKE -# Buildable: -# Owner: harkonnen -# Valued: -# Cost: 250 -# Tooltip: -# Name: Scout Quad -# Description: Heavy Scout\n Strong vs Infantry -# Icon: quadicon -# Health: -# HP: 125 -# Mobile: -# ROT: 9 -# Speed: 11 -# Armament: -# Weapon: M60mg -# LocalOffset: 43,0,128 -# AttackFrontal: -# RenderUnit: -# Image: QUAD - -#TRIKEH.starport: -# Inherits: ^TRIKE -# Buildable: -# Owner: harkonnen -# Queue: Starport -# Valued: -# Cost: 149 -# RenderUnit: -# Image: TRIKE - CARRYALLH: Inherits: ^CARRYALL RenderUnit: @@ -139,16 +117,8 @@ CARRYALLH.starport: Valued: Cost: 1500 -QUADH: - Inherits: QUAD - Buildable: - -Prerequisites: - Owner: harkonnen - COMBATH: Inherits: ^COMBAT - Tooltip: - Icon: combathicon Buildable: Owner: harkonnen Mobile: @@ -166,8 +136,6 @@ COMBATH: COMBATH.Husk: Inherits: ^COMBAT.Husk - Tooltip: - Icon: combathicon RenderUnit: Image: COMBATH @@ -183,7 +151,7 @@ DEVAST: Buildable: Queue: Armor BuildPaletteOrder: 100 - Prerequisites: Ix + Prerequisites: Research Owner: harkonnen Hotkey: d Valued: @@ -191,7 +159,6 @@ DEVAST: Tooltip: Name: Devastator Description: Super Heavy Tank\n Strong vs Tanks\n Weak vs Artillery, Aircraft - Icon: devasticon Health: HP: 650 Armor: @@ -220,8 +187,6 @@ DEVAST.Husk: Inherits: ^Husk Health: HP: 125 - Tooltip: - Icon: devasticon RenderUnit: Image: DEVAST diff --git a/mods/d2k/rules/infantry.yaml b/mods/d2k/rules/infantry.yaml index 0ace1ddb48..3d357dd673 100644 --- a/mods/d2k/rules/infantry.yaml +++ b/mods/d2k/rules/infantry.yaml @@ -91,7 +91,6 @@ MEDIC: Tooltip: Name: Medic Description: Heals nearby infantry\n Strong vs Nothing\n Weak vs Everything - Icon: thumpericon Selectable: Bounds: 12,17,0,0 Voice: EngineerVoice @@ -108,59 +107,4 @@ MEDIC: PipType: Blue -AutoTarget: AttackMove: - JustMove: true - RenderInfantry: - Image: THUMPER - - -#THUMPER: -# Inherits: ^Infantry -# Buildable: -# Queue: Infantry -# BuildPaletteOrder: 50 -# Owner: atreides,harkonnen,ordos -# Valued: -# Cost: 400 -# Tooltip: -# Name: Thumper -# Description: Attracts sandsworm through vibrations\n Strong vs Nothing\n Weak vs Everything -# Selectable: -# Bounds: 12,17,0,0 -# Health: -# HP: 25 -# Mobile: -# Speed: 4 -# Passenger: -# -AutoTarget: -# AttackMove: -# JustMove: true -# Transforms: -# IntoActor: thumping -# Offset:1,1 -# Facing: 1 -# -#THUMPING: -# Inherits: ^Building -# Building: -# Power: 0 -# Footprint: x -# Dimensions: 1,1 -# TerrainTypes: Sand, Dune -# Health: -# HP: 25 -# Armor: -# Type: None -# RevealsShroud: -# Range: 5 -# Valued: -# Cost: 400 -# Tooltip: -# Name: Thumper -# -Capturable: -# -CapturableBar: -# -Sellable: -# -GivesBuildableArea: -# FreeActor: -# Actor: SANDWORM -# SpawnOffset: 1,2 -# Facing: 1 + JustMove: true \ No newline at end of file diff --git a/mods/d2k/rules/ordos.yaml b/mods/d2k/rules/ordos.yaml index f3c40c0a16..2afd63f80e 100644 --- a/mods/d2k/rules/ordos.yaml +++ b/mods/d2k/rules/ordos.yaml @@ -22,6 +22,16 @@ BARRO: Buildable: Owner: ordos +REPAIRO: + Inherits: ^REPAIR + Buildable: + Owner: ordos + +RESEARCHO: + Inherits: ^RESEARCH + Buildable: + Owner: ordos + SILOO: Inherits: ^SILO Buildable: @@ -93,8 +103,6 @@ MCVO.starport: COMBATO: Inherits: ^COMBAT - Tooltip: - Icon: combatoicon Buildable: Owner: ordos RevealsShroud: @@ -113,8 +121,6 @@ COMBATO: COMBATO.Husk: Inherits: ^COMBAT.Husk - Tooltip: - Icon: combatoicon RenderUnit: Image: COMBATO @@ -125,31 +131,44 @@ COMBATO.starport: Valued: Cost: 875 -TRIKEO: - Inherits: ^TRIKE +RAIDER: + Inherits: ^Vehicle Buildable: + Queue: Vehicle + BuildPaletteOrder: 10 + Hotkey: w Owner: ordos Valued: Cost: 300 Tooltip: Name: Raider Trike Description: Improved Scout\n Strong vs Infantry, Light Vehicles - Icon: raidericon + Selectable: + Bounds: 24,24 Health: HP: 110 + Armor: + Type: Light Mobile: ROT: 10 Speed: 14 + RevealsShroud: + Range: 7 RenderUnit: - Image: RAIDER + WithMuzzleFlash: Armament: Weapon: HMGo LocalOffset: 256,0,128 AttackFrontal: + AutoTarget: + Explodes: + Weapon: UnitExplodeTiny + EmptyWeapon: UnitExplodeTiny -STEALTHTRIKE: - Inherits: ^TRIKE +STEALTHRAIDER: + Inherits: ^Vehicle Buildable: + Queue: Vehicle Prerequisites: Hitech Owner: ordos BuildPaletteOrder: 30 @@ -158,18 +177,26 @@ STEALTHTRIKE: Tooltip: Name: Stealth Raider Trike Description: Invisible Raider Trike\n Strong vs Infantry, Light Vehicles - Icon: raidersicon + Selectable: + Bounds: 24,24 Health: HP: 110 + Armor: + Type: Light Mobile: ROT: 10 Speed: 14 + RevealsShroud: + Range: 7 RenderUnit: - Image: RAIDER + WithMuzzleFlash: Armament: Weapon: HMGo LocalOffset: 256,0,128 AttackFrontal: + Explodes: + Weapon: UnitExplodeTiny + EmptyWeapon: UnitExplodeTiny Cloak: InitialDelay: 45 CloakDelay: 90 @@ -178,16 +205,6 @@ STEALTHTRIKE: AutoTarget: InitialStance: HoldFire -#TRIKEO.starport: -# Inherits: ^TRIKE -# Buildable: -# Queue: Starport -# Owner: ordos -# RenderUnit: -# Image: TRIKE -# Valued: -# Cost: 149 - CARRYALLO: Inherits: ^CARRYALL RenderUnit: @@ -205,7 +222,6 @@ DEVIATORTANK: Tooltip: Name: Deviator Description: Causes no actual damage\nFires a warhead which changes allegiances\n but does not effect buildings or tanks - Icon: deviatortankicon Buildable: Queue: Armor BuildPaletteOrder: 50 @@ -238,8 +254,6 @@ DEVIATORTANK: DEVIATORTANK.Husk: Inherits: ^Husk - Tooltip: - Icon: deviatortankicon RenderUnit: Image: DEVIATORTANK diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index ecc9d08a54..16cda12cd0 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -330,12 +330,15 @@ Prerequisite: Starport WALL: + Inherits: ^WALL + Buildable: + Owner: + +^WALL: Buildable: Queue: Building Prerequisites: Barracks - Owner: atreides, harkonnen, ordos BuildPaletteOrder: 60 - #Hotkey: g SoundOnDamageTransition: DamagedSound: DestroyedSound: EXPLSML4.WAV @@ -346,7 +349,6 @@ WALL: Tooltip: Name: Concrete Wall Description: Stop units and blocks enemy fire. - Icon: wallaicon AppearsOnRadar: Building: BuildSounds: CHUNG.WAV @@ -361,15 +363,14 @@ WALL: CrushClasses: Concretewall LineBuild: Range: 8 - #SelectionDecorations: - #Selectable: - # Priority: 1 +# SelectionDecorations: +# Selectable: +# Priority: 1 TargetableBuilding: TargetTypes: Ground, C4 RenderBuildingWall: HasMakeAnimation: false Image: walla - #GivesExperience: EditorAppearance: RelativeToTopLeft: yes AutoTargetIgnore: @@ -379,12 +380,11 @@ WALL: Guardable: BodyOrientation: -GUNTOWER: +^GUNTOWER: Inherits: ^Building Buildable: Queue: Building Prerequisites: Barracks - Owner: atreides, harkonnen, ordos BuildPaletteOrder: 90 Hotkey: g Valued: @@ -392,7 +392,6 @@ GUNTOWER: Tooltip: Name: Gun Tower Description: Defensive structure\n Strong vs Tanks\n Weak vs Infantry, Aircraft - Icon: guntoweraicon Building: Power: -20 Adjacent: 4 @@ -421,26 +420,15 @@ GUNTOWER: LocalOffset: 469,0,299 AttackTurreted: AutoTarget: - LeavesHusk: - HuskActor: Guntower.Husk RenderDetectionCircle: DetectCloaked: Range: 5 -GUNTOWER.Husk: - Inherits: ^TowerHusk - Tooltip: - Name: Destroyed Tower - Icon: guntoweraicon - RenderUnit: - Image: guntowera - -ROCKETTOWER: +^ROCKETTOWER: Inherits: ^Building Buildable: Queue: Building Prerequisites: Outpost - Owner: atreides, harkonnen, ordos BuildPaletteOrder: 120 Hotkey: m Valued: @@ -448,7 +436,6 @@ ROCKETTOWER: Tooltip: Name: Rocket Tower Description: Defensive structure\n Strong vs Infantry, Aircraft\n Weak vs Tanks\n\n Requires power to operate - Icon: rockettoweraicon Building: Power: -30 Adjacent: 4 @@ -467,7 +454,6 @@ ROCKETTOWER: RenderRangeCircle: RenderBuilding: HasMakeAnimation: false - Image: rockettowera WithTurret: Armament: Weapon: TowerMissile @@ -479,26 +465,15 @@ ROCKETTOWER: AutoTarget: RequiresPower: CanPowerDown: - LeavesHusk: - HuskActor: Rockettower.Husk RenderDetectionCircle: DetectCloaked: Range: 6 -ROCKETTOWER.Husk: - Inherits: ^TowerHusk - Tooltip: - Name: Destroyed Tower - Icon: rockettoweraicon - RenderUnit: - Image: rockettowera - -REPAIR: +^REPAIR: Inherits: ^Building Buildable: Queue: Building Prerequisites: Heavy - Owner: atreides, harkonnen, ordos BuildPaletteOrder: 130 Hotkey: e Valued: @@ -506,7 +481,6 @@ REPAIR: Tooltip: Name: Repair Pad Description: Repairs vehicles\n Allows construction of MCVs - Icon: repairaicon Building: Power: -10 Footprint: =x= =x= === @@ -523,8 +497,8 @@ REPAIR: ValuePercentage: 50 RallyPoint: RallyPoint: 1,3 - RenderBuilding: - Image: repaira + ProvidesCustomPrerequisite: + Prerequisite: Repair ^HIGHTECH: Inherits: ^Building @@ -554,12 +528,11 @@ REPAIR: ProvidesCustomPrerequisite: Prerequisite: Hitech -RESEARCH: +^RESEARCH: Inherits: ^Building Buildable: Queue: Building Prerequisites: Hitech - Owner: atreides, harkonnen, ordos BuildPaletteOrder: 140 Hotkey: v Selectable: @@ -569,7 +542,6 @@ RESEARCH: Tooltip: Name: IX Research Center Description: Unlocks experimental tanks\n Special Ability: Carryall Combat Drop - Icon: researchaicon ParatroopersPower: Image: carryallicon UnitType: carryall.infantry @@ -593,14 +565,12 @@ RESEARCH: RevealsShroud: Range: 4 ProvidesCustomPrerequisite: - Prerequisite: Ix - RenderBuilding: - Image: researcha + Prerequisite: Research ^PALACE: Inherits: ^Building Buildable: - Prerequisites: Ix + Prerequisites: Research Queue: Building BuildPaletteOrder: 150 Hotkey: p @@ -626,7 +596,7 @@ RESEARCH: DetectCloaked: Range: 4 ProvidesCustomPrerequisite: - Prerequisite: TPal + Prerequisite: Palace SIETCH: Inherits: ^Building @@ -689,6 +659,10 @@ HITECH: Tooltip: Name: High-Tech Facility -IX: +REPAIR: Tooltip: - Name: IX Research Center + Name: Repair Pad + +RESEARCH: + Tooltip: + Name: Ix Research Center diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index 076c3e9da2..04285a6fea 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -117,9 +117,7 @@ Player: fremen: 0.5% sardaukar: 1.5% harvester: 0.1% - trikea.starport: 5% - #trikeh.starport: 5% - #trikeo.starport: 5% + trike.starport: 5% quad.starport: 7.5% siegetank.starport: 5% missiletank.starport: 7.5% @@ -129,9 +127,7 @@ Player: sonictank: 10% devast: 10% deviatortank: 7.5% - trikea: 10% - #trikeh: 10% - trikeo: 10% + trike: 10% quad: 15% siegetank: 10% missiletank: 15% @@ -180,9 +176,7 @@ Player: fremen: 0.25% sardaukar: 1% harvester: 0.1% - trikea.starport: 7.5% - #trikeh.starport: 7.5% - #trikeo.starport: 7.5% + trike.starport: 7.5% quad.starport: 12.5% siegetank.starport: 5% missiletank.starport: 7.5% @@ -192,9 +186,8 @@ Player: sonictank: 10% devast: 10% deviatortank: 7.5% - trikea: 15% - #trikeh: 15% - trikeo: 15% + trike: 15% + raider: 15% quad: 25% siegetank: 10% missiletank: 15% @@ -241,9 +234,7 @@ Player: fremen: 1% sardaukar: 3% harvester: 0.1% - trikea.starport: 5% - #trikeh.starport: 5% - #trikeo.starport: 5% + trike.starport: 5% quad.starport: 7.5% siegetank.starport: 5% missiletank.starport: 7.5% @@ -253,9 +244,8 @@ Player: sonictank: 10% devast: 10% deviatortank: 7.5% - trikea: 10% - #trikeh: 10% - trikeo: 10% + trike: 10% + raider: 10% quad: 15% siegetank: 10% missiletank: 15% @@ -413,12 +403,12 @@ CRATE: Amount: 1500 SelectionShares: 25 UseCashTick: yes - GiveUnitCrateAction@TrikeA: + GiveUnitCrateAction@Trike: SelectionShares: 20 - Unit: trikea - GiveUnitCrateAction@TrikeO: + Unit: trike + GiveUnitCrateAction@Raider: SelectionShares: 15 - Unit: trikeo + Unit: raider GiveUnitCrateAction@Quad: SelectionShares: 40 Unit: quad @@ -437,9 +427,9 @@ CRATE: GiveUnitCrateAction@MissileTank: SelectionShares: 10 Unit: missiletank - GiveUnitCrateAction@StealthTrike: + GiveUnitCrateAction@StealthRaider: SelectionShares: 7 - Unit: stealthtrike + Unit: stealthraider GiveUnitCrateAction@Fremen: SelectionShares: 5 Unit: fremen diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml index 1386f7e212..b28089633b 100644 --- a/mods/d2k/rules/vehicles.yaml +++ b/mods/d2k/rules/vehicles.yaml @@ -10,7 +10,6 @@ Tooltip: Name: Mobile Construction Vehicle Description: Deploys into another Construction Yard\n Unarmed - Icon: mcvicon Selectable: Priority: 3 Bounds: 42,42 @@ -40,7 +39,6 @@ MCV.Husk: HP: 175 Tooltip: Name: Destroyed Mobile Construction Vehicle - Icon: missiletankicon RenderUnit: Image: DMCV @@ -57,7 +55,6 @@ HARVESTER: Tooltip: Name: Spice Harvester Description: Collects Spice for processing\n Unarmed - Icon: harvestericon Selectable: Priority: 7 Bounds: 42,42 @@ -96,7 +93,6 @@ HARVESTER.Husk: HP: 150 Tooltip: Name: Destroyed Spice Harvester - Icon: harvestericon RenderUnit: Image: HARVESTER @@ -108,18 +104,18 @@ HARVESTER.starport: Valued: Cost: 1500 -^TRIKE: +TRIKE: Inherits: ^Vehicle Buildable: Queue: Vehicle BuildPaletteOrder: 10 Hotkey: w + Owner: atreides, harkonnen Valued: Cost: 250 Tooltip: Name: Scout Trike Description: Fast Scout\n Strong vs Infantry - Icon: trikeicon Selectable: Bounds: 24,24 Health: @@ -141,18 +137,28 @@ HARVESTER.starport: Explodes: Weapon: UnitExplodeTiny EmptyWeapon: UnitExplodeTiny - #Cargo: - # Types: Infantry - # MaxWeight: 1 - # PipCount: 1 - # UnloadFacing: 220 +# Cargo: +# Types: Infantry +# MaxWeight: 1 +# PipCount: 1 +# UnloadFacing: 220 + +TRIKE.starport: + Inherits: TRIKE + Buildable: + Owner: atreides, harkonnen, ordos + Queue: Starport + Valued: + Cost: 315 + RenderUnit: + Image: TRIKE QUAD: Inherits: ^Vehicle Buildable: Queue: Vehicle Prerequisites: Light,Outpost - Owner: atreides, ordos + Owner: atreides, ordos, harkonnen BuildPaletteOrder: 20 Hotkey: q Valued: @@ -160,7 +166,6 @@ QUAD: Tooltip: Name: Missile Quad Description: Missile Scout\n Strong vs Vehicles\n Weak vs Infantry - Icon: quadicon Health: HP: 125 Armor: @@ -170,8 +175,6 @@ QUAD: Speed: 9 RevealsShroud: Range: 8 - RenderUnit: - Image: QUAD Armament: Weapon: QuadRockets LocalOffset: 128,0,85#-4 @@ -190,6 +193,8 @@ QUAD.starport: Queue: Starport Valued: Cost: 500 + RenderUnit: + Image: QUAD ^COMBAT: Inherits: ^Tank @@ -250,7 +255,6 @@ SIEGETANK: Tooltip: Name: Siege Tank Description: Siege Artillery\n Strong vs Infantry, Buildings\n Weak vs Tanks, Aircraft - Icon: siegetankicon Health: HP: 120 Armor: @@ -286,7 +290,6 @@ SIEGETANK: SIEGETANK.Husk: Inherits: ^Husk Tooltip: - Icon: siegetankicon ThrowsParticle@turret: Anim: turret RenderUnit: @@ -306,7 +309,6 @@ MISSILETANK: Tooltip: Name: Rocket Tank Description: Rocket Artillery\n Strong vs Vehicles, Buildings\n Weak vs Infantry, Aircraft - Icon: missiletankicon Buildable: Queue: Armor Prerequisites: Hitech @@ -341,8 +343,6 @@ MISSILETANK: MISSILETANK.Husk: Inherits: ^Husk - Tooltip: - Icon: missiletankicon RenderUnit: Image: MISSILETANK diff --git a/mods/d2k/sequences/infantry.yaml b/mods/d2k/sequences/infantry.yaml index a55ac588c8..7747737bbe 100644 --- a/mods/d2k/sequences/infantry.yaml +++ b/mods/d2k/sequences/infantry.yaml @@ -65,6 +65,9 @@ rifle: Start: 430 Length: 12 Tick: 1600 + icon: DATA.R8 + Start: 4011 + Offset: -30,-24 bazooka: stand: DATA.R8 @@ -133,6 +136,9 @@ bazooka: Start: 668 Length: 26 Tick: 1600 + icon: DATA.R8 + Start: 4012 + Offset: -30,-24 engineer: stand: DATA.R8 @@ -171,8 +177,11 @@ engineer: Start: 1376 Length: 26 Tick: 1600 + icon: DATA.R8 + Start: 4013 + Offset: -30,-24 -thumper: +medic: # actually thumper stand: DATA.R8 Start: 1402 Facings: -8 @@ -213,6 +222,9 @@ thumper: Start: 1577 Length: 26 Tick: 1600 + icon: DATA.R8 + Start: 4014 + Offset: -30,-24 thumping: idle: DATA.R8 @@ -226,6 +238,9 @@ thumping: Start: 1458 Length: 5 Tick: 150 + icon: DATA.R8 + Frames: 4014 + Offset: -30,-24 fremen: stand: DATA.R8 @@ -291,6 +306,9 @@ fremen: Start: 904 Length: 26 Tick: 1600 + icon: DATA.R8 + Start: 4032 + Offset: -30,-24 saboteur: stand: DATA.R8 @@ -350,6 +368,9 @@ saboteur: Start: 2359 Length: 26 Tick: 1600 + icon: DATA.R8 + Start: 4034 + Offset: -30,-24 sardaukar: stand: DATA.R8 @@ -415,3 +436,6 @@ sardaukar: Start: 1140 Length: 26 Tick: 1600 + icon: DATA.R8 + Start: 4015 + Offset: -30,-24 diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 63aac8da31..bfb8c8e5b1 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -15,6 +15,9 @@ walla: Frames: 2543, 2546, 2544, 2554, 2547, 2548, 2558, 2551, 2545, 2555, 2549, 2550, 2556, 2552, 2553, 2557 Length: 16 Offset: -16,16 + icon: DATA.R8 + Start: 4063 + Offset: -30,-24 wallh: idle: DATA.R8 @@ -33,6 +36,9 @@ wallh: Frames: 2703, 2706, 2704, 2714, 2707, 2708, 2718, 2711, 2705, 2715, 2709, 2710, 2716, 2712, 2713, 2717 Length: 16 Offset: -16,16 + icon: DATA.R8 + Start: 4064 + Offset: -30,-24 wallo: idle: DATA.R8 @@ -51,6 +57,9 @@ wallo: Frames: 2863, 2866, 2864, 2874, 2867, 2868, 2878, 2871, 2865, 2875, 2869, 2870, 2876, 2872, 2873, 2877 Length: 16 Offset: -16,16 + icon: DATA.R8 + Start: 4065 + Offset: -30,-24 guntowera: idle: DATA.R8 @@ -73,6 +82,9 @@ guntowera: Start: 2589 Facings: -32 Offset: -24,24 + icon: DATA.R8 + Start: 4069 + Offset: -30,-24 guntowerh: idle: DATA.R8 @@ -95,6 +107,9 @@ guntowerh: Start: 2749 Facings: -32 Offset: -24,24 + icon: DATA.R8 + Frames: 4070 + Offset: -30,-24 guntowero: idle: DATA.R8 @@ -117,6 +132,9 @@ guntowero: Start: 2909 Facings: -32 Offset: -24,24 + icon: DATA.R8 + Start: 4071 + Offset: -30,-24 rockettowera: idle: DATA.R8 @@ -139,6 +157,9 @@ rockettowera: Start: 2637 Facings: -32 Offset: -24,24 + icon: DATA.R8 + Start: 4075 + Offset: -30,-24 rockettowerh: idle: DATA.R8 @@ -161,6 +182,9 @@ rockettowerh: Start: 2828 Facings: -32 Offset: -24,24 + icon: DATA.R8 + Start: 4076 + Offset: -30,-24 rockettowero: idle: DATA.R8 @@ -183,6 +207,9 @@ rockettowero: Start: 2988 Facings: -32 Offset: -24,24 + icon: DATA.R8 + Start: 4077 + Offset: -30,-24 conyarda: idle: DATA.R8 @@ -206,6 +233,9 @@ conyarda: bib: bib3x # TODO: read this from BLOXBAT.R8 Start: 0 Length: * + icon: DATA.R8 + Start: 4046 + Offset: -30,-24 repaira: make: DATA.R8 # TODO: overlay @@ -231,6 +261,9 @@ repaira: Start: 2572 Offset: -48,48 ZOffset: -1c511 + icon: DATA.R8 + Start: 4096 + Offset: -30,-24 repairh: make: DATA.R8 # TODO: overlay @@ -256,6 +289,9 @@ repairh: Start: 2732 Offset: -48,48 ZOffset: -1c511 + icon: DATA.R8 + Start: 4097 + Offset: -30,-24 repairo: make: DATA.R8 # TODO: overlay @@ -281,6 +317,9 @@ repairo: Start: 2892 Offset: -48,48 ZOffset: -1c511 + icon: DATA.R8 + Start: 4098 + Offset: -30,-24 starporta: idle: DATA.R8 @@ -307,6 +346,9 @@ starporta: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4092 + Offset: -30,-24 pwra: idle: DATA.R8 @@ -326,6 +368,9 @@ pwra: bib: bib2x Start: 0 Length: * + icon: DATA.R8 + Start: 4056 + Offset: -30,-24 barra: idle: DATA.R8 @@ -341,6 +386,9 @@ barra: bib: bib2x Start: 0 Length: * + icon: DATA.R8 + Start: 4059 + Offset: -30,-24 radara: idle: DATA.R8 @@ -360,6 +408,9 @@ radara: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4072 + Offset: -30,-24 refa: idle: DATA.R8 @@ -382,6 +433,9 @@ refa: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4066 + Offset: -30,-24 siloa: idle: DATA.R8 @@ -396,6 +450,9 @@ siloa: Start: 4313 Length: 14 Offset: -16,16 + icon: DATA.R8 + Start: 4084 + Offset: -30,-24 hightecha: idle: DATA.R8 @@ -415,6 +472,9 @@ hightecha: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4078 + Offset: -30,-24 researcha: idle: DATA.R8 @@ -434,6 +494,9 @@ researcha: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4099 + Offset: -30,-24 researchh: idle: DATA.R8 @@ -453,6 +516,9 @@ researchh: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4100 + Offset: -30,-24 researcho: idle: DATA.R8 @@ -472,6 +538,9 @@ researcho: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4101 + Offset: -30,-24 palacea: idle: DATA.R8 @@ -487,6 +556,9 @@ palacea: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4102 + Offset: -30,-24 lighta: idle: DATA.R8 @@ -521,6 +593,9 @@ lighta: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4081 + Offset: -30,-24 heavya: idle: DATA.R8 @@ -555,6 +630,9 @@ heavya: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4087 + Offset: -30,-24 conyardh: idle: DATA.R8 @@ -578,6 +656,9 @@ conyardh: bib: bib3x # TODO: read this from BLOXBAT.R8 Start: 0 Length: * + icon: DATA.R8 + Start: 4047 + Offset: -30,-24 starporth: idle: DATA.R8 @@ -605,6 +686,9 @@ starporth: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4093 + Offset: -30,-24 pwrh: idle: DATA.R8 @@ -624,6 +708,9 @@ pwrh: bib: bib2x Start: 0 Length: * + icon: DATA.R8 + Start: 4057 + Offset: -30,-24 barrh: idle: DATA.R8 @@ -639,6 +726,9 @@ barrh: bib: bib2x Start: 0 Length: * + icon: DATA.R8 + Start: 4060 + Offset: -30,-24 radarh: idle: DATA.R8 @@ -658,6 +748,9 @@ radarh: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4073 + Offset: -30,-24 refh: idle: DATA.R8 @@ -680,6 +773,9 @@ refh: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4067 + Offset: -30,-24 siloh: idle: DATA.R8 @@ -694,6 +790,9 @@ siloh: Start: 4313 Length: 14 Offset: -16,16 + icon: DATA.R8 + Start: 4085 + Offset: -30,-24 hightechh: idle: DATA.R8 @@ -713,6 +812,9 @@ hightechh: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4079 + Offset: -30,-24 palaceh: idle: DATA.R8 @@ -736,6 +838,9 @@ palaceh: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4103 + Offset: -30,-24 lighth: idle: DATA.R8 @@ -770,6 +875,9 @@ lighth: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4082 + Offset: -30,-24 heavyh: idle: DATA.R8 @@ -804,6 +912,9 @@ heavyh: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4088 + Offset: -30,-24 conyardo: idle: DATA.R8 @@ -827,6 +938,9 @@ conyardo: bib: bib3x # TODO: read this from BLOXBAT.R8 Start: 0 Length: * + icon: DATA.R8 + Start: 4048 + Offset: -30,-24 starporto: idle: DATA.R8 @@ -853,6 +967,9 @@ starporto: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4094 + Offset: -30,-24 pwro: idle: DATA.R8 @@ -873,6 +990,9 @@ pwro: bib: bib2x Start: 0 Length: * + icon: DATA.R8 + Start: 4058 + Offset: -30,-24 barro: idle: DATA.R8 @@ -888,6 +1008,9 @@ barro: bib: bib2x Start: 0 Length: * + icon: DATA.R8 + Start: 4061 + Offset: -30,-24 radaro: idle: DATA.R8 @@ -907,6 +1030,9 @@ radaro: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4074 + Offset: -30,-24 refo: idle: DATA.R8 @@ -929,6 +1055,9 @@ refo: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4068 + Offset: -30,-24 siloo: idle: DATA.R8 @@ -943,6 +1072,9 @@ siloo: Start: 4313 Length: 14 Offset: -16,16 + icon: DATA.R8 + Start: 4086 + Offset: -30,-24 hightecho: idle: DATA.R8 @@ -962,6 +1094,9 @@ hightecho: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4080 + Offset: -30,-24 palaceo: idle: DATA.R8 @@ -977,6 +1112,9 @@ palaceo: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4104 + Offset: -30,-24 lighto: idle: DATA.R8 @@ -1007,6 +1145,9 @@ lighto: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4083 + Offset: -30,-24 heavyo: idle: DATA.R8 @@ -1041,6 +1182,9 @@ heavyo: bib: bib3x Start: 0 Length: * + icon: DATA.R8 + Start: 4089 + Offset: -30,-24 palacec: # TODO: unused idle: DATA.R8 @@ -1052,6 +1196,8 @@ palacec: # TODO: unused bib: bib3x Start: 0 Length: * + icon: palacecicon + Start: 0 starportc: # TODO: unused idle: DATA.R8 @@ -1078,6 +1224,9 @@ starportc: # TODO: unused bib: bib3x Start: 0 Length: * + icon: DATA.R8 # TODO: blank + Start: 4020 + Offset: -30,-24 heavyc: # TODO: unused idle: DATA.R8 @@ -1112,6 +1261,9 @@ heavyc: # TODO: unused bib: bib3x Start: 0 Length: * + icon: DATA.R8 # TODO: blank + Start: 4020 + Offset: -30,-24 conyardc: # TODO: unused idle: DATA.R8 @@ -1135,8 +1287,17 @@ conyardc: # TODO: unused bib: bib3x # TODO: read this from BLOXBAT.R8 Start: 0 Length: * + icon: DATA.R8 + Start: 4049 + Offset: -30,-24 plates: # TODO: unused idle: DATA.R8 Start: 3008 Length: 6 + 4-plates-icon: DATA.R8 + Start: 4050 + Offset: -30,-24 + 6-plates-icon: DATA.R8 + Start: 4053 + Offset: -30,-24 diff --git a/mods/d2k/sequences/vehicles.yaml b/mods/d2k/sequences/vehicles.yaml index 75bca7c6e2..cee9dba417 100644 --- a/mods/d2k/sequences/vehicles.yaml +++ b/mods/d2k/sequences/vehicles.yaml @@ -2,6 +2,9 @@ dmcv: idle: DATA.R8 Start: 1795 Facings: -32 + icon: DATA.R8 + Start: 4023 + Offset: -30,-24 harvester: idle: DATA.R8 @@ -19,6 +22,9 @@ harvester: dock-loop: DATA.R8 Start: 3380 Length: 1 + icon: DATA.R8 + Start: 4019 + Offset: -30,-24 trike: idle: DATA.R8 @@ -30,6 +36,9 @@ trike: muzzle: DATA.R8 Start: 3839 Facings: -32 + icon: DATA.R8 + Start: 4041 + Offset: -30,-24 quad: idle: DATA.R8 @@ -41,6 +50,9 @@ quad: muzzle: DATA.R8 Start: 3839 Facings: -32 + icon: DATA.R8 + Start: 4018 + Offset: -30,-24 siegetank: idle: DATA.R8 @@ -49,16 +61,25 @@ siegetank: turret: DATA.R8 Start: 1891 Facings: -32 + icon: DATA.R8 + Start: 4026 + Offset: -30,-24 missiletank: idle: DATA.R8 Start: 1603 Facings: -32 + icon: DATA.R8 + Start: 4024 + Offset: -30,-24 sonictank: idle: DATA.R8 Start: 1827 Facings: -32 + icon: DATA.R8 + Start: 4027 + Offset: -30,-24 combata: idle: DATA.R8 @@ -67,6 +88,9 @@ combata: turret: DATA.R8 Start: 1859 Facings: -32 + icon: DATA.R8 + Start: 4020 + Offset: -30,-24 combath: idle: DATA.R8 @@ -75,6 +99,9 @@ combath: turret: DATA.R8 Start: 2115 Facings: -32 + icon: DATA.R8 + Start: 4021 + Offset: -30,-24 devast: idle: DATA.R8 @@ -84,6 +111,9 @@ devast: Start: 3807 Length: 1 Facings: -32 + icon: DATA.R8 + Start: 4028 + Offset: -30,-24 combato: idle: DATA.R8 @@ -92,6 +122,9 @@ combato: turret: DATA.R8 Start: 2485 Facings: -32 + icon: DATA.R8 + Start: 4022 + Offset: -30,-24 raider: idle: DATA.R8 @@ -103,8 +136,27 @@ raider: muzzle: DATA.R8 Start: 3839 Facings: -32 + icon: DATA.R8 + Start: 4017 + Offset: -30,-24 + +stealthraider: + idle: DATA.R8 + Start: 2421 + Facings: -32 + unload: DATA.R8 + Start: 2421 + Facings: -32 + muzzle: DATA.R8 + Start: 3839 + Facings: -32 + icon: raidersicon + Start: 0 deviatortank: idle: DATA.R8 Start: 2389 Facings: -32 + icon: DATA.R8 + Start: 4025 + Offset: -30,-24 \ No newline at end of file diff --git a/mods/ra/rules/infantry.yaml b/mods/ra/rules/infantry.yaml index d29a76033d..e504615d04 100644 --- a/mods/ra/rules/infantry.yaml +++ b/mods/ra/rules/infantry.yaml @@ -448,7 +448,6 @@ SNIPER: Valued: Cost: 700 Tooltip: - Icon: snipericon Name: Sniper Description: Elite sniper infantry unit.\n Strong vs Infantry\n Weak vs Vehicles Buildable: @@ -492,7 +491,6 @@ Zombie: Valued: Cost: 100 Tooltip: - Icon: zombicon Name: Zombie Description: Slow undead. Attacks in close combat. Buildable: @@ -519,7 +517,6 @@ Ant: Valued: Cost: 300 Tooltip: - Icon: anticon Name: Giant Ant Description: Irradiated insect that grew oversize. Buildable: diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 3980dd451a..3f9558178a 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -5,7 +5,6 @@ MSLO: Tooltip: Name: Missile Silo Description: Launches a devastating atomic bomb\nat a target location.\n Special Ability: Atom Bomb\n\nMaximum 1 can be built - Icon: msloicon2 Buildable: Queue: Defense BuildPaletteOrder: 130 @@ -459,7 +458,6 @@ PBOX.E1: Tooltip: Name: Pillbox (Guns) Description: Basic defensive structure.\n Strong vs Infantry, Light Vehicles\n Weak vs Tanks, Aircraft - Icon: PBOXICON RenderBuilding: Image: PBOX RenderRangeCircle: @@ -624,7 +622,6 @@ HBOX.E1: Tooltip: Name: Camo Pillbox (Guns) Description: Hidden defensive structure.\n Strong vs Infantry, Light Vehicles\n Weak vs Tanks, Aircraft - Icon: HBOXICON RenderBuilding: Image: HBOX RenderRangeCircle: diff --git a/mods/ra/rules/vehicles.yaml b/mods/ra/rules/vehicles.yaml index c5dec0452a..39aa2b41ed 100644 --- a/mods/ra/rules/vehicles.yaml +++ b/mods/ra/rules/vehicles.yaml @@ -402,7 +402,6 @@ MNLY.AP: Cost: 800 Tooltip: Name: Minelayer (Anti-Personnel) - Icon: MNLYICON Description: Lays mines to destroy unwary enemy units.\n Unarmed Health: HP: 100 @@ -437,7 +436,6 @@ MNLY.AT: Cost: 800 Tooltip: Name: Minelayer (Anti-Tank) - Icon: MNLYICON Description: Lays mines to destroy unwary enemy units.\n Unarmed Health: HP: 100 diff --git a/mods/ra/sequences/aircraft.yaml b/mods/ra/sequences/aircraft.yaml index 5f0cd456bc..213f8cf344 100644 --- a/mods/ra/sequences/aircraft.yaml +++ b/mods/ra/sequences/aircraft.yaml @@ -2,6 +2,8 @@ mig: idle: Start: 0 Facings: 16 + icon: migicon + Start: 0 yak: idle: @@ -11,6 +13,8 @@ yak: Start: 0 Length: 6 Facings: 8 + icon: yakicon + Start: 0 heli: idle: @@ -22,6 +26,8 @@ heli: slow-rotor: lrotor Start: 4 Length: 8 + icon: heliicon + Start: 0 hind: idle: @@ -37,6 +43,8 @@ hind: Start: 0 Length: 6 Facings: 8 + icon: hindicon + Start: 0 tran: idle: tran2 @@ -60,6 +68,8 @@ tran: unload: tran2 Start: 32 Length: 4 + icon: tranicon + Start: 0 tran1husk: idle: diff --git a/mods/ra/sequences/infantry.yaml b/mods/ra/sequences/infantry.yaml index 042c336c46..7693f1ac37 100644 --- a/mods/ra/sequences/infantry.yaml +++ b/mods/ra/sequences/infantry.yaml @@ -64,6 +64,8 @@ e1: Start: 0 Length: 6 Tick: 1600 + icon: e1icon + Start: 0 sniper: stand: @@ -130,6 +132,8 @@ sniper: Start: 0 Length: 6 Tick: 1600 + icon: snipericon + Start: 0 e3: stand: @@ -190,6 +194,8 @@ e3: Start: 192 Length: 10 Facings: 8 + icon: e3icon + Start: 0 e6: stand: @@ -242,6 +248,8 @@ e6: Length: 4 Facings: 8 Tick: 100 + icon: e6icon + Start: 0 medi: stand: @@ -298,6 +306,8 @@ medi: Length: 4 Facings: 8 Tick: 100 + icon: mediicon + Start: 0 mech: stand: @@ -354,6 +364,8 @@ mech: Length: 4 Facings: 8 Tick: 100 + icon: mechicon + Start: 0 e2: stand: @@ -414,6 +426,8 @@ e2: Start: 288 Length: 12 Facings: 8 + icon: e2icon + Start: 0 dog: stand: @@ -458,6 +472,8 @@ dog: Start: 0 Length: 4 Facings: 8 + icon: dogicon + Start: 0 spy: stand: @@ -518,6 +534,8 @@ spy: Start: 192 Length: 8 Facings: 8 + icon: spyicon + Start: 0 thf: stand: @@ -550,6 +568,8 @@ thf: Start: 72 Length: 4 Facings: 8 + icon: thficon + Start: 0 e7: stand: @@ -607,6 +627,8 @@ e7: Start: 176 Length: 7 Facings: 8 + icon: e7icon + Start: 0 e4: stand: @@ -667,6 +689,8 @@ e4: Start: 256 Length: 16 Facings: 8 + icon: e4icon + Start: 0 gnrl: stand: @@ -786,6 +810,8 @@ shok: die6: electro Start: 0 Length: * + icon: shokicon + Start: 0 c1: stand: @@ -1080,6 +1106,8 @@ zombie: Start: 0 Length: 6 Tick: 1600 + icon: zombicon + Start: 0 ant: stand: @@ -1123,4 +1151,6 @@ ant: die-crushed: Start: 104 Length: 8 - Tick: 300 \ No newline at end of file + Tick: 300 + icon: anticon + Start: 0 \ No newline at end of file diff --git a/mods/ra/sequences/ships.yaml b/mods/ra/sequences/ships.yaml index 49cc5f4f39..9e992b3d1c 100644 --- a/mods/ra/sequences/ships.yaml +++ b/mods/ra/sequences/ships.yaml @@ -2,6 +2,8 @@ ss: idle: Start: 0 Facings: 16 + icon: ssicon + Start: 0 ca: idle: @@ -13,6 +15,8 @@ ca: muzzle: gunfire2 Start: 0 Length: 5 + icon: caicon + Start: 0 dd: idle: @@ -21,6 +25,8 @@ dd: turret: ssam Start: 0 Facings: 32 + icon: ddicon + Start: 0 pt: idle: @@ -32,6 +38,8 @@ pt: muzzle: gunfire2 Start: 0 Length: 5 + icon: pticon + Start: 0 lst: idle: @@ -41,8 +49,12 @@ lst: Length: 4 unload: Start: 4 + icon: lsticon + Start: 0 msub: idle: Start: 0 Facings: 16 + icon: msubicon + Start: 0 \ No newline at end of file diff --git a/mods/ra/sequences/structures.yaml b/mods/ra/sequences/structures.yaml index 5f971ba1af..e43eda7f1a 100644 --- a/mods/ra/sequences/structures.yaml +++ b/mods/ra/sequences/structures.yaml @@ -60,6 +60,8 @@ fact: bib: bib2 Start: 0 Length: * + icon: facticon + Start: 0 proc: idle: @@ -74,6 +76,8 @@ proc: bib: bib2 Start: 0 Length: * + icon: procicon + Start: 0 silo: idle: silo2 @@ -85,6 +89,8 @@ silo: make: silomake Start: 0 Length: * + icon: siloicon + Start: 0 powr: idle: @@ -99,6 +105,8 @@ powr: bib: bib3 Start: 0 Length: * + icon: powricon + Start: 0 apwr: idle: @@ -113,6 +121,8 @@ apwr: bib: bib2 Start: 0 Length: * + icon: apwricon + Start: 0 barr: idle: @@ -127,6 +137,8 @@ barr: bib: bib3 Start: 0 Length: * + icon: barricon + Start: 0 tent: idle: @@ -141,6 +153,8 @@ tent: bib: bib3 Start: 0 Length: * + icon: tenticon + Start: 0 kenn: idle: @@ -150,6 +164,8 @@ kenn: make: kennmake Start: 0 Length: * + icon: kennicon + Start: 0 dome: idle: @@ -162,6 +178,8 @@ dome: bib: bib3 Start: 0 Length: * + icon: domeicon + Start: 0 atek: idle: @@ -178,6 +196,8 @@ atek: bib: bib3 Start: 0 Length: * + icon: atekicon + Start: 0 stek: idle: @@ -190,6 +210,8 @@ stek: bib: bib2 Start: 0 Length: * + icon: stekicon + Start: 0 weap: idle: @@ -212,6 +234,8 @@ weap: bib: bib2 Start: 0 Length: * + icon: weapicon + Start: 0 hpad: idle: @@ -234,6 +258,8 @@ hpad: bib: bib3 Start: 0 Length: * + icon: hpadicon + Start: 0 afld: idle: afldidle @@ -259,6 +285,8 @@ afld: make: afldmake Start: 0 Length: * + icon: afldicon + Start: 0 spen: idle: @@ -268,6 +296,8 @@ spen: make: spenmake Start: 0 Length: * + icon: spenicon + Start: 0 syrd: idle: @@ -277,6 +307,8 @@ syrd: make: syrdmake Start: 0 Length: * + icon: syrdicon + Start: 0 fix: idle: @@ -296,6 +328,8 @@ fix: make: fixmake Start: 0 Length: * + icon: fixicon + Start: 0 gun: idle: @@ -316,6 +350,8 @@ gun: muzzle: gunfire2 Start: 0 Length: 5 + icon: gunicon + Start: 0 agun: idle: @@ -336,6 +372,8 @@ agun: muzzle: gunfire2 Start: 1 Length: 4 + icon: agunicon + Start: 0 sam: idle: @@ -351,6 +389,8 @@ sam: Start: 0 Length: 18 Facings: 8 + icon: samicon + Start: 0 ftur: idle: @@ -360,6 +400,8 @@ ftur: make: fturmake Start: 0 Length: * + icon: fturicon + Start: 0 tsla: idle: @@ -377,6 +419,8 @@ tsla: Start: 11 Length: 9 Tick: 100 + icon: tslaicon + Start: 0 pbox: idle: @@ -390,6 +434,8 @@ pbox: Start: 0 Length: 6 Facings: 8 + icon: pboxicon + Start: 0 hbox: damaged-idle: @@ -403,6 +449,8 @@ hbox: Start: 0 Length: 6 Facings: 8 + icon: hboxicon + Start: 0 gap: idle: @@ -414,6 +462,8 @@ gap: make: gapmake Start: 0 Length: * + icon: gapicon + Start: 0 iron: idle: @@ -434,6 +484,8 @@ iron: Start: 0 Length: * Offset: 0,-12 + icon: ironicon + Start: 0 pdox: idle: @@ -449,6 +501,8 @@ pdox: make: pdoxmake Start: 0 Length: * + icon: pdoxicon + Start: 0 mslo: idle: @@ -465,6 +519,8 @@ mslo: damaged-active: Start: 9 Length: 7 + icon: msloicon2 + Start: 0 miss: idle: @@ -491,6 +547,8 @@ brik: critical-idle: Start: 48 Length: 16 + icon: brikicon + Start: 0 sbag: idle: @@ -499,6 +557,8 @@ sbag: damaged-idle: Start: 16 Length: 16 + icon: sbagicon + Start: 0 fenc: idle: @@ -507,6 +567,8 @@ fenc: damaged-idle: Start: 16 Length: 16 + icon: fencicon + Start: 0 cycl: idle: diff --git a/mods/ra/sequences/vehicles.yaml b/mods/ra/sequences/vehicles.yaml index f9797882c1..b1688f105d 100644 --- a/mods/ra/sequences/vehicles.yaml +++ b/mods/ra/sequences/vehicles.yaml @@ -2,6 +2,8 @@ mcv: idle: Start: 0 Facings: 32 + icon: mcvicon + Start: 0 mcvhusk: idle: @@ -12,6 +14,8 @@ truk: idle: Start: 0 Facings: 32 + icon: trukicon + Start: 0 harv: idle: @@ -27,6 +31,8 @@ harv: dock-loop: Start: 104 Length: 7 + icon: harvicon + Start: 0 harvhalf: idle: @@ -78,6 +84,8 @@ hhusk2: muzzle: gunfire2 Start: 0 Length: 2 + icon: 1tnkicon + Start: 0 2tnk: idle: @@ -89,6 +97,8 @@ hhusk2: muzzle: gunfire2 Start: 0 Length: 5 + icon: 2tnkicon + Start: 0 3tnk: idle: @@ -100,6 +110,8 @@ hhusk2: muzzle: gunfire2 Start: 0 Length: 5 + icon: 3tnkicon + Start: 0 4tnk: idle: @@ -111,6 +123,8 @@ hhusk2: muzzle: gunfire2 Start: 0 Length: 5 + icon: 4tnkicon + Start: 0 v2rl: idle: @@ -125,6 +139,8 @@ v2rl: empty-aim: Start: 72 Facings: 8 + icon: v2rlicon + Start: 0 arty: idle: @@ -133,6 +149,8 @@ arty: muzzle: gunfire2 Start: 0 Length: 5 + icon: artyicon + Start: 0 jeep: idle: @@ -148,6 +166,8 @@ jeep: unload: Start: 0 Facings: 32 + icon: jeepicon + Start: 0 apc: idle: @@ -162,11 +182,15 @@ apc: Length: 3 unload: Start: 32 + icon: apcicon + Start: 0 mnly: idle: Start: 0 Facings: 32 + icon: mnlyicon + Start: 0 mrj: idle: @@ -175,6 +199,8 @@ mrj: spinner: Start: 32 Length: 32 + icon: mrjicon + Start: 0 mgg: idle: @@ -186,6 +212,8 @@ mgg: spinner-idle: Start: 32 Length: 1 + icon: mggicon + Start: 0 ttnk: idle: @@ -194,6 +222,8 @@ ttnk: spinner: Start: 32 Length: 32 + icon: ttnkicon + Start: 0 ftrk: idle: @@ -205,11 +235,15 @@ ftrk: muzzle: gunfire2 Start: 0 Length: 2 + icon: ftrkicon + Start: 0 dtrk: idle: Start: 0 Facings: 32 + icon: dtrkicon + Start: 0 ctnk: idle: @@ -218,3 +252,5 @@ ctnk: muzzle: gunfire2 Start: 0 Length: 5 + icon: ctnkicon + Start: 0 \ No newline at end of file diff --git a/mods/ts/rules/aircraft.yaml b/mods/ts/rules/aircraft.yaml index 6361ffb1ef..df6145fe5a 100644 --- a/mods/ts/rules/aircraft.yaml +++ b/mods/ts/rules/aircraft.yaml @@ -4,7 +4,6 @@ DPOD: Cost: 10 Tooltip: Name: Drop Pod - Icon: podsicon Buildable: Queue: Air BuildPaletteOrder: 10 @@ -42,7 +41,6 @@ DSHP: Cost: 1000 Tooltip: Name: Dropship - Icon: xxicon Buildable: Queue: Air BuildPaletteOrder: 10 @@ -74,7 +72,6 @@ ORCA: Cost: 1000 Tooltip: Name: Orca Fighter - Icon: orcaicon Description: Helicopter Gunship with Missiles.\n Strong vs Buildings, Tanks\n Weak vs Infantry Buildable: Queue: Air @@ -111,7 +108,6 @@ ORCAB: Cost: 1600 Tooltip: Name: Orca Bomber - Icon: obmbicon Buildable: Queue: Air BuildPaletteOrder: 20 @@ -147,7 +143,6 @@ ORCATRAN: Cost: 1200 Tooltip: Name: Orca Transport - Icon: crryicon Buildable: Queue: Air BuildPaletteOrder: 10 @@ -179,7 +174,6 @@ TRNSPORT: # TODO: set up the vehicle cargo traits, but beware of desyncs Cost: 750 Tooltip: Name: Carryall - Icon: otrnicon Buildable: Queue: Air BuildPaletteOrder: 10 @@ -207,7 +201,6 @@ SCRIN: Cost: 1500 Tooltip: Name: Banshee Fighter - Icon: proicon Buildable: Queue: Air BuildPaletteOrder: 20 @@ -243,7 +236,6 @@ APACHE: Cost: 1000 Tooltip: Name: Harpy - Icon: apchicon Buildable: Queue: Air BuildPaletteOrder: 20 diff --git a/mods/ts/rules/defaults.yaml b/mods/ts/rules/defaults.yaml index 9da6820afe..1bdb1a7818 100644 --- a/mods/ts/rules/defaults.yaml +++ b/mods/ts/rules/defaults.yaml @@ -91,7 +91,6 @@ Cost: 10 Tooltip: Name: Civilian - Icon: xxicon Buildable: # TODO: remove this once the testing period is over Queue: Infantry BuildPaletteOrder: 1000 diff --git a/mods/ts/rules/infantry.yaml b/mods/ts/rules/infantry.yaml index dba1fe2398..c378b22d1e 100644 --- a/mods/ts/rules/infantry.yaml +++ b/mods/ts/rules/infantry.yaml @@ -64,7 +64,6 @@ E3: Tooltip: Name: Rocket Infantry Description: Anti-tank infantry.\n Strong vs Tanks\n Weak vs Infantry - Icon: e4icon # TODO: really? Selectable: Bounds: 12,17,0,-9 Voice: Rocket @@ -88,7 +87,6 @@ WEEDGUY: Tooltip: Name: Chem Spray Infantry Description: Advanced Anti-infantry unit.\n Strong vs Infantry\n Weak vs Vehicles - Icon: weaticon Buildable: Queue: Infantry BuildPaletteOrder: 50 @@ -119,7 +117,6 @@ MEDIC: Tooltip: Name: Medic Description: Heals nearby infantry.\n Strong vs Nothing\n Weak vs Everything - Icon: mediicon Buildable: Queue: Infantry BuildPaletteOrder: 60 @@ -151,7 +148,6 @@ ENGINEER: Tooltip: Name: Engineer Description: Infiltrates and captures enemy structures.\n Strong vs Nothing\n Weak vs Everything - Icon: engnicon Buildable: Queue: Infantry BuildPaletteOrder: 30 @@ -183,7 +179,6 @@ UMAGON: Valued: Cost: 400 Tooltip: - Icon: umagicon Name: Umagon Description: Elite sniper infantry unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles Buildable: @@ -214,7 +209,6 @@ GHOST: Valued: Cost: 1750 Tooltip: - Icon: gosticon Name: Ghost Stalker Description: Elite commando infantry, armed with \ndual pistols and C4.\n Strong vs Infantry, Buildings\n Weak vs Vehicles\n Special Ability: Destroy Building with C4\n\nMaximum 1 can be trained BuildLimit: 1 @@ -250,7 +244,6 @@ JUMPJET: Valued: Cost: 600 Tooltip: - Icon: jjeticon Name: Jumpjet Infantry Buildable: Queue: Infantry @@ -290,7 +283,6 @@ CHAMSPY: SpyToolTip: Name: Chameleon Spy Description: Infiltrates enemy structures to gather \nintelligence. Exact effect depends on the \nbuilding infiltrated.\n Strong vs Nothing\n Weak vs Everything\n Special Ability: Disguised - Icon: chamicon Selectable: Voice: Spy Bounds: 12,17,0,-9 @@ -320,7 +312,6 @@ CYBORG: Valued: Cost: 650 Tooltip: - Icon: cybiicon Name: Cyborg Infantry Description: Cybernetic infantry unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles Buildable: @@ -359,7 +350,6 @@ CYC2: Valued: Cost: 2000 Tooltip: - Icon: cybcicon Name: Cyborg Commando Description: Elite cybernetic infantry unit.\n Strong vs Infantry, Buildings\n Weak vs Vehicles Buildable: @@ -402,7 +392,6 @@ MUTANT: Tooltip: Name: Mutant Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles - Icon: mutcicon Selectable: Bounds: 12,17,0,-9 Voice: Mutant @@ -433,7 +422,6 @@ MWMN: Tooltip: Name: Mutant Soldier Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles - Icon: mutcicon Selectable: Bounds: 12,17,0,-9 Voice: Mutant @@ -464,7 +452,6 @@ MUTANT3: Tooltip: Name: Mutant Sergeant Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles - Icon: mutcicon Selectable: Bounds: 12,17,0,-9 Voice: Mutant @@ -495,7 +482,6 @@ MHIJACK: # TODO: does not work Tooltip: Name: Mutant Hijacker Description: General-purpose infantry.\n Strong vs Infantry\n Weak vs Vehicles - Icon: mutcicon Selectable: Bounds: 12,17,0,-9 Voice: Hijacker @@ -524,7 +510,6 @@ TRATOS: Cost: 100 Tooltip: Name: Tratos - Icon: mutcicon Selectable: Bounds: 12,17,0,-9 Voice: Tratos @@ -553,7 +538,6 @@ OXANNA: Cost: 100 Tooltip: Name: Oxanna - Icon: mutcicon Selectable: Bounds: 12,17,0,-9 Voice: Oxanna @@ -582,7 +566,6 @@ SLAV: Cost: 100 Tooltip: Name: Slavick - Icon: mutcicon Selectable: Bounds: 12,17,0,-9 Voice: Slavick @@ -605,7 +588,6 @@ DOGGIE: Inherits: ^Infantry Tooltip: Name: Tiberian Fiend - Icon: xxicon Buildable: Queue: Infantry BuildPaletteOrder: 100 @@ -638,7 +620,6 @@ VISSML: Inherits: ^Infantry Tooltip: Name: Baby Visceroid - Icon: xxicon Buildable: Queue: Infantry BuildPaletteOrder: 100 @@ -670,7 +651,6 @@ VISLRG: Inherits: ^Infantry Tooltip: Name: Adult Visceroid - Icon: xxicon Buildable: Queue: Infantry BuildPaletteOrder: 100 diff --git a/mods/ts/rules/structures.yaml b/mods/ts/rules/structures.yaml index 89afd5b241..69c03e16a1 100644 --- a/mods/ts/rules/structures.yaml +++ b/mods/ts/rules/structures.yaml @@ -21,7 +21,6 @@ GACNST: Tooltip: Name: Construction Yard Description: Builds base structures. - Icon: facticon CustomSellValue: Value: 2500 BaseBuilding: @@ -50,7 +49,6 @@ GAPOWR: Tooltip: Name: GDI Power Plant Description: Provides power for other structures - Icon: powricon ProvidesCustomPrerequisite: Prerequisite: anypower Building: @@ -81,7 +79,6 @@ GAPILE: Tooltip: Name: GDI Barracks Description: Produces infantry - Icon: brrkicon Building: Power: -20 Footprint: xx xx @@ -114,7 +111,6 @@ GAWEAP: Cost: 2000 Tooltip: Name: GDI War Factory - Icon: weapicon Description: Assembly point for\nvehicle reinforcements # ProvidesCustomPrerequisite: # Prerequisite: VehicleProduction @@ -158,7 +154,6 @@ GASAND: Tooltip: Name: Sandbags Description: Stops infantry and blocks enemy fire.\nCan be crushed by tanks. - Icon: sbagicon Health: HP: 250 Armor: @@ -303,7 +298,6 @@ GASPOT: # TODO: has moving spotlights Cost: 300 Tooltip: Name: Light Tower - Icon: spoticon Building: Power: -10 Footprint: x @@ -326,7 +320,6 @@ GAHPAD: Cost: 500 Tooltip: Name: Helipad - Icon: heliicon Description: Produces, rearms and\nrepairs helicopters Buildable: BuildPaletteOrder: 60 diff --git a/mods/ts/rules/vehicles.yaml b/mods/ts/rules/vehicles.yaml index b35f23eb7f..ca41fcc45e 100644 --- a/mods/ts/rules/vehicles.yaml +++ b/mods/ts/rules/vehicles.yaml @@ -41,7 +41,6 @@ APC: Cost: 600 Tooltip: Name: Amphibious APC # TODO: not yet amphibious - Icon: apcicon Description: Armored infantry transport and mobile AA\n Strong vs Aircraft, Vehicles\n Weak vs Infantry Buildable: Queue: Vehicle @@ -74,7 +73,6 @@ HARV: # TODO: without back: HORV Cost: 1400 Tooltip: Name: Harvester - Icon: harvicon Description: Collects Tiberium for processing.\n Unarmed Buildable: Queue: Vehicle @@ -117,7 +115,6 @@ HVR: Cost: 900 Tooltip: Name: Hover MLRS - Icon: hovricon Description: Hover Multi-Launch Rocket System Buildable: Queue: Vehicle @@ -148,7 +145,6 @@ HVR: Cost: 1700 Tooltip: Name: Mammoth Tank - Icon: xxicon Description: Heavily armored GDI Tank.\n Strong vs Everything Buildable: Queue: Vehicle @@ -191,7 +187,6 @@ TRUCKB: # NOTE: TRUCKA is unloaded Tooltip: Name: Truck Description: Transports cash to other players.\n Unarmed - Icon: xxicon Health: HP: 2000 Armor: @@ -214,7 +209,6 @@ LPST: Cost: 950 Tooltip: Name: Mobile Sensor Array - Icon: lpsticon Buildable: Queue: Vehicle BuildPaletteOrder: 100 @@ -246,7 +240,6 @@ ICBM: Cost: 1400 Tooltip: Name: Ballistic Missile Launcher - Icon: xxicon Buildable: Queue: Vehicle BuildPaletteOrder: 100 @@ -283,7 +276,6 @@ REPAIR: Tooltip: Name: Mobile Repair Vehicle Description: Repairs nearby vehicles.\n Strong vs Nothing\n Weak vs Everything - Icon: rboticon Health: HP: 200 Mobile: @@ -307,7 +299,6 @@ ART2: Cost: 975 Tooltip: Name: Artillery - Icon: artyicon Buildable: Queue: Vehicle BuildPaletteOrder: 100 @@ -339,7 +330,6 @@ WEED: Cost: 1400 Tooltip: Name: Weed Eater - Icon: weedicon Description: Collects veins for processing.\n Unarmed Buildable: Queue: Vehicle @@ -376,7 +366,6 @@ BUS: Cost: 800 Tooltip: Name: School Bus - Icon: xxicon Buildable: Queue: Vehicle BuildPaletteOrder: 300 @@ -406,7 +395,6 @@ PICK: Cost: 800 Tooltip: Name: Pickup - Icon: xxicon Buildable: Queue: Vehicle BuildPaletteOrder: 300 @@ -436,7 +424,6 @@ CAR: Cost: 800 Tooltip: Name: Automobile - Icon: xxicon Buildable: Queue: Vehicle BuildPaletteOrder: 300 @@ -466,7 +453,6 @@ GGHUNT: Cost: 1000 Tooltip: Name: Hunter-Seeker Droid - Icon: seekicon Buildable: BuildPaletteOrder: 20 Owner: gdi, nod @@ -494,7 +480,6 @@ WINI: Cost: 800 Tooltip: Name: Recreational Vehicle - Icon: xxicon Buildable: Queue: Vehicle BuildPaletteOrder: 300 @@ -524,7 +509,6 @@ MMCH: Cost: 800 Tooltip: Name: Medium Mech - Icon: mmchicon Buildable: Queue: Vehicle BuildPaletteOrder: 300 @@ -558,7 +542,6 @@ HMEC: Cost: 3000 Tooltip: Name: Mammoth Mk. II - Icon: hmecicon Buildable: Queue: Vehicle BuildPaletteOrder: 40 @@ -591,7 +574,6 @@ SMECH: Tooltip: Name: Wolverine Description: Small Mech - Icon: smchicon Buildable: Queue: Vehicle BuildPaletteOrder: 10 @@ -619,7 +601,6 @@ BIKE: Cost: 600 Tooltip: Name: Attack Cycle - Icon: cyclicon Description: Fast scout vehicle, armed with \nrockets.\n Strong vs Vehicles, Aircraft\n Weak vs Infantry Buildable: Queue: Vehicle @@ -650,7 +631,6 @@ BGGY: Cost: 500 Tooltip: Name: Attack Buggy - Icon: bggyicon Description: Fast scout & anti-infantry vehicle.\n Strong vs Infantry, Vehicles\n Weak vs Tanks, Aircraft Buildable: Queue: Vehicle @@ -679,7 +659,6 @@ SAPC: Cost: 800 Tooltip: Name: Subterranean APC # TODO: not yet subterranean - Icon: sapcicon Description: Armored infantry transport and mobile AA\n Strong vs Aircraft, Vehicles\n Weak vs Infantry Buildable: Queue: Vehicle @@ -710,7 +689,6 @@ SUBTANK: Cost: 750 Tooltip: Name: Devil's Tongue - Icon: subticon Description: Subterranean Tank Buildable: Queue: Vehicle @@ -739,7 +717,6 @@ SONIC: Cost: 1300 Tooltip: Name: Disruptor - Icon: soniicon Buildable: Queue: Vehicle BuildPaletteOrder: 40 @@ -769,7 +746,6 @@ TTNK: Cost: 800 Tooltip: Name: Tick Tank - Icon: tickicon Buildable: Queue: Vehicle BuildPaletteOrder: 60 @@ -800,7 +776,6 @@ STNK: Cost: 1100 Tooltip: Name: Stealth Tank - Icon: stnkicon Description: Long-range missile tank that can cloak.\nHas weak armor. Can be spotted by infantry.\n Strong vs Vehicles, Tanks, Aircraft\n Weak vs Infantry. Buildable: BuildPaletteOrder: 90 diff --git a/mods/ts/sequences/aircraft.yaml b/mods/ts/sequences/aircraft.yaml index e69de29bb2..70cca669a7 100644 --- a/mods/ts/sequences/aircraft.yaml +++ b/mods/ts/sequences/aircraft.yaml @@ -0,0 +1,31 @@ +dpod: + icon: podsicon + Start: 0 + +dshp: + icon: xxicon + Start: 0 + +orca: + icon: orcaicon + Start: 0 + +orcab: + icon: obmbicon + Start: 0 + +orcatran: + icon: crryicon + Start: 0 + +trnsport: + icon: otrnicon + Start: 0 + +scrin: + icon: proicon + Start: 0 + +apache: + icon: apchicon + Start: 0 \ No newline at end of file diff --git a/mods/ts/sequences/infantry.yaml b/mods/ts/sequences/infantry.yaml index 7ee45da330..00ad1d6548 100644 --- a/mods/ts/sequences/infantry.yaml +++ b/mods/ts/sequences/infantry.yaml @@ -60,6 +60,8 @@ e1: die6: electro Start: 0 Length: * + icon: e1icon + Start: 0 e2: stand: @@ -123,6 +125,8 @@ e2: die6: electro Start: 0 Length: * + icon: e2icon + Start: 0 e3: stand: @@ -186,6 +190,8 @@ e3: die6: electro Start: 0 Length: * + icon: e4icon + Start: 0 weedguy: stand: weed @@ -244,6 +250,8 @@ weedguy: die6: electro Start: 0 Length: * + icon: weaticon + Start: 0 medic: stand: @@ -298,6 +306,8 @@ medic: die6: electro Start: 0 Length: * + icon: mediicon + Start: 0 engineer: stand: @@ -341,6 +351,8 @@ engineer: die6: electro Start: 0 Length: * + icon: engnicon + Start: 0 umagon: stand: @@ -404,6 +416,8 @@ umagon: die6: electro Start: 0 Length: * + icon: umagicon + Start: 0 ghost: # TODO unused GUNFIRE.SHP stand: @@ -467,6 +481,8 @@ ghost: # TODO unused GUNFIRE.SHP die6: electro Start: 0 Length: * + icon: gosticon + Start: 0 jumpjet: # TODO: ShadowStart: stand: @@ -519,6 +535,8 @@ jumpjet: # TODO: ShadowStart: die6: electro Start: 0 Length: * + icon: jjeticon + Start: 0 mhijack: stand: @@ -582,6 +600,8 @@ mhijack: die6: electro Start: 0 Length: * + icon: mutcicon + Start: 0 chamspy: stand: @@ -645,6 +665,8 @@ chamspy: die6: electro Start: 0 Length: * + icon: chamicon + Start: 0 cyc2: stand: @@ -708,6 +730,8 @@ cyc2: die6: electro Start: 0 Length: * + icon: cybcicon + Start: 0 cyborg: stand: @@ -765,6 +789,8 @@ cyborg: die6: electro Start: 0 Length: * + icon: cybiicon + Start: 0 mutant: # TODO unused MGUN-N,MGUN-NE,MGUN-E,MGUN-SE,MGUN-S,MGUN-SW,MGUN-W,MGUN-NW stand: @@ -828,6 +854,8 @@ mutant: # TODO unused MGUN-N,MGUN-NE,MGUN-E,MGUN-SE,MGUN-S,MGUN-SW,MGUN-W,MGUN-N die6: electro Start: 0 Length: * + icon: mutcicon + Start: 0 mwmn: # TODO unused MGUN-N,MGUN-NE,MGUN-E,MGUN-SE,MGUN-S,MGUN-SW,MGUN-W,MGUN-NW stand: @@ -891,6 +919,8 @@ mwmn: # TODO unused MGUN-N,MGUN-NE,MGUN-E,MGUN-SE,MGUN-S,MGUN-SW,MGUN-W,MGUN-NW die6: electro Start: 0 Length: * + icon: mutcicon + Start: 0 mutant3: # TODO unused MGUN-N,MGUN-NE,MGUN-E,MGUN-SE,MGUN-S,MGUN-SW,MGUN-W,MGUN-NW stand: @@ -954,6 +984,8 @@ mutant3: # TODO unused MGUN-N,MGUN-NE,MGUN-E,MGUN-SE,MGUN-S,MGUN-SW,MGUN-W,MGUN- die6: electro Start: 0 Length: * + icon: mutcicon + Start: 0 tratos: stand: @@ -1017,6 +1049,8 @@ tratos: die6: electro Start: 0 Length: * + icon: mutcicon + Start: 0 oxanna: stand: @@ -1080,6 +1114,8 @@ oxanna: die6: electro Start: 0 Length: * + icon: mutcicon + Start: 0 slav: stand: @@ -1143,6 +1179,8 @@ slav: die6: electro Start: 0 Length: * + icon: mutcicon + Start: 0 doggie: # TODO: not sure what frame 88 and following is stand: @@ -1176,12 +1214,16 @@ doggie: # TODO: not sure what frame 88 and following is Start: 109 Length: 9 ShadowStart: 228 + icon: xxicon + Start: 0 vissml: idle: Start: 0 Length: 90 ShadowStart: 90 + icon: xxicon + Start: 0 vislrg: idle: @@ -1193,6 +1235,8 @@ vislrg: Length: 5 Facings: 8 ShadowStart: 40 + icon: xxicon + Start: 0 civ1: stand: @@ -1230,6 +1274,8 @@ civ1: die6: electro Start: 0 Length: * + icon: xxicon + Start: 0 civ2: stand: @@ -1267,6 +1313,8 @@ civ2: die6: electro Start: 0 Length: * + icon: xxicon + Start: 0 civ3: stand: @@ -1303,4 +1351,6 @@ civ3: ShadowStart: 441 die6: electro Start: 0 - Length: * \ No newline at end of file + Length: * + icon: xxicon + Start: 0 \ No newline at end of file diff --git a/mods/ts/sequences/structures.yaml b/mods/ts/sequences/structures.yaml index f5fef7e830..51d7adff5a 100644 --- a/mods/ts/sequences/structures.yaml +++ b/mods/ts/sequences/structures.yaml @@ -46,6 +46,8 @@ gacnst: critical-idle-front: gtcnst_b Start: 0 Length: 10 + icon: facticon + Start: 0 gapowr: idle: gtpowr @@ -85,6 +87,8 @@ gapowr: Start: 0 Length: 20 ShadowStart: 20 + icon: powricon + Start: 0 gapile: idle: gtpile @@ -122,6 +126,8 @@ gapile: Start: 0 Length: 20 ShadowStart: 20 + icon: brrkicon + Start: 0 gaweap: idle: gtweap @@ -150,6 +156,8 @@ gaweap: Length: 20 Tick: 80 ShadowStart: 20 + icon: weapicon + Start: 0 # TODO: gtweap_1 & gtweapbb & gtweap_a & gtweap_b & gtweap_c are unused gasand: # TODO frame order (horizontal seems busted) @@ -161,6 +169,8 @@ gasand: # TODO frame order (horizontal seems busted) Start: 16 Length: 16 ShadowStart: 48 + icon: sbagicon + Start: 0 gatick: idle: @@ -244,6 +254,8 @@ gaspot: Start: 0 Length: 14 ShadowStart: 14 + icon: spoticon + Start: 0 gahpad: idle: @@ -282,4 +294,6 @@ gahpad: make: gahpadmk Start: 0 Length: 18 - ShadowStart: 18 \ No newline at end of file + ShadowStart: 18 + icon: heliicon + Start: 0 \ No newline at end of file diff --git a/mods/ts/sequences/vehicles.yaml b/mods/ts/sequences/vehicles.yaml index f8f01324bd..113219f6de 100644 --- a/mods/ts/sequences/vehicles.yaml +++ b/mods/ts/sequences/vehicles.yaml @@ -1,3 +1,95 @@ +mcv: + icon: mcvicon + Start: 0 + +apc: + icon: apcicon + Start: 0 + +harv: + icon: harvicon + Start: 0 + +hvr: + icon: hovricon + Start: 0 + +4tnk: + icon: xxicon + Start: 0 + +truckb: + icon: xxicon + Start: 0 + +lpst: + icon: lpsticon + Start: 0 + +icbm: + icon: xxicon + Start: 0 + +repair: + icon: rboticon + Start: 0 + +art2: + icon: artyicon + Start: 0 + +weed: + icon: weedicon + Start: 0 + +bus: + icon: xxicon + Start: 0 + +pick: + icon: xxicon + Start: 0 + +car: + icon: xxicon + Start: 0 + +wini: + icon: xxicon + Start: 0 + +hmec: + icon: hmecicon + Start: 0 + +bike: + icon: cyclicon + Start: 0 + +bggy: + icon: bggyicon + Start: 0 + +sapc: + icon: sapcicon + Start: 0 + +subtank: + icon: subticon + Start: 0 + +sonic: + icon: soniicon + Start: 0 + +ttnk: + icon: tickicon + Start: 0 + +stnk: + icon: stnkicon + Start: 0 + mmch: stand: Start: 0 @@ -12,6 +104,8 @@ mmch: turret: Start: 120 Facings: -32 + icon: mmchicon + Start: 0 gghunt: idle: @@ -19,6 +113,8 @@ gghunt: Facings: 1 Length: 8 ShadowStart: 8 + icon: seekicon + Start: 0 smech: stand: # TODO: slightly glitchy @@ -34,4 +130,6 @@ smech: Start: 104 Length: 4 Facings: -8 - ShadowStart: 240 \ No newline at end of file + ShadowStart: 240 + icon: smchicon + Start: 0 \ No newline at end of file From efb55d4cb9173107e3236522d03fa1f91830fbf1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 11:37:32 +0200 Subject: [PATCH 10/44] read support power icons from sequences so that d2k can grab them from DATA.R8 --- .../Widgets/SupportPowersWidget.cs | 12 +- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 176 +----------------- OpenRA.Mods.RA/SupportPowers/SupportPower.cs | 2 +- .../ObserverSupportPowerIconsWidget.cs | 19 +- .../Widgets/SupportPowerBinWidget.cs | 15 +- mods/cnc/rules/structures.yaml | 6 +- mods/cnc/sequences/misc.yaml | 10 +- mods/d2k/rules/atreides.yaml | 2 +- mods/d2k/rules/harkonnen.yaml | 2 +- mods/d2k/rules/ordos.yaml | 2 +- mods/d2k/rules/structures.yaml | 2 +- mods/d2k/sequences/aircraft.yaml | 7 + mods/d2k/sequences/misc.yaml | 11 ++ mods/ra/rules/structures.yaml | 17 +- mods/ra/sequences/misc.yaml | 14 ++ mods/ra/sequences/structures.yaml | 10 + 16 files changed, 88 insertions(+), 219 deletions(-) diff --git a/OpenRA.Mods.Cnc/Widgets/SupportPowersWidget.cs b/OpenRA.Mods.Cnc/Widgets/SupportPowersWidget.cs index f6532a83cc..48d60f1715 100755 --- a/OpenRA.Mods.Cnc/Widgets/SupportPowersWidget.cs +++ b/OpenRA.Mods.Cnc/Widgets/SupportPowersWidget.cs @@ -32,7 +32,7 @@ namespace OpenRA.Mods.Cnc.Widgets readonly WorldRenderer worldRenderer; readonly SupportPowerManager spm; - Dictionary iconSprites; + Animation icon; Animation clock; Dictionary icons = new Dictionary(); @@ -52,12 +52,7 @@ namespace OpenRA.Mods.Cnc.Widgets tooltipContainer = Lazy.New(() => Ui.Root.Get(TooltipContainer)); - iconSprites = Rules.Info.Values.SelectMany(u => u.Traits.WithInterface()) - .Select(u => u.Image).Distinct() - .ToDictionary( - u => u, - u => Game.modData.SpriteLoader.LoadAllSprites(u)[0]); - + icon = new Animation("icon"); clock = new Animation("clock"); } @@ -78,11 +73,12 @@ namespace OpenRA.Mods.Cnc.Widgets foreach (var p in powers) { var rect = new Rectangle(rb.X + 1, rb.Y + i * (48 + Spacing) + 1, 64, 48); + icon.Play(p.Info.Icon); var power = new SupportPowerIcon() { Power = p, Pos = new float2(rect.Location), - Sprite = iconSprites[p.Info.Image] + Sprite = icon.Image }; icons.Add(rect, power); diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs index 6623770895..3c17aec827 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs @@ -69,104 +69,7 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--r8", pathToDataR8, pathToPalette, "130", "145", Path.Combine(pathToSHPs, "rockcrater2") }, new string[] { "--r8", pathToDataR8, pathToPalette, "146", "161", Path.Combine(pathToSHPs, "sandcrater1") }, new string[] { "--r8", pathToDataR8, pathToPalette, "162", "177", Path.Combine(pathToSHPs, "sandcrater2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4011", "4011", Path.Combine(pathToSHPs, "rifleicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4012", "4012", Path.Combine(pathToSHPs, "bazookaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4013", "4013", Path.Combine(pathToSHPs, "engineericon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4014", "4014", Path.Combine(pathToSHPs, "thumpericon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4015", "4015", Path.Combine(pathToSHPs, "sardaukaricon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4016", "4016", Path.Combine(pathToSHPs, "trikeicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4017", "4017", Path.Combine(pathToSHPs, "raidericon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4018", "4018", Path.Combine(pathToSHPs, "quadicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4019", "4019", Path.Combine(pathToSHPs, "harvestericon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4020", "4020", Path.Combine(pathToSHPs, "combataicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4021", "4021", Path.Combine(pathToSHPs, "combathicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4022", "4022", Path.Combine(pathToSHPs, "combatoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4023", "4023", Path.Combine(pathToSHPs, "mcvicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4024", "4024", Path.Combine(pathToSHPs, "missiletankicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4025", "4025", Path.Combine(pathToSHPs, "deviatortankicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4026", "4026", Path.Combine(pathToSHPs, "siegetankicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4027", "4027", Path.Combine(pathToSHPs, "sonictankicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4028", "4028", Path.Combine(pathToSHPs, "devasticon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4029", "4029", Path.Combine(pathToSHPs, "carryallicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4030", "4030", Path.Combine(pathToSHPs, "carryallicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4031", "4031", Path.Combine(pathToSHPs, "orniicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4032", "4032", Path.Combine(pathToSHPs, "fremenicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4033", "4033", Path.Combine(pathToSHPs, "fremenicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4034", "4034", Path.Combine(pathToSHPs, "saboteuricon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4035", "4035", Path.Combine(pathToSHPs, "deathhandicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4036", "4036", Path.Combine(pathToSHPs, "rifleicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4037", "4037", Path.Combine(pathToSHPs, "bazookaicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4038", "4038", Path.Combine(pathToSHPs, "engineericon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4039", "4039", Path.Combine(pathToSHPs, "thumpericon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4040", "4040", Path.Combine(pathToSHPs, "sardaukaricon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4041", "4041", Path.Combine(pathToSHPs, "trikeicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4042", "4042", Path.Combine(pathToSHPs, "raidericon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4043", "4043", Path.Combine(pathToSHPs, "quadicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4044", "4044", Path.Combine(pathToSHPs, "harvestericon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4045", "4045", Path.Combine(pathToSHPs, "combataicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4046", "4046", Path.Combine(pathToSHPs, "conyardaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4047", "4047", Path.Combine(pathToSHPs, "conyardhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4048", "4048", Path.Combine(pathToSHPs, "conyardoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4049", "4049", Path.Combine(pathToSHPs, "conyardaicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4050", "4050", Path.Combine(pathToSHPs, "4plateaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4051", "4051", Path.Combine(pathToSHPs, "4platehicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4052", "4052", Path.Combine(pathToSHPs, "4plateoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4053", "4053", Path.Combine(pathToSHPs, "6plateaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4054", "4054", Path.Combine(pathToSHPs, "6platehicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4055", "4055", Path.Combine(pathToSHPs, "6plateoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4056", "4056", Path.Combine(pathToSHPs, "pwraicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4057", "4057", Path.Combine(pathToSHPs, "pwrhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4058", "4058", Path.Combine(pathToSHPs, "pwroicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4059", "4059", Path.Combine(pathToSHPs, "barraicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4060", "4060", Path.Combine(pathToSHPs, "barrhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4061", "4061", Path.Combine(pathToSHPs, "barroicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4062", "4062", Path.Combine(pathToSHPs, "orniicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4063", "4063", Path.Combine(pathToSHPs, "wallaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4064", "4064", Path.Combine(pathToSHPs, "wallhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4065", "4065", Path.Combine(pathToSHPs, "walloicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4066", "4066", Path.Combine(pathToSHPs, "refaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4067", "4067", Path.Combine(pathToSHPs, "refhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4068", "4068", Path.Combine(pathToSHPs, "refoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4069", "4069", Path.Combine(pathToSHPs, "guntoweraicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4070", "4070", Path.Combine(pathToSHPs, "guntowerhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4071", "4071", Path.Combine(pathToSHPs, "guntoweroicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4072", "4072", Path.Combine(pathToSHPs, "radaraicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4073", "4073", Path.Combine(pathToSHPs, "radarhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4074", "4074", Path.Combine(pathToSHPs, "radaroicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4075", "4075", Path.Combine(pathToSHPs, "rockettoweraicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4076", "4076", Path.Combine(pathToSHPs, "rockettowerhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4077", "4077", Path.Combine(pathToSHPs, "rockettoweroicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4078", "4078", Path.Combine(pathToSHPs, "hightechaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4079", "4079", Path.Combine(pathToSHPs, "hightechhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4080", "4080", Path.Combine(pathToSHPs, "hightechoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4081", "4081", Path.Combine(pathToSHPs, "lightaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4082", "4082", Path.Combine(pathToSHPs, "lighthicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4083", "4083", Path.Combine(pathToSHPs, "lightoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4084", "4084", Path.Combine(pathToSHPs, "siloaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4085", "4085", Path.Combine(pathToSHPs, "silohicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4086", "4086", Path.Combine(pathToSHPs, "silooicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4087", "4087", Path.Combine(pathToSHPs, "heavyaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4088", "4088", Path.Combine(pathToSHPs, "heavyhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4089", "4089", Path.Combine(pathToSHPs, "heavyoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4090", "4090", Path.Combine(pathToSHPs, "orniicon3") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4091", "4091", Path.Combine(pathToSHPs, "heavyhicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4092", "4092", Path.Combine(pathToSHPs, "starportaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4093", "4093", Path.Combine(pathToSHPs, "starporthicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4094", "4094", Path.Combine(pathToSHPs, "starportoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4095", "4095", Path.Combine(pathToSHPs, "orniicon4") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4096", "4096", Path.Combine(pathToSHPs, "repairaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4097", "4097", Path.Combine(pathToSHPs, "repairhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4098", "4098", Path.Combine(pathToSHPs, "repairoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4099", "4099", Path.Combine(pathToSHPs, "researchaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4100", "4100", Path.Combine(pathToSHPs, "researchhicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4101", "4101", Path.Combine(pathToSHPs, "researchoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4102", "4102", Path.Combine(pathToSHPs, "palaceaicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4103", "4103", Path.Combine(pathToSHPs, "palacehicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4104", "4104", Path.Combine(pathToSHPs, "palaceoicon") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4105", "4105", Path.Combine(pathToSHPs, "orniicon5") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4106", "4106", Path.Combine(pathToSHPs, "radaraicon2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4107", "4107", Path.Combine(pathToSHPs, "radaraicon3") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "4108", "4108", Path.Combine(pathToSHPs, "conyardaicon3") }, + new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BASE"), "--tileset" }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "748", "749", Path.Combine(pathToSHPs, "spice0") }, new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBAT.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BAT"), "--tileset" }, @@ -183,83 +86,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater2.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater1.png"), "32" }, new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater2.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rifleicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "bazookaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "engineericon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "thumpericon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sardaukaricon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "trikeicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "raidericon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "quadicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "harvestericon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combataicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combathicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "combatoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "mcvicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "missiletankicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "deviatortankicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "siegetankicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sonictankicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "devasticon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "carryallicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "orniicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "fremenicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "saboteuricon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "deathhandicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conyardaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conyardhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "conyardoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "4plateaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "4platehicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "4plateoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "6plateaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "6platehicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "6plateoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "pwraicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "pwrhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "pwroicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barraicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barrhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "barroicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wallaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "wallhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "walloicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "refaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "refhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "refoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "guntoweraicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "guntowerhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "guntoweroicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "radaraicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "radarhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "radaroicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rockettoweraicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rockettowerhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rockettoweroicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "hightechaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "hightechhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "hightechoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lightaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lighthicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "lightoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "siloaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "silohicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "silooicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavyaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavyhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "heavyoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starportaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starporthicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "starportoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repairaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repairhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "repairoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researchaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researchhicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "researchoicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palaceaicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palacehicon.png"), "60" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "palaceoicon.png"), "60" }, new string[] { "--shp", Path.Combine(pathToSHPs, "spice0.png"), "32" }, }; diff --git a/OpenRA.Mods.RA/SupportPowers/SupportPower.cs b/OpenRA.Mods.RA/SupportPowers/SupportPower.cs index e7fecd849e..2580a5769f 100755 --- a/OpenRA.Mods.RA/SupportPowers/SupportPower.cs +++ b/OpenRA.Mods.RA/SupportPowers/SupportPower.cs @@ -17,7 +17,7 @@ namespace OpenRA.Mods.RA public abstract class SupportPowerInfo : ITraitInfo { public readonly int ChargeTime = 0; - public readonly string Image = null; + public readonly string Icon = null; public readonly string Description = ""; public readonly string LongDesc = ""; public readonly bool AllowMultiple = false; diff --git a/OpenRA.Mods.RA/Widgets/ObserverSupportPowerIconsWidget.cs b/OpenRA.Mods.RA/Widgets/ObserverSupportPowerIconsWidget.cs index 5b1a03aca7..ea2b607338 100644 --- a/OpenRA.Mods.RA/Widgets/ObserverSupportPowerIconsWidget.cs +++ b/OpenRA.Mods.RA/Widgets/ObserverSupportPowerIconsWidget.cs @@ -20,7 +20,7 @@ namespace OpenRA.Mods.RA.Widgets public class ObserverSupportPowerIconsWidget : Widget { public Func GetPlayer; - Dictionary iconSprites; + Animation icon; World world; WorldRenderer worldRenderer; Dictionary clocks; @@ -29,21 +29,18 @@ namespace OpenRA.Mods.RA.Widgets public ObserverSupportPowerIconsWidget(World world, WorldRenderer worldRenderer) : base() { - iconSprites = Rules.Info.Values.SelectMany(u => u.Traits.WithInterface()) - .Select(u => u.Image).Distinct() - .ToDictionary( - u => u, - u => Game.modData.SpriteLoader.LoadAllSprites(u)[0]); + this.world = world; this.worldRenderer = worldRenderer; clocks = new Dictionary(); + icon = new Animation("icon"); } protected ObserverSupportPowerIconsWidget(ObserverSupportPowerIconsWidget other) : base(other) { GetPlayer = other.GetPlayer; - iconSprites = other.iconSprites; + icon = other.icon; world = other.world; worldRenderer = other.worldRenderer; clocks = other.clocks; @@ -68,12 +65,12 @@ namespace OpenRA.Mods.RA.Widgets foreach (var power in powers) { var item = power.a.Value; - if (item == null || item.Info == null || item.Info.Image == null) + if (item == null || item.Info == null || item.Info.Icon == null) continue; - var sprite = iconSprites[item.Info.Image]; - var size = sprite.size / new float2(2, 2); + icon.Play(item.Info.Icon); + var size = icon.Image.size / new float2(2, 2); var location = new float2(RenderBounds.Location) + new float2(power.i * (int)size.Length, 0); - WidgetUtils.DrawSHP(sprite, location, worldRenderer, size); + WidgetUtils.DrawSHP(icon.Image, location, worldRenderer, size); var clock = clocks[power.a.Key]; clock.PlayFetchIndex("idle", diff --git a/OpenRA.Mods.RA/Widgets/SupportPowerBinWidget.cs b/OpenRA.Mods.RA/Widgets/SupportPowerBinWidget.cs index 52b2fc5768..c33529618d 100755 --- a/OpenRA.Mods.RA/Widgets/SupportPowerBinWidget.cs +++ b/OpenRA.Mods.RA/Widgets/SupportPowerBinWidget.cs @@ -23,7 +23,7 @@ namespace OpenRA.Mods.RA.Widgets public string ReadyText = ""; public string HoldText = ""; - Dictionary spsprites; + Animation icon; Animation clock; readonly List>> buttons = new List>>(); @@ -41,12 +41,7 @@ namespace OpenRA.Mods.RA.Widgets { base.Initialize(args); - spsprites = Rules.Info.Values.SelectMany( u => u.Traits.WithInterface() ) - .Select(u => u.Image).Distinct() - .ToDictionary( - u => u, - u => Game.modData.SpriteLoader.LoadAllSprites(u)[0]); - + icon = new Animation("icon"); clock = new Animation("clock"); } @@ -88,7 +83,7 @@ namespace OpenRA.Mods.RA.Widgets WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-middle"), new float2(rectBounds.X, rectBounds.Y + i * 51)); WidgetUtils.DrawRGBA(WidgetUtils.GetChromeImage(world, "specialbin-bottom"), new float2(rectBounds.X, rectBounds.Y + numPowers * 51)); - // Hack Hack Hack + // HACK: Hack Hack Hack rectBounds.Width = 69; rectBounds.Height = 10 + numPowers * 51 + 21; @@ -96,7 +91,7 @@ namespace OpenRA.Mods.RA.Widgets foreach (var kv in powers) { var sp = kv.Value; - var image = spsprites[sp.Info.Image]; + icon.Play(sp.Info.Icon); var drawPos = new float2(rectBounds.X + 5, y); var rect = new Rectangle(rectBounds.X + 5, y, 64, 48); @@ -142,7 +137,7 @@ namespace OpenRA.Mods.RA.Widgets } } - WidgetUtils.DrawSHP(image, drawPos, worldRenderer); + WidgetUtils.DrawSHP(icon.Image, drawPos, worldRenderer); clock.PlayFetchIndex("idle", () => sp.TotalTime == 0 ? clock.CurrentSequence.Length - 1 : (sp.TotalTime - sp.RemainingTime) diff --git a/mods/cnc/rules/structures.yaml b/mods/cnc/rules/structures.yaml index 15884f469a..1f71570662 100644 --- a/mods/cnc/rules/structures.yaml +++ b/mods/cnc/rules/structures.yaml @@ -373,7 +373,7 @@ HQ: DetectCloaked: Range: 8 AirstrikePower: - Image: bombicnh + Icon: airstrike ChargeTime: 180 Description: Air Strike LongDesc: Deploy an aerial napalm strike.\nBurns buildings and infantry along a line. @@ -434,7 +434,7 @@ EYE: DetectCloaked: Range: 8 IonCannonPower: - Image: ionicnh + Icon: ioncannon ChargeTime: 180 Description: Ion Cannon LongDesc: Initiate an Ion Cannon strike.\nApplies instant damage to a small area. @@ -469,7 +469,7 @@ TMPL: Range: 6 Bib: NukePower: - Image: atomicnh + Icon: abomb ChargeTime: 300 Description: Nuclear Strike LongDesc: Launch a tactical nuke.\nApplies heavy damage over a large area. diff --git a/mods/cnc/sequences/misc.yaml b/mods/cnc/sequences/misc.yaml index 0617455d36..7328ce4543 100644 --- a/mods/cnc/sequences/misc.yaml +++ b/mods/cnc/sequences/misc.yaml @@ -296,4 +296,12 @@ poweroff: offline: Start: 0 Length: * - Tick: 160 \ No newline at end of file + Tick: 160 + +icon: + airstrike: bombicnh + Start: 0 + ioncannon: ionicnh + Start: 0 + abomb: atomicnh + Start: 0 \ No newline at end of file diff --git a/mods/d2k/rules/atreides.yaml b/mods/d2k/rules/atreides.yaml index 5f7a328a2b..a1e81b9751 100644 --- a/mods/d2k/rules/atreides.yaml +++ b/mods/d2k/rules/atreides.yaml @@ -42,7 +42,7 @@ PALACEA: Buildable: Owner: atreides AirstrikePower: - Image: orniicon + Icon: ornistrike Description: Air Strike ChargeTime: 180 LongDesc: Ornithopter drops a load of parachuted\nbombs on your target diff --git a/mods/d2k/rules/harkonnen.yaml b/mods/d2k/rules/harkonnen.yaml index f81561214c..dd5732eab5 100644 --- a/mods/d2k/rules/harkonnen.yaml +++ b/mods/d2k/rules/harkonnen.yaml @@ -74,7 +74,7 @@ PALACEH: Tooltip: Description: Provides elite infantry\n Special Ability: Death Hand Missile NukePower: - Image: deathhandicon + Icon: deathhand ChargeTime: 300 Description: Death Hand LongDesc: Launches a nuclear missile at a target location diff --git a/mods/d2k/rules/ordos.yaml b/mods/d2k/rules/ordos.yaml index 2afd63f80e..94843403dd 100644 --- a/mods/d2k/rules/ordos.yaml +++ b/mods/d2k/rules/ordos.yaml @@ -71,7 +71,7 @@ PALACEO: Buildable: Owner: ordos AirstrikePower: - Image: orniicon + Icon: ornistrike Description: Air Strike ChargeTime: 180 LongDesc: Ornithopter drops a load of parachuted\nbombs on your target diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 16cda12cd0..7781258ef5 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -543,7 +543,7 @@ WALL: Name: IX Research Center Description: Unlocks experimental tanks\n Special Ability: Carryall Combat Drop ParatroopersPower: - Image: carryallicon + Icon: paratroopers UnitType: carryall.infantry FlareTime: 0 ChargeTime: 180 diff --git a/mods/d2k/sequences/aircraft.yaml b/mods/d2k/sequences/aircraft.yaml index c98a23e5fc..bdbf974858 100644 --- a/mods/d2k/sequences/aircraft.yaml +++ b/mods/d2k/sequences/aircraft.yaml @@ -5,6 +5,10 @@ carryall: unload: DATA.R8 Start: 1923 Facings: -32 + icon: DATA.R8 + Start: 4029 + Offset: -30,-24 + orni: idle: DATA.R8 @@ -13,6 +17,9 @@ orni: Length: 3 Tick: 120 Transpose: true + icon: DATA.R8 + Start: 4031 + Offset: -30,-24 frigate: idle: DATA.R8 diff --git a/mods/d2k/sequences/misc.yaml b/mods/d2k/sequences/misc.yaml index 71c1c40a9b..e9d1097590 100644 --- a/mods/d2k/sequences/misc.yaml +++ b/mods/d2k/sequences/misc.yaml @@ -217,3 +217,14 @@ doubleblast: idle: DATA.R8 Start: 3279 Facings: -16 + +icon: + paratroopers: DATA.R8 + Start: 4029 + Offset: -30,-24 + ornistrike: DATA.R8 + Start: 4031 + Offset: -30,-24 + deathhand: DATA.R8 + Start: 4035 + Offset: -30,-24 \ No newline at end of file diff --git a/mods/ra/rules/structures.yaml b/mods/ra/rules/structures.yaml index 3f9558178a..63e7951f0d 100644 --- a/mods/ra/rules/structures.yaml +++ b/mods/ra/rules/structures.yaml @@ -24,7 +24,7 @@ MSLO: Range: 5 IronCurtainable: NukePower: - Image: atomicon + Icon: abomb ChargeTime: 540 Description: Atom Bomb LongDesc: Launches a devastating atomic bomb\nat a target location. @@ -213,7 +213,7 @@ IRON: Range: 10 IronCurtainable: IronCurtainPower: - Image: infxicon + Icon: invuln ChargeTime: 120 Description: Invulnerability LongDesc: Makes a group of units invulnerable\nfor 20 seconds. @@ -251,7 +251,7 @@ PDOX: Range: 10 IronCurtainable: ChronoshiftPower: - Image: warpicon + Icon: chrono ChargeTime: 120 Description: Chronoshift LongDesc: Teleports a group of units across\nthe map for 20 seconds. @@ -851,7 +851,7 @@ ATEK: Bib: IronCurtainable: GpsPower: - Image: gpssicon + Icon: gps OneShot: yes ChargeTime: 480 Description: GPS Satellite @@ -1074,14 +1074,14 @@ AFLD: Reservable: IronCurtainable: SpyPlanePower: - Image: smigicon + Icon: spyplane ChargeTime: 180 Description: Spy Plane LongDesc: Reveals an area of the map. SelectTargetSound: slcttgt1.aud EndChargeSound: spypln1.aud ParatroopersPower: - Image: pinficon + Icon: paratroopers ChargeTime: 360 Description: Paratroopers LongDesc: A Badger drops a squad of Riflemen \nanywhere on the map @@ -1307,6 +1307,7 @@ FACF: Hotkey: c Queue: Defense Tooltip: + Icon: fake-icon Name: Fake Construction Yard Description: Looks like a Construction Yard. Building: @@ -1336,6 +1337,7 @@ WEAF: Hotkey: x Queue: Defense Tooltip: + Icon: fake-icon Name: Fake War Factory Description: Looks like a War Factory. Building: @@ -1366,6 +1368,7 @@ SYRF: Hotkey: z Queue: Defense Tooltip: + Icon: fake-icon Name: Fake Shipyard Description: Looks like a Shipyard TargetableBuilding: @@ -1399,6 +1402,7 @@ SPEF: Hotkey: z Queue: Defense Tooltip: + Icon: fake-icon Name: Fake Sub Pen Description: Looks like a Sub Pen Building: @@ -1422,6 +1426,7 @@ DOMF: Valued: Cost: 50 Tooltip: + Icon: fake-icon Name: Fake Radar Dome Description: Looks like a Radar Dome Buildable: diff --git a/mods/ra/sequences/misc.yaml b/mods/ra/sequences/misc.yaml index f45fe3f9ed..3b34749e0f 100644 --- a/mods/ra/sequences/misc.yaml +++ b/mods/ra/sequences/misc.yaml @@ -396,3 +396,17 @@ gpsdot: Start: 5 Structure: Start: 6 + +icon: + abomb: atomicon + Start: 0 + invuln: infxicon + Start: 0 + chrono: warpicon + Start: 0 + spyplane: smigicon + Start: 0 + paratroopers: pinficon + Start: 0 + gps: gpssicon + Start: 0 diff --git a/mods/ra/sequences/structures.yaml b/mods/ra/sequences/structures.yaml index e43eda7f1a..2d9e9e2426 100644 --- a/mods/ra/sequences/structures.yaml +++ b/mods/ra/sequences/structures.yaml @@ -62,6 +62,8 @@ fact: Length: * icon: facticon Start: 0 + fake-icon: facficon + Start: 0 proc: idle: @@ -180,6 +182,8 @@ dome: Length: * icon: domeicon Start: 0 + fake-icon: domficon + Start: 0 atek: idle: @@ -236,6 +240,8 @@ weap: Length: * icon: weapicon Start: 0 + fake-icon: weaficon + Start: 0 hpad: idle: @@ -298,6 +304,8 @@ spen: Length: * icon: spenicon Start: 0 + fake-icon: speficon + Start: 0 syrd: idle: @@ -309,6 +317,8 @@ syrd: Length: * icon: syrdicon Start: 0 + fake-icon: syrficon + Start: 0 fix: idle: From a831b8984a5346cc0ce5b3bc708ff40d1519ed39 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 12 Aug 2013 16:24:20 +0200 Subject: [PATCH 11/44] port map actors to DATA.R8 sequences --- .../Widgets/Logic/D2kExtractGameFilesLogic.cs | 156 ------------------ mods/d2k/sequences/map.yaml | 75 ++------- mods/d2k/sequences/structures.yaml | 2 + 3 files changed, 18 insertions(+), 215 deletions(-) delete mode 100644 OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs deleted file mode 100644 index 3c17aec827..0000000000 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kExtractGameFilesLogic.cs +++ /dev/null @@ -1,156 +0,0 @@ -#region Copyright & License Information -/* - * Copyright 2007-2012 The OpenRA Developers (see AUTHORS) - * This file is part of OpenRA, which is free software. It is made - * available to you under the terms of the GNU General Public License - * as published by the Free Software Foundation. For more information, - * see COPYING. - */ -#endregion - -using System; -using System.Diagnostics; -using System.IO; -using System.Linq; -using System.Threading; -using OpenRA.FileFormats; -using OpenRA.FileFormats.Graphics; -using OpenRA.Utility; -using OpenRA.Widgets; - -namespace OpenRA.Mods.D2k.Widgets.Logic -{ - public class D2kExtractGameFilesLogic - { - Widget panel; - ProgressBarWidget progressBar; - LabelWidget statusLabel; - Action continueLoading; - ButtonWidget retryButton, backButton; - Widget extractingContainer, copyFilesContainer; - - [ObjectCreator.UseCtor] - public D2kExtractGameFilesLogic(Widget widget, Action continueLoading) - { - panel = widget.Get("EXTRACT_GAMEFILES_PANEL"); - progressBar = panel.Get("PROGRESS_BAR"); - statusLabel = panel.Get("STATUS_LABEL"); - - backButton = panel.Get("BACK_BUTTON"); - backButton.OnClick = Ui.CloseWindow; - - retryButton = panel.Get("RETRY_BUTTON"); - retryButton.OnClick = Extract; - - extractingContainer = panel.Get("EXTRACTING"); - copyFilesContainer = panel.Get("COPY_FILES"); - - Extract(); - this.continueLoading = continueLoading; - } - - void Extract() - { - backButton.IsDisabled = () => true; - retryButton.IsDisabled = () => true; - copyFilesContainer.IsVisible = () => false; - extractingContainer.IsVisible = () => true; - - var pathToDataR8 = Path.Combine(Platform.SupportDir, "Content/d2k/DATA.R8"); - var pathToPalette = "mods/d2k/bits/d2k.pal"; - var pathToSHPs = Path.Combine(Platform.SupportDir, "Content/d2k/SHPs"); - var pathToTilesets = Path.Combine(Platform.SupportDir, "Content/d2k/Tilesets"); - - var extractGameFiles = new string[][] - { - new string[] { "--r8", pathToDataR8, pathToPalette, "102", "105", Path.Combine(pathToSHPs, "crates") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "107", "109", Path.Combine(pathToSHPs, "spicebloom") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "114", "129", Path.Combine(pathToSHPs, "rockcrater1") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "130", "145", Path.Combine(pathToSHPs, "rockcrater2") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "146", "161", Path.Combine(pathToSHPs, "sandcrater1") }, - new string[] { "--r8", pathToDataR8, pathToPalette, "162", "177", Path.Combine(pathToSHPs, "sandcrater2") }, - - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BASE"), "--tileset" }, - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBASE.R8"), pathToPalette, "748", "749", Path.Combine(pathToSHPs, "spice0") }, - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBAT.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BAT"), "--tileset" }, - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXBGBS.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "BGBS"), "--tileset" }, - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXICE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "ICE"), "--tileset" }, - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXTREE.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "TREE"), "--tileset" }, - new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXWAST.R8"), pathToPalette, "0", "799", Path.Combine(pathToTilesets, "WAST"), "--tileset" }, - ////new string[] { "--r8", Path.Combine(Platform.SupportDir, "Content/d2k/BLOXXMAS.R8"), PathToPalette, "0", "799", Path.Combine(PathToTilesets, "XMAS"), "--tileset" }, - }; - - var shpToCreate = new string[][] - { - new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater1.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "rockcrater2.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater1.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "sandcrater2.png"), "32" }, - new string[] { "--shp", Path.Combine(pathToSHPs, "spice0.png"), "32" }, - }; - - var onError = (Action)(s => Game.RunAfterTick(() => - { - statusLabel.GetText = () => "Error: " + s; - backButton.IsDisabled = () => false; - retryButton.IsDisabled = () => false; - })); - - var t = new Thread(_ => - { - try - { - for (int i = 0; i < extractGameFiles.Length; i++) - { - progressBar.Percentage = i * 100 / extractGameFiles.Count(); - statusLabel.GetText = () => "Extracting..."; - Utility.Command.ConvertR8ToPng(extractGameFiles[i]); - } - - for (int i = 0; i < shpToCreate.Length; i++) - { - progressBar.Percentage = i * 100 / shpToCreate.Count(); - statusLabel.GetText = () => "Converting..."; - Utility.Command.ConvertPngToShp(shpToCreate[i]); - File.Delete(shpToCreate[i][1]); - } - - statusLabel.GetText = () => "Building tilesets..."; - int c = 0; - string[] TilesetArray = new string[] { "BASE", "BAT", "BGBS", "ICE", "TREE", "WAST" }; - foreach (string set in TilesetArray) - { - progressBar.Percentage = c * 100 / TilesetArray.Count(); - File.Delete(Path.Combine(pathToTilesets, "{0}.tsx".F(set))); - File.Copy("mods/d2k/tilesets/{0}.tsx".F(set), Path.Combine(pathToTilesets, "{0}.tsx".F(set))); - - // TODO: this is ugly: a GUI will open and close immediately after some delay - Process p = new Process(); - ProcessStartInfo TilesetBuilderProcessStartInfo = new ProcessStartInfo("OpenRA.TilesetBuilder.exe", Path.Combine(pathToTilesets, "{0}.png".F(set)) + " 32 --export Content/d2k/Tilesets"); - p.StartInfo = TilesetBuilderProcessStartInfo; - p.Start(); - p.WaitForExit(); - File.Delete(Path.Combine(pathToTilesets, "{0}.tsx".F(set))); - File.Delete(Path.Combine(pathToTilesets, "{0}.png".F(set))); - File.Delete(Path.Combine(pathToTilesets, "{0}.yaml".F(set.ToLower()))); - File.Delete(Path.Combine(pathToTilesets, "{0}.pal".F(set.ToLower()))); - c++; - } - - Game.RunAfterTick(() => - { - progressBar.Percentage = 100; - statusLabel.GetText = () => "Extraction and conversion complete."; - backButton.IsDisabled = () => false; - continueLoading(); - }); - } - catch - { - onError("Installation failed"); - } - }) { IsBackground = true }; - t.Start(); - } - } -} diff --git a/mods/d2k/sequences/map.yaml b/mods/d2k/sequences/map.yaml index 49f56711f4..f2e820645a 100644 --- a/mods/d2k/sequences/map.yaml +++ b/mods/d2k/sequences/map.yaml @@ -1,67 +1,24 @@ -crate: - idle: crates - Start: 0 +crate: + idle: DATA.R8 + Start: 102 ZOffset: -511 - land: crates - Start: 0 + Offset: -16,-16 + land: DATA.R8 + Start: 102 ZOffset: -511 + Offset: -16,-16 spicebloom: - make: - Start: 0 + make: DATA.R8 + Start: 107 Length: 3 - active: - Start: 2 + Offset: -16,-16 + active: DATA.R8 + Start: 109 Length: 1 ZOffset: -511 - idle: - Start: 2 + Offset: -16,-16 + idle: DATA.R8 + Start: 109 ZOffset: -511 - -sandworm: - stand: wormsigns1 - Start: 0 - Length: * - run: wormsigns2 - Start: 0 - Facings: 15 - Length: 1 - die1: wormsigns3 - Start: 0 - Length: 1 - die2: wormsigns3 - Start: 0 - Length: 1 - die3: wormsigns3 - Start: 0 - Length: 1 - die4: wormsigns3 - Start: 0 - Length: 1 - die5: wormsigns3 - Start: 0 - Length: 1 - die6: wormsigns3 - Start: 0 - Length: 1 - die-crushed: wormsigns3 - Start: 0 - Length: 1 - Tick: 1600 - wormattack: wormjaw - Start: 0 - Length: 15 - -plates: - idle: - Start: 0 - Length: 6 - scratched-idle: - Start: 0 - Length: 6 - damaged-idle: - Start: 0 - Length: 6 - critical-idle: - Start: 0 - Length: 6 \ No newline at end of file + Offset: -16,-16 \ No newline at end of file diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index bfb8c8e5b1..92d5f2731d 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -1,3 +1,5 @@ +# read bibs from DATA.R8 + walla: idle: DATA.R8 Frames: 2527, 2530, 2528, 2538, 2531, 2532, 2542, 2535, 2529, 2539, 2533, 2534, 2540, 2536, 2537, 2541 From e28bbf1f908976f3046923a59cf7c9f18c5f0cbd Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 12 Aug 2013 16:24:48 +0200 Subject: [PATCH 12/44] load DATA.R8 per default and not mouse.shp --- mods/d2k/chrome/assetbrowser.yaml | 203 ++++++++++++++++++++++++++++++ mods/d2k/mod.yaml | 2 +- 2 files changed, 204 insertions(+), 1 deletion(-) create mode 100644 mods/d2k/chrome/assetbrowser.yaml diff --git a/mods/d2k/chrome/assetbrowser.yaml b/mods/d2k/chrome/assetbrowser.yaml new file mode 100644 index 0000000000..65289f5767 --- /dev/null +++ b/mods/d2k/chrome/assetbrowser.yaml @@ -0,0 +1,203 @@ +Background@ASSETBROWSER_BG: + Logic:AssetBrowserLogic + X:(WINDOW_RIGHT - WIDTH)/2 + Y:(WINDOW_BOTTOM - HEIGHT)/2 + Width:700 + Height:410 + Children: + Label@ASSETBROWSER_TITLE: + X:0 + Y:20 + Width:PARENT_RIGHT + Height:25 + Text:Game Asset Viewer & Converter + Align:Center + Font:Bold + DropDownButton@SOURCE_SELECTOR: + X:40 + Y:45 + Width:160 + Height:25 + Font:Bold + Text:Folders + ScrollPanel@ASSET_LIST: + X:40 + Y:80 + Width:160 + Height:190 + Children: + ScrollItem@ASSET_TEMPLATE: + Width:PARENT_RIGHT-27 + Height:25 + X:2 + Y:0 + Visible:false + Children: + Label@TITLE: + X:10 + Width:PARENT_RIGHT-20 + Height:25 + TextField@FILENAME_INPUT: + X:40 + Y:280 + Width:140 + Height:25 + Button@LOAD_BUTTON: + X:40 + Y:310 + Width:140 + Height:25 + Text:Load + Font:Bold + Key:return + Label@PREVIEW_TITLE: + X:320 + Y:45 + Width:PARENT_RIGHT + Height:25 + Text:Preview + Font:Bold + Background@SPRITE_BG: + X:220 + Y:80 + Width:250 + Height:250 + Background:dialog4 + Children: + ShpImage@SPRITE: + X:4 + Y:4 + Width:246 + Height:246 + Image:DATA.R8 + Palette:colorpicker + Label@ACTIONS_TITLE: + X:PARENT_RIGHT - 150 + Y:45 + Width:PARENT_RIGHT + Height:25 + Text:Actions + Font:Bold + Button@EXPORT_BUTTON: + X:PARENT_RIGHT - 200 + Y:80 + Width:160 + Height:25 + Text:Selected to PNG + Font:Bold + Button@EXTRACT_BUTTON: + X:PARENT_RIGHT - 200 + Y:115 + Width:160 + Height:25 + Text:Extract all to PNG + Font:Bold + TextField@IMAGE_FILENAME_INPUT: + X:PARENT_RIGHT - 200 + Y:PARENT_BOTTOM - 235 + Width:100 + Height:25 + Text:pixelart.png + TextField@IMAGE_SIZE_INPUT: + X:PARENT_RIGHT - 90 + Y:PARENT_BOTTOM - 235 + Width:50 + Height:25 + Text:width + Button@IMPORT_BUTTON: + X:PARENT_RIGHT - 200 + Y:PARENT_BOTTOM - 200 + Width:160 + Height:25 + Text:Import from PNG + Font:Bold + Button@CLOSE_BUTTON: + X:PARENT_RIGHT - 200 + Y:PARENT_BOTTOM - 115 + Width:160 + Height:25 + Text:Close + Font:Bold + Key:escape + Container@FRAME_SELECTOR: + X:45 + Y:360 + Children: + Button@BUTTON_PREV: + X:0 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_PREV: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:prev + Button@BUTTON_PLAY: + X:35 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_PLAY: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:play + Button@BUTTON_PAUSE: + Visible: no + X:35 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_PAUSE: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:pause + Button@BUTTON_STOP: + X:70 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_STOP: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:stop + Button@BUTTON_NEXT: + X:105 + Y:0 + Width:25 + Height:25 + Children: + Image@IMAGE_NEXT: + X:0 + Y:0 + Width:25 + Height:25 + ImageCollection:music + ImageName:next + Slider@FRAME_SLIDER: + X:160 + Y:0 + Width:410 + Height:20 + MinimumValue: 0 + Label@FRAME_COUNT: + X:585 + Y:0 + Width:25 + Height:25 + Font:Bold \ No newline at end of file diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index e94aaaa4cf..36af4a4e98 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -75,7 +75,7 @@ ChromeLayout: mods/ra/chrome/cheats.yaml mods/ra/chrome/musicplayer.yaml mods/d2k/chrome/tooltips.yaml - mods/ra/chrome/assetbrowser.yaml + mods/d2k/chrome/assetbrowser.yaml mods/ra/chrome/convertassets.yaml Weapons: From 3025e3cf62cbe297c2b1c46b3a26cb76edc734e5 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Mon, 12 Aug 2013 16:25:08 +0200 Subject: [PATCH 13/44] remove dependency on mouse.shp conversions --- mods/d2k/cursors.yaml | 205 ++++++++++++++++++++++-------------------- 1 file changed, 107 insertions(+), 98 deletions(-) diff --git a/mods/d2k/cursors.yaml b/mods/d2k/cursors.yaml index a603102d8a..f3d920dcb8 100644 --- a/mods/d2k/cursors.yaml +++ b/mods/d2k/cursors.yaml @@ -5,243 +5,252 @@ Palettes: mouse.r8: d2k.pal Cursors: - mouse: mouse.r8 + mouse.r8: mouse.r8 scroll-t: start:112 - x: 12 - y: 12 + x: 24 + y: 24 scroll-tr: start: 120 - x: 12 - y: 12 + x: 24 + y: 24 scroll-r: start: 128 - x: 12 - y: 12 + x: 24 + y: 24 scroll-br: start: 136 - x: 12 - y: 12 + x: 24 + y: 24 scroll-b: start:148 - x: 12 - y: 12 + x: 24 + y: 24 scroll-bl: start:156 - x: 12 - y: 12 + x: 24 + y: 24 scroll-l: start:164 - x: 12 - y: 12 + x: 24 + y: 24 scroll-tl: start:172 - x: 12 - y: 12 + x: 24 + y: 24 scroll-t-blocked: start:180 - x: 12 - y: 12 + x: 24 + y: 24 scroll-tr-blocked: start:188 - x: 12 - y: 12 + x: 24 + y: 24 scroll-r-blocked: start:196 - x: 12 - y: 12 + x: 24 + y: 24 scroll-br-blocked: start:204 - x: 12 - y: 12 + x: 24 + y: 24 scroll-b-blocked: start:212 - x: 12 - y: 12 + x: 24 + y: 24 scroll-bl-blocked: start:220 - x: 12 - y: 12 + x: 24 + y: 24 scroll-l-blocked: start:228 - x: 12 - y: 12 + x: 24 + y: 24 scroll-tl-blocked: start:236 - x: 12 - y: 12 + x: 24 + y: 24 select: start:40 length: 8 - x: 12 - y: 12 - + x: 24 + y: 24 default: start:0 + x: 24 + y: 24 default-minimap: start:0 + x: 24 + y: 24 generic-blocked: start:24 + x: 24 + y: 24 generic-blocked-minimap: start:24 + x: 24 + y: 24 move: start:8 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 move-minimap: start:48 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 move-blocked: start:24 - x: 12 - y: 12 + x: 24 + y: 24 move-blocked-minimap: start:24 - x: 12 - y: 12 + x: 24 + y: 24 attack: start:16 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 attack-minimap: start:16 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 attackmove: start:16 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 attackmove-minimap: start:16 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 harvest: start:16 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 harvest-minimap: start:203 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 enter: start:32 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 enter-minimap: start:32 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 enter-blocked: start:104 length: 1 - x: 12 - y: 12 + x: 24 + y: 24 enter-blocked-minimap: start:104 + x: 24 + y: 24 c4: start:248 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 c4-minimap: start:248 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 guard: start:72 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 guard-minimap: start:72 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 capture: start:32 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 capture-minimap: start:32 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 ability: start:72 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 ability-minimap: start:72 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 # Cursors that need minimap variants deploy: start:96 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 deploy-blocked: start:104 length: 1 - x: 12 - y: 12 + x: 24 + y: 24 nuke: start:240 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 sell: start:80 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 sell-blocked: start:56 length: 1 - x: 12 - y: 12 + x: 24 + y: 24 repair: start:88 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 repair-blocked: start:64 length: 1 - x: 12 - y: 12 + x: 24 + y: 24 goldwrench: start:88 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 goldwrench-blocked: start:64 length: 1 - x: 12 - y: 12 + x: 24 + y: 24 move-rough: start:256 length: 8 - x: 12 - y: 12 + x: 24 + y: 24 nopower: cursor powerdown-blocked: From 6e26173f0f86199268e918beb11999a1dce765c1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 11:03:35 +0200 Subject: [PATCH 14/44] remove foreign dependencies from d2k mod entirely --- OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj | 9 -- .../Widgets/Logic/D2kInstallFromCDLogic.cs | 1 - .../Widgets/Logic/D2kInstallLogic.cs | 3 - mods/d2k/bits/rockcrater1.shp | Bin 0 -> 16830 bytes mods/d2k/bits/rockcrater2.shp | Bin 0 -> 16830 bytes mods/d2k/bits/sandcrater1.shp | Bin 0 -> 16830 bytes mods/d2k/bits/sandcrater2.shp | Bin 0 -> 16830 bytes mods/d2k/bits/spice0.shp | Bin 0 -> 2130 bytes mods/d2k/chrome/gameinit.yaml | 116 ++---------------- mods/d2k/mod.yaml | 9 +- 10 files changed, 10 insertions(+), 128 deletions(-) create mode 100644 mods/d2k/bits/rockcrater1.shp create mode 100644 mods/d2k/bits/rockcrater2.shp create mode 100644 mods/d2k/bits/sandcrater1.shp create mode 100644 mods/d2k/bits/sandcrater2.shp create mode 100644 mods/d2k/bits/spice0.shp diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj index 4677860648..eff78bf6ff 100644 --- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj +++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj @@ -79,7 +79,6 @@ - @@ -91,10 +90,6 @@ copy "$(TargetPath)" "$(SolutionDir)mods/d2k/" cd "$(SolutionDir)" - - {F33337BE-CB69-4B24-850F-07D23E408DDF} - OpenRA.Utility - {0DFB103F-2962-400F-8C6D-E2C28CCBA633} OpenRA.Game @@ -103,10 +98,6 @@ cd "$(SolutionDir)" {BDAEAB25-991E-46A7-AF1E-4F0E03358DAA} OpenRA.FileFormats - - {1A8E50CC-EE32-4E57-8842-0C39C8EA7541} - OpenRA.TilesetBuilder - {4A8A43B5-A9EF-4ED0-99DD-4BAB10A0DB6E} OpenRA.Mods.RA diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs index d00498fe0a..4aa3b87da5 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallFromCDLogic.cs @@ -14,7 +14,6 @@ using System.Linq; using System.Threading; using OpenRA.FileFormats; using OpenRA.FileFormats.Graphics; -using OpenRA.Utility; using OpenRA.Widgets; namespace OpenRA.Mods.D2k.Widgets.Logic diff --git a/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallLogic.cs b/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallLogic.cs index faaf5cd925..5eaf77340f 100644 --- a/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallLogic.cs +++ b/OpenRA.Mods.D2k/Widgets/Logic/D2kInstallLogic.cs @@ -33,9 +33,6 @@ namespace OpenRA.Mods.D2k.Widgets.Logic panel.Get("COPY_BUTTON").OnClick = () => Ui.OpenWindow("INSTALL_FROMCD_PANEL", args); - panel.Get("EXTRACT_BUTTON").OnClick = () => - Ui.OpenWindow("EXTRACT_GAMEFILES_PANEL", args); - panel.Get("QUIT_BUTTON").OnClick = Game.Exit; panel.Get("MODS_BUTTON").OnClick = () => diff --git a/mods/d2k/bits/rockcrater1.shp b/mods/d2k/bits/rockcrater1.shp new file mode 100644 index 0000000000000000000000000000000000000000..1a800f2d8b5077e0b75085ccf82db5f8ff93feae GIT binary patch literal 16830 zcmeI3J*y;H8OJ*?5HZ-mL{QMcz(B#kz@WjU3I~QR7A~BT!>I|n&MAa*s7rxhu-srm z!_5{A`~(Jm0vr7d((KYjg{GSt`g=~jbX9j%&+P21J2T#%p{s7yc|Yg*KmX^YKiJ6U zNBon|UpAW;a{b%4y6Zo`-Ch6n-R}DD54!7rzSmv9^ZoAngCBO+pZ~bK{`x1~_3o$L z)%~oy{^1wh^^d>ou7Cbjcm3HYjUoNr(2?oHQMFByfuct7voZ>%vsxhQk~ z(-`ZFHR{~Uy#B^2&s*orxz6OySex1;Q7Rn^%QLgQK znAhJZZNuJa%P1CG@U}hWRvD)ls5Eg|UuG!X%Q{@H6~&dOWn-A5?FMjBU&g9DD zkEM_CW^8()K2_SKYKza7>n|2veE3*@aamsZ;U||RUwi{A>Noy;*p~WlyAe@#G?stPL6#>G~6KB>Pkv|LzMJHeIM%De%8&j8)Y+V;slSF`{wP3yM|i7r5k zh%1R5<+f{w8FXkMt>l0P1Dw|1_)Wpu3f4I5vWP455%3o+02ii}QmoLdek`mSRtHpJ zxfVff!}ha(nlCQb^`()xJ+l5w`xtu}z7FF~4o|+^b-DjnZ{uCBKS6|UC0|_6s8b#b z3!NB|Ii1YT*`&U*t%!+gS2P5t$Rq{FU@C0q`c(C3F!}iOQXFNAIIEgNM)e6~oa;*w z4xtS#Dqa~af6qT0ab(sMNS#py=bz6|KQWv>`G{Q8hzoNi$r1OBb2fEZvXgRjB5Tyu zZ;>r2VQS$3yR8+0Pm!E{02ZVXd31TGgCFGG7DIg|C+`_osHzIs=mdVc3eu<2pg^dT zkw^G({IMej5GuRXz881_fPMrUMHh&>OVjjN1>q60($o4*0A*uCUH`*sHq#n^DbjwU z?CDfLl$xFPvdo9e&9<%j-1??=3NE$4GmLFyhlAyuw8jkUKMa#Sw2c5WJ80T=T*34E zf=LO3VYECvTw_Mj0#&jZU7c|S#wKLrRnbwX>;C&<=3-(O`eDP~$!E2G_xh#Z-*o*? zqh#cPbHiK5iw!mPemO(wV=-zl}5t%veSf!ai|4e#03?ICWA+7*ryC`T|2 zZHtmA)JAr_Zvij~CIAKKAL=6(mLqe=uJ!%Xr)n%f0^e1|uJDeN$=z@qv?>y-v`Cde z7OmAj56Xwb?>n(G;0OmemDhp_I!#sOe7k9Se(#$m)Hbi4JWsaUU8)hg+_mb!(d*6* zH@2=G@{lD-vMpMrTay;jR#N~Mtc!c79;!N=3Mn8nQMspnJZlWexuVV=j&<#|PLey7 zIQJx{S~mv-ka6cvjt>ucewQQ#4KrEhKkTJR=nRpsMdXt*bGk)nq451)vz9usBGE{^ zg(7&9`a?qZ-Dxj2MOKQS2N8K@BO=dg$R5Nm5Y4%!K7IaBHnj$uk?Di7h0LwrsEtdV zZR!k>&z}g;AM8M-=Zz6)g-#Q}T z@rd@#A|iO(6P1H_JUW4zA%fU99Z`udR;gqC=BVuuW^KUqNTtZM;L4%hBt78ay#V+DDzD; zD}*B)BS+YF93eS#1Tj=1N7z?;mqm^sh){1fy%UpeP+~8dolw(pc=4-oYS*;UgUX3eO^v_fJcErr2}ht% zbfEf!3ANh>K&AUAa}tiwVE14*m^8TTS?IQy0t^-g7&!vlMeFuZWp~fAp?#IK#(MaX zl*O(vt~xqB8lb9mr;(2cgK*(c@Ao0&)W=DB;RwBCM7u(J6+#Z9l>!SNe`uMADkk$^ zD1|62J(XuO`CBV=t?iq2;)$e5kX$}D>7OQb3`~du#5;} z{dGhbnpi`G;k{U{i--^lya_}I$oWk~sPISLMuZBc{(p=JSr%==RYV8`itxv-B0{Kg zy&KSD5fNOCG1VUl;o~G&Jjel3>ZnDO@<#~jtC=Op)JumEd_FicX6+gpere#O_|2%#A{!ZITGU1tKS)+`|c8mRXK$Uqkm0rBWo*%xYo zBLs&xv!?;q9Knbm;q)2NpSTRlH62HA(dO6|DAo3;K5L>g2BsA75JisA+Z^5=+I0Wv zUE%6(9j(KE8##j59HJ;{lyI>#)oZXv zRegAXF_k5b89@TyBZ7zV<#lMQhkEZq>&wizQpVRyO)Fvocc`nw{^ROn=gOy650-qK zhkU_ew8GQ8CqPw48Zy2bZ{qpK-yJTbZ7eX}^j(jCcQ-HbBfKAoKpX-0*xa)?L4+Jl znz+%k$iiG8LMr<{cor8BL8}zt8$FBt5_; z+e{TGSF~MB8^H2tS*-;>LXD1wurS4iSOZ4)6Cx8Xdi(L+T=@~;)b7wGj@%7#%Ut^r z@YJ|dQWI7r!ib@+<{UxNB84OHp9Tg$!h|E}WQilJA_B1w0y67}K%xnLgd2!J5;`d$ zUj-4c=3}hkEk*=c>t#Q}Wx!$XN4QrrX`~fQVf-i@=UaY+QQ+4Qp=)S4AK?)Z5aD+O z5#TboOV$ygu4=mjfmaX#xvWC=#l2cXgpA)_)RGN-?OBY7U_de;Z{}J2Qixy|IKr1i z1f5)24QE7nYpsU25fKCx`p?Xd@Qot^*)o`js~iEJ;4Znv5uz{H-QWl)sg$I^_kbh3 zrHByn6sEXhHNX-2JO-?W6-21^xOJ1TW;KupeoRXeTg7U4M1(iR5h5CNB;pYfrdGp9 z5tglnE{QoB4U1NTs`A=m5+!0ZTv-h*fwZbJr7rL86-mrwBqcMeL4Na)=bl)WzPr!J zY?)aNDE%CdUe4=Msk^&-Qn4l+fp}L)#jwJXDYY%{?{taLaOMbgAVkIckdt2R^nI4y zY3GxXBc%Mm$`KIbH%{0ofoPe&zn9eNKKiIaedH~_s*G_p%OLMGS=^*W579^Lfm#x+ zGWszLv&0l@kLT!Po7|$UIIF`0EAFB5OqO5H_vz<>(`}mZU0?r2Tb7AKx~PFq#z| zNthtQuDHPwB*XlMA7O_nf6I?R3i_+~5!N^Yzkd)v!q>$SNJi-V2yYe{0J9_AVE;<_`#2GjRLMnKK!KM>_i8{|mz@x=)RRS#t=;icar}+rt y20#x}O80&QH_t~H{RrT8AR0u<<|H5C(vQ%PCGv_Kfm9%WPR;4fgYI&jkMLj1|MHpu literal 0 HcmV?d00001 diff --git a/mods/d2k/bits/rockcrater2.shp b/mods/d2k/bits/rockcrater2.shp new file mode 100644 index 0000000000000000000000000000000000000000..ce4cca6e976382c5a92708afb7bc5b95c9d3f6fc GIT binary patch literal 16830 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 K9pNLh8vX--`N-S= literal 0 HcmV?d00001 diff --git a/mods/d2k/bits/sandcrater1.shp b/mods/d2k/bits/sandcrater1.shp new file mode 100644 index 0000000000000000000000000000000000000000..326dd7d78ab7ae1441c103b37b490dd69ca580bd GIT binary patch literal 16830 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 F@P8YfbYB1f literal 0 HcmV?d00001 diff --git a/mods/d2k/bits/sandcrater2.shp b/mods/d2k/bits/sandcrater2.shp new file mode 100644 index 0000000000000000000000000000000000000000..b2c6b5c03294a57ef7c1354d4a5afdce8f18213e GIT binary patch literal 16830 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 WZ}R`12=YA Date: Mon, 12 Aug 2013 16:41:41 +0200 Subject: [PATCH 15/44] remove utility dependency on d2k DLL partly fixes #3298 --- Makefile | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/Makefile b/Makefile index 7a35d7ded2..e23ac09193 100644 --- a/Makefile +++ b/Makefile @@ -152,8 +152,8 @@ mod_cnc: $(mod_cnc_TARGET) mod_d2k_SRCS := $(shell find OpenRA.Mods.D2k/ -iname '*.cs') mod_d2k_TARGET = mods/d2k/OpenRA.Mods.D2k.dll mod_d2k_KIND = library -mod_d2k_DEPS = $(STD_MOD_DEPS) $(mod_ra_TARGET) $(mod_cnc_TARGET) $(utility_TARGET) -mod_d2k_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_ra_TARGET) $(utility_TARGET) +mod_d2k_DEPS = $(STD_MOD_DEPS) $(mod_ra_TARGET) $(mod_cnc_TARGET) +mod_d2k_LIBS = $(COMMON_LIBS) $(STD_MOD_LIBS) $(mod_ra_TARGET) mod_d2k_EXTRA_CMDS = mono --debug RALint.exe d2k PROGRAMS += mod_d2k mod_d2k: $(mod_d2k_TARGET) From d1f3ad81a6f5b15db877295122955f27ae3c98d8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 14 Aug 2013 18:01:15 +0200 Subject: [PATCH 16/44] remove unused allyrepair wrong palette anyway --- mods/d2k/bits/allyrepair.shp | Bin 3635 -> 0 bytes 1 file changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mods/d2k/bits/allyrepair.shp diff --git a/mods/d2k/bits/allyrepair.shp b/mods/d2k/bits/allyrepair.shp deleted file mode 100644 index baeb7f384db97ea10ada2a5dbd4bd0695289129e..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3635 zcmeH}L2leI3`GqT5egJ&)&X*h+@Xi*9SqDa=g2X%(lv4nYom4lCq>$#<;4up-3XYG zM$aTaX-3h@!tuVm$^2(oZd|Ff1Uewv&l&51fz)Xs!^$JO zC<#y*yqPm)5iN8^Z3hjze&p5Dn&m8eC`V+fpTc@UOye+LGt~cFEVE_2P)9?o8vA9} zzmt1bpZ($6J&uN#(H)q5${eSz;Zs0t7ZU#fm0f@s9bQOFgKSc+|dSGZH>$>Yy18r6`a+bPI*zQb|PIP9C z+~v7`=GD`RIZGiK1?7kg_K<_%aDIXaD~Hnsqbk(@R4i3Xm&an+Zl4jAab5q2S(0(* z;@3lsEN>$?G$DEA$brgFAU5(8<^opRlr4Gf2!W$xV}*eu1>7pO*R|FFv#r?}8{=kMq%pdFr&=fvT Date: Thu, 15 Aug 2013 07:57:39 +0200 Subject: [PATCH 17/44] removed legacy 90mm SHP trails they are too big --- mods/d2k/bits/90mm.shp | Bin 2163 -> 0 bytes mods/d2k/sequences/misc.yaml | 5 ----- mods/d2k/weapons.yaml | 3 --- 3 files changed, 8 deletions(-) delete mode 100644 mods/d2k/bits/90mm.shp diff --git a/mods/d2k/bits/90mm.shp b/mods/d2k/bits/90mm.shp deleted file mode 100644 index 5a538ce10c670d967f0a17d75f42df639c08ad52..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 2163 zcmai#dx%tZ6vxlG>h7Yb1N~F3>1t+=70k-e5-Ej*4N@|#lvM+bNPDRGNG#{h>|{i= z`3TX%1vOcS#4>wQ1c{`jd4Ip(?#$fB_JW`w-N@aYnbqI)J$Eit8Z-;{+uT$36Z>{zRbq$L*VgAGHka5FiM^26+Zt+q>l>u| zzkl{eBG;>Kq!X0!j2%mqF{ZkkmT<;X^5|;+9(GlLiymOMKM|$vmm(@1Bs(5ArfkXY z!HY^G`@7*=T|$lUE_)pIQ1GM^v^cI7P1^34fOcuD3Mr$!(j^Fk#f+?e2C@7ZqTImI zwH%CstUQCGkxnHf+adZ-Vm*!$HMi2I5Cm^gaF-Ogh{Nd|uIKP!4tH{Rfn5qmJMb!y z^+ju9?QGH3>b4R`g?C8upr3+uNFA=@=qS5hxRAqMjvnG@suNwqmkeEMckCvKGnEk` zO0jFAX&fwIYVy}2gbH_v{yEh0!?Qd%4X?E1i55Ec57D(ir)?8a*7Hm_1xf5sGPV&f zj8;**s9)nYGD-!SX?wJWv!qQ=3)^N)r+tZWM4lZ2jTCNh=h-?k`PWej9yB)L2shni zhmjY)!gjTY-et1&WX|m8j5f03Drn$pN028K9ultu2yM*ST?~&nuB*>=a#m^e%|TAx zlJRuBut$7dM!lXfs~N^KIi^OHWoad&R96mpwE0-3$7C6uYP(WY=m5=+k-7`bXgxm< z`{U(T%ElGa+_jITv5Yd^A4!D#o7jymg)_{bV}At~Z)H1L;tY@DV9#7r93fkX+u~d< z&WQuPz=b`yF~zNNEod$bXMYd(&E>*m$6k5Q{gm--<;2%XnZ5`{%j3 zh$eBc!m+=K>nUW>F#}%zX$l-{^T0$LZ?TSprCgjKIr@%shD`Ak1)I702u0UEGy`Dq?V3 zK0sGdDnsVkSw!LI$QeWwR4BZTD>1CK0D~Ji1~%yBaEeo@(BQTN)O`@^%2uhl#%a6( z3aEn8!RegUU~VJ(Dn55v3{p;Y8Rh>4t9)L(N;mcVi3%!rVxCaC?4$~IqVVv24$q+- zRoTU~ZLp6bL$*tr$E>*C!xJTe0(R~!*tPo!7dhNO*9{Yt^yX{ z#Hg9079^vI{?n3+Civ|beWin=2y3)Ppr$9nXJYvSGNS-h*pzLqfjShRHjwGs$vNnh z_Kz}6qOsuR`|WI>63r24MuNS1q8x$}39DJ9bjnG1MUYgZkeap~a0YL#{%%KY`>^Jk zvxhn7L7}BV;2noZjk9}2l4fc%z*ete8sjRjMr<2cHM#?&D-B%fL9K;ZQonPK=)d62 zH=|FldmhKpx>s@jetZC2l}~fwMeh2L{pCz!L2ibqQ15_so09xja(nS+*~`M?*x3AJ z4z_S{IVQNU7eEvya{)8}OzNBC*zI|p_D Date: Wed, 14 Aug 2013 18:05:36 +0200 Subject: [PATCH 18/44] cleanup weapon yamls - removed Red Alert sounds - WaterExplosion? Arrakis is a desert planet... - remove unused weapons/defaults and merge explosions - give bazooka smaller sized explosions - bigger explosions for orni strikes --- mods/d2k/mod.yaml | 2 - mods/d2k/rules/vehicles.yaml | 2 +- mods/d2k/sequences/misc.yaml | 6 +- mods/d2k/weapons.yaml | 151 +++++++++++++++++++++---- mods/d2k/weapons/defaults.yaml | 188 ------------------------------- mods/d2k/weapons/explosions.yaml | 105 ----------------- packaging/windows/OpenRA.nsi | 1 - 7 files changed, 131 insertions(+), 324 deletions(-) delete mode 100644 mods/d2k/weapons/defaults.yaml delete mode 100644 mods/d2k/weapons/explosions.yaml diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 974a513e5c..5aeb494a80 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -74,8 +74,6 @@ ChromeLayout: mods/ra/chrome/convertassets.yaml Weapons: - mods/d2k/weapons/defaults.yaml - mods/d2k/weapons/explosions.yaml mods/d2k/weapons.yaml Voices: diff --git a/mods/d2k/rules/vehicles.yaml b/mods/d2k/rules/vehicles.yaml index b28089633b..7001a390c7 100644 --- a/mods/d2k/rules/vehicles.yaml +++ b/mods/d2k/rules/vehicles.yaml @@ -329,7 +329,7 @@ MISSILETANK: Armament: Weapon: 227mm LocalOffset: -213,128,171, -213,-256,171 - FireDelay: 15 + FireDelay: 15 AttackFrontal: AutoTarget: InitialStance: Defend diff --git a/mods/d2k/sequences/misc.yaml b/mods/d2k/sequences/misc.yaml index c927f7d2b4..8b193cf1a7 100644 --- a/mods/d2k/sequences/misc.yaml +++ b/mods/d2k/sequences/misc.yaml @@ -11,14 +11,14 @@ explosion: med_explosion: DATA.R8 Start: 3390 Length: 12 - napalm: DATA.R8 + tiny_explosion: DATA.R8 Start: 3390 Length: 12 nuke: DATA.R8 Start: 3965 Length: 14 Tick: 60 - napalm2: DATA.R8 + mini_explosion: DATA.R8 Start: 3403 Length: 15 Tick: 60 @@ -222,4 +222,4 @@ icon: Offset: -30,-24 deathhand: DATA.R8 Start: 4035 - Offset: -30,-24 \ No newline at end of file + Offset: -30,-24 diff --git a/mods/d2k/weapons.yaml b/mods/d2k/weapons.yaml index 1298e322c5..4abfddd4fb 100644 --- a/mods/d2k/weapons.yaml +++ b/mods/d2k/weapons.yaml @@ -10,7 +10,7 @@ LMG: ContrailUsePlayerColor: true Warhead: Spread: 3 - Versus: + Versus: Wood: 25% Light: 40% Heavy: 10% @@ -36,13 +36,13 @@ Bazooka: RangeLimit: 35 Warhead: Spread: 3 - Versus: + Versus: None: 10% Wood: 75% Light: 60% Heavy: 90% Concrete: 40% - Explosion: small_artillery + Explosion: small_explosion InfDeath: 4 SmudgeType: SandCrater, RockCrater Damage: 50 @@ -61,7 +61,7 @@ Sniper: Warhead: Damage: 60 Spread: 1 - Versus: + Versus: None: 100% Wood: 0% Light: 1% @@ -82,7 +82,7 @@ Vulcan: ContrailUsePlayerColor: true Warhead: Spread: 3 - Versus: + Versus: Wood: 0% Light: 60% Heavy: 10% @@ -107,7 +107,7 @@ Slung: Image: MISSILE Warhead: Spread: 6 - Versus: + Versus: None: 0% Wood: 75% Light: 40% @@ -133,7 +133,7 @@ HMG: ContrailUsePlayerColor: true Warhead: Spread: 3 - Versus: + Versus: Wood: 15% Light: 45% Heavy: 20% @@ -156,7 +156,7 @@ HMGo: ContrailUsePlayerColor: true Warhead: Spread: 3 - Versus: + Versus: Wood: 15% Light: 45% Heavy: 25% @@ -183,7 +183,7 @@ QuadRockets: RangeLimit: 40 Warhead: Spread: 3 - Versus: + Versus: None: 35% Wood: 45% Light: 100% @@ -206,7 +206,7 @@ TurretGun: Inaccuracy: 9 Warhead: Spread: 8 - Versus: + Versus: None: 50% Wood: 75% Light: 100% @@ -259,7 +259,7 @@ TowerMissile: Inaccuracy: 12 Warhead: Spread: 8 - Versus: + Versus: None: 50% Wood: 50% Light: 100% @@ -279,7 +279,7 @@ TowerMissile: Inaccuracy: 11 Warhead: Spread: 8 - Versus: + Versus: None: 50% Wood: 50% Light: 100% @@ -299,7 +299,7 @@ DevBullet: Image: doubleblast Warhead: Spread: 8 - Versus: + Versus: None: 100% Wood: 50% Light: 100% @@ -310,7 +310,7 @@ DevBullet: SmudgeType: SandCrater, RockCrater Damage: 100 -227mm: +227mm: ROF: 100 Range: 10 MinRange: 4 @@ -330,7 +330,7 @@ DevBullet: ContrailLength: 5 Warhead: Spread: 12 - Versus: + Versus: None: 20% Wood: 50% Light: 100% @@ -358,7 +358,7 @@ FakeMissile: ContrailUsePlayerColor : True Warhead: Spread: 3 - Versus: + Versus: None: 0% Wood: 0% Concrete: 0% @@ -381,7 +381,7 @@ FakeMissile: ContrailLength: 20 Warhead: Spread: 12 - Versus: + Versus: None: 100% Wood: 80% Light: 75% @@ -405,7 +405,7 @@ Sound: UsePlayerColor: true Warhead: Spread: 1 - Versus: + Versus: None: 60% Wood: 85% Light: 80% @@ -423,7 +423,7 @@ ChainGun: High: true Warhead: Spread: 3 - Versus: + Versus: Wood: 50% Light: 60% Heavy: 25% @@ -440,7 +440,7 @@ Heal: Speed: 100 Warhead: Spread: 5 - Versus: + Versus: Wood: 0% Light: 0% Heavy: 0% @@ -454,7 +454,7 @@ WormJaw: Report: WORM.WAV Warhead: Spread: 5 - Versus: + Versus: Wood: 0% Concrete: 0% Damage: 100 @@ -467,7 +467,7 @@ ParaBomb: Image: BOMBS Warhead: Spread: 6 - Versus: + Versus: None: 30% Wood: 75% Light: 75% @@ -484,14 +484,117 @@ Napalm: Image: BOMBS Warhead: Spread: 20 - Versus: + Versus: None: 20% Wood: 100% Light: 30% Heavy: 20% Concrete: 70% InfDeath: 4 - Explosion: napalm + Explosion: small_artillery ImpactSound: NAPALM1.WAV SmudgeType: Crater Damage: 300 + +Crush: + Warhead: + ImpactSound: CRUSH1.WAV + Damage: 100 + +Demolish: + Warhead: + ImpactSound: EXPLLG2.WAV + Explosion: building + +Atomic: + Warhead: + Damage: 1800 + Spread: 64 + Versus: + None: 100% + Wood: 100% + Light: 100% + Heavy: 50% + Concrete: 50% + Explosion: nuke + InfDeath: 5 + ImpactSound: EXPLLG2.WAV + +CrateNuke: + Warhead: + Damage: 800 + Spread: 50 + Versus: + None: 20% + Wood: 75% + Light: 25% + Heavy: 25% + Concrete: 50% + Explosion: nuke + InfDeath: 5 + ImpactSound: EXPLLG2.WAV + +CrateExplosion: + Warhead: + Damage: 400 + Spread: 10 + Versus: + None: 90% + Wood: 75% + Light: 60% + Heavy: 25% + Explosion: building + InfDeath: 4 + ImpactSound: EXPLSML4.WAV + +UnitExplode: + Warhead: + Damage: 500 + Spread: 10 + Versus: + None: 90% + Wood: 75% + Light: 60% + Heavy: 25% + Explosion: building + InfDeath: 4 + ImpactSound: EXPLMD1.WAV + +UnitExplodeSmall: + Warhead: + Damage: 60 + Spread: 10 + Versus: + None: 90% + Wood: 75% + Light: 60% + Heavy: 25% + Explosion: self_destruct + InfDeath: 4 + ImpactSound: EXPLHG1.WAV, EXPLLG1.WAV, EXPLMD1.WAV, EXPLSML4.WAV + +UnitExplodeTiny: + Warhead: + Damage: 30 + Spread: 7 + Versus: + None: 90% + Wood: 75% + Light: 60% + Heavy: 25% + Explosion: med_explosion + InfDeath: 4 + ImpactSound: EXPLMD2.WAV, EXPLSML1.WAV, EXPLSML2.WAV, EXPLSML3.WAV + +UnitExplodeScale: + Warhead: + Damage: 90 + Spread: 13 + Versus: + None: 90% + Wood: 75% + Light: 60% + Heavy: 25% + Explosion: building + InfDeath: 4 + ImpactSound: EXPLLG2.WAV, EXPLLG3.WAV, EXPLLG5.WAV \ No newline at end of file diff --git a/mods/d2k/weapons/defaults.yaml b/mods/d2k/weapons/defaults.yaml deleted file mode 100644 index 6ab421e003..0000000000 --- a/mods/d2k/weapons/defaults.yaml +++ /dev/null @@ -1,188 +0,0 @@ -# to do: explosion animations, spreads - - - -### Warheads - -W_Bullets: # Machine Guns - Report: MGUN2.WAV #machine gun burst sound - Warhead: - Spread: 3 - Versus: - None: 100% - Wood: 75% - Light: 40% - Heavy: 20% - Concrete: 10% - Explosion: piffs - InfDeath: 2 - -W_Bazooka: - Warhead: - Spread: 3 - Versus: - None: 8% - Wood: 45% - Light: 70% - Heavy: 100% - Concrete: 75% - InfDeath: 4 - Explosion: med_explosion - WaterExplosion: med_splash - ImpactSound: kaboom12.aud # TODO: fallback to RA - -W_HE: # Grenadier, siege tank - Warhead: - Spread: 12 - Versus: - None: 125% - Wood: 70% - Light: 30% - Heavy: 20% - Concrete: 100% - # vvv below taken from 155mm - InfDeath: 3 - Explosion: self_destruct - WaterExplosion: large_splash - ImpactSound: explsml2 - SmudgeType: SandCrater, RockCrater - -W_GT_AT: # Sardaukar & Fremen's longer range weapons - Warhead: - Spread: 3 - Versus: - None: 25% - Wood: 65% - Light: 100% - Heavy: 50% - Concrete: 100% - InfDeath: 4 - Explosion: med_explosion - WaterExplosion: med_splash - ImpactSound: kaboom12.aud # TODO: fallback to RA - SmudgeType: SandCrater, RockCrater - -W_AT: # Tank shells, gun turret - Warhead: - Spread: 3 - Versus: - None: 20% - Wood: 60% - Light: 100% - Heavy: 75% - Concrete: 50% - Explosion: med_explosion - ImpactSound: kaboom30.aud # TODO: fallback to RA - InfDeath: 4 - SmudgeType: SandCrater, RockCrater - -W_AT_Mis: # Rocket Launcher, tower missile - Warhead: - Spread: 8 - Versus: - None: 15% - Wood: 65% - Light: 90% - Heavy: 100% - Concrete: 75% - InfDeath: 4 - Explosion: large_explosion - WaterExplosion: med_splash - ImpactSound: explsml1.wav - SmudgeType: SandCrater, RockCrater - -W_Deviate: - Warhead: - Spread: 8 - Versus: - None: 20% - Wood: 20% - Light: 20% - Heavy: 20% - Concrete: 20% - Explosion: med_explosion - WaterExplosion: med_splash - -W_Sonic: - Warhead: - Spread: 6 - Versus: - None: 100% - Wood: 100% - Light: 100% - Heavy: 60% - Concrete: 50% - Explosion: med_explosion - WaterExplosion: med_splash - -W_Plasma: - Warhead: - Spread: 3 - Versus: - None: 100% - Wood: 100% - Light: 60% - Heavy: 50% - Concrete: 100% - Explosion: med_explosion - WaterExplosion: med_splash - - - - -### Projectiles - -P_Bullets: #from M60mg - Projectile: Bullet - Speed: 100 - ContrailLength: 3 - TrailInterval: 1 - ContrailDelay: 0 - ContrailUsePlayerColor: true - -P_OneShot: #from Sniper - Report: RIFLE.AUD # TODO: fallback to RA - Projectile: Bullet - Speed: 150 - ContrailLength: 6 - TrailInterval: 1 - ContrailDelay: 0 - ContrailUsePlayerColor: true - -P_Bazooka: #From bazooka/1st (dragon?) - Projectile: Missile - Speed: 25 - Arm: 2 - High: true - Shadow: yes - Proximity: true - Trail: smokey - Inaccuracy: 3 - Image: DRAGON - ROT: 5 - RangeLimit: 35 - -P_Rocket: #From QuadRockets - Projectile: Missile - Arm: 0 - High: yes - Shadow: yes - Proximity: yes - Inaccuracy: 3 - Image: DRAGON - ROT: 10 - Trail: smokey - Speed: 40 - RangeLimit: 40 - -P_Missile: #From 227mm - Projectile: Bullet - Speed: 20 - Arm: 5 - High: yes - Shadow: yes - Inaccuracy: 55 - Angle: 0.2 - Image: MISSILE - ROT: 5 - ContrailLength: 5 \ No newline at end of file diff --git a/mods/d2k/weapons/explosions.yaml b/mods/d2k/weapons/explosions.yaml deleted file mode 100644 index 3d29ef49f7..0000000000 --- a/mods/d2k/weapons/explosions.yaml +++ /dev/null @@ -1,105 +0,0 @@ -Crush: - Warhead: - ImpactSound: CRUSH1.WAV - Damage: 100 - -Demolish: - Warhead: - ImpactSound: EXPLLG2.WAV - Explosion: building - -Atomic: - Warhead: - Damage: 1800 - Spread: 64 - Versus: - None: 100% - Wood: 100% - Light: 100% - Heavy: 50% - Concrete: 50% - Explosion: nuke - InfDeath: 5 - ImpactSound: EXPLLG2.WAV - -CrateNuke: - Warhead: - Damage: 800 - Spread: 50 - Versus: - None: 20% - Wood: 75% - Light: 25% - Heavy: 25% - Concrete: 50% - Explosion: nuke - InfDeath: 5 - ImpactSound: EXPLLG2.WAV - -CrateExplosion: - Warhead: - Damage: 400 - Spread: 10 - Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% - Explosion: building - WaterExplosion: building - InfDeath: 4 - ImpactSound: EXPLSML4.WAV - -UnitExplode: - Warhead: - Damage: 500 - Spread: 10 - Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% - Explosion: building - WaterExplosion: large_splash - InfDeath: 4 - ImpactSound: EXPLMD1.WAV - -UnitExplodeSmall: - Warhead: - Damage: 60 - Spread: 10 - Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% - Explosion: self_destruct - InfDeath: 4 - ImpactSound: EXPLHG1.WAV, EXPLLG1.WAV, EXPLMD1.WAV, EXPLSML4.WAV - -UnitExplodeTiny: - Warhead: - Damage: 30 - Spread: 7 - Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% - Explosion: med_explosion - InfDeath: 4 - ImpactSound: EXPLMD2.WAV, EXPLSML1.WAV, EXPLSML2.WAV, EXPLSML3.WAV - -UnitExplodeScale: - Warhead: - Damage: 90 - Spread: 13 - Versus: - None: 90% - Wood: 75% - Light: 60% - Heavy: 25% - Explosion: building - InfDeath: 4 - ImpactSound: EXPLLG2.WAV, EXPLLG3.WAV, EXPLLG5.WAV - diff --git a/packaging/windows/OpenRA.nsi b/packaging/windows/OpenRA.nsi index 38c6d6917f..1217cb43fd 100644 --- a/packaging/windows/OpenRA.nsi +++ b/packaging/windows/OpenRA.nsi @@ -157,7 +157,6 @@ SectionGroup /e "Mods" File /r "${SRCDIR}\mods\d2k\tilesets" File /r "${SRCDIR}\mods\d2k\sequences" File /r "${SRCDIR}\mods\d2k\uibits" - File /r "${SRCDIR}\mods\d2k\weapons" SectionEnd SectionGroupEnd From 93622ebeb21d5d6e8a80b863ad006a4945ea4023 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Fri, 16 Aug 2013 10:07:27 +0200 Subject: [PATCH 19/44] use the cool new additive blend mode for Dune 2000 explosions --- mods/d2k/sequences/misc.yaml | 20 ++++++++++++++++++++ 1 file changed, 20 insertions(+) diff --git a/mods/d2k/sequences/misc.yaml b/mods/d2k/sequences/misc.yaml index 8b193cf1a7..93bd064114 100644 --- a/mods/d2k/sequences/misc.yaml +++ b/mods/d2k/sequences/misc.yaml @@ -8,41 +8,53 @@ explosion: small_explosion: DATA.R8 Start: 3386 Length: 4 + BlendMode: Additive med_explosion: DATA.R8 Start: 3390 Length: 12 + BlendMode: Additive tiny_explosion: DATA.R8 Start: 3390 Length: 12 + BlendMode: Additive nuke: DATA.R8 Start: 3965 Length: 14 Tick: 60 + BlendMode: Additive mini_explosion: DATA.R8 Start: 3403 Length: 15 Tick: 60 + BlendMode: Additive self_destruct: DATA.R8 Start: 3433 Length: 15 + BlendMode: Additive building: DATA.R8 Start: 3448 Length: 22 + BlendMode: Additive large_explosion: DATA.R8 Start: 3988 Length: 22 + BlendMode: Additive artillery: DATA.R8 Start: 3988 Length: 22 + BlendMode: Additive small_artillery: DATA.R8 Start: 3988 Length: 22 + BlendMode: Additive small_napalm: DATA.R8 Start: 3421 Length: 8 + BlendMode: Additive shockwave: DATA.R8 Start: 3687 Length: 6 + BlendMode: Additive laserfire: idle: DATA.R8 @@ -154,29 +166,36 @@ fire: Start: 3712 Length: 10 Offset: 0,-3 + BlendMode: Additive 2: DATA.R8 Start: 3723 Length: 11 Offset: 0,-3 + BlendMode: Additive 3: DATA.R8 Start: 3885 Length: 13 Offset: 0,-3 + BlendMode: Additive 4: DATA.R8 Start: 3712 Length: 10 Offset: 0,-3 + BlendMode: Additive smoke_m: idle: DATA.R8 Start: 3418 Length: 2 + BlendMode: Additive loop: DATA.R8 Start: 3418 Length: 2 + BlendMode: Additive end: DATA.R8 Start: 3418 Length: 3 + BlendMode: Additive bombs: open: DATA.R8 @@ -212,6 +231,7 @@ doubleblast: idle: DATA.R8 Start: 3279 Facings: -16 + BlendMode: Additive icon: paratroopers: DATA.R8 From 51be8ef6bd283e72ac04761d11686439ef1a6f6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 14 Aug 2013 18:47:18 +0200 Subject: [PATCH 20/44] repair pad animations are not yet supported for overlays --- mods/d2k/sequences/structures.yaml | 44 +++++++++++++++--------------- 1 file changed, 22 insertions(+), 22 deletions(-) diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 92d5f2731d..eadb9e0df4 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -276,17 +276,17 @@ repairh: Start: 2731 Offset: -48,48 ZOffset: -1c511 - active: DATA.R8 # TODO: overlay - Start: 4746 - Length: 14 - Offset: -48,48 - ZOffset: -1c511 - damaged-active: DATA.R8 # TODO: overlay - Start: 4746 - Length: 14 - Tick: 60 - Offset: -48,48 - ZOffset: -1c511 +# active: DATA.R8 # TODO: overlay +# Start: 4746 +# Length: 14 +# Offset: -48,48 +# ZOffset: -1c511 +# damaged-active: DATA.R8 # TODO: overlay +# Start: 4746 +# Length: 14 +# Tick: 60 +# Offset: -48,48 +# ZOffset: -1c511 damaged-idle: DATA.R8 Start: 2732 Offset: -48,48 @@ -304,17 +304,17 @@ repairo: Start: 2891 Offset: -48,48 ZOffset: -1c511 - active: DATA.R8 # TODO: overlay - Start: 4746 - Length: 14 - Offset: -48,48 - ZOffset: -1c511 - damaged-active: DATA.R8 # TODO: overlay - Start: 4746 - Length: 14 - Tick: 60 - Offset: -48,48 - ZOffset: -1c511 +# active: DATA.R8 # TODO: overlay +# Start: 4746 +# Length: 14 +# Offset: -48,48 +# ZOffset: -1c511 +# damaged-active: DATA.R8 # TODO: overlay +# Start: 4746 +# Length: 14 +# Tick: 60 +# Offset: -48,48 +# ZOffset: -1c511 damaged-idle: DATA.R8 Start: 2892 Offset: -48,48 From c71e081afc5bf27f66d1d537e6a296d223c6ccbc Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 14 Aug 2013 18:47:36 +0200 Subject: [PATCH 21/44] added wind trap zaps with overlays --- mods/d2k/rules/structures.yaml | 2 ++ mods/d2k/sequences/structures.yaml | 24 +++++++++++++++++++++--- 2 files changed, 23 insertions(+), 3 deletions(-) diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 7781258ef5..d7ebb3c551 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -61,6 +61,8 @@ Range: 4 ProvidesCustomPrerequisite: Prerequisite: Power + WithIdleOverlay@ZAPS: + Sequence: idle-zaps ^BARRACKS: Inherits: ^Building diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index eadb9e0df4..37a632af54 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -363,10 +363,16 @@ pwra: damaged-idle: DATA.R8 Start: 2524 Offset: -32,64 - active: DATA.R8 # TODO: not wired up + idle-zaps: DATA.R8 Start: 4492 Length: 10 Offset: -32,64 + Tick: 200 + damaged-idle-zaps: DATA.R8 + Start: 4497 + Length: 5 + Offset: -32,64 + Tick: 200 bib: bib2x Start: 0 Length: * @@ -703,10 +709,16 @@ pwrh: damaged-idle: DATA.R8 Start: 2684 Offset: -32,64 - active: DATA.R8 # TODO: not wired up + idle-zaps: DATA.R8 Start: 4502 Length: 10 Offset: -32,64 + Tick: 200 + damaged-idle-zaps: DATA.R8 + Start: 4507 + Length: 5 + Offset: -32,64 + Tick: 200 bib: bib2x Start: 0 Length: * @@ -985,10 +997,16 @@ pwro: damaged-idle: DATA.R8 Start: 2844 Offset: -32,64 - active: DATA.R8 # TODO: not wired up + idle-zaps: DATA.R8 Start: 4512 Length: 10 Offset: -32,64 + Tick: 200 + damaged-idle-zaps: DATA.R8 + Start: 4517 + Length: 5 + Offset: -32,64 + Tick: 200 bib: bib2x Start: 0 Length: * From d4364694abdd955767d85f5f2892feb31c3b2634 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 14 Aug 2013 18:51:59 +0200 Subject: [PATCH 22/44] spinning radar dishes --- mods/d2k/rules/structures.yaml | 2 ++ mods/d2k/sequences/structures.yaml | 6 +++--- 2 files changed, 5 insertions(+), 3 deletions(-) diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index d7ebb3c551..b3ec691d09 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -289,6 +289,8 @@ RenderDetectionCircle: ProvidesCustomPrerequisite: Prerequisite: Outpost + WithIdleOverlay@DISH: + Sequence: idle-dish ^STARPORT: Inherits: ^Building diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 37a632af54..96f6084817 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -409,7 +409,7 @@ radara: damaged-idle: DATA.R8 Start: 2522 Offset: -48,80 - active: DATA.R8 # TODO: wire it up + idle-dish: DATA.R8 Start: 4522 Length: 30 Offset: -48,80 @@ -755,7 +755,7 @@ radarh: damaged-idle: DATA.R8 Start: 2682 Offset: -48,80 - active: DATA.R8 # TODO: wire it up + idle-dish: DATA.R8 Start: 4553 Length: 30 Offset: -48,80 @@ -1043,7 +1043,7 @@ radaro: damaged-idle: DATA.R8 Start: 2842 Offset: -48,80 - active: DATA.R8 # TODO: wire it up + idle-dish: DATA.R8 Start: 4583 Length: 30 Offset: -48,80 From 8a1e825946ef13383b316247e8880db6df82c63d Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 14 Aug 2013 19:02:37 +0200 Subject: [PATCH 23/44] added Ix Research lights as overlays --- mods/d2k/rules/structures.yaml | 2 ++ mods/d2k/sequences/structures.yaml | 15 +++++++++------ 2 files changed, 11 insertions(+), 6 deletions(-) diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index b3ec691d09..c7f566a706 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -570,6 +570,8 @@ WALL: Range: 4 ProvidesCustomPrerequisite: Prerequisite: Research + WithIdleOverlay@LIGHTS: + Sequence: idle-lights ^PALACE: Inherits: ^Building diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 96f6084817..7a026fefeb 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -495,9 +495,10 @@ researcha: damaged-idle: DATA.R8 Start: 2670 Offset: -48,80 - active: DATA.R8 # TODO: wire it up + idle-lights: DATA.R8 Start: 4760 - Length: 80 + Length: 60 + Tick: 80 Offset: -48,80 bib: bib3x Start: 0 @@ -517,9 +518,10 @@ researchh: damaged-idle: DATA.R8 Start: 2830 Offset: -48,80 - active: DATA.R8 # TODO: wire it up + idle-lights: DATA.R8 Start: 4760 - Length: 80 + Length: 60 + Tick: 80 Offset: -48,80 bib: bib3x Start: 0 @@ -539,9 +541,10 @@ researcho: damaged-idle: DATA.R8 Start: 2990 Offset: -48,80 - active: DATA.R8 # TODO: wire it up + idle-lights: DATA.R8 Start: 4760 - Length: 80 + Length: 60 + Tick: 80 Offset: -48,80 bib: bib3x Start: 0 From 3db98b655453c0c067b59f3b7effe43693c16282 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Wed, 14 Aug 2013 19:12:59 +0200 Subject: [PATCH 24/44] welding in the heavy weapon factories overlay + alpha blending = awesome --- mods/d2k/rules/structures.yaml | 2 ++ mods/d2k/sequences/structures.yaml | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index c7f566a706..5d4d10990a 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -255,6 +255,8 @@ ProductionBar: ProvidesCustomPrerequisite: Prerequisite: Heavy + WithIdleOverlay@WELDING: + Sequence: idle-welding ^RADAR: RequiresPower: diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 7a026fefeb..7a82476b6c 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -634,10 +634,12 @@ heavya: damaged-idle-top: DATA.R8 Start: 2520 Offset: -48,80 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4674 Length: 47 Offset: -48,80 + Tick: 200 + BlendMode: Additive bib: bib3x Start: 0 Length: * @@ -922,10 +924,12 @@ heavyh: damaged-idle-top: DATA.R8 Start: 2680 Offset: -48,80 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4674 Length: 47 Offset: -48,80 + Tick: 200 + BlendMode: Additive bib: bib3x Start: 0 Length: * @@ -1198,10 +1202,12 @@ heavyo: damaged-idle-top: DATA.R8 Start: 2840 Offset: -48,80 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4674 Length: 47 Offset: -48,80 + Tick: 200 + BlendMode: Additive bib: bib3x Start: 0 Length: * From 67c1eaf91902b2d681b6baee0338a612d07d1307 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 06:58:35 +0200 Subject: [PATCH 25/44] animate the repair button using Frames: --- mods/d2k/sequences/misc.yaml | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/mods/d2k/sequences/misc.yaml b/mods/d2k/sequences/misc.yaml index 93bd064114..c8c21f53a5 100644 --- a/mods/d2k/sequences/misc.yaml +++ b/mods/d2k/sequences/misc.yaml @@ -140,8 +140,9 @@ crate-effects: allyrepair: repair: DATA.R8 - Start: 3 - Length: 1 + Frames: 3, 39 + Length: 2 + Tick: 300 missile: idle: DATA.R8 From 3457255fa99fe6795b7772353887908d34b4b8e8 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 07:06:49 +0200 Subject: [PATCH 26/44] I think every instance of HackyAI needs those definitions. --- mods/d2k/rules/system.yaml | 16 ++++++++++++++++ 1 file changed, 16 insertions(+) diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index 04285a6fea..ad0d7d76a0 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -139,6 +139,14 @@ Player: Name:Vidious UnitQueues: Infantry, Vehicle, Armor, Starport RallypointTestBuilding: conyarda + BuildingCommonNames: + ConstructionYard: conyarda,conyardh,conyardo + Refinery: refa,refh,refo + Power: pwra,pwrh,pwro + VehiclesFactory: lighta,lighth,lighto,heavya,heavyh,heavyo + Silo: siloa, siloh, siloo + UnitsCommonNames: + Mcv: mcva,mcvh,mcvo BuildingFractions: refa: 20.1% refh: 20.1% @@ -199,6 +207,14 @@ Player: Name:Gladius UnitQueues: Infantry, Vehicle, Armor, Starport RallypointTestBuilding: conyarda + BuildingCommonNames: + ConstructionYard: conyarda,conyardh,conyardo + Refinery: refa,refh,refo + Power: pwra,pwrh,pwro + VehiclesFactory: lighta,lighth,lighto,heavya,heavyh,heavyo + Silo: siloa, siloh, siloo + UnitsCommonNames: + Mcv: mcva,mcvh,mcvo BuildingFractions: refa: 20.1% refh: 20.1% From 1a9c762115f02c41251d0a25484b66c2d77c0719 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 07:55:37 +0200 Subject: [PATCH 27/44] add location in sequence yaml to FormatExceptions --- OpenRA.Game/Graphics/Sequence.cs | 153 ++++++++++++++++--------------- 1 file changed, 80 insertions(+), 73 deletions(-) diff --git a/OpenRA.Game/Graphics/Sequence.cs b/OpenRA.Game/Graphics/Sequence.cs index 5e6d771448..0bcd018cc7 100644 --- a/OpenRA.Game/Graphics/Sequence.cs +++ b/OpenRA.Game/Graphics/Sequence.cs @@ -40,83 +40,90 @@ namespace OpenRA.Graphics var offset = float2.Zero; var blendMode = BlendMode.Alpha; - if (d.ContainsKey("Start")) - Start = int.Parse(d["Start"].Value); - - if (d.ContainsKey("Offset")) - offset = FieldLoader.GetValue("Offset", d["Offset"].Value); - - if (d.ContainsKey("BlendMode")) - blendMode = FieldLoader.GetValue("BlendMode", d["BlendMode"].Value); - - // Apply offset to each sprite in the sequence - // Different sequences may apply different offsets to the same frame - sprites = Game.modData.SpriteLoader.LoadAllSprites(srcOverride ?? unit).Select( - s => new Sprite(s.sheet, s.bounds, s.offset + offset, s.channel, blendMode)).ToArray(); - - if (!d.ContainsKey("Length")) - Length = 1; - else if (d["Length"].Value == "*") - Length = sprites.Length - Start; - else - Length = int.Parse(d["Length"].Value); - - if (d.ContainsKey("Stride")) - Stride = int.Parse(d["Stride"].Value); - else - Stride = Length; - - if (d.ContainsKey("Facings")) + try { - var f = int.Parse(d["Facings"].Value); - Facings = Math.Abs(f); - reverseFacings = f < 0; + if (d.ContainsKey("Start")) + Start = int.Parse(d["Start"].Value); + + if (d.ContainsKey("Offset")) + offset = FieldLoader.GetValue("Offset", d["Offset"].Value); + + if (d.ContainsKey("BlendMode")) + blendMode = FieldLoader.GetValue("BlendMode", d["BlendMode"].Value); + + // Apply offset to each sprite in the sequence + // Different sequences may apply different offsets to the same frame + sprites = Game.modData.SpriteLoader.LoadAllSprites(srcOverride ?? unit).Select( + s => new Sprite(s.sheet, s.bounds, s.offset + offset, s.channel, blendMode)).ToArray(); + + if (!d.ContainsKey("Length")) + Length = 1; + else if (d["Length"].Value == "*") + Length = sprites.Length - Start; + else + Length = int.Parse(d["Length"].Value); + + if (d.ContainsKey("Stride")) + Stride = int.Parse(d["Stride"].Value); + else + Stride = Length; + + if (d.ContainsKey("Facings")) + { + var f = int.Parse(d["Facings"].Value); + Facings = Math.Abs(f); + reverseFacings = f < 0; + } + else + Facings = 1; + + if (d.ContainsKey("Tick")) + Tick = int.Parse(d["Tick"].Value); + else + Tick = 40; + + if (d.ContainsKey("Transpose")) + transpose = bool.Parse(d["Transpose"].Value); + + if (d.ContainsKey("Frames")) + Frames = Array.ConvertAll(d["Frames"].Value.Split(','), int.Parse); + + if (d.ContainsKey("ShadowStart")) + ShadowStart = int.Parse(d["ShadowStart"].Value); + else + ShadowStart = -1; + + if (d.ContainsKey("ShadowZOffset")) + { + WRange r; + if (WRange.TryParse(d["ShadowZOffset"].Value, out r)) + ShadowZOffset = r.Range; + } + else + ShadowZOffset = -5; + + if (d.ContainsKey("ZOffset")) + { + WRange r; + if (WRange.TryParse(d["ZOffset"].Value, out r)) + ZOffset = r.Range; + } + + if (Length > Stride) + throw new InvalidOperationException( + "{0}: Sequence {1}.{2}: Length must be <= stride" + .F(info.Nodes[0].Location, unit, name)); + + if (Start < 0 || Start + Facings * Stride > sprites.Length || ShadowStart + Facings * Stride > sprites.Length) + throw new InvalidOperationException( + "{6}: Sequence {0}.{1} uses frames [{2}..{3}] of SHP `{4}`, but only 0..{5} actually exist" + .F(unit, name, Start, Start + Facings * Stride - 1, srcOverride ?? unit, sprites.Length - 1, + info.Nodes[0].Location)); } - else - Facings = 1; - - if (d.ContainsKey("Tick")) - Tick = int.Parse(d["Tick"].Value); - else - Tick = 40; - - if (d.ContainsKey("Transpose")) - transpose = bool.Parse(d["Transpose"].Value); - - if (d.ContainsKey("Frames")) - Frames = Array.ConvertAll(d["Frames"].Value.Split(','), int.Parse); - - if (d.ContainsKey("ShadowStart")) - ShadowStart = int.Parse(d["ShadowStart"].Value); - else - ShadowStart = -1; - - if (d.ContainsKey("ShadowZOffset")) + catch (FormatException f) { - WRange r; - if (WRange.TryParse(d["ShadowZOffset"].Value, out r)) - ShadowZOffset = r.Range; + throw new FormatException("Failed to parse sequences for {0}.{1} at {2}:\n{3}".F(unit, name, info.Nodes[0].Location, f)); } - else - ShadowZOffset = -5; - - if (d.ContainsKey("ZOffset")) - { - WRange r; - if (WRange.TryParse(d["ZOffset"].Value, out r)) - ZOffset = r.Range; - } - - if (Length > Stride) - throw new InvalidOperationException( - "{0}: Sequence {1}.{2}: Length must be <= stride" - .F(info.Nodes[0].Location, unit, name)); - - if (Start < 0 || Start + Facings * Stride > sprites.Length || ShadowStart + Facings * Stride > sprites.Length) - throw new InvalidOperationException( - "{6}: Sequence {0}.{1} uses frames [{2}..{3}] of SHP `{4}`, but only 0..{5} actually exist" - .F(unit, name, Start, Start + Facings * Stride - 1, srcOverride ?? unit, sprites.Length - 1, - info.Nodes[0].Location)); } public Sprite GetSprite(int frame) From f480679ab12a38908f56ee5a3bf3a4ed40ecbf12 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 08:43:18 +0200 Subject: [PATCH 28/44] add welding animations to the high tech factories --- mods/d2k/rules/structures.yaml | 2 ++ mods/d2k/sequences/structures.yaml | 12 +++++++++--- 2 files changed, 11 insertions(+), 3 deletions(-) diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 5d4d10990a..bfc0f22b4a 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -533,6 +533,8 @@ WALL: Range: 4 ProvidesCustomPrerequisite: Prerequisite: Hitech + WithIdleOverlay@WELDING: + Sequence: idle-welding ^RESEARCH: Inherits: ^Building diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 7a82476b6c..fe1e7d64be 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -473,10 +473,12 @@ hightecha: damaged-idle: DATA.R8 Start: 2565 Offset: -48,80 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4614 Length: 30 Offset: -48,80 + Tick: 500 + BlendMode: Additive bib: bib3x Start: 0 Length: * @@ -824,10 +826,12 @@ hightechh: damaged-idle: DATA.R8 Start: 2725 Offset: -48,80 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4614 Length: 30 Offset: -48,80 + Tick: 500 + BlendMode: Additive bib: bib3x Start: 0 Length: * @@ -1114,10 +1118,12 @@ hightecho: damaged-idle: DATA.R8 Start: 2885 Offset: -48,80 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4614 Length: 30 Offset: -48,80 + Tick: 500 + BlendMode: Additive bib: bib3x Start: 0 Length: * From 0dd73a128939724c78c7c3516ab75009dd15a03c Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 08:51:11 +0200 Subject: [PATCH 29/44] welding animations for the corrino heavy factory --- mods/d2k/sequences/structures.yaml | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index fe1e7d64be..b157851ded 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -1289,10 +1289,12 @@ heavyc: # TODO: unused damaged-idle-top: DATA.R8 Start: 3003 Offset: -48,64 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4674 Length: 47 - Offset: -48,64 + Offset: -48,80 + Tick: 200 + BlendMode: Additive bib: bib3x Start: 0 Length: * From c551cfca0fba9bba5dca61f923b91fc7632bdd5b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 08:51:23 +0200 Subject: [PATCH 30/44] welding for the light factories --- mods/d2k/rules/structures.yaml | 2 ++ mods/d2k/sequences/structures.yaml | 14 ++++++++++++-- 2 files changed, 14 insertions(+), 2 deletions(-) diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index bfc0f22b4a..627a15067c 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -217,6 +217,8 @@ ProductionBar: ProvidesCustomPrerequisite: Prerequisite: Light + WithIdleOverlay@WELDING: + Sequence: idle-welding ^HEAVY: Inherits: ^Building diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index b157851ded..b92df7a942 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -599,10 +599,12 @@ lighta: damaged-idle-top: DATA.R8 Start: 2675 Offset: -48,64 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4644 Length: 30 Offset: -48,64 + Tick: 200 + BlendMode: Additive bib: bib3x Start: 0 Length: * @@ -891,10 +893,12 @@ lighth: damaged-idle-top: DATA.R8 Start: 2835 Offset: -48,64 - active: DATA.R8 # TODO: not wired up + idle-welding: DATA.R8 Start: 4644 Length: 30 Offset: -48,64 + Tick: 200 + BlendMode: Additive bib: bib3x Start: 0 Length: * @@ -1175,6 +1179,12 @@ lighto: damaged-idle-top: DATA.R8 Start: 2995 Offset: -48,64 + idle-welding: DATA.R8 + Start: 4644 + Length: 30 + Offset: -48,64 + Tick: 200 + BlendMode: Additive bib: bib3x Start: 0 Length: * From 40438e7fa6e2bc0c57c905b4275cd1eb9ef7aa6b Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 09:46:38 +0200 Subject: [PATCH 31/44] nuke palette effect does not seem to like additive blending --- mods/d2k/rules/system.yaml | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/mods/d2k/rules/system.yaml b/mods/d2k/rules/system.yaml index ad0d7d76a0..779579c39a 100644 --- a/mods/d2k/rules/system.yaml +++ b/mods/d2k/rules/system.yaml @@ -282,7 +282,7 @@ World: LoadWidgetAtGameStart: Widget: INGAME_ROOT ScreenShaker: - NukePaletteEffect: +# NukePaletteEffect: # TODO: does not work well with additive blending (idle overlays still use player palette effects) BuildingInfluence: ChooseBuildTabOnSelect: CrateSpawner: @@ -307,6 +307,7 @@ World: Name: effect Filename: d2k.pal ShadowIndex: 4 + AllowModifiers: false PaletteFromFile@colorpicker: Name: colorpicker Filename: d2k.pal From 0a84ddc8fb95deccb79b70eb42403e56629d8bf7 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 13:07:51 +0200 Subject: [PATCH 32/44] fix d2k cursors - center by default (also works better for ra/cnc/ts) --- OpenRA.Game/Graphics/CursorProvider.cs | 10 +-- OpenRA.Game/Graphics/CursorSequence.cs | 4 +- mods/cnc/cursors.yaml | 118 ++---------------------- mods/ra/cursors.yaml | 120 ++----------------------- mods/ts/cursors.yaml | 116 ++---------------------- 5 files changed, 25 insertions(+), 343 deletions(-) diff --git a/OpenRA.Game/Graphics/CursorProvider.cs b/OpenRA.Game/Graphics/CursorProvider.cs index 79e4db3966..6d76ff5315 100644 --- a/OpenRA.Game/Graphics/CursorProvider.cs +++ b/OpenRA.Game/Graphics/CursorProvider.cs @@ -38,17 +38,17 @@ namespace OpenRA.Graphics cursors = new Dictionary(); palettes = new Cache(CreatePaletteReference); var sequences = new MiniYaml(null, sequenceFiles.Select(s => MiniYaml.FromFile(s)).Aggregate(MiniYaml.MergeLiberal)); - int[] ShadowIndex = { }; + var shadowIndex = new int[] { }; if (sequences.NodesDict.ContainsKey("ShadowIndex")) { - Array.Resize(ref ShadowIndex, ShadowIndex.Length + 1); - int.TryParse(sequences.NodesDict["ShadowIndex"].Value, out ShadowIndex[ShadowIndex.Length - 1]); + Array.Resize(ref shadowIndex, shadowIndex.Length + 1); + int.TryParse(sequences.NodesDict["ShadowIndex"].Value, out shadowIndex[shadowIndex.Length - 1]); } palette = new HardwarePalette(); foreach (var p in sequences.NodesDict["Palettes"].Nodes) - palette.AddPalette(p.Key, new Palette(FileSystem.Open(p.Value.Value), ShadowIndex), false); + palette.AddPalette(p.Key, new Palette(FileSystem.Open(p.Value.Value), shadowIndex), false); foreach (var s in sequences.NodesDict["Cursors"].Nodes) LoadSequencesForCursor(s.Key, s.Value); @@ -76,7 +76,7 @@ namespace OpenRA.Graphics renderer.SetPalette(palette); renderer.SpriteRenderer.DrawSprite(cursorSprite, - lastMousePos - cursorSequence.Hotspot, + lastMousePos - cursorSequence.Hotspot - (0.5f * cursorSprite.size).ToInt2(), palettes[cursorSequence.Palette], cursorSprite.size); } diff --git a/OpenRA.Game/Graphics/CursorSequence.cs b/OpenRA.Game/Graphics/CursorSequence.cs index 3cda6b1791..923510ff53 100644 --- a/OpenRA.Game/Graphics/CursorSequence.cs +++ b/OpenRA.Game/Graphics/CursorSequence.cs @@ -44,9 +44,9 @@ namespace OpenRA.Graphics length = 1; if (d.ContainsKey("x")) - int.TryParse(d["x"].Value, out Hotspot.X ); + int.TryParse(d["x"].Value, out Hotspot.X); if (d.ContainsKey("y")) - int.TryParse(d["y"].Value, out Hotspot.Y ); + int.TryParse(d["y"].Value, out Hotspot.Y); } public Sprite GetSprite(int frame) diff --git a/mods/cnc/cursors.yaml b/mods/cnc/cursors.yaml index 356daf14e4..cad78974c9 100644 --- a/mods/cnc/cursors.yaml +++ b/mods/cnc/cursors.yaml @@ -7,281 +7,173 @@ Cursors: mouse2: cursor scroll-t: start:1 - x:14 - y:-2 scroll-tr: start:2 - x:14 - y:-2 scroll-r: start:3 - x:28 - y:12 scroll-br: start:4 - x:28 - y:22 scroll-b: start:5 - x:14 - y:22 scroll-bl: start:6 - x:-2 - y:22 scroll-l: start:7 - x:-1 - y:13 scroll-tl: start:8 - x:-2 - y:-2 scroll-t-blocked: start:130 - x:14 - y:-2 scroll-tr-blocked: start:131 - x:14 - y:-2 scroll-r-blocked: start:132 - x:28 - y:12 scroll-br-blocked: start:133 - x:28 - y:22 scroll-b-blocked: start:134 - x:14 - y:22 scroll-bl-blocked: start:135 - x:-2 - y:22 scroll-l-blocked: start:136 - x:-1 - y:13 scroll-tl-blocked: start:137 - x:-2 - y:-2 select: start:12 length:6 - x:12 - y:12 default: start:0 + x: -16 + y: -12 default-minimap: start:86 length:1 + x: -16 + y: -12 generic-blocked: start:9 - x:12 - y:12 generic-blocked-minimap: start:27 - x:12 - y:12 attack: start:18 length:8 - x:12 - y:12 attack-minimap: start:140 length:8 - x:12 - y:12 harvest: start:18 length:8 - x:12 - y:12 harvest-minimap: start:140 length:8 - x:12 - y:12 enter: start:119 length:3 - x:12 - y:12 enter-minimap: start:148 length:3 - x:12 - y:12 c4: start:122 length:3 - x:12 - y:12 c4-minimap: start:127 length:3 - x:12 - y:12 guard: start:153 length:1 - x:12 - y:12 guard-minimap: start:152 length:1 - x:12 - y:12 # Cursors that need minimap variants deploy: start:53 length:9 - x:12 - y:12 repair: start:29 length:24 - x:12 - y:12 repair-blocked: start:126 length:1 - x:12 - y:12 sell: start:62 length:24 - x:12 - y:12 sell-blocked: start:125 length:1 - x:12 - y:12 ability: start:88 length:8 - x:12 - y:12 nuke: start:96 length:7 - x:12 - y:12 ioncannon: start:103 length:16 - x:12 - y:12 sell-vehicle: start:154 length:24 - x:12 - y:12 mouse4:cursor move: start:0 length:8 - x:12 - y:12 move-minimap: start:9 length:4 - x:12 - y:12 move-rough: start:0 length: 8 - x: 12 - y: 12 attackmove:cursor attackmove: start:0 length:8 - x:12 - y:12 attackmove-minimap: start:9 length:4 - x:12 - y:12 move-blocked: start:8 - x:12 - y:12 move-blocked-minimap: start:13 length:1 - x:12 - y:12 mouse3: cursor2 enter-blocked: start:212 length:1 - x:12 - y:12 enter-blocked-minimap: start:33 length:1 capture: start:164 length:3 - x:12 - y:12 capture-minimap: start:167 length:3 - x:12 - y:12 heal: start:160 length:4 - x:12 - y:12 heal-minimap: start:194 length:1 - x:12 - y:12 ability-minimap: start:214 length:8 - x:12 - y:12 deploy-blocked: start:211 length:1 - x:12 - y:12 goldwrench: start:170 length:24 - x:12 - y:12 goldwrench-blocked: start:213 length:1 - x:12 - y:12 nopower: cursor powerdown-blocked: start:0 length: 1 - x: 12 - y: 12 powerdown: start:1 - length: 3 - x: 12 - y: 12 \ No newline at end of file + length: 3 \ No newline at end of file diff --git a/mods/ra/cursors.yaml b/mods/ra/cursors.yaml index beef006a23..0e3e4c0347 100644 --- a/mods/ra/cursors.yaml +++ b/mods/ra/cursors.yaml @@ -5,78 +5,48 @@ Cursors: mouse: cursor scroll-t: start:1 - x: 12 - y: 12 scroll-tr: - start: 2 - x: 12 - y: 12 + start:2 scroll-r: - start: 3 - x: 12 - y: 12 + start:3 scroll-br: - start: 4 - x: 12 - y: 12 + start:4 scroll-b: start:5 - x: 12 - y: 12 scroll-bl: start:6 - x: 12 - y: 12 scroll-l: start:7 - x: 12 - y: 12 scroll-tl: start:8 - x: 12 - y: 12 scroll-t-blocked: start:124 - x: 12 - y: 12 scroll-tr-blocked: start:125 - x: 12 - y: 12 scroll-r-blocked: start:126 - x: 12 - y: 12 scroll-br-blocked: start:127 - x: 12 - y: 12 scroll-b-blocked: start:128 - x: 12 - y: 12 scroll-bl-blocked: start:129 - x: 12 - y: 12 scroll-l-blocked: start:130 - x: 12 - y: 12 scroll-tl-blocked: start:131 - x: 12 - y: 12 select: start:15 length: 6 - x: 12 - y: 12 default: start:0 + x: -16 + y: -12 default-minimap: start:80 + x: -16 + y: -12 generic-blocked: start:9 generic-blocked-minimap: @@ -84,181 +54,111 @@ Cursors: move: start:10 length: 4 - x: 12 - y: 12 move-minimap: start:29 length: 4 - x: 12 - y: 12 move-rough: start:10 length: 4 - x: 12 - y: 12 move-blocked: start:14 - x: 12 - y: 12 move-blocked-minimap: start:33 - x: 12 - y: 12 attack: start:195 length: 8 - x: 12 - y: 12 attack-minimap: start:203 length: 8 - x: 12 - y: 12 attackmove: start:21 length: 8 - x: 12 - y: 12 attackmove-minimap: start:134 length: 8 - x: 12 - y: 12 harvest: start:21 length: 8 - x: 12 - y: 12 harvest-minimap: start:134 length: 8 - x: 12 - y: 12 enter: start:113 length: 3 - x: 12 - y: 12 enter-minimap: start:139 length: 3 - x: 12 - y: 12 enter-blocked: start:212 length: 1 - x: 12 - y: 12 enter-blocked-minimap: start:33 c4: start:116 length: 3 - x: 12 - y: 12 c4-minimap: start:121 length: 3 - x: 12 - y: 12 guard: start:147 length: 1 - x: 12 - y: 12 guard-minimap: start:146 length: 1 - x: 12 - y: 12 capture: start:164 length: 3 - x: 12 - y: 12 capture-minimap: start:167 length: 3 - x: 12 - y: 12 heal: start:160 length: 4 - x: 12 - y: 12 heal-minimap: start:194 length: 1 - x: 12 - y: 12 ability: start:82 length: 8 - x: 12 - y: 12 ability-minimap: start:214 length: 8 - x: 12 - y: 12 # Cursors that need minimap variants deploy: start:59 length: 9 - x: 12 - y: 12 deploy-blocked: start:211 length: 1 - x: 12 - y: 12 goldwrench: start:170 length: 24 - x: 12 - y: 12 goldwrench-blocked: start:213 length: 1 - x: 12 - y: 12 nuke: start:90 length: 7 - x: 12 - y: 12 chrono-select: start:97 length: 8 - x: 12 - y: 12 chrono-target: start:105 length: 8 - x: 12 - y: 12 sell: start:68 length: 12 - x: 12 - y: 12 sell-blocked: start:119 length: 1 - x: 12 - y: 12 repair: start:35 length: 24 - x: 12 - y: 12 repair-blocked: start:120 length: 1 - x: 12 - y: 12 sell2: start:148 length: 12 @@ -267,10 +167,6 @@ Cursors: powerdown-blocked: start:0 length: 1 - x: 12 - y: 12 powerdown: start:1 - length: 3 - x: 12 - y: 12 \ No newline at end of file + length: 3 \ No newline at end of file diff --git a/mods/ts/cursors.yaml b/mods/ts/cursors.yaml index d57f5c5e9d..002451071e 100644 --- a/mods/ts/cursors.yaml +++ b/mods/ts/cursors.yaml @@ -5,77 +5,47 @@ Cursors: mouse: cursor scroll-t: #TODO start:1 - x: 12 - y: 12 scroll-tr: #TODO start: 2 - x: 12 - y: 12 scroll-r: #TODO start: 3 - x: 12 - y: 12 scroll-br: #TODO start: 4 - x: 12 - y: 12 scroll-b: #TODO start:5 - x: 12 - y: 12 scroll-bl: #TODO start:6 - x: 12 - y: 12 scroll-l: #TODO start:7 - x: 12 - y: 12 scroll-tl: #TODO start:8 - x: 12 - y: 12 scroll-t-blocked: #TODO start:124 - x: 12 - y: 12 scroll-tr-blocked: #TODO start:125 - x: 12 - y: 12 scroll-r-blocked: #TODO start:126 - x: 12 - y: 12 scroll-br-blocked: #TODO start:127 - x: 12 - y: 12 scroll-b-blocked: #TODO start:128 - x: 12 - y: 12 scroll-bl-blocked: #TODO start:129 - x: 12 - y: 12 scroll-l-blocked: #TODO start:130 - x: 12 - y: 12 scroll-tl-blocked:#TODO start:131 - x: 12 - y: 12 select: start:18 length: 12 - x: 12 - y: 12 default: start:0 + x: -26 + y: -20 default-minimap: start:1 + x: -26 + y: -20 generic-blocked: start:9 generic-blocked-minimap: @@ -83,193 +53,117 @@ Cursors: move: start:31 length: 10 - x: 12 - y: 12 move-minimap: start:42 length: 10 - x: 12 - y: 12 move-rough: start:31 length: 10 - x: 12 - y: 12 move-blocked: start:41 - x: 12 - y: 12 move-blocked-minimap: start:52 - x: 12 - y: 12 attack: start: 31 length: 10 - x: 12 - y: 12 attack-blocked: # TODO: unused start: 32 length: 1 - x: 12 - y: 12 attack-minimap: start: 42 length: 10 - x: 12 - y: 12 attackmove: #TODO start:21 length: 8 - x: 12 - y: 12 attackmove-minimap: #TODO start:134 length: 8 - x: 12 - y: 12 harvest: #TODO start:21 length: 8 - x: 12 - y: 12 harvest-minimap: #TODO start:134 length: 8 - x: 12 - y: 12 enter: #TODO start:113 length: 3 - x: 12 - y: 12 enter-minimap: #TODO start:139 length: 3 - x: 12 - y: 12 enter-blocked: #TODO start:212 length: 1 - x: 12 - y: 12 enter-blocked-minimap: #TODO start:33 c4: #TODO start:116 length: 3 - x: 12 - y: 12 c4-minimap: #TODO start:121 length: 3 - x: 12 - y: 12 guard: #TODO start:147 length: 1 - x: 12 - y: 12 guard-minimap: #TODO start:146 length: 1 - x: 12 - y: 12 capture: #TODO start:164 length: 3 - x: 12 - y: 12 capture-minimap: #TODO start:167 length: 3 - x: 12 - y: 12 heal: #TODO start:160 length: 4 - x: 12 - y: 12 heal-minimap: #TODO start:194 length: 1 - x: 12 - y: 12 ability: #TODO start:82 length: 8 - x: 12 - y: 12 ability-minimap: #TODO start:214 length: 8 - x: 12 - y: 12 deploy: start:110 length: 9 - x: 12 - y: 12 deploy-blocked: start:119 length: 1 - x: 12 - y: 12 undeploy: #TODO: unused start:120 length: 9 - x: 12 - y: 12 goldwrench: #TODO start:170 length: 24 - x: 12 - y: 12 goldwrench-blocked: #TODO start:213 length: 1 - x: 12 - y: 12 nuke: #TODO start:90 length: 7 - x: 12 - y: 12 sell: start:129 length: 10 - x: 12 - y: 12 sell-minimap: #TODO: unused start:139 length: 10 - x: 12 - y: 12 sell-blocked: start:149 length: 1 - x: 12 - y: 12 repair: start:170 length: 20 - x: 12 - y: 12 repair-blocked: start:190 length: 1 - x: 12 - y: 12 sell2: #TODO ? start:148 length: 12 powerdown-blocked: start:345 length: 1 - x: 12 - y: 12 powerdown: start:329 - length: 15 - x: 12 - y: 12 \ No newline at end of file + length: 15 \ No newline at end of file From cb2dd333a71ce597ecaaa8b14c64e1f729e614d1 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Thu, 15 Aug 2013 14:30:52 +0200 Subject: [PATCH 33/44] read bibs from R8 --- mods/d2k/bits/bib2x.shp | Bin 4230 -> 0 bytes mods/d2k/bits/bib3x.shp | Bin 6330 -> 0 bytes mods/d2k/sequences/structures.yaml | 261 ++++++++++++++++------------- 3 files changed, 148 insertions(+), 113 deletions(-) delete mode 100644 mods/d2k/bits/bib2x.shp delete mode 100644 mods/d2k/bits/bib3x.shp diff --git a/mods/d2k/bits/bib2x.shp b/mods/d2k/bits/bib2x.shp deleted file mode 100644 index 66c2e6dcae630615fcd29ed41ca9579152c3872f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 4230 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 diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index b92df7a942..315e39d9e8 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -1,5 +1,3 @@ -# read bibs from DATA.R8 - walla: idle: DATA.R8 Frames: 2527, 2530, 2528, 2538, 2531, 2532, 2542, 2535, 2529, 2539, 2533, 2534, 2540, 2536, 2537, 2541 @@ -232,9 +230,10 @@ conyarda: # Start: 4436 # Length: 14 # Offset: -48,64 - bib: bib3x # TODO: read this from BLOXBAT.R8 - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4046 Offset: -30,-24 @@ -345,9 +344,10 @@ starporta: Start: 4347 Length: 22 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4092 Offset: -30,-24 @@ -373,9 +373,10 @@ pwra: Length: 5 Offset: -32,64 Tick: 200 - bib: bib2x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 617, 618, 637, 638 + Length: 4 + Offset: -16,-16 icon: DATA.R8 Start: 4056 Offset: -30,-24 @@ -391,9 +392,10 @@ barra: damaged-idle: DATA.R8 Start: 2526 Offset: -32,64 - bib: bib2x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 617, 618, 637, 638 + Length: 4 + Offset: -16,-16 icon: DATA.R8 Start: 4059 Offset: -30,-24 @@ -413,9 +415,10 @@ radara: Start: 4522 Length: 30 Offset: -48,80 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4072 Offset: -30,-24 @@ -438,9 +441,10 @@ refa: damaged-idle-top: DATA.R8 Start: 2563 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4066 Offset: -30,-24 @@ -479,9 +483,10 @@ hightecha: Offset: -48,80 Tick: 500 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4078 Offset: -30,-24 @@ -502,9 +507,10 @@ researcha: Length: 60 Tick: 80 Offset: -48,80 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4099 Offset: -30,-24 @@ -525,9 +531,10 @@ researchh: Length: 60 Tick: 80 Offset: -48,80 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4100 Offset: -30,-24 @@ -548,9 +555,10 @@ researcho: Length: 60 Tick: 80 Offset: -48,80 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4101 Offset: -30,-24 @@ -566,9 +574,10 @@ palacea: damaged-idle: DATA.R8 Start: 2677 Offset: -48,48 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4102 Offset: -30,-24 @@ -605,9 +614,10 @@ lighta: Offset: -48,64 Tick: 200 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4081 Offset: -30,-24 @@ -644,9 +654,10 @@ heavya: Offset: -48,80 Tick: 200 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4087 Offset: -30,-24 @@ -670,9 +681,10 @@ conyardh: # Start: 4450 # Length: 14 # Offset: -48,64 - bib: bib3x # TODO: read this from BLOXBAT.R8 - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4047 Offset: -30,-24 @@ -700,9 +712,10 @@ starporth: Length: 22 Offset: -48,64 ZOffset: -1c511 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4093 Offset: -30,-24 @@ -728,9 +741,10 @@ pwrh: Length: 5 Offset: -32,64 Tick: 200 - bib: bib2x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 617, 618, 637, 638 + Length: 4 + Offset: -16,-16 icon: DATA.R8 Start: 4057 Offset: -30,-24 @@ -746,9 +760,10 @@ barrh: damaged-idle: DATA.R8 Start: 2686 Offset: -32,64 - bib: bib2x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 617, 618, 637, 638 + Length: 4 + Offset: -16,-16 icon: DATA.R8 Start: 4060 Offset: -30,-24 @@ -768,9 +783,10 @@ radarh: Start: 4553 Length: 30 Offset: -48,80 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4073 Offset: -30,-24 @@ -793,9 +809,10 @@ refh: damaged-idle-top: DATA.R8 Start: 2723 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4067 Offset: -30,-24 @@ -834,9 +851,10 @@ hightechh: Offset: -48,80 Tick: 500 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4079 Offset: -30,-24 @@ -860,9 +878,10 @@ palaceh: Start: 4820 Length: 20 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4103 Offset: -30,-24 @@ -899,9 +918,10 @@ lighth: Offset: -48,64 Tick: 200 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4082 Offset: -30,-24 @@ -938,9 +958,10 @@ heavyh: Offset: -48,80 Tick: 200 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4088 Offset: -30,-24 @@ -964,9 +985,10 @@ conyardo: # Start: 4464 # Length: 14 # Offset: -48,64 - bib: bib3x # TODO: read this from BLOXBAT.R8 - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4048 Offset: -30,-24 @@ -993,9 +1015,10 @@ starporto: Start: 4347 Length: 22 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4094 Offset: -30,-24 @@ -1022,9 +1045,10 @@ pwro: Length: 5 Offset: -32,64 Tick: 200 - bib: bib2x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 617, 618, 637, 638 + Length: 4 + Offset: -16,-16 icon: DATA.R8 Start: 4058 Offset: -30,-24 @@ -1040,9 +1064,10 @@ barro: damaged-idle: DATA.R8 Start: 2846 Offset: -32,64 - bib: bib2x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 617, 618, 637, 638 + Length: 4 + Offset: -16,-16 icon: DATA.R8 Start: 4061 Offset: -30,-24 @@ -1062,9 +1087,10 @@ radaro: Start: 4583 Length: 30 Offset: -48,80 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4074 Offset: -30,-24 @@ -1087,9 +1113,10 @@ refo: damaged-idle-top: DATA.R8 Start: 2883 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4068 Offset: -30,-24 @@ -1128,9 +1155,10 @@ hightecho: Offset: -48,80 Tick: 500 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4080 Offset: -30,-24 @@ -1146,9 +1174,10 @@ palaceo: damaged-idle: DATA.R8 Start: 2997 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4104 Offset: -30,-24 @@ -1185,9 +1214,10 @@ lighto: Offset: -48,64 Tick: 200 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4083 Offset: -30,-24 @@ -1224,9 +1254,10 @@ heavyo: Offset: -48,80 Tick: 200 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4089 Offset: -30,-24 @@ -1238,9 +1269,10 @@ palacec: # TODO: unused damaged-idle: DATA.R8 Start: 3005 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: palacecicon Start: 0 @@ -1266,9 +1298,10 @@ starportc: # TODO: unused Start: 4347 Length: 22 Offset: -48,64 - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 # TODO: blank Start: 4020 Offset: -30,-24 @@ -1305,9 +1338,10 @@ heavyc: # TODO: unused Offset: -48,80 Tick: 200 BlendMode: Additive - bib: bib3x - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 # TODO: blank Start: 4020 Offset: -30,-24 @@ -1331,9 +1365,10 @@ conyardc: # TODO: unused # Start: 4478 # Length: 14 # Offset: -48,64 - bib: bib3x # TODO: read this from BLOXBAT.R8 - Start: 0 - Length: * + bib: BLOXBASE.R8 + Frames: 611, 612, 613, 631, 632, 633 + Length: 6 + Offset: -16,-16 icon: DATA.R8 Start: 4049 Offset: -30,-24 From 72d2ebd3a8b1765ca6183dc28ca574dbfe616052 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 10:52:32 +0200 Subject: [PATCH 34/44] read BLOX*.R8 tilesets directly without conversions --- mods/d2k/tilesets/arrakis.yaml | 1505 +++++++++++++++++++++----------- 1 file changed, 994 insertions(+), 511 deletions(-) diff --git a/mods/d2k/tilesets/arrakis.yaml b/mods/d2k/tilesets/arrakis.yaml index 0327fbe592..75a25ba749 100644 --- a/mods/d2k/tilesets/arrakis.yaml +++ b/mods/d2k/tilesets/arrakis.yaml @@ -3,7 +3,7 @@ General: Id: ARRAKIS SheetSize: 1024 Palette: d2k.pal - Extensions: .bas,.bat,.bgb,.ice,.tre,.was,.ext,.shp + Extensions: .R8, .shp Terrain: TerrainType@Sand: @@ -61,14 +61,16 @@ Terrain: Templates: Template@0: Id: 0 - Image: BASE00 + Image: BLOXBASE + Frames: 0 Size: 1,1 PickAny: False Tiles: 0: Sand Template@1: Id: 1 - Image: BASE01 + Image: BLOXBASE + Frames: 10,11,30,31 Size: 2,2 Category: Dune PickAny: False @@ -79,7 +81,8 @@ Templates: 2: Dune Template@2: Id: 2 - Image: BASE02 + Image: BLOXBASE + Frames: 12,13,32,33 Size: 2,2 Category: SandyCliff PickAny: False @@ -90,7 +93,8 @@ Templates: 2: Rough Template@3: Id: 3 - Image: BASE03 + Image: BLOXBASE + Frames: 14,15,34,35 Size: 2,2 Category: SandyCliff PickAny: False @@ -101,7 +105,8 @@ Templates: 2: Rough Template@4: Id: 4 - Image: BASE04 + Image: BLOXBASE + Frames: 16,17,36,37 Size: 2,2 Category: Dune PickAny: False @@ -112,7 +117,8 @@ Templates: 1: Dune Template@5: Id: 5 - Image: BASE05 + Image: BLOXBASE + Frames: 18,19,38,39 Size: 2,2 Category: Dune PickAny: False @@ -123,7 +129,8 @@ Templates: 1: Sand Template@6: Id: 6 - Image: BASE06 + Image: BLOXBASE + Frames: 58,59,78,79 Size: 2,2 Category: Dune PickAny: False @@ -134,9 +141,10 @@ Templates: 0: Dune Template@7: Id: 7 - Image: BASE07 + Image: BLOXBASE + Frames: 56,57,76,77 Size: 2,2 - Category: Dune + Category: Dune PickAny: False Tiles: 1: Dune @@ -145,7 +153,8 @@ Templates: 0: Dune Template@8: Id: 8 - Image: BASE08 + Image: BLOXBASE + Frames: 54,55,74,75 Size: 2,2 Category: Cliff-Type-Changer PickAny: False @@ -156,7 +165,8 @@ Templates: 0: Cliff Template@9: Id: 9 - Image: BASE09 + Image: BLOXBASE + Frames: 53,73 Size: 1,2 Category: SandyCliff PickAny: False @@ -165,7 +175,8 @@ Templates: 1: Transition Template@10: Id: 10 - Image: BASE10 + Image: BLOXBASE + Frames: 98,99,118,119 Size: 2,2 Category: SandyCliff PickAny: False @@ -176,7 +187,8 @@ Templates: 1: Cliff Template@11: Id: 11 - Image: BASE11 + Image: BLOXBASE + Frames: 138,139,158,159 Size: 2,2 Category: SandyCliff PickAny: False @@ -187,7 +199,8 @@ Templates: 2: Cliff Template@12: Id: 12 - Image: BASE12 + Image: BLOXBASE + Frames: 136,137,156,157 Size: 2,2 Category: SandyCliff PickAny: False @@ -198,7 +211,8 @@ Templates: 1: Cliff Template@13: Id: 13 - Image: BASE13 + Image: BLOXBASE + Frames: 134,135,154,155 Size: 2,2 Category: SandyCliff PickAny: False @@ -209,7 +223,8 @@ Templates: 3: Cliff Template@14: Id: 14 - Image: BASE14 + Image: BLOXBASE + Frames: 132,133,152,153 Size: 2,2 Category: SandyCliff PickAny: False @@ -220,7 +235,8 @@ Templates: 1: Cliff Template@15: Id: 15 - Image: BASE15 + Image: BLOXBASE + Frames: 130,131,150,151 Size: 2,2 Category: SandyCliff PickAny: False @@ -231,7 +247,8 @@ Templates: 2: Cliff Template@16: Id: 16 - Image: BASE16 + Image: BLOXBASE + Frames: 128,129,148,149 Size: 2,2 Category: SandyCliff PickAny: False @@ -242,7 +259,8 @@ Templates: 1: Cliff Template@17: Id: 17 - Image: BASE17 + Image: BLOXBASE + Frames: 126,127,146,147 Size: 2,2 Category: SandyCliff PickAny: False @@ -253,7 +271,8 @@ Templates: 0: Cliff Template@18: Id: 18 - Image: BASE18 + Image: BLOXBASE + Frames: 124,125,144,145 Size: 2,2 Category: SandyCliff PickAny: False @@ -264,7 +283,8 @@ Templates: 0: Cliff Template@19: Id: 19 - Image: BASE19 + Image: BLOXBASE + Frames: 122,123,142,143 Size: 2,2 Category: SandyCliff PickAny: False @@ -275,7 +295,8 @@ Templates: 0: Cliff Template@20: Id: 20 - Image: BASE20 + Image: BLOXBASE + Frames: 120,121,140,141 Size: 2,2 Category: SandyCliff PickAny: False @@ -286,7 +307,8 @@ Templates: 0: Cliff Template@21: Id: 21 - Image: BASE21 + Image: BLOXBASE + Frames: 178,179,198,199 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -297,7 +319,8 @@ Templates: 1: Transition Template@22: Id: 22 - Image: BASE22 + Image: BLOXBASE + Frames: 176,177,196,197 Size: 2,2 Category: SandyCliff PickAny: False @@ -308,7 +331,8 @@ Templates: 0: Rough Template@23: Id: 23 - Image: BASE23 + Image: BLOXBASE + Frames: 174,175,194,195 Size: 2,2 Category: SandyCliff PickAny: False @@ -319,7 +343,8 @@ Templates: 0: Rough Template@24: Id: 24 - Image: BASE24 + Image: BLOXBASE + Frames: 172,173,192,193 Size: 2,2 Category: SandyCliff PickAny: False @@ -330,7 +355,8 @@ Templates: 0: Cliff Template@25: Id: 25 - Image: BASE25 + Image: BLOXBASE + Frames: 170,171,190,191 Size: 2,2 Category: SandyCliff PickAny: False @@ -341,7 +367,8 @@ Templates: 0: Cliff Template@26: Id: 26 - Image: BASE26 + Image: BLOXBASE + Frames: 168,169,188,189 Size: 2,2 Category: SandyCliff PickAny: False @@ -352,7 +379,8 @@ Templates: 0: Cliff Template@27: Id: 27 - Image: BASE27 + Image: BLOXBASE + Frames: 166,167,186,187 Size: 2,2 Category: SandyCliff PickAny: False @@ -363,7 +391,8 @@ Templates: 0: Rough Template@28: Id: 28 - Image: BASE28 + Image: BLOXBASE + Frames: 164,165,184,185 Size: 2,2 Category: Rock-Detail PickAny: False @@ -374,7 +403,8 @@ Templates: 0: Rough Template@29: Id: 29 - Image: BASE29 + Image: BLOXBASE + Frames: 162,163,182,183 Size: 2,2 Category: SandyCliff PickAny: False @@ -385,7 +415,8 @@ Templates: 0: Cliff Template@30: Id: 30 - Image: BASE30 + Image: BLOXBASE + Frames: 160,161,180,181 Size: 2,2 Category: SandyCliff PickAny: False @@ -396,7 +427,8 @@ Templates: 0: Cliff Template@31: Id: 31 - Image: BASE31 + Image: BLOXBASE + Frames: 202,203,222,223,242,243 Size: 2,3 Category: SandyCliff PickAny: False @@ -409,7 +441,8 @@ Templates: 5: Cliff Template@32: Id: 32 - Image: BASE32 + Image: BLOXBASE + Frames: 260,261,280,281 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -420,7 +453,8 @@ Templates: 0: Transition Template@33: Id: 33 - Image: BASE33 + Image: BLOXBASE + Frames: 200,201,220,221,240,241 Size: 2,3 Category: SandyCliff PickAny: False @@ -433,7 +467,8 @@ Templates: 0: Cliff Template@34: Id: 34 - Image: BASE34 + Image: BLOXBASE + Frames: 204,205,224,225,244,245 Size: 2,3 Category: SandyCliff PickAny: False @@ -446,7 +481,8 @@ Templates: 1: Sand Template@35: Id: 35 - Image: BASE35 + Image: BLOXBASE + Frames: 206,207,226,227,246,247 Size: 2,3 Category: SandyCliff PickAny: False @@ -459,7 +495,8 @@ Templates: 1: Cliff Template@36: Id: 36 - Image: BASE36 + Image: BLOXBASE + Frames: 262,263,282,283 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -470,7 +507,8 @@ Templates: 1: Transition Template@37: Id: 37 - Image: BASE37 + Image: BLOXBASE + Frames: 264,265,284,285 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -481,7 +519,8 @@ Templates: 1: Transition Template@38: Id: 38 - Image: BASE38 + Image: BLOXBASE + Frames: 85,86,105,106 Size: 2,2 Category: SandyCliff PickAny: False @@ -492,7 +531,8 @@ Templates: 2: Cliff Template@39: Id: 39 - Image: BASE39 + Image: BLOXBASE + Frames: 87,88,107,108 Size: 2,2 Category: SandyCliff PickAny: False @@ -503,7 +543,8 @@ Templates: 1: Cliff Template@40: Id: 40 - Image: BASE40 + Image: BLOXBASE + Frames: 89,90,109,110 Size: 2,2 Category: SandyCliff PickAny: False @@ -514,7 +555,8 @@ Templates: 2: Sand Template@41: Id: 41 - Image: BASE41 + Image: BLOXBASE + Frames: 91,92,111,112 Size: 2,2 Category: SandyCliff PickAny: False @@ -525,7 +567,8 @@ Templates: 1: Cliff Template@42: Id: 42 - Image: BASE42 + Image: BLOXBASE + Frames: 93,94,113,114 Size: 2,2 Category: SandyCliff PickAny: False @@ -536,7 +579,8 @@ Templates: 1: Cliff Template@43: Id: 43 - Image: BASE43 + Image: BLOXBASE + Frames: 95,96,115,116 Size: 2,2 Category: Cliff-Type-Changer PickAny: False @@ -547,7 +591,8 @@ Templates: 1: Cliff Template@44: Id: 44 - Image: BASE44 + Image: BLOXBASE + Frames: 218,219,238,239 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -558,7 +603,8 @@ Templates: 1: Transition Template@45: Id: 45 - Image: BASE45 + Image: BLOXBASE + Frames: 258,259,278,279 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -569,7 +615,8 @@ Templates: 3: Transition Template@46: Id: 46 - Image: BASE46 + Image: BLOXBASE + Frames: 256,257,276,277 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -580,7 +627,8 @@ Templates: 1: Transition Template@47: Id: 47 - Image: BASE47 + Image: BLOXBASE + Frames: 216,217,236,237 Size: 2,2 Category: SandyCliff PickAny: False @@ -591,7 +639,8 @@ Templates: 3: Cliff Template@48: Id: 48 - Image: BASE48 + Image: BLOXBASE + Frames: 214,215,234,235 Size: 2,2 Category: SandyCliff PickAny: False @@ -602,7 +651,8 @@ Templates: 1: Cliff Template@49: Id: 49 - Image: BASE49 + Image: BLOXBASE + Frames: 211,212,213,231,232,233 Size: 3,2 Category: SandyCliff PickAny: False @@ -615,7 +665,8 @@ Templates: 5: Cliff Template@50: Id: 50 - Image: BASE50 + Image: BLOXBASE + Frames: 251,252,253,271,272,273 Size: 3,2 Category: SandyCliff PickAny: False @@ -628,7 +679,8 @@ Templates: 5: Cliff Template@51: Id: 51 - Image: BASE51 + Image: BLOXBASE + Frames: 248,249,250,268,269,270 Size: 3,2 Category: SandyCliff PickAny: False @@ -641,7 +693,8 @@ Templates: 2: Cliff Template@52: Id: 52 - Image: BASE52 + Image: BLOXBASE + Frames: 208,209,210,228,229,230 Size: 3,2 Category: SandyCliff PickAny: False @@ -654,7 +707,8 @@ Templates: 2: Cliff Template@53: Id: 53 - Image: BASE53 + Image: BLOXBASE + Frames: 266,267,286,287 Size: 2,2 Category: Rock-SandSmooth PickAny: False @@ -663,37 +717,42 @@ Templates: 1: Transition 3: Transition 2: Transition -# Template@54: -# Id: 54 -# Image: BASE54 -# Size: 1,1 -# PickAny: False -# Tiles: -# 0: SpiceBlobs -# Template@55: -# Id: 55 -# Image: BASE55 -# Size: 1,1 -# PickAny: False -# Tiles: -# 0: SpiceBlobs -# Template@56: -# Id: 56 -# Image: BASE56 -# Size: 1,1 -# PickAny: False -# Tiles: -# 0: SpiceBlobs -# Template@57: -# Id: 57 -# Image: BASE57 -# Size: 1,1 -# PickAny: False -# Tiles: -# 0: SpiceBlobs + Template@54: + Id: 54 + Image: BLOXBASE + Frames: 301 + Size: 1,1 + PickAny: False + Tiles: + 0: SpiceBlobs + Template@55: + Id: 55 + Image: BLOXBASE + Frames: 300 + Size: 1,1 + PickAny: False + Tiles: + 0: SpiceBlobs + Template@56: + Id: 56 + Image: BLOXBASE + Frames: 320 + Size: 1,1 + PickAny: False + Tiles: + 0: SpiceBlobs + Template@57: + Id: 57 + Image: BLOXBASE + Frames: 321 + Size: 1,1 + PickAny: False + Tiles: + 0: SpiceBlobs Template@58: Id: 58 - Image: BASE58 + Image: BLOXBASE + Frames: 322 Size: 1,1 Category: Sand-Detail PickAny: False @@ -701,7 +760,8 @@ Templates: 0: Cliff Template@59: Id: 59 - Image: BASE59 + Image: BLOXBASE + Frames: 302 Size: 1,1 Category: Rock-Detail PickAny: False @@ -709,7 +769,8 @@ Templates: 0: Rock Template@60: Id: 60 - Image: BASE60 + Image: BLOXBASE + Frames: 288 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -717,7 +778,8 @@ Templates: 0: Sand Template@61: Id: 61 - Image: BASE61 + Image: BLOXBASE + Frames: 308 Size: 1,1 Category: Rock-Detail PickAny: False @@ -725,7 +787,8 @@ Templates: 0: Rock Template@62: Id: 62 - Image: BASE62 + Image: BLOXBASE + Frames: 328 Size: 1,1 Category: Sand-Detail PickAny: False @@ -733,7 +796,8 @@ Templates: 0: Sand Template@63: Id: 63 - Image: BASE63 + Image: BLOXBASE + Frames: 329 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -741,7 +805,8 @@ Templates: 0: Transition Template@64: Id: 64 - Image: BASE64 + Image: BLOXBASE + Frames: 330 Size: 1,1 Category: Sand-Detail PickAny: False @@ -749,7 +814,8 @@ Templates: 0: Sand Template@65: Id: 65 - Image: BASE65 + Image: BLOXBASE + Frames: 289,290,309,310 Size: 2,2 Category: Rock-Detail PickAny: False @@ -760,7 +826,8 @@ Templates: 1: Rough Template@66: Id: 66 - Image: BASE66 + Image: BLOXBASE + Frames: 331 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -768,7 +835,8 @@ Templates: 0: Transition Template@67: Id: 67 - Image: BASE67 + Image: BLOXBASE + Frames: 332 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -776,7 +844,8 @@ Templates: 0: Transition Template@68: Id: 68 - Image: BASE68 + Image: BLOXBASE + Frames: 298,299 Size: 2,1 Category: SandyCliff PickAny: False @@ -785,7 +854,8 @@ Templates: 1: Cliff Template@69: Id: 69 - Image: BASE69 + Image: BLOXBASE + Frames: 317,318 Size: 2,1 Category: Rock-SandSmooth PickAny: False @@ -794,7 +864,8 @@ Templates: 1: Transition Template@70: Id: 70 - Image: BASE70 + Image: BLOXBASE + Frames: 338,339,358,359 Size: 2,2 Category: Rock-Detail PickAny: False @@ -805,7 +876,8 @@ Templates: 1: Rough Template@71: Id: 71 - Image: BASE71 + Image: BLOXBASE + Frames: 337 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -813,7 +885,8 @@ Templates: 0: Transition Template@72: Id: 72 - Image: BASE72 + Image: BLOXBASE + Frames: 336 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -821,7 +894,8 @@ Templates: 0: Transition Template@73: Id: 73 - Image: BASE73 + Image: BLOXBASE + Frames: 335 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -829,7 +903,8 @@ Templates: 0: Transition Template@74: Id: 74 - Image: BASE74 + Image: BLOXBASE + Frames: 313,333 Size: 1,2 Category: Rock-SandSmooth PickAny: False @@ -838,7 +913,8 @@ Templates: 1: Transition Template@75: Id: 75 - Image: BASE75 + Image: BLOXBASE + Frames: 314,334 Size: 1,2 Category: Rock-SandSmooth PickAny: False @@ -847,7 +923,8 @@ Templates: 1: Transition Template@76: Id: 76 - Image: BASE76 + Image: BLOXBASE + Frames: 315 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -855,7 +932,8 @@ Templates: 0: Transition Template@77: Id: 77 - Image: BASE77 + Image: BLOXBASE + Frames: 291,292 Size: 2,1 Category: Rock-SandSmooth PickAny: False @@ -864,7 +942,8 @@ Templates: 1: Transition Template@78: Id: 78 - Image: BASE78 + Image: BLOXBASE + Frames: 293,294 Size: 2,1 Category: Rock-SandSmooth PickAny: False @@ -873,7 +952,8 @@ Templates: 1: Transition Template@79: Id: 79 - Image: BASE79 + Image: BLOXBASE + Frames: 295,296 Size: 2,1 Category: Rock-SandSmooth PickAny: False @@ -882,7 +962,8 @@ Templates: 1: Transition Template@80: Id: 80 - Image: BASE80 + Image: BLOXBASE + Frames: 719 Size: 1,1 Category: Sand-Detail PickAny: False @@ -890,7 +971,8 @@ Templates: 0: Rough Template@81: Id: 81 - Image: BASE81 + Image: BLOXBASE + Frames: 718 Size: 1,1 Category: Sand-Detail PickAny: False @@ -898,7 +980,8 @@ Templates: 0: Rough Template@82: Id: 82 - Image: BASE82 + Image: BLOXBASE + Frames: 738 Size: 1,1 Category: Sand-Detail PickAny: False @@ -906,7 +989,8 @@ Templates: 0: Sand Template@83: Id: 83 - Image: BASE83 + Image: BLOXBASE + Frames: 739 Size: 1,1 Category: Sand-Detail PickAny: False @@ -914,7 +998,8 @@ Templates: 0: Sand Template@84: Id: 84 - Image: BASE84 + Image: BLOXBASE + Frames: 737 Size: 1,1 Category: Sand-Detail PickAny: False @@ -922,7 +1007,8 @@ Templates: 0: Sand Template@85: Id: 85 - Image: BASE85 + Image: BLOXBASE + Frames: 717 Size: 1,1 Category: Sand-Detail PickAny: False @@ -930,7 +1016,8 @@ Templates: 0: Sand Template@86: Id: 86 - Image: BASE86 + Image: BLOXBASE + Frames: 716 Size: 1,1 Category: Rock-Detail PickAny: False @@ -938,7 +1025,8 @@ Templates: 0: Rough Template@87: Id: 87 - Image: BASE87 + Image: BLOXBASE + Frames: 736 Size: 1,1 Category: Sand-Detail PickAny: False @@ -946,7 +1034,8 @@ Templates: 0: Sand Template@88: Id: 88 - Image: BASE88 + Image: BLOXBASE + Frames: 657,658,659 Size: 3,1 Category: Brick PickAny: False @@ -956,7 +1045,8 @@ Templates: 2: Concrete Template@89: Id: 89 - Image: BASE89 + Image: BLOXBASE + Frames: 691 Size: 1,1 Category: Brick PickAny: False @@ -964,7 +1054,8 @@ Templates: 0: Concrete Template@90: Id: 90 - Image: BASE90 + Image: BLOXBASE + Frames: 649,650,651,669,670,671 Size: 3,2 Category: Brick PickAny: False @@ -977,7 +1068,8 @@ Templates: 1: Concrete Template@91: Id: 91 - Image: BASE91 + Image: BLOXBASE + Frames: 646,647,648,666,667,668,686,687,688 Size: 3,3 Category: Brick PickAny: False @@ -993,7 +1085,8 @@ Templates: 6: Concrete Template@92: Id: 92 - Image: BASE92 + Image: BLOXBASE + Frames: 685 Size: 1,1 Category: Rock-Detail PickAny: False @@ -1001,7 +1094,8 @@ Templates: 0: Rough Template@93: Id: 93 - Image: BASE93 + Image: BLOXBASE + Frames: 643,644,645,663,664,665 Size: 3,2 Category: Brick PickAny: False @@ -1014,7 +1108,8 @@ Templates: 2: Concrete Template@94: Id: 94 - Image: BASE94 + Image: BLOXBASE + Frames: 661,662,681,682 Size: 2,2 Category: Rock-Detail PickAny: False @@ -1025,7 +1120,8 @@ Templates: 0: Rough Template@95: Id: 95 - Image: BASE95 + Image: BLOXBASE + Frames: 660,680 Size: 1,2 Category: Rock-Detail PickAny: False @@ -1034,7 +1130,8 @@ Templates: 1: Rock Template@96: Id: 96 - Image: BASE96 + Image: BLOXBASE + Frames: 614,615,616,634,635,636,654,655,656 Size: 3,3 Category: Rock-Detail PickAny: False @@ -1050,7 +1147,8 @@ Templates: 8: Rock Template@97: Id: 97 - Image: BASE97 + Image: BLOXBASE + Frames: 617,618,637,638 Size: 2,2 Category: Rock-Detail PickAny: False @@ -1061,7 +1159,8 @@ Templates: 2: Rock Template@98: Id: 98 - Image: BASE98 + Image: BLOXBASE + Frames: 619,639 Size: 1,2 Category: Rock-Detail PickAny: False @@ -1070,7 +1169,8 @@ Templates: 1: Rock Template@99: Id: 99 - Image: BASE99 + Image: BLOXBASE + Frames: 538 Size: 1,1 Category: Rock-Detail PickAny: False @@ -1078,7 +1178,8 @@ Templates: 0: Rock Template@100: Id: 100 - Image: BASE100 + Image: BLOXBASE + Frames: 539 Size: 1,1 Category: Rock-Detail PickAny: False @@ -1086,7 +1187,8 @@ Templates: 0: Rock Template@101: Id: 101 - Image: BASE101 + Image: BLOXBASE + Frames: 557,558,559,577,578,579,597,598,599 Size: 3,3 Category: Rock-Detail PickAny: False @@ -1102,7 +1204,8 @@ Templates: 4: Rough Template@102: Id: 102 - Image: BASE102 + Image: BLOXBASE + Frames: 611,612,613,631,632,633 Size: 3,2 Category: Rock-Detail PickAny: False @@ -1115,7 +1218,8 @@ Templates: 3: Rock Template@103: Id: 103 - Image: BASE103 + Image: BLOXBASE + Frames: 652,653,672,673 Size: 2,2 Category: Rock-Detail PickAny: False @@ -1126,7 +1230,8 @@ Templates: 1: Cliff Template@104: Id: 104 - Image: BASE104 + Image: BLOXBASE + Frames: 692,693 Size: 2,1 Category: SandyCliff PickAny: False @@ -1135,7 +1240,8 @@ Templates: 1: Sand Template@105: Id: 105 - Image: BASE105 + Image: BLOXBASE + Frames: 689,690 Size: 2,1 Category: SandyCliff PickAny: False @@ -1144,7 +1250,8 @@ Templates: 1: Cliff Template@106: Id: 106 - Image: BASE106 + Image: BLOXBASE + Frames: 674,694 Size: 1,2 Category: SandyCliff PickAny: False @@ -1153,7 +1260,8 @@ Templates: 1: Cliff Template@107: Id: 107 - Image: BASE107 + Image: BLOXBASE + Frames: 675,695 Size: 1,2 Category: SandyCliff PickAny: False @@ -1162,7 +1270,8 @@ Templates: 1: Sand Template@108: Id: 108 - Image: BASE108 + Image: BLOXBASE + Frames: 677 Size: 1,1 Category: Z-Crap(Unusual) PickAny: False @@ -1170,7 +1279,8 @@ Templates: 0: Cliff Template@109: Id: 109 - Image: BASE109 + Image: BLOXBASE + Frames: 697 Size: 1,1 Category: Rock-Detail PickAny: False @@ -1178,7 +1288,8 @@ Templates: 0: Rock Template@110: Id: 110 - Image: BASE110 + Image: BLOXBASE + Frames: 678,679 Size: 2,1 Category: SandyCliff PickAny: False @@ -1187,7 +1298,8 @@ Templates: 1: Cliff Template@111: Id: 111 - Image: BASE111 + Image: BLOXBASE + Frames: 698,699 Size: 2,1 Category: SandyCliff PickAny: False @@ -1196,7 +1308,8 @@ Templates: 0: Cliff Template@112: Id: 112 - Image: BASE112 + Image: BLOXBASE + Frames: 715,735 Size: 1,2 Category: Rock-Detail PickAny: False @@ -1205,7 +1318,8 @@ Templates: 1: Rough Template@113: Id: 113 - Image: BASE113 + Image: BLOXBASE + Frames: 711,712,713,714,731,732,733,734 Size: 4,2 Category: Rock-Detail PickAny: False @@ -1220,7 +1334,8 @@ Templates: 0: Rough Template@114: Id: 114 - Image: BASE114 + Image: BLOXBASE + Frames: 709,710,729,730 Size: 2,2 Category: Rock-Detail PickAny: False @@ -1231,7 +1346,8 @@ Templates: 0: Rough Template@115: Id: 115 - Image: BASE115 + Image: BLOXBASE + Frames: 708 Size: 1,1 Category: Rock-Detail PickAny: False @@ -1239,7 +1355,8 @@ Templates: 0: Rough Template@116: Id: 116 - Image: BASE116 + Image: BLOXBASE + Frames: 728 Size: 1,1 Category: Sand-Detail PickAny: False @@ -1247,7 +1364,8 @@ Templates: 0: Rough Template@117: Id: 117 - Image: BASE117 + Image: BLOXBASE + Frames: 706,707,726,727 Size: 2,2 Category: Sand-Detail PickAny: False @@ -1258,7 +1376,8 @@ Templates: 1: Sand Template@118: Id: 118 - Image: BASE118 + Image: BLOXBASE + Frames: 700,701,702,720,721,722 Size: 3,2 Category: Sand-Detail PickAny: False @@ -1271,7 +1390,8 @@ Templates: 3: Rough Template@119: Id: 119 - Image: BASE119 + Image: BLOXBASE + Frames: 703,704,723,724 Size: 2,2 Category: Sand-Detail PickAny: False @@ -1282,7 +1402,8 @@ Templates: 1: Rough Template@120: Id: 120 - Image: BASE120 + Image: BLOXBASE + Frames: 705,725 Size: 1,2 Category: Sand-Detail PickAny: False @@ -1291,7 +1412,8 @@ Templates: 1: Rough Template@121: Id: 121 - Image: BASE121 + Image: BLOXBASE + Frames: 746,747 Size: 2,1 Category: Sand-Detail PickAny: False @@ -1300,7 +1422,8 @@ Templates: 0: Rough Template@122: Id: 122 - Image: BASE122 + Image: BLOXBASE + Frames: 744,745 Size: 2,1 Category: Sand-Detail PickAny: False @@ -1309,7 +1432,8 @@ Templates: 0: Rough Template@123: Id: 123 - Image: BASE123 + Image: BLOXBASE + Frames: 743 Size: 1,1 Category: Sand-Detail PickAny: False @@ -1317,7 +1441,8 @@ Templates: 0: Rough Template@124: Id: 124 - Image: BASE124 + Image: BLOXBASE + Frames: 742 Size: 1,1 Category: Sand-Detail PickAny: False @@ -1325,7 +1450,8 @@ Templates: 0: Rough Template@125: Id: 125 - Image: BASE125 + Image: BLOXBASE + Frames: 740,741 Size: 2,1 Category: Sand-Detail PickAny: False @@ -1334,357 +1460,408 @@ Templates: 0: Rough # Template@126: # Id: 126 -# Image: BASE126 +# Image: BLOXBASE +# Frames: 748 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@127: # Id: 127 -# Image: BASE127 +# Image: BLOXBASE +# Frames: 749 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@128: # Id: 128 -# Image: BASE128 +# Image: BLOXBASE +# Frames: 750 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@129: # Id: 129 -# Image: BASE129 +# Image: BLOXBASE +# Frames: 751 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@130: # Id: 130 -# Image: BASE130 +# Image: BLOXBASE +# Frames: 752 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@131: # Id: 131 -# Image: BASE131 +# Image: BLOXBASE +# Frames: 753 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@132: # Id: 132 -# Image: BASE132 +# Image: BLOXBASE +# Frames: 754 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@133: # Id: 133 -# Image: BASE133 +# Image: BLOXBASE +# Frames: 755 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@134: # Id: 134 -# Image: BASE134 +# Image: BLOXBASE +# Frames: 756 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@135: # Id: 135 -# Image: BASE135 +# Image: BLOXBASE +# Frames: 757 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@136: # Id: 136 -# Image: BASE136 +# Image: BLOXBASE +# Frames: 760 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@137: # Id: 137 -# Image: BASE137 +# Image: BLOXBASE +# Frames: 761 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@138: # Id: 138 -# Image: BASE138 +# Image: BLOXBASE +# Frames: 762 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@139: # Id: 139 -# Image: BASE139 +# Image: BLOXBASE +# Frames: 763 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@140: # Id: 140 -# Image: BASE140 +# Image: BLOXBASE +# Frames: 764 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@141: # Id: 141 -# Image: BASE141 +# Image: BLOXBASE +# Frames: 765 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@142: # Id: 142 -# Image: BASE142 +# Image: BLOXBASE +# Frames: 766 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@143: # Id: 143 -# Image: BASE143 +# Image: BLOXBASE +# Frames: 767 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@144: # Id: 144 -# Image: BASE144 +# Image: BLOXBASE +# Frames: 768 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@145: # Id: 145 -# Image: BASE145 +# Image: BLOXBASE +# Frames: 769 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@146: # Id: 146 -# Image: BASE146 +# Image: BLOXBASE +# Frames: 770 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@147: # Id: 147 -# Image: BASE147 +# Image: BLOXBASE +# Frames: 771 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@148: # Id: 148 -# Image: BASE148 +# Image: BLOXBASE +# Frames: 772 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@149: # Id: 149 -# Image: BASE149 +# Image: BLOXBASE +# Frames: 773 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@150: # Id: 150 -# Image: BASE150 +# Image: BLOXBASE +# Frames: 774 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@151: # Id: 151 -# Image: BASE151 +# Image: BLOXBASE +# Frames: 775 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@152: # Id: 152 -# Image: BASE152 +# Image: BLOXBASE +# Frames: 776 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@153: # Id: 153 -# Image: BASE153 +# Image: BLOXBASE +# Frames: 777 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@154: # Id: 154 -# Image: BASE154 +# Image: BLOXBASE +# Frames: 778 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@155: # Id: 155 -# Image: BASE155 +# Image: BLOXBASE +# Frames: 779 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@156: # Id: 156 -# Image: BASE156 +# Image: BLOXBASE +# Frames: 799 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@157: # Id: 157 -# Image: BASE157 +# Image: BLOXBASE +# Frames: 798 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@158: # Id: 158 -# Image: BASE158 +# Image: BLOXBASE +# Frames: 797 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@159: # Id: 159 -# Image: BASE159 +# Image: BLOXBASE +# Frames: 796 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@160: # Id: 160 -# Image: BASE160 +# Image: BLOXBASE +# Frames: 795 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@161: # Id: 161 -# Image: BASE161 +# Image: BLOXBASE +# Frames: 794 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@162: # Id: 162 -# Image: BASE162 +# Image: BLOXBASE +# Frames: 793 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@163: # Id: 163 -# Image: BASE163 +# Image: BLOXBASE +# Frames: 792 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@164: # Id: 164 -# Image: BASE164 +# Image: BLOXBASE +# Frames: 791 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@165: # Id: 165 -# Image: BASE165 +# Image: BLOXBASE +# Frames: 789 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@166: # Id: 166 -# Image: BASE166 +# Image: BLOXBASE +# Frames: 790 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@167: # Id: 167 -# Image: BASE167 +# Image: BLOXBASE +# Frames: 788 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@168: # Id: 168 -# Image: BASE168 +# Image: BLOXBASE +# Frames: 787 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@169: # Id: 169 -# Image: BASE169 +# Image: BLOXBASE +# Frames: 786 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@170: # Id: 170 -# Image: BASE170 +# Image: BLOXBASE +# Frames: 785 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@171: # Id: 171 -# Image: BASE171 +# Image: BLOXBASE +# Frames: 784 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@172: # Id: 172 -# Image: BASE172 +# Image: BLOXBASE +# Frames: 783 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@173: # Id: 173 -# Image: BASE173 +# Image: BLOXBASE +# Frames: 782 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@174: # Id: 174 -# Image: BASE174 +# Image: BLOXBASE +# Frames: 781 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice # Template@175: # Id: 175 -# Image: BASE175 +# Image: BLOXBASE +# Frames: 780 # Size: 1,1 # PickAny: False # Tiles: # 0: Spice Template@176: Id: 176 - Image: BASE176 + Image: BLOXBASE + Frames: 600,601,602,620,621,622,640,641,642 Size: 3,3 Category: BaseBorder-Cliff PickAny: False @@ -1700,7 +1877,8 @@ Templates: 4: Sand Template@177: Id: 177 - Image: BASE177 + Image: BLOXBASE + Frames: 603,604,623,624 Size: 2,2 Category: SandyCliff PickAny: False @@ -1711,7 +1889,8 @@ Templates: 2: Cliff Template@178: Id: 178 - Image: BASE178 + Image: BLOXBASE + Frames: 605,606,625,626 Size: 2,2 Category: SandyCliff PickAny: False @@ -1722,7 +1901,8 @@ Templates: 2: Cliff Template@179: Id: 179 - Image: BASE179 + Image: BLOXBASE + Frames: 564,565,584,585 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1733,7 +1913,8 @@ Templates: 2: Cliff Template@180: Id: 180 - Image: BASE180 + Image: BLOXBASE + Frames: 566,567,586,587 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1744,7 +1925,8 @@ Templates: 2: Cliff Template@181: Id: 181 - Image: BASE181 + Image: BLOXBASE + Frames: 562,563,582,583 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1755,7 +1937,8 @@ Templates: 0: Cliff Template@182: Id: 182 - Image: BASE182 + Image: BLOXBASE + Frames: 560,561,580,581 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1766,7 +1949,8 @@ Templates: 3: Rock Template@183: Id: 183 - Image: BASE183 + Image: BLOXBASE + Frames: 607,608,627,628 Size: 2,2 Category: Rock-Detail PickAny: False @@ -1777,7 +1961,8 @@ Templates: 1: Cliff Template@184: Id: 184 - Image: BASE184 + Image: BLOXBASE + Frames: 609,610,629,630 Size: 2,2 Category: Rock-Detail PickAny: False @@ -1788,7 +1973,8 @@ Templates: 1: Sand Template@185: Id: 185 - Image: BASE185 + Image: BLOXBASE + Frames: 568,569,588,589 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1799,7 +1985,8 @@ Templates: 2: Cliff Template@186: Id: 186 - Image: BASE186 + Image: BLOXBASE + Frames: 570,571,590,591 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1810,7 +1997,8 @@ Templates: 1: Cliff Template@187: Id: 187 - Image: BASE187 + Image: BLOXBASE + Frames: 529,530,549,550 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1821,7 +2009,8 @@ Templates: 2: Rock Template@188: Id: 188 - Image: BASE188 + Image: BLOXBASE + Frames: 527,528,547,548 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1832,7 +2021,8 @@ Templates: 2: Rock Template@189: Id: 189 - Image: BASE189 + Image: BLOXBASE + Frames: 525,526,545,546 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1843,7 +2033,8 @@ Templates: 2: Rock Template@190: Id: 190 - Image: BASE190 + Image: BLOXBASE + Frames: 523,524,543,544 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1854,7 +2045,8 @@ Templates: 2: Sand Template@191: Id: 191 - Image: BASE191 + Image: BLOXBASE + Frames: 520,521,522,540,541,542 Size: 3,2 Category: BaseBorder-Cliff PickAny: False @@ -1867,7 +2059,8 @@ Templates: 4: Cliff Template@192: Id: 192 - Image: BASE192 + Image: BLOXBASE + Frames: 480,481,482,500,501,502 Size: 3,2 Category: BaseBorder-Cliff PickAny: False @@ -1880,7 +2073,8 @@ Templates: 5: Cliff Template@193: Id: 193 - Image: BASE193 + Image: BLOXBASE + Frames: 440,441,460,461 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1891,7 +2085,8 @@ Templates: 0: Transition Template@194: Id: 194 - Image: BASE194 + Image: BLOXBASE + Frames: 402,403,422,423,442,443 Size: 2,3 Category: BaseBorder-Cliff PickAny: False @@ -1904,7 +2099,8 @@ Templates: 1: Cliff Template@195: Id: 195 - Image: BASE195 + Image: BLOXBASE + Frames: 400,401,420,421 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1915,7 +2111,8 @@ Templates: 1: Cliff Template@196: Id: 196 - Image: BASE196 + Image: BLOXBASE + Frames: 408,409,428,429 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1926,7 +2123,8 @@ Templates: 1: Cliff Template@197: Id: 197 - Image: BASE197 + Image: BLOXBASE + Frames: 410,411,430,431,450,451 Size: 2,3 Category: BaseBorder-Cliff PickAny: False @@ -1939,7 +2137,8 @@ Templates: 1: Cliff Template@198: Id: 198 - Image: BASE198 + Image: BLOXBASE + Frames: 412,413,432,433 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1950,7 +2149,8 @@ Templates: 1: Transition Template@199: Id: 199 - Image: BASE199 + Image: BLOXBASE + Frames: 452,453 Size: 2,1 Category: BaseBorder-Cliff PickAny: False @@ -1959,7 +2159,8 @@ Templates: 1: Sand Template@200: Id: 200 - Image: BASE200 + Image: BLOXBASE + Frames: 454,455,474,475,494,495 Size: 2,3 Category: BaseBorder-Cliff PickAny: False @@ -1972,7 +2173,8 @@ Templates: 2: Cliff Template@201: Id: 201 - Image: BASE201 + Image: BLOXBASE + Frames: 489,490,509,510 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -1983,18 +2185,20 @@ Templates: 0: Cliff Template@202: Id: 202 - Image: BASE202 + Image: BLOXBASE + Frames: 448,449,468,469 Size: 2,2 Category: BaseBorder-Cliff PickAny: False Tiles: - 0: Cliff - 2: Cliff + 0: Transition + 2: Transition 3: Rock 1: Transition Template@203: Id: 203 - Image: BASE203 + Image: BLOXBASE + Frames: 487,488,507,508 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2005,7 +2209,8 @@ Templates: 0: Cliff Template@204: Id: 204 - Image: BASE204 + Image: BLOXBASE + Frames: 446,447,466,467 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2016,7 +2221,8 @@ Templates: 0: Cliff Template@205: Id: 205 - Image: BASE205 + Image: BLOXBASE + Frames: 444,445,464,465 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2027,7 +2233,8 @@ Templates: 0: Cliff Template@206: Id: 206 - Image: BASE206 + Image: BLOXBASE + Frames: 456,457,476,477,496,497 Size: 2,3 Category: BaseBorder-Cliff PickAny: False @@ -2040,7 +2247,8 @@ Templates: 0: Cliff Template@207: Id: 207 - Image: BASE207 + Image: BLOXBASE + Frames: 498,499,518,519 Size: 2,2 Category: Cliff-Type-Changer PickAny: False @@ -2051,7 +2259,8 @@ Templates: 2: Transition Template@208: Id: 208 - Image: BASE208 + Image: BLOXBASE + Frames: 458,459,478,479 Size: 2,2 Category: Cliff-Type-Changer PickAny: False @@ -2062,7 +2271,8 @@ Templates: 1: Cliff Template@209: Id: 209 - Image: BASE209 + Image: BLOXBASE + Frames: 418,419,438,439 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2073,7 +2283,8 @@ Templates: 1: Cliff Template@210: Id: 210 - Image: BASE210 + Image: BLOXBASE + Frames: 378,379,398,399 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2084,7 +2295,8 @@ Templates: 2: Cliff Template@211: Id: 211 - Image: BASE211 + Image: BLOXBASE + Frames: 416,417,436,437 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2095,7 +2307,8 @@ Templates: 3: Cliff Template@212: Id: 212 - Image: BASE212 + Image: BLOXBASE + Frames: 376,377,396,397 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2106,7 +2319,8 @@ Templates: 2: Cliff Template@213: Id: 213 - Image: BASE213 + Image: BLOXBASE + Frames: 414,415,434,435 Size: 2,2 Category: Sand-Detail PickAny: False @@ -2117,7 +2331,8 @@ Templates: 2: Cliff Template@214: Id: 214 - Image: BASE214 + Image: BLOXBASE + Frames: 354,355,374,375,394,395 Size: 2,3 Category: Sand-Detail PickAny: False @@ -2130,7 +2345,8 @@ Templates: 5: Rough Template@215: Id: 215 - Image: BASE215 + Image: BLOXBASE + Frames: 356 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2138,7 +2354,8 @@ Templates: 0: Sand Template@216: Id: 216 - Image: BASE216 + Image: BLOXBASE + Frames: 347,348,367,368,387,388 Size: 2,3 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2151,7 +2368,8 @@ Templates: 0: Sand Template@217: Id: 217 - Image: BASE217 + Image: BLOXBASE + Frames: 386 Size: 1,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2159,7 +2377,8 @@ Templates: 0: Rough Template@218: Id: 218 - Image: BASE218 + Image: BLOXBASE + Frames: 345,346,365,366 Size: 2,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2170,7 +2389,8 @@ Templates: 0: Rough Template@219: Id: 219 - Image: BASE219 + Image: BLOXBASE + Frames: 343,344,363,364 Size: 2,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2181,7 +2401,8 @@ Templates: 0: Sand Template@220: Id: 220 - Image: BASE220 + Image: BLOXBASE + Frames: 340,341,342,360,361,362 Size: 3,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2194,7 +2415,8 @@ Templates: 3: Rough Template@221: Id: 221 - Image: BASE221 + Image: BLOXBASE + Frames: 380,381,382 Size: 3,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2204,7 +2426,8 @@ Templates: 2: Sand Template@222: Id: 222 - Image: BASE222 + Image: BLOXBASE + Frames: 483,484,503,504 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2215,7 +2438,8 @@ Templates: 0: Cliff Template@223: Id: 223 - Image: BASE223 + Image: BLOXBASE + Frames: 485,486,505,506 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2226,7 +2450,8 @@ Templates: 1: Cliff Template@224: Id: 224 - Image: BASE224 + Image: BLOXBASE + Frames: 83,84,103,104 Size: 2,2 Category: Dune PickAny: False @@ -2237,7 +2462,8 @@ Templates: 2: Dune Template@225: Id: 225 - Image: BASE225 + Image: BLOXBASE + Frames: 28 Size: 1,1 Category: Dune PickAny: False @@ -2245,28 +2471,32 @@ Templates: 0: Dune Template@226: Id: 226 - Image: BASE226 + Image: BLOXBASE + Frames: 8 Size: 1,1 PickAny: False Tiles: 0: Sand Template@227: Id: 227 - Image: BASE227 + Image: BLOXBASE + Frames: 9 Size: 1,1 PickAny: False Tiles: 0: Sand Template@228: Id: 228 - Image: BASE228 + Image: BLOXBASE + Frames: 29 Size: 1,1 PickAny: False Tiles: 0: Sand Template@229: Id: 229 - Image: BASE229 + Image: BLOXBASE + Frames: 26,27,46,47 Size: 2,2 Category: Dune PickAny: False @@ -2277,7 +2507,8 @@ Templates: 0: Dune Template@230: Id: 230 - Image: BASE230 + Image: BLOXBASE + Frames: 65,66 Size: 2,1 Category: Dune PickAny: False @@ -2286,7 +2517,8 @@ Templates: 0: Dune Template@231: Id: 231 - Image: BASE231 + Image: BLOXBASE + Frames: 63,64 Size: 2,1 Category: Dune PickAny: False @@ -2295,7 +2527,8 @@ Templates: 0: Dune Template@232: Id: 232 - Image: BASE232 + Image: BLOXBASE + Frames: 22,23,42,43 Size: 2,2 Category: Dune PickAny: False @@ -2306,7 +2539,8 @@ Templates: 0: Dune Template@233: Id: 233 - Image: BASE233 + Image: BLOXBASE + Frames: 60 Size: 1,1 Category: Dune PickAny: False @@ -2314,7 +2548,8 @@ Templates: 0: Dune Template@234: Id: 234 - Image: BASE234 + Image: BLOXBASE + Frames: 61 Size: 1,1 Category: Dune PickAny: False @@ -2322,7 +2557,8 @@ Templates: 0: Dune Template@235: Id: 235 - Image: BASE235 + Image: BLOXBASE + Frames: 62 Size: 1,1 Category: Dune PickAny: False @@ -2330,7 +2566,8 @@ Templates: 0: Dune Template@236: Id: 236 - Image: BASE236 + Image: BLOXBASE + Frames: 82 Size: 1,1 Category: Dune PickAny: False @@ -2338,7 +2575,8 @@ Templates: 0: Dune Template@237: Id: 237 - Image: BASE237 + Image: BLOXBASE + Frames: 102 Size: 1,1 Category: Dune PickAny: False @@ -2346,7 +2584,8 @@ Templates: 0: Dune Template@238: Id: 238 - Image: BASE238 + Image: BLOXBASE + Frames: 101 Size: 1,1 Category: Dune PickAny: False @@ -2354,7 +2593,8 @@ Templates: 0: Dune Template@239: Id: 239 - Image: BASE239 + Image: BLOXBASE + Frames: 100 Size: 1,1 Category: Dune PickAny: False @@ -2362,7 +2602,8 @@ Templates: 0: Dune Template@240: Id: 240 - Image: BASE240 + Image: BLOXBASE + Frames: 80 Size: 1,1 Category: Dune PickAny: False @@ -2370,7 +2611,8 @@ Templates: 0: Dune Template@241: Id: 241 - Image: BASE241 + Image: BLOXBASE + Frames: 81 Size: 1,1 Category: Dune PickAny: False @@ -2378,7 +2620,8 @@ Templates: 0: Dune Template@242: Id: 242 - Image: BASE242 + Image: BLOXBASE + Frames: 21 Size: 1,1 Category: Dune PickAny: False @@ -2386,7 +2629,8 @@ Templates: 0: Dune Template@243: Id: 243 - Image: BASE243 + Image: BLOXBASE + Frames: 41 Size: 1,1 Category: Dune PickAny: False @@ -2394,7 +2638,8 @@ Templates: 0: Dune Template@244: Id: 244 - Image: BASE244 + Image: BLOXBASE + Frames: 40 Size: 1,1 Category: Dune PickAny: False @@ -2402,7 +2647,8 @@ Templates: 0: Dune Template@245: Id: 245 - Image: BASE245 + Image: BLOXBASE + Frames: 20 Size: 1,1 Category: Dune PickAny: False @@ -2410,7 +2656,8 @@ Templates: 0: Dune Template@246: Id: 246 - Image: BASE246 + Image: BLOXBASE + Frames: 24,25,44,45 Size: 2,2 Category: Dune PickAny: False @@ -2421,7 +2668,8 @@ Templates: 2: Sand Template@247: Id: 247 - Image: BASE247 + Image: BLOXBASE + Frames: 352,353,372,373 Size: 2,2 Category: Sand-Detail PickAny: False @@ -2432,7 +2680,8 @@ Templates: 1: Sand Template@248: Id: 248 - Image: BASE248 + Image: BLOXBASE + Frames: 392,393 Size: 2,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2441,7 +2690,8 @@ Templates: 0: Sand Template@249: Id: 249 - Image: BASE249 + Image: BLOXBASE + Frames: 390 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2449,7 +2699,8 @@ Templates: 0: Rough Template@250: Id: 250 - Image: BASE250 + Image: BLOXBASE + Frames: 389 Size: 1,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2457,7 +2708,8 @@ Templates: 0: Rough Template@251: Id: 251 - Image: BASE251 + Image: BLOXBASE + Frames: 349,350,369,370 Size: 2,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2468,7 +2720,8 @@ Templates: 1: Rough Template@252: Id: 252 - Image: BASE252 + Image: BLOXBASE + Frames: 254,255,274,275 Size: 2,2 Category: Z-Crap(Unusual) PickAny: False @@ -2479,7 +2732,8 @@ Templates: 2: Sand Template@253: Id: 253 - Image: BASE253 + Image: BLOXBASE + Frames: 514,515,534,535 Size: 2,2 Category: Cliff-Type-Changer PickAny: False @@ -2490,7 +2744,8 @@ Templates: 0: Cliff Template@254: Id: 254 - Image: BASE254 + Image: BLOXBASE + Frames: 516,517,536,537 Size: 2,2 Category: Cliff-Type-Changer PickAny: False @@ -2501,7 +2756,8 @@ Templates: 1: Cliff Template@255: Id: 255 - Image: BASE255 + Image: BLOXBASE + Frames: 404,405,424,425 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2512,7 +2768,8 @@ Templates: 2: Cliff Template@256: Id: 256 - Image: BASE256 + Image: BLOXBASE + Frames: 406,407,426,427 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -2523,7 +2780,8 @@ Templates: 0: Cliff Template@257: Id: 257 - Image: BASE257 + Image: BLOXBASE + Frames: 48,49,50,51,52,68,69,70,71,72 Size: 5,2 PickAny: False Tiles: @@ -2539,7 +2797,8 @@ Templates: 5: Sand Template@258: Id: 258 - Image: BASE258 + Image: BLOXBASE + Frames: 676,696 Size: 1,2 Category: BaseBorder-Cliff PickAny: False @@ -2548,7 +2807,8 @@ Templates: 0: Cliff Template@259: Id: 259 - Image: BASE259 + Image: BLOXBASE + Frames: 303 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -2556,7 +2816,8 @@ Templates: 0: Transition Template@260: Id: 260 - Image: BASE260 + Image: BLOXBASE + Frames: 304 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -2564,7 +2825,8 @@ Templates: 0: Transition Template@261: Id: 261 - Image: BASE261 + Image: BLOXBASE + Frames: 324 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -2572,7 +2834,8 @@ Templates: 0: Transition Template@262: Id: 262 - Image: BASE262 + Image: BLOXBASE + Frames: 323 Size: 1,1 Category: Rock-SandSmooth PickAny: False @@ -2580,7 +2843,8 @@ Templates: 0: Transition Template@263: Id: 263 - Image: BASE263 + Image: BLOXBASE + Frames: 511,512,513,531,532,533 Size: 3,2 Category: BaseBorder-Cliff PickAny: False @@ -2593,7 +2857,8 @@ Templates: 3: Cliff Template@264: Id: 264 - Image: BASE264 + Image: BLOXBASE + Frames: 471,472,473,491,492,493 Size: 3,2 Category: BaseBorder-Cliff PickAny: False @@ -2606,7 +2871,8 @@ Templates: 0: Cliff Template@265: Id: 265 - Image: BASE265 + Image: BLOXBASE + Frames: 552,553,554,555,556,572,573,574,575,576 Size: 5,2 PickAny: False Tiles: @@ -2622,21 +2888,24 @@ Templates: 1: Rock Template@266: Id: 266 - Image: BASE266 + Image: BLOXBASE + Frames: 595 Size: 1,1 PickAny: False Tiles: 0: Rock Template@267: Id: 267 - Image: BASE267 + Image: BLOXBASE + Frames: 596 Size: 1,1 PickAny: False Tiles: 0: Rock Template@268: Id: 268 - Image: BASE268 + Image: BLOXBASE + Frames: 306,307 Size: 2,1 PickAny: False Tiles: @@ -2644,7 +2913,8 @@ Templates: 1: Rock Template@269: Id: 269 - Image: BASE269 + Image: BLOXBASE + Frames: 326,327 Size: 2,1 Category: Rock-SandSmooth PickAny: False @@ -2653,7 +2923,8 @@ Templates: 0: Transition Template@270: Id: 270 - Image: BASE270 + Image: BLOXBASE + Frames: 592,593,594 Size: 3,1 PickAny: False Tiles: @@ -2662,7 +2933,8 @@ Templates: 2: Rock Template@271: Id: 271 - Image: BAT00 + Image: BLOXBAT + Frames: 1 Size: 1,1 Category: Rock-Detail PickAny: False @@ -2670,7 +2942,8 @@ Templates: 0: Rough Template@272: Id: 272 - Image: BAT01 + Image: BLOXBAT + Frames: 2 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2678,7 +2951,8 @@ Templates: 0: Rough Template@273: Id: 273 - Image: BAT02 + Image: BLOXBAT + Frames: 3 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2686,7 +2960,8 @@ Templates: 0: Rough Template@274: Id: 274 - Image: BAT03 + Image: BLOXBAT + Frames: 4 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2694,7 +2969,8 @@ Templates: 0: Rough Template@275: Id: 275 - Image: BAT04 + Image: BLOXBAT + Frames: 5 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2702,7 +2978,8 @@ Templates: 0: Rough Template@276: Id: 276 - Image: BAT05 + Image: BLOXBAT + Frames: 6 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2710,7 +2987,8 @@ Templates: 0: Rough Template@277: Id: 277 - Image: BAT06 + Image: BLOXBAT + Frames: 322 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2718,7 +2996,8 @@ Templates: 0: Cliff Template@278: Id: 278 - Image: BAT07 + Image: BLOXBAT + Frames: 165 Size: 1,1 Category: Rock-Detail PickAny: False @@ -2726,7 +3005,8 @@ Templates: 0: Rough Template@279: Id: 279 - Image: BAT08 + Image: BLOXBAT + Frames: 164 Size: 1,1 Category: Rock-Detail PickAny: False @@ -2734,7 +3014,8 @@ Templates: 0: Rough Template@280: Id: 280 - Image: BAT09 + Image: BLOXBAT + Frames: 184 Size: 1,1 Category: Rock-Detail PickAny: False @@ -2742,7 +3023,8 @@ Templates: 0: Rock Template@281: Id: 281 - Image: BAT10 + Image: BLOXBAT + Frames: 305 Size: 1,1 Category: Rock-Detail PickAny: False @@ -2750,7 +3032,8 @@ Templates: 0: Rough Template@282: Id: 282 - Image: BAT11 + Image: BLOXBAT + Frames: 325 Size: 1,1 Category: Rock-Detail PickAny: False @@ -2758,7 +3041,8 @@ Templates: 0: Rough Template@283: Id: 283 - Image: BAT12 + Image: BLOXBAT + Frames: 289,290,309,310 Size: 2,2 Category: Sand-Detail PickAny: False @@ -2769,7 +3053,8 @@ Templates: 1: Rough Template@284: Id: 284 - Image: BAT13 + Image: BLOXBAT + Frames: 316 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2777,7 +3062,8 @@ Templates: 0: Sand Template@285: Id: 285 - Image: BAT14 + Image: BLOXBAT + Frames: 297 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2785,7 +3071,8 @@ Templates: 0: Sand Template@286: Id: 286 - Image: BAT15 + Image: BLOXBAT + Frames: 338,339,358,359 Size: 2,2 Category: Sand-Detail PickAny: False @@ -2796,7 +3083,8 @@ Templates: 1: Sand Template@287: Id: 287 - Image: BAT16 + Image: BLOXBAT + Frames: 340,341,360,361,380,381 Size: 2,3 Category: Sand-Detail PickAny: False @@ -2809,7 +3097,8 @@ Templates: 1: Rough Template@288: Id: 288 - Image: BAT17 + Image: BLOXBAT + Frames: 342,343,362,363,382,383 Size: 2,3 Category: Sand-Detail PickAny: False @@ -2822,7 +3111,8 @@ Templates: 1: Rough Template@289: Id: 289 - Image: BAT18 + Image: BLOXBAT + Frames: 344,345,364,365,384,385 Size: 2,3 Category: Sand-Detail PickAny: False @@ -2835,7 +3125,8 @@ Templates: 1: Rough Template@290: Id: 290 - Image: BAT19 + Image: BLOXBAT + Frames: 349,350,369,370,389,390 Size: 2,3 Category: Sand-Detail PickAny: False @@ -2848,7 +3139,8 @@ Templates: 1: Sand Template@291: Id: 291 - Image: BAT20 + Image: BLOXBAT + Frames: 351,371 Size: 1,2 Category: Sand-Detail PickAny: False @@ -2857,7 +3149,8 @@ Templates: 1: Sand Template@292: Id: 292 - Image: BAT21 + Image: BLOXBAT + Frames: 391 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2865,7 +3158,8 @@ Templates: 0: Sand Template@293: Id: 293 - Image: BAT22 + Image: BLOXBAT + Frames: 392 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2873,7 +3167,8 @@ Templates: 0: Sand Template@294: Id: 294 - Image: BAT23 + Image: BLOXBAT + Frames: 393 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2881,7 +3176,8 @@ Templates: 0: Sand Template@295: Id: 295 - Image: BAT24 + Image: BLOXBAT + Frames: 352,372 Size: 1,2 Category: Sand-Detail PickAny: False @@ -2890,7 +3186,8 @@ Templates: 0: Sand Template@296: Id: 296 - Image: BAT25 + Image: BLOXBAT + Frames: 353 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2898,7 +3195,8 @@ Templates: 0: Sand Template@297: Id: 297 - Image: BAT26 + Image: BLOXBAT + Frames: 354 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2906,7 +3204,8 @@ Templates: 0: Sand Template@298: Id: 298 - Image: BAT27 + Image: BLOXBAT + Frames: 374 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2914,7 +3213,8 @@ Templates: 0: Sand Template@299: Id: 299 - Image: BAT28 + Image: BLOXBAT + Frames: 373 Size: 1,1 Category: Sand-Detail PickAny: False @@ -2922,7 +3222,8 @@ Templates: 0: Sand Template@300: Id: 300 - Image: BAT29 + Image: BLOXBAT + Frames: 394,395,414,415 Size: 2,2 Category: Sand-Detail PickAny: False @@ -2933,7 +3234,8 @@ Templates: 1: Sand Template@301: Id: 301 - Image: BAT30 + Image: BLOXBAT + Frames: 434,435 Size: 2,1 Category: Rock-Detail PickAny: False @@ -2942,7 +3244,8 @@ Templates: 1: Rough Template@302: Id: 302 - Image: BAT31 + Image: BLOXBAT + Frames: 355,375 Size: 1,2 Category: Rock-Detail PickAny: False @@ -2951,7 +3254,8 @@ Templates: 1: Rough Template@303: Id: 303 - Image: BAT32 + Image: BLOXBAT + Frames: 356,357 Size: 2,1 Category: Rock-Detail PickAny: False @@ -2960,7 +3264,8 @@ Templates: 1: Rough Template@304: Id: 304 - Image: BAT33 + Image: BLOXBAT + Frames: 462,463 Size: 2,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2969,7 +3274,8 @@ Templates: 1: Rough Template@305: Id: 305 - Image: BAT34 + Image: BLOXBAT + Frames: 551 Size: 1,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2977,7 +3283,8 @@ Templates: 0: Rough Template@306: Id: 306 - Image: BAT35 + Image: BLOXBAT + Frames: 607,608,627,628 Size: 2,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2988,7 +3295,8 @@ Templates: 1: Rough Template@307: Id: 307 - Image: BAT36 + Image: BLOXBAT + Frames: 609,610,629,630 Size: 2,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -2999,7 +3307,8 @@ Templates: 1: Rough Template@308: Id: 308 - Image: BAT37 + Image: BLOXBAT + Frames: 652,653,672,673 Size: 2,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -3010,7 +3319,8 @@ Templates: 1: Rough Template@309: Id: 309 - Image: BAT38 + Image: BLOXBAT + Frames: 713,714,715,733,734,735 Size: 3,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -3023,7 +3333,8 @@ Templates: 1: Rough Template@310: Id: 310 - Image: BAT39 + Image: BLOXBAT + Frames: 709,710,711,712,729,730,731,732 Size: 4,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -3038,7 +3349,8 @@ Templates: 1: Rough Template@311: Id: 311 - Image: BAT40 + Image: BLOXBAT + Frames: 661,662,681,682 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3049,7 +3361,8 @@ Templates: 1: Sand Template@312: Id: 312 - Image: BAT41 + Image: BLOXBAT + Frames: 683 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3057,7 +3370,8 @@ Templates: 0: Sand Template@313: Id: 313 - Image: BAT42 + Image: BLOXBAT + Frames: 684 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3065,7 +3379,8 @@ Templates: 0: Sand Template@314: Id: 314 - Image: BAT43 + Image: BLOXBAT + Frames: 703 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3073,7 +3388,8 @@ Templates: 0: Sand Template@315: Id: 315 - Image: BAT44 + Image: BLOXBAT + Frames: 723 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3081,7 +3397,8 @@ Templates: 0: Sand Template@316: Id: 316 - Image: BAT45 + Image: BLOXBAT + Frames: 722 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3089,7 +3406,8 @@ Templates: 0: Sand Template@317: Id: 317 - Image: BAT46 + Image: BLOXBAT + Frames: 721 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3097,7 +3415,8 @@ Templates: 0: Sand Template@318: Id: 318 - Image: BAT47 + Image: BLOXBAT + Frames: 720 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3105,7 +3424,8 @@ Templates: 0: Sand Template@319: Id: 319 - Image: BAT48 + Image: BLOXBAT + Frames: 700 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3113,7 +3433,8 @@ Templates: 0: Sand Template@320: Id: 320 - Image: BAT49 + Image: BLOXBAT + Frames: 701,702 Size: 2,1 Category: Sand-Detail PickAny: False @@ -3122,7 +3443,8 @@ Templates: 1: Sand Template@321: Id: 321 - Image: BAT50 + Image: BLOXBAT + Frames: 741 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3130,7 +3452,8 @@ Templates: 0: Sand Template@322: Id: 322 - Image: BAT51 + Image: BLOXBAT + Frames: 742 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3138,7 +3461,8 @@ Templates: 0: Sand Template@323: Id: 323 - Image: BAT52 + Image: BLOXBAT + Frames: 743 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3146,7 +3470,8 @@ Templates: 0: Sand Template@324: Id: 324 - Image: BAT53 + Image: BLOXBAT + Frames: 744 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3154,7 +3479,8 @@ Templates: 0: Sand Template@325: Id: 325 - Image: BAT54 + Image: BLOXBAT + Frames: 745,746 Size: 2,1 Category: Sand-Detail PickAny: False @@ -3163,7 +3489,8 @@ Templates: 1: Sand Template@326: Id: 326 - Image: BAT55 + Image: BLOXBAT + Frames: 747 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3171,7 +3498,8 @@ Templates: 0: Sand Template@327: Id: 327 - Image: BAT56 + Image: BLOXBAT + Frames: 728 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3179,7 +3507,8 @@ Templates: 0: Sand Template@328: Id: 328 - Image: BAT57 + Image: BLOXBAT + Frames: 708 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3187,7 +3516,8 @@ Templates: 0: Sand Template@329: Id: 329 - Image: BAT58 + Image: BLOXBAT + Frames: 716,717,736,737 Size: 2,2 Category: Rock-Detail(Cliff) PickAny: False @@ -3198,7 +3528,8 @@ Templates: 1: Cliff Template@330: Id: 330 - Image: BAT59 + Image: BLOXBAT + Frames: 538,539,558,559 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3209,7 +3540,8 @@ Templates: 1: Rough Template@331: Id: 331 - Image: BAT60 + Image: BLOXBAT + Frames: 578,579,598,599 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3220,7 +3552,8 @@ Templates: 1: Rough Template@332: Id: 332 - Image: BAT61 + Image: BLOXBAT + Frames: 718,719,738,739,758,759 Size: 2,3 Category: Sand-Detail PickAny: False @@ -3233,7 +3566,8 @@ Templates: 1: Rough Template@333: Id: 333 - Image: BAT62 + Image: BLOXBAT + Frames: 704,705,724,725 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3244,7 +3578,8 @@ Templates: 1: Rock Template@334: Id: 334 - Image: BAT63 + Image: BLOXBAT + Frames: 706,707,726,727 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3255,7 +3590,8 @@ Templates: 1: Rock Template@335: Id: 335 - Image: BAT64 + Image: BLOXBAT + Frames: 660,680 Size: 1,2 Category: Sand-Detail PickAny: False @@ -3264,7 +3600,8 @@ Templates: 1: Sand Template@336: Id: 336 - Image: BAT65 + Image: BLOXBAT + Frames: 388 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3272,7 +3609,8 @@ Templates: 0: Sand Template@337: Id: 337 - Image: BAT66 + Image: BLOXBAT + Frames: 346,347,348,366,367,368 Size: 3,2 Category: Sand-Detail PickAny: False @@ -3285,7 +3623,8 @@ Templates: 1: Rough Template@338: Id: 338 - Image: BAT67 + Image: BLOXBAT + Frames: 386,387 Size: 2,1 Category: Sand-Detail PickAny: False @@ -3294,7 +3633,8 @@ Templates: 0: Rough Template@339: Id: 339 - Image: BGBS00 + Image: BLOXBGBS + Frames: 164,165,184,185 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3305,7 +3645,8 @@ Templates: 1: Rough Template@340: Id: 340 - Image: BGBS01 + Image: BLOXBGBS + Frames: 289,290,309,310 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3316,7 +3657,8 @@ Templates: 1: Sand Template@341: Id: 341 - Image: BGBS02 + Image: BLOXBGBS + Frames: 338,339,358,359 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3327,7 +3669,8 @@ Templates: 1: Rough Template@342: Id: 342 - Image: BGBS03 + Image: BLOXBGBS + Frames: 349,350,351,352,353,354,369,370,371,372,373,374,389,390,391,392,393,394 Size: 6,3 Category: Rock-Detail(Cliff) PickAny: False @@ -3352,7 +3695,8 @@ Templates: 7: Transition Template@343: Id: 343 - Image: BGBS04 + Image: BLOXBGBS + Frames: 340,341,342,360,361,362,380,381,382 Size: 3,3 Category: Rock-Detail(Cliff) PickAny: False @@ -3368,7 +3712,8 @@ Templates: 4: Transition Template@344: Id: 344 - Image: BGBS05 + Image: BLOXBGBS + Frames: 363,364,383,384 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3379,7 +3724,8 @@ Templates: 1: Rock Template@345: Id: 345 - Image: BGBS06 + Image: BLOXBGBS + Frames: 343,344 Size: 2,1 Category: Rock-Detail PickAny: False @@ -3388,7 +3734,8 @@ Templates: 1: Rock Template@346: Id: 346 - Image: BGBS07 + Image: BLOXBGBS + Frames: 345,346 Size: 2,1 Category: Rock-Detail PickAny: False @@ -3397,7 +3744,8 @@ Templates: 1: Rock Template@347: Id: 347 - Image: BGBS08 + Image: BLOXBGBS + Frames: 365,366,367,368,385,386,387,388 Size: 4,2 Category: Rock-Detail PickAny: False @@ -3412,7 +3760,8 @@ Templates: 1: Cliff Template@348: Id: 348 - Image: BGBS09 + Image: BLOXBGBS + Frames: 414,415,434,435 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3423,7 +3772,8 @@ Templates: 1: Rock Template@349: Id: 349 - Image: BGBS10 + Image: BLOXBGBS + Frames: 607,608,609,627,628,629 Size: 3,2 Category: Sand-Detail PickAny: False @@ -3436,7 +3786,8 @@ Templates: 1: Sand Template@350: Id: 350 - Image: BGBS11 + Image: BLOXBGBS + Frames: 610 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3444,7 +3795,8 @@ Templates: 0: Sand Template@351: Id: 351 - Image: BGBS12 + Image: BLOXBGBS + Frames: 652,653,672,673 Size: 2,2 Category: Rock-Detail PickAny: False @@ -3455,7 +3807,8 @@ Templates: 1: Rough Template@352: Id: 352 - Image: BGBS13 + Image: BLOXBGBS + Frames: 700 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3463,7 +3816,8 @@ Templates: 0: Sand Template@353: Id: 353 - Image: BGBS14 + Image: BLOXBGBS + Frames: 720 Size: 1,1 Category: Sand-Detail PickAny: False @@ -3471,7 +3825,8 @@ Templates: 0: Sand Template@354: Id: 354 - Image: BGBS15 + Image: BLOXBGBS + Frames: 701,702,703,721,722,723,741,742,743 Size: 3,3 Category: Sand-Detail PickAny: False @@ -3487,7 +3842,8 @@ Templates: 1: Rough Template@355: Id: 355 - Image: BGBS16 + Image: BLOXBGBS + Frames: 724,725,744,745 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3498,7 +3854,8 @@ Templates: 1: Rough Template@356: Id: 356 - Image: BGBS17 + Image: BLOXBGBS + Frames: 726,727,746,747 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3509,7 +3866,8 @@ Templates: 1: Rough Template@357: Id: 357 - Image: BGBS18 + Image: BLOXBGBS + Frames: 734,735 Size: 2,1 Category: Sand-Detail PickAny: False @@ -3518,7 +3876,8 @@ Templates: 1: Rough Template@358: Id: 358 - Image: BGBS19 + Image: BLOXBGBS + Frames: 716,717,736,737 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3529,7 +3888,8 @@ Templates: 1: Rough Template@359: Id: 359 - Image: BGBS20 + Image: BLOXBGBS + Frames: 718,719,738,739 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3540,7 +3900,8 @@ Templates: 1: Sand Template@360: Id: 360 - Image: BGBS21 + Image: BLOXBGBS + Frames: 758,759 Size: 2,1 Category: Sand-Detail PickAny: False @@ -3549,7 +3910,8 @@ Templates: 0: Rough Template@361: Id: 361 - Image: ICE00 + Image: BLOXICE + Frames: 1,2,3,4 Size: 4,1 Category: Sand-Detail PickAny: False @@ -3560,7 +3922,8 @@ Templates: 3: Cliff Template@362: Id: 362 - Image: ICE01 + Image: BLOXICE + Frames: 5,6,7 Size: 3,1 Category: Sand-Detail PickAny: False @@ -3570,7 +3933,8 @@ Templates: 2: Sand Template@363: Id: 363 - Image: ICE02 + Image: BLOXICE + Frames: 97,117 Size: 1,2 Category: Ice PickAny: False @@ -3579,7 +3943,8 @@ Templates: 1: Cliff Template@364: Id: 364 - Image: ICE03 + Image: BLOXICE + Frames: 164,165,184,185 Size: 2,2 Category: Rock-Detail(Cliff) PickAny: False @@ -3590,7 +3955,8 @@ Templates: 1: Cliff Template@365: Id: 365 - Image: ICE04 + Image: BLOXICE + Frames: 289,290 Size: 2,1 Category: Ice-Detail PickAny: False @@ -3599,7 +3965,8 @@ Templates: 1: Sand Template@366: Id: 366 - Image: ICE05 + Image: BLOXICE + Frames: 309,310,311,312 Size: 4,1 Category: Ice-Detail PickAny: False @@ -3610,7 +3977,8 @@ Templates: 3: Sand Template@367: Id: 367 - Image: ICE06 + Image: BLOXICE + Frames: 322 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3618,7 +3986,8 @@ Templates: 0: Sand Template@368: Id: 368 - Image: ICE07 + Image: BLOXICE + Frames: 325 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3626,7 +3995,8 @@ Templates: 0: Sand Template@369: Id: 369 - Image: ICE08 + Image: BLOXICE + Frames: 305 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3634,7 +4004,8 @@ Templates: 0: Sand Template@370: Id: 370 - Image: ICE09 + Image: BLOXICE + Frames: 297 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3642,7 +4013,8 @@ Templates: 0: Sand Template@371: Id: 371 - Image: ICE10 + Image: BLOXICE + Frames: 375,395,415,435 Size: 1,4 Category: Ice-Detail PickAny: False @@ -3653,7 +4025,8 @@ Templates: 3: Sand Template@372: Id: 372 - Image: ICE11 + Image: BLOXICE + Frames: 414,434 Size: 1,2 Category: Ice-Detail PickAny: False @@ -3662,7 +4035,8 @@ Templates: 1: Sand Template@373: Id: 373 - Image: ICE12 + Image: BLOXICE + Frames: 340,341,342,343,344,345,360,361,362,363,364,365,380,381,382,383,384,385 Size: 6,3 Category: Ice-Detail PickAny: False @@ -3687,7 +4061,8 @@ Templates: 7: Sand Template@374: Id: 374 - Image: ICE13 + Image: BLOXICE + Frames: 366,367,368,386,387,388 Size: 3,2 Category: Ice-Detail PickAny: False @@ -3700,7 +4075,8 @@ Templates: 1: Sand Template@375: Id: 375 - Image: ICE14 + Image: BLOXICE + Frames: 346 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3708,7 +4084,8 @@ Templates: 0: Sand Template@376: Id: 376 - Image: ICE15 + Image: BLOXICE + Frames: 349,350,351,352,369,370,371,372,389,390,391,392 Size: 4,3 Category: Ice PickAny: False @@ -3727,7 +4104,8 @@ Templates: 6: Cliff Template@377: Id: 377 - Image: ICE16 + Image: BLOXICE + Frames: 355,356,357,358 Size: 4,1 Category: Ice-Detail PickAny: False @@ -3738,7 +4116,8 @@ Templates: 3: Sand Template@378: Id: 378 - Image: ICE17 + Image: BLOXICE + Frames: 353,354,373,374,393,394 Size: 2,3 Category: Ice-Detail PickAny: False @@ -3751,7 +4130,8 @@ Templates: 1: Sand Template@379: Id: 379 - Image: ICE18 + Image: BLOXICE + Frames: 462 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3759,7 +4139,8 @@ Templates: 0: Sand Template@380: Id: 380 - Image: ICE19 + Image: BLOXICE + Frames: 463 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3767,7 +4148,8 @@ Templates: 0: Sand Template@381: Id: 381 - Image: ICE20 + Image: BLOXICE + Frames: 551 Size: 1,1 Category: Z-Crap(Unusual) PickAny: False @@ -3775,7 +4157,8 @@ Templates: 0: Sand Template@382: Id: 382 - Image: ICE21 + Image: BLOXICE + Frames: 579,599,619,639 Size: 1,4 Category: Z-Crap(Unusual) PickAny: False @@ -3786,7 +4169,8 @@ Templates: 3: Cliff Template@383: Id: 383 - Image: ICE22 + Image: BLOXICE + Frames: 539,559 Size: 1,2 Category: Z-Crap(Unusual) PickAny: False @@ -3795,7 +4179,8 @@ Templates: 0: Cliff Template@384: Id: 384 - Image: ICE23 + Image: BLOXICE + Frames: 557,558,577,578,597,598 Size: 2,3 Category: Sand-Detail PickAny: False @@ -3808,7 +4193,8 @@ Templates: 0: Rough Template@385: Id: 385 - Image: ICE24 + Image: BLOXICE + Frames: 607,608,627,628 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3819,7 +4205,8 @@ Templates: 1: Rough Template@386: Id: 386 - Image: ICE25 + Image: BLOXICE + Frames: 609,610,629,630 Size: 2,2 Category: Sand-Detail PickAny: False @@ -3830,7 +4217,8 @@ Templates: 1: Sand Template@387: Id: 387 - Image: ICE26 + Image: BLOXICE + Frames: 700,701,720,721,740,741 Size: 2,3 Category: Ice PickAny: False @@ -3843,7 +4231,8 @@ Templates: 1: Cliff Template@388: Id: 388 - Image: ICE27 + Image: BLOXICE + Frames: 702,703,722,723 Size: 2,2 Category: Ice PickAny: False @@ -3854,7 +4243,8 @@ Templates: 1: Cliff Template@389: Id: 389 - Image: ICE28 + Image: BLOXICE + Frames: 742 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3862,7 +4252,8 @@ Templates: 0: Sand Template@390: Id: 390 - Image: ICE29 + Image: BLOXICE + Frames: 743 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3870,7 +4261,8 @@ Templates: 0: Sand Template@391: Id: 391 - Image: ICE30 + Image: BLOXICE + Frames: 744 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3878,7 +4270,8 @@ Templates: 0: Sand Template@392: Id: 392 - Image: ICE31 + Image: BLOXICE + Frames: 745 Size: 1,1 Category: Ice-Detail PickAny: False @@ -3886,7 +4279,8 @@ Templates: 0: Sand Template@393: Id: 393 - Image: ICE32 + Image: BLOXICE + Frames: 704,705,724,725 Size: 2,2 Category: Ice PickAny: False @@ -3897,7 +4291,8 @@ Templates: 0: Cliff Template@394: Id: 394 - Image: ICE33 + Image: BLOXICE + Frames: 706,707,726,727,746,747 Size: 2,3 Category: Ice PickAny: False @@ -3910,7 +4305,8 @@ Templates: 1: Ice Template@395: Id: 395 - Image: ICE34 + Image: BLOXICE + Frames: 708,709,728,729 Size: 2,2 Category: Ice PickAny: False @@ -3921,7 +4317,8 @@ Templates: 1: Cliff Template@396: Id: 396 - Image: ICE35 + Image: BLOXICE + Frames: 710,711,730,731 Size: 2,2 Category: Ice PickAny: False @@ -3932,7 +4329,8 @@ Templates: 1: Ice Template@397: Id: 397 - Image: ICE36 + Image: BLOXICE + Frames: 712,713,732,733 Size: 2,2 Category: Ice PickAny: False @@ -3943,7 +4341,8 @@ Templates: 1: Cliff Template@398: Id: 398 - Image: ICE37 + Image: BLOXICE + Frames: 714,715,734,735 Size: 2,2 Category: Ice PickAny: False @@ -3954,7 +4353,8 @@ Templates: 1: Ice Template@399: Id: 399 - Image: ICE38 + Image: BLOXICE + Frames: 716,717 Size: 2,1 Category: Ice-Detail PickAny: False @@ -3963,7 +4363,8 @@ Templates: 1: Sand Template@400: Id: 400 - Image: ICE39 + Image: BLOXICE + Frames: 736,737 Size: 2,1 Category: Ice-Detail PickAny: False @@ -3972,7 +4373,8 @@ Templates: 0: Sand Template@401: Id: 401 - Image: ICE40 + Image: BLOXICE + Frames: 718,719,738,739,758,759 Size: 2,3 Category: Rock-Detail(Cliff) PickAny: False @@ -3985,7 +4387,8 @@ Templates: 1: Sand Template@402: Id: 402 - Image: ICE41 + Image: BLOXICE + Frames: 660,661,662 Size: 3,1 Category: Z-Crap(Unusual) PickAny: False @@ -3995,7 +4398,8 @@ Templates: 2: Rough Template@403: Id: 403 - Image: ICE42 + Image: BLOXICE + Frames: 680,681 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4004,7 +4408,8 @@ Templates: 1: Rough Template@404: Id: 404 - Image: ICE43 + Image: BLOXICE + Frames: 682,683 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4013,7 +4418,8 @@ Templates: 1: Rough Template@405: Id: 405 - Image: ICE44 + Image: BLOXICE + Frames: 684,685 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4022,7 +4428,8 @@ Templates: 1: Rough Template@406: Id: 406 - Image: ICE45 + Image: BLOXICE + Frames: 652,653 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4031,7 +4438,8 @@ Templates: 1: Rough Template@407: Id: 407 - Image: ICE46 + Image: BLOXICE + Frames: 672,673 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4040,7 +4448,8 @@ Templates: 0: Rough Template@408: Id: 408 - Image: TREE00 + Image: BLOXTREE + Frames: 6 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4048,7 +4457,8 @@ Templates: 0: Rough Template@409: Id: 409 - Image: TREE01 + Image: BLOXTREE + Frames: 7 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4056,14 +4466,16 @@ Templates: 0: Rough Template@410: Id: 410 - Image: TREE02 + Image: BLOXTREE + Frames: 67 Size: 1,1 PickAny: False Tiles: 0: Rock Template@411: Id: 411 - Image: TREE03 + Image: BLOXTREE + Frames: 97,117 Size: 1,2 Category: Sand-Detail PickAny: False @@ -4072,7 +4484,8 @@ Templates: 1: Cliff Template@412: Id: 412 - Image: TREE04 + Image: BLOXTREE + Frames: 340,341,360,361 Size: 2,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -4083,7 +4496,8 @@ Templates: 1: Rough Template@413: Id: 413 - Image: TREE05 + Image: BLOXTREE + Frames: 342,343,344,362,363,364 Size: 3,2 Category: Sand-Detail(Rotten Base) PickAny: False @@ -4096,7 +4510,8 @@ Templates: 1: Rough Template@414: Id: 414 - Image: TREE06 + Image: BLOXTREE + Frames: 1,2,3,4,5 Size: 5,1 Category: Rock-Detail PickAny: False @@ -4108,7 +4523,8 @@ Templates: 4: Rock Template@415: Id: 415 - Image: TREE07 + Image: BLOXTREE + Frames: 305,325 Size: 1,2 Category: Sand-Detail PickAny: False @@ -4117,7 +4533,8 @@ Templates: 1: Sand Template@416: Id: 416 - Image: TREE08 + Image: BLOXTREE + Frames: 289,290,309,310 Size: 2,2 Category: Sand-Detail PickAny: False @@ -4128,7 +4545,8 @@ Templates: 1: Sand Template@417: Id: 417 - Image: TREE09 + Image: BLOXTREE + Frames: 311,312 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4137,7 +4555,8 @@ Templates: 1: Transition Template@418: Id: 418 - Image: TREE10 + Image: BLOXTREE + Frames: 316 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4145,7 +4564,8 @@ Templates: 0: Rock Template@419: Id: 419 - Image: TREE11 + Image: BLOXTREE + Frames: 297 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4153,7 +4573,8 @@ Templates: 0: Rock Template@420: Id: 420 - Image: TREE12 + Image: BLOXTREE + Frames: 319 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4161,7 +4582,8 @@ Templates: 0: Rock Template@421: Id: 421 - Image: TREE13 + Image: BLOXTREE + Frames: 338,339,358,359 Size: 2,2 Category: Rock-Detail PickAny: False @@ -4172,7 +4594,8 @@ Templates: 1: Sand Template@422: Id: 422 - Image: TREE14 + Image: BLOXTREE + Frames: 374,375,394,395 Size: 2,2 Category: Rock-Detail PickAny: False @@ -4183,7 +4606,8 @@ Templates: 1: Rock Template@423: Id: 423 - Image: TREE15 + Image: BLOXTREE + Frames: 414,415,434,435 Size: 2,2 Category: Rock-Detail PickAny: False @@ -4194,7 +4618,8 @@ Templates: 1: Rock Template@424: Id: 424 - Image: TREE16 + Image: BLOXTREE + Frames: 349,350,351,352,353,354 Size: 6,1 Category: Rock-Detail PickAny: False @@ -4207,7 +4632,8 @@ Templates: 5: Rock Template@425: Id: 425 - Image: TREE17 + Image: BLOXTREE + Frames: 355,356,357 Size: 3,1 Category: Rock-Detail PickAny: False @@ -4217,7 +4643,8 @@ Templates: 2: Rock Template@426: Id: 426 - Image: TREE18 + Image: BLOXTREE + Frames: 462,463 Size: 2,1 Category: Rock-Detail PickAny: False @@ -4226,7 +4653,8 @@ Templates: 0: Rock Template@427: Id: 427 - Image: TREE19 + Image: BLOXTREE + Frames: 538,539,558,559 Size: 2,2 Category: SandyCliff PickAny: False @@ -4237,7 +4665,8 @@ Templates: 1: Cliff Template@428: Id: 428 - Image: TREE20 + Image: BLOXTREE + Frames: 578,579,598,599 Size: 2,2 Category: Sand-Detail PickAny: False @@ -4248,7 +4677,8 @@ Templates: 1: Transition Template@429: Id: 429 - Image: TREE21 + Image: BLOXTREE + Frames: 700,701,702,720,721,722,740,741,742 Size: 3,3 Category: Sand-Detail PickAny: False @@ -4264,7 +4694,8 @@ Templates: 4: Rough Template@430: Id: 430 - Image: TREE22 + Image: BLOXTREE + Frames: 747 Size: 1,1 Category: Z-Crap(Unusual) PickAny: False @@ -4272,7 +4703,8 @@ Templates: 0: Rough Template@431: Id: 431 - Image: TREE23 + Image: BLOXTREE + Frames: 707,708,727,728 Size: 2,2 Category: Sand-Detail PickAny: False @@ -4283,7 +4715,8 @@ Templates: 1: Rough Template@432: Id: 432 - Image: TREE24 + Image: BLOXTREE + Frames: 709 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4291,7 +4724,8 @@ Templates: 0: Sand Template@433: Id: 433 - Image: TREE25 + Image: BLOXTREE + Frames: 729 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4299,7 +4733,8 @@ Templates: 0: Rough Template@434: Id: 434 - Image: TREE26 + Image: BLOXTREE + Frames: 730,731 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4308,7 +4743,8 @@ Templates: 0: Rough Template@435: Id: 435 - Image: TREE27 + Image: BLOXTREE + Frames: 710,711,712 Size: 3,1 Category: Sand-Detail PickAny: False @@ -4318,7 +4754,8 @@ Templates: 2: Rough Template@436: Id: 436 - Image: TREE28 + Image: BLOXTREE + Frames: 718,719,738,739,758,759 Size: 2,3 Category: Sand-Detail PickAny: False @@ -4331,14 +4768,16 @@ Templates: 1: Rough Template@437: Id: 437 - Image: TREE29 + Image: BLOXTREE + Frames: 732 Size: 1,1 PickAny: False Tiles: 0: Rock Template@438: Id: 438 - Image: TREE30 + Image: BLOXTREE + Frames: 713,714,733,734 Size: 2,2 Category: Rock-Detail PickAny: False @@ -4349,7 +4788,8 @@ Templates: 1: Rock Template@439: Id: 439 - Image: TREE31 + Image: BLOXTREE + Frames: 715,716,717,735,736,737 Size: 3,2 Category: Rock-Detail PickAny: False @@ -4362,7 +4802,8 @@ Templates: 5: Rock Template@440: Id: 440 - Image: TREE32 + Image: BLOXTREE + Frames: 652,653,672,673 Size: 2,2 Category: Rock-Detail PickAny: False @@ -4373,7 +4814,8 @@ Templates: 1: Rock Template@441: Id: 441 - Image: TREE33 + Image: BLOXTREE + Frames: 610 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4381,7 +4823,8 @@ Templates: 0: Rock Template@442: Id: 442 - Image: TREE34 + Image: BLOXTREE + Frames: 630 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4389,7 +4832,8 @@ Templates: 0: Rock Template@443: Id: 443 - Image: TREE35 + Image: BLOXTREE + Frames: 607,608,609,627,628,629 Size: 3,2 Category: Rock-Detail(Cliff) PickAny: False @@ -4402,7 +4846,8 @@ Templates: 4: Cliff Template@444: Id: 444 - Image: TREE36 + Image: BLOXTREE + Frames: 551 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4410,7 +4855,8 @@ Templates: 0: Rock Template@445: Id: 445 - Image: WAST00 + Image: BLOXWAST + Frames: 700,701,702,703,704,705,720,721,722,723,724,725,740,741,742,743,744,745 Size: 6,3 Category: Sand-Detail PickAny: False @@ -4435,7 +4881,8 @@ Templates: 10: Sand Template@446: Id: 446 - Image: WAST01 + Image: BLOXWAST + Frames: 683,684,685 Size: 3,1 Category: Sand-Detail PickAny: False @@ -4445,7 +4892,8 @@ Templates: 2: Dune Template@447: Id: 447 - Image: WAST02 + Image: BLOXWAST + Frames: 746,747 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4454,7 +4902,8 @@ Templates: 1: Dune Template@448: Id: 448 - Image: WAST03 + Image: BLOXWAST + Frames: 708,709,728,729 Size: 2,2 Category: Sand-Detail PickAny: False @@ -4465,7 +4914,8 @@ Templates: 0: Dune Template@449: Id: 449 - Image: WAST04 + Image: BLOXWAST + Frames: 710,711 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4474,7 +4924,8 @@ Templates: 1: Dune Template@450: Id: 450 - Image: WAST05 + Image: BLOXWAST + Frames: 730,731 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4483,7 +4934,8 @@ Templates: 0: Sand Template@451: Id: 451 - Image: WAST06 + Image: BLOXWAST + Frames: 712 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4491,7 +4943,8 @@ Templates: 0: Sand Template@452: Id: 452 - Image: WAST07 + Image: BLOXWAST + Frames: 732 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4499,7 +4952,8 @@ Templates: 0: Sand Template@453: Id: 453 - Image: WAST08 + Image: BLOXWAST + Frames: 713,733 Size: 1,2 Category: Sand-Detail PickAny: False @@ -4508,7 +4962,8 @@ Templates: 1: Dune Template@454: Id: 454 - Image: WAST09 + Image: BLOXWAST + Frames: 734,735 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4517,7 +4972,8 @@ Templates: 1: Sand Template@455: Id: 455 - Image: WAST10 + Image: BLOXWAST + Frames: 714,715 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4526,7 +4982,8 @@ Templates: 1: Sand Template@456: Id: 456 - Image: WAST11 + Image: BLOXWAST + Frames: 716,717,718,736,737,738 Size: 3,2 Category: Sand-Detail PickAny: False @@ -4539,7 +4996,8 @@ Templates: 5: Sand Template@457: Id: 457 - Image: WAST12 + Image: BLOXWAST + Frames: 739 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4547,7 +5005,8 @@ Templates: 0: Sand Template@458: Id: 458 - Image: WAST13 + Image: BLOXWAST + Frames: 758,759 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4556,7 +5015,8 @@ Templates: 0: Sand Template@459: Id: 459 - Image: WAST14 + Image: BLOXWAST + Frames: 652,653,672,673 Size: 2,2 Category: Sand-Detail PickAny: False @@ -4567,7 +5027,8 @@ Templates: 1: Sand Template@460: Id: 460 - Image: WAST15 + Image: BLOXWAST + Frames: 345,346,365,366 Size: 2,2 Category: Dead-Wurm PickAny: False @@ -4578,7 +5039,8 @@ Templates: 1: Rough Template@461: Id: 461 - Image: WAST16 + Image: BLOXWAST + Frames: 373,374,375 Size: 3,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -4588,7 +5050,8 @@ Templates: 2: Rough Template@462: Id: 462 - Image: WAST17 + Image: BLOXWAST + Frames: 355,356,357,358,359 Size: 5,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -4600,7 +5063,8 @@ Templates: 4: Rough Template@463: Id: 463 - Image: WAST18 + Image: BLOXWAST + Frames: 338,339 Size: 2,1 Category: Sand-Detail(Rotten Base) PickAny: False @@ -4609,7 +5073,8 @@ Templates: 1: Rough Template@464: Id: 464 - Image: WAST19 + Image: BLOXWAST + Frames: 97,117 Size: 1,2 Category: Dead-Wurm PickAny: False @@ -4618,7 +5083,8 @@ Templates: 1: Cliff Template@465: Id: 465 - Image: WAST20 + Image: BLOXWAST + Frames: 67 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4626,7 +5092,8 @@ Templates: 0: Sand Template@466: Id: 466 - Image: WAST21 + Image: BLOXWAST + Frames: 1 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4634,7 +5101,8 @@ Templates: 0: Sand Template@467: Id: 467 - Image: WAST22 + Image: BLOXWAST + Frames: 2,3 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4643,7 +5111,8 @@ Templates: 1: Sand Template@468: Id: 468 - Image: WAST23 + Image: BLOXWAST + Frames: 4 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4651,7 +5120,8 @@ Templates: 0: Cliff Template@469: Id: 469 - Image: WAST24 + Image: BLOXWAST + Frames: 5 Size: 1,1 Category: Sand-Detail PickAny: False @@ -4659,7 +5129,8 @@ Templates: 0: Cliff Template@470: Id: 470 - Image: WAST25 + Image: BLOXWAST + Frames: 6,7 Size: 2,1 Category: Sand-Detail PickAny: False @@ -4668,7 +5139,8 @@ Templates: 1: Cliff Template@471: Id: 471 - Image: WAST26 + Image: BLOXWAST + Frames: 312 Size: 1,1 Category: Dead-Wurm PickAny: False @@ -4676,7 +5148,8 @@ Templates: 0: Sand Template@472: Id: 472 - Image: WAST27 + Image: BLOXWAST + Frames: 310,311 Size: 2,1 Category: Dead-Wurm PickAny: False @@ -4685,7 +5158,8 @@ Templates: 0: Sand Template@473: Id: 473 - Image: WAST28 + Image: BLOXWAST + Frames: 309 Size: 1,1 Category: Dead-Wurm PickAny: False @@ -4693,7 +5167,8 @@ Templates: 0: Sand Template@474: Id: 474 - Image: WAST29 + Image: BLOXWAST + Frames: 349,350,351,352,369,370,371,372,389,390,391,392 Size: 4,3 Category: Sand-Detail PickAny: False @@ -4712,7 +5187,8 @@ Templates: 6: Cliff Template@475: Id: 475 - Image: WAST30 + Image: BLOXWAST + Frames: 706,707,726,727 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -4723,7 +5199,8 @@ Templates: 1: Cliff Template@476: Id: 476 - Image: WAST31 + Image: BLOXWAST + Frames: 557,558,559,577,578,579 Size: 3,2 Category: BaseBorder-Cliff PickAny: False @@ -4736,7 +5213,8 @@ Templates: 5: Transition Template@477: Id: 477 - Image: WAST32 + Image: BLOXWAST + Frames: 619,639 Size: 1,2 Category: Sand-Detail PickAny: False @@ -4745,7 +5223,8 @@ Templates: 1: Rough Template@478: Id: 478 - Image: WAST33 + Image: BLOXWAST + Frames: 305 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4753,7 +5232,8 @@ Templates: 0: Rough Template@479: Id: 479 - Image: WAST34 + Image: BLOXWAST + Frames: 325 Size: 1,1 Category: Rock-Detail PickAny: False @@ -4761,7 +5241,8 @@ Templates: 0: Rough Template@480: Id: 480 - Image: WAST35 + Image: BLOXWAST + Frames: 385,386,387,388 Size: 4,1 Category: Sand-Detail PickAny: False @@ -4772,7 +5253,8 @@ Templates: 3: Rough Template@481: Id: 481 - Image: WAST36 + Image: BLOXWAST + Frames: 414,415,434,435 Size: 2,2 Category: BaseBorder-Cliff PickAny: False @@ -4783,7 +5265,8 @@ Templates: 1: Cliff Template@482: Id: 482 - Image: WAST37 + Image: BLOXWAST + Frames: 538,539 Size: 2,1 Category: Sand-Detail PickAny: False From eabe16b1ff943e8b4c2f3ce9e1f84441b554ca77 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 10:56:46 +0200 Subject: [PATCH 35/44] remove 2 low details maps --- mods/d2k/maps/black-mesa.oramap | Bin 5848 -> 0 bytes mods/d2k/maps/dune-boogie.oramap | Bin 3534 -> 0 bytes 2 files changed, 0 insertions(+), 0 deletions(-) delete mode 100644 mods/d2k/maps/black-mesa.oramap delete mode 100644 mods/d2k/maps/dune-boogie.oramap diff --git a/mods/d2k/maps/black-mesa.oramap b/mods/d2k/maps/black-mesa.oramap deleted file mode 100644 index dcfc24764d7a26cf695e91d7ddc9a9c14e900d9a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 5848 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 diff --git a/mods/d2k/maps/dune-boogie.oramap b/mods/d2k/maps/dune-boogie.oramap deleted file mode 100644 index da8dec2b0692ceae7dcd94ccd42e09b1e9324631..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 3534 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 Date: Sat, 17 Aug 2013 11:31:58 +0200 Subject: [PATCH 36/44] use DATA.R8 in the colorpicker --- mods/d2k/chrome/color-picker.yaml | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/mods/d2k/chrome/color-picker.yaml b/mods/d2k/chrome/color-picker.yaml index 3a4d93c0c5..5a099fff48 100644 --- a/mods/d2k/chrome/color-picker.yaml +++ b/mods/d2k/chrome/color-picker.yaml @@ -32,8 +32,8 @@ Background@COLOR_CHOOSER: ShpImage@FACT: X:160 Y:8 - Image:carryall - Frame:13 + Image:DATA.R8 + Frame:1936 Palette:colorpicker Button@RANDOM_BUTTON: Key:tab From 32c3563a04dc4951748be0509861908cbce539e4 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 17 Aug 2013 21:19:04 +1200 Subject: [PATCH 37/44] adjust the build palette origins to icon width --- OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs | 13 ++++++++++--- mods/d2k/chrome/ingame.yaml | 4 +++- 2 files changed, 13 insertions(+), 4 deletions(-) diff --git a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs index acdd435eb2..6b421354e8 100755 --- a/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs +++ b/OpenRA.Mods.RA/Widgets/BuildPaletteWidget.cs @@ -38,8 +38,8 @@ namespace OpenRA.Mods.RA.Widgets bool paletteOpen = false; - float2 paletteOpenOrigin = new float2(Game.viewport.Width - 215, 280); - float2 paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280); + float2 paletteOpenOrigin; + float2 paletteClosedOrigin; float2 paletteOrigin; int paletteAnimationLength = 7; @@ -63,11 +63,18 @@ namespace OpenRA.Mods.RA.Widgets cantBuild = new Animation("clock"); cantBuild.PlayFetchIndex("idle", () => 0); clock = new Animation("clock"); - paletteOrigin = paletteClosedOrigin; VisibleQueues = new List(); CurrentQueue = null; } + public override void Initialize(WidgetArgs args) + { + paletteOpenOrigin = new float2(Game.viewport.Width - Columns*IconWidth - 23, 280); + paletteClosedOrigin = new float2(Game.viewport.Width - 16, 280); + paletteOrigin = paletteClosedOrigin; + base.Initialize(args); + } + public override Rectangle EventBounds { get { return new Rectangle((int)(paletteOrigin.X) - 24, (int)(paletteOrigin.Y), 215, Math.Max(IconHeight * numActualRows, 40 * tabs.Count + 9)); } diff --git a/mods/d2k/chrome/ingame.yaml b/mods/d2k/chrome/ingame.yaml index aa23ebd289..b9d113e351 100644 --- a/mods/d2k/chrome/ingame.yaml +++ b/mods/d2k/chrome/ingame.yaml @@ -153,13 +153,15 @@ Container@PLAYER_WIDGETS: BuildPalette@INGAME_BUILD_PALETTE: X:WINDOW_RIGHT - 250 Y:280 - Width:238 # TODO: why is this ignored? + Width:238 Height:500 ReadyText: READY HoldText: ON HOLD RequiresText: Requires IconWidth: 60 IconHeight: 48 + Columns: 3 + Rows: 4 Background@DIPLOMACY_BG: Logic:DiplomacyLogic X:(WINDOW_RIGHT - WIDTH)/2 From 8c6074a08164de831a992d95049e503bfc5cea27 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 23:24:47 +0200 Subject: [PATCH 38/44] WithCrumbleOverlay for Dune 2000 buildings --- OpenRA.Game/Actor.cs | 8 +- OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj | 4 + OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs | 46 +++ OpenRA.Mods.RA/Activities/MakeAnimation.cs | 4 +- OpenRA.Mods.RA/Render/RenderBuilding.cs | 2 +- mods/d2k/rules/defaults.yaml | 1 + mods/d2k/rules/structures.yaml | 2 + mods/d2k/sequences/structures.yaml | 330 +++++++++++++++---- 8 files changed, 334 insertions(+), 63 deletions(-) create mode 100644 OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs diff --git a/OpenRA.Game/Actor.cs b/OpenRA.Game/Actor.cs index dc77cd1e13..936e4a0b9d 100755 --- a/OpenRA.Game/Actor.cs +++ b/OpenRA.Game/Actor.cs @@ -53,16 +53,16 @@ namespace OpenRA public Group Group; public int Generation; - internal Actor(World world, string name, TypeDictionary initDict ) + internal Actor(World world, string name, TypeDictionary initDict) { - var init = new ActorInitializer( this, initDict ); + var init = new ActorInitializer(this, initDict); World = world; ActorID = world.NextAID(); - if( initDict.Contains() ) + if (initDict.Contains()) Owner = init.Get(); - occupySpace = Lazy.New( () => TraitOrDefault() ); + occupySpace = Lazy.New(() => TraitOrDefault()); if (name != null) { diff --git a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj index eff78bf6ff..3f749abf5d 100644 --- a/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj +++ b/OpenRA.Mods.D2k/OpenRA.Mods.D2k.csproj @@ -82,6 +82,7 @@ + @@ -120,4 +121,7 @@ cd "$(SolutionDir)" true + + + \ No newline at end of file diff --git a/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs b/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs new file mode 100644 index 0000000000..2b8336f6b7 --- /dev/null +++ b/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs @@ -0,0 +1,46 @@ +#region Copyright & License Information +/* + * Copyright 2007-2013 The OpenRA Developers (see AUTHORS) + * This file is part of OpenRA, which is free software. It is made + * available to you under the terms of the GNU General Public License + * as published by the Free Software Foundation. For more information, + * see COPYING. + */ +#endregion + +using OpenRA.FileFormats; +using OpenRA.Graphics; +using OpenRA.Traits; +using OpenRA.Mods.RA.Buildings; + +namespace OpenRA.Mods.RA.Render +{ + public class WithCrumbleOverlayInfo : ITraitInfo, Requires + { + [Desc("Sequence name to use")] + public readonly string Sequence = "crumble-overlay"; + + public object Create(ActorInitializer init) { return new WithCrumbleOverlay(init.self, this); } + } + + public class WithCrumbleOverlay : INotifyBuildComplete + { + Animation overlay; + bool buildComplete = false; + + public WithCrumbleOverlay(Actor self, WithCrumbleOverlayInfo info) + { + var rs = self.Trait(); + + overlay = new Animation(rs.GetImage(self)); + overlay.Play(info.Sequence); + rs.anims.Add("make_overlay_{0}".F(info.Sequence), + new AnimationWithOffset(overlay, null, () => !buildComplete, null)); + } + + public void BuildingComplete(Actor self) + { + buildComplete = true; + } + } +} \ No newline at end of file diff --git a/OpenRA.Mods.RA/Activities/MakeAnimation.cs b/OpenRA.Mods.RA/Activities/MakeAnimation.cs index 8444f34f8e..11f4385553 100644 --- a/OpenRA.Mods.RA/Activities/MakeAnimation.cs +++ b/OpenRA.Mods.RA/Activities/MakeAnimation.cs @@ -31,7 +31,7 @@ namespace OpenRA.Mods.RA.Activities bool complete = false; bool started = false; - public override Activity Tick( Actor self ) + public override Activity Tick(Actor self) { if (self.IsDead()) return NextActivity; @@ -66,6 +66,6 @@ namespace OpenRA.Mods.RA.Activities } // Cannot be cancelled - public override void Cancel( Actor self ) { } + public override void Cancel(Actor self) { } } } diff --git a/OpenRA.Mods.RA/Render/RenderBuilding.cs b/OpenRA.Mods.RA/Render/RenderBuilding.cs index 46e98d5a65..07eadc670e 100755 --- a/OpenRA.Mods.RA/Render/RenderBuilding.cs +++ b/OpenRA.Mods.RA/Render/RenderBuilding.cs @@ -47,7 +47,7 @@ namespace OpenRA.Mods.RA.Render var self = init.self; // Work around a bogus crash - anim.PlayRepeating( NormalizeSequence(self, "idle") ); + anim.PlayRepeating(NormalizeSequence(self, "idle")); self.Trait().SetAutodetectedFacings(anim.CurrentSequence.Facings); // Can't call Complete() directly from ctor because other traits haven't been inited yet diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 8e62a908b6..94aa3fdedc 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -236,3 +236,4 @@ Range: 3 BodyOrientation: UpdatesPlayerStatistics: + WithCrumbleOverlay: \ No newline at end of file diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index 627a15067c..b8ee1e9382 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -431,6 +431,7 @@ WALL: RenderDetectionCircle: DetectCloaked: Range: 5 + -WithCrumbleOverlay: ^ROCKETTOWER: Inherits: ^Building @@ -476,6 +477,7 @@ WALL: RenderDetectionCircle: DetectCloaked: Range: 6 + -WithCrumbleOverlay: ^REPAIR: Inherits: ^Building diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 315e39d9e8..097531eef4 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -179,7 +179,7 @@ rockettowerh: Facings: 1 Offset: -24,24 turret: DATA.R8 - Start: 2828 + Start: 2797 Facings: -32 Offset: -24,24 icon: DATA.R8 @@ -204,7 +204,7 @@ rockettowero: Facings: 1 Offset: -24,24 turret: DATA.R8 - Start: 2988 + Start: 2957 Facings: -32 Offset: -24,24 icon: DATA.R8 @@ -215,10 +215,15 @@ conyarda: idle: DATA.R8 Start: 2559 Offset: -48,64 - make: DATA.R8 # TODO: overlay + make: DATA.R8 Start: 4109 - Length: 42 + Length: 30 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4139 + Length: 12 + Offset: -48,64 + Tick: 200 damaged-idle: DATA.R8 Start: 2560 Offset: -48,64 @@ -239,10 +244,15 @@ conyarda: Offset: -30,-24 repaira: - make: DATA.R8 # TODO: overlay + make: DATA.R8 Start: 4370 - Length: 20 + Length: 10 Offset: -48,48 + crumble-overlay: DATA.R8 + Start: 4380 + Length: 10 + Offset: -48,48 + Tick: 100 idle: DATA.R8 Start: 2571 Offset: -48,48 @@ -267,10 +277,15 @@ repaira: Offset: -30,-24 repairh: - make: DATA.R8 # TODO: overlay + make: DATA.R8 Start: 4370 - Length: 20 + Length: 10 Offset: -48,48 + crumble-overlay: DATA.R8 + Start: 4380 + Length: 10 + Offset: -48,48 + Tick: 100 idle: DATA.R8 Start: 2731 Offset: -48,48 @@ -295,10 +310,15 @@ repairh: Offset: -30,-24 repairo: - make: DATA.R8 # TODO: overlay + make: DATA.R8 Start: 4370 - Length: 20 + Length: 10 Offset: -48,48 + crumble-overlay: DATA.R8 + Start: 4380 + Length: 10 + Offset: -48,48 + Tick: 100 idle: DATA.R8 Start: 2891 Offset: -48,48 @@ -342,8 +362,13 @@ starporta: Offset: -48,64 make: DATA.R8 Start: 4347 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4358 + Length: 11 + Offset: -48,64 + Tick: 100 bib: BLOXBASE.R8 Frames: 611, 612, 613, 631, 632, 633 Length: 6 @@ -358,8 +383,13 @@ pwra: Offset: -32,64 make: DATA.R8 Start: 4151 - Length: 24 + Length: 12 Offset: -32,64 + crumble-overlay: DATA.R8 + Start: 4163 + Length: 12 + Offset: -32,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2524 Offset: -32,64 @@ -386,9 +416,14 @@ barra: Start: 2525 Offset: -32,64 make: DATA.R8 - Start: 4175 - Length: 20 + Start: 4213 + Length: 8 Offset: -32,64 + crumble-overlay: DATA.R8 + Start: 4221 + Length: 9 + Offset: -32,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2526 Offset: -32,64 @@ -406,8 +441,13 @@ radara: Offset: -48,80 make: DATA.R8 Start: 4254 - Length: 19 + Length: 9 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4263 + Length: 10 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2522 Offset: -48,80 @@ -430,8 +470,13 @@ refa: Offset: -48,64 make: DATA.R8 Start: 4231 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4241 + Length: 12 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2561 Offset: -48,64 @@ -460,8 +505,13 @@ siloa: Offset: -16,16 make: DATA.R8 Start: 4313 - Length: 14 + Length: 7 Offset: -16,16 + crumble-overlay: DATA.R8 + Start: 4320 + Length: 7 + Offset: -16,16 + Tick: 200 icon: DATA.R8 Start: 4084 Offset: -30,-24 @@ -472,8 +522,13 @@ hightecha: Offset: -48,80 make: DATA.R8 Start: 4274 - Length: 20 + Length: 10 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4284 + Length: 10 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2565 Offset: -48,80 @@ -497,8 +552,13 @@ researcha: Offset: -48,80 make: DATA.R8 Start: 4391 - Length: 21 + Length: 10 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4401 + Length: 11 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2670 Offset: -48,80 @@ -521,8 +581,13 @@ researchh: Offset: -48,80 make: DATA.R8 Start: 4391 - Length: 21 + Length: 10 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4401 + Length: 11 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2830 Offset: -48,80 @@ -545,8 +610,13 @@ researcho: Offset: -48,80 make: DATA.R8 Start: 4391 - Length: 21 + Length: 10 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4401 + Length: 11 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2990 Offset: -48,80 @@ -569,8 +639,13 @@ palacea: Offset: -48,48 make: DATA.R8 Start: 4413 - Length: 22 - Offset: -48,48 + Length: 11 + Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4424 + Length: 11 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2677 Offset: -48,48 @@ -589,8 +664,13 @@ lighta: Offset: -48,64 make: DATA.R8 Start: 4295 - Length: 7 + Length: 8 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4303 + Length: 9 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2673 Offset: -48,64 @@ -629,8 +709,13 @@ heavya: Offset: -48,80 make: DATA.R8 Start: 4328 - Length: 18 + Length: 9 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4337 + Length: 9 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2518 Offset: -48,80 @@ -666,10 +751,15 @@ conyardh: idle: DATA.R8 Start: 2719 Offset: -48,64 - make: DATA.R8 # TODO: overlay + make: DATA.R8 Start: 4109 - Length: 41 + Length: 30 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4139 + Length: 12 + Offset: -48,64 + Tick: 200 damaged-idle: DATA.R8 Start: 2720 Offset: -48,64 @@ -709,9 +799,13 @@ starporth: ZOffset: -1c511 make: DATA.R8 Start: 4347 - Length: 22 + Length: 11 Offset: -48,64 - ZOffset: -1c511 + crumble-overlay: DATA.R8 + Start: 4358 + Length: 11 + Offset: -48,64 + Tick: 100 bib: BLOXBASE.R8 Frames: 611, 612, 613, 631, 632, 633 Length: 6 @@ -726,8 +820,13 @@ pwrh: Offset: -32,64 make: DATA.R8 Start: 4151 - Length: 24 + Length: 12 Offset: -32,64 + crumble-overlay: DATA.R8 + Start: 4163 + Length: 12 + Offset: -32,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2684 Offset: -32,64 @@ -754,9 +853,14 @@ barrh: Start: 2685 Offset: -32,64 make: DATA.R8 - Start: 4195 - Length: 17 + Start: 4213 + Length: 8 Offset: -32,64 + crumble-overlay: DATA.R8 + Start: 4221 + Length: 9 + Offset: -32,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2686 Offset: -32,64 @@ -774,8 +878,13 @@ radarh: Offset: -48,80 make: DATA.R8 Start: 4254 - Length: 19 + Length: 9 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4263 + Length: 10 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2682 Offset: -48,80 @@ -798,8 +907,13 @@ refh: Offset: -48,64 make: DATA.R8 Start: 4231 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4241 + Length: 12 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2721 Offset: -48,64 @@ -828,8 +942,13 @@ siloh: Offset: -16,16 make: DATA.R8 Start: 4313 - Length: 14 + Length: 7 Offset: -16,16 + crumble-overlay: DATA.R8 + Start: 4320 + Length: 7 + Offset: -16,16 + Tick: 200 icon: DATA.R8 Start: 4085 Offset: -30,-24 @@ -840,8 +959,13 @@ hightechh: Offset: -48,80 make: DATA.R8 Start: 4274 - Length: 20 + Length: 10 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4284 + Length: 10 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2725 Offset: -48,80 @@ -865,8 +989,13 @@ palaceh: Offset: -48,64 make: DATA.R8 Start: 4413 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4424 + Length: 11 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2837 Offset: -48,64 @@ -893,8 +1022,13 @@ lighth: Offset: -48,64 make: DATA.R8 Start: 4295 - Length: 7 + Length: 8 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4303 + Length: 9 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2833 Offset: -48,64 @@ -933,8 +1067,13 @@ heavyh: Offset: -48,80 make: DATA.R8 Start: 4328 - Length: 18 + Length: 9 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4337 + Length: 9 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2678 Offset: -48,80 @@ -970,10 +1109,15 @@ conyardo: idle: DATA.R8 Start: 2879 Offset: -48,64 - make: DATA.R8 # TODO: overlay + make: DATA.R8 Start: 4109 - Length: 41 + Length: 30 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4139 + Length: 12 + Offset: -48,64 + Tick: 200 damaged-idle: DATA.R8 Start: 2880 Offset: -48,64 @@ -1013,8 +1157,13 @@ starporto: ZOffset: -1c511 make: DATA.R8 Start: 4347 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4358 + Length: 11 + Offset: -48,64 + Tick: 100 bib: BLOXBASE.R8 Frames: 611, 612, 613, 631, 632, 633 Length: 6 @@ -1030,8 +1179,13 @@ pwro: Offset: -32,64 make: DATA.R8 Start: 4151 - Length: 24 + Length: 12 Offset: -32,64 + crumble-overlay: DATA.R8 + Start: 4163 + Length: 12 + Offset: -32,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2844 Offset: -32,64 @@ -1059,8 +1213,13 @@ barro: Offset: -32,64 make: DATA.R8 Start: 4213 - Length: 17 + Length: 8 Offset: -32,64 + crumble-overlay: DATA.R8 + Start: 4221 + Length: 9 + Offset: -32,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2846 Offset: -32,64 @@ -1078,8 +1237,13 @@ radaro: Offset: -48,80 make: DATA.R8 Start: 4254 - Length: 19 + Length: 9 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4263 + Length: 10 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2842 Offset: -48,80 @@ -1102,8 +1266,13 @@ refo: Offset: -48,64 make: DATA.R8 Start: 4231 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4241 + Length: 12 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2881 Offset: -48,64 @@ -1132,8 +1301,13 @@ siloo: Offset: -16,16 make: DATA.R8 Start: 4313 - Length: 14 + Length: 7 Offset: -16,16 + crumble-overlay: DATA.R8 + Start: 4320 + Length: 7 + Offset: -16,16 + Tick: 200 icon: DATA.R8 Start: 4086 Offset: -30,-24 @@ -1144,8 +1318,13 @@ hightecho: Offset: -48,80 make: DATA.R8 Start: 4274 - Length: 20 + Length: 10 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4284 + Length: 10 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2885 Offset: -48,80 @@ -1169,8 +1348,13 @@ palaceo: Offset: -48,64 make: DATA.R8 Start: 4413 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4424 + Length: 11 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2997 Offset: -48,64 @@ -1189,8 +1373,13 @@ lighto: Offset: -48,64 make: DATA.R8 Start: 4295 - Length: 7 + Length: 8 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4303 + Length: 9 + Offset: -48,64 + Tick: 100 damaged-idle: DATA.R8 Start: 2993 Offset: -48,64 @@ -1229,8 +1418,13 @@ heavyo: Offset: -48,80 make: DATA.R8 Start: 4328 - Length: 18 + Length: 9 Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4337 + Length: 9 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 2838 Offset: -48,80 @@ -1275,6 +1469,15 @@ palacec: # TODO: unused Offset: -16,-16 icon: palacecicon Start: 0 + make: DATA.R8 + Start: 4413 + Length: 11 + Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4424 + Length: 11 + Offset: -48,64 + Tick: 100 starportc: # TODO: unused idle: DATA.R8 @@ -1296,8 +1499,13 @@ starportc: # TODO: unused ZOffset: -1c511 make: DATA.R8 Start: 4347 - Length: 22 + Length: 11 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4358 + Length: 11 + Offset: -48,64 + Tick: 100 bib: BLOXBASE.R8 Frames: 611, 612, 613, 631, 632, 633 Length: 6 @@ -1313,8 +1521,13 @@ heavyc: # TODO: unused Offset: -48,64 make: DATA.R8 Start: 4328 - Length: 18 - Offset: -48,64 + Length: 9 + Offset: -48,80 + crumble-overlay: DATA.R8 + Start: 4337 + Length: 9 + Offset: -48,80 + Tick: 100 damaged-idle: DATA.R8 Start: 3001 Offset: -48,64 @@ -1350,10 +1563,15 @@ conyardc: # TODO: unused idle: DATA.R8 Start: 3006 Offset: -48,64 - make: DATA.R8 # TODO: overlay + make: DATA.R8 Start: 4109 - Length: 41 + Length: 30 Offset: -48,64 + crumble-overlay: DATA.R8 + Start: 4139 + Length: 12 + Offset: -48,64 + Tick: 200 damaged-idle: DATA.R8 Start: 3007 Offset: -48,64 From 018ceb8d823b585913d776603d3175004fd86a00 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 23:27:45 +0200 Subject: [PATCH 39/44] display where duplicate keys in MiniYaml are found --- OpenRA.FileFormats/MiniYaml.cs | 2 +- OpenRA.Game/Widgets/WidgetLoader.cs | 10 +++++----- 2 files changed, 6 insertions(+), 6 deletions(-) diff --git a/OpenRA.FileFormats/MiniYaml.cs b/OpenRA.FileFormats/MiniYaml.cs index 965f8e362e..4aed94cfdd 100755 --- a/OpenRA.FileFormats/MiniYaml.cs +++ b/OpenRA.FileFormats/MiniYaml.cs @@ -93,7 +93,7 @@ namespace OpenRA.FileFormats foreach (var y in Nodes) { if (ret.ContainsKey(y.Key)) - throw new InvalidDataException("Duplicate key `{0}' in MiniYaml".F(y.Key)); + throw new InvalidDataException("Duplicate key `{0}' in {1}".F(y.Key, y.Location)); ret.Add(y.Key, y.Value); } diff --git a/OpenRA.Game/Widgets/WidgetLoader.cs b/OpenRA.Game/Widgets/WidgetLoader.cs index 0d168e2c3f..12e7604959 100644 --- a/OpenRA.Game/Widgets/WidgetLoader.cs +++ b/OpenRA.Game/Widgets/WidgetLoader.cs @@ -20,15 +20,15 @@ namespace OpenRA { Dictionary widgets = new Dictionary(); - public WidgetLoader( ModData modData ) + public WidgetLoader(ModData modData) { - foreach( var file in modData.Manifest.ChromeLayout.Select( a => MiniYaml.FromFile( a ) ) ) + foreach (var file in modData.Manifest.ChromeLayout.Select(a => MiniYaml.FromFile(a))) foreach( var w in file ) { - var key = w.Key.Substring( w.Key.IndexOf( '@' ) + 1 ); + var key = w.Key.Substring( w.Key.IndexOf('@') + 1); if (widgets.ContainsKey(key)) - throw new InvalidDataException("Widget has duplicate Key `{0}`".F(w.Key)); - widgets.Add( key, w ); + throw new InvalidDataException("Widget has duplicate Key `{0}` at {1}".F(w.Key, w.Location)); + widgets.Add(key, w); } } From 1c04c6608f703a4a237b65e8d3355fffb41e9e78 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 23:28:03 +0200 Subject: [PATCH 40/44] don't render the idle overlay during selling --- OpenRA.Mods.RA/Render/WithIdleOverlay.cs | 8 +++++++- 1 file changed, 7 insertions(+), 1 deletion(-) diff --git a/OpenRA.Mods.RA/Render/WithIdleOverlay.cs b/OpenRA.Mods.RA/Render/WithIdleOverlay.cs index f93c14df91..20181fd732 100644 --- a/OpenRA.Mods.RA/Render/WithIdleOverlay.cs +++ b/OpenRA.Mods.RA/Render/WithIdleOverlay.cs @@ -26,7 +26,7 @@ namespace OpenRA.Mods.RA.Render public object Create(ActorInitializer init) { return new WithIdleOverlay(init.self, this); } } - public class WithIdleOverlay : INotifyDamageStateChanged, INotifyBuildComplete + public class WithIdleOverlay : INotifyDamageStateChanged, INotifyBuildComplete, INotifySold { Animation overlay; bool buildComplete; @@ -50,6 +50,12 @@ namespace OpenRA.Mods.RA.Render buildComplete = true; } + public void Sold(Actor self) { } + public void Selling(Actor self) + { + buildComplete = false; + } + public void DamageStateChanged(Actor self, AttackInfo e) { overlay.ReplaceAnim(RenderSprites.NormalizeSequence(overlay, e.DamageState, overlay.CurrentSequence.Name)); From 34ec588392ec9d32e98975a177542e6c3390a011 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 23:29:20 +0200 Subject: [PATCH 41/44] =?UTF-8?q?disallow=20conyard=20=E2=86=92=20mcv?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit because it looks bad --- mods/d2k/rules/atreides.yaml | 4 ---- mods/d2k/rules/harkonnen.yaml | 4 ---- mods/d2k/rules/ordos.yaml | 4 ---- 3 files changed, 12 deletions(-) diff --git a/mods/d2k/rules/atreides.yaml b/mods/d2k/rules/atreides.yaml index a1e81b9751..cb63599b65 100644 --- a/mods/d2k/rules/atreides.yaml +++ b/mods/d2k/rules/atreides.yaml @@ -1,9 +1,5 @@ CONYARDA: Inherits: ^CONYARD - Transforms: - IntoActor: mcva - Offset:1,1 - Facing: 270 PWRA: Inherits: ^POWER diff --git a/mods/d2k/rules/harkonnen.yaml b/mods/d2k/rules/harkonnen.yaml index dd5732eab5..f39b1d775f 100644 --- a/mods/d2k/rules/harkonnen.yaml +++ b/mods/d2k/rules/harkonnen.yaml @@ -1,9 +1,5 @@ CONYARDH: Inherits: ^CONYARD - Transforms: - IntoActor: mcvh - Offset:1,1 - Facing: 270 PWRH: Inherits: ^POWER diff --git a/mods/d2k/rules/ordos.yaml b/mods/d2k/rules/ordos.yaml index 94843403dd..fcc7371e12 100644 --- a/mods/d2k/rules/ordos.yaml +++ b/mods/d2k/rules/ordos.yaml @@ -1,9 +1,5 @@ CONYARDO: Inherits: ^CONYARD - Transforms: - IntoActor: mcvo - Offset:1,1 - Facing: 270 PWRO: Inherits: ^POWER From 009f6a3f706dd7286fa2c411bcd981cd35e5c493 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 23:30:12 +0200 Subject: [PATCH 42/44] bring back turrets and vehicle repairing --- mods/d2k/rules/atreides.yaml | 10 ++++++++++ mods/d2k/rules/defaults.yaml | 2 +- mods/d2k/rules/harkonnen.yaml | 10 ++++++++++ mods/d2k/rules/ordos.yaml | 10 ++++++++++ mods/d2k/rules/structures.yaml | 3 +-- 5 files changed, 32 insertions(+), 3 deletions(-) diff --git a/mods/d2k/rules/atreides.yaml b/mods/d2k/rules/atreides.yaml index cb63599b65..a8946aa740 100644 --- a/mods/d2k/rules/atreides.yaml +++ b/mods/d2k/rules/atreides.yaml @@ -6,6 +6,16 @@ PWRA: Buildable: Owner: atreides +GUNTOWERA: + Inherits: ^GUNTOWER + Buildable: + Owner: atreides + +ROCKETTOWERA: + Inherits: ^ROCKETTOWER + Buildable: + Owner: atreides + REFA: Inherits: ^REFINERY Buildable: diff --git a/mods/d2k/rules/defaults.yaml b/mods/d2k/rules/defaults.yaml index 94aa3fdedc..d59a8f5b35 100644 --- a/mods/d2k/rules/defaults.yaml +++ b/mods/d2k/rules/defaults.yaml @@ -28,7 +28,7 @@ Types:Vehicle GivesBounty: Repairable: - RepairBuildings: repair + RepairBuildings: repaira,repairo,repairh DebugMuzzlePositions: Guard: Guardable: diff --git a/mods/d2k/rules/harkonnen.yaml b/mods/d2k/rules/harkonnen.yaml index f39b1d775f..ce191b57b1 100644 --- a/mods/d2k/rules/harkonnen.yaml +++ b/mods/d2k/rules/harkonnen.yaml @@ -6,6 +6,16 @@ PWRH: Buildable: Owner: harkonnen +GUNTOWERH: + Inherits: ^GUNTOWER + Buildable: + Owner: harkonnen + +ROCKETTOWERH: + Inherits: ^ROCKETTOWER + Buildable: + Owner: harkonnen + REFH: Inherits: ^REFINERY Buildable: diff --git a/mods/d2k/rules/ordos.yaml b/mods/d2k/rules/ordos.yaml index fcc7371e12..8a2d03ab39 100644 --- a/mods/d2k/rules/ordos.yaml +++ b/mods/d2k/rules/ordos.yaml @@ -6,6 +6,16 @@ PWRO: Buildable: Owner: ordos +GUNTOWERO: + Inherits: ^GUNTOWER + Buildable: + Owner: ordos + +ROCKETTOWERO: + Inherits: ^ROCKETTOWER + Buildable: + Owner: ordos + REFO: Inherits: ^REFINERY Buildable: diff --git a/mods/d2k/rules/structures.yaml b/mods/d2k/rules/structures.yaml index b8ee1e9382..7e5e400794 100644 --- a/mods/d2k/rules/structures.yaml +++ b/mods/d2k/rules/structures.yaml @@ -261,9 +261,9 @@ Sequence: idle-welding ^RADAR: + Inherits: ^Building RequiresPower: CanPowerDown: - Inherits: ^Building Buildable: Prerequisites: Barracks Queue: Building @@ -418,7 +418,6 @@ WALL: RenderRangeCircle: RenderBuilding: HasMakeAnimation: false - Image: guntowera WithTurret: Turreted: ROT: 6 From bf521518af74bdd8a31c52126535401527cb9a47 Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sat, 17 Aug 2013 23:56:12 +0200 Subject: [PATCH 43/44] cleanup the rubble --- OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs | 4 ++-- mods/d2k/sequences/structures.yaml | 6 +++--- 2 files changed, 5 insertions(+), 5 deletions(-) diff --git a/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs b/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs index 2b8336f6b7..a22f666ba5 100644 --- a/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs +++ b/OpenRA.Mods.D2k/Render/WithCrumbleOverlay.cs @@ -33,8 +33,8 @@ namespace OpenRA.Mods.RA.Render var rs = self.Trait(); overlay = new Animation(rs.GetImage(self)); - overlay.Play(info.Sequence); - rs.anims.Add("make_overlay_{0}".F(info.Sequence), + overlay.PlayThen(info.Sequence, () => buildComplete = false); + rs.anims.Add("make_overlay_{0}".F(info.Sequence), new AnimationWithOffset(overlay, null, () => !buildComplete, null)); } diff --git a/mods/d2k/sequences/structures.yaml b/mods/d2k/sequences/structures.yaml index 097531eef4..7a4279f92b 100644 --- a/mods/d2k/sequences/structures.yaml +++ b/mods/d2k/sequences/structures.yaml @@ -223,7 +223,7 @@ conyarda: Start: 4139 Length: 12 Offset: -48,64 - Tick: 200 + Tick: 170 damaged-idle: DATA.R8 Start: 2560 Offset: -48,64 @@ -759,7 +759,7 @@ conyardh: Start: 4139 Length: 12 Offset: -48,64 - Tick: 200 + Tick: 170 damaged-idle: DATA.R8 Start: 2720 Offset: -48,64 @@ -1117,7 +1117,7 @@ conyardo: Start: 4139 Length: 12 Offset: -48,64 - Tick: 200 + Tick: 170 damaged-idle: DATA.R8 Start: 2880 Offset: -48,64 From 0466cac3ab7b62808ba2cdc9ccb292ee4a6c13be Mon Sep 17 00:00:00 2001 From: =?UTF-8?q?Matthias=20Mail=C3=A4nder?= Date: Sun, 18 Aug 2013 07:23:51 +0200 Subject: [PATCH 44/44] I hereby declare Dune 2000 out of "beta" still some things that need to be done, but already looking good --- README.md | 5 ++--- mods/d2k/mod.yaml | 4 ++-- 2 files changed, 4 insertions(+), 5 deletions(-) diff --git a/README.md b/README.md index 87130b374d..fa796db879 100644 --- a/README.md +++ b/README.md @@ -15,7 +15,7 @@ Join the [Forums](http://www.sleipnirstuff.com/forum/viewforum.php?f=80) for dis Distributed mods include a reimagining of * Command & Conquer: Red Alert * Command & Conquer: Tiberian Dawn -* Dune 2000 (experimental) +* Dune 2000 Check our [Playing the Game](https://github.com/OpenRA/OpenRA/wiki/Playing-the-game) Guide to win multiplayer matches. @@ -24,7 +24,6 @@ Check our [Playing the Game](https://github.com/OpenRA/OpenRA/wiki/Playing-the-g * Please read [INSTALL](https://github.com/OpenRA/OpenRA/blob/bleed/INSTALL) and [Compiling](https://github.com/OpenRA/OpenRA/wiki/Compiling) on how to set up an OpenRA development environment. * Read [HACKING](https://github.com/OpenRA/OpenRA/blob/bleed/HACKING) for an overview of the engine. * To get your patches merged please adhere to the [Contributing](https://github.com/OpenRA/OpenRA/blob/bleed/CONTRIBUTING.md) guidelines. -* Some insights on the upcoming [Translation](https://github.com/OpenRA/OpenRA/wiki/Translation) framework. ## Mapping @@ -33,7 +32,7 @@ Check our [Playing the Game](https://github.com/OpenRA/OpenRA/wiki/Playing-the-g ## Modding -* There exists an incomplete [Trait documentation](https://github.com/OpenRA/OpenRA/wiki/Trait-Documentation) to get started with yaml files. +* There exists an auto-generated [Trait documentation](https://github.com/OpenRA/OpenRA/wiki/Traits) to get started with yaml files. * Check the [Modding Guide](https://github.com/OpenRA/OpenRA/wiki/Modding%20Guide) to create your own classic RTS. * Some hints on to create new OpenRA compatible [Pixelart](https://github.com/OpenRA/OpenRA/wiki/Pixelart). * Upload total conversions at [our ModDB profile](http://www.moddb.com/games/openra/mods) diff --git a/mods/d2k/mod.yaml b/mods/d2k/mod.yaml index 5aeb494a80..161d48223c 100644 --- a/mods/d2k/mod.yaml +++ b/mods/d2k/mod.yaml @@ -1,6 +1,6 @@ Metadata: - Title: Dune 2000 (beta) - Description: early version of the Dune 2000 mod + Title: Dune 2000 + Description: OpenRA Reimagining of the classic game Version: {DEV_VERSION} Author: The OpenRA Developers