Star: * Uses bitmap build system for all resolutions. * Working bitmaps for H10_5GB and iPod mini, and extra bitmaps for iPod Nano, by Marianne Arnold. * 6x7 pixel bitmaps for archos to utilise the full screen width, have almost correct aspect ratio, and real stars. * Working button definitions for X5, some cleanup for Gigabeat and H10. * Faster transition update, working properly for portrait displays. * Proper vertical alignment and nicer horizontal alignment for the info display. * Better tile animation.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@11283 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Jens Arnold 2006-10-21 00:24:54 +00:00
parent 9d3fddaa63
commit 4f1ca13c23
6 changed files with 204 additions and 247 deletions

View file

@ -153,16 +153,28 @@ flipit_tokens.16x26x1.bmp
#endif
/* Star */
#if defined( HAVE_LCD_COLOR )
#if LCD_WIDTH >= 320
#ifdef HAVE_LCD_COLOR
#if LCD_WIDTH >= 320 && LCD_HEIGHT >= 188
star_tiles.20x20.bmp
#elif LCD_WIDTH >= 220
#elif LCD_WIDTH >= 208 && LCD_HEIGHT >= 125
star_tiles.13x13.bmp
#else
#elif LCD_WIDTH >= 176 && LCD_HEIGHT >= 107
star_tiles.11x11.bmp
#elif LCD_WIDTH >= 160 && LCD_HEIGHT >= 98
star_tiles.10x10.bmp
#elif LCD_WIDTH >= 128 && LCD_HEIGHT >= 80
star_tiles.8x8.bmp
#endif
#elif LCD_DEPTH > 1
#elif LCD_DEPTH > 1 /* grey */
#if LCD_WIDTH >= 160 && LCD_HEIGHT >= 98
star_tiles.10x10.grey.bmp
#elif LCD_WIDTH >= 128 && LCD_HEIGHT >= 80
star_tiles.8x8.grey.bmp
#endif
#else /* monochrome */
#if LCD_WIDTH >= 112 && LCD_HEIGHT >= 62
star_tiles.6x7.mono.bmp
#endif
#endif
/* Solitaire */

Binary file not shown.

After

Width:  |  Height:  |  Size: 2 KiB

Binary file not shown.

After

Width:  |  Height:  |  Size: 184 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 1,014 B

Binary file not shown.

After

Width:  |  Height:  |  Size: 390 B

View file

