summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/bitmaps/native/SOURCES22
-rwxr-xr-xapps/plugins/bitmaps/native/star_tiles.11x11.bmpbin0 -> 2034 bytes
-rwxr-xr-xapps/plugins/bitmaps/native/star_tiles.6x7.mono.bmpbin0 -> 184 bytes
-rwxr-xr-xapps/plugins/bitmaps/native/star_tiles.8x8.bmpbin0 -> 1014 bytes
-rwxr-xr-xapps/plugins/bitmaps/native/star_tiles.8x8.grey.bmpbin0 -> 390 bytes
-rw-r--r--apps/plugins/star.c433
6 files changed, 206 insertions, 249 deletions
diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES
index c7c9f9f9dc..40512300aa 100644
--- a/apps/plugins/bitmaps/native/SOURCES
+++ b/apps/plugins/bitmaps/native/SOURCES
@@ -153,16 +153,28 @@ flipit_tokens.16x26x1.bmp
153#endif 153#endif
154 154
155/* Star */ 155/* Star */
156#if defined( HAVE_LCD_COLOR ) 156#ifdef HAVE_LCD_COLOR
157#if LCD_WIDTH >= 320 157#if LCD_WIDTH >= 320 && LCD_HEIGHT >= 188
158star_tiles.20x20.bmp 158star_tiles.20x20.bmp
159#elif LCD_WIDTH >= 220 159#elif LCD_WIDTH >= 208 && LCD_HEIGHT >= 125
160star_tiles.13x13.bmp 160star_tiles.13x13.bmp
161#else 161#elif LCD_WIDTH >= 176 && LCD_HEIGHT >= 107
162star_tiles.11x11.bmp
163#elif LCD_WIDTH >= 160 && LCD_HEIGHT >= 98
162star_tiles.10x10.bmp 164star_tiles.10x10.bmp
165#elif LCD_WIDTH >= 128 && LCD_HEIGHT >= 80
166star_tiles.8x8.bmp
163#endif 167#endif
164#elif LCD_DEPTH > 1 168#elif LCD_DEPTH > 1 /* grey */
169#if LCD_WIDTH >= 160 && LCD_HEIGHT >= 98
165star_tiles.10x10.grey.bmp 170star_tiles.10x10.grey.bmp
171#elif LCD_WIDTH >= 128 && LCD_HEIGHT >= 80
172star_tiles.8x8.grey.bmp
173#endif
174#else /* monochrome */
175#if LCD_WIDTH >= 112 && LCD_HEIGHT >= 62
176star_tiles.6x7.mono.bmp
177#endif
166#endif 178#endif
167 179
168/* Solitaire */ 180/* Solitaire */
diff --git a/apps/plugins/bitmaps/native/star_tiles.11x11.bmp b/apps/plugins/bitmaps/native/star_tiles.11x11.bmp
new file mode 100755
index 0000000000..eeef00218e
--- /dev/null
+++ b/apps/plugins/bitmaps/native/star_tiles.11x11.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/star_tiles.6x7.mono.bmp b/apps/plugins/bitmaps/native/star_tiles.6x7.mono.bmp
new file mode 100755
index 0000000000..ebc59b9b11
--- /dev/null
+++ b/apps/plugins/bitmaps/native/star_tiles.6x7.mono.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/star_tiles.8x8.bmp b/apps/plugins/bitmaps/native/star_tiles.8x8.bmp
new file mode 100755
index 0000000000..4e8a68ca29
--- /dev/null
+++ b/apps/plugins/bitmaps/native/star_tiles.8x8.bmp
Binary files differ
diff --git a/apps/plugins/bitmaps/native/star_tiles.8x8.grey.bmp b/apps/plugins/bitmaps/native/star_tiles.8x8.grey.bmp
new file mode 100755
index 0000000000..6f810ce562
--- /dev/null
+++ b/apps/plugins/bitmaps/native/star_tiles.8x8.grey.bmp
Binary files differ
diff --git a/apps/plugins/star.c b/apps/plugins/star.c
index 65409fddb4..779aa4afad 100644
--- a/apps/plugins/star.c
+++ b/apps/plugins/star.c
@@ -21,9 +21,6 @@
21 21
22PLUGIN_HEADER 22PLUGIN_HEADER
23 23
24/* file which contains the levels */
25#define STAR_LEVELS_FILE "/.rockbox/star/levels.txt"
26
27/* title of the game */ 24/* title of the game */
28#define STAR_TITLE "Star" 25#define STAR_TITLE "Star"
29 26
@@ -48,9 +45,9 @@ PLUGIN_HEADER
48#define STAR_BLOCK 'x' 45#define STAR_BLOCK 'x'
49 46
50/* sleep time between two frames */ 47/* sleep time between two frames */
51#if (LCD_HEIGHT == 240) && (LCD_WIDTH == 320) /* iPod 5G LCD is *slow* */ 48#if (LCD_HEIGHT * LCD_WIDTH >= 70000) /* iPod 5G LCD is *slow* */
52#define STAR_SLEEP ; 49#define STAR_SLEEP rb->yield();
53#elif (LCD_HEIGHT == 128) && (LCD_WIDTH == 160) 50#elif (LCD_HEIGHT * LCD_WIDTH >= 30000)
54#define STAR_SLEEP rb->sleep(0); 51#define STAR_SLEEP rb->sleep(0);
55#else 52#else
56#define STAR_SLEEP rb->sleep(1); 53#define STAR_SLEEP rb->sleep(1);
@@ -62,92 +59,92 @@ PLUGIN_HEADER
62 59
63/* variable button definitions */ 60/* variable button definitions */
64#if CONFIG_KEYPAD == RECORDER_PAD 61#if CONFIG_KEYPAD == RECORDER_PAD
65#define STAR_QUIT BUTTON_OFF 62#define STAR_QUIT BUTTON_OFF
66#define STAR_UP BUTTON_UP 63#define STAR_UP BUTTON_UP
67#define STAR_DOWN BUTTON_DOWN 64#define STAR_DOWN BUTTON_DOWN
68#define STAR_TOGGLE_CONTROL BUTTON_ON 65#define STAR_TOGGLE_CONTROL BUTTON_ON
69#define STAR_TOGGLE_CONTROL2 BUTTON_PLAY 66#define STAR_TOGGLE_CONTROL2 BUTTON_PLAY
70#define STAR_LEVEL_UP BUTTON_F3 67#define STAR_LEVEL_UP BUTTON_F3
71#define STAR_LEVEL_DOWN BUTTON_F1 68#define STAR_LEVEL_DOWN BUTTON_F1
72#define STAR_LEVEL_REPEAT BUTTON_F2 69#define STAR_LEVEL_REPEAT BUTTON_F2
73#define STAR_MENU_RUN BUTTON_PLAY 70#define STAR_MENU_RUN BUTTON_PLAY
74#define STAR_MENU_RUN2 BUTTON_RIGHT 71#define STAR_MENU_RUN2 BUTTON_RIGHT
75#define STAR_MENU_RUN3 BUTTON_ON 72#define STAR_MENU_RUN3 BUTTON_ON
76 73
77#elif CONFIG_KEYPAD == ONDIO_PAD 74#elif CONFIG_KEYPAD == ONDIO_PAD
78#define STAR_QUIT BUTTON_OFF 75#define STAR_QUIT BUTTON_OFF
79#define STAR_UP BUTTON_UP 76#define STAR_UP BUTTON_UP
80#define STAR_DOWN BUTTON_DOWN 77#define STAR_DOWN BUTTON_DOWN
81#define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU 78#define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU
82#define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL) 79#define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL)
83#define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT) 80#define STAR_LEVEL_UP (BUTTON_MENU | BUTTON_RIGHT)
84#define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT) 81#define STAR_LEVEL_DOWN (BUTTON_MENU | BUTTON_LEFT)
85#define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP) 82#define STAR_LEVEL_REPEAT (BUTTON_MENU | BUTTON_UP)
86#define STAR_MENU_RUN BUTTON_RIGHT 83#define STAR_MENU_RUN BUTTON_RIGHT
87 84
88#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ 85#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
89 (CONFIG_KEYPAD == IRIVER_H300_PAD) 86 (CONFIG_KEYPAD == IRIVER_H300_PAD)
90#define STAR_QUIT BUTTON_OFF 87#define STAR_QUIT BUTTON_OFF
91#define STAR_UP BUTTON_UP 88#define STAR_UP BUTTON_UP
92#define STAR_DOWN BUTTON_DOWN 89#define STAR_DOWN BUTTON_DOWN
93#define STAR_TOGGLE_CONTROL BUTTON_MODE 90#define STAR_TOGGLE_CONTROL BUTTON_MODE
94#define STAR_TOGGLE_CONTROL2 BUTTON_SELECT 91#define STAR_TOGGLE_CONTROL2 BUTTON_SELECT
95#define STAR_LEVEL_UP (BUTTON_ON | BUTTON_RIGHT) 92#define STAR_LEVEL_UP (BUTTON_ON | BUTTON_RIGHT)
96#define STAR_LEVEL_DOWN (BUTTON_ON | BUTTON_LEFT) 93#define STAR_LEVEL_DOWN (BUTTON_ON | BUTTON_LEFT)
97#define STAR_LEVEL_REPEAT (BUTTON_ON | BUTTON_SELECT) 94#define STAR_LEVEL_REPEAT (BUTTON_ON | BUTTON_SELECT)
98#define STAR_MENU_RUN BUTTON_RIGHT 95#define STAR_MENU_RUN BUTTON_RIGHT
99#define STAR_MENU_RUN2 BUTTON_SELECT 96#define STAR_MENU_RUN2 BUTTON_SELECT
100 97
101#define STAR_RC_QUIT BUTTON_RC_STOP 98#define STAR_RC_QUIT BUTTON_RC_STOP
102#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ 99#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
103 (CONFIG_KEYPAD == IPOD_3G_PAD) 100 (CONFIG_KEYPAD == IPOD_3G_PAD)
104 101
105#define STAR_QUIT (BUTTON_SELECT | BUTTON_MENU) 102#define STAR_QUIT (BUTTON_SELECT | BUTTON_MENU)
106#define STAR_UP BUTTON_MENU 103#define STAR_UP BUTTON_MENU
107#define STAR_DOWN BUTTON_PLAY 104#define STAR_DOWN BUTTON_PLAY
108#define STAR_TOGGLE_CONTROL_PRE BUTTON_SELECT 105#define STAR_TOGGLE_CONTROL_PRE BUTTON_SELECT
109#define STAR_TOGGLE_CONTROL (BUTTON_SELECT | BUTTON_REL) 106#define STAR_TOGGLE_CONTROL (BUTTON_SELECT | BUTTON_REL)
110#define STAR_LEVEL_UP (BUTTON_SELECT | BUTTON_RIGHT) 107#define STAR_LEVEL_UP (BUTTON_SELECT | BUTTON_RIGHT)
111#define STAR_LEVEL_DOWN (BUTTON_SELECT | BUTTON_LEFT) 108#define STAR_LEVEL_DOWN (BUTTON_SELECT | BUTTON_LEFT)
112#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_PLAY) 109#define STAR_LEVEL_REPEAT (BUTTON_SELECT | BUTTON_PLAY)
113#define STAR_MENU_RUN BUTTON_RIGHT 110#define STAR_MENU_RUN BUTTON_RIGHT
114#define STAR_MENU_RUN2 BUTTON_SELECT 111#define STAR_MENU_RUN2 BUTTON_SELECT
115 112
116#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD) 113#elif (CONFIG_KEYPAD == IAUDIO_X5_PAD)
117 114
118#define STAR_QUIT BUTTON_POWER 115#define STAR_QUIT BUTTON_POWER
119#define STAR_UP BUTTON_UP 116#define STAR_UP BUTTON_UP
120#define STAR_DOWN BUTTON_DOWN 117#define STAR_DOWN BUTTON_DOWN
121#define STAR_TOGGLE_CONTROL_PRE BUTTON_SELECT 118#define STAR_TOGGLE_CONTROL BUTTON_SELECT
122#define STAR_TOGGLE_CONTROL (BUTTON_SELECT | BUTTON_REL) 119#define STAR_LEVEL_UP_PRE BUTTON_REC
123#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_UP) 120#define STAR_LEVEL_UP (BUTTON_REC|BUTTON_REL)
124#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_DOWN) 121#define STAR_LEVEL_DOWN_PRE BUTTON_REC
125#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_RIGHT) 122#define STAR_LEVEL_DOWN (BUTTON_REC|REPEAT)
126#define STAR_MENU_RUN BUTTON_REC 123#define STAR_LEVEL_REPEAT BUTTON_PLAY
124#define STAR_MENU_RUN BUTTON_RIGHT
125#define STAR_MENU_RUN2 BUTTON_SELECT
127 126
128#elif (CONFIG_KEYPAD == GIGABEAT_PAD) 127#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
129 128
130#define STAR_QUIT BUTTON_A 129#define STAR_QUIT BUTTON_A
131#define STAR_UP BUTTON_UP 130#define STAR_UP BUTTON_UP
132#define STAR_DOWN BUTTON_DOWN 131#define STAR_DOWN BUTTON_DOWN
133#define STAR_TOGGLE_CONTROL_PRE BUTTON_MENU 132#define STAR_TOGGLE_CONTROL BUTTON_MENU
134#define STAR_TOGGLE_CONTROL (BUTTON_MENU | BUTTON_REL) 133#define STAR_LEVEL_UP (BUTTON_POWER | BUTTON_UP)
135#define STAR_LEVEL_UP (BUTTON_POWER | BUTTON_UP) 134#define STAR_LEVEL_DOWN (BUTTON_POWER | BUTTON_DOWN)
136#define STAR_LEVEL_DOWN (BUTTON_POWER | BUTTON_DOWN) 135#define STAR_LEVEL_REPEAT (BUTTON_POWER | BUTTON_RIGHT)
137#define STAR_LEVEL_REPEAT (BUTTON_POWER | BUTTON_RIGHT) 136#define STAR_MENU_RUN BUTTON_RIGHT
138#define STAR_MENU_RUN BUTTON_RIGHT
139 137
140#elif (CONFIG_KEYPAD == IRIVER_H10_PAD) 138#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
141 139
142#define STAR_QUIT BUTTON_POWER 140#define STAR_QUIT BUTTON_POWER
143#define STAR_UP BUTTON_SCROLL_UP 141#define STAR_UP BUTTON_SCROLL_UP
144#define STAR_DOWN BUTTON_SCROLL_DOWN 142#define STAR_DOWN BUTTON_SCROLL_DOWN
145#define STAR_TOGGLE_CONTROL_PRE BUTTON_REW 143#define STAR_TOGGLE_CONTROL BUTTON_REW
146#define STAR_TOGGLE_CONTROL (BUTTON_REW | BUTTON_REL) 144#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_SCROLL_UP)
147#define STAR_LEVEL_UP (BUTTON_PLAY | BUTTON_SCROLL_UP) 145#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_SCROLL_DOWN)
148#define STAR_LEVEL_DOWN (BUTTON_PLAY | BUTTON_SCROLL_DOWN) 146#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_RIGHT)
149#define STAR_LEVEL_REPEAT (BUTTON_PLAY | BUTTON_RIGHT) 147#define STAR_MENU_RUN BUTTON_FF
150#define STAR_MENU_RUN BUTTON_FF
151 148
152#endif 149#endif
153 150
@@ -169,55 +166,18 @@ static int control;
169/* the current board */ 166/* the current board */
170static char board[STAR_HEIGHT][STAR_WIDTH]; 167static char board[STAR_HEIGHT][STAR_WIDTH];
171 168
172#if LCD_DEPTH > 1 169#include "star_tiles.h"
173
174extern const fb_data star_tiles[];
175
176/* size of a tile */
177#if LCD_WIDTH >= 320 && defined( HAVE_LCD_COLOR )
178# define STAR_TILE_SIZE 20
179#elif LCD_WIDTH >= 220 && defined( HAVE_LCD_COLOR )
180# define STAR_TILE_SIZE 13
181#else
182# define STAR_TILE_SIZE 10
183#endif
184
185/* left and top margin */
186#define STAR_OFFSET_X ( ( LCD_WIDTH - STAR_WIDTH * STAR_TILE_SIZE ) / 2 )
187#define STAR_OFFSET_Y ( ( LCD_HEIGHT - ( STAR_HEIGHT + 1 ) * STAR_TILE_SIZE ) / 2 )
188 170
189#define wall 0 171#define TILE_WIDTH BMPWIDTH_star_tiles
190#define space 1 172#define TILE_HEIGHT (BMPHEIGHT_star_tiles/5)
191#define block 2 173#define STAR_OFFSET_X ((LCD_WIDTH - STAR_WIDTH * TILE_WIDTH) / 2)
192#define star 3 174#define STAR_OFFSET_Y ((LCD_HEIGHT - STAR_HEIGHT * TILE_HEIGHT - MAX(TILE_HEIGHT, 8)) / 2)
193#define ball 4
194 175
195#else 176#define WALL 0
196 177#define SPACE 1
197/* left and top margin */ 178#define BLOCK 2
198#define STAR_OFFSET_X 8 179#define STAR 3
199#define STAR_OFFSET_Y 0 180#define BALL 4
200
201/* size of a tile */
202#define STAR_TILE_SIZE 6
203
204/* bitmap of the wall */
205static unsigned char wall_bmp[STAR_TILE_SIZE]
206 = {0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55};
207
208/* bitmap of the star */
209static unsigned char star_bmp[STAR_TILE_SIZE]
210 = {0x00, 0x0c, 0x12, 0x12, 0x0c, 0x00};
211
212/* bitmap of the ball */
213static unsigned char ball_bmp[STAR_TILE_SIZE]
214 = {0x00, 0x0c, 0x1e, 0x1a, 0x0c, 0x00};
215
216/* bitmap of the block */
217static unsigned char block_bmp[STAR_TILE_SIZE]
218 = {0x00, 0x1e, 0x1e, 0x1e, 0x1e, 0x00};
219
220#endif
221 181
222/* bitmap of the arrow animation */ 182/* bitmap of the arrow animation */
223static unsigned char arrow_bmp[4][7] = 183static unsigned char arrow_bmp[4][7] =
@@ -445,7 +405,7 @@ static unsigned char* levels =
445/** 405/**
446 * Display text. 406 * Display text.
447 */ 407 */
448static void star_display_text(char *str, bool waitkey) 408void star_display_text(char *str, bool waitkey)
449{ 409{
450 int chars_by_line; 410 int chars_by_line;
451 int lines_by_screen; 411 int lines_by_screen;
@@ -496,7 +456,7 @@ static void star_display_text(char *str, bool waitkey)
496 456
497 line[chars_for_line] = '\0'; 457 line[chars_for_line] = '\0';
498 458
499 /* test if we have cutted a word. If it is the case we don't have to */ 459 /* test if we have cut a word. If it is the case we don't have to */
500 /* skip the space */ 460 /* skip the space */
501 if (i == chars_by_line && chars_for_line == chars_by_line) 461 if (i == chars_by_line && chars_for_line == chars_by_line)
502 first_char_index += chars_for_line; 462 first_char_index += chars_for_line;
@@ -546,13 +506,14 @@ static void star_display_text(char *str, bool waitkey)
546static void star_transition_update(void) 506static void star_transition_update(void)
547{ 507{
548 int center_x = LCD_WIDTH / 2; 508 int center_x = LCD_WIDTH / 2;
549 int lcd_demi_width = LCD_WIDTH / 2;
550 int center_y = LCD_HEIGHT / 2; 509 int center_y = LCD_HEIGHT / 2;
551 int x; 510 int x = 0;
552 int y = 0; 511 int y = 0;
512#if LCD_WIDTH >= LCD_HEIGHT
513 int lcd_demi_width = LCD_WIDTH / 2;
553 int var_y = 0; 514 int var_y = 0;
554 515
555 for (x = 1 ; x < lcd_demi_width ; x++) 516 for (; x < lcd_demi_width ; x++)
556 { 517 {
557 var_y += LCD_HEIGHT; 518 var_y += LCD_HEIGHT;
558 if (var_y > LCD_WIDTH) 519 if (var_y > LCD_WIDTH)
@@ -560,10 +521,31 @@ static void star_transition_update(void)
560 var_y -= LCD_WIDTH; 521 var_y -= LCD_WIDTH;
561 y++; 522 y++;
562 } 523 }
563 rb->lcd_update_rect(center_x - x, center_y - y, 524 rb->lcd_update_rect(center_x - x, center_y - y, x * 2, 1);
564 x * 2, y * 2); 525 rb->lcd_update_rect(center_x - x, center_y - y, 1, y * 2);
526 rb->lcd_update_rect(center_x + x - 1, center_y - y, 1, y * 2);
527 rb->lcd_update_rect(center_x - x, center_y + y - 1, x * 2, 1);
565 STAR_SLEEP 528 STAR_SLEEP
566 } 529 }
530#else
531 int lcd_demi_height = LCD_HEIGHT / 2;
532 int var_x = 0;
533
534 for (; y < lcd_demi_height ; y++)
535 {
536 var_x += LCD_WIDTH;
537 if (var_x > LCD_HEIGHT)
538 {
539 var_x -= LCD_HEIGHT;
540 x++;
541 }
542 rb->lcd_update_rect(center_x - x, center_y - y, x * 2, 1);
543 rb->lcd_update_rect(center_x - x, center_y - y, 1, y * 2);
544 rb->lcd_update_rect(center_x + x - 1, center_y - y, 1, y * 2);
545 rb->lcd_update_rect(center_x - x, center_y + y - 1, x * 2, 1);
546 STAR_SLEEP
547 }
548#endif
567 rb->lcd_update(); 549 rb->lcd_update();
568} 550}
569 551
@@ -572,36 +554,34 @@ static void star_transition_update(void)
572 */ 554 */
573static void star_display_board_info(void) 555static void star_display_board_info(void)
574{ 556{
575 int label_offset_y = label_offset_y = LCD_HEIGHT - char_height - ( STAR_TILE_SIZE - char_height ) / 2 ; 557 int label_pos_y, tile_pos_y;
576 char str_info[32]; 558 char str_info[32];
577 559
578 rb->snprintf(str_info, sizeof(str_info), "L:%02d S:%02d C:", 560 if (TILE_HEIGHT > char_height)
579 current_level+1, star_count ); 561 {
580 rb->lcd_putsxy(0, label_offset_y, str_info); 562 tile_pos_y = LCD_HEIGHT - TILE_HEIGHT;
581 563 label_pos_y = tile_pos_y + (TILE_HEIGHT - char_height) / 2;
582#if LCD_DEPTH > 1 564 }
583 if( control == STAR_CONTROL_BALL )
584 rb->lcd_bitmap_part( star_tiles, 0,
585 ball*STAR_TILE_SIZE, STAR_TILE_SIZE,
586 107, label_offset_y - ( STAR_TILE_SIZE - char_height ) / 2 - 2,
587 STAR_TILE_SIZE, STAR_TILE_SIZE);
588 else
589 rb->lcd_bitmap_part( star_tiles, 0,
590 block*STAR_TILE_SIZE, STAR_TILE_SIZE,
591 107, label_offset_y - ( STAR_TILE_SIZE - char_height ) / 2 - 2,
592 STAR_TILE_SIZE, STAR_TILE_SIZE);
593 rb->lcd_update_rect(0, label_offset_y - ( STAR_TILE_SIZE - char_height ) / 2 - 2, LCD_WIDTH, STAR_TILE_SIZE );
594#else
595 if (control == STAR_CONTROL_BALL)
596 rb->lcd_mono_bitmap (ball_bmp, 103, label_offset_y + 1, STAR_TILE_SIZE,
597 STAR_TILE_SIZE);
598 else 565 else
599 rb->lcd_mono_bitmap (block_bmp, 103, label_offset_y + 1, STAR_TILE_SIZE, 566 {
600 STAR_TILE_SIZE); 567 label_pos_y = LCD_HEIGHT - char_height;
601 568 tile_pos_y = label_pos_y + (char_height - TILE_HEIGHT) / 2;
602 rb->lcd_update_rect(0, label_offset_y, LCD_WIDTH, char_height); 569 }
603#endif 570
604 571 rb->snprintf(str_info, sizeof(str_info), "L:%02d", current_level + 1);
572 rb->lcd_putsxy(STAR_OFFSET_X, label_pos_y, str_info);
573 rb->snprintf(str_info, sizeof(str_info), "S:%02d", star_count);
574 rb->lcd_putsxy(LCD_WIDTH/2 - 2 * char_width, label_pos_y, str_info);
575 rb->lcd_putsxy(STAR_OFFSET_X + (STAR_WIDTH-1) * TILE_WIDTH - 2 * char_width,
576 label_pos_y, "C:");
577
578 rb->lcd_bitmap_part(star_tiles, 0, control == STAR_CONTROL_BALL ?
579 BALL*TILE_HEIGHT : BLOCK*TILE_HEIGHT, TILE_WIDTH,
580 STAR_OFFSET_X + (STAR_WIDTH-1) * TILE_WIDTH,
581 tile_pos_y, TILE_WIDTH, TILE_HEIGHT);
582
583 rb->lcd_update_rect(0, MIN(label_pos_y, tile_pos_y), LCD_WIDTH,
584 MAX(TILE_HEIGHT, char_height));
605} 585}
606 586
607 587
@@ -626,46 +606,36 @@ static int star_load_level(int current_level)
626 board[y][x] = *ptr_tab; 606 board[y][x] = *ptr_tab;
627 switch (*ptr_tab) 607 switch (*ptr_tab)
628 { 608 {
629#if LCD_DEPTH > 1 609# define DRAW_TILE( a ) \
630# define DRAW_TILE( a ) \ 610 rb->lcd_bitmap_part( star_tiles, 0, \
631 rb->lcd_bitmap_part( star_tiles, 0, \ 611 a*TILE_HEIGHT, TILE_WIDTH, \
632 a*STAR_TILE_SIZE, STAR_TILE_SIZE, \ 612 STAR_OFFSET_X + x * TILE_WIDTH, \
633 STAR_OFFSET_X + x * STAR_TILE_SIZE, \ 613 STAR_OFFSET_Y + y * TILE_HEIGHT, \
634 STAR_OFFSET_Y + y * STAR_TILE_SIZE, \ 614 TILE_WIDTH, TILE_HEIGHT);
635 STAR_TILE_SIZE, STAR_TILE_SIZE);
636#else
637# define DRAW_TILE( a ) \
638 rb->lcd_mono_bitmap ( a ## _bmp, \
639 STAR_OFFSET_X + x * STAR_TILE_SIZE, \
640 STAR_OFFSET_Y + y * STAR_TILE_SIZE, \
641 STAR_TILE_SIZE, STAR_TILE_SIZE);
642#endif
643 case STAR_VOID: 615 case STAR_VOID:
644#if LCD_DEPTH > 1 616 DRAW_TILE( SPACE );
645 DRAW_TILE( space );
646#endif
647 break; 617 break;
648 618
649 case STAR_WALL: 619 case STAR_WALL:
650 DRAW_TILE( wall ); 620 DRAW_TILE( WALL );
651 break; 621 break;
652 622
653 case STAR_STAR: 623 case STAR_STAR:
654 DRAW_TILE( star ); 624 DRAW_TILE( STAR );
655 star_count++; 625 star_count++;
656 break; 626 break;
657 627
658 case STAR_BALL: 628 case STAR_BALL:
659 ball_x = x; 629 ball_x = x;
660 ball_y = y; 630 ball_y = y;
661 DRAW_TILE( ball ); 631 DRAW_TILE( BALL );
662 break; 632 break;
663 633
664 634
665 case STAR_BLOCK: 635 case STAR_BLOCK:
666 block_x = x; 636 block_x = x;
667 block_y = y; 637 block_y = y;
668 DRAW_TILE( block ); 638 DRAW_TILE( BLOCK );
669 break; 639 break;
670 } 640 }
671 ptr_tab++; 641 ptr_tab++;
@@ -677,6 +647,39 @@ static int star_load_level(int current_level)
677 return 1; 647 return 1;
678} 648}
679 649
650static void star_animate_tile(int tile_no, int start_x, int start_y,
651 int delta_x, int delta_y)
652{
653 int i;
654
655 if (delta_x != 0) /* horizontal */
656 {
657 for (i = 1 ; i <= TILE_WIDTH ; i++)
658 {
659 STAR_SLEEP
660 rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT, TILE_WIDTH,
661 start_x, start_y, TILE_WIDTH, TILE_HEIGHT);
662 rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT, TILE_WIDTH,
663 start_x + delta_x * i, start_y, TILE_WIDTH, TILE_HEIGHT);
664 rb->lcd_update_rect(start_x + delta_x * i - (delta_x>0?1:0),
665 start_y, TILE_WIDTH + 1, TILE_HEIGHT);
666 }
667 }
668 else /* vertical */
669 {
670 for (i = 1 ; i <= TILE_HEIGHT ; i++)
671 {
672 STAR_SLEEP
673 rb->lcd_bitmap_part(star_tiles, 0, SPACE * TILE_HEIGHT, TILE_WIDTH,
674 start_x, start_y, TILE_WIDTH, TILE_HEIGHT);
675 rb->lcd_bitmap_part(star_tiles, 0, tile_no * TILE_HEIGHT, TILE_WIDTH,
676 start_x, start_y + delta_y * i, TILE_WIDTH, TILE_HEIGHT);
677 rb->lcd_update_rect(start_x, start_y + delta_y * i - (delta_y>0?1:0),
678 TILE_WIDTH, TILE_HEIGHT + 1);
679 }
680 }
681}
682
680/** 683/**
681 * Run the game. 684 * Run the game.
682 */ 685 */
@@ -684,7 +687,6 @@ static int star_run_game(void)
684{ 687{
685 int move_x = 0; 688 int move_x = 0;
686 int move_y = 0; 689 int move_y = 0;
687 int i;
688 int key; 690 int key;
689 int lastkey = BUTTON_NONE; 691 int lastkey = BUTTON_NONE;
690 692
@@ -728,6 +730,10 @@ static int star_run_game(void)
728 break; 730 break;
729 731
730 case STAR_LEVEL_DOWN: 732 case STAR_LEVEL_DOWN:
733#ifdef STAR_LEVEL_DOWN_PRE
734 if (lastkey != STAR_LEVEL_DOWN_PRE)
735 break;
736#endif
731 if (current_level > 0) 737 if (current_level > 0)
732 { 738 {
733 current_level--; 739 current_level--;
@@ -740,6 +746,10 @@ static int star_run_game(void)
740 break; 746 break;
741 747
742 case STAR_LEVEL_UP: 748 case STAR_LEVEL_UP:
749#ifdef STAR_LEVEL_UP_PRE
750 if (lastkey != STAR_LEVEL_UP_PRE)
751 break;
752#endif
743 if (current_level < STAR_LEVEL_COUNT - 1) 753 if (current_level < STAR_LEVEL_COUNT - 1)
744 { 754 {
745 current_level++; 755 current_level++;
@@ -781,37 +791,9 @@ static int star_run_game(void)
781 || board[ball_y + move_y][ball_x + move_x] == STAR_STAR)) 791 || board[ball_y + move_y][ball_x + move_x] == STAR_STAR))
782 792
783 { 793 {
784 for (i = 0 ; i <= STAR_TILE_SIZE ; i++) 794 star_animate_tile(BALL, STAR_OFFSET_X + ball_x * TILE_WIDTH,
785 { 795 STAR_OFFSET_Y + ball_y * TILE_HEIGHT,
786#if LCD_DEPTH > 1 796 move_x, move_y);
787 rb->lcd_bitmap_part(
788 star_tiles, 0, space * STAR_TILE_SIZE, STAR_TILE_SIZE,
789 STAR_OFFSET_X + ball_x * STAR_TILE_SIZE,
790 STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE,
791 STAR_TILE_SIZE, STAR_TILE_SIZE);
792 rb->lcd_bitmap_part(
793 star_tiles, 0, ball * STAR_TILE_SIZE, STAR_TILE_SIZE,
794 STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * i,
795 STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * i,
796 STAR_TILE_SIZE, STAR_TILE_SIZE);
797 rb->lcd_update_rect(
798 STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * (i>0?i-1:0),
799 STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * (i>0?i-1:0),
800 STAR_TILE_SIZE+(i>0?0:1), STAR_TILE_SIZE+(i>0?0:1));
801#else
802 rb->lcd_mono_bitmap(
803 ball_bmp,
804 STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * i,
805 STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * i,
806 STAR_TILE_SIZE, STAR_TILE_SIZE);
807 rb->lcd_update_rect(
808 STAR_OFFSET_X + ball_x * STAR_TILE_SIZE + move_x * i,
809 STAR_OFFSET_Y + ball_y * STAR_TILE_SIZE + move_y * i,
810 STAR_TILE_SIZE, STAR_TILE_SIZE);
811#endif
812
813 STAR_SLEEP
814 }
815 ball_x += move_x; 797 ball_x += move_x;
816 ball_y += move_y; 798 ball_y += move_y;
817 799
@@ -830,37 +812,9 @@ static int star_run_game(void)
830 board[block_y][block_x] = STAR_VOID; 812 board[block_y][block_x] = STAR_VOID;
831 while (board[block_y + move_y][block_x + move_x] == STAR_VOID) 813 while (board[block_y + move_y][block_x + move_x] == STAR_VOID)
832 { 814 {
833 for (i = 0 ; i <= STAR_TILE_SIZE ; i++) 815 star_animate_tile(BLOCK, STAR_OFFSET_X + block_x * TILE_WIDTH,
834 { 816 STAR_OFFSET_Y + block_y * TILE_HEIGHT,
835#if LCD_DEPTH > 1 817 move_x, move_y);
836 rb->lcd_bitmap_part(
837 star_tiles, 0, space * STAR_TILE_SIZE, STAR_TILE_SIZE,
838 STAR_OFFSET_X + block_x * STAR_TILE_SIZE,
839 STAR_OFFSET_Y + block_y * STAR_TILE_SIZE,
840 STAR_TILE_SIZE, STAR_TILE_SIZE);
841 rb->lcd_bitmap_part(
842 star_tiles, 0, block * STAR_TILE_SIZE, STAR_TILE_SIZE,
843 STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * i,
844 STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * i,
845 STAR_TILE_SIZE, STAR_TILE_SIZE);
846 rb->lcd_update_rect(
847 STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * (i>0?i-1:0),
848 STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * (i>0?i-1:0),
849 STAR_TILE_SIZE+(i>0?0:1), STAR_TILE_SIZE+(i>0?0:1));
850#else
851 rb->lcd_mono_bitmap(
852 block_bmp,
853 STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * i,
854 STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * i,
855 STAR_TILE_SIZE, STAR_TILE_SIZE);
856 rb->lcd_update_rect(
857 STAR_OFFSET_X + block_x * STAR_TILE_SIZE + move_x * i,
858 STAR_OFFSET_Y + block_y * STAR_TILE_SIZE + move_y * i,
859 STAR_TILE_SIZE, STAR_TILE_SIZE);
860#endif
861
862 STAR_SLEEP
863 }
864 block_x += move_x; 818 block_x += move_x;
865 block_y += move_y; 819 block_y += move_y;
866 } 820 }
@@ -1046,21 +1000,12 @@ static int star_menu(void)
1046 star_choose_level(); 1000 star_choose_level();
1047 break; 1001 break;
1048 case 2: 1002 case 2:
1049#if LCD_DEPTH > 1
1050 star_display_text( 1003 star_display_text(
1051 "INFO\n\n" 1004 "INFO\n\n"
1052 "Take all the stars to go to the next level. " 1005 "Take all the stars to go to the next level. "
1053 "You can toggle control with the block to " 1006 "You can toggle control with the block to "
1054 "use it as a mobile wall. The block cannot " 1007 "use it as a mobile wall. The block cannot "
1055 "take stars.", true); 1008 "take stars.", true);
1056#else
1057 star_display_text(
1058 "INFO\n\n"
1059 "Take all the \"o\"s to go to the next level. "
1060 "You can toggle control with the block to "
1061 "use it as a mobile wall. The block cannot "
1062 "take \"o\".", true);
1063#endif
1064 break; 1009 break;
1065 case 3: 1010 case 3:
1066#if CONFIG_KEYPAD == RECORDER_PAD 1011#if CONFIG_KEYPAD == RECORDER_PAD
@@ -1079,10 +1024,10 @@ static int star_menu(void)
1079 "[M >] Next level", true); 1024 "[M >] Next level", true);
1080#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) 1025#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
1081 star_display_text("KEYS\n\n" 1026 star_display_text("KEYS\n\n"
1082 "[MODE/SELECT] Toggle Ctrl\n" 1027 "[MODE/NAVI] Toggle Ctrl\n"
1083 "[OFF] Exit\n" 1028 "[OFF] Exit\n"
1084 "[ON + LEFT] Prev. level\n" 1029 "[ON + LEFT] Prev. level\n"
1085 "[ON + SELECT] Reset level\n" 1030 "[ON + NAVI] Reset level\n"
1086 "[ON + RIGHT] Next level", true); 1031 "[ON + RIGHT] Next level", true);
1087#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) 1032#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD)
1088 star_display_text("KEYS\n\n" 1033 star_display_text("KEYS\n\n"
@@ -1095,9 +1040,9 @@ static int star_menu(void)
1095 star_display_text("KEYS\n\n" 1040 star_display_text("KEYS\n\n"
1096 "[SELECT] Toggle Ctl\n" 1041 "[SELECT] Toggle Ctl\n"
1097 "[POWER] Exit\n" 1042 "[POWER] Exit\n"
1098 "[PLAY+DOWN] Prev. level\n" 1043 "[REC..] Prev. level\n"
1099 "[PLAY+RIGHT] Reset level\n" 1044 "[PLAY] Reset level\n"
1100 "[PLAY+UP] Next level", true); 1045 "[REC] Next level", true);
1101#elif CONFIG_KEYPAD == GIGABEAT_PAD 1046#elif CONFIG_KEYPAD == GIGABEAT_PAD
1102 star_display_text("KEYS\n\n" 1047 star_display_text("KEYS\n\n"
1103 "[MENU] Toggle Ctl\n" 1048 "[MENU] Toggle Ctl\n"