diff options
-rw-r--r-- | apps/plugins/SOURCES | 3 | ||||
-rw-r--r-- | apps/plugins/bitmaps/native/SOURCES | 2 | ||||
-rwxr-xr-x | apps/plugins/bitmaps/native/jewels.138x110x1.bmp | bin | 0 -> 478 bytes | |||
-rw-r--r-- | apps/plugins/jewels.c | 562 |
4 files changed, 364 insertions, 203 deletions
diff --git a/apps/plugins/SOURCES b/apps/plugins/SOURCES index e291cc455d..190d625829 100644 --- a/apps/plugins/SOURCES +++ b/apps/plugins/SOURCES | |||
@@ -33,10 +33,7 @@ mandelbrot.c | |||
33 | #endif | 33 | #endif |
34 | 34 | ||
35 | solitaire.c | 35 | solitaire.c |
36 | #if (LCD_WIDTH != 138) | ||
37 | /* These need adjusting for the Mini's screen */ | ||
38 | bejeweled.c | 36 | bejeweled.c |
39 | #endif | ||
40 | bounce.c | 37 | bounce.c |
41 | #if (LCD_WIDTH != 138) && (LCD_WIDTH != 128) | 38 | #if (LCD_WIDTH != 138) && (LCD_WIDTH != 128) |
42 | /* These need adjusting for the Mini's and iRiver if'p screen */ | 39 | /* These need adjusting for the Mini's and iRiver if'p screen */ |
diff --git a/apps/plugins/bitmaps/native/SOURCES b/apps/plugins/bitmaps/native/SOURCES index bd1a5cb3c1..11f6bd3d11 100644 --- a/apps/plugins/bitmaps/native/SOURCES +++ b/apps/plugins/bitmaps/native/SOURCES | |||
@@ -5,6 +5,8 @@ | |||
5 | bejeweled_jewels.112x64x1.bmp | 5 | bejeweled_jewels.112x64x1.bmp |
6 | #elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 64) | 6 | #elif (LCD_WIDTH == 128) && (LCD_HEIGHT == 64) |
7 | bejeweled_jewels.112x64x1.bmp | 7 | bejeweled_jewels.112x64x1.bmp |
8 | #elif (LCD_WIDTH == 138) && (LCD_HEIGHT == 110) | ||
9 | bejeweled_jewels.138x110x1.bmp | ||
8 | #elif (LCD_WIDTH == 160) && (LCD_HEIGHT == 128) && !defined(HAVE_LCD_COLOR) | 10 | #elif (LCD_WIDTH == 160) && (LCD_HEIGHT == 128) && !defined(HAVE_LCD_COLOR) |
9 | bejeweled_jewels.160x128x1.bmp | 11 | bejeweled_jewels.160x128x1.bmp |
10 | #elif (LCD_WIDTH == 160) && (LCD_HEIGHT == 128) && defined(HAVE_LCD_COLOR) | 12 | #elif (LCD_WIDTH == 160) && (LCD_HEIGHT == 128) && defined(HAVE_LCD_COLOR) |
diff --git a/apps/plugins/bitmaps/native/jewels.138x110x1.bmp b/apps/plugins/bitmaps/native/jewels.138x110x1.bmp new file mode 100755 index 0000000000..eea579736f --- /dev/null +++ b/apps/plugins/bitmaps/native/jewels.138x110x1.bmp | |||
Binary files differ | |||
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c index 3652839f64..eb44e4bd81 100644 --- a/apps/plugins/jewels.c +++ b/apps/plugins/jewels.c | |||
@@ -25,71 +25,56 @@ | |||
25 | 25 | ||
26 | PLUGIN_HEADER | 26 | PLUGIN_HEADER |
27 | 27 | ||
28 | /* button definitions */ | 28 | /* button definitions, every keypad must only have directions & select */ |
29 | #if CONFIG_KEYPAD == RECORDER_PAD | 29 | #if CONFIG_KEYPAD == RECORDER_PAD |
30 | #define BEJEWELED_UP BUTTON_UP | 30 | #define BEJEWELED_UP BUTTON_UP |
31 | #define BEJEWELED_DOWN BUTTON_DOWN | 31 | #define BEJEWELED_DOWN BUTTON_DOWN |
32 | #define BEJEWELED_LEFT BUTTON_LEFT | 32 | #define BEJEWELED_LEFT BUTTON_LEFT |
33 | #define BEJEWELED_RIGHT BUTTON_RIGHT | 33 | #define BEJEWELED_RIGHT BUTTON_RIGHT |
34 | #define BEJEWELED_QUIT BUTTON_OFF | ||
35 | #define BEJEWELED_START BUTTON_ON | ||
36 | #define BEJEWELED_SELECT BUTTON_PLAY | 34 | #define BEJEWELED_SELECT BUTTON_PLAY |
37 | #define BEJEWELED_RESUME BUTTON_F1 | 35 | #define BEJEWELED_CANCEL BUTTON_OFF |
38 | 36 | ||
39 | #elif CONFIG_KEYPAD == ONDIO_PAD | 37 | #elif CONFIG_KEYPAD == ONDIO_PAD |
40 | #define BEJEWELED_UP BUTTON_UP | 38 | #define BEJEWELED_UP BUTTON_UP |
41 | #define BEJEWELED_DOWN BUTTON_DOWN | 39 | #define BEJEWELED_DOWN BUTTON_DOWN |
42 | #define BEJEWELED_LEFT BUTTON_LEFT | 40 | #define BEJEWELED_LEFT BUTTON_LEFT |
43 | #define BEJEWELED_RIGHT BUTTON_RIGHT | 41 | #define BEJEWELED_RIGHT BUTTON_RIGHT |
44 | #define BEJEWELED_QUIT BUTTON_OFF | 42 | #define BEJEWELED_SELECT BUTTON_MENU |
45 | #define BEJEWELED_START BUTTON_RIGHT | 43 | #define BEJEWELED_CANCEL BUTTON_OFF |
46 | #define BEJEWELED_SELECT (BUTTON_MENU|BUTTON_REL) | ||
47 | #define BEJEWELED_SELECT_PRE BUTTON_MENU | ||
48 | #define BEJEWELED_RESUME (BUTTON_MENU|BUTTON_OFF) | ||
49 | 44 | ||
50 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | 45 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) |
51 | #define BEJEWELED_UP BUTTON_UP | 46 | #define BEJEWELED_UP BUTTON_UP |
52 | #define BEJEWELED_DOWN BUTTON_DOWN | 47 | #define BEJEWELED_DOWN BUTTON_DOWN |
53 | #define BEJEWELED_LEFT BUTTON_LEFT | 48 | #define BEJEWELED_LEFT BUTTON_LEFT |
54 | #define BEJEWELED_RIGHT BUTTON_RIGHT | 49 | #define BEJEWELED_RIGHT BUTTON_RIGHT |
55 | #define BEJEWELED_QUIT BUTTON_OFF | ||
56 | #define BEJEWELED_START BUTTON_ON | ||
57 | #define BEJEWELED_SELECT BUTTON_SELECT | 50 | #define BEJEWELED_SELECT BUTTON_SELECT |
58 | #define BEJEWELED_RESUME BUTTON_MODE | 51 | #define BEJEWELED_CANCEL BUTTON_OFF |
59 | 52 | ||
60 | #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) | 53 | #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) |
61 | #define BEJEWELED_SCROLLWHEEL | 54 | #define BEJEWELED_SCROLLWHEEL |
62 | #define BEJEWELED_UP BUTTON_MENU | 55 | #define BEJEWELED_UP BUTTON_MENU |
63 | #define BEJEWELED_DOWN BUTTON_PLAY | 56 | #define BEJEWELED_DOWN BUTTON_PLAY |
64 | #define BEJEWELED_LEFT BUTTON_LEFT | 57 | #define BEJEWELED_LEFT BUTTON_LEFT |
65 | #define BEJEWELED_RIGHT BUTTON_RIGHT | 58 | #define BEJEWELED_RIGHT BUTTON_RIGHT |
66 | #define BEJEWELED_PREV BUTTON_SCROLL_BACK | 59 | #define BEJEWELED_PREV BUTTON_SCROLL_BACK |
67 | #define BEJEWELED_NEXT BUTTON_SCROLL_FWD | 60 | #define BEJEWELED_NEXT BUTTON_SCROLL_FWD |
68 | #define BEJEWELED_QUIT (BUTTON_SELECT|BUTTON_MENU) | 61 | #define BEJEWELED_SELECT BUTTON_SELECT |
69 | #define BEJEWELED_START BUTTON_PLAY | ||
70 | #define BEJEWELED_SELECT (BUTTON_SELECT|BUTTON_REL) | ||
71 | #define BEJEWELED_SELECT_PRE BUTTON_SELECT | ||
72 | #define BEJEWELED_RESUME (BUTTON_SELECT|BUTTON_PLAY) | ||
73 | 62 | ||
74 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | 63 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD |
75 | #define BEJEWELED_UP BUTTON_UP | 64 | #define BEJEWELED_UP BUTTON_UP |
76 | #define BEJEWELED_DOWN BUTTON_DOWN | 65 | #define BEJEWELED_DOWN BUTTON_DOWN |
77 | #define BEJEWELED_LEFT BUTTON_LEFT | 66 | #define BEJEWELED_LEFT BUTTON_LEFT |
78 | #define BEJEWELED_RIGHT BUTTON_RIGHT | 67 | #define BEJEWELED_RIGHT BUTTON_RIGHT |
79 | #define BEJEWELED_QUIT BUTTON_PLAY | ||
80 | #define BEJEWELED_START BUTTON_MODE | ||
81 | #define BEJEWELED_SELECT BUTTON_SELECT | 68 | #define BEJEWELED_SELECT BUTTON_SELECT |
82 | #define BEJEWELED_RESUME BUTTON_EQ | 69 | #define BEJEWELED_CANCEL BUTTON_PLAY |
83 | 70 | ||
84 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD | 71 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD |
85 | #define BEJEWELED_UP BUTTON_UP | 72 | #define BEJEWELED_UP BUTTON_UP |
86 | #define BEJEWELED_DOWN BUTTON_DOWN | 73 | #define BEJEWELED_DOWN BUTTON_DOWN |
87 | #define BEJEWELED_LEFT BUTTON_LEFT | 74 | #define BEJEWELED_LEFT BUTTON_LEFT |
88 | #define BEJEWELED_RIGHT BUTTON_RIGHT | 75 | #define BEJEWELED_RIGHT BUTTON_RIGHT |
89 | #define BEJEWELED_QUIT BUTTON_POWER | ||
90 | #define BEJEWELED_START BUTTON_PLAY | ||
91 | #define BEJEWELED_SELECT BUTTON_MENU | 76 | #define BEJEWELED_SELECT BUTTON_MENU |
92 | #define BEJEWELED_RESUME BUTTON_REC | 77 | #define BEJEWELED_CANCEL BUTTON_PLAY |
93 | 78 | ||
94 | #else | 79 | #else |
95 | #error BEJEWELED: Unsupported keypad | 80 | #error BEJEWELED: Unsupported keypad |
@@ -123,6 +108,13 @@ PLUGIN_HEADER | |||
123 | #define YOFS 0 | 108 | #define YOFS 0 |
124 | #define NUM_SCORES 10 | 109 | #define NUM_SCORES 10 |
125 | 110 | ||
111 | /* use 13x13 tiles (iPod Mini) */ | ||
112 | #elif (LCD_HEIGHT == 110) && (LCD_WIDTH == 138) | ||
113 | #define TILE_WIDTH 13 | ||
114 | #define TILE_HEIGHT 13 | ||
115 | #define YOFS 6 | ||
116 | #define NUM_SCORES 10 | ||
117 | |||
126 | /* use 10x8 tiles (iFP 700) */ | 118 | /* use 10x8 tiles (iFP 700) */ |
127 | #elif (LCD_HEIGHT == 64) && (LCD_WIDTH == 128) | 119 | #elif (LCD_HEIGHT == 64) && (LCD_WIDTH == 128) |
128 | #define TILE_WIDTH 10 | 120 | #define TILE_WIDTH 10 |
@@ -141,14 +133,6 @@ PLUGIN_HEADER | |||
141 | #error BEJEWELED: Unsupported LCD | 133 | #error BEJEWELED: Unsupported LCD |
142 | #endif | 134 | #endif |
143 | 135 | ||
144 | /* tile background colors */ | ||
145 | #if defined(HAVE_LCD_COLOR) | ||
146 | static const unsigned bejeweled_bkgd[2] = { | ||
147 | LCD_RGBPACK(104, 63, 63), | ||
148 | LCD_RGBPACK(83, 44, 44) | ||
149 | }; | ||
150 | #endif | ||
151 | |||
152 | /* save files */ | 136 | /* save files */ |
153 | #define SCORE_FILE PLUGIN_DIR "/bejeweled.score" | 137 | #define SCORE_FILE PLUGIN_DIR "/bejeweled.score" |
154 | #define SAVE_FILE PLUGIN_DIR "/bejeweled.save" | 138 | #define SAVE_FILE PLUGIN_DIR "/bejeweled.save" |
@@ -173,7 +157,54 @@ static const unsigned bejeweled_bkgd[2] = { | |||
173 | #define LEVEL_PTS 100 | 157 | #define LEVEL_PTS 100 |
174 | 158 | ||
175 | /* animation frame rate */ | 159 | /* animation frame rate */ |
176 | #define FPS 20 | 160 | #define MAX_FPS 20 |
161 | |||
162 | /* menu values */ | ||
163 | #define FONT_HEIGHT 8 | ||
164 | #define MAX_MITEMS 5 | ||
165 | #define MENU_WIDTH 100 | ||
166 | |||
167 | /* menu results */ | ||
168 | enum menu_result { | ||
169 | MRES_NONE, | ||
170 | MRES_NEW, | ||
171 | MRES_SAVE, | ||
172 | MRES_RESUME, | ||
173 | MRES_SCORES, | ||
174 | MRES_HELP, | ||
175 | MRES_QUIT | ||
176 | }; | ||
177 | |||
178 | /* menu commands */ | ||
179 | enum menu_cmd { | ||
180 | MCMD_NONE, | ||
181 | MCMD_NEXT, | ||
182 | MCMD_PREV, | ||
183 | MCMD_SELECT | ||
184 | }; | ||
185 | |||
186 | /* menus */ | ||
187 | struct bejeweled_menu { | ||
188 | char *title; | ||
189 | bool hasframe; | ||
190 | int selected; | ||
191 | int itemcnt; | ||
192 | struct bejeweled_menuitem { | ||
193 | char *text; | ||
194 | enum menu_result res; | ||
195 | } items[MAX_MITEMS]; | ||
196 | } bjmenu[] = { | ||
197 | {"Bejeweled", false, 0, 5, | ||
198 | {{"New Game", MRES_NEW}, | ||
199 | {"Resume Game", MRES_RESUME}, | ||
200 | {"High Scores", MRES_SCORES}, | ||
201 | {"Help", MRES_HELP}, | ||
202 | {"Quit", MRES_QUIT}}}, | ||
203 | {"Menu", true, 0, 3, | ||
204 | {{"Resume Game", MRES_RESUME}, | ||
205 | {"Save Game", MRES_SAVE}, | ||
206 | {"End Game", MRES_QUIT}}} | ||
207 | }; | ||
177 | 208 | ||
178 | /* global rockbox api */ | 209 | /* global rockbox api */ |
179 | static struct plugin_api* rb; | 210 | static struct plugin_api* rb; |
@@ -181,6 +212,14 @@ static struct plugin_api* rb; | |||
181 | /* external bitmaps */ | 212 | /* external bitmaps */ |
182 | extern const fb_data bejeweled_jewels[]; | 213 | extern const fb_data bejeweled_jewels[]; |
183 | 214 | ||
215 | /* tile background colors */ | ||
216 | #ifdef HAVE_LCD_COLOR | ||
217 | static const unsigned bejeweled_bkgd[2] = { | ||
218 | LCD_RGBPACK(104, 63, 63), | ||
219 | LCD_RGBPACK(83, 44, 44) | ||
220 | }; | ||
221 | #endif | ||
222 | |||
184 | /* the tile struct | 223 | /* the tile struct |
185 | * type is the jewel number 0-7 | 224 | * type is the jewel number 0-7 |
186 | * falling if the jewel is falling | 225 | * falling if the jewel is falling |
@@ -318,13 +357,77 @@ static void bejeweled_drawboard(struct game_context* bj) { | |||
318 | rb->snprintf(str, 6, "%d", (bj->level-1)*LEVEL_PTS+bj->score); | 357 | rb->snprintf(str, 6, "%d", (bj->level-1)*LEVEL_PTS+bj->score); |
319 | rb->lcd_getstringsize(str, &w, &h); | 358 | rb->lcd_getstringsize(str, &w, &h); |
320 | rb->lcd_putsxy(LCD_WIDTH-(LCD_WIDTH-BJ_WIDTH*TILE_WIDTH)/2-w/2, | 359 | rb->lcd_putsxy(LCD_WIDTH-(LCD_WIDTH-BJ_WIDTH*TILE_WIDTH)/2-w/2, |
321 | LCD_HEIGHT-8, | 360 | LCD_HEIGHT-8, str); |
322 | str); | ||
323 | 361 | ||
324 | rb->lcd_update(); | 362 | rb->lcd_update(); |
325 | } | 363 | } |
326 | 364 | ||
327 | /***************************************************************************** | 365 | /***************************************************************************** |
366 | * bejeweled_showmenu() displays the chosen menu after performing the chosen | ||
367 | * menu command. | ||
368 | ******************************************************************************/ | ||
369 | static enum menu_result bejeweled_showmenu(struct bejeweled_menu* menu, | ||
370 | enum menu_cmd cmd) { | ||
371 | int i; | ||
372 | int w, h; | ||
373 | int firstline; | ||
374 | int adj; | ||
375 | |||
376 | /* handle menu command */ | ||
377 | switch(cmd) { | ||
378 | case MCMD_NEXT: | ||
379 | menu->selected = (menu->selected+1)%menu->itemcnt; | ||
380 | break; | ||
381 | |||
382 | case MCMD_PREV: | ||
383 | menu->selected = (menu->selected-1+menu->itemcnt)%menu->itemcnt; | ||
384 | break; | ||
385 | |||
386 | case MCMD_SELECT: | ||
387 | return menu->items[menu->selected].res; | ||
388 | |||
389 | default: | ||
390 | break; | ||
391 | } | ||
392 | |||
393 | /* clear menu area */ | ||
394 | firstline = (LCD_HEIGHT/FONT_HEIGHT-(menu->itemcnt+3))/2; | ||
395 | |||
396 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
397 | rb->lcd_fillrect((LCD_WIDTH-MENU_WIDTH)/2, firstline*FONT_HEIGHT, | ||
398 | MENU_WIDTH, (menu->itemcnt+3)*FONT_HEIGHT); | ||
399 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
400 | |||
401 | if(menu->hasframe) { | ||
402 | rb->lcd_drawrect((LCD_WIDTH-MENU_WIDTH)/2-1, firstline*FONT_HEIGHT-1, | ||
403 | MENU_WIDTH+2, (menu->itemcnt+3)*FONT_HEIGHT+2); | ||
404 | rb->lcd_hline((LCD_WIDTH-MENU_WIDTH)/2-1, | ||
405 | (LCD_WIDTH-MENU_WIDTH)/2-1+MENU_WIDTH+2, | ||
406 | (firstline+1)*FONT_HEIGHT); | ||
407 | } | ||
408 | |||
409 | /* draw menu items */ | ||
410 | rb->lcd_getstringsize(menu->title, &w, &h); | ||
411 | rb->lcd_putsxy((LCD_WIDTH-w)/2, firstline*FONT_HEIGHT, menu->title); | ||
412 | |||
413 | for(i=0; i<menu->itemcnt; i++) { | ||
414 | if(i == menu->selected) { | ||
415 | rb->lcd_set_drawmode(DRMODE_SOLID|DRMODE_INVERSEVID); | ||
416 | } | ||
417 | rb->lcd_putsxy((LCD_WIDTH-MENU_WIDTH)/2, (firstline+i+2)*FONT_HEIGHT, | ||
418 | menu->items[i].text); | ||
419 | if(i == menu->selected) { | ||
420 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
421 | } | ||
422 | } | ||
423 | |||
424 | adj = (firstline == 0 ? 0 : 1); | ||
425 | rb->lcd_update_rect((LCD_WIDTH-MENU_WIDTH)/2-1, firstline*FONT_HEIGHT-adj, | ||
426 | MENU_WIDTH+2, (menu->itemcnt+3)*FONT_HEIGHT+2*adj); | ||
427 | return MRES_NONE; | ||
428 | } | ||
429 | |||
430 | /***************************************************************************** | ||
328 | * bejeweled_putjewels() makes the jewels fall to fill empty spots and adds | 431 | * bejeweled_putjewels() makes the jewels fall to fill empty spots and adds |
329 | * new random jewels at the empty spots at the top of each row. | 432 | * new random jewels at the empty spots at the top of each row. |
330 | ******************************************************************************/ | 433 | ******************************************************************************/ |
@@ -412,13 +515,15 @@ static void bejeweled_putjewels(struct game_context* bj){ | |||
412 | } | 515 | } |
413 | } | 516 | } |
414 | 517 | ||
415 | rb->lcd_update(); | 518 | rb->lcd_update_rect(0, 0, TILE_WIDTH*8, LCD_HEIGHT); |
416 | bejeweled_setcolors(); | 519 | bejeweled_setcolors(); |
417 | 520 | ||
418 | /* framerate limiting */ | 521 | /* framerate limiting */ |
419 | currenttick = *rb->current_tick; | 522 | currenttick = *rb->current_tick; |
420 | if(currenttick-lasttick < HZ/FPS) { | 523 | if(currenttick-lasttick < HZ/MAX_FPS) { |
421 | rb->sleep((HZ/FPS)-(currenttick-lasttick)); | 524 | rb->sleep((HZ/MAX_FPS)-(currenttick-lasttick)); |
525 | } else { | ||
526 | rb->yield(); | ||
422 | } | 527 | } |
423 | lasttick = currenttick; | 528 | lasttick = currenttick; |
424 | } | 529 | } |
@@ -650,13 +755,15 @@ static unsigned int bejeweled_swapjewels(struct game_context* bj, | |||
650 | rb->lcd_set_drawmode(DRMODE_SOLID); | 755 | rb->lcd_set_drawmode(DRMODE_SOLID); |
651 | #endif | 756 | #endif |
652 | 757 | ||
653 | rb->lcd_update(); | 758 | rb->lcd_update_rect(0, 0, TILE_WIDTH*8, LCD_HEIGHT); |
654 | bejeweled_setcolors(); | 759 | bejeweled_setcolors(); |
655 | 760 | ||
656 | /* framerate limiting */ | 761 | /* framerate limiting */ |
657 | currenttick = *rb->current_tick; | 762 | currenttick = *rb->current_tick; |
658 | if(currenttick-lasttick < HZ/FPS) { | 763 | if(currenttick-lasttick < HZ/MAX_FPS) { |
659 | rb->sleep((HZ/FPS)-(currenttick-lasttick)); | 764 | rb->sleep((HZ/MAX_FPS)-(currenttick-lasttick)); |
765 | } else { | ||
766 | rb->yield(); | ||
660 | } | 767 | } |
661 | lasttick = currenttick; | 768 | lasttick = currenttick; |
662 | } | 769 | } |
@@ -939,12 +1046,12 @@ static int bejeweled(struct game_context* bj) { | |||
939 | int i, j; | 1046 | int i, j; |
940 | int w, h; | 1047 | int w, h; |
941 | int button; | 1048 | int button; |
942 | int lastbutton = BUTTON_NONE; | ||
943 | char str[18]; | 1049 | char str[18]; |
944 | char *title = "Bejeweled"; | ||
945 | bool startgame = false; | 1050 | bool startgame = false; |
946 | bool showscores = false; | 1051 | bool inmenu = false; |
947 | bool selected = false; | 1052 | bool selected = false; |
1053 | enum menu_cmd cmd = MCMD_NONE; | ||
1054 | enum menu_result res; | ||
948 | 1055 | ||
949 | /* the cursor coordinates */ | 1056 | /* the cursor coordinates */ |
950 | int x=0, y=0; | 1057 | int x=0, y=0; |
@@ -955,128 +1062,138 @@ static int bejeweled(struct game_context* bj) { | |||
955 | /******************** | 1062 | /******************** |
956 | * menu * | 1063 | * menu * |
957 | ********************/ | 1064 | ********************/ |
958 | while(!startgame){ | 1065 | rb->lcd_clear_display(); |
959 | rb->lcd_clear_display(); | ||
960 | |||
961 | if(!showscores) { | ||
962 | /* welcome screen to display key bindings */ | ||
963 | rb->lcd_getstringsize(title, &w, &h); | ||
964 | rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, title); | ||
965 | #if CONFIG_KEYPAD == RECORDER_PAD | ||
966 | rb->lcd_puts(0, 1, "ON to start"); | ||
967 | rb->lcd_puts(0, 2, "F1 to save/resume"); | ||
968 | rb->lcd_puts(0, 3, "OFF to exit"); | ||
969 | rb->lcd_puts(0, 4, "PLAY to select"); | ||
970 | rb->lcd_puts(0, 5, "& show high scores"); | ||
971 | rb->lcd_puts(0, 6, "Directions to move"); | ||
972 | rb->snprintf(str, 18, "High Score: %d", bj->highscores[0]); | ||
973 | rb->lcd_puts(0, 7, str); | ||
974 | #elif CONFIG_KEYPAD == ONDIO_PAD | ||
975 | rb->lcd_puts(0, 1, "RIGHT to start"); | ||
976 | rb->lcd_puts(0, 2, "MENU+OFF to sv/res"); | ||
977 | rb->lcd_puts(0, 3, "OFF to exit"); | ||
978 | rb->lcd_puts(0, 4, "MENU to select"); | ||
979 | rb->lcd_puts(0, 5, "& show high scores"); | ||
980 | rb->lcd_puts(0, 6, "Directions to move"); | ||
981 | rb->snprintf(str, 18, "High Score: %d", bj->highscores[0]); | ||
982 | rb->lcd_puts(0, 7, str); | ||
983 | #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD) | ||
984 | rb->lcd_puts(0, 2, "ON to start"); | ||
985 | rb->lcd_puts(0, 3, "MODE to save/resume"); | ||
986 | rb->lcd_puts(0, 4, "OFF to exit"); | ||
987 | rb->lcd_puts(0, 5, "SELECT to select"); | ||
988 | rb->lcd_puts(0, 6, " and show high scores"); | ||
989 | rb->lcd_puts(0, 7, "Directions to move"); | ||
990 | rb->snprintf(str, 18, "High Score: %d", bj->highscores[0]); | ||
991 | rb->lcd_puts(0, 9, str); | ||
992 | #elif (CONFIG_KEYPAD == IPOD_3G_PAD) || (CONFIG_KEYPAD == IPOD_4G_PAD) | ||
993 | rb->lcd_puts(0, 2, "PLAY to start"); | ||
994 | rb->lcd_puts(0, 3, "SELECT+PLAY to save/resume"); | ||
995 | rb->lcd_puts(0, 4, "SELECT+MENU to exit"); | ||
996 | rb->lcd_puts(0, 5, "SELECT to select"); | ||
997 | rb->lcd_puts(0, 6, " and show high scores"); | ||
998 | rb->lcd_puts(0, 7, "Scroll or Directions to move"); | ||
999 | rb->lcd_puts(0, 8, "Directions to swap"); | ||
1000 | rb->snprintf(str, 18, "High Score: %d", bj->highscores[0]); | ||
1001 | rb->lcd_puts(0, 10, str); | ||
1002 | #elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD | ||
1003 | rb->lcd_puts(0, 1, "MODE to start"); | ||
1004 | rb->lcd_puts(0, 2, "EQ to save/resume"); | ||
1005 | rb->lcd_puts(0, 3, "PLAY to exit"); | ||
1006 | rb->lcd_puts(0, 4, "SELECT to select"); | ||
1007 | rb->lcd_puts(0, 5, "& show high scores"); | ||
1008 | rb->lcd_puts(0, 6, "Directions to move"); | ||
1009 | rb->snprintf(str, 18, "High Score: %d", bj->highscores[0]); | ||
1010 | rb->lcd_puts(0, 7, str); | ||
1011 | #elif CONFIG_KEYPAD == IAUDIO_X5_PAD | ||
1012 | rb->lcd_puts(0, 2, "PLAY to start"); | ||
1013 | rb->lcd_puts(0, 3, "REC to save/resume"); | ||
1014 | rb->lcd_puts(0, 4, "POWER to exit"); | ||
1015 | rb->lcd_puts(0, 5, "MENU to select"); | ||
1016 | rb->lcd_puts(0, 6, " and show high scores"); | ||
1017 | rb->lcd_puts(0, 7, "Directions to move"); | ||
1018 | rb->snprintf(str, 18, "High Score: %d", bj->highscores[0]); | ||
1019 | #endif | ||
1020 | } else { | ||
1021 | /* room for a title? */ | ||
1022 | j = 0; | ||
1023 | if(LCD_HEIGHT-NUM_SCORES*8 >= 8) { | ||
1024 | rb->snprintf(str, 12, "%s", "High Scores"); | ||
1025 | rb->lcd_getstringsize(str, &w, &h); | ||
1026 | rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, str); | ||
1027 | j = 2; | ||
1028 | } | ||
1029 | 1066 | ||
1030 | /* print high scores */ | 1067 | while(!startgame) { |
1031 | for(i=0; i<NUM_SCORES; i++) { | 1068 | res = bejeweled_showmenu(&bjmenu[0], cmd); |
1032 | rb->snprintf(str, 11, "#%02d: %d", i+1, bj->highscores[i]); | 1069 | cmd = MCMD_NONE; |
1033 | rb->lcd_puts(0, i+j, str); | ||
1034 | } | ||
1035 | } | ||
1036 | 1070 | ||
1071 | rb->snprintf(str, 18, "High Score: %d", bj->highscores[0]); | ||
1072 | rb->lcd_getstringsize(str, &w, &h); | ||
1073 | rb->lcd_putsxy((LCD_WIDTH-w)/2, LCD_HEIGHT-8, str); | ||
1037 | rb->lcd_update(); | 1074 | rb->lcd_update(); |
1038 | 1075 | ||
1039 | /* handle menu button presses */ | 1076 | switch(res) { |
1040 | button = rb->button_get(true); | 1077 | case MRES_NEW: |
1041 | switch(button){ | ||
1042 | case BEJEWELED_START: /* start playing */ | ||
1043 | startgame = true; | 1078 | startgame = true; |
1044 | break; | 1079 | continue; |
1045 | 1080 | ||
1046 | case BEJEWELED_QUIT: /* quit program */ | 1081 | case MRES_RESUME: |
1047 | if(showscores) { | ||
1048 | showscores = 0; | ||
1049 | break; | ||
1050 | } | ||
1051 | return BJ_QUIT; | ||
1052 | |||
1053 | case BEJEWELED_RESUME:/* resume game */ | ||
1054 | if(!bejeweled_loadgame(bj)) { | 1082 | if(!bejeweled_loadgame(bj)) { |
1055 | rb->splash(HZ*2, true, "Nothing to resume"); | 1083 | rb->splash(HZ*2, true, "Nothing to resume"); |
1084 | rb->lcd_clear_display(); | ||
1056 | } else { | 1085 | } else { |
1057 | startgame = true; | 1086 | startgame = true; |
1058 | } | 1087 | } |
1088 | continue; | ||
1089 | |||
1090 | case MRES_SCORES: | ||
1091 | rb->lcd_clear_display(); | ||
1092 | |||
1093 | /* room for a title? */ | ||
1094 | j = 0; | ||
1095 | if(LCD_HEIGHT-NUM_SCORES*8 >= 8) { | ||
1096 | rb->snprintf(str, 12, "%s", "High Scores"); | ||
1097 | rb->lcd_getstringsize(str, &w, &h); | ||
1098 | rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, str); | ||
1099 | j = 2; | ||
1100 | } | ||
1101 | |||
1102 | /* print high scores */ | ||
1103 | for(i=0; i<NUM_SCORES; i++) { | ||
1104 | rb->snprintf(str, 11, "#%02d: %d", i+1, bj->highscores[i]); | ||
1105 | rb->lcd_puts(0, i+j, str); | ||
1106 | } | ||
1107 | |||
1108 | rb->lcd_update(); | ||
1109 | while(true) { | ||
1110 | button = rb->button_get(true); | ||
1111 | if(button != BUTTON_NONE && !(button&BUTTON_REL)) break; | ||
1112 | } | ||
1113 | rb->lcd_clear_display(); | ||
1114 | continue; | ||
1115 | |||
1116 | case MRES_HELP: | ||
1117 | /* welcome screen to display key bindings */ | ||
1118 | rb->lcd_clear_display(); | ||
1119 | rb->snprintf(str, 5, "%s", "Help"); | ||
1120 | rb->lcd_getstringsize(str, &w, &h); | ||
1121 | rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, str); | ||
1122 | #if (LCD_HEIGHT <= 64) | ||
1123 | rb->lcd_puts(0, 2, "Controls:"); | ||
1124 | rb->lcd_puts(0, 3, "Directions = move"); | ||
1125 | rb->lcd_puts(0, 4, "SELECT = select"); | ||
1126 | rb->lcd_puts(0, 5, "Long SELECT = menu"); | ||
1127 | #elif (LCD_HEIGHT <= 132) | ||
1128 | rb->lcd_puts(0, 2, "Swap pairs of jewels to"); | ||
1129 | rb->lcd_puts(0, 3, "form connected segments"); | ||
1130 | rb->lcd_puts(0, 4, "of three or more of the"); | ||
1131 | rb->lcd_puts(0, 5, "same type."); | ||
1132 | rb->lcd_puts(0, 7, "Controls:"); | ||
1133 | rb->lcd_puts(0, 8, "Directions to move"); | ||
1134 | rb->lcd_puts(0, 9, "SELECT to select"); | ||
1135 | rb->lcd_puts(0, 10, "Long SELECT to show menu"); | ||
1136 | #else | ||
1137 | rb->lcd_puts(0, 2, "Swap pairs of jewels to form"); | ||
1138 | rb->lcd_puts(0, 3, "connected segments of three"); | ||
1139 | rb->lcd_puts(0, 4, "or more of the same type."); | ||
1140 | rb->lcd_puts(0, 6, "Controls:"); | ||
1141 | rb->lcd_puts(0, 7, "Directions to move cursor"); | ||
1142 | rb->lcd_puts(0, 8, "SELECT to select"); | ||
1143 | rb->lcd_puts(0, 9, "Long SELECT to show menu"); | ||
1144 | #endif | ||
1145 | rb->lcd_update(); | ||
1146 | while(true) { | ||
1147 | button = rb->button_get(true); | ||
1148 | if(button != BUTTON_NONE && !(button&BUTTON_REL)) break; | ||
1149 | } | ||
1150 | rb->lcd_clear_display(); | ||
1151 | continue; | ||
1152 | |||
1153 | case MRES_QUIT: | ||
1154 | return BJ_QUIT; | ||
1155 | |||
1156 | default: | ||
1157 | break; | ||
1158 | } | ||
1159 | |||
1160 | /* handle menu button presses */ | ||
1161 | button = rb->button_get(true); | ||
1162 | switch(button){ | ||
1163 | #ifdef BEJEWELED_SCROLLWHEEL | ||
1164 | case BEJEWELED_PREV: | ||
1165 | #endif | ||
1166 | case BEJEWELED_UP: | ||
1167 | case (BEJEWELED_UP|BUTTON_REPEAT): | ||
1168 | cmd = MCMD_PREV; | ||
1059 | break; | 1169 | break; |
1060 | 1170 | ||
1061 | case BEJEWELED_SELECT:/* toggle high scores */ | 1171 | #ifdef BEJEWELED_SCROLLWHEEL |
1062 | #ifdef BEJEWELED_SELECT_PRE | 1172 | case BEJEWELED_NEXT: |
1063 | if(lastbutton != BEJEWELED_SELECT_PRE) break; | ||
1064 | #endif | 1173 | #endif |
1065 | showscores = !showscores; | 1174 | case BEJEWELED_DOWN: |
1175 | case (BEJEWELED_DOWN|BUTTON_REPEAT): | ||
1176 | cmd = MCMD_NEXT; | ||
1066 | break; | 1177 | break; |
1067 | 1178 | ||
1179 | case BEJEWELED_SELECT: | ||
1180 | case BEJEWELED_RIGHT: | ||
1181 | cmd = MCMD_SELECT; | ||
1182 | break; | ||
1183 | |||
1184 | #ifdef BEJEWELED_CANCEL | ||
1185 | case BEJEWELED_CANCEL: | ||
1186 | return BJ_QUIT; | ||
1187 | #endif | ||
1188 | |||
1068 | default: | 1189 | default: |
1069 | if(rb->default_event_handler_ex(button, bejeweled_callback, | 1190 | if(rb->default_event_handler_ex(button, bejeweled_callback, |
1070 | (void*) bj) == SYS_USB_CONNECTED) | 1191 | (void*) bj) == SYS_USB_CONNECTED) |
1071 | return BJ_USB; | 1192 | return BJ_USB; |
1072 | break; | 1193 | break; |
1073 | } | 1194 | } |
1074 | |||
1075 | if(button != BUTTON_NONE) lastbutton = button; | ||
1076 | } | 1195 | } |
1077 | 1196 | ||
1078 | lastbutton = BUTTON_NONE; | ||
1079 | |||
1080 | /******************** | 1197 | /******************** |
1081 | * init * | 1198 | * init * |
1082 | ********************/ | 1199 | ********************/ |
@@ -1094,33 +1211,47 @@ static int bejeweled(struct game_context* bj) { | |||
1094 | * play * | 1211 | * play * |
1095 | **********************/ | 1212 | **********************/ |
1096 | while(true) { | 1213 | while(true) { |
1097 | /* refresh the board */ | 1214 | if(!inmenu) { |
1098 | bejeweled_drawboard(bj); | 1215 | /* refresh the board */ |
1099 | 1216 | bejeweled_drawboard(bj); | |
1100 | /* display the cursor */ | 1217 | |
1101 | if(selected) { | 1218 | /* display the cursor */ |
1102 | rb->lcd_set_drawmode(DRMODE_COMPLEMENT); | 1219 | if(selected) { |
1103 | rb->lcd_fillrect(x*TILE_WIDTH, y*TILE_HEIGHT+YOFS, | 1220 | rb->lcd_set_drawmode(DRMODE_COMPLEMENT); |
1104 | TILE_WIDTH, TILE_HEIGHT); | 1221 | rb->lcd_fillrect(x*TILE_WIDTH, y*TILE_HEIGHT+YOFS, |
1105 | rb->lcd_set_drawmode(DRMODE_SOLID); | 1222 | TILE_WIDTH, TILE_HEIGHT); |
1223 | rb->lcd_set_drawmode(DRMODE_SOLID); | ||
1224 | } else { | ||
1225 | rb->lcd_drawrect(x*TILE_WIDTH, y*TILE_HEIGHT+YOFS, | ||
1226 | TILE_WIDTH, TILE_HEIGHT); | ||
1227 | } | ||
1228 | rb->lcd_update_rect(x*TILE_WIDTH, y*TILE_HEIGHT+YOFS, | ||
1229 | TILE_WIDTH, TILE_HEIGHT); | ||
1106 | } else { | 1230 | } else { |
1107 | rb->lcd_drawrect(x*TILE_WIDTH, y*TILE_HEIGHT+YOFS, | 1231 | res = bejeweled_showmenu(&bjmenu[1], cmd); |
1108 | TILE_WIDTH, TILE_HEIGHT); | 1232 | cmd = MCMD_NONE; |
1233 | switch(res) { | ||
1234 | case MRES_RESUME: | ||
1235 | inmenu = false; | ||
1236 | selected = false; | ||
1237 | continue; | ||
1238 | |||
1239 | case MRES_SAVE: | ||
1240 | rb->splash(HZ, true, "Saving game..."); | ||
1241 | bejeweled_savegame(bj); | ||
1242 | return BJ_END; | ||
1243 | |||
1244 | case MRES_QUIT: | ||
1245 | return BJ_END; | ||
1246 | |||
1247 | default: | ||
1248 | break; | ||
1249 | } | ||
1109 | } | 1250 | } |
1110 | rb->lcd_update_rect(x*TILE_WIDTH, y*TILE_HEIGHT+YOFS, | ||
1111 | TILE_WIDTH, TILE_HEIGHT); | ||
1112 | 1251 | ||
1113 | /* handle game button presses */ | 1252 | /* handle game button presses */ |
1114 | button = rb->button_get(true); | 1253 | button = rb->button_get(true); |
1115 | switch(button){ | 1254 | switch(button){ |
1116 | case BEJEWELED_RESUME: /* save and end game */ | ||
1117 | rb->splash(HZ, true, "Saving game..."); | ||
1118 | bejeweled_savegame(bj); | ||
1119 | return BJ_END; | ||
1120 | |||
1121 | case BEJEWELED_QUIT: /* end game */ | ||
1122 | return BJ_END; | ||
1123 | |||
1124 | case BEJEWELED_LEFT: /* move cursor left */ | 1255 | case BEJEWELED_LEFT: /* move cursor left */ |
1125 | case (BEJEWELED_LEFT|BUTTON_REPEAT): | 1256 | case (BEJEWELED_LEFT|BUTTON_REPEAT): |
1126 | if(selected) { | 1257 | if(selected) { |
@@ -1134,66 +1265,98 @@ static int bejeweled(struct game_context* bj) { | |||
1134 | 1265 | ||
1135 | case BEJEWELED_RIGHT: /* move cursor right */ | 1266 | case BEJEWELED_RIGHT: /* move cursor right */ |
1136 | case (BEJEWELED_RIGHT|BUTTON_REPEAT): | 1267 | case (BEJEWELED_RIGHT|BUTTON_REPEAT): |
1137 | if(selected) { | 1268 | if(!inmenu) { |
1138 | bj->score += bejeweled_swapjewels(bj, x, y, SWAP_RIGHT); | 1269 | if(selected) { |
1139 | selected = false; | 1270 | bj->score += bejeweled_swapjewels(bj, x, y, SWAP_RIGHT); |
1140 | if (!bejeweled_movesavail(bj)) return BJ_LOSE; | 1271 | selected = false; |
1272 | if (!bejeweled_movesavail(bj)) return BJ_LOSE; | ||
1273 | } else { | ||
1274 | x = (x+1)%BJ_WIDTH; | ||
1275 | } | ||
1141 | } else { | 1276 | } else { |
1142 | x = (x+1)%BJ_WIDTH; | 1277 | cmd = MCMD_SELECT; |
1143 | } | 1278 | } |
1144 | break; | 1279 | break; |
1145 | 1280 | ||
1146 | case BEJEWELED_DOWN: /* move cursor down */ | 1281 | case BEJEWELED_DOWN: /* move cursor down */ |
1147 | case (BEJEWELED_DOWN|BUTTON_REPEAT): | 1282 | case (BEJEWELED_DOWN|BUTTON_REPEAT): |
1148 | if(selected) { | 1283 | if(!inmenu) { |
1149 | bj->score += bejeweled_swapjewels(bj, x, y, SWAP_DOWN); | 1284 | if(selected) { |
1150 | selected = false; | 1285 | bj->score += bejeweled_swapjewels(bj, x, y, SWAP_DOWN); |
1151 | if (!bejeweled_movesavail(bj)) return BJ_LOSE; | 1286 | selected = false; |
1287 | if (!bejeweled_movesavail(bj)) return BJ_LOSE; | ||
1288 | } else { | ||
1289 | y = (y+1)%(BJ_HEIGHT-1); | ||
1290 | } | ||
1152 | } else { | 1291 | } else { |
1153 | y = (y+1)%(BJ_HEIGHT-1); | 1292 | cmd = MCMD_NEXT; |
1154 | } | 1293 | } |
1155 | break; | 1294 | break; |
1156 | 1295 | ||
1157 | case BEJEWELED_UP: /* move cursor up */ | 1296 | case BEJEWELED_UP: /* move cursor up */ |
1158 | case (BEJEWELED_UP|BUTTON_REPEAT): | 1297 | case (BEJEWELED_UP|BUTTON_REPEAT): |
1159 | if(selected) { | 1298 | if(!inmenu) { |
1160 | bj->score += bejeweled_swapjewels(bj, x, y, SWAP_UP); | 1299 | if(selected) { |
1161 | selected = false; | 1300 | bj->score += bejeweled_swapjewels(bj, x, y, SWAP_UP); |
1162 | if (!bejeweled_movesavail(bj)) return BJ_LOSE; | 1301 | selected = false; |
1302 | if (!bejeweled_movesavail(bj)) return BJ_LOSE; | ||
1303 | } else { | ||
1304 | y = (y+(BJ_HEIGHT-1)-1)%(BJ_HEIGHT-1); | ||
1305 | } | ||
1163 | } else { | 1306 | } else { |
1164 | y = (y+(BJ_HEIGHT-1)-1)%(BJ_HEIGHT-1); | 1307 | cmd = MCMD_PREV; |
1165 | } | 1308 | } |
1166 | break; | 1309 | break; |
1167 | 1310 | ||
1168 | #ifdef BEJEWELED_SCROLLWHEEL | 1311 | #ifdef BEJEWELED_SCROLLWHEEL |
1169 | case BEJEWELED_PREV: /* scroll backwards */ | 1312 | case BEJEWELED_PREV: /* scroll backwards */ |
1170 | case (BEJEWELED_PREV|BUTTON_REPEAT): | 1313 | case (BEJEWELED_PREV|BUTTON_REPEAT): |
1171 | if(!selected) { | 1314 | if(!inmenu) { |
1172 | if(x == 0) { | 1315 | if(!selected) { |
1173 | y = (y+(BJ_HEIGHT-1)-1)%(BJ_HEIGHT-1); | 1316 | if(x == 0) { |
1317 | y = (y+(BJ_HEIGHT-1)-1)%(BJ_HEIGHT-1); | ||
1318 | } | ||
1319 | x = (x+BJ_WIDTH-1)%BJ_WIDTH; | ||
1174 | } | 1320 | } |
1175 | x = (x+BJ_WIDTH-1)%BJ_WIDTH; | 1321 | } else { |
1322 | cmd = MCMD_PREV; | ||
1176 | } | 1323 | } |
1177 | break; | 1324 | break; |
1178 | 1325 | ||
1179 | case BEJEWELED_NEXT: /* scroll forwards */ | 1326 | case BEJEWELED_NEXT: /* scroll forwards */ |
1180 | case (BEJEWELED_NEXT|BUTTON_REPEAT): | 1327 | case (BEJEWELED_NEXT|BUTTON_REPEAT): |
1181 | if(!selected) { | 1328 | if(!inmenu) { |
1182 | if(x == BJ_WIDTH-1) { | 1329 | if(!selected) { |
1183 | y = (y+1)%(BJ_HEIGHT-1); | 1330 | if(x == BJ_WIDTH-1) { |
1331 | y = (y+1)%(BJ_HEIGHT-1); | ||
1332 | } | ||
1333 | x = (x+1)%BJ_WIDTH; | ||
1184 | } | 1334 | } |
1185 | x = (x+1)%BJ_WIDTH; | 1335 | } else { |
1336 | cmd = MCMD_NEXT; | ||
1186 | } | 1337 | } |
1187 | break; | 1338 | break; |
1188 | #endif | 1339 | #endif |
1189 | 1340 | ||
1190 | case BEJEWELED_SELECT: /* toggle selected */ | 1341 | case BEJEWELED_SELECT: /* toggle selected */ |
1191 | #ifdef BEJEWELED_SELECT_PRE | 1342 | if(!inmenu) { |
1192 | if(lastbutton != BEJEWELED_SELECT_PRE) break; | 1343 | selected = !selected; |
1193 | #endif | 1344 | } else { |
1194 | selected = !selected; | 1345 | cmd = MCMD_SELECT; |
1346 | } | ||
1195 | break; | 1347 | break; |
1196 | 1348 | ||
1349 | case (BEJEWELED_SELECT|BUTTON_REPEAT): /* show menu */ | ||
1350 | if(!inmenu) inmenu = true; | ||
1351 | break; | ||
1352 | |||
1353 | #ifdef BEJEWELED_CANCEL | ||
1354 | case BEJEWELED_CANCEL: /* toggle menu */ | ||
1355 | inmenu = !inmenu; | ||
1356 | selected = false; | ||
1357 | break; | ||
1358 | #endif | ||
1359 | |||
1197 | default: | 1360 | default: |
1198 | if(rb->default_event_handler_ex(button, bejeweled_callback, | 1361 | if(rb->default_event_handler_ex(button, bejeweled_callback, |
1199 | (void*) bj) == SYS_USB_CONNECTED) | 1362 | (void*) bj) == SYS_USB_CONNECTED) |
@@ -1201,7 +1364,6 @@ static int bejeweled(struct game_context* bj) { | |||
1201 | break; | 1364 | break; |
1202 | } | 1365 | } |
1203 | 1366 | ||
1204 | if(button != BUTTON_NONE) lastbutton = button; | ||
1205 | if(bj->score >= LEVEL_PTS) bj->score = bejeweled_nextlevel(bj); | 1367 | if(bj->score >= LEVEL_PTS) bj->score = bejeweled_nextlevel(bj); |
1206 | } | 1368 | } |
1207 | } | 1369 | } |