From 09a89e692b216be8433197435417b0b46815798a Mon Sep 17 00:00:00 2001 From: Steve Date: Sat, 5 Mar 2016 15:34:37 +0000 Subject: [PATCH] Added time up status for finishing a challenge already partly passed. --- gfx/battle/timeUp.png | Bin 0 -> 7701 bytes src/battle/battle.c | 8 +++--- src/battle/battle.h | 1 + src/battle/missionInfo.c | 14 +++++++++++ src/challenges/challenges.c | 49 ++++++++++++++++++++---------------- src/defs.h | 3 ++- 6 files changed, 48 insertions(+), 27 deletions(-) create mode 100644 gfx/battle/timeUp.png diff --git a/gfx/battle/timeUp.png b/gfx/battle/timeUp.png new file mode 100644 index 0000000000000000000000000000000000000000..9b31d0cee636a5cee5f532e376e260855cc6f50d GIT binary patch literal 7701 zcmW+*1ymJX7oA5pNItqBDBX{c?(ULqlz4PVNeY5=Nr%8kr}P6sK)O>(5fBhiy7|X{ z&6=6D?yQ-)_ryN?>>I1Csf3S1g#!QpzKXKEE_j~!7B1H`u;12=D`U4`Q^v8$@{NIFzeLu6du`L zEcUcWhG(++k*c)Ke-@tX>;E_FJLg+UNzC3abziRVbk2I;_?>}^+P4OMPD3Tt0LZja zvn)y^52W9SX&Cm#&aY{C?X~;S?NIR1&XH1zMk96X_SmY)*Y)SS`MVMYJ*T<5{K`{7 zk_D*FF20>>;!9bvN7o(Ab>YYop-k`i=W~3z3LD?YqE!Ac5CGhOFt9*63j=xy8L)cQ zDDZ5<2NOCR;b`h2diaiG;7fbOa${!EEpGqOF)N(mPdU;Qzy#viggG;Q?vG>@@>sA$BDF ze;P7epc?3fQ~kauZD^a&C#;0h=wbYTiC_j{FFNq3)Z>139ppj6$9qAVI3zHC)Yf+LI)D4V7#xVR45CHYI{j>v}X$Gf(E z8xV}9zpFLxY&`0De84W1$pt)r`*tP+oNEHHSo2eawm*ryjGo2mnwpy*t|EgwGam>5 zTD}I;$}DHeFwyS_cxy+;%0+9>{rDO^Ds?1+2|Ltn%uG*nW8-c|E*@eJj23iTp#xOXR=aTU!SbNkcSDddgg-p%VaAu z?xU7K_FT2#%Za6>amB4=ycM>Yz}K%SBgnj9Hb-ii++FR!Dcqd5T* zAPuzwZBrF}UoJQeg`E&1qKQ@I*$OiF_0D?t>uYWHpJ=?<`2z}*t}eojWy`TUANCcS zo0894OWR&=nMGPxzYrVzszMfw`Uc=O?}!Y(y|BK&Iadz|5Y>C}VzjxXCEKa16T%78 za`WVLZ-@?k2fc@#iExiLcBp-rCN$m3;G%;tn?lM)H~0@40T93!eT>udcu)f z=<%k?Wj!-4!W0#iFITz(1ejHbHFM#NNuKPi#cVGrOWS7F-}>&k+)uE^`ly{l$vYZn zWh_-v{_I!P**x4`k2Tm1!HL&B0o-BnXM#BC$tQH4CO>tIz0&V2os+_n(R*8(n~m2) zZe3#@HqV?fk|=PZ%o;gyV+iRTfX(j9_5S51M@qm%IHxB5ZvBbL(;HWUcI{M%@x#qx z&ySPsQ6TK*CXfjJz1Vo zGRs=Z#nqUD7a?Qt?o*`l`Gri6mx|4ru9#xDwvGJR;ojco?a|Bz$4R=K%bv&QT^8o1qGw0cbu}6&m{{cU$uVg?wIn2UoRQVrh{6>oFI{kZdAABjqw&*_aJgKuwE;fa{@^Yddb+`Cz| zp+x9+fB3jJ9#g&<$(C{UTd4-v{Im(@+KL=0gmkFL1>$kXs0UldeA0=2GAJAcxI!Oq zH~!`w2eGMET>M^+Ae6iU3=9l}fmR}({J+;h1ovyWn~)ZkMmhIRU3@IA)`QbH#5bfifDW`?s5Z$hW+zA;7PK49L0e04U0)LFUXGTx z#B7d#%YinX>1c0nQV_61>9SPM=sDZ-aLyCiZ>>nGzyZ~t?^bm;Mg_) z4XIk3rK%||AWD@})mrllf-g+^ax7jS3RPQlQ)!k9kgSyX%osjP_E~B7Vw)(?qM@1x z(@A17V)q&^@Dq(EPc$(mzH)1h>zA*dx@SWEW?(wG;bU zT3FB(e*V*lw6Go7{#I`tfoht+=zn8JKrcz-qgC9TlW7@}y|=gbhCObXAjTFatkLIS zfz>|0D6e@IP4c~SdZR5QkNzqb@y~Xla&hl9VnZ(4zpr%*ft7FN+ z`aw=1uk$l0-&9Fa{F_c76Xa5gr~+aF#bAG&7CuO8<$8nR&|>Sg_)K3z|iA zf3ULh8CG~<=eL?bOWW~nF93mo0x1Vg@KG((YLyxY0}B-u7$i%be(u!(uh#Q(QhA** z*q38N;BfF%cQD>Fu4U};Zdc0VICfL@+ z^M|XgFd@>&s$S1K=qjAaFb~HkO;z`*DE;%CF*lz}CAwUu87Z z9+dd}B5TAW7mv$QS87`PlNpjw>TU{;Vf1B-!(WNX0n_pyKWyN6n$_l=!bhzd8XEqm z<03K{u1xLTqW8w-?f~NA;sVyJ`D&pW0_f}O%ini5H0V$uNUk>~bYM@IRdg{-5C
Mjz5y~SAvk}4^ch4x9ACKmv#{8l|MjWY)F{MKWyPj`pz9|kBa?MM}@zXpym{2-^Ya$FPB zNU>kOTYr6AR8++HKI9+(fT%~u|Q z9TB5_roqFA;z3@8uXXrv=$V*MvZ)(Zk-hljqGOVgUbJ087h|~9C%#}NDWD<2LqqUF zUgt~b!)XEBsJgY)$lin;#PxyC5tt=tN2~2#OD(S`GPqtiH0u_W@Vu65)#T3KU8b<` zXPgkb|LrKH=d)ST)n%68GrNCq;Bnl2*%&Fi!}xqY;Rc-=;{CdNT{x!yN!wFZ)7Mwu zWAwi3M%bI&9r^X>m1`B$%8KK!16&%Dwyodz$Zgr#!f2wc)xp@D2-G(;RLlwn=~&zC zQRm;kL-a~(O#!D44$F=9oaaL6krlMTj%F|jZx8qw?)%$#&fRe$H+JA1g)GZ;xfAbJGbZQMOc!}R>+2NqxQo4 z_wOajXS2CR`KfcPC4+CgjXBAQG9k0_qL5^nfl$4a9YL@FoX3%ZR zOGr>Bu<*unUs;^xk*WFGis*FrKbik>>+Vke4xI$1-it~o5e6oFB^bXkn!5x#q=}Fv zCDkgvj6qw4LUo|Jxz*MY3gecu0Z9iChJe%PlMdK680!PILa!F;6D4n)=DG`lPOv5K z{>Y8xh)mMpM2)D!^pYY+(Zhltu6IdH*)r@6oG7s=WQ(*RLmux>PCU6U);l`HIL+FU zP?Ofy*Yh(|Q)fTe-OVn{&-;8mzNFuCEGX>}eo1DVsz5y(zk|}0goVYWJXY69J&27E^S2x1%))} zX^S*B124W2AKIB!6w>l%amBqZ!pu-SMP#WyXSDw-ILfxPr8Dou@ges%=)I)D9 zwqjI1w`PJPmXDim{%MKo9q22__vSijaOuAK&s4w^1{c{+&al}c?Fv+BQ2%kwRSdpd z^YhplqbzG}rReVNR&GAl*V8NUq;YK4bi_93q{4|p0p`FUs6giA%u;CPt9~_ba8eD2kPf6^+(6XB3V>!uvbfabI{m) z53tD+x;25TETXPc-_GvX+S0BlK1hzAuP>E|3S~D&!RNKvdrPSzb2`~kDs|Yb3Gg|F zJ_I^jrt$8bxv={>UWR>k1STOrm@6uCm#Hv~89nvzH`1FZH#h~&s7^xJ>XJZr!&Ezg z`q#!W>#+Sc+ve*%9Mq}j5y~YW-o_8x%@CS)q#Q13N4I~mX@J|A?8MJk1JXojq!bi# zL}-+z=rwke39Mob-!``A>xzhXK^I%`ezmu^j|B!*QtY{{X9j^S-UKVsYB<5E(HB`%h13k!`}H4phveDI~&nVC^rS3T8oql&v^aQSdV7FdT18(zd> zsDk}aT8fz85e=viK%7Lq23hQsh!=(-RvqIGo#O`V0TDIr_ z(A1Suv|N$fI!DmNEXgl}5&(h*Qzb=xDkWg3OM36K=yZ!oN-4s?fUL2psl=^tM7x?r zrG3g`i5JsU^miX5@;{>B?F2UVIHupL?Ie~V*Y}5}YP*z;>I~GR7)%9d3 zokCr@&;Y(;blcO5FZ# zxNxj`L@mk--H(l-0fw!JzEylRx z=0>{dfM-6~w*CFr0CseCGUNQX-FTEd1(`%udwV-rwH%XhjpchfZM1_#r!=*VfGpP0 z6aW0(cJQ}l|2++SZ0_hV-Kct1vUJ7dR*$yXz@RN*!k#)&dJhmUzA!cIa%&aWp%+6< zLxr{mU3;FMPD&Nj-x=%ZJfRD{^FYv0M1KlR`zp3qgDs6Yd3tiTHye<@Tk`DtKLG{w z+jnKkNM32x39Ptgd0EYPi-wFc0mlim;mJv_UAav`a9#8eYyU;$1LqDIr29p~9H1y{NunpnciT^qe*aVR#Vn%$HXj(RFbp0m$0GiwyY?GKSE!q%}%k|eh zO`hATcbk|}R*qv?j48Ji|M~1*-hu)lfy35d!dstHkiWmG>n_vGmoSl<^NZx3G#beK zkGvw}v<shj(G2{}htloaH39f&3*%^TZgYW0Cl4Z%oBa^1cCf&%rJ< z1LUIr02>Th<95%F@7M9k#rL=iG6%acq-!fGh)85kK!px(Ca9D#BZfs~gb0n%b-)zQ z-9;4jP+1OR^3+cwPfW;hGXME1sF`Ljt*Wfqn71LUryk6?DL%QaRdO5GOQUZxTi*b^ zO4w;;&#pb^tWS?*phjh{QJ4?aQc5jkeSTW;R=7i{&{h2|Yo*207I}*BZb6^V#mE*J zHZ5~L{$!KVf&3FQDhF(mAmjDLPNO;&;}`u@%N!Tjfo2QYVH z=pX*Xz`cJZb@&_@3W0TY>@*0sIda}lIg9GnWJ~{K`>R<*(W-h5!T@-{TsiW4|JhX^ z%UVnU?aI<=xnupwnGd*!WWilzxrKN6HJag^R<`9sN|465UE)v^12eO&%&e6(flZtK- z@gP?L`R*6D_Y?{`67k6253mR!brH+=`BD5%s1%IKB-5Gs$Nfa_B3Y&v$(X|MO$~}A zfLc)ev$MC~bFYs1o$4!mNQ^usBgdn6RBW_}T~%q|;`&MTg?{ zrA}P#S>U8zrOO={q8xUcxfKUs0K!nbJ{Mt3{LKk6;=)p`uVoQDN(O~CP~A``^M1m1 zWo7B&RE$FI? h$T$2l#GvPG=%V`;r-0eD3bU4*UDOj{}1$LkVXIi literal 0 HcmV?d00001 diff --git a/src/battle/battle.c b/src/battle/battle.c index 1c845a8..e2028fa 100644 --- a/src/battle/battle.c +++ b/src/battle/battle.c @@ -96,7 +96,7 @@ void initBattle(void) static void logic(void) { - if (battle.status == MS_IN_PROGRESS || battle.status == MS_COMPLETE || battle.status == MS_FAILED) + if (battle.status == MS_IN_PROGRESS || battle.status == MS_COMPLETE || battle.status == MS_FAILED || battle.status == MS_TIME_UP) { handleKeyboard(); @@ -276,12 +276,12 @@ static void handleKeyboard(void) break; } - memset(app.keyboard, 0, sizeof(int) * MAX_KEYBOARD_KEYS); + clearInput(); playSound(SND_GUI_CLOSE); } - if (app.keyboard[SDL_SCANCODE_TAB]) + if (battle.status == MS_IN_PROGRESS && app.keyboard[SDL_SCANCODE_TAB]) { battle.status = MS_PAUSED; } @@ -296,7 +296,7 @@ static void resume(void) { show = SHOW_BATTLE; - memset(app.keyboard, 0, sizeof(int) * MAX_KEYBOARD_KEYS); + clearInput(); } static void continueGame(void) diff --git a/src/battle/battle.h b/src/battle/battle.h index 7a66e43..c507df1 100644 --- a/src/battle/battle.h +++ b/src/battle/battle.h @@ -83,6 +83,7 @@ extern void destroyBullets(void); extern void destroyEffects(void); extern void initChallengeHome(void); extern void updateAccuracyStats(unsigned int *stats); +extern void clearInput(void); extern App app; extern Battle battle; diff --git a/src/battle/missionInfo.c b/src/battle/missionInfo.c index 6be8859..36a5378 100644 --- a/src/battle/missionInfo.c +++ b/src/battle/missionInfo.c @@ -28,6 +28,7 @@ static SDL_Texture *missionStartTexture; static SDL_Texture *missionInProgressTexture; static SDL_Texture *missionCompleteTexture; static SDL_Texture *missionFailedTexture; +static SDL_Texture *timeUpTexture; static const char *objectiveStatus[OS_MAX]; void initMissionInfo(void) @@ -43,6 +44,7 @@ void initMissionInfo(void) missionInProgressTexture = !isChallenge ? getTexture("gfx/battle/missionInProgress.png") : getTexture("gfx/battle/challengeInProgress.png"); missionCompleteTexture = !isChallenge ? getTexture("gfx/battle/missionComplete.png") : getTexture("gfx/battle/challengeComplete.png"); missionFailedTexture = !isChallenge ? getTexture("gfx/battle/missionFailed.png") : getTexture("gfx/battle/challengeFailed.png"); + timeUpTexture = getTexture("gfx/battle/timeUp.png"); } void drawMissionInfo(void) @@ -74,6 +76,18 @@ void drawMissionInfo(void) } } break; + + case MS_TIME_UP: + if (battle.missionFinishedTimer <= -FPS) + { + drawMissionSummary(timeUpTexture); + + if (battle.missionFinishedTimer <= -(FPS * 2)) + { + drawWidgets("battleWon"); + } + } + break; } } diff --git a/src/challenges/challenges.c b/src/challenges/challenges.c index 379e860..7dcd0fb 100644 --- a/src/challenges/challenges.c +++ b/src/challenges/challenges.c @@ -31,8 +31,8 @@ static void failChallenge(void); static void updateChallenges(void); static char *getFormattedChallengeDescription(const char *format, ...); char *getChallengeDescription(Challenge *c); -static int hasFailedAllChallenges(void); static int challengeFinished(void); +static int alreadyPassed(void); static void printStats(void); static char descriptionBuffer[MAX_DESCRIPTION_LENGTH]; @@ -80,14 +80,14 @@ void doChallenges(void) { if (challengeFinished()) { - updateChallenges(); - - if (hasFailedAllChallenges()) + if (battle.stats[STAT_TIME] >= game.currentMission->challengeData.timeLimit) { failChallenge(); } else { + updateChallenges(); + completeChallenge(); } } @@ -120,24 +120,6 @@ static int challengeFinished(void) return 0; } -static int hasFailedAllChallenges(void) -{ - int i; - Challenge *c; - - for (i = 0 ; i < MAX_CHALLENGES ; i++) - { - c = game.currentMission->challengeData.challenges[i]; - - if (c && c->passed) - { - return 0; - } - } - - return 1; -} - static void updateChallenges(void) { int i; @@ -379,5 +361,28 @@ static void failChallenge(void) retreatEnemies(); player->flags |= EF_IMMORTAL; + + if (alreadyPassed()) + { + battle.status = MS_TIME_UP; + } } } + +static int alreadyPassed(void) +{ + int i; + Challenge *c; + + for (i = 0 ; i < MAX_CHALLENGES ; i++) + { + c = game.currentMission->challengeData.challenges[i]; + + if (c && c->passed) + { + return 1; + } + } + + return 0; +} diff --git a/src/defs.h b/src/defs.h index e45cda7..6bafa13 100644 --- a/src/defs.h +++ b/src/defs.h @@ -262,7 +262,8 @@ enum MS_IN_PROGRESS, MS_PAUSED, MS_COMPLETE, - MS_FAILED + MS_FAILED, + MS_TIME_UP }; enum