From 06e25c8c463a965059a1b3f85ee64616d6594f77 Mon Sep 17 00:00:00 2001 From: Dave Chapman Date: Mon, 23 Jan 2006 16:00:06 +0000 Subject: [PATCH] BrickMania game (currently only for H300 and iPod Color) from Ben Basha (Paprica) with modifications by me to use external bitmaps and make the code more (but not yet completely) compliant with Rockbox coding guidelines git-svn-id: svn://svn.rockbox.org/rockbox/trunk@8428 a1c6a512-1295-4272-9138-f99709370657 --- apps/plugins/SOURCES | 4 + apps/plugins/bitmaps/native/SOURCES | 20 + .../native/brickmania_ball.220x176x16.bmp | Bin 0 -> 134 bytes .../native/brickmania_bricks.220x176x16.bmp | Bin 0 -> 3414 bytes .../native/brickmania_gameover.220x176x16.bmp | Bin 0 -> 17318 bytes .../native/brickmania_help.220x176x16.bmp | Bin 0 -> 2182 bytes .../native/brickmania_menu_bg.220x176x16.bmp | Bin 0 -> 116216 bytes .../brickmania_no_resume.220x176x16.bmp | Bin 0 -> 4950 bytes .../native/brickmania_pads.220x176x16.bmp | Bin 0 -> 1854 bytes .../native/brickmania_powerups.220x176x16.bmp | Bin 0 -> 1014 bytes .../native/brickmania_quit.220x176x16.bmp | Bin 0 -> 1954 bytes .../native/brickmania_resume.220x176x16.bmp | Bin 0 -> 4950 bytes .../native/brickmania_sel_help.220x176x16.bmp | Bin 0 -> 2182 bytes .../native/brickmania_sel_quit.220x176x16.bmp | Bin 0 -> 1954 bytes .../brickmania_sel_resume.220x176x16.bmp | Bin 0 -> 4950 bytes .../brickmania_sel_start.220x176x16.bmp | Bin 0 -> 6774 bytes .../native/brickmania_start.220x176x16.bmp | Bin 0 -> 6774 bytes apps/plugins/brickmania.c | 1113 +++++++++++++++++ 18 files changed, 1137 insertions(+) create mode 100644 apps/plugins/bitmaps/native/brickmania_ball.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_bricks.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_gameover.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_help.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_menu_bg.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_no_resume.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_pads.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_powerups.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_quit.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_resume.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_sel_help.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_sel_quit.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_sel_resume.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_sel_start.220x176x16.bmp create mode 100644 apps/plugins/bitmaps/native/brickmania_start.220x176x16.bmp create mode 100644 apps/plugins/brickmania.c diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index 98ffcc2be8..0b9f68bc0b 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES @@ -27,6 +27,10 @@ plasma.c #endif bejeweled.c bounce.c +/* H300 and iPod Color/Video only */ +#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176) && (LCD_DEPTH == 16) +brickmania.c +#endif calculator.c chip8.c demystify.c diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index 140df739a9..ecd8334f3e 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES @@ -15,4 +15,24 @@ sudoku_normal.220x176x16.bmp sudoku_inverse.220x176x16.bmp #endif +/* Brickmania */ + +#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176) && (LCD_DEPTH == 16) +brickmania_ball.220x176x16.bmp +brickmania_bricks.220x176x16.bmp +brickmania_gameover.220x176x16.bmp +brickmania_help.220x176x16.bmp +brickmania_menu_bg.220x176x16.bmp +brickmania_no_resume.220x176x16.bmp +brickmania_pads.220x176x16.bmp +brickmania_powerups.220x176x16.bmp +brickmania_quit.220x176x16.bmp +brickmania_resume.220x176x16.bmp +brickmania_sel_help.220x176x16.bmp +brickmania_sel_resume.220x176x16.bmp +brickmania_sel_quit.220x176x16.bmp +brickmania_sel_start.220x176x16.bmp +brickmania_start.220x176x16.bmp +#endif + #endif /* HAVE_LCD_BITMAP */ diff --git a/apps/plugins/bitmaps/native/brickmania_ball.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_ball.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..97da97f4a77efe35023b5247f741ff921e298226 GIT binary patch literal 134 zcmZ?rZDW7{Ga#h_#H>)v$RGih2mq27fPx^51ePvanw*+EXVx5$*w$@Zd-{6j%$t*) un+*~IN}fA?4v5yST3cLN%y94az30!LzkmH6C;?Op(gNh1JAV#{KpX%71uqZ) literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_bricks.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_bricks.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..1cf951b16fc980b06c9f4bb7631b5509089d075c GIT binary patch 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_gameover.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_gameover.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..d004433b5fe5e8077c7e6ca4961de9032d1f59f3 GIT binary patch literal 17318 zcmeHL?UB_m3=BW$ff6Wyp#b8B+A-R0+Tyc`EypLN-Rm*Wq3`9Io8 zr-X((b=^K##mjv=uLxGP$q`gld=T1XFx;sZ9;}!(JiJ90H$sN|YBO>9sesguC8_RG zFqgZvCoN<$4v-ZZW|q-)rIrOG1MDS-#msye!O)9%+>s@HQkQ}uea23&SE|;VNoiQ# zk_RIUGn3^tovZcc8yhC$g)WfnNh9)g?HwYqi{zR0_0%FB^6|3tr6+ZsT$RU*KAtpY z*r=Td3m+K`h;)}hg4Bh`!ehO3=~Xi7reJ(4yReHKgku4Nsm+YVokbw2{HD=pkYB9~ zy~|;G`qH4*McTfRSc}Yka!?PvMp{c%v{huIoySyawD&C4L z8L3os4k~(jSvxmOmUo+b14p52*d!??k{$7p%uIOr5mvdMA5A7YtC{Sr6ynrM0LT$S zBBzy7L&9Ta0-;J$;Uk&J5Y{QI8=6ea>cK@$3K6OS7g;q@WH7c1?Md=F?u?}>0?5?K zRe7u@Z4;Sk5IFX4KXb$c?3-+kYEE9`lhdNDe*T)SLQ@Whi zNEqBGtpeB+NrheZUZ&A0o^evGkfrL6xhl%vb}x=sf$Q!9LUeZ|2QEGnT3WaWM#z<%#)w+2)8K@fjqqA_Y(+9uBb4|Gwl)p$R(zk&0mC^3TRB(3Ezg7 z#mKX>kN7*hbnJX{US2k`nxGH==yg68hwsgKDFx@J9+BR;#9ZPv(m;$Q{7IM6s0sgS zn*~u}lxMCbVDkIYJCqp*G^UK75yGk|i2Bph4Z?Zhl5hzC{s<%U`dpB(^i`6rk5MsF zNvjefOA-g2ws}16UCC165|H+iWSqE`>KDQkG1C#B=jr7yuZV3?jmwXJN9V0{~=%k@=)HhN)hXOg&_|J&<^ZH2^R&8FVF* zu;*FR67YE0yjohd1pGTMaWFRrqajj%XY=e3_dOW3s3_a&fc9{FeF zu|hE~!FcK-MGAq2SRo-w`r=j+cGXc?85CgStW^e;$VU!gW57pNe0jQ09?ACdQ7h7w zzXA^}JNk-54O)%7Kv+#}eHFj(`@C93UT>RP$)`FeZ;{gTGFh%*oeenekT>$b203$j zM{{hRiJ9#B=t$MJ8Mo(FFJFlqY1_JNXD7Qhx}Nn`FJF(mk6#=uc0w+53N5CSU13ls yl6HERkVT?4dX2~ZCUWZ1$0u6hXz$NL<^juWd$P|k$iZ-%kOi|g#e54n@6um@Y|K;u literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_help.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_help.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..4798886090d303db0f5ce31828af172b4c53efd1 GIT binary patch literal 2182 zcmbuAF=$jl5QfJ>c!kA*&1IfE+E`(HvMF>`}3M7Sa zDFV+Ta5fLlLbwQlSXfwGVPTOXg@wiW&HnH9y$dP?mwB7n*_r>Jnccl~p6n$S#zW>M zz6X5w`R-WCZ1$A>&v*3&1JhtpcFmBk*>+I0WUeozGvAOcGi1$d)2tVSrF=jTk!{$5 z;4LAhb9-4aLqKQ;(NZ{q^-@HMLQ-S|6MIT9?#dfa6i|SOvp^g3hS9_3JZaowAW$GL z6ekliPVAu|$_9(lj5Ml1b9s()O8!DA|41pc3K86v`9YH@Gq}W{BPif9gDb&-r5q}< zizEA#**-mTH++Z^Yiwav1Z4j^YJ3rjbX8(ipENdnoDA%E*Ir>W>v!$#mW#&oPPxSL zV$JS_!d`dnaNC#}Uxx-I%e|iM_iVi*AKE~DB_H=fM^%DekL-JH$6RCcNa7I&h+l&K zF>}lLk-Z_*Jh|!6-f`j0e&nvp?L70|f)IKOA1oda-=7CCevJ*vlMoLI@zdPx--Zqc z#G{tIT(ka$3niWo>}q81feEocM|PFlvyNL-?h@zd#lh^LI!R`YWHzzc*v<}oc{VWO zk>#cvqmUCu(t6ys4+m~9+&{!lJVgfmP`Tt6E{+~XbwAyS+c=vL=8>Gx^~iN_u}|}K zHfhkw)pk;3r4Jm%f$K$v4-W1_?D~rLoV3)Nc{9DAH|lGK7)6%xhu(%pzuTH!wq}#& z^%x(dA$yTIN8poP2+CXM$9;hb@%K(=MTyQ3XnHYBPY2Cu?w~Z2(MZyrUh87mhOfw= zcOy@*$Veg;Uy*5x*mRmFJDWt|!+YS0i?Y0?@%-9e#3f+?t(^SC|1tvKrTG5n!s$UK z@qX%Al-Y8yH9lS>KMao~+c literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_menu_bg.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_menu_bg.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..f5765b84ca4cfe5482024f6d978264b72e19e3d2 GIT binary patch literal 116216 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 F?mu#7R+|6- literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_pads.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_pads.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..5bd1e5dc571c3730aaf58289958c726746066780 GIT binary patch literal 1854 zcmcIkA#cJ^5bngXx;oQId?3 z;b4f72spncH7Cp7SnK1#Fz&|^6jBgIIGWs%crl%o({hhVQ8p+h1%Rmb5aFexgn;ls zsyGpC6L95%xN(Vnk#gkOpmUu*(o#I~L`p(+-Y^2_unmvv`>nRKTej0uZs+Dqb>+Ow z`RePE@NPQFY1v6%y)Mjr?8&-N$^)f&3}qYx=EUab0}@ DCKaHN literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_powerups.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_powerups.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..aadd37095c3e040ff6cd9148bd3c65fc9ecf1ed3 GIT binary patch literal 1014 zcma)&F%H5o3`LC)3nySg9pM5TfGw6dQLoaKv25+uiX(6u*79S=7AYR6ej+#Tf5+|h z_TG{_7wjjjJ=PIxLkH|cPw>}HmmKKUH|J17hvwXgmSy=aG(oiDaJdndnk)I?+QN^$ zkUWL}4`rV)Bn~BfO5B^!*=rOC5v@2Z?uvMn_ZAwi^B4j=l+DlMJ(O^sdwz5(4U|_2 z5jh70Sy_I#_sYe1S8i8S;lguU@JMP0PeUl-oF-1aO8<|&=1>k-91t$I{K-p;x<4*O te>`#pENcnOd~8Dr=egxakp=LhO9J7VyH_p$achxhvAZmv&%h(eI3M>wkNyAv literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_quit.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_quit.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..262650544f3e95f81fcc4a6c376fab6dc81c2d68 GIT binary patch literal 1954 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_sel_quit.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_sel_quit.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..58ee4a3f77750855a59b2bf3f1e5ecadc700ab2f GIT binary patch literal 1954 zcma)+F-ROi6oxlN$Q3CT(roF1g$EW{kdTE`3n^T%@W3Jm7ILHr#v)is8aXUPt`M;Z za)qFUg@vGnpyibz)s?oEmX@3E%|AQ0xtQScZtmYV@4bKiH#<`-9lwg)^Nw+jU&`+d zzZX%$7)4*1|MgNo=V0j6){UZdXLz=1jFZ>GS?iS~xbGJR(X=gL$kaG$&ozRC@g?SFi(TL>cGsV%I zdM1X_YN|S2LZhDYZG5zmo_tGBHq!ARLyB~CKg0*0)4kQCTrhy8NsHisN!QfTmlRVq zYkSZUJ70e#sm}7p)9m3mdl+W-KeD^SESqf=^D$t&Z|1?k{Ajgx4E#C(tO>jP?wevu z4;-Q$?PS$OQC;Mng_wlLvmCN~uC=wC80&Gixty>=fcs&V&$c#~lCTac+_^;@tflS5 zZw*^AIUk;5H?OWb_d}cNe@cz-JTK;34(DL+KhKeC+$)JhgPDRDm55U{wAgpWPUw>r z@8x!0U3aVNPUn3xJ}ls?u1XqZ99JdgIlvc%_q%n#fjyp@?!C1XiK3zS>OP?OOrW#ZsCPtFJTho1ggHXe3H`{lt#&Nvzr*=*eVn2rX9 ziRmq-&R^F4!eVCPk@ea1u|qf8e$To3CVS52d$;F$)}Qe?Za7FlG&D3;$+)b!;d~$p zDeS2}V%q69&VhiLRe-7>T8%B{Erjl&MjX8BZk_00b9A=@!Ue_)?o^G$NHoWg z>R9|*q&CKGziF#-|H;9$m=qUi0*8Gte?C-3qP`~p>7Ikoa16n$6bm{+92`&5&|3sy c^gZMf*<9b`e8BW1N0Ua)Y)T1B{7-K58=e|pt^fc4 literal 0 HcmV?d00001 diff --git a/apps/plugins/bitmaps/native/brickmania_sel_resume.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_sel_resume.220x176x16.bmp new file mode 100644 index 0000000000000000000000000000000000000000..9b2c1447147633bd017e6307e72b8ef04878e29e GIT binary patch literal 4950 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 literal 0 HcmV?d00001 diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c new file mode 100644 index 0000000000..eec290f507 --- /dev/null +++ b/apps/plugins/brickmania.c @@ -0,0 +1,1113 @@ +/*************************************************************************** + * __________ __ ___. + * Open \______ \ ____ ____ | | _\_ |__ _______ ___ + * Source | _// _ \_/ ___\| |/ /| __ \ / _ \ \/ / + * Jukebox | | ( <_> ) \___| < | \_\ ( <_> > < < + * Firmware |____|_ /\____/ \___ >__|_ \|___ /\____/__/\_ \ + * \/ \/ \/ \/ \/ + * $Id$ + * + * Copyright (C) 2005 Ben Basha (Paprica) + * + * All files in this archive are subject to the GNU General Public License. + * See the file COPYING in the source tree root for full license agreement. + * + * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY + * KIND, either express or implied. + * + ****************************************************************************/ + +#include "plugin.h" +#include "configfile.h" /* Part of libplugin */ + +PLUGIN_HEADER + +#if (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) + +#define QUIT BUTTON_OFF +#define LEFT BUTTON_LEFT +#define RIGHT BUTTON_RIGHT +#define SELECT BUTTON_SELECT +#define UP BUTTON_UP +#define DOWN BUTTON_DOWN + +#elif (CONFIG_KEYPAD == IPOD_4G_PAD) + +#define QUIT BUTTON_MENU +#define LEFT BUTTON_LEFT +#define RIGHT BUTTON_RIGHT +#define SELECT BUTTON_SELECT +#define UP BUTTON_SCROLL_BACK +#define DOWN BUTTON_SCROLL_FWD + +#else +#error Unsupported keypad +#endif + +static struct plugin_api* rb; + +/* External bitmaps */ +extern const fb_data brickmania_ball[]; +extern const fb_data brickmania_gameover[]; +extern const fb_data brickmania_help[]; +extern const fb_data brickmania_menu_bg[]; +extern const fb_data brickmania_no_resume[]; +extern const fb_data brickmania_quit[]; +extern const fb_data brickmania_resume[]; +extern const fb_data brickmania_sel_help[]; +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[]; + +/* normal, glue, fire */ +extern const fb_data brickmania_pads[]; + +/* +life, -life, glue, fire, normal */ +extern const fb_data brickmania_powerups[]; + +/* purple, red, blue, pink, green, yellow orange */ +extern const fb_data brickmania_bricks[]; + +/* TO DO: This needs adjusting correctly for larger than 220x176 LCDS */ +#if (LCD_WIDTH >= 220) && (LCD_HEIGHT >= 176) +#define PAD_WIDTH 40 +#define PAD_HEIGHT 5 +#define PAD_POS_Y LCD_HEIGHT - 7 +#define BRICK_HEIGHT 8 +#define BRICK_WIDTH 20 +#define BALL 5 + +#define BMPHEIGHT_help 19 +#define BMPWIDTH_help 37 + +#define BMPHEIGHT_sel_help 19 +#define BMPWIDTH_sel_help 37 + +#define BMPHEIGHT_resume 17 +#define BMPWIDTH_resume 96 + +#define BMPHEIGHT_no_resume 17 +#define BMPWIDTH_no_resume 96 + +#define BMPHEIGHT_quit 19 +#define BMPWIDTH_quit 33 + +#define BMPHEIGHT_sel_quit 19 +#define BMPWIDTH_sel_quit 33 + +#define BMPHEIGHT_sel_resume 17 +#define BMPWIDTH_sel_resume 96 + +#define BMPHEIGHT_sel_start 20 +#define BMPWIDTH_sel_start 112 + +#define BMPHEIGHT_start 20 +#define BMPWIDTH_start 112 + +#define BMPHEIGHT_powerup 6 +#define BMPWIDTH_powerup 10 + +#else +#error Unsupported LCD Size +#endif + +int levels_num = 29; + +static unsigned char levels[29][8][10] = { + { /* level1 */ + {0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1}, + {0x2,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x2}, + {0x0,0x2,0x1,0x0,0x0,0x0,0x0,0x1,0x2,0x0}, + {0x0,0x0,0x2,0x1,0x0,0x0,0x1,0x2,0x0,0x0}, + {0x0,0x0,0x0,0x2,0x1,0x1,0x2,0x0,0x0,0x0}, + {0x7,0x0,0x0,0x7,0x2,0x2,0x7,0x0,0x0,0x7}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} + }, + { /* level2 */ + {0x0,0x0,0x7,0x7,0x1,0x1,0x7,0x7,0x0,0x0}, + {0x0,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x0}, + {0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1}, + {0x1,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x1}, + {0x1,0x1,0x2,0x1,0x0,0x0,0x1,0x2,0x1,0x1}, + {0x1,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x2,0x1}, + {0x0,0x1,0x2,0x0,0x0,0x0,0x0,0x2,0x1,0x0}, + {0x0,0x0,0x1,0x2,0x2,0x2,0x2,0x1,0x0,0x0} + }, + { /* level3 */ + {0x3,0x3,0x3,0x3,0x0,0x0,0x2,0x2,0x2,0x2}, + {0x3,0x3,0x3,0x3,0x0,0x0,0x2,0x2,0x2,0x2}, + {0x3,0x3,0x3,0x3,0x0,0x0,0x2,0x2,0x2,0x2}, + {0x0,0x0,0x0,0x0,0x7,0x7,0x0,0x0,0x0,0x0}, + {0x0,0x0,0x0,0x0,0x7,0x7,0x0,0x0,0x0,0x0}, + {0x5,0x5,0x5,0x5,0x0,0x0,0x6,0x6,0x6,0x6}, + {0x5,0x5,0x5,0x5,0x0,0x0,0x6,0x6,0x6,0x6}, + {0x5,0x5,0x5,0x5,0x0,0x0,0x6,0x6,0x6,0x6} + }, + { /* level4 */ + {0x0,0x0,0x0,0x7,0x7,0x7,0x7,0x0,0x0,0x0}, + {0x0,0x0,0x0,0x7,0x7,0x7,0x7,0x0,0x0,0x0}, + {0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2}, + {0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2}, + {0x6,0x6,0x0,0x2,0x2,0x2,0x2,0x0,0x6,0x6}, + {0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0}, + {0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0}, + {0x1,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x1} + }, + { /* level5 */ + {0x1,0x0,0x2,0x2,0x0,0x3,0x3,0x0,0x4,0x4}, + {0x0,0x2,0x2,0x0,0x3,0x3,0x0,0x4,0x4,0x0}, + {0x2,0x2,0x0,0x3,0x3,0x0,0x4,0x4,0x0,0x5}, + {0x2,0x0,0x3,0x3,0x0,0x4,0x4,0x0,0x5,0x5}, + {0x0,0x3,0x3,0x0,0x4,0x4,0x0,0x5,0x5,0x0}, + {0x3,0x3,0x0,0x4,0x4,0x0,0x5,0x5,0x0,0x6}, + {0x3,0x0,0x4,0x4,0x0,0x5,0x5,0x0,0x6,0x6}, + {0x0,0x4,0x4,0x0,0x5,0x5,0x0,0x6,0x6,0x0} + }, + { /* level6 */ + {0x0,0x1,0x3,0x7,0x7,0x7,0x7,0x3,0x1,0x0}, + {0x3,0x1,0x3,0x7,0x0,0x0,0x7,0x3,0x1,0x3}, + {0x3,0x1,0x3,0x7,0x7,0x7,0x7,0x3,0x1,0x3}, + {0x0,0x0,0x0,0x2,0x2,0x2,0x2,0x0,0x0,0x0}, + {0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5}, + {0x5,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x5}, + {0x0,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x0}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} + }, + { /* level7 */ + {0x0,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x0}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x6,0x0,0x0,0x2,0x2,0x2,0x2,0x0,0x0,0x6}, + {0x6,0x0,0x0,0x2,0x2,0x2,0x2,0x0,0x0,0x6}, + {0x6,0x6,0x6,0x0,0x0,0x0,0x0,0x6,0x6,0x6}, + {0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0}, + {0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x0}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} + }, + { /* level8 */ + {0x0,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x7,0x0}, + {0x0,0x0,0x0,0x4,0x0,0x0,0x4,0x0,0x0,0x0}, + {0x6,0x6,0x0,0x2,0x2,0x2,0x2,0x0,0x6,0x6}, + {0x0,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x0}, + {0x0,0x6,0x6,0x0,0x0,0x0,0x0,0x6,0x6,0x0}, + {0x0,0x0,0x0,0x5,0x5,0x5,0x5,0x0,0x0,0x0}, + {0x0,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x0}, + {0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5} + }, + { /* level9 */ + {0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2}, + {0x2,0x3,0x0,0x0,0x0,0x0,0x0,0x0,0x3,0x2}, + {0x2,0x0,0x3,0x0,0x1,0x1,0x0,0x3,0x0,0x2}, + {0x2,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x2}, + {0x2,0x0,0x1,0x0,0x3,0x3,0x0,0x1,0x0,0x2}, + {0x2,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x2}, + {0x2,0x2,0x0,0x0,0x1,0x1,0x0,0x0,0x2,0x2}, + {0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2} + }, + { /* level10 */ + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x0,0x5,0x0,0x5,0x0,0x5,0x0,0x5,0x0,0x5}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x0,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x0}, + {0x0,0x0,0x0,0x4,0x1,0x1,0x4,0x0,0x0,0x0}, + {0x0,0x0,0x3,0x4,0x1,0x1,0x4,0x3,0x0,0x0}, + {0x0,0x2,0x3,0x4,0x1,0x1,0x4,0x3,0x2,0x0}, + {0x1,0x2,0x3,0x4,0x1,0x1,0x4,0x3,0x2,0x1} + }, + { /* level11 */ + {0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3}, + {0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x3,0x2}, + {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2}, + {0x2,0x0,0x0,0x0,0x7,0x7,0x0,0x0,0x0,0x2}, + {0x2,0x0,0x0,0x7,0x7,0x7,0x7,0x0,0x0,0x2}, + {0x0,0x0,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x0}, + {0x0,0x2,0x0,0x1,0x0,0x0,0x1,0x0,0x2,0x0}, + {0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5} + }, + { /* level 12 */ + {0x2,0x1,0x3,0x1,0x0,0x0,0x1,0x3,0x1,0x2}, + {0x1,0x1,0x1,0x1,0x0,0x0,0x1,0x1,0x1,0x1}, + {0x1,0x1,0x1,0x0,0x1,0x1,0x0,0x1,0x1,0x1}, + {0x0,0x1,0x0,0x1,0x6,0x6,0x1,0x0,0x1,0x0}, + {0x0,0x0,0x1,0x1,0x6,0x6,0x1,0x1,0x0,0x0}, + {0x1,0x1,0x1,0x7,0x0,0x0,0x7,0x1,0x1,0x1}, + {0x1,0x1,0x7,0x1,0x0,0x0,0x1,0x7,0x1,0x1}, + {0x2,0x2,0x0,0x2,0x2,0x2,0x2,0x0,0x2,0x2} + }, + {/* levell13 */ + {0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2}, + {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2}, + {0x2,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x2}, + {0x2,0x0,0x2,0x3,0x3,0x3,0x3,0x3,0x0,0x2}, + {0x2,0x0,0x2,0x4,0x4,0x4,0x4,0x4,0x0,0x2}, + {0x2,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2}, + {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2} + }, + {/* level14 */ + {0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1}, + {0x4,0x4,0x4,0x4,0x2,0x2,0x4,0x4,0x4,0x4}, + {0x4,0x0,0x0,0x0,0x2,0x2,0x0,0x0,0x0,0x4}, + {0x4,0x0,0x0,0x2,0x3,0x3,0x2,0x0,0x0,0x4}, + {0x4,0x0,0x2,0x3,0x3,0x3,0x3,0x2,0x0,0x4}, + {0x4,0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x0,0x4}, + {0x4,0x0,0x6,0x1,0x5,0x5,0x1,0x6,0x0,0x4}, + {0x4,0x6,0x1,0x1,0x5,0x5,0x1,0x1,0x6,0x4} + }, + {/* level 15 */ + {0x4,0x4,0x4,0x4,0x4,0x3,0x3,0x3,0x3,0x3}, + {0x2,0x2,0x1,0x1,0x1,0x1,0x1,0x5,0x0,0x0}, + {0x2,0x2,0x1,0x1,0x1,0x0,0x1,0x6,0x0,0x0}, + {0x2,0x1,0x1,0x2,0x1,0x1,0x1,0x5,0x0,0x0}, + {0x2,0x1,0x2,0x2,0x2,0x1,0x1,0x6,0x0,0x0}, + {0x2,0x1,0x2,0x2,0x2,0x1,0x3,0x5,0x3,0x0}, + {0x2,0x1,0x1,0x2,0x1,0x1,0x1,0x6,0x0,0x0}, + {0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2} + }, + {/* level 16 (Rockbox) by ts-x */ + {0x2,0x2,0x3,0x3,0x3,0x4,0x4,0x5,0x0,0x5}, + {0x2,0x0,0x3,0x0,0x3,0x4,0x0,0x5,0x5,0x0}, + {0x2,0x0,0x3,0x3,0x3,0x4,0x4,0x5,0x0,0x5}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x6,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x7,0x7,0x7,0x1,0x1,0x1,0x2,0x0,0x2,0x0}, + {0x7,0x0,0x7,0x1,0x0,0x1,0x0,0x2,0x0,0x0}, + {0x7,0x7,0x7,0x1,0x1,0x1,0x2,0x0,0x2,0x0} + }, + {/* level 17 (Alien) by ts-x */ + {0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1}, + {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x2}, + {0x1,0x0,0x0,0x0,0x1,0x1,0x0,0x0,0x0,0x1}, + {0x2,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x2}, + {0x1,0x0,0x1,0x2,0x2,0x2,0x2,0x1,0x0,0x1}, + {0x2,0x0,0x0,0x1,0x2,0x2,0x1,0x0,0x0,0x2}, + {0x2,0x1,0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x2}, + {0x2,0x2,0x1,0x0,0x1,0x1,0x0,0x1,0x2,0x2} + }, + {/* level 18 (Tetris) by ts-x */ + {0x0,0x2,0x0,0x0,0x3,0x4,0x0,0x2,0x2,0x0}, + {0x0,0x2,0x7,0x0,0x3,0x4,0x0,0x2,0x2,0x0}, + {0x2,0x2,0x7,0x0,0x3,0x4,0x0,0x6,0x2,0x2}, + {0x2,0x2,0x7,0x7,0x3,0x4,0x0,0x6,0x2,0x2}, + {0x2,0x1,0x7,0x7,0x3,0x4,0x4,0x6,0x5,0x5}, + {0x2,0x1,0x0,0x7,0x3,0x4,0x4,0x6,0x5,0x5}, + {0x1,0x1,0x1,0x7,0x3,0x0,0x6,0x6,0x5,0x5}, + {0x1,0x1,0x1,0x0,0x3,0x0,0x6,0x6,0x5,0x5} + }, + { /* level 19 (Stalactites) by ts-x */ + {0x5,0x2,0x6,0x3,0x4,0x7,0x5,0x3,0x1,0x2}, + {0x5,0x2,0x6,0x3,0x4,0x7,0x5,0x3,0x1,0x2}, + {0x5,0x0,0x6,0x3,0x4,0x7,0x5,0x0,0x1,0x2}, + {0x5,0x2,0x6,0x3,0x4,0x0,0x5,0x3,0x1,0x2}, + {0x5,0x0,0x6,0x0,0x4,0x7,0x5,0x0,0x1,0x0}, + {0x5,0x0,0x0,0x3,0x4,0x0,0x0,0x0,0x1,0x2}, + {0x0,0x0,0x6,0x0,0x0,0x0,0x5,0x0,0x0,0x0}, + {0x5,0x0,0x0,0x0,0x4,0x0,0x0,0x0,0x1,0x0} + }, + { /* level 20 (Maze) by ts-x */ + {0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1}, + {0x1,0x0,0x0,0x3,0x0,0x0,0x3,0x1,0x1,0x1}, + {0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x1,0x0,0x1}, + {0x1,0x0,0x1,0x3,0x0,0x3,0x0,0x3,0x0,0x2}, + {0x1,0x0,0x1,0x1,0x0,0x1,0x0,0x0,0x0,0x0}, + {0x1,0x0,0x1,0x0,0x0,0x1,0x0,0x0,0x3,0x0}, + {0x1,0x0,0x1,0x0,0x1,0x1,0x1,0x1,0x1,0x2}, + {0x2,0x0,0x2,0x1,0x1,0x1,0x1,0x1,0x1,0x1} + }, + { /* level 21 (Dentist) by ts-x */ + {0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0}, + {0x2,0x2,0x0,0x6,0x0,0x6,0x0,0x6,0x2,0x2}, + {0x2,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x2}, + {0x2,0x0,0x0,0x0,0x0,0x0,0x0,0x6,0x0,0x2}, + {0x2,0x0,0x6,0x0,0x6,0x0,0x0,0x0,0x0,0x2}, + {0x2,0x0,0x6,0x0,0x6,0x0,0x6,0x0,0x6,0x2}, + {0x2,0x2,0x6,0x0,0x6,0x0,0x6,0x0,0x2,0x2}, + {0x0,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x2,0x0} + }, + { /* level 22 (Spider) by ts-x */ + {0x1,0x3,0x1,0x1,0x0,0x0,0x1,0x1,0x3,0x1}, + {0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0}, + {0x3,0x1,0x1,0x6,0x1,0x1,0x6,0x1,0x1,0x3}, + {0x0,0x0,0x1,0x1,0x1,0x1,0x1,0x1,0x0,0x0}, + {0x0,0x0,0x1,0x1,0x0,0x0,0x1,0x1,0x0,0x0}, + {0x1,0x3,0x1,0x1,0x2,0x2,0x1,0x1,0x3,0x1}, + {0x0,0x0,0x0,0x1,0x1,0x1,0x1,0x0,0x0,0x0}, + {0x3,0x1,0x3,0x1,0x0,0x0,0x1,0x3,0x1,0x3} + }, + { /* level 23 (Pool) by ts-x */ + {0x0,0x7,0x7,0x7,0x0,0x7,0x7,0x7,0x7,0x0}, + {0x0,0x0,0x5,0x0,0x2,0x0,0x0,0x0,0x2,0x0}, + {0x7,0x3,0x0,0x0,0x0,0x1,0x0,0x0,0x0,0x7}, + {0x7,0x0,0x0,0x0,0x0,0x0,0x0,0x5,0x0,0x7}, + {0x7,0x0,0x4,0x0,0x0,0x3,0x0,0x0,0x0,0x7}, + {0x7,0x0,0x0,0x6,0x0,0x0,0x0,0x0,0x4,0x7}, + {0x0,0x0,0x1,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x0,0x7,0x7,0x7,0x7,0x0,0x7,0x7,0x7,0x0} + }, + { /* level 24 (Vorbis Fish) by ts-x */ + {0x0,0x0,0x4,0x4,0x5,0x5,0x5,0x0,0x0,0x5}, + {0x0,0x4,0x6,0x4,0x4,0x5,0x5,0x5,0x0,0x5}, + {0x5,0x6,0x0,0x6,0x4,0x4,0x4,0x5,0x5,0x5}, + {0x5,0x6,0x0,0x6,0x4,0x4,0x4,0x4,0x5,0x5}, + {0x0,0x5,0x6,0x4,0x4,0x5,0x5,0x4,0x5,0x0}, + {0x5,0x5,0x4,0x4,0x5,0x5,0x5,0x4,0x5,0x5}, + {0x5,0x4,0x4,0x4,0x5,0x5,0x4,0x4,0x5,0x5}, + {0x0,0x0,0x4,0x4,0x4,0x4,0x4,0x5,0x0,0x5} + }, + {/* level 25 (Rainbow) by ts-x */ + {0x0,0x4,0x1,0x0,0x0,0x0,0x0,0x1,0x4,0x0}, + {0x4,0x1,0x3,0x1,0x0,0x0,0x1,0x3,0x1,0x4}, + {0x1,0x3,0x5,0x3,0x1,0x1,0x3,0x5,0x3,0x1}, + {0x3,0x5,0x6,0x5,0x3,0x3,0x5,0x6,0x5,0x3}, + {0x5,0x6,0x7,0x6,0x5,0x5,0x6,0x7,0x6,0x5}, + {0x6,0x7,0x2,0x7,0x6,0x6,0x7,0x2,0x7,0x6}, + {0x7,0x2,0x0,0x2,0x7,0x7,0x2,0x0,0x2,0x7}, + {0x2,0x0,0x0,0x0,0x2,0x2,0x0,0x0,0x0,0x2} + }, + { /* level 26 (Bowtie) by ts-x */ + {0x5,0x1,0x5,0x1,0x0,0x0,0x1,0x5,0x1,0x5}, + {0x1,0x0,0x0,0x1,0x5,0x5,0x1,0x0,0x0,0x1}, + {0x5,0x0,0x6,0x0,0x1,0x1,0x0,0x6,0x0,0x5}, + {0x1,0x0,0x6,0x6,0x0,0x0,0x6,0x6,0x0,0x1}, + {0x1,0x0,0x6,0x6,0x0,0x0,0x6,0x6,0x0,0x1}, + {0x5,0x0,0x6,0x0,0x1,0x1,0x0,0x6,0x0,0x5}, + {0x1,0x0,0x0,0x1,0x5,0x5,0x1,0x0,0x0,0x1}, + {0x5,0x1,0x5,0x1,0x0,0x0,0x1,0x5,0x1,0x5} + }, + { /* level 27 (Frog) by ts-x */ + {0x0,0x5,0x5,0x0,0x0,0x0,0x0,0x5,0x5,0x0}, + {0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5,0x5}, + {0x5,0x0,0x0,0x5,0x6,0x6,0x5,0x0,0x0,0x5}, + {0x5,0x0,0x3,0x0,0x6,0x6,0x0,0x3,0x0,0x5}, + {0x5,0x0,0x1,0x0,0x6,0x6,0x0,0x1,0x0,0x5}, + {0x5,0x0,0x0,0x5,0x6,0x6,0x5,0x0,0x0,0x5}, + {0x5,0x5,0x5,0x5,0x0,0x0,0x5,0x5,0x5,0x5}, + {0x0,0x5,0x5,0x0,0x4,0x4,0x0,0x5,0x5,0x0} + }, + { /* level 28 (DigDug) by ts-x */ + {0x5,0x5,0x5,0x5,0x0,0x5,0x5,0x5,0x5,0x5}, + {0x6,0x0,0x0,0x6,0x0,0x6,0x6,0x0,0x0,0x6}, + {0x7,0x0,0x7,0x7,0x0,0x7,0x7,0x7,0x0,0x7}, + {0x7,0x0,0x7,0x0,0x0,0x0,0x7,0x7,0x7,0x7}, + {0x4,0x4,0x4,0x4,0x0,0x4,0x4,0x0,0x0,0x4}, + {0x4,0x4,0x0,0x0,0x0,0x4,0x4,0x0,0x4,0x4}, + {0x4,0x4,0x4,0x4,0x4,0x4,0x0,0x0,0x4,0x4}, + {0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1,0x1} + }, + { /* TheEnd */ + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0}, + {0x2,0x2,0x6,0x0,0x0,0x6,0x4,0x4,0x0,0x0}, + {0x2,0x0,0x6,0x6,0x0,0x6,0x4,0x0,0x4,0x0}, + {0x2,0x2,0x6,0x6,0x0,0x6,0x4,0x0,0x4,0x0}, + {0x2,0x2,0x6,0x0,0x6,0x6,0x4,0x0,0x4,0x0}, + {0x2,0x0,0x6,0x0,0x6,0x6,0x4,0x0,0x4,0x0}, + {0x2,0x2,0x6,0x0,0x0,0x6,0x4,0x4,0x0,0x0}, + {0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0,0x0} + } +}; + +int pad_pos_x,x,y; +int ball_pos_x; +int ball_pos_y; +int bally,balltempy; +int ballx,balltempx; +int life; +int start_game,con_game; +int pad_type; +int on_the_pad=0; /* for glue pad */ +int score=0,vscore=0; + +int cur_level=0; +int brick_on_board=0; + +typedef struct cube { + int powertop; + int power; + char poweruse; + char used; + int color; +} cube; +cube brick[80]; + + + +typedef struct sfire { + int top; + int left; +} sfire; +sfire fire[30]; + + +int highscore; +#define MAX_POINTS 200000 /* i dont think it needs to be more */ +static struct configdata config[] = +{ + {TYPE_INT, 0, MAX_POINTS, &highscore, "highscore", NULL, NULL} +}; + + +void int_game(int new_game) +{ + int i,j; + ballx=0; + bally=0; + pad_pos_x=LCD_WIDTH/2-PAD_WIDTH/2; + ball_pos_y=PAD_POS_Y-BALL; + ball_pos_x=pad_pos_x+(PAD_WIDTH/2)-2; + start_game =1; + con_game =0; + pad_type=0; + on_the_pad=0; + balltempy=0; + balltempx=0; + if (new_game==1) + brick_on_board=0; + + for(i=0;i<=7;i++){ + for(j=0;j<=9;j++){ + brick[i*10+j].poweruse=(levels[cur_level][i][j]==0?0:1); + if (i*10+j<=30) fire[i*10+j].top=-8; + if (new_game==1) { + + brick[i*10+j].power=rb->rand()%17; + + 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]-1; + if (levels[cur_level][i][j]!=0) brick_on_board++; + } + } + } + + +} + + +#define HIGH_SCORE "highscore.cfg" + +#define MENU_LENGTH 4 +int sw,i,w; + +int game_menu(int when) +{ + int button,cur=0; + char str[10]; + + rb->lcd_clear_display(); + rb->lcd_bitmap(brickmania_menu_bg,0,0,220,176); + while (true) { + for(i=0;ilcd_bitmap(brickmania_sel_start,55,78, + BMPWIDTH_sel_start,BMPHEIGHT_sel_start); + else + rb->lcd_bitmap(brickmania_start,55,78, + BMPWIDTH_start,BMPHEIGHT_start); + + if (when==1) { + if (cur==1) + rb->lcd_bitmap(brickmania_sel_resume,62,100, + BMPWIDTH_sel_resume,BMPHEIGHT_sel_resume); + else + rb->lcd_bitmap(brickmania_resume,62,100, + BMPWIDTH_resume,BMPHEIGHT_resume); + + } else { + rb->lcd_bitmap(brickmania_no_resume,62,100, + BMPWIDTH_no_resume,BMPHEIGHT_no_resume); + } + + + if (cur==2) + rb->lcd_bitmap(brickmania_sel_help,92,118, + BMPWIDTH_sel_help,BMPHEIGHT_sel_help); + else + rb->lcd_bitmap(brickmania_help,92,118, + BMPWIDTH_help,BMPHEIGHT_help); + + + if (cur==3) + rb->lcd_bitmap(brickmania_sel_quit,93,138, + BMPWIDTH_sel_quit,BMPHEIGHT_sel_quit); + else + rb->lcd_bitmap(brickmania_quit,93,138, + BMPWIDTH_quit,BMPHEIGHT_quit); + } + + /* high score */ + rb->lcd_setfont(FONT_SYSFIXED); + rb->lcd_set_background(LCD_RGBPACK(0,0,140)); + rb->lcd_set_foreground(LCD_WHITE); + rb->lcd_putsxy(7, 56, "High Score"); + rb->snprintf(str, sizeof(str), "%d", highscore); + rb->lcd_getstringsize("High Score", &sw, NULL); + rb->lcd_getstringsize(str, &w, NULL); + rb->lcd_putsxy(7+sw/2-w/2, 65, str); + rb->lcd_setfont(FONT_UI); + + rb->lcd_update(); + + button = rb->button_get(true); + switch(button){ + case UP: + if (cur==0) + cur = MENU_LENGTH-1; + else + cur--; + if (when==0 && cur==1) { + cur = 0; + }; + break; + + case DOWN: + if (cur==MENU_LENGTH-1) + cur = 0; + else + cur++; + if (when==0 && cur==1) { + cur=2; + }; + break; + + case SELECT: + if (cur==0) { + score=0; + vscore=0; + return 0; + } else if (cur==1 && when==1) { + return 1; + } else if (cur==2) { + return 2; + } else if (cur==3) { + return 3; + } + break; + case QUIT: + return 3; + break; + } + } +} + +int help(int when) +{ + int w,h; + int button; + + while(true){ + rb->lcd_setfont(FONT_SYSFIXED); + rb->lcd_set_background(LCD_BLACK); + rb->lcd_clear_display(); + rb->lcd_set_background(LCD_BLACK); + rb->lcd_set_foreground(LCD_WHITE); + + rb->lcd_getstringsize("BrickMania", &w, &h); + rb->lcd_putsxy(LCD_WIDTH/2-w/2, 1, "BrickMania"); + + rb->lcd_set_foreground(LCD_RGBPACK(245,0,0)); + rb->lcd_putsxy(1, 1*(h+2),"Aim"); + rb->lcd_set_foreground(LCD_WHITE); + rb->lcd_putsxy(1, 2*(h+2),"destroy all the bricks by bouncing"); + rb->lcd_putsxy(1, 3*(h+2),"the ball of them using the paddle."); + + rb->lcd_set_foreground(LCD_RGBPACK(245,0,0)); + rb->lcd_putsxy(1, 5*(h+2),"Controls"); + rb->lcd_set_foreground(LCD_WHITE); + rb->lcd_putsxy(1, 6*(h+2),"< & > Move the paddle"); + rb->lcd_putsxy(1, 7*(h+2),"NAVI Releases the ball/Fire!"); + rb->lcd_putsxy(1, 8*(h+2),"STOP Opens menu/Quit"); + + rb->lcd_set_foreground(LCD_RGBPACK(245,0,0)); + rb->lcd_putsxy(1, 10*(h+2),"Specials"); + rb->lcd_set_foreground(LCD_WHITE); + rb->lcd_putsxy(1, 11*(h+2),"N Normal:returns paddle to normal"); + rb->lcd_putsxy(1, 12*(h+2),"D DIE!:loses a life"); + rb->lcd_putsxy(1, 13*(h+2),"L Life:gains a life/power up"); + rb->lcd_putsxy(1, 14*(h+2),"F Fire:allows you to shoot bricks"); + rb->lcd_putsxy(1, 15*(h+2),"G Glue:ball sticks to paddle"); + rb->lcd_update(); + + button=rb->button_get(true); + switch (button) { + case QUIT: + rb->lcd_setfont(FONT_UI); + switch (game_menu(when)) { + case 0: + cur_level=0; + life=2; + int_game(1); + break; + case 1: + con_game=1; + break; + case 2: + if (help(when)==1) return 1; + break; + case 3: + return 1; + break; + } + return NULL; + break; + } + } + return NULL; +} + +int pad_check(int ballxc,int mode,int pon) +{ + /* pon: positive(1) or negative(0) */ + + if (mode==0) { + if (pon == 0) + return -ballxc; + else + return ballxc; + } else { + if (ballx > 0) + return ballxc; + else + return ballxc*-1; + } +} + +int fire_space(void) +{ + int t; + for(t=0;t<=30;t++) + if (fire[t].top+7 < 0) + return t; + + return NULL; +} + +int dxball_game(void){ + int j,i,k,bricky,brickx; + char s[20]; + + rb->srand( *rb->current_tick ); + + configfile_init(rb); + configfile_load(HIGH_SCORE,config,1,0); + + switch(game_menu(0)){ + case 0: + cur_level = 0; + life = 2; + int_game(1); + break; + case 1: + con_game = 1; + break; + case 2: + if (help(0) == 1) return 1; + break; + case 3: + return 1; + break; + } + + while(true) { + if (life >= 0) { + rb->lcd_set_background(LCD_BLACK); + rb->lcd_set_drawmode(DRMODE_SOLID); + rb->lcd_clear_display(); + rb->lcd_set_background(LCD_BLACK); + + /* write life num */ + rb->lcd_set_foreground(LCD_WHITE); + rb->snprintf(s, sizeof(s), "Life: %d", life); + rb->lcd_putsxy(2, 2, s); + + rb->snprintf(s, sizeof(s), "Level %d", cur_level+1); + rb->lcd_getstringsize(s, &sw, NULL); + rb->lcd_putsxy(LCD_WIDTH-sw-2, 2, s); + + + if (vscoresnprintf(s, sizeof(s), "%d", vscore); + rb->lcd_getstringsize(s, &sw, NULL); + rb->lcd_putsxy(LCD_WIDTH/2-sw/2, 2, s); + + /* continue game */ + if (con_game== 1 && start_game!=1) { + rb->lcd_getstringsize("Press NAVI To Continue", &sw, NULL); + rb->lcd_putsxy(LCD_WIDTH/2-sw/2, 150, "Press NAVI to continue"); + } + + /* draw the ball */ + rb->lcd_bitmap(brickmania_ball,ball_pos_x, ball_pos_y, BALL, BALL); + + if (brick_on_board==0) brick_on_board--; + + /* if the pad is fire */ + for(i=0;i<=30;i++) { + if (fire[i].top+7>0) { + if (con_game!=1) + fire[i].top-=4; + rb->lcd_vline(fire[i].left, fire[i].top, fire[i].top+7); + } + } + + /* the bricks */ + for (i=0;i<=7;i++) { + for (j=0;j<=9;j++) { + if (brick[i*10+j].power<5) { + if (brick[i*10+j].poweruse==2) { + if (con_game!=1) + 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, + 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) { + switch(brick[i*10+j].power) { + case 0: + life++; + score+=50; + break; + case 1: + life--; + if (life>=0) { + int_game(0); + rb->sleep(HZ*2); + } + break; + case 2: + score+=34; + pad_type=1; + break; + case 3: + score+=47; + pad_type=2; + on_the_pad=0; + break; + case 4: + score+=23; + pad_type=0; + on_the_pad=0; + break; + } + brick[i*10+j].poweruse=1; + } + + if (brick[i*10+j].powertop>PAD_POS_Y) + brick[i*10+j].poweruse=1; + + brickx=10+j*BRICK_WIDTH; + bricky=30+i*8; + if (pad_type==2) { + for (k=0;k<=30;k++) { + if (fire[k].top+7>0) { + if (brick[i*10+j].used==1 && (fire[k].left+1 >= brickx && fire[k].left+1 <= brickx+BRICK_WIDTH) && (bricky+BRICK_HEIGHT>fire[k].top)){ + score+=13; + fire[k].top=-16; + brick[i*10+j].used=0; + if (brick[i*10+j].power!=10) brick[i*10+j].poweruse=2; + brick_on_board--; + } + } + } + } + + 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 (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)){ + balltempy=bricky-ball_pos_y-BALL; + } else if ((ball_pos_x+ballx+3 >= brickx && ball_pos_x+ballx+3 <= brickx+BRICK_WIDTH) && ((bricky+BRICK_HEIGHT+4>ball_pos_y && bricky+BRICK_HEIGHTball_pos_y-BALL)) && (bally <0)){ + balltempy=-(ball_pos_y-(bricky+BRICK_HEIGHT)); + } + + if ((ball_pos_y+3 >= bricky && ball_pos_y+3 <= bricky+BRICK_HEIGHT) && ((brickx-4ball_pos_x+BALL) || (brickx+4>ball_pos_x+BALL+BALL && brickx0)) { + balltempx=brickx-ball_pos_x-BALL; + } else if ((ball_pos_y+bally+3 >= bricky && ball_pos_y+bally+3 <= bricky+BRICK_HEIGHT) && ((brickx+BRICK_WIDTH+4>ball_pos_x && brickx+BRICK_WIDTHball_pos_x-BALL)) && (ballx <0)) { + balltempx=-(ball_pos_x-(brickx+BRICK_WIDTH)); + } + + 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 */ + brick[i*10+j].used=0; + bally = bally*-1; + if (brick[i*10+j].power!=10) { + brick[i*10+j].poweruse=2; + } + } 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 */ + brick[i*10+j].used=0; + bally = bally*-1; + if (brick[i*10+j].power!=10) + brick[i*10+j].poweruse=2; + } + + 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 */ + brick[i*10+j].used=0; + ballx = ballx*-1; + if (brick[i*10+j].power!=10) + brick[i*10+j].poweruse=2; + } 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 */ + brick[i*10+j].used=0; + ballx = ballx*-1; + if (brick[i*10+j].power!=10) + brick[i*10+j].poweruse=2; + } + + if (brick[i*10+j].used==0){ + brick_on_board--; + score+=8; + } + } + } + } + } + + /* draw the pad */ + rb->lcd_bitmap_part(brickmania_pads,0,pad_type*PAD_HEIGHT,PAD_WIDTH,pad_pos_x, PAD_POS_Y, PAD_WIDTH, PAD_HEIGHT); + + if ((ball_pos_x >= pad_pos_x && ball_pos_x <= pad_pos_x+PAD_WIDTH) && (PAD_POS_Y-4ball_pos_y+BALL) && (bally >0)) + balltempy=PAD_POS_Y-ball_pos_y-BALL; + else if ((4>ball_pos_y && 0ball_pos_x+BALL) && (ballx >0)) + balltempx=LCD_WIDTH-ball_pos_x-BALL; + else if ((4>ball_pos_x && 0= LCD_HEIGHT) { + life--; + if (life>=0){ + int_game(0); + rb->sleep(HZ*2); + } + } + + /* left line ,right line */ + if ((ball_pos_x <= 0) || (ball_pos_x+BALL >= LCD_WIDTH)) + ballx = ballx*-1; + + if ((ball_pos_y+5 >= PAD_POS_Y && (ball_pos_x >= pad_pos_x && ball_pos_x <= pad_pos_x+PAD_WIDTH)) && + start_game != 1 && on_the_pad==0) { + if ((ball_pos_x+3 >= pad_pos_x && ball_pos_x+3 <= pad_pos_x+5) || (ball_pos_x +2>= pad_pos_x+35 && ball_pos_x+2 <= pad_pos_x+40)) { + bally = 2*-1; + if (ball_pos_x != 0 && ball_pos_x+BALL!=LCD_WIDTH) + ballx = pad_check(6,0,ball_pos_x+2<=pad_pos_x+(PAD_WIDTH/2)?0:1); + } else if ((ball_pos_x+3 >= pad_pos_x+5 && ball_pos_x+3 <= pad_pos_x+10) || (ball_pos_x+2 >= pad_pos_x+30 && ball_pos_x+2 <= pad_pos_x+35)) { + bally = 3*-1; + + if (ball_pos_x != 0 && ball_pos_x+BALL!=LCD_WIDTH) + ballx = pad_check(4,0,ball_pos_x+2<=pad_pos_x+(PAD_WIDTH/2)?0:1); + } else if ((ball_pos_x+3 >= pad_pos_x+10 && ball_pos_x+3 <= pad_pos_x+15) || (ball_pos_x+2 >= pad_pos_x+25 && ball_pos_x+2 <= pad_pos_x+30)) { + bally = 4*-1; + + if (ball_pos_x != 0 && ball_pos_x+BALL!=LCD_WIDTH) + ballx = pad_check(3,0,ball_pos_x+2<=pad_pos_x+(PAD_WIDTH/2)?0:1); + } else if ((ball_pos_x+3 >= pad_pos_x+13 && ball_pos_x+3 <= pad_pos_x+18) || (ball_pos_x+2 >= pad_pos_x+22 && ball_pos_x+2 <= pad_pos_x+25)) { + bally = 4*-1; + if (ball_pos_x != 0 && ball_pos_x+BALL!=LCD_WIDTH) + ballx = pad_check(2,1,NULL); + } else { + bally = 4*-1; + } + } + + if (on_the_pad!=1) { + ball_pos_x+=balltempx!=0?balltempx:ballx; + ball_pos_y+=balltempy!=0?balltempy:bally; + + balltempy=0; + balltempx=0; + } + + if (ball_pos_y+5 >= PAD_POS_Y && (pad_type==1 && on_the_pad==0) && + (ball_pos_x >= pad_pos_x && ball_pos_x <= pad_pos_x+PAD_WIDTH)){ + bally=0; + on_the_pad=1; + } + + rb->lcd_update(); + + if (brick_on_board < 0) { + if (cur_level+1sleep(HZ * 2); + cur_level++; + score+=100; + int_game(1); + } else { + rb->lcd_getstringsize("Congratulations!", &sw, NULL); + rb->lcd_putsxy(LCD_WIDTH/2-sw/2, 140, "Congratulations!"); + rb->lcd_getstringsize("You have finished the game!", &sw, NULL); + rb->lcd_putsxy(LCD_WIDTH/2-sw/2, 157, "You have finished the game!"); + vscore=score; + rb->lcd_update(); + if (score>highscore) { + rb->sleep(HZ*2); + highscore=score; + rb->splash(HZ*2,true,"New High Score"); + } else { + rb->sleep(HZ * 4); + } + + switch(game_menu(0)){ + case 0: + life=2; + cur_level=0; + int_game(1); + break; + case 1: + con_game=1; + break; + case 2: + if (help(0)==1) return 1; + break; + case 3: + return 1; + break; + }; + } + } + + int move_button,button; + int time = 3; /* number of ticks this function will loop reading keys */ + int start = *rb->current_tick; + int end = start + time; + button=rb->button_get_w_tmo(end - *rb->current_tick); + move_button=rb->button_status(); + + if (move_button & RIGHT) { + if (pad_pos_x+8+PAD_WIDTH > LCD_WIDTH) { + if (start_game==1 || on_the_pad==1) ball_pos_x+=LCD_WIDTH-pad_pos_x-PAD_WIDTH; + pad_pos_x+=LCD_WIDTH-pad_pos_x-PAD_WIDTH; + } else { + if ((start_game==1 || on_the_pad==1)) + ball_pos_x+=8; + pad_pos_x+=8; + } + } else if (move_button & LEFT) { + if (pad_pos_x-8 < 0) { + if (start_game==1 || on_the_pad==1) ball_pos_x-=pad_pos_x; + pad_pos_x-=pad_pos_x; + } else { + if (start_game==1 || on_the_pad==1) ball_pos_x-=8; + pad_pos_x-=8; + } + } + + + switch(button){ + case SELECT: + if (start_game==1 && con_game!=1 && pad_type!=1) { + bally=-4; + ballx=pad_pos_x+(PAD_WIDTH/2)-2>=LCD_WIDTH/2?2:-2; + start_game =0; + } else if (pad_type==1 && on_the_pad==1) { + on_the_pad=0; + if (start_game!=1 && con_game==1) { + start_game =0; + con_game=0; + } + } else if (pad_type==2 && con_game!=1) { + int tfire; + tfire=fire_space(); + fire[tfire].top=PAD_POS_Y-7; + fire[tfire].left=pad_pos_x+1; + tfire=fire_space(); + fire[tfire].top=PAD_POS_Y-7; + fire[tfire].left=pad_pos_x+PAD_WIDTH-1; + } else if (con_game==1 && start_game!=1) { + ballx=x; + bally=y; + con_game=0; + } + break; + case QUIT: + switch(game_menu(1)){ + case 0: + life=2; + cur_level=0; + int_game(1); + break; + case 1: + if (ballx!=0 && bally !=0) + con_game=1; + break; + case 2: + if (help(1)==1) return 1; + break; + case 3: + return 1; + break; + }; + if (ballx!=0) x=ballx; + ballx=0; + if (bally!=0) y=bally; + bally=0; + break; + } + } else { + rb->lcd_bitmap(brickmania_gameover,LCD_WIDTH/2-55,LCD_HEIGHT-87,110,52); + rb->lcd_update(); + if (score>highscore) { + rb->sleep(HZ*2); + highscore=score; + rb->splash(HZ*2,true,"New High Score"); + } else { + rb->sleep(HZ * 3); + } + + ballx=0; + bally=0; + + switch(game_menu(0)){ + case 0: + cur_level=0; + life=2; + int_game(1); + break; + case 1: + con_game=1; + break; + case 2: + if (help(0)==1) return 1; + break; + case 3: + return 1; + break; + } + } + } +} + +/* this is the plugin entry point */ +enum plugin_status plugin_start(struct plugin_api* api, void* parameter) +{ + (void)parameter; + rb = api; +#if !defined(SIMULATOR) && defined(HAVE_ADJUSTABLE_CPU_FREQ) + rb->cpu_boost(true); +#endif + + bally=0; + ballx=0; + + rb->backlight_set_timeout(1); + + /* now go ahead and have fun! */ + while (dxball_game()!=1); + + configfile_save(HIGH_SCORE,config,1,0); + + rb->backlight_set_timeout(15); + +#if !defined(SIMULATOR) && defined(HAVE_ADJUSTABLE_CPU_FREQ) + rb->cpu_boost(false); +#endif + + return PLUGIN_OK; +}