From db83601b3cab310b9fdcdb3d56bd37e800f824d5 Mon Sep 17 00:00:00 2001 From: Ben Basha Date: Wed, 1 Feb 2006 18:25:24 +0000 Subject: [PATCH] Add break effect + Bigger bricks git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8526 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugin.c | 2 ++ apps/plugin.h | 4 +++ apps/plugins/bitmaps/native/SOURCES | 1 + .../native/brickmania_break.220x176x16.bmp | Bin 0 -> 2616 bytes .../native/brickmania_bricks.220x176x16.bmp | Bin 3414 -> 3640 bytes apps/plugins/brickmania.c | 23 +++++++++++++----- 6 files changed, 24 insertions(+), 6 deletions(-) create mode 100644 apps/plugins/bitmaps/native/brickmania_break.220x176x16.bmp diff --git a/apps/plugin.c b/apps/plugin.c index 8b47af7e02..d9433d7bff 100644 --- a/apps/plugin.c +++ b/apps/plugin.c @@ -119,6 +119,8 @@ static const struct plugin_api rockbox_api = { lcd_get_background, lcd_bitmap_part, lcd_bitmap, + lcd_bitmap_transparent_part, + lcd_bitmap_transparent, #endif lcd_putsxy, lcd_puts_style, diff --git a/apps/plugin.h b/apps/plugin.h index 10ae180df7..61a3219893 100644 --- a/apps/plugin.h +++ b/apps/plugin.h @@ -161,6 +161,10 @@ struct plugin_api { int stride, int x, int y, int width, int height); void (*lcd_bitmap)(const fb_data *src, int x, int y, int width, int height); + void (*lcd_bitmap_transparent_part)(const fb_data *src, int src_x, int src_y, + int stride, int x, int y, int width, int height); + void (*lcd_bitmap_transparent)(const fb_data *src, int x, int y, + int width, int height); #endif void (*lcd_putsxy)(int x, int y, const unsigned char *string); void (*lcd_puts_style)(int x, int y, const unsigned char *str, int style); diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index 5b96f30323..15b1c46237 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -37,6 +37,7 @@ brickmania_sel_resume.220x176x16.bmp brickmania_sel_quit.220x176x16.bmp brickmania_sel_start.220x176x16.bmp brickmania_start.220x176x16.bmp +brickmania_break.220x176x16.bmp #endif #endif /* HAVE_LCD_BITMAP */ diff --git a/apps/plugins/bitmaps/native/brickmania_break.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_break.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..531bc585b20c37352a2bb17771b8c3f0af739148 GIT binary patch literal 2616 zcmeH|F>b?93`2i2CR>02Jwi_qWbU5(AIH`IH27&swSg|pkid2%k&m*SA>Yr(xsA^~ zu3vH9*6)w@Ip(L(uNRzSfXmVr9x*wrVORsAAydYgigpgc8>uF(d25r>{g4%4E{5dU z_NQfIHCj~*LyXK902!?_+$TC!cNsy$MvVv@oN6d)NOq03@3%vTztu#X?~&V3ZM8`H$3B5D2Cdk4UcSd_`;Co1`9s#)Ch(9JiE<7 zLpgUoOr;MgS(^L+XUnxLG91zhlp4vMqF8vCrG|p<_awiNEjOv)&5?OEIIo(KXwBe! zn9RYHa_)SXN?*CWFJt`Qir3_KUV%MkasP*~8k|?nR-rY6^Ch!0eDmr5bLVYk>EGX9 FYd@abpmP8K literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_bricks.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_bricks.220x176x16.bmp index 1cf951b16fc980b06c9f4bb7631b5509089d075c..e89f293bf017581d12c0d1da3c03279d619c160c 100644 GIT binary patch literal 3640 zcmbW4YiwI*8OMJhA-$jInKs0U015L6n6x!aL~W;*wOx@Iv>(bSBi-nvth;5fYAM^= zl&~(>w$43vZjN(l>?F`ugd+|uO(h)K@Q44smi>n#IwCZ z4a{l@|CH*Asn)1!jj4u+at|tZpK|xBhCx;7Q^n2de51;DsnQl*)ji4^Q?3zJ;oIOv z!l-n|RdZOmg33Ll>ibpg6?L&q^Q9j3ev^8qR;yfSRrS(9_VlNCanU`kReiA(A5!js zY8cS{i<-W`4`_EuUf{tw)iq^OjH~vjj-V|Bbc*@`Rpn1g6dDWX+^VYUfqY^Ran%u3 zjibtCBGmM#@=jIZSI*1o{YLd}tvXYu^4+S^Z~9B@{*P2>MGY;aEW}m&HJznNB+^_| zcdOziB^J)s={O}VW`06$qk=1{@6R$qm|LNH2!H=Ji=`DUF}KRhGUIc)A~S^Igsu^a z5*cSOgs+dwS7`OqHJ~dnN^Fkc4F;rtk~b>zt9%Ap;H?GAOkv*;Wy9 zXbGuq2dxgga{L~R-@^4x+_tWIn<|?kqh4%t!KN`o@9}Kr=9~RZiVa?X1e};rS(?Na z{&NvF_(UsFsYwlDLqbn3=pg1GveiP%MvCujnPsi5->i)Ynv|MyFm6r~m;e13cQEN- z#59;>wu*)#oL{C&aF*kA;=GjF&mt?c%*`@8&2)^I)G)(cbam3{!zU+Ryj4_{QC3W` zkQG#P&@s-qZ1dpJ{344|ODxSZKf}xzV?zve(=B{E?F}>tFXTlozQ=n76v&F)9Uuf2jo)B!WncGTKY8@Dib!W{KKFlLR@>`F!%lMGM{p zFQ5Lq>#X17Ub=-SQIU`oJ@h18w9!^eZ8g<0NEfa;>h%0pSijHu8lSE4>6$+IG9^1d z`o(C0A`cVX!BvYM!wcDA(QMITX}{rzh}ycrCNCDIZ9X!*XvZ=beT2{s-T$&_ zo6d(U4R7HSDHd#IY~sd(@RCBd4jKuWkqC(e2_h>G;L{~!3Xw;2gn&h#rK9$yB6y61 z_)7M_ZL?-`CpAd1AVDT=Cbqg5GJ_BcG6ETg*wOP7avOEu<}acyU%wWUib};Lh4X*a z1x2xq>!B2=1{0K{Mzd483Af^{V%MCB%o z!4P!873hT)gIxkAT!2#OFl|Ouil2qsMq(ajAZ~8UZ=>|-fp%zwaws+yO3bCW>)YU^ zzob|O;U&csOhClAkRakBAyIAm7lKICgI~$_kMVz3-Uqm2f-Iyge2$k9)Ip7r5F;tx zFk=2b{58$OBwRNWl0jTG^;q{Q|x(_tP|{fj?CZk#G5?%Ck~Z!w2+_WsRIc<$3u=wt2|$+ zB@P$x^dH#&76(tW?-aXVAuETSFOvBjkG;U7r`TJ<&kK1bKb;pBZl15;Stm!!I8wkN zaq$lO@=_LrKgMInc=UJdkvhkLB<~^D#~WTwN(vX*6&!bRtc=6r^KJI$aqtvBd6gfZ zAoDjop3M)BlX;RSPIE9{nfwV}`nQl%&&f)DUCPk{j-2I?G9?L*@w{ z|0O?oc`KjO$?JY&K_b+VUCFP^gpQn%ko@!<`_E_>PrXLgi|owiM=!Da4fg2yMQvx$ SD*FGcaM(KIw6o49 literal 3414 zcmbV~A#B?~7={0VNhXs51`JoW!jWmEg_TAM21*M9i>A}Gb7hkXx zw~OLieW31^0S}rNH&NHK;(EH3oWD*w|L;v0V}{L^O%8!gI0N1aTn@oG4v5u?A?Y2P z@cnEo1|{Xq^Jr3fIAwIGKAR4n*JfDdRhv~fap3oDcJTbtQgct&k!b=Bb%5?xT#Nl^ z?RI*gp4xz;$CW)SgYFl0Ki^8uH%;e%H|u8DIO`69O*jMI3jDebkHI+(h}B9c=^dMJ zX91P&t)L{&?P@2M$sSG_;XT$5p4VnrmT-vjA)ustJ)B$>0hikbz zvg^{m9i;oCfTP+|SdItaLXLZQdFYX9QOFmX3W3tLt;8C&%)s;rVUys~y_OSG`X+~#O% z)5aRt#3sy-Z7iy`nwgo+*ubuACCP#Jjx!)u_{c^)VjI~;Y#Y-tB%Sv;&aebXx>)eq z0t<+U_U1Xu81pJDoHEbZ9?n3VsTo#zavhJkD?&H6=|$^8{NPHbfNHbBt+mZM=yzPT ze{ucY+Pbmns=-mb2{DT(~#y;gs3S=C}r!lyFdOR^iHBryFxt7vjzFQM!)I9vtcbweecG^1`Zr z(|C7`$JT6RwlrIq&COZ|=Ct=e2P_;7t)EaJ?_O$Ey66O$hAsXjs3xJRK7b!k>Cw*d|l{ zs6Fc*@t>tBuZDxu;ou~#Y91GiSyK#ayPViX6?8tfvyq*mtDqA!w3AEwa1q6x zPa3-_PQ^xC4jmrZfQwD|F^~9%h>T6?=ey}U(dQOer6+dSSl7H)Ug?UCwU1fp!2405 w^LDJ7$K3PL_TV9C7!fFt<8 diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c index 34f4b078f6..2b75ce8f95 100644 --- a/apps/plugins/brickmania.c +++ b/apps/plugins/brickmania.c @@ -72,6 +72,7 @@ extern const fb_data brickmania_sel_quit[]; extern const fb_data brickmania_sel_resume[]; extern const fb_data brickmania_sel_start[]; extern const fb_data brickmania_start[]; +extern const fb_data brickmania_break[]; /* normal, glue, fire */ extern const fb_data brickmania_pads[]; @@ -93,8 +94,9 @@ extern const fb_data brickmania_bricks[]; #define PAD_HEIGHT 5 #define PAD_POS_Y LCD_HEIGHT - 7 #define BRICK_HEIGHT 8 -#define BRICK_WIDTH 20 +#define BRICK_WIDTH 21 #define BALL 5 +#define LEFTMARGIN 5 #define BMPHEIGHT_help 19 #define BMPWIDTH_help 37 @@ -458,6 +460,7 @@ typedef struct cube { char used; int color; int hits; + int hiteffect; } cube; cube brick[80]; @@ -505,6 +508,7 @@ void int_game(int new_game) brick[i*10+j].power=rb->rand()%25; /* +8 make the game with less powerups */ brick[i*10+j].hits=levels[cur_level][i][j]>=10? levels[cur_level][i][j]/16-1:0; + brick[i*10+j].hiteffect=0; brick[i*10+j].powertop=30+i*10+BRICK_HEIGHT; brick[i*10+j].used=(levels[cur_level][i][j]==0?0:1); brick[i*10+j].color=(levels[cur_level][i][j]>=10? @@ -813,12 +817,12 @@ int game_loop(void){ brick[i*10+j].powertop+=2; rb->lcd_bitmap_part(brickmania_powerups,0, BMPHEIGHT_powerup*brick[i*10+j].power, - BMPWIDTH_powerup,10+j*BRICK_WIDTH+5, + BMPWIDTH_powerup,LEFTMARGIN+j*BRICK_WIDTH+5, brick[i*10+j].powertop, 10, 6); } } - if ((pad_pos_x<10+j*BRICK_WIDTH+5 && pad_pos_x+PAD_WIDTH>10+j*BRICK_WIDTH+5) && brick[i*10+j].powertop+6>=PAD_POS_Y && brick[i*10+j].poweruse==2) { + if ((pad_pos_xLEFTMARGIN+j*BRICK_WIDTH+5) && brick[i*10+j].powertop+6>=PAD_POS_Y && brick[i*10+j].poweruse==2) { switch(brick[i*10+j].power) { case 0: life++; @@ -859,7 +863,7 @@ int game_loop(void){ if (brick[i*10+j].powertop>PAD_POS_Y) brick[i*10+j].poweruse=1; - brickx=10+j*BRICK_WIDTH; + brickx=LEFTMARGIN+j*BRICK_WIDTH; bricky=30+i*8; if (pad_type==2) { for (k=0;k<=30;k++) { @@ -869,6 +873,7 @@ int game_loop(void){ fire[k].top=-16; if (brick[i*10+j].hits > 0){ brick[i*10+j].hits--; + brick[i*10+j].hiteffect++; score+=3; } else { @@ -881,8 +886,10 @@ int game_loop(void){ } } - if (brick[i*10+j].used==1) - rb->lcd_bitmap_part(brickmania_bricks,0,BRICK_HEIGHT*brick[i*10+j].color,BRICK_WIDTH,10+j*BRICK_WIDTH, 30+i*8, BRICK_WIDTH, BRICK_HEIGHT); + if (brick[i*10+j].used==1){ + rb->lcd_bitmap_part(brickmania_bricks,0,BRICK_HEIGHT*brick[i*10+j].color,BRICK_WIDTH,LEFTMARGIN+j*BRICK_WIDTH, 30+i*8, BRICK_WIDTH, BRICK_HEIGHT); + rb->lcd_bitmap_transparent_part(brickmania_break,0,BRICK_HEIGHT*brick[i*10+j].hiteffect,BRICK_WIDTH,LEFTMARGIN+j*BRICK_WIDTH, 30+i*8, BRICK_WIDTH, BRICK_HEIGHT); + } if (ball_pos_y <100) { if (brick[i*10+j].used==1) { if ((ball_pos_x+ballx+3 >= brickx && ball_pos_x+ballx+3 <= brickx+BRICK_WIDTH) && ((bricky-4ball_pos_y+BALL) || (bricky+4>ball_pos_y+BALL+BALL && bricky0)){ @@ -900,6 +907,7 @@ int game_loop(void){ if ((ball_pos_x+3 >= brickx && ball_pos_x+3 <= brickx+BRICK_WIDTH) && ((bricky+BRICK_HEIGHT==ball_pos_y) || (bricky+BRICK_HEIGHT-6<=ball_pos_y && bricky+BRICK_HEIGHT>ball_pos_y)) && (bally <0)) { /* bottom line */ if (brick[i*10+j].hits > 0){ brick[i*10+j].hits--; + brick[i*10+j].hiteffect++; score+=2; } else { @@ -912,6 +920,7 @@ int game_loop(void){ } else if ((ball_pos_x+3 >= brickx && ball_pos_x+3 <= brickx+BRICK_WIDTH) && ((bricky==ball_pos_y+BALL) || (bricky+6>=ball_pos_y+BALL && bricky0)) { /* top line */ if (brick[i*10+j].hits > 0){ brick[i*10+j].hits--; + brick[i*10+j].hiteffect++; score+=2; } else { @@ -926,6 +935,7 @@ int game_loop(void){ if ((ball_pos_y+3 >= bricky && ball_pos_y+3 <= bricky+BRICK_HEIGHT) && ((brickx==ball_pos_x+BALL) || (brickx+6>=ball_pos_x+BALL && brickx 0)) { /* left line */ if (brick[i*10+j].hits > 0){ brick[i*10+j].hits--; + brick[i*10+j].hiteffect++; score+=2; } else { @@ -938,6 +948,7 @@ int game_loop(void){ } else if ((ball_pos_y+3 >= bricky && ball_pos_y+3 <= bricky+BRICK_HEIGHT) && ((brickx+BRICK_WIDTH==ball_pos_x) || (brickx+BRICK_WIDTH-6<=ball_pos_x && brickx+BRICK_WIDTH>ball_pos_x)) && (ballx < 0)) { /* Right line */ if (brick[i*10+j].hits > 0){ brick[i*10+j].hits--; + brick[i*10+j].hiteffect++; score+=2; } else {