Add recorder and ondio support to Xobox.
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@13566 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
parent
89fee25454
commit
cdc295dcae
2 changed files with 90 additions and 24 deletions
|
@ -97,8 +97,8 @@ rockboy.c
|
|||
/* not support recorder models for now */
|
||||
#if (LCD_WIDTH > 112) && (LCD_HEIGHT > 64)
|
||||
fireworks.c
|
||||
xobox.c
|
||||
#endif
|
||||
xobox.c
|
||||
spacerocks.c
|
||||
#if LCD_DEPTH >= 16
|
||||
rockpaint.c
|
||||
|
|
|
@ -30,7 +30,6 @@ PLUGIN_HEADER
|
|||
#define PAUSE BUTTON_MODE
|
||||
#define UP BUTTON_UP
|
||||
#define DOWN BUTTON_DOWN
|
||||
#define SELECT BUTTON_SELECT
|
||||
|
||||
#define RC_QUIT BUTTON_RC_STOP
|
||||
|
||||
|
@ -42,7 +41,6 @@ PLUGIN_HEADER
|
|||
#define PAUSE BUTTON_ON
|
||||
#define UP BUTTON_UP
|
||||
#define DOWN BUTTON_DOWN
|
||||
#define SELECT BUTTON_SELECT
|
||||
|
||||
#elif (CONFIG_KEYPAD == IPOD_3G_PAD) || \
|
||||
(CONFIG_KEYPAD == IPOD_4G_PAD)
|
||||
|
@ -51,7 +49,6 @@ PLUGIN_HEADER
|
|||
#define LEFT BUTTON_LEFT
|
||||
#define RIGHT BUTTON_RIGHT
|
||||
#define PAUSE BUTTON_SELECT
|
||||
#define SELECT BUTTON_SELECT
|
||||
#define MENU_UP BUTTON_SCROLL_FWD
|
||||
#define MENU_DOWN BUTTON_SCROLL_BACK
|
||||
#define UP BUTTON_MENU
|
||||
|
@ -62,7 +59,6 @@ PLUGIN_HEADER
|
|||
#define QUIT BUTTON_POWER
|
||||
#define LEFT BUTTON_LEFT
|
||||
#define RIGHT BUTTON_RIGHT
|
||||
#define SELECT BUTTON_SELECT
|
||||
#define UP BUTTON_UP
|
||||
#define DOWN BUTTON_DOWN
|
||||
#define PAUSE BUTTON_PLAY
|
||||
|
@ -72,7 +68,6 @@ PLUGIN_HEADER
|
|||
#define QUIT BUTTON_POWER
|
||||
#define LEFT BUTTON_LEFT
|
||||
#define RIGHT BUTTON_RIGHT
|
||||
#define SELECT BUTTON_SELECT
|
||||
#define UP BUTTON_UP
|
||||
#define DOWN BUTTON_DOWN
|
||||
#define PAUSE BUTTON_A
|
||||
|
@ -82,7 +77,6 @@ PLUGIN_HEADER
|
|||
#define QUIT BUTTON_POWER
|
||||
#define LEFT BUTTON_LEFT
|
||||
#define RIGHT BUTTON_RIGHT
|
||||
#define SELECT BUTTON_SELECT
|
||||
#define UP BUTTON_UP
|
||||
#define DOWN BUTTON_DOWN
|
||||
#define PAUSE BUTTON_REC
|
||||
|
@ -93,11 +87,28 @@ PLUGIN_HEADER
|
|||
#define QUIT BUTTON_POWER
|
||||
#define LEFT BUTTON_LEFT
|
||||
#define RIGHT BUTTON_RIGHT
|
||||
#define SELECT BUTTON_REW
|
||||
#define UP BUTTON_SCROLL_UP
|
||||
#define DOWN BUTTON_SCROLL_DOWN
|
||||
#define PAUSE BUTTON_PLAY
|
||||
|
||||
#elif CONFIG_KEYPAD == RECORDER_PAD
|
||||
|
||||
#define QUIT BUTTON_OFF
|
||||
#define LEFT BUTTON_LEFT
|
||||
#define RIGHT BUTTON_RIGHT
|
||||
#define DOWN BUTTON_DOWN
|
||||
#define UP BUTTON_UP
|
||||
#define PAUSE BUTTON_PLAY
|
||||
|
||||
#elif CONFIG_KEYPAD == ONDIO_PAD
|
||||
|
||||
#define QUIT BUTTON_OFF
|
||||
#define LEFT BUTTON_LEFT
|
||||
#define RIGHT BUTTON_RIGHT
|
||||
#define DOWN BUTTON_DOWN
|
||||
#define UP BUTTON_UP
|
||||
#define PAUSE BUTTON_MENU
|
||||
|
||||
#else
|
||||
#error Unsupported keypad
|
||||
#endif
|
||||
|
@ -138,7 +149,14 @@ PLUGIN_HEADER
|
|||
#define MOVE_UL ( DIR_U | DIR_L )
|
||||
#define MOVE_UUL ( DIR_UU | DIR_L )
|
||||
|
||||
#if (LCD_WIDTH>112) && (LCD_HEIGHT>64)
|
||||
# define CUBE_SIZE 8 /* 8x22=176 */
|
||||
# define pos(a) ((a)>>3)
|
||||
#else
|
||||
# define CUBE_SIZE 4
|
||||
# define pos(a) ((a)>>2)
|
||||
#endif
|
||||
|
||||
#define STARTING_QIXES 2
|
||||
#define MAX_LEVEL 10
|
||||
#define MAX_QIXES MAX_LEVEL+STARTING_QIXES
|
||||
|
@ -151,16 +169,23 @@ PLUGIN_HEADER
|
|||
#define CLR_RED LCD_RGBPACK(255,0,0) /* used to imply danger */
|
||||
#define CLR_LTBLUE LCD_RGBPACK(125, 145, 180) /* used for frame and filling */
|
||||
#define PLR_COL LCD_WHITE /* color used for the player */
|
||||
#else
|
||||
#elif LCD_DEPTH>=2
|
||||
#define CLR_RED LCD_DARKGRAY /* used to imply danger */
|
||||
#define CLR_LTBLUE LCD_LIGHTGRAY /* used for frame and filling */
|
||||
#define PLR_COL LCD_BLACK /* color used for the player */
|
||||
#endif
|
||||
|
||||
#if LCD_DEPTH>=2
|
||||
#define EMPTIED LCD_BLACK /* empty spot */
|
||||
#define FILLED CLR_LTBLUE /* filled spot */
|
||||
#define TRAIL CLR_RED /* the red trail of the player */
|
||||
#define QIX LCD_WHITE
|
||||
#else
|
||||
#define EMPTIED 0
|
||||
#define FILLED 1
|
||||
#define TRAIL 2
|
||||
#define QIX 3
|
||||
#endif
|
||||
#define UNCHECKED 0
|
||||
#define CHECKED 1
|
||||
#define PAINTED -1
|
||||
|
@ -184,6 +209,7 @@ static bool quit = false;
|
|||
static unsigned int board[BOARD_H][BOARD_W];
|
||||
static int testboard[BOARD_H][BOARD_W];
|
||||
|
||||
#if CUBE_SIZE == 8
|
||||
/*
|
||||
00011000 0x18 - 11100111 0xe7
|
||||
00111100 0x3c - 11100111 0xe7
|
||||
|
@ -198,6 +224,20 @@ const unsigned char pics[2][8] = {
|
|||
{0x18, 0x3c, 0x7e, 0xff, 0xff, 0x7e, 0x3c, 0x18}, /* Alien (QIX) */
|
||||
{0xe7, 0xe7, 0xc3, 0x00, 0x00, 0xc3, 0xe7, 0xe7} /* Player (XONIX) */
|
||||
};
|
||||
#elif CUBE_SIZE == 4
|
||||
/*
|
||||
01100000 0x18 - 10010000 0xe7
|
||||
11110100 0x3c - 01100000 0xe7
|
||||
11110000 0x7e - 01100000 0xc3
|
||||
01100000 0xff - 10010000 0x00
|
||||
*/
|
||||
const unsigned char pics[2][4] = {
|
||||
{0x60, 0xf0, 0xf0, 0x60}, /* Alien (QIX) */
|
||||
{0x90, 0x60, 0x60, 0x90} /* Player (XONIX) */
|
||||
};
|
||||
#else
|
||||
#error Incorrect CUBE_SIZE value.
|
||||
#endif
|
||||
|
||||
static struct qix
|
||||
{
|
||||
|
@ -226,13 +266,6 @@ static struct pos
|
|||
} stack[STACK_SIZE];
|
||||
static int stackPointer;
|
||||
|
||||
#define div(a,b) (((a)/(b)))
|
||||
#if CUBE_SIZE == 8
|
||||
# define pos(a) ((a)>>3)
|
||||
#else
|
||||
# define pos(a) div((a),CUBE_SIZE)
|
||||
#endif
|
||||
|
||||
static inline bool pop (struct pos *p)
|
||||
{
|
||||
if (stackPointer > 0) {
|
||||
|
@ -368,7 +401,11 @@ static void refresh_board (void)
|
|||
int i, j;
|
||||
char str[25];
|
||||
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_background (LCD_BLACK);
|
||||
#else
|
||||
rb->lcd_clear_display ();
|
||||
#endif
|
||||
for (j = 0; j < BOARD_H; j++)
|
||||
{
|
||||
unsigned last_color = board[j][0];
|
||||
|
@ -376,7 +413,11 @@ static void refresh_board (void)
|
|||
for (i = 1; i < BOARD_W; i++) {
|
||||
if( last_color != board[j][i] )
|
||||
{
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_foreground (last_color);
|
||||
#else
|
||||
if (last_color != EMPTIED)
|
||||
#endif
|
||||
rb->lcd_fillrect (BOARD_X + CUBE_SIZE * (last_i),
|
||||
BOARD_Y + CUBE_SIZE * j,
|
||||
CUBE_SIZE * (i - last_i), CUBE_SIZE );
|
||||
|
@ -384,14 +425,22 @@ static void refresh_board (void)
|
|||
last_i = i;
|
||||
}
|
||||
}
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_foreground (last_color);
|
||||
#else
|
||||
if (last_color != EMPTIED)
|
||||
#endif
|
||||
rb->lcd_fillrect (BOARD_X + CUBE_SIZE * (last_i),
|
||||
BOARD_Y + CUBE_SIZE * j,
|
||||
CUBE_SIZE * (i - last_i), CUBE_SIZE);
|
||||
}
|
||||
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_foreground (LCD_BLACK);
|
||||
rb->lcd_set_background (CLR_LTBLUE);
|
||||
#else
|
||||
rb->lcd_set_drawmode (DRMODE_COMPLEMENT);
|
||||
#endif
|
||||
rb->snprintf (str, sizeof (str), "Level %d", player.level + 1);
|
||||
rb->lcd_putsxy (BOARD_X, BOARD_Y, str);
|
||||
rb->snprintf (str, sizeof (str), "%d%%", percentage_cache);
|
||||
|
@ -399,22 +448,37 @@ static void refresh_board (void)
|
|||
rb->snprintf (str, sizeof (str), "Score: %d", player.score);
|
||||
rb->lcd_putsxy (BOARD_X, BOARD_Y + CUBE_SIZE * BOARD_H - 8, str);
|
||||
rb->snprintf (str, sizeof (str), "%d Lives", player.lives);
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_putsxy (BOARD_X + CUBE_SIZE * BOARD_W - 60,
|
||||
BOARD_Y + CUBE_SIZE * BOARD_H - 8, str);
|
||||
#else
|
||||
rb->lcd_putsxy (BOARD_X + CUBE_SIZE * BOARD_W - 40,
|
||||
BOARD_Y + CUBE_SIZE * BOARD_H - 8, str);
|
||||
#endif
|
||||
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_foreground (PLR_COL);
|
||||
rb->lcd_set_background (board[player.j][player.i]);
|
||||
#else
|
||||
rb->lcd_set_drawmode (DRMODE_SOLID);
|
||||
#endif
|
||||
rb->lcd_mono_bitmap (pics[PIC_PLAYER], player.i * CUBE_SIZE + BOARD_X,
|
||||
player.j * CUBE_SIZE + BOARD_Y, CUBE_SIZE, CUBE_SIZE);
|
||||
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_background (EMPTIED);
|
||||
rb->lcd_set_drawmode (DRMODE_FG);
|
||||
rb->lcd_set_foreground (LCD_WHITE);
|
||||
rb->lcd_set_drawmode (DRMODE_FG);
|
||||
#else
|
||||
rb->lcd_set_drawmode (DRMODE_SOLID|DRMODE_INVERSEVID);
|
||||
#endif
|
||||
for (j = 0; j < player.level + STARTING_QIXES; j++)
|
||||
rb->lcd_mono_bitmap (pics[PIC_QIX], qixes[j].x + BOARD_X,
|
||||
qixes[j].y + BOARD_Y, CUBE_SIZE, CUBE_SIZE);
|
||||
rb->lcd_set_drawmode (DRMODE_SOLID);
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_foreground (LCD_BLACK);
|
||||
#endif
|
||||
rb->lcd_set_drawmode (DRMODE_SOLID);
|
||||
|
||||
rb->lcd_update ();
|
||||
}
|
||||
|
@ -608,7 +672,7 @@ static void die (void)
|
|||
static inline bool line_check_lt (int newx, int newy)
|
||||
{
|
||||
int i = 0;
|
||||
for (i = 3; i < CUBE_SIZE - 3; i++) {
|
||||
for (i = ((CUBE_SIZE/2)-1); i < CUBE_SIZE - ((CUBE_SIZE/2)-1); i++) {
|
||||
if (getpixel (newx, newy + i) != FILLED)
|
||||
return false;
|
||||
}
|
||||
|
@ -617,7 +681,7 @@ static inline bool line_check_lt (int newx, int newy)
|
|||
static inline bool line_check_rt (int newx, int newy)
|
||||
{
|
||||
int i = 0;
|
||||
for (i = 3; i < CUBE_SIZE - 3; i++) {
|
||||
for (i = ((CUBE_SIZE/2)-1); i < CUBE_SIZE - ((CUBE_SIZE/2)-1); i++) {
|
||||
if (getpixel (newx + CUBE_SIZE - 1, newy + i) != FILLED)
|
||||
return false;
|
||||
}
|
||||
|
@ -626,7 +690,7 @@ static inline bool line_check_rt (int newx, int newy)
|
|||
static inline bool line_check_up (int newx, int newy)
|
||||
{
|
||||
int i = 0;
|
||||
for (i = 3; i < CUBE_SIZE - 3; i++) {
|
||||
for (i = ((CUBE_SIZE/2)-1); i < CUBE_SIZE - ((CUBE_SIZE/2)-1); i++) {
|
||||
if (getpixel (newx + i, newy) != FILLED)
|
||||
return false;
|
||||
}
|
||||
|
@ -635,7 +699,7 @@ static inline bool line_check_up (int newx, int newy)
|
|||
static inline bool line_check_dn (int newx, int newy)
|
||||
{
|
||||
int i = 0;
|
||||
for (i = 3; i < CUBE_SIZE - 3; i++) {
|
||||
for (i = ((CUBE_SIZE/2)-1); i < CUBE_SIZE - ((CUBE_SIZE/2)-1); i++) {
|
||||
if (getpixel (newx + i, newy + CUBE_SIZE - 1) != FILLED)
|
||||
return false;
|
||||
}
|
||||
|
@ -757,7 +821,7 @@ static int game_menu (void)
|
|||
#ifdef HAVE_LCD_COLOR
|
||||
rb->lcd_set_foreground (rb->global_settings->fg_color);
|
||||
rb->lcd_set_background (rb->global_settings->bg_color);
|
||||
#else
|
||||
#elif LCD_DEPTH>=2
|
||||
rb->lcd_set_foreground(LCD_BLACK);
|
||||
rb->lcd_set_background(LCD_WHITE);
|
||||
#endif
|
||||
|
@ -877,7 +941,9 @@ enum plugin_status plugin_start (struct plugin_api *api, void *parameter)
|
|||
rb = api;
|
||||
|
||||
rb->lcd_setfont (FONT_SYSFIXED);
|
||||
#if LCD_DEPTH>=2
|
||||
rb->lcd_set_backdrop(NULL);
|
||||
#endif
|
||||
|
||||
/* Permanently enable the backlight (unless the user has turned it off) */
|
||||
if (rb->global_settings->backlight_timeout > 0)
|
||||
|
|
Loading…
Reference in a new issue