summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/SOURCES4
-rw-r--r--apps/plugins/bitmaps/native/SOURCES20
-rw-r--r--apps/plugins/bitmaps/native/brickmania_ball.220x176x16.bmpbin0 -> 134 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_bricks.220x176x16.bmpbin0 -> 3414 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_gameover.220x176x16.bmpbin0 -> 17318 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_help.220x176x16.bmpbin0 -> 2182 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_menu_bg.220x176x16.bmpbin0 -> 116216 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_no_resume.220x176x16.bmpbin0 -> 4950 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_pads.220x176x16.bmpbin0 -> 1854 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_powerups.220x176x16.bmpbin0 -> 1014 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_quit.220x176x16.bmpbin0 -> 1954 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_resume.220x176x16.bmpbin0 -> 4950 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_sel_help.220x176x16.bmpbin0 -> 2182 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_sel_quit.220x176x16.bmpbin0 -> 1954 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_sel_resume.220x176x16.bmpbin0 -> 4950 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_sel_start.220x176x16.bmpbin0 -> 6774 bytes
-rw-r--r--apps/plugins/bitmaps/native/brickmania_start.220x176x16.bmpbin0 -> 6774 bytes
-rw-r--r--apps/plugins/brickmania.c1113
18 files changed, 1137 insertions, 0 deletions
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES
index 98ffcc2..0b9f68b 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 140df73..ecd8334 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 0000000..97da97f
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_ball.220x176x16.bmp
Binary files differ
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 0000000..1cf951b
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_bricks.220x176x16.bmp
Binary files differ
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 0000000..d004433
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_gameover.220x176x16.bmp
Binary files differ
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 0000000..4798886
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_help.220x176x16.bmp
Binary files differ
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 0000000..f5765b8
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_menu_bg.220x176x16.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/brickmania_no_resume.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_no_resume.220x176x16.bmp
new file mode 100644
index 0000000..81b3cf8
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_no_resume.220x176x16.bmp
Binary files differ
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 0000000..5bd1e5d
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_pads.220x176x16.bmp
Binary files differ
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 0000000..aadd370
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_powerups.220x176x16.bmp
Binary files differ
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 0000000..2626505
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_quit.220x176x16.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/brickmania_resume.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_resume.220x176x16.bmp
new file mode 100644
index 0000000..fd8753f
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_resume.220x176x16.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/brickmania_sel_help.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_sel_help.220x176x16.bmp
new file mode 100644
index 0000000..c738b1f
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_sel_help.220x176x16.bmp
Binary files differ
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 0000000..58ee4a3
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_sel_quit.220x176x16.bmp
Binary files differ
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 0000000..9b2c144
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_sel_resume.220x176x16.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/brickmania_sel_start.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_sel_start.220x176x16.bmp
new file mode 100644
index 0000000..d926586
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_sel_start.220x176x16.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/brickmania_start.220x176x16.bmp b/apps/plugins/bitmaps/native/brickmania_start.220x176x16.bmp
new file mode 100644
index 0000000..8d5bfb2
--- /dev/null
+++ b/apps/plugins/bitmaps/native/brickmania_start.220x176x16.bmp
Binary files differ
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
new file mode 100644
index 0000000..eec290f
--- /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;i<MENU_LENGTH;i++) {
+ if (cur==0)
+ rb->lcd_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 (vscore<score) vscore++;
+ rb->snprintf(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-4<ball_pos_y+BALL && bricky>ball_pos_y+BALL) || (bricky+4>ball_pos_y+BALL+BALL && bricky<ball_pos_y+BALL+BALL)) && (bally >0)){
+ 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_HEIGHT<ball_pos_y) || (bricky+BRICK_HEIGHT-4<ball_pos_y-BALL && bricky+BRICK_HEIGHT>ball_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-4<ball_pos_x+BALL && brickx>ball_pos_x+BALL) || (brickx+4>ball_pos_x+BALL+BALL && brickx<ball_pos_x+BALL+BALL)) && (ballx >0)) {
+ 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_WIDTH<ball_pos_x) || (brickx+BRICK_WIDTH-4<ball_pos_x-BALL && brickx+BRICK_WIDTH>ball_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 && bricky<ball_pos_y+BALL)) && (bally >0)) { /* 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<ball_pos_x+BALL)) && (ballx > 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-4<ball_pos_y+BALL && PAD_POS_Y>ball_pos_y+BALL) && (bally >0))
+ balltempy=PAD_POS_Y-ball_pos_y-BALL;
+ else if ((4>ball_pos_y && 0<ball_pos_y) && (bally <0))
+ balltempy=-ball_pos_y;
+ if ((LCD_WIDTH-4<ball_pos_x+BALL && LCD_WIDTH>ball_pos_x+BALL) && (ballx >0))
+ balltempx=LCD_WIDTH-ball_pos_x-BALL;
+ else if ((4>ball_pos_x && 0<ball_pos_x) && (ballx <0))
+ balltempx=-ball_pos_x;
+
+ /* top line */
+ if (ball_pos_y<= 0)
+ bally = bally*-1;
+ /* bottom line */
+ else if (ball_pos_y+BALL >= 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+1<levels_num) {
+ rb->sleep(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;
+}