From 9a0c19ca04a3dfe03ddcba9b63fd75e564f3b933 Mon Sep 17 00:00:00 2001 From: Paul Chote Date: Sat, 9 Jan 2010 15:33:53 +1300 Subject: [PATCH] New UI: Radar bin --- OpenRa.Game/Chrome.cs | 88 +++++++++++++++++--------------- OpenRa.Game/Graphics/Minimap.cs | 2 +- artsrc/radarbin-allies.xcf | Bin 0 -> 49392 bytes artsrc/radarbin-soviet.xcf | Bin 0 -> 50994 bytes radarbin-allies.png | Bin 0 -> 4311 bytes radarbin-soviet.png | Bin 0 -> 4301 bytes 6 files changed, 48 insertions(+), 42 deletions(-) create mode 100644 artsrc/radarbin-allies.xcf create mode 100644 artsrc/radarbin-soviet.xcf create mode 100644 radarbin-allies.png create mode 100644 radarbin-soviet.png diff --git a/OpenRa.Game/Chrome.cs b/OpenRa.Game/Chrome.cs index 712610e7ed..f3694d3f1f 100644 --- a/OpenRa.Game/Chrome.cs +++ b/OpenRa.Game/Chrome.cs @@ -23,14 +23,12 @@ namespace OpenRa.Game readonly Sprite powerIndicatorSprite; readonly Sprite powerLevelTopSprite; readonly Sprite powerLevelBottomSprite; - + readonly Animation repairButton; readonly Animation sellButton; readonly Animation pwrdownButton; readonly Animation optionsButton; - Animation radarAnim, alliesAnim, sovietAnim; - readonly Sprite optionsTop; readonly Sprite optionsBottom; readonly Sprite optionsLeft; @@ -40,7 +38,6 @@ namespace OpenRa.Game readonly Sprite optionsBottomLeft; readonly Sprite optionsBottomRight; readonly Sprite optionsBackground; - readonly Sprite radarShim; readonly SpriteRenderer shpRenderer; readonly Animation cantBuild; @@ -57,15 +54,21 @@ namespace OpenRa.Game // Build palette positioning const int paletteColumns = 3; const int paletteRows = 5; - static int2 paletteOrigin= new int2(Game.viewport.Width - paletteColumns * 64 - 9, 220); - - // Radar positioning - static float2 radarSize = new float2(181, 160); - static float2 shimSize = new float2(181, 181); - static float2 radarOrigin = new float2(Game.viewport.Width - radarSize.X, 30); + static int2 paletteOrigin= new int2(Game.viewport.Width - paletteColumns * 64 - 9, 240); + + // Radar + readonly Sheet radarBinTextureAllied; + readonly Sheet radarBinTextureSoviet; + readonly Sprite radarBinAllied; + readonly Sprite radarBinSoviet; + static float2 radarOpenOrigin = new float2(Game.viewport.Width - 250, 30); + static float2 radarClosedOrigin = new float2(Game.viewport.Width - 250, -180); + float2 radarOrigin; + bool radarAnimating = false; + int radarVelocity = 15; // Power bar positioning - static float2 powerOrigin = new float2(radarOrigin.X-20, 30); + static float2 powerOrigin = new float2(Game.viewport.Width - 20, 30); bool hadRadar = false; @@ -95,6 +98,15 @@ namespace OpenRa.Game moneyBinSprite = new Sprite(chromeTexture, new Rectangle(512 - 320, 0, 320, 32), TextureChannel.Alpha); tooltipSprite = new Sprite(chromeTexture, new Rectangle(0, 288, 272, 136), TextureChannel.Alpha); + + // Radar + radarBinTextureAllied = new Sheet(renderer, "radarbin-allies.png"); + radarBinTextureSoviet = new Sheet(renderer, "radarbin-soviet.png"); + radarBinAllied = new Sprite(radarBinTextureAllied, new Rectangle(0, 0, 210, 201), TextureChannel.Alpha); + radarBinSoviet = new Sprite(radarBinTextureSoviet, new Rectangle(0,0,210,201), TextureChannel.Alpha); + + radarOrigin = radarClosedOrigin; + var powerIndicator = new Animation("power"); powerIndicator.PlayRepeating("power-level-indicator"); powerIndicatorSprite = powerIndicator.Image; @@ -129,14 +141,6 @@ namespace OpenRa.Game optionsBottomRight = SpriteSheetBuilder.LoadAllSprites("dd-crnr")[3]; optionsBackground = SpriteSheetBuilder.LoadAllSprites("dd-bkgnd")[Game.CosmeticRandom.Next(4)]; - // Radar - sovietAnim = new Animation("ussrradr"); - sovietAnim.PlayRepeating("idle"); - alliesAnim = new Animation("natoradr"); - alliesAnim.PlayRepeating("idle"); - radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim; - radarShim = SpriteSheetBuilder.LoadAllSprites("side1na")[0]; - blank = SheetBuilder.Add(new Size(64, 48), 16); sprites = groups @@ -181,8 +185,21 @@ namespace OpenRa.Game public void Tick() { - radarAnim = Game.LocalPlayer.Race == Race.Allies ? alliesAnim : sovietAnim; - radarAnim.Tick(); + if (radarAnimating) + { + radarOrigin.Y += (hadRadar) ? radarVelocity : -radarVelocity; + + if (hadRadar && radarOrigin.Y >= radarOpenOrigin.Y) + { + radarAnimating = false; + radarOrigin.Y = radarOpenOrigin.Y; + } + else if (radarOrigin.Y <= radarClosedOrigin.Y) + { + radarAnimating = false; + radarOrigin.Y = radarClosedOrigin.Y; + } + } } public void Draw() @@ -225,32 +242,21 @@ namespace OpenRa.Game && a.traits.Get().IsActive()); if (hasRadar != hadRadar) + { + radarAnimating = true; Sound.Play((hasRadar) ? "radaron2.aud" : "radardn1.aud"); + } hadRadar = hasRadar; var isJammed = false; // todo: MRJ can do this - - if (hasRadar && radarAnim.CurrentSequence.Name == "idle") - radarAnim.PlayThen("open", () => radarAnim.PlayRepeating("active")); - if (hasRadar && radarAnim.CurrentSequence.Name == "no-power") - radarAnim.PlayBackwardsThen("close", () => radarAnim.PlayRepeating("active")); - if (!hasRadar && radarAnim.CurrentSequence.Name == "active") - radarAnim.PlayThen("close", () => radarAnim.PlayRepeating("no-power")); - if (isJammed && radarAnim.CurrentSequence.Name == "active") - radarAnim.PlayRepeating("jammed"); - if (!isJammed && radarAnim.CurrentSequence.Name == "jammed") - radarAnim.PlayRepeating("active"); - shpRenderer.DrawSprite(radarShim, radarOrigin + Game.viewport.Location, PaletteType.Chrome, shimSize); - shpRenderer.DrawSprite(radarAnim.Image, radarOrigin + Game.viewport.Location, PaletteType.Chrome, radarSize); - shpRenderer.Flush(); - if (radarAnim.CurrentSequence.Name == "active") - { - // Todo: fix minimap size/position - Game.minimap.Draw(radarOrigin, hasRadar, isJammed); - } + rgbaRenderer.DrawSprite((Game.LocalPlayer.Race == Race.Allies) ? radarBinAllied : radarBinSoviet, + radarOrigin, + PaletteType.Chrome); - + rgbaRenderer.Flush(); + if (!radarAnimating && hasRadar) + Game.minimap.Draw(radarOrigin + new float2(9,0), hasRadar, isJammed); } void AddButton(Rectangle r, Action b) { buttons.Add(Pair.New(r, b)); } diff --git a/OpenRa.Game/Graphics/Minimap.cs b/OpenRa.Game/Graphics/Minimap.cs index 9df21a88e5..f0428ef407 100644 --- a/OpenRa.Game/Graphics/Minimap.cs +++ b/OpenRa.Game/Graphics/Minimap.cs @@ -103,7 +103,7 @@ namespace OpenRa.Game.Graphics public void Draw(float2 pos, bool hasRadar, bool isJammed) { - rgbaRenderer.DrawSprite(sprite, pos, PaletteType.Chrome, new float2(256, 256)); + rgbaRenderer.DrawSprite(sprite, pos, PaletteType.Chrome, new float2(192, 192)); rgbaRenderer.Flush(); } } diff --git a/artsrc/radarbin-allies.xcf b/artsrc/radarbin-allies.xcf new file mode 100644 index 0000000000000000000000000000000000000000..8f584d6b26a7b2aeb9832228efde13f25579c866 GIT binary patch literal 49392 zcmeI5dyLfAb;o}*JNuq}0J|(KufKt`GF17^Zoqp zV|Mw07h?#!%)&i$&bjxVd+xb2_niCq%^Wy5^@;vR_wMiCfAIc&Ns{DTvX>-TAVQo) zmYQyVx^iC0@GeUQOCy#RJ6z?ut^9I(?L1&&%Lk|KIk2yM;K76U8B3CLN$H`758uD9 z|Di+oAG~j@rL_OR-b42vda%F5OZmYA_ukXLe(iexGLQ`}Ys{+Nn^D#0_g@@Q)kh!t z#65ctK5(FagKx{2hqIWDSN_xk2OsV~_`u$e?R!Y|5AEOo(7uO*f~tKXE9FeDDm%Ep z+~<;{?)ypdksl_>cm6$PzVnDIOHIviaY)j=gH>ThsIM z#>;=((vK|tr=|a~^p2G)TCz7y-5N_fEPcSzM=jlN=`l-BS$a{jj&$DG$xQILOZJl7 z=92IqTlxn}8i>Z*4?TF_z6TBawY^2^)p+_>IN%VkqP;~5e{Apjzp(V}>3M~JvZ-U- z(soO~og~ZtG)YEn5*i(_Wbgfrf087(+S~iql}WN|XOjHZmy_gozLX?){YH{}=szUu z_1@iMpM3I_Bsr06N?z~VU3&C+%ZC`;U3&6mPYmrYJ@L}ZE@$QL(&6Xq9p>tc9zN~` zEWdO0!^fWwIpdE#^MWI$wbNVOjx`$FSyA1N6^rfk?yhQQ*~QzrW9?(7yrR8#lnU z?OgYE^XC21TzJ2|VIP_FeO>$by!)rD_VG!QFJ9$or}ps)&ZFjil7v~*zb7v4O>5rA zOf~1CooesXRB5u%`@+;%IsZ!wjN;1=QmXcHzRCnymJ=_U%^9((j^({OmHfcg)3rU| zIkR^@_t)U_@BLQ${MfnJ965WceST(a5ncy-rnS#c?ek;D>9sR&*`R73o!y!DrS??k zL*CWhb-vaXn%yq9N>(xFS@JBSYUEw6ToN32zpwEdjNqv^4owd($9-d{f%dy-0@_wuKKC{|$oyE57 z^;+br?L%Md4r|}L`Yv7VuCQ)sR^1t|-A(6$|7`Bs&u*PQuikH!O_h1oA3e@7Z9b^& z6JLM(#Pevru6=&ehlFa+M$MRa-b);EWBQ+Ky>mOi_Mxw}^^SC$PIgtMK|OBUdQZ~jE+{xiuf$y+Zy{xxA+lCwv? zdd!fm$=hE!w)af3EqUjty=+g;-FqfEl7C9A&1LCkor_)Bz06f>?MAh`J2&6#cA5Q| z<@WzvzQJECf%kN;aK%ba+mKX>ZX%P*XG_UU6vM8VIVR_8zEOIPYD-#@eW z*jLsLuNoa&JvzF2eD#{Oq|r!=HCmlN>PuG&m9uB|9{tTb_Z0TL^U)9AwI{ddJmBs< zb$i|tV~-<4{<*tV`20sJ^_9Orb8mNVfB)c6fB(?%paG?UNT+0^hX#D<*K5O58=jYI zpC12txV%r#k>qjvR=vv3N-o)1$tOE1b;Fc&_lmdz{z& zEO_EQPHTP=eC9n)Ykm?Oe~jmstrSJ7+9Iy(4PiPOid?p@#w0l>gcL5`B6B!@+-ur z-2v9|<6+5{o@3df&n@C|C;y8BEnByJ!7t3#>SRkxv9UdS^ij|6IcsNJHWTFc%S`bM}}X^uS#C%RI``64>|nD_NuSyweP{b`$_xm=kHni$LV=@|Eu-V zzWVrq<4N+!hwKz~SCSkZPLgNJ_Kb+hdC|T*_s{J+x&PAo_1Cs1@|{1j^sFWOI@s@g zQ?iny9aXZCm6aaHv zny(iZ%yAcrQ6~WAxO5;VE|}wXmEMu6UE(`dw{XD4%VZ17Za7=X><(pjKHE^yo?uSd z>;cFgtn7is_Vgdj$!(HVdIZ26ml0ViE|}vsh_Orn%yAi~72<+9Zb6Kd0$`5I=naSq z=D2w=h6KPImoXg?7fjr@izOS>(Ng*<4x>Dl4z}oAaZM>#tT$|Pk+*Z%NGGtI7Ry_v z2`xJ*IZx7%$t&6SmymBDUpiN;rloaNb`WeuuS0y$cY`-lS*E-aj2@OJTPDw!Cl?8T z6(-G`<;hkt76^bjZc&U50WimH6C(o0Z4Z^f9GA+?L5$;eiqR+l=D0LpFD{tlE)=6q z0L*deKu%mR$L*SYr#xAn>=NIxx`hKSUM5>ucEj09W_KvN^Vx=q_5^dvW)DF2U}X<1 zwx|DKPHvN|(jx%oxQxhBalst7L5yVrV2;Z;tq>Q?aSLLs6aaHvMsGk|Fvrb{F(d%y zxQywDxM1SGU7oZ-9i2>H#bK1k(!my;E3cW%mFo@LT;}a;waZRmIW3mAOcPpmQgWW8 zA(J<$c|rLG@{{Mv)wHy($_|39=yiw>`fl(>qC;1L(Zh+UmZ|d-Q;P(^3R7mziK$jG z76^bjZc&U50WimH6C(o0Z4Z^f9GA+?L5$;eiqR+l=D0LpFD{tlE)=6q0L*deKu%mR z$L*SWXJTq%s!M#w>J|>Tc$sWr*$rnancbo6&Sx7c+7rwvn>_&8gOxq7*q;7_Ik`=; zN{;}T<1!*k#RYTR1~HZifH^MXv_f1k$1RAlQUJ_x8NC5gZJZDh{JOmJYV)+{Bux+(f-$nYz1z3QvvRE#%Pk`kI0Fn%fP?%~6Komj|PeU|G zS#iMl90 zs)h*6=_SGVn0N%>U6UovxI5gY6w6SLJ?0xG)d#AfkLQ;lBkQ~qiTqNh+Yx|jfqF# z(=}z^yHn{Y<%{QR17KU}tTuOwrLDHOe;aH|>CKc?EZtIigKYxQoAvq3`Qn>IB^m7I=zTYoVu@%@%ozS+2`d%zoXTVpd%2DQ3$aPce%w@f5S`Qcp4A z_Iip*cbTV{c$a&M$#;dPn1K6AZ@Ce>wa7f&S1J_AiPLq&;>4YWWliQgWzsme$0AWc z6d!#BJ)|r24gg68y`nHZLI64=ly1;a^kujch5~oO5aCW3I@}3EiaTMbaVMRnp2>Xq zoGmA}O`g@NvOKxfmZWckZJB&CWtAsynS6uAt?12~-EzM8CQ*4$-7KokQ#Xk!cxt1l zdQWW-)!?c1q8dH5PE?bp){1KO6zjwmPpwg2tEa|A6+N|DRGX)mliNMTT;1U*=I~BW zF}E-96m$MUPvHv|d1^>4ba`q}RJW%FL@o9dzNW`h_@E`8>Ql+3p2A)AdJ31d%u~3n z<(|TIt?(4?t8elxH)6Mz@nU_Gg)%wO*+mQ$$<4y(&J0($Q>xNyJYy^p1w`@m5|!y8 zU7>dXNHQowVS0pss1+K}5KYoJ&X}RV88bvNioh8&q&Q=S8fV-&*)x@&IA@EkZBu8p zke-;@Y742i!M04jnX)FPZkc+6C7I~W@(np(e3PiWr*0Ni=c$`S6+E?3RK2G*h-&cE zdQpv@S|_T>Q)@*vdy3Ufi>KBouhmoIqKckcEvn5^c(is;;psX&g$L~P6rOQ`r|_5y zJ%uM-Vhlzo!;linFw}%HorE$?=AG==aZbFX=YAdXrvNE!VN{{mRQi>n!wawv@AoQz2-JbziToAp&i&+%y(#iLq#N zRV<2}5Q`$;b;h-TA>gAKTr_|e?LPx+C^gyauQ$_Nc$wr(BLXRHVM?LgH2EuYkpwe( zX-N5G8YrZj@HuhoQeZKV1wHm3I-izjW4|EW71gf3ZN`^7%T)}Yo%bgI#>gwEsuEZ? zvqhx3W~_W+y1p*AP)6~3X#fUj6bX;+)>&xRY$<0EokF}8>%LxFLxk62xoND|5@WsQ zs#p&>A=X2_>x^pwL%>HfxM%<`+J6StFxg}dOK+yR@RFVpu-y%i(iR33CYq*xWiE(d zK`(3|=hI9pQAoFDb7It`z+wywD(pYBE6R2+8_KSz_IhoLcA|5lieW;a@_t_!9i|Jc zo7o~#t2LUYugfh=pm@Dh1Ou=~4v+5ES?JVkDQ6LrLZ}w&zFu2H1l3}>X)M(eW2xq< zSPD5ImO{SkjB5cyz(+Hit8e_}=-Q;#hT=vW@C51=1 zA|+?;D5YCu85>G%Ayg@;Q*E)u(UgwcW~)+$l?w67NMMBxwBf)CyJ$mV**y{YyDL68 zzLG=dE2&$so$E!YXe-0s2U_nvTusET1DrU5{@IFUjw zpGb%p(UoxfRfKY`jAIcL!fH^grGNGxMq`Y_pqt!|iOZh3&7_bsH$lmnyG-e}S;i() zTL}M3dRMl^7DrP$Zl$eC8CEL9fFpqwHr0j$E9|VX2U9zzXJfxpo^M=$<@p+6?E*OI zHeqW8iUR8dS_L>vY7xdEQ?oD*pNP9Slxh@@!>R^hn*<0;INTx>xkWr;kS)RpJ+=xX z;@IYHx^7RmM|M~o(9KzWuDCO0ZFeQMg*wzm4ib?~E3`+;=zuopg@)*g*62@9=o7u8 zpY)i%V+HJiWv~&}!fsd)TVhr0OH{K!N{$IE6d;(1=O{bHiy&si!cjmJ8XJm@M}?x2 zQSsQB*umK8XozT>Xs~F+XxM0M2CcKi7J8?g&A32^z#4&efwDlGz*>Q#z&e3ef%O6{ z0viOH1vUya3EU*mD8R8$gRo5k^#Yp(3IewX;N!Ol!?kY}hDYD#ZbEKPH%fMxpY7&O zL9VsQwuL&>Mh+5@O)IoV%jkeM=!J&piq_~)Pv{f9qo4GczGDUKfn~4}*1~RB z5L;qZ?7Ld}Ef5$JSSU~uSR^nizyV7HF(Vd^0;15^P;5LZ6qSsM$IiqK#!g2=MB_w* zMI%PTMq@K*os(=o&yi=0j?9t-9HXUxbMfo2{-#VP$6#M zpoJX)4q$Mr9L(TRIk3T%-XeMU&@IAnom++BF}Jy!a@*4_lO5*Ay1Dz1o7kDMw!0GB zLLF)&2Z_k0722a^bU+*QLPK;#YxJil^oiclPkKz>u>$tMGS~=fVK*#@EwL*0#VfPt z&#_ND2Z(0_9A!ihGh*Q=APS8Q#m1vTQOT%y>`d%n>~u6lG)^>FG-5PtG&X~l9%?Mn z+}kOzTA)KYj?@u)R~emWbg0qE;{FO!DLUimpl=GgqBZ){6Z%B&=qEjR(LwXho& z#FkhU`;MuN1p+03g#x1jiv)(#&U6VM5$K-Djb&r~C^NPb+m8A~9i!f{FR_2I&(RLi zHqlqnWfo!EBNC+ZmWj(v&!i+zrEh_;FLiZ+aPjkb>V zk7F`C$;t0^Jo9c1&XA?)c5|1*<}Q2ebw}zhy+e&IHoD#DilcjuE<3vM=-Q*Zk0Ag~ z5)TtYg&02IB=Jr-Njw%#5-*06#J)I5yd5i6JRoaTyy9@$84lQ4of5}Xb7R?9Kgx{l z#I~b8QOBrv>`Uxl>~pk3v`w^Ev|+Ssv~{$99FyU2EgDNMN zo>OX@)5B&cyS3&y?0<7Q@w29A=77E4x{I@Oyl|SHr2C?L+OG;|m|Bo-TwWFF*FtEX zGh9|cZu5{G!gR;5Ii2~4vzs}7uD9+o+dE!3Yffqhu9`N(HSR%CZ35vg_dsBU3*G%` z9e36l?sE5qlHv4iMPP+n-P{ePiEt3NER+iOyL$sGT=HHTSmCBO>nCJ|>)t(~RJilK zIIzOSZ{m9@hTGo+|FFUp@I|3wxCg#4u)<~V1%VZAgm(s3xE9WYkN9vmygif(7sM$5 z2)D$Gp;Wjk-WpipzIaPug-hejfz{{lkv9d_O3z}ANQ?cR)euSzcvgL24SE*KIVui$ z7JGBBhCM4EDvo#-o`q7Yst$EwjK(8Y=#ti-oZLc=g)?4^vKo(7SHv9S1i(YlvvPlgS&*eO4Z#7I7&K( zzF@(9cmfAiFQ||y)-g?XwFX(bX7wp_ILjI{c&6qcZa-XoAJlS%RZzJ9J`h;p5`4c{ z;Z!)>f9H}kmBTqDH>hESoABJHh82!1mxU(6o%r6s3K!#-23EKo&$1U;;fj1uC>8F> zFAl75S)OGX6~m2r)@-oCwRx6wu)^JW)_btR1$q{Pu)-~RR*JB~ReB;6Sm8c>d(bOf zs;2-T+^jE#QsH`iYhZ;t_N;5E7%tkg=!Mni@7^=muvU5&%Vk*op2b!wtO3ue4=oOQ zRw1y4Jc}hd6^A`5A4-jQRxYqsRULm*Z8RQ6LzlE|z!^8>SU3&GD65IH>dKg7oIJ&1 zxirpPW8oUL%Avh1Y~1b|B5lm}B64b9w=LZ^LP=HW0s!-|fTyRqG`_=vjvInJn5$IX z-4#Gd$Iw?P>`Ju^98|raLZ(>9G}+Y}Wa*mKr_kXnYs}!8nuF|$hQ|d4wa3ijH9Rvg z5Ln^C0j`^e^Yie`05{I598Pq(dJZc*J-{7wSmAJ&%jmGea|GNnVTDH$*yn~7o=adm0#B&&tfke zR=;PlDGqDEv)CPnHRxGvlfxSFEcVM`4SN z91HgbFv@CH2XzyeW1KwQImo4}qcyh3pjJ5ye-<`w_eYU7W?M)(wXYkr?yDKtS)mI6 z%*Vb9Jz@=4&J>ID@t#X2VIr+8I0OV_MEg$`#~ zV+POE9K4agl0bbYinWk(TN*Fw6h)8zkIuJK6rxv_Q6ma`Sz`?gV*xfKjMdqoFqUou z!dTa_q-4>zQao0KtS4D6vWx^kl0gv)Qw;%#LMUqFB#PF$Q`4gZ+Mri8cSeOMDGQ4& zQjOIB3OFf+B8qjDZY$>fvInKf4=j2V7J76otnuhxSl-cKSlOWxqQXQ08t1URYw#U|3zC5~9M>(3mqUEHHCe zQ_$hCoM2eON&+eNZXCp$n`_;c`c0kP=xZKE=iAv0Ui^ZS8*|qLqC*M_h*Al*31Nw` ziErQUCpl4rh>O;`Q`4gZ+6+sZYVM2*C>7P4fyHM>sYX;p51f?31ka;(P2DyTE>^Ni zAV08JC4_+YG9SN1RCtORbB5p+Gl#gA4u_DIB|wN~kz()0L4EN?_k}kIN6h6fF_%C8 zZV=)_aQ^rfoPTt(J#xZ0UVIepc&T{!>0V*D&gjo^gt$u_Bmj~OJS&B%h5$q%6!A1f zlQh0lZOj7bY713oQFcZVt2)?y;q|@|^Po%2gU-L}eN4&tQl@HrY4ll4?f5aKe7sw9 zQPDBsKk!1)W#VrDeezgjP=vzK1>->xig+5LNgCg&y0ZYfWJ1+hl$}w;st$Hvc=v9^ z9MTeVNb~RR9WxxRiJ6Z}1?zsfcTvQ@p}lOM~luQ zdcNolcghpZ0_eI2I?kf(j3QQ*`MpU~O3sJ&jiSOq``o`X(4hVR=vlo;dR!33xl)}l z4xRGCS_N_fMd$h2(iK;`dAvq0QRIppDXYzu;M9dW)J6^xkxeVKN6YAdHXNh@%+TrS zM9zn=jr!DwWB9p$qo6_k0noF0k?b)Sgt32LCydSgyfAi=bHa+w9kr#aigt5Dja;$F zl{->an=8TYHg%|t93&!}R%nlw(E)8ZumG5$(_P^3I1HOt;gEjr-#2K`)B>PqY-X~T z#~vp8q=c?)qUKeY-8#bNqVo}LY2@5)zM+u|7`cg#l-1@+u!~3?Y9j}U$fgzAqh)kJ zn|R^E3_W-wKRvF#+fS8TUP@j`j#MT4v4?m2K@9yMME&o6?BK&f{7+$24EH~UA%3$Z z`$-D^TB`8YD!f>Qw^iXChD(T-DAXC}#a|G?q?r!eY__gs>^_KKx%Owar7 ze_P)FS~_caru%F5lNzt}Sz2vrv!&ZD?Y8t0OZzQ7Xz33v9kXOI?Z-20eez(0Ou@ADe1U#-~IdcK78=d1O0d0^U%k|^5*x$eZ+Wv zxK*cmxZ7QM@jETqaOlsE98ILG)9cd~VHr660Zad8>1S!a_)4c=u=Jv(FIf6BOJA|{ zswMm3lGA@>>06e*ZRxb7?_2tzCHrxf)BkMgUrfO4M(q+KWg;GT$zGD%TuS~Q_C@A0 literal 0 HcmV?d00001 diff --git a/artsrc/radarbin-soviet.xcf b/artsrc/radarbin-soviet.xcf new file mode 100644 index 0000000000000000000000000000000000000000..fac352eb104a57054bc5cff88b5d158c359f1a09 GIT binary patch literal 50994 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 literal 0 HcmV?d00001 diff --git a/radarbin-allies.png b/radarbin-allies.png new file mode 100644 index 0000000000000000000000000000000000000000..e09bfd080d1190e5c33344bfd800fc3102a4a053 GIT binary patch literal 4311 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 literal 0 HcmV?d00001 diff --git a/radarbin-soviet.png b/radarbin-soviet.png new file mode 100644 index 0000000000000000000000000000000000000000..4959bfa81c5ca06267d453fa8e7597f2837eb90b GIT binary patch literal 4301 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