@ -21,9 +21,6 @@
PLUGIN_HEADER
/* file which contains the levels */
#define STAR_LEVELS_FILE "/.rockbox/star/levels.txt"
/* title of the game */
#define STAR_TITLE "Star"
@ -48,9 +45,9 @@ PLUGIN_HEADER
#define STAR_BLOCK 'x'
/* sleep time between two frames */
#if (LCD_HEIGHT == 240) && (LCD_WIDTH == 320) /* iPod 5G LCD is *slow* */
#define STAR_SLEEP ;
#elif (LCD_HEIGHT == 128) && (LCD_WIDTH == 160)
#if (LCD_HEIGHT * LCD_WIDTH >= 70000) /* iPod 5G LCD is *slow* */
#define STAR_SLEEP rb->yield();
#elif (LCD_HEIGHT * LCD_WIDTH >= 30000)
#define STAR_SLEEP rb->sleep(0);
#else
#define STAR_SLEEP rb->sleep(1);
@ -62,92 +59,92 @@ PLUGIN_HEADER
/* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD
#define STAR_QUIT BUTTON_OFF
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_QUIT BUTTON_OFF
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_TOGGLE_CONTROL BUTTON_ON
#define STAR_TOGGLE_CONTROL2 BUTTON_PLAY
#define STAR_LEVEL_UP BUTTON_F3
#define STAR_LEVEL_DOWN BUTTON_F1
#define STAR_LEVEL_REPEAT BUTTON_F2
#define STAR_MENU_RUN BUTTON_PLAY
#define STAR_MENU_RUN2 BUTTON_RIGHT
#define STAR_MENU_RUN3 BUTTON_ON
#define STAR_LEVEL_UP BUTTON_F3
#define STAR_LEVEL_DOWN BUTTON_F1
#define STAR_LEVEL_REPEAT BUTTON_F2
#define STAR_MENU_RUN BUTTON_PLAY
#define STAR_MENU_RUN2 BUTTON_RIGHT
#define STAR_MENU_RUN3 BUTTON_ON
#elif CONFIG_KEYPAD == ONDIO_PAD
#define STAR_QUIT BUTTON_OFF
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_QUIT BUTTON_OFF
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU
#define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL)
#define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT)
#define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT)
#define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP)
#define STAR_MENU_RUN BUTTON_RIGHT
#define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT)
#define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT)
#define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP)
#define STAR_MENU_RUN BUTTON_RIGHT
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD)
#define STAR_QUIT BUTTON_OFF
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_QUIT BUTTON_OFF
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_TOGGLE_CONTROL BUTTON_MODE
#define STAR_TOGGLE_CONTROL2 BUTTON_SELECT
#define STAR_LEVEL_UP (BUTTON_ON | BUTTON_RIGHT)
#define STAR_LEVEL_DOWN (BUTTON_ON | BUTTON_LEFT)
#define STAR_LEVEL_REPEAT (BUTTON_ON | BUTTON_SELECT)
#define STAR_MENU_RUN BUTTON_RIGHT
#define STAR_MENU_RUN2 BUTTON_SELECT
#define STAR_LEVEL_UP (BUTTON_ON | BUTTON_RIGHT)
#define STAR_LEVEL_DOWN (BUTTON_ON | BUTTON_LEFT)
#define STAR_LEVEL_REPEAT (BUTTON_ON | BUTTON_SELECT)
#define STAR_MENU_RUN BUTTON_RIGHT
#define STAR_MENU_RUN2 BUTTON_SELECT
#define STAR_RC_QUIT BUTTON_RC_STOP
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
(CONFIG_KEYPAD == IPOD_3G_PAD)
#define STAR_QUIT (BUTTON_SELECT | BUTTON_MENU)
#define STAR_UP BUTTON_MENU
#define STAR_DOWN BUTTON_PLAY
#define STAR_QUIT (BUTTON_SELECT | BUTTON_MENU)
#define STAR_UP BUTTON_MENU
#define STAR_DOWN BUTTON_PLAY
#define STAR_TOGGLE_CONTROL_PRE BUTTON_SELECT
#define STAR_TOGGLE_CONTROL (BUTTON_SELECT | BUTTON_REL)
#define STAR_LEVEL_UP (BUTTON_SELECT | BUTTON_RIGHT)
#define STAR_LEVEL_DOWN (BUTTON_SELECT | BUTTON_LEFT)
#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_PLAY)
#define STAR_MENU_RUN BUTTON_RIGHT
#define STAR_MENU_RUN2 BUTTON_SELECT
#define STAR_LEVEL_UP (BUTTON_SELECT | BUTTON_RIGHT)
#define STAR_LEVEL_DOWN (BUTTON_SELECT | BUTTON_LEFT)
#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_PLAY)
#define STAR_MENU_RUN BUTTON_RIGHT
#define STAR_MENU_RUN2 BUTTON_SELECT
#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
#define STAR_QUIT BUTTON_POWER
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_TOGGLE_CONTROL_PRE BUTTON_SELECT
#define STAR_TOGGLE_CONTROL (BUTTON_SELECT | BUTTON_REL)
#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_UP)
#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_DOWN)
#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_RIGHT)
#define STAR_MENU_RUN BUTTON_REC
#define STAR_QUIT BUTTON_POWER
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_TOGGLE_CONTROL BUTTON_SELECT
#define STAR_LEVEL_UP_PRE BUTTON_REC
#define STAR_LEVEL_UP (BUTTON_REC|BUTTON_REL)
#define STAR_LEVEL_DOWN_PRE BUTTON_REC
#define STAR_LEVEL_DOWN (BUTTON_REC|REPEAT)
#define STAR_LEVEL_REPEAT BUTTON_PLAY
#define STAR_MENU_RUN BUTTON_RIGHT
#define STAR_MENU_RUN2 BUTTON_SELECT
#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
#define STAR_QUIT BUTTON_A
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU
#define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL)
#define STAR_LEVEL_UP (BUTTON_POWER | BUTTON_UP)
#define STAR_LEVEL_DOWN (BUTTON_POWER | BUTTON_DOWN)
#define STAR_LEVEL_REPEAT (BUTTON_POWER | BUTTON_RIGHT)
#define STAR_MENU_RUN BUTTON_RIGHT
#define STAR_QUIT BUTTON_A
#define STAR_UP BUTTON_UP
#define STAR_DOWN BUTTON_DOWN
#define STAR_TOGGLE_CONTROL BUTTON_MENU
#define STAR_LEVEL_UP (BUTTON_POWER | BUTTON_UP)
#define STAR_LEVEL_DOWN (BUTTON_POWER | BUTTON_DOWN)
#define STAR_LEVEL_REPEAT (BUTTON_POWER | BUTTON_RIGHT)
#define STAR_MENU_RUN BUTTON_RIGHT
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
#define STAR_QUIT BUTTON_POWER
#define STAR_UP BUTTON_SCROLL_UP
#define STAR_DOWN BUTTON_SCROLL_DOWN
#define STAR_TOGGLE_CONTROL_PRE BUTTON_REW
#define STAR_TOGGLE_CONTROL (BUTTON_REW | BUTTON_REL)
#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_SCROLL_UP)
#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_SCROLL_DOWN)
#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_RIGHT)
#define STAR_MENU_RUN BUTTON_FF
#define STAR_QUIT BUTTON_POWER
#define STAR_UP BUTTON_SCROLL_UP
#define STAR_DOWN BUTTON_SCROLL_DOWN
#define STAR_TOGGLE_CONTROL BUTTON_REW
#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_SCROLL_UP)
#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_SCROLL_DOWN)
#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_RIGHT)
#define STAR_MENU_RUN BUTTON_FF
#endif
@ -169,55 +166,18 @@ static int control;
/* the current board */
static char board[STAR_HEIGHT][STAR_WIDTH];
#if LCD_DEPTH > 1
#include "star_tiles.h"
extern const fb_data star_tiles[];
#define TILE_WIDTH BMPWIDTH_star_tiles
#define TILE_HEIGHT (BMPHEIGHT_star_tiles/5)
#define STAR_OFFSET_X ((LCD_WIDTH - STAR_WIDTH * TILE_WIDTH) / 2)
#define STAR_OFFSET_Y ((LCD_HEIGHT - STAR_HEIGHT * TILE_HEIGHT - MAX(TILE_HEIGHT, 8)) / 2)
/* size of a tile */
#if LCD_WIDTH >= 320 && defined( HAVE_LCD_COLOR )
# define STAR_TILE_SIZE 20
#elif LCD_WIDTH >= 220 && defined( HAVE_LCD_COLOR )
# define STAR_TILE_SIZE 13
#else
# define STAR_TILE_SIZE 10
#endif
/* left and top margin */
#define STAR_OFFSET_X ( ( LCD_WIDTH - STAR_WIDTH * STAR_TILE_SIZE ) / 2 )
#define STAR_OFFSET_Y ( ( LCD_HEIGHT - ( STAR_HEIGHT + 1 ) * STAR_TILE_SIZE ) / 2 )
#define wall 0
#define space 1
#define block 2
#define star 3
#define ball 4
#else
/* left and top margin */
#define STAR_OFFSET_X 8
#define STAR_OFFSET_Y 0
/* size of a tile */
#define STAR_TILE_SIZE 6
/* bitmap of the wall */
static unsigned char wall_bmp[STAR_TILE_SIZE]
= {0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55};
/* bitmap of the star */
static unsigned char star_bmp[STAR_TILE_SIZE]
= {0x00, 0x0c, 0x12, 0x12, 0x0c, 0x00};
/* bitmap of the ball */
static unsigned char ball_bmp[STAR_TILE_SIZE]
= {0x00, 0x0c, 0x1e, 0x1a, 0x0c, 0x00};
/* bitmap of the block */
static unsigned char block_bmp[STAR_TILE_SIZE]
= {0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x00};
#endif
#define WALL 0
#define SPACE 1
#define BLOCK 2
#define STAR 3
#define BALL 4
/* bitmap of the arrow animation */
static unsigned char arrow_bmp[4][7] =
@ -445,7 +405,7 @@ static unsigned char* levels =
/**
* Display text.
*/
static void star_display_text(char *str, bool waitkey)
void star_display_text(char *str, bool waitkey)
{
int chars_by_line;
int lines_by_screen;
@ -496,7 +456,7 @@ static void star_display_text(char *str, bool waitkey)
line[chars_for_line] = '\0';
/* test if we have cutted a word. If it is the case we don't have to */
/* test if we have cut a word. If it is the case we don't have to */
/* skip the space */
if (i == chars_by_line && chars_for_line == chars_by_line)
first_char_index += chars_for_line;
@ -546,13 +506,14 @@ static void star_display_text(char *str, bool waitkey)
static void star_transition_update(void)
{
int center_x = LCD_WIDTH / 2;
int lcd_demi_width = LCD_WIDTH / 2;
int center_y = LCD_HEIGHT / 2;
int x;
int x = 0;
int y = 0;
#if LCD_WIDTH >= LCD_HEIGHT
int lcd_demi_width = LCD_WIDTH / 2;
int var_y = 0;
for (x = 1 ; x < lcd_demi_width ; x++)
for (; x < lcd_demi_width ; x++)
{
var_y += LCD_HEIGHT;
if (var_y > LCD_WIDTH)
@ -560,10 +521,31 @@ static void star_transition_update(void)
var_y -= LCD_WIDTH;
y++;
}
rb->lcd_update_rect(center_x - x, center_y - y,
x * 2, y * 2);
rb->lcd_update_rect(center_x - x, center_y - y, x * 2, 1);
rb->lcd_update_rect(center_x - x, center_y - y, 1, y * 2);
rb->lcd_update_rect(center_x + x - 1, center_y - y, 1, y * 2);
rb->lcd_update_rect(center_x - x, center_y + y - 1, x * 2, 1);
STAR_SLEEP
}
#else
int lcd_demi_height = LCD_HEIGHT / 2;
int var_x = 0;
for (; y < lcd_demi_height ; y++)
{
var_x += LCD_WIDTH;
if (var_x > LCD_HEIGHT)
{
var_x -= LCD_HEIGHT;
x++;
}
rb->lcd_update_rect(center_x - x, center_y - y, x * 2, 1);
rb->lcd_update_rect(center_x - x, center_y - y, 1, y * 2);
rb->lcd_update_rect(center_x + x - 1, center_y - y, 1, y * 2);
rb->lcd_update_rect(center_x - x, center_y + y - 1, x * 2, 1);
STAR_SLEEP
}
#endif
rb->lcd_update();
}
@ -572,36 +554,34 @@ static void star_transition_update(void)
*/
static void star_display_board_info(void)
{
int label_offset_y = label_offset_y = LCD_HEIGHT - char_height - ( STAR_TILE_SIZE - char_height ) / 2 ;
int label_pos_y, tile_pos_y;
char str_info[32];
rb->snprintf(str_info, sizeof(str_info), "L:%02d S:%02d C:",
current_level+1, star_count );
rb->lcd_putsxy(0, label_offset_y, str_info);
#if LCD_DEPTH > 1
if( control == STAR_CONTROL_BALL )
rb->lcd_bitmap_part( star_tiles, 0,
ball*STAR_TILE_SIZE, STAR_TILE_SIZE,
107, label_offset_y - ( STAR_TILE_SIZE - char_height ) / 2 - 2,
STAR_TILE_SIZE, STAR_TILE_SIZE);
if (TILE_HEIGHT > char_height)
{
tile_pos_y = LCD_HEIGHT - TILE_HEIGHT;
label_pos_y = tile_pos_y + (TILE_HEIGHT - char_height) / 2;
}
else
rb->lcd_bitmap_part( star_tiles, 0,
block*STAR_TILE_SIZE, STAR_TILE_SIZE,
107, label_offset_y - ( STAR_TILE_SIZE - char_height ) / 2 - 2,
STAR_TILE_SIZE, STAR_TILE_SIZE);
rb->lcd_update_rect(0, label_offset_y - ( STAR_TILE_SIZE - char_height ) / 2 - 2, LCD_WIDTH, STAR_TILE_SIZE );
#else
if (control == STAR_CONTROL_BALL)
rb->lcd_mono_bitmap (ball_bmp, 103, label_offset_y + 1, STAR_TILE_SIZE,
STAR_TILE_SIZE);
else
rb->lcd_mono_bitmap (block_bmp, 103, label_offset_y + 1, STAR_TILE_SIZE,
STAR_TILE_SIZE);
{
label_pos_y = LCD_HEIGHT - char_height;
tile_pos_y = label_pos_y + (char_height - TILE_HEIGHT) / 2;
}
rb->snprintf(str_info, sizeof(str_info), "L:%02d", current_level + 1);
rb->lcd_putsxy(STAR_OFFSET_X, label_pos_y, str_info);
rb->snprintf(str_info, sizeof(str_info), "S:%02d", star_count);
rb->lcd_putsxy(LCD_WIDTH/2 - 2 * char_width, label_pos_y, str_info);
rb->lcd_putsxy(STAR_OFFSET_X + (STAR_WIDTH-1) * TILE_WIDTH - 2 * char_width,
label_pos_y, "C:");
rb->lcd_update_rect(0, label_offset_y, LCD_WIDTH, char_height);
#endif
rb->lcd_bitmap_part(star_tiles, 0, control == STAR_CONTROL_BALL ?
BALL*TILE_HEIGHT : BLOCK*TILE_HEIGHT, TILE_WIDTH,
STAR_OFFSET_X + (STAR_WIDTH-1) * TILE_WIDTH,
tile_pos_y, TILE_WIDTH, TILE_HEIGHT);
rb->lcd_update_rect(0, MIN(label_pos_y, tile_pos_y), LCD_WIDTH,
MAX(TILE_HEIGHT, char_height));
}
@ -626,46 +606,36 @@ static int star_load_level(int current_level)
board[y][x] = *ptr_tab;
switch (*ptr_tab)
{
#if LCD_DEPTH > 1
# define DRAW_TILE( a ) \
rb->lcd_bitmap_part( star_tiles, 0, \
a*STAR_TILE_SIZE, STAR_TILE_SIZE, \
STAR_OFFSET_X + x * STAR_TILE_SIZE, \
STAR_OFFSET_Y + y * STAR_TILE_SIZE, \
STAR_TILE_SIZE, STAR_TILE_SIZE);
#else
# define DRAW_TILE( a ) \
rb->lcd_mono_bitmap ( a ## _bmp, \
STAR_OFFSET_X + x * STAR_TILE_SIZE, \
STAR_OFFSET_Y + y * STAR_TILE_SIZE, \
STAR_TILE_SIZE, STAR_TILE_SIZE);
#endif
# define DRAW_TILE( a ) \
rb->lcd_bitmap_part( star_tiles, 0, \
a*TILE_HEIGHT, TILE_WIDTH, \
STAR_OFFSET_X + x * TILE_WIDTH, \
STAR_OFFSET_Y + y * TILE_HEIGHT, \
TILE_WIDTH, TILE_HEIGHT);
case STAR_VOID:
#if LCD_DEPTH > 1
DRAW_TILE( space );
#endif
DRAW_TILE( SPACE );
break;
case STAR_WALL:
DRAW_TILE( wall );
DRAW_TILE( WALL );
break;
case STAR_STAR:
DRAW_TILE( star );
DRAW_TILE( STAR );
star_count++;
break;
case STAR_BALL:
ball_x = x;
ball_y = y;
DRAW_TILE( ball );
DRAW_TILE( BALL );
break;
case STAR_BLOCK:
block_x = x;
block_y = y;
DRAW_TILE( block );
DRAW_TILE( BLOCK );
break;
}
ptr_tab++;
@ -677,6 +647,39 @@ static int star_load_level(int current_level)
return 1;
}
static void star_animate_tile(int tile_no, int start_x, int start_y,
int delta_x, int delta_y)
{
int i;
if (delta_x != 0) /* horizontal */
{
for (i = 1 ; i <= TILE_WIDTH ; i++)
{
STAR_SLEEP
rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT, TILE_WIDTH,
start_x, start_y, TILE_WIDTH, TILE_HEIGHT);
rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT, TILE_WIDTH,
start_x + delta_x * i, start_y, TILE_WIDTH, TILE_HEIGHT);
rb->lcd_update_rect(start_x + delta_x * i - (delta_x>0?1:0),
start_y, TILE_WIDTH + 1, TILE_HEIGHT);
}
}
else /* vertical */
{
for (i = 1 ; i <= TILE_HEIGHT ; i++)
{
STAR_SLEEP
rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT, TILE_WIDTH,
start_x, start_y, TILE_WIDTH, TILE_HEIGHT);
rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT, TILE_WIDTH,
start_x, start_y + delta_y * i, TILE_WIDTH, TILE_HEIGHT);
rb->lcd_update_rect(start_x, start_y + delta_y * i - (delta_y>0?1:0),
TILE_WIDTH, TILE_HEIGHT + 1);
}
}
}
/**
* Run the game.
*/
@ -684,7 +687,6 @@ static int star_run_game(void)
{
int move_x = 0;
int move_y = 0;
int i;
int key;
int lastkey = BUTTON_NONE;
@ -728,6 +730,10 @@ static int star_run_game(void)
break;
case STAR_LEVEL_DOWN:
#ifdef STAR_LEVEL_DOWN_PRE
if (lastkey != STAR_LEVEL_DOWN_PRE)
break;
#endif
if (current_level > 0)
{
current_level--;
@ -740,6 +746,10 @@ static int star_run_game(void)
break;
case STAR_LEVEL_UP:
#ifdef STAR_LEVEL_UP_PRE
if (lastkey != STAR_LEVEL_UP_PRE)
break;
#endif
if (current_level < STAR_LEVEL_COUNT - 1)
{
current_level++;
@ -781,37 +791,9 @@ static int star_run_game(void)
|| board[ball_y + move_y][ball_x + move_x] == STAR_STAR))
{
for (i = 0 ; i <= STAR_TILE_SIZE ; i++)
{
#if LCD_DEPTH > 1
rb->lcd_bitmap_part(
star_tiles, 0, space * STAR_TILE_SIZE, STAR_TILE_SIZE,
STAR_OFFSET_X + ball_x * STAR_TILE_SIZE,
STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE,
STAR_TILE_SIZE, STAR_TILE_SIZE);
rb->lcd_bitmap_part(
star_tiles, 0, ball * STAR_TILE_SIZE, STAR_TILE_SIZE,
STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * i,
STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * i,
STAR_TILE_SIZE, STAR_TILE_SIZE);
rb->lcd_update_rect(
STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * (i>0?i-1:0),
STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * (i>0?i-1:0),
STAR_TILE_SIZE+(i>0?0:1), STAR_TILE_SIZE+(i>0?0:1));
#else
rb->lcd_mono_bitmap(
ball_bmp,
STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * i,
STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * i,
STAR_TILE_SIZE, STAR_TILE_SIZE);
rb->lcd_update_rect(
STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * i,
STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * i,
STAR_TILE_SIZE, STAR_TILE_SIZE);
#endif
STAR_SLEEP
}
star_animate_tile(BALL, STAR_OFFSET_X + ball_x * TILE_WIDTH,
STAR_OFFSET_Y + ball_y * TILE_HEIGHT,
move_x, move_y);
ball_x += move_x;
ball_y += move_y;
@ -830,37 +812,9 @@ static int star_run_game(void)
board[block_y][block_x] = STAR_VOID;
while (board[block_y + move_y][block_x + move_x] == STAR_VOID)
{
for (i = 0 ; i <= STAR_TILE_SIZE ; i++)
{
#if LCD_DEPTH > 1
rb->lcd_bitmap_part(
star_tiles, 0, space * STAR_TILE_SIZE, STAR_TILE_SIZE,
STAR_OFFSET_X + block_x * STAR_TILE_SIZE,
STAR_OFFSET_Y + block_y * STAR_TILE_SIZE,
STAR_TILE_SIZE, STAR_TILE_SIZE);
rb->lcd_bitmap_part(
star_tiles, 0, block * STAR_TILE_SIZE, STAR_TILE_SIZE,
STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * i,
STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * i,
STAR_TILE_SIZE, STAR_TILE_SIZE);
rb->lcd_update_rect(
STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * (i>0?i-1:0),
STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * (i>0?i-1:0),
STAR_TILE_SIZE+(i>0?0:1), STAR_TILE_SIZE+(i>0?0:1));
#else
rb->lcd_mono_bitmap(
block_bmp,
STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * i,
STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * i,
STAR_TILE_SIZE, STAR_TILE_SIZE);
rb->lcd_update_rect(
STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * i,
STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * i,
STAR_TILE_SIZE, STAR_TILE_SIZE);
#endif
STAR_SLEEP
}
star_animate_tile(BLOCK, STAR_OFFSET_X + block_x * TILE_WIDTH,
STAR_OFFSET_Y + block_y * TILE_HEIGHT,
move_x, move_y);
block_x += move_x;
block_y += move_y;
}
@ -1046,21 +1000,12 @@ static int star_menu(void)
star_choose_level();
break;
case 2:
#if LCD_DEPTH > 1
star_display_text(
"INFO\n\n"
"Take all the stars to go to the next level. "
"You can toggle control with the block to "
"use it as a mobile wall. The block cannot "
"take stars.", true);
#else
star_display_text(
"INFO\n\n"
"Take all the \"o\"s to go to the next level. "
"You can toggle control with the block to "
"use it as a mobile wall. The block cannot "
"take \"o\".", true);
#endif
break;
case 3:
#if CONFIG_KEYPAD == RECORDER_PAD
@ -1079,10 +1024,10 @@ static int star_menu(void)
"[M >] Next level", true);
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
star_display_text("KEYS\n\n"
"[MODE/SELECT] Toggle Ctrl\n"
"[MODE/NAVI] Toggle Ctrl\n"
"[OFF] Exit\n"
"[ON + LEFT] Prev. level\n"
"[ON + SELECT] Reset level\n"
"[ON + NAVI] Reset level\n"
"[ON + RIGHT] Next level", true);
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
star_display_text("KEYS\n\n"
@ -1095,9 +1040,9 @@ static int star_menu(void)
star_display_text("KEYS\n\n"
"[SELECT] Toggle Ctl\n"
"[POWER] Exit\n"
"[PLAY+DOWN] Prev. level\n"
"[PLAY+RIGHT] Reset level\n"
"[PLAY+UP] Next level", true);
"[REC..] Prev. level\n"
"[PLAY] Reset level\n"
"[REC] Next level", true);
#elif CONFIG_KEYPAD == GIGABEAT_PAD
star_display_text("KEYS\n\n"
"[MENU] Toggle Ctl\n"