1
0
Fork 0
forked from len0rd/rockbox

Assorted changes by Mikael Magnusson and I. * When moving through filled space, stop moving at any edge. * Changed background color to a more standard lightish blue. * Use user's font in the menu unless it's too big. * iPods: Use scroll wheel in menu instead of Menu/Play being Up/Down. * Exit button no longer always completely quits the plugin; returns you to the menu if you're in a game, or quits if you're at the menu. * A couple other little things.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@9975 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Zakk Roberts 2006-05-23 03:33:02 +00:00
parent a86919ae29
commit 74d86f719d

View file

@ -39,6 +39,8 @@ PLUGIN_HEADER
#define RIGHT BUTTON_RIGHT #define RIGHT BUTTON_RIGHT
#define PAUSE BUTTON_SELECT #define PAUSE BUTTON_SELECT
#define SELECT BUTTON_SELECT #define SELECT BUTTON_SELECT
#define MENU_UP BUTTON_SCROLL_FWD
#define MENU_DOWN BUTTON_SCROLL_BACK
#define UP BUTTON_MENU #define UP BUTTON_MENU
#define DOWN BUTTON_PLAY #define DOWN BUTTON_PLAY
@ -95,10 +97,10 @@ PLUGIN_HEADER
#define BOARD_Y (LCD_HEIGHT-BOARD_H*CUBE_SIZE)/2 #define BOARD_Y (LCD_HEIGHT-BOARD_H*CUBE_SIZE)/2
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
#define CLR_RED LCD_RGBPACK(255,0,0) /* used to imply danger */ #define CLR_RED LCD_RGBPACK(255,0,0) /* used to imply danger */
#define CLR_BLUE LCD_RGBPACK(0,0,128) /* used for menu selection */ #define CLR_BLUE LCD_RGBPACK(0,0,128) /* used for menu selection */
#define CLR_CYAN LCD_RGBPACK(0,128,128) /* used for frame and filling */ #define CLR_CYAN LCD_RGBPACK(125, 145, 180) /* used for frame and filling */
#define PLR_COL LCD_WHITE /* color used for the player */ #define PLR_COL LCD_WHITE /* color used for the player */
#else #else
#define CLR_RED LCD_DARKGRAY /* used to imply danger */ #define CLR_RED LCD_DARKGRAY /* used to imply danger */
#define CLR_BLUE LCD_BLACK /* used for menu selection */ #define CLR_BLUE LCD_BLACK /* used for menu selection */
@ -653,6 +655,10 @@ static inline void move_board (void)
/* start drawing */ /* start drawing */
player.drawing = true; player.drawing = true;
board[newj][newi] = TRAIL; board[newj][newi] = TRAIL;
/* if the block after next is empty and we're moving onto filled, stop */
} else if ((board[newj][newi] == FILLED)
&& (board[newj + newj-player.j][newi + newi-player.i] == EMPTIED)) {
player.move = MOVE_NO;
} }
player.i = newi; player.i = newi;
player.j = newj; player.j = newj;
@ -665,7 +671,7 @@ static inline void move_board (void)
player.level++; player.level++;
init_board (); init_board ();
refresh_board (); refresh_board ();
rb->splash (HZ * 2, true, "READY?"); rb->splash (HZ * 2, true, "Ready?");
} }
} }
@ -682,25 +688,39 @@ static int game_menu (void)
int button, selection = 0, sw, sh, i; int button, selection = 0, sw, sh, i;
bool quit = false; bool quit = false;
rb->lcd_getstringsize ("A", NULL, &sh);
rb->lcd_getstringsize ("XOBOX", &sw, NULL); rb->lcd_setfont(FONT_UI);
rb->lcd_getstringsize("A", &sw, &sh);
if(sw*20 > LCD_WIDTH || sh*4 > LCD_HEIGHT)
rb->lcd_setfont(FONT_SYSFIXED);
rb->lcd_getstringsize ("XOBOX", &sw, &sh);
sh++; sh++;
rb->lcd_set_background (LCD_WHITE); rb->lcd_set_background (LCD_WHITE);
rb->lcd_set_foreground (LCD_BLACK);
rb->lcd_clear_display (); rb->lcd_clear_display ();
rb->lcd_putsxy (LCD_WIDTH / 2 - sw / 2, 2, "XOBOX"); rb->lcd_putsxy (LCD_WIDTH / 2 - sw / 2, 2, "XOBOX");
while (!quit) { while (!quit) {
for (i = 0; i < MAIN_MENU_SIZE; i++) { for (i = 0; i < MAIN_MENU_SIZE; i++) {
rb->lcd_set_foreground ((i == selection ? LCD_WHITE : LCD_BLACK)); rb->lcd_set_foreground ((i == selection ? LCD_WHITE : LCD_BLACK));
rb->lcd_set_background ((i == selection ? CLR_BLUE : LCD_WHITE)); rb->lcd_set_background ((i == selection ? CLR_BLUE : LCD_WHITE));
rb->lcd_putsxy (9, sh + 4 + i * sh, menu[i]); rb->lcd_putsxy (10, sh + 4 + i * sh, menu[i]);
} }
rb->lcd_update (); rb->lcd_update ();
button = rb->button_get (true); button = rb->button_get (true);
switch (button) { switch (button) {
#ifdef MENU_UP
case MENU_UP:
#else
case UP: case UP:
#endif
selection = (selection + MAIN_MENU_SIZE - 1) % MAIN_MENU_SIZE; selection = (selection + MAIN_MENU_SIZE - 1) % MAIN_MENU_SIZE;
break; break;
#ifdef MENU_UP
case MENU_DOWN:
#else
case DOWN: case DOWN:
#endif
selection = (selection + 1) % MAIN_MENU_SIZE; selection = (selection + 1) % MAIN_MENU_SIZE;
break; break;
case SELECT: case SELECT:
@ -724,9 +744,10 @@ static void init_game (void)
player.lives = 3; player.lives = 3;
player.gameover = false; player.gameover = false;
player.drawing = false; player.drawing = false;
rb->lcd_setfont(FONT_SYSFIXED);
init_board (); init_board ();
refresh_board (); refresh_board ();
rb->splash (HZ * 2, true, "READY?"); rb->splash (HZ * 2, true, "Ready?");
} }
/* general keypad handler loop */ /* general keypad handler loop */
@ -755,11 +776,14 @@ static int xobox_loop (void)
case PAUSE: case PAUSE:
pause = !pause; pause = !pause;
if (pause) if (pause)
rb->splash (HZ, true, "PAUSED"); rb->splash (HZ, true, "Paused");
break; break;
case QUIT: case QUIT:
quit = true; ret = game_menu ();
return PLUGIN_OK; if (ret == MENU_START)
init_game ();
else
quit = true;
break; break;
default: default:
if (rb->default_event_handler (button) == SYS_USB_CONNECTED) if (rb->default_event_handler (button) == SYS_USB_CONNECTED)
@ -771,7 +795,7 @@ static int xobox_loop (void)
refresh_board (); refresh_board ();
} }
if (player.gameover) { if (player.gameover) {
rb->splash (HZ, true, "GAME OVER"); rb->splash (HZ, true, "Game Over!");
ret = game_menu (); ret = game_menu ();
if (ret == MENU_START) if (ret == MENU_START)
init_game (); init_game ();
@ -791,8 +815,7 @@ static int xobox_loop (void)
/* plugin main procedure */ /* plugin main procedure */
enum plugin_status plugin_start (struct plugin_api *api, void *parameter) enum plugin_status plugin_start (struct plugin_api *api, void *parameter)
{ {
int ret; int ret = PLUGIN_OK;
(void) parameter; (void) parameter;
rb = api; rb = api;
@ -803,8 +826,6 @@ enum plugin_status plugin_start (struct plugin_api *api, void *parameter)
if (rb->global_settings->backlight_timeout > 0) if (rb->global_settings->backlight_timeout > 0)
rb->backlight_set_timeout (1); rb->backlight_set_timeout (1);
ret = PLUGIN_OK;
randomize (); randomize ();
if (game_menu () == MENU_START) { if (game_menu () == MENU_START) {
init_game (); init_game ();