From ee2870031e81474f85df1ee3fcfe7784bb3b4b45 Mon Sep 17 00:00:00 2001 From: avolkov Date: Thu, 31 Mar 2005 23:22:10 +0000 Subject: [PATCH] Team building ship selection box is generated from actual ship icons; fixes #692 git-svn-id: svn://svn.code.sf.net/p/sc2/code/trunk@1604 8092fc87-c524-0410-9efc-e669fe64eaf9 --- sc2/content/melee/melebkgd.27.png | Bin 3682 -> 1828 bytes sc2/src/sc2code/melee.c | 132 +++++++++++++++++------------- 2 files changed, 73 insertions(+), 59 deletions(-) diff --git a/sc2/content/melee/melebkgd.27.png b/sc2/content/melee/melebkgd.27.png index 8ddc2f6e69d482f2da349e97e1d468132244c1ae..9117ef381b052e6f07a5ac5e39394dd9c464112a 100644 GIT binary patch delta 1029 zcmXw&ZA?>F7{{M`&*k1bXq!tkwqUE5x2VV}(+0~+$bnQWZfsSFK{26F7J*ExHB4gA z9)S;7#rPH>hM03!Eqke_8lkBoW?Nnn5g%X=L=lij- zEJLl?EQLwa3GawOXSyj@4t*lm<$mR4Nk)t3W2rgCJhPF3SO}T*3lU4U+o!I&$Sk6e}*e*jRKN3Eu3G?B6ETt5O|8c>Zr4OW*q~; zR8V!dy|*aE`gf#~zTJ!NVgU$>ztx!VR)1#a)6afAr|E3?#{|ch@D0j#4&`0DNjy13 z)pK451x^@8Q>lI|GRX>o8~4-Zk>!eoM?tOZi|UUkjM`vLX={`1xd?OCY^~M zo@LclcFV+`$~-g6urp*op{&KNG^ zr>oRRTN0kXD0|}$Ual0EFqSMG#*)T6gv-YRu+cXwlF#vECxjaZlGCu;SYJyRd?BE* zUI&{_7m=G^yOK8^nt#dt#&%(p+;pKJf}SZU-p2oLDrOggvx2BzCk;QPmm0ZZZ1*OP5?JhY zudA!_Pj1S%>mH85BHAJgSeeM5iEd?63!HjG{Ly?T^m4!6JuY`Vla(3mafW#7VhIKW z^ZucDaWWQXh{|!;sLzGY_V3UC(EQlv#MzSD4i+xi?n=AU>J=yx;NIGu%Y1c5Jow0= Ne9Nb+ZUUpgr>-IYW`OmBcr9V!cktIluXzGf%08e{ZSRaQ(Ly^PdAiF zEA@YEX9584A%yn$d-LBX`SPnQ1`2?R$1V2=yHB-m2{;&Oig8`<;Yxy_#7LkjRIE&|X@!WGy<^+}yt zK#DyMz+&Qg^pBEc0KSjbN>y>ZUS|q`Yy0@(0-ol!q<~!n0RBS;0M5A7NH`M!wE0OE zBmn+m+ExJKnQhNfi#?yuk1y=_;uzjY3K;v_0IdC$0N#WaPXVxP65CQ$acswl1_ys9 zHUjN0Y}d6f;0>}9cRJCw0EGWC00;}7(3{K&mU967ujQ)NHg&&D0cZdm*PYWKNC2ju z2hdClB>+V^0Ey{&Onu0LtQSxL*0KWYHS?bU(Ch<(DTILLqHq_I{e2J101o&MozwRM zpr{w5LxVC7Q2$FM2i9xfUndsU3DSQgqzX`(ai~)OssZ75g<6+j2lr1=`8bdtoK8{! zHcMrc^A`(0lNYiO8c*8~0AMkZg(-mHVXtc;lU@^I(ls&CG|NceXfZ&+5Ke0S%#MH0JQ(_tGcUA#_ zJW+ecMbcB#hOusNFp=^I48p2(1&1SO+wnIfEtFP7SR;CJ z4N?3jIdCL9s}(@W05BY`Q-GO2%LCNFyW^mmuxOfwb#v6k{F?R*$wf}Wqk-n>C~Mn01khXAjGIfEjk6z z8GxrV04R2wr~qobtHuHFA8ayr(D*6)lL4UdHJS!&?sHfP*`|+PLxLcPmo^PVJFh@- z5}Gmq&~yKZyD9r8TO2CC9%>>4gti~+Wc2hj^0)%QCZ5qm2owdjLZC!J0Pyw)!rfFL z2q`!~jRzpqLWfy2UDJPbtm&iC$kR9gZvkq@vz-B;18hV$IyeyxPhY4zTm#K_@@9anG&)fKJ5sE0ubneA#FTKvjXb~m}m~dCP05TvyspzC?G+52L-bH zODYHd(*j-ZsujozPeOSZXI*Rx1CbA75gUrY5}Lj@shJ}g zfFUFs^bCN^Aew)(plU&Kv^5#Y(+I0-I;E1Z0EiI4cx$TH(2Wtfej+M>XiGrKlW==F zR;N)h5KYlk9f-ECp{>s!Py|G9qzXt0S2!2E@rvk0fHz(dy+VOfd4I@a(1$^vUs52q zB(u{)pq~OTjD2LBe>yj+01A2mGU(3C$W^||y9>3vB?o^1{te^YAB=(E0874J8VBq# ziepTYUC%AAw8394v%UYM8i2Nc|J)z17OQjPpukyK2LM8SUwqLIRFBzknh)UwDK%*0@mwvnw{IrR;za-pa0}@ z0M>z-h4wzfaEQ_k%R(S4V88RDS`@9iU2_r%fZ=~Fw7++G1q9sPy?gI|(nhfxyZ0#o z%zFV*6oB?S4)b5VGg5NEh@8Q@aTNKh>+#qSmG_#R*5&u_ts7qX{g?ar3jna!^q`Ui z^Z8r?0PTUt@K?sm0CF#|v9rS3;CdWw?4)%d!SL#m2_OJILkK*C&Od+qoQ5D4$2vR& zFaUoLh`urYSPh^Q-VMjvcziu#{*%gky$Nqfp4<0SsULI;2a9RQFV0@Yc? zK;%Wy#*&ZXhqMcJdXgo+8jr8a53=Y0@R1Gx`{(;R10chOq7KEE@c3TpuD}8zpaX!x z{lCEx&5IT>3niAnA3zKMy8^uVis%J^w_kq|{cs2x%|CuBD9qU_*8@dWHJa~F|4=J0 zKDMd^s28n>@&F(D$xY|kIFCBfV|1!kuFn1l9Udl6y8$R?hbQ3w>qFu{&c2XpKK}Qy zuK@T9_1Nn0?&BeU+6^GTD(-*%-=F**>po7aYMxRBPGtb%ClUyNkGchW)Sm`GU;lp$ z(3w9#(y=o{;QeX;w66f<6+nliYj%km0@DB2YeOI>Vc?JN#!BU#Rp<1>s!{>4n5K?Z zi@ki10m^%Ux-Xy;*_~4P3Jp*Dd}Us$03x+oO;;`bz5<|Td^y12Zt>Sbt-R3`5hzzc zx1ed3ygMeOKkN5Z1?t6XLL~&21qy!zN)8|x2Ktq~z=(-;ZB8sgcQhHmgODH#!Al1e z&lX)-(ud`i1Ng`X1$;gj@twkaZe3dwYd()v1@ZvqwgPepo*y4s^Wfor`BDn7@O@Cg z=TS%i;wT!&G613qAQhm_|4IR1Q^Mq>`6eq60YIbxPz59aBWAlv{!%d)2o-PG_^faQP$pt`F75Q$KIR$Ne(e=2=*n$8110#Ka;uc(SAp}^V=K+X6ay=7#mK+RxofAN+Q~Jbf3wkO-rmrSv2 zaj+R|f>zevHEPGw&%KhL{h;+Sxu%1Ljn444af@zJfa0%im0nN)&~$(3*OX&AM?0-l z@HP8sQ3hZ$@$3wMCg8AlGekGJ5LB-RiWCSz0OE}{BZ8d-pdGIlJWAXG8+rh;XZ~mKl2(-{U{<@Uvg`mr`}1NU7Ckzms> 1)); if (pMS->side) @@ -259,8 +260,10 @@ DrawPickFrame (PMELEE_STATE pMS) else r.corner.y = -(ship_r.corner.y + (ship_r.extent.height - r.extent.height)); - SetFrameHot (F, MAKE_HOT_SPOT (r.corner.x, r.corner.y)); - DrawMeleeIcon (27); + SetFrameHot (s.frame, MAKE_HOT_SPOT (r.corner.x, r.corner.y)); + s.origin.x = s.origin.y = 0; + DrawStamp (&s); + UnlockMutex (GraphicsLock); DrawMeleeShipStrings (pMS, (BYTE)pMS->CurIndex); LockMutex (GraphicsLock); @@ -415,6 +418,36 @@ DrawTeamString (PMELEE_STATE pMS, COUNT HiLiteState) UnbatchGraphics (); } +static void +DrawPickIcon (COUNT iship, BYTE DrawErase) +{ + STAMP s; + HSTARSHIP hStarShip; + STARSHIPPTR StarShipPtr; + RECT r; + + GetFrameRect (BuildPickFrame, &r); + + hStarShip = GetStarShipFromIndex (&master_q, iship); + StarShipPtr = LockStarShip (&master_q, hStarShip); + s.origin.x = r.corner.x + 20 + (iship % NUM_PICK_COLS) * 18; + s.origin.y = r.corner.y + 5 + (iship / NUM_PICK_COLS) * 18; + s.frame = StarShipPtr->RaceDescPtr->ship_info.icons; + if (DrawErase) + { // draw icon + DrawStamp (&s); + } + else + { // erase icon + COLOR OldColor; + + OldColor = SetContextForeGroundColor (BLACK_COLOR); + DrawFilledStamp (&s); + SetContextForeGroundColor (OldColor); + } + UnlockStarShip (&master_q, hStarShip); +} + static void Deselect (BYTE opt) { @@ -455,23 +488,7 @@ Deselect (BYTE opt) } else if (pMeleeState->InputFunc == DoPickShip) { - STAMP s; - HSTARSHIP hStarShip; - STARSHIPPTR StarShipPtr; - RECT r; - - GetFrameRect (SetAbsFrameIndex (MeleeFrame, 27), &r); - - hStarShip = GetStarShipFromIndex (&master_q, - pMeleeState->CurIndex); - StarShipPtr = LockStarShip (&master_q, hStarShip); - s.origin.x = r.corner.x + 20 - + (pMeleeState->CurIndex % NUM_PICK_COLS) * 18; - s.origin.y = r.corner.y + 5 - + (pMeleeState->CurIndex / NUM_PICK_COLS) * 18; - s.frame = StarShipPtr->RaceDescPtr->ship_info.icons; - DrawStamp (&s); - UnlockStarShip (&master_q, hStarShip); + DrawPickIcon (pMeleeState->CurIndex, 1); } break; } @@ -517,25 +534,7 @@ Select (BYTE opt) } else if (pMeleeState->InputFunc == DoPickShip) { - COLOR OldColor; - STAMP s; - HSTARSHIP hStarShip; - STARSHIPPTR StarShipPtr; - RECT r; - - GetFrameRect (SetAbsFrameIndex (MeleeFrame, 27), &r); - - hStarShip = GetStarShipFromIndex (&master_q, pMeleeState->CurIndex); - StarShipPtr = LockStarShip (&master_q, hStarShip); - s.origin.x = r.corner.x + 20 - + (pMeleeState->CurIndex % NUM_PICK_COLS) * 18; - s.origin.y = r.corner.y + 5 - + (pMeleeState->CurIndex / NUM_PICK_COLS) * 18; - s.frame = StarShipPtr->RaceDescPtr->ship_info.icons; - OldColor = SetContextForeGroundColor (BLACK_COLOR); - DrawFilledStamp (&s); - SetContextForeGroundColor (OldColor); - UnlockStarShip (&master_q, hStarShip); + DrawPickIcon (pMeleeState->CurIndex, 0); } break; } @@ -1417,7 +1416,7 @@ DoPickShip (PMELEE_STATE pMS) { RECT r; - GetFrameRect (SetAbsFrameIndex (MeleeFrame, 27), &r); + GetFrameRect (BuildPickFrame, &r); LockMutex (GraphicsLock); RepairMeleeFrame (&r); UnlockMutex (GraphicsLock); @@ -1484,29 +1483,42 @@ DoPickShip (PMELEE_STATE pMS) static void LoadMeleeInfo (PMELEE_STATE pMS) { - STAMP s; - CONTEXT OldContext; + STAMP s; + CONTEXT OldContext; + RECT r; + COUNT i; // reverting to original behavior - OldContext = SetContext (OffScreenContext); + OldContext = SetContext (OffScreenContext); - if (PickMeleeFrame) - DestroyDrawable (ReleaseDrawable (PickMeleeFrame)); - PickMeleeFrame = CaptureDrawable (CreateDrawable ( + if (PickMeleeFrame) + DestroyDrawable (ReleaseDrawable (PickMeleeFrame)); + PickMeleeFrame = CaptureDrawable (CreateDrawable ( WANT_PIXMAP, MELEE_WIDTH, MELEE_HEIGHT, 2)); - s.origin.x = s.origin.y = 0; - s.frame = CaptureDrawable (LoadGraphic (MELEE_PICK_MASK_PMAP_ANIM)); - SetContextFGFrame (PickMeleeFrame); - DrawStamp (&s); + s.origin.x = s.origin.y = 0; + s.frame = CaptureDrawable (LoadGraphic (MELEE_PICK_MASK_PMAP_ANIM)); + SetContextFGFrame (PickMeleeFrame); + DrawStamp (&s); + + s.frame = IncFrameIndex (s.frame); + SetContextFGFrame (IncFrameIndex (PickMeleeFrame)); + DrawStamp (&s); + DestroyDrawable (ReleaseDrawable (s.frame)); - s.frame = IncFrameIndex (s.frame); - SetContextFGFrame (IncFrameIndex (PickMeleeFrame)); - DrawStamp (&s); - DestroyDrawable (ReleaseDrawable (s.frame)); - MeleeFrame = CaptureDrawable (LoadGraphic (MELEE_SCREEN_PMAP_ANIM)); - - SetContext (OldContext); + + // create team building ship selection box + s.frame = SetAbsFrameIndex (MeleeFrame, 27); + GetFrameRect (s.frame, &r); + BuildPickFrame = CaptureDrawable (CreateDrawable ( + WANT_PIXMAP, r.extent.width, r.extent.height, 1)); + SetContextFGFrame (BuildPickFrame); + SetFrameHot (s.frame, MAKE_HOT_SPOT (0, 0)); + DrawStamp (&s); + for (i = 0; i < NUM_PICK_COLS * NUM_PICK_ROWS; ++i) + DrawPickIcon (i, 1); + + SetContext (OldContext); InitSpace (); @@ -1528,6 +1540,8 @@ FreeMeleeInfo (PMELEE_STATE pMS) DestroyDrawable (ReleaseDrawable (MeleeFrame)); MeleeFrame = 0; + DestroyDrawable (ReleaseDrawable (BuildPickFrame)); + BuildPickFrame = 0; } static void