diff options
author | Jens Arnold <amiconn@rockbox.org> | 2006-10-21 00:24:54 +0000 |
---|---|---|
committer | Jens Arnold <amiconn@rockbox.org> | 2006-10-21 00:24:54 +0000 |
commit | 4f1ca13c235272bff266f1d35f670def75c5a021 (patch) | |
tree | d82a8e4e3b9132ce49cc57e2fb301c7930c165c2 /apps | |
parent | 9d3fddaa634752fa29d9562e28d492f2db58aeea (diff) | |
download | rockbox-4f1ca13c235272bff266f1d35f670def75c5a021.tar.gz rockbox-4f1ca13c235272bff266f1d35f670def75c5a021.zip |
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
Diffstat (limited to 'apps')
-rw-r--r-- | apps/plugins/bitmaps/native/SOURCES | 22 | ||||
-rwxr-xr-x | apps/plugins/bitmaps/native/star_tiles.11x11.bmp | bin | 0 -> 2034 bytes | |||
-rwxr-xr-x | apps/plugins/bitmaps/native/star_tiles.6x7.mono.bmp | bin | 0 -> 184 bytes | |||
-rwxr-xr-x | apps/plugins/bitmaps/native/star_tiles.8x8.bmp | bin | 0 -> 1014 bytes | |||
-rwxr-xr-x | apps/plugins/bitmaps/native/star_tiles.8x8.grey.bmp | bin | 0 -> 390 bytes | |||
-rw-r--r-- | apps/plugins/star.c | 433 |
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 |
158 | star_tiles.20x20.bmp | 158 | star_tiles.20x20.bmp |
159 | #elif LCD_WIDTH >= 220 | 159 | #elif LCD_WIDTH >= 208 && LCD_HEIGHT >= 125 |
160 | star_tiles.13x13.bmp | 160 | star_tiles.13x13.bmp |
161 | #else | 161 | #elif LCD_WIDTH >= 176 && LCD_HEIGHT >= 107 |
162 | star_tiles.11x11.bmp | ||
163 | #elif LCD_WIDTH >= 160 && LCD_HEIGHT >= 98 | ||
162 | star_tiles.10x10.bmp | 164 | star_tiles.10x10.bmp |
165 | #elif LCD_WIDTH >= 128 && LCD_HEIGHT >= 80 | ||
166 | star_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 | ||
165 | star_tiles.10x10.grey.bmp | 170 | star_tiles.10x10.grey.bmp |
171 | #elif LCD_WIDTH >= 128 && LCD_HEIGHT >= 80 | ||
172 | star_tiles.8x8.grey.bmp | ||
173 | #endif | ||
174 | #else /* monochrome */ | ||
175 | #if LCD_WIDTH >= 112 && LCD_HEIGHT >= 62 | ||
176 | star_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 | ||
22 | PLUGIN_HEADER | 22 | PLUGIN_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 */ |
170 | static char board[STAR_HEIGHT][STAR_WIDTH]; | 167 | static char board[STAR_HEIGHT][STAR_WIDTH]; |
171 | 168 | ||
172 | #if LCD_DEPTH > 1 | 169 | #include "star_tiles.h" |
173 | |||
174 | extern 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 */ | ||
205 | static unsigned char wall_bmp[STAR_TILE_SIZE] | ||
206 | = {0xaa, 0x55, 0xaa, 0x55, 0xaa, 0x55}; | ||
207 | |||
208 | /* bitmap of the star */ | ||
209 | static unsigned char star_bmp[STAR_TILE_SIZE] | ||
210 | = {0x00, 0x0c, 0x12, 0x12, 0x0c, 0x00}; | ||
211 | |||
212 | /* bitmap of the ball */ | ||
213 | static unsigned char ball_bmp[STAR_TILE_SIZE] | ||
214 | = {0x00, 0x0c, 0x1e, 0x1a, 0x0c, 0x00}; | ||
215 | |||
216 | /* bitmap of the block */ | ||
217 | static 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 */ |
223 | static unsigned char arrow_bmp[4][7] = | 183 | static unsigned char arrow_bmp[4][7] = |
@@ -445,7 +405,7 @@ static unsigned char* levels = | |||
445 | /** | 405 | /** |
446 | * Display text. | 406 | * Display text. |
447 | */ | 407 | */ |
448 | static void star_display_text(char *str, bool waitkey) | 408 | void 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) | |||
546 | static void star_transition_update(void) | 506 | static 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 | */ |
573 | static void star_display_board_info(void) | 555 | static 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 | ||
650 | static 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" |