summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--apps/plugins/blackjack.c1009
-rw-r--r--apps/plugins/brickmania.c4
-rw-r--r--apps/plugins/bubbles.c4
-rw-r--r--apps/plugins/clix.c4
-rw-r--r--apps/plugins/jewels.c4
-rw-r--r--apps/plugins/lib/highscore.c17
-rw-r--r--apps/plugins/lib/highscore.h4
-rw-r--r--apps/plugins/spacerocks.c4
8 files changed, 462 insertions, 588 deletions
diff --git a/apps/plugins/blackjack.c b/apps/plugins/blackjack.c
index 391cd97394..bb9d202fb7 100644
--- a/apps/plugins/blackjack.c
+++ b/apps/plugins/blackjack.c
@@ -17,19 +17,22 @@
17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY 17 * This software is distributed on an "AS IS" basis, WITHOUT WARRANTY OF ANY
18 * KIND, either express or implied. 18 * KIND, either express or implied.
19 * 19 *
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "plugin.h" 22#include "plugin.h"
23#include "pluginbitmaps/card_deck.h" 23#include "pluginbitmaps/card_deck.h"
24#include "pluginbitmaps/card_back.h" 24#include "pluginbitmaps/card_back.h"
25#include "lib/display_text.h"
26#include "lib/highscore.h"
27#include "lib/playback_control.h"
25 28
26PLUGIN_HEADER 29PLUGIN_HEADER
27 30
28/* save files */ 31/* save files */
29#define SCORE_FILE PLUGIN_GAMES_DIR "/blackjack.score" 32#define HIGH_SCORE PLUGIN_GAMES_DIR "/blackjack.score"
30#define SAVE_FILE PLUGIN_GAMES_DIR "/blackjack.save" 33#define SAVE_FILE PLUGIN_GAMES_DIR "/blackjack.save"
31 34#define NUM_SCORES 5
32#define NUM_SCORES LCD_HEIGHT/8-2 35struct highscore highest[NUM_SCORES];
33 36
34/* final game return status */ 37/* final game return status */
35#define BJ_END 3 38#define BJ_END 3
@@ -38,308 +41,364 @@ PLUGIN_HEADER
38#define BJ_LOSE 0 41#define BJ_LOSE 0
39 42
40#if CONFIG_KEYPAD == RECORDER_PAD 43#if CONFIG_KEYPAD == RECORDER_PAD
41#define BJACK_START BUTTON_ON 44#define BJACK_SELECT_NAME "PLAY"
42#define BJACK_QUIT BUTTON_OFF 45#define BJACK_STAY_NAME "F1"
43#define BJACK_MAX (BUTTON_ON|BUTTON_UP) 46#define BJACK_RESUME_NAME "F3"
44#define BJACK_MIN (BUTTON_ON|BUTTON_DOWN) 47#define BJACK_QUIT_NAME "OFF"
45#define BJACK_HIT BUTTON_F1 48#define BJACK_DOUBLE_NAME "F2"
46#define BJACK_STAY BUTTON_F2 49#define BJACK_SELECT BUTTON_PLAY
47#define BJACK_DOUBLEDOWN BUTTON_F3 50#define BJACK_QUIT BUTTON_OFF
48#define BJACK_SCORES BUTTON_RIGHT 51#define BJACK_MAX (BUTTON_ON|BUTTON_UP)
49#define BJACK_RESUME BUTTON_PLAY 52#define BJACK_MIN (BUTTON_ON|BUTTON_DOWN)
50#define BJACK_UP BUTTON_UP 53#define BJACK_STAY BUTTON_F1
51#define BJACK_DOWN BUTTON_DOWN 54#define BJACK_DOUBLEDOWN BUTTON_F2
52#define BJACK_RIGHT BUTTON_RIGHT 55#define BJACK_RESUME BUTTON_F3
53#define BJACK_LEFT BUTTON_LEFT 56#define BJACK_UP BUTTON_UP
57#define BJACK_DOWN BUTTON_DOWN
58#define BJACK_RIGHT BUTTON_RIGHT
59#define BJACK_LEFT BUTTON_LEFT
54 60
55#elif CONFIG_KEYPAD == ONDIO_PAD 61#elif CONFIG_KEYPAD == ONDIO_PAD
56#define BJACK_START BUTTON_MENU 62#define BJACK_SELECT_NAME "MENU"
57#define BJACK_QUIT BUTTON_OFF 63#define BJACK_STAY_NAME "RIGHT"
58#define BJACK_MAX (BUTTON_MENU|BUTTON_UP) 64#define BJACK_RESUME_NAME "DOWN"
59#define BJACK_MIN (BUTTON_MENU|BUTTON_DOWN) 65#define BJACK_QUIT_NAME "OFF"
60#define BJACK_HIT BUTTON_LEFT 66#define BJACK_DOUBLE_NAME "UP"
61#define BJACK_STAY BUTTON_RIGHT 67#define BJACK_SELECT BUTTON_MENU
62#define BJACK_DOUBLEDOWN BUTTON_UP 68#define BJACK_QUIT BUTTON_OFF
63#define BJACK_SCORES BUTTON_UP 69#define BJACK_MAX (BUTTON_MENU|BUTTON_UP)
64#define BJACK_RESUME BUTTON_DOWN 70#define BJACK_MIN (BUTTON_MENU|BUTTON_DOWN)
65#define BJACK_UP BUTTON_UP 71#define BJACK_STAY BUTTON_RIGHT
66#define BJACK_DOWN BUTTON_DOWN 72#define BJACK_DOUBLEDOWN BUTTON_UP
67#define BJACK_RIGHT BUTTON_RIGHT 73#define BJACK_RESUME BUTTON_DOWN
68#define BJACK_LEFT BUTTON_LEFT 74#define BJACK_UP BUTTON_UP
75#define BJACK_DOWN BUTTON_DOWN
76#define BJACK_RIGHT BUTTON_RIGHT
77#define BJACK_LEFT BUTTON_LEFT
69 78
70#elif CONFIG_KEYPAD == IRIVER_H10_PAD 79#elif CONFIG_KEYPAD == IRIVER_H10_PAD
71#define BJACK_START BUTTON_PLAY 80#define BJACK_SELECT_NAME "PLAY"
72#define BJACK_QUIT BUTTON_POWER 81#define BJACK_STAY_NAME ">>|"
73#define BJACK_MAX (BUTTON_PLAY|BUTTON_SCROLL_UP) 82#define BJACK_RESUME_NAME "RIGHT"
74#define BJACK_MIN (BUTTON_PLAY|BUTTON_SCROLL_DOWN) 83#define BJACK_QUIT_NAME "POWER"
75#define BJACK_HIT BUTTON_PLAY 84#define BJACK_DOUBLE_NAME "|<<"
76#define BJACK_STAY BUTTON_FF 85#define BJACK_SELECT BUTTON_PLAY
77#define BJACK_DOUBLEDOWN BUTTON_REW 86#define BJACK_QUIT BUTTON_POWER
78#define BJACK_SCORES BUTTON_LEFT 87#define BJACK_MAX (BUTTON_PLAY|BUTTON_SCROLL_UP)
79#define BJACK_RESUME BUTTON_RIGHT 88#define BJACK_MIN (BUTTON_PLAY|BUTTON_SCROLL_DOWN)
80#define BJACK_UP BUTTON_SCROLL_UP 89#define BJACK_STAY BUTTON_FF
81#define BJACK_DOWN BUTTON_SCROLL_DOWN 90#define BJACK_DOUBLEDOWN BUTTON_REW
82#define BJACK_RIGHT BUTTON_RIGHT 91#define BJACK_RESUME BUTTON_RIGHT
83#define BJACK_LEFT BUTTON_LEFT 92#define BJACK_UP BUTTON_SCROLL_UP
93#define BJACK_DOWN BUTTON_SCROLL_DOWN
94#define BJACK_RIGHT BUTTON_RIGHT
95#define BJACK_LEFT BUTTON_LEFT
84 96
85#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ 97#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
86 (CONFIG_KEYPAD == IRIVER_H300_PAD) 98 (CONFIG_KEYPAD == IRIVER_H300_PAD)
87#define BJACK_START BUTTON_ON 99#define BJACK_SELECT_NAME "ON"
88#define BJACK_QUIT BUTTON_OFF 100#define BJACK_STAY_NAME "REC"
89#define BJACK_MAX (BUTTON_ON|BUTTON_UP) 101#define BJACK_RESUME_NAME "MODE"
90#define BJACK_MIN (BUTTON_ON|BUTTON_DOWN) 102#define BJACK_QUIT_NAME "OFF"
91#define BJACK_HIT BUTTON_ON 103#define BJACK_DOUBLE_NAME "SELECT"
92#define BJACK_STAY BUTTON_REC 104#define BJACK_SELECT BUTTON_ON
93#define BJACK_DOUBLEDOWN BUTTON_SELECT 105#define BJACK_QUIT BUTTON_OFF
94#define BJACK_SCORES BUTTON_SELECT 106#define BJACK_MAX (BUTTON_ON|BUTTON_UP)
95#define BJACK_RESUME BUTTON_MODE 107#define BJACK_MIN (BUTTON_ON|BUTTON_DOWN)
96#define BJACK_UP BUTTON_UP 108#define BJACK_STAY BUTTON_REC
97#define BJACK_DOWN BUTTON_DOWN 109#define BJACK_DOUBLEDOWN BUTTON_SELECT
98#define BJACK_RIGHT BUTTON_RIGHT 110#define BJACK_RESUME BUTTON_MODE
99#define BJACK_LEFT BUTTON_LEFT 111#define BJACK_UP BUTTON_UP
112#define BJACK_DOWN BUTTON_DOWN
113#define BJACK_RIGHT BUTTON_RIGHT
114#define BJACK_LEFT BUTTON_LEFT
100 115
101#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ 116#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \
102 (CONFIG_KEYPAD == IPOD_3G_PAD) || \ 117 (CONFIG_KEYPAD == IPOD_3G_PAD) || \
103 (CONFIG_KEYPAD == IPOD_1G2G_PAD) 118 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
104#define BJACK_START BUTTON_SELECT 119#define BJACK_SELECT_NAME "SELECT"
105#define BJACK_QUIT BUTTON_MENU 120#define BJACK_STAY_NAME "RIGHT"
106#define BJACK_MAX (BUTTON_SELECT|BUTTON_SCROLL_FWD) 121#define BJACK_RESUME_NAME "PLAY"
107#define BJACK_MIN (BUTTON_SELECT|BUTTON_SCROLL_BACK) 122#define BJACK_QUIT_NAME "MENU"
108#define BJACK_HIT BUTTON_SELECT 123#define BJACK_DOUBLE_NAME "LEFT"
109#define BJACK_STAY BUTTON_RIGHT 124#define BJACK_SELECT BUTTON_SELECT
110#define BJACK_DOUBLEDOWN BUTTON_LEFT 125#define BJACK_QUIT BUTTON_MENU
111#define BJACK_SCORES BUTTON_RIGHT 126#define BJACK_MAX (BUTTON_SELECT|BUTTON_SCROLL_FWD)
112#define BJACK_RESUME BUTTON_PLAY 127#define BJACK_MIN (BUTTON_SELECT|BUTTON_SCROLL_BACK)
113#define BJACK_UP BUTTON_SCROLL_FWD 128#define BJACK_STAY BUTTON_RIGHT
114#define BJACK_DOWN BUTTON_SCROLL_BACK 129#define BJACK_DOUBLEDOWN BUTTON_LEFT
115#define BJACK_RIGHT BUTTON_RIGHT 130#define BJACK_RESUME BUTTON_PLAY
116#define BJACK_LEFT BUTTON_LEFT 131#define BJACK_UP BUTTON_SCROLL_FWD
132#define BJACK_DOWN BUTTON_SCROLL_BACK
133#define BJACK_RIGHT BUTTON_RIGHT
134#define BJACK_LEFT BUTTON_LEFT
117 135
118#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD 136#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
119#define BJACK_START BUTTON_PLAY 137#define BJACK_SELECT_NAME "PLAY"
120#define BJACK_QUIT BUTTON_POWER 138#define BJACK_STAY_NAME "REC"
121#define BJACK_MAX (BUTTON_PLAY|BUTTON_UP) 139#define BJACK_RESUME_NAME "DOWN"
122#define BJACK_MIN (BUTTON_PLAY|BUTTON_DOWN) 140#define BJACK_QUIT_NAME "POWER"
123#define BJACK_HIT BUTTON_SELECT 141#define BJACK_DOUBLE_NAME "PLAY"
124#define BJACK_STAY BUTTON_REC 142#define BJACK_SELECT BUTTON_PLAY
125#define BJACK_DOUBLEDOWN BUTTON_PLAY 143#define BJACK_QUIT BUTTON_POWER
126#define BJACK_SCORES BUTTON_RIGHT 144#define BJACK_MAX (BUTTON_PLAY|BUTTON_UP)
127#define BJACK_RESUME BUTTON_DOWN 145#define BJACK_MIN (BUTTON_PLAY|BUTTON_DOWN)
128#define BJACK_UP BUTTON_UP 146#define BJACK_STAY BUTTON_REC
129#define BJACK_DOWN BUTTON_DOWN 147#define BJACK_DOUBLEDOWN BUTTON_PLAY
130#define BJACK_RIGHT BUTTON_RIGHT 148#define BJACK_RESUME BUTTON_DOWN
131#define BJACK_LEFT BUTTON_LEFT 149#define BJACK_UP BUTTON_UP
150#define BJACK_DOWN BUTTON_DOWN
151#define BJACK_RIGHT BUTTON_RIGHT
152#define BJACK_LEFT BUTTON_LEFT
132 153
133#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD 154#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
134#define BJACK_START BUTTON_MODE 155#define BJACK_SELECT_NAME "MODE"
135#define BJACK_QUIT BUTTON_PLAY 156#define BJACK_STAY_NAME "MODE"
136#define BJACK_MAX (BUTTON_EQ|BUTTON_UP) 157#define BJACK_RESUME_NAME "EQ+MODE"
137#define BJACK_MIN (BUTTON_EQ|BUTTON_DOWN) 158#define BJACK_QUIT_NAME "PLAY"
138#define BJACK_HIT BUTTON_EQ 159#define BJACK_DOUBLE_NAME "SELECT"
139#define BJACK_STAY BUTTON_MODE 160#define BJACK_SELECT BUTTON_MODE
140#define BJACK_DOUBLEDOWN BUTTON_SELECT 161#define BJACK_QUIT BUTTON_PLAY
141#define BJACK_SCORES BUTTON_SELECT 162#define BJACK_MAX (BUTTON_EQ|BUTTON_UP)
142#define BJACK_RESUME (BUTTON_EQ|BUTTON_MODE) 163#define BJACK_MIN (BUTTON_EQ|BUTTON_DOWN)
143#define BJACK_UP BUTTON_UP 164#define BJACK_STAY BUTTON_MODE
144#define BJACK_DOWN BUTTON_DOWN 165#define BJACK_DOUBLEDOWN BUTTON_SELECT
145#define BJACK_RIGHT BUTTON_RIGHT 166#define BJACK_RESUME (BUTTON_EQ|BUTTON_MODE)
146#define BJACK_LEFT BUTTON_LEFT 167#define BJACK_UP BUTTON_UP
168#define BJACK_DOWN BUTTON_DOWN
169#define BJACK_RIGHT BUTTON_RIGHT
170#define BJACK_LEFT BUTTON_LEFT
147 171
148#elif CONFIG_KEYPAD == GIGABEAT_PAD 172#elif CONFIG_KEYPAD == GIGABEAT_PAD
149#define BJACK_START BUTTON_A 173#define BJACK_SELECT_NAME "A"
150#define BJACK_QUIT BUTTON_POWER 174#define BJACK_STAY_NAME "VOL-"
151#define BJACK_MAX BUTTON_VOL_UP 175#define BJACK_RESUME_NAME "MENU"
152#define BJACK_MIN BUTTON_VOL_DOWN 176#define BJACK_QUIT_NAME "POWER"
153#define BJACK_HIT BUTTON_VOL_UP 177#define BJACK_DOUBLE_NAME "SELECT"
154#define BJACK_STAY BUTTON_VOL_DOWN 178#define BJACK_SELECT BUTTON_A
155#define BJACK_DOUBLEDOWN BUTTON_SELECT 179#define BJACK_QUIT BUTTON_POWER
156#define BJACK_SCORES BUTTON_RIGHT 180#define BJACK_MAX BUTTON_VOL_UP
157#define BJACK_RESUME BUTTON_MENU 181#define BJACK_MIN BUTTON_VOL_DOWN
158#define BJACK_UP BUTTON_UP 182#define BJACK_STAY BUTTON_VOL_DOWN
159#define BJACK_DOWN BUTTON_DOWN 183#define BJACK_DOUBLEDOWN BUTTON_SELECT
160#define BJACK_RIGHT BUTTON_RIGHT 184#define BJACK_RESUME BUTTON_MENU
161#define BJACK_LEFT BUTTON_LEFT 185#define BJACK_UP BUTTON_UP
186#define BJACK_DOWN BUTTON_DOWN
187#define BJACK_RIGHT BUTTON_RIGHT
188#define BJACK_LEFT BUTTON_LEFT
162 189
163#elif CONFIG_KEYPAD == SANSA_E200_PAD 190#elif CONFIG_KEYPAD == SANSA_E200_PAD
164#define BJACK_START BUTTON_SELECT 191#define BJACK_SELECT_NAME "SELECT"
165#define BJACK_QUIT BUTTON_POWER 192#define BJACK_STAY_NAME "RIGHT"
166#define BJACK_MAX (BUTTON_REC|BUTTON_UP) 193#define BJACK_RESUME_NAME "DOWN"
167#define BJACK_MIN (BUTTON_REC|BUTTON_DOWN) 194#define BJACK_QUIT_NAME "POWER"
168#define BJACK_HIT BUTTON_SELECT 195#define BJACK_DOUBLE_NAME "LEFT"
169#define BJACK_STAY BUTTON_RIGHT 196#define BJACK_SELECT BUTTON_SELECT
170#define BJACK_DOUBLEDOWN BUTTON_LEFT 197#define BJACK_QUIT BUTTON_POWER
171#define BJACK_SCORES BUTTON_UP 198#define BJACK_MAX (BUTTON_REC|BUTTON_UP)
172#define BJACK_RESUME BUTTON_DOWN 199#define BJACK_MIN (BUTTON_REC|BUTTON_DOWN)
173#define BJACK_UP BUTTON_SCROLL_FWD 200#define BJACK_STAY BUTTON_RIGHT
174#define BJACK_DOWN BUTTON_SCROLL_BACK 201#define BJACK_DOUBLEDOWN BUTTON_LEFT
175#define BJACK_RIGHT BUTTON_RIGHT 202#define BJACK_RESUME BUTTON_DOWN
176#define BJACK_LEFT BUTTON_LEFT 203#define BJACK_UP BUTTON_SCROLL_FWD
204#define BJACK_DOWN BUTTON_SCROLL_BACK
205#define BJACK_RIGHT BUTTON_RIGHT
206#define BJACK_LEFT BUTTON_LEFT
177 207
178#elif CONFIG_KEYPAD == SANSA_FUZE_PAD 208#elif CONFIG_KEYPAD == SANSA_FUZE_PAD
179#define BJACK_START BUTTON_SELECT 209#define BJACK_SELECT_NAME "SELECT"
180#define BJACK_QUIT (BUTTON_HOME|BUTTON_REPEAT) 210#define BJACK_STAY_NAME "RIGHT"
181#define BJACK_MAX (BUTTON_SELECT|BUTTON_UP) 211#define BJACK_RESUME_NAME "UP"
182#define BJACK_MIN (BUTTON_SELECT|BUTTON_DOWN) 212#define BJACK_QUIT_NAME "HOME"
183#define BJACK_HIT (BUTTON_SELECT|BUTTON_REL) 213#define BJACK_DOUBLE_NAME "LEFT"
184#define BJACK_STAY BUTTON_RIGHT 214#define BJACK_SELECT BUTTON_SELECT
185#define BJACK_DOUBLEDOWN BUTTON_LEFT 215#define BJACK_QUIT (BUTTON_HOME|BUTTON_REPEAT)
186#define BJACK_SCORES BUTTON_DOWN 216#define BJACK_MAX (BUTTON_SELECT|BUTTON_UP)
187#define BJACK_RESUME BUTTON_UP 217#define BJACK_MIN (BUTTON_SELECT|BUTTON_DOWN)
188#define BJACK_UP BUTTON_SCROLL_FWD 218#define BJACK_STAY BUTTON_RIGHT
189#define BJACK_DOWN BUTTON_SCROLL_BACK 219#define BJACK_DOUBLEDOWN BUTTON_LEFT
190#define BJACK_RIGHT BUTTON_RIGHT 220#define BJACK_RESUME BUTTON_UP
191#define BJACK_LEFT BUTTON_LEFT 221#define BJACK_UP BUTTON_SCROLL_FWD
192 222#define BJACK_DOWN BUTTON_SCROLL_BACK
223#define BJACK_RIGHT BUTTON_RIGHT
224#define BJACK_LEFT BUTTON_LEFT
193 225
194#elif CONFIG_KEYPAD == SANSA_C200_PAD 226#elif CONFIG_KEYPAD == SANSA_C200_PAD
195#define BJACK_START BUTTON_SELECT 227#define BJACK_SELECT_NAME "SELECT"
196#define BJACK_QUIT BUTTON_POWER 228#define BJACK_STAY_NAME "RIGHT"
197#define BJACK_MAX BUTTON_VOL_UP 229#define BJACK_RESUME_NAME "DOWN"
198#define BJACK_MIN BUTTON_VOL_DOWN 230#define BJACK_QUIT_NAME "POWER"
199#define BJACK_HIT BUTTON_SELECT 231#define BJACK_DOUBLE_NAME "LEFT"
200#define BJACK_STAY BUTTON_RIGHT 232#define BJACK_SELECT BUTTON_SELECT
201#define BJACK_DOUBLEDOWN BUTTON_LEFT 233#define BJACK_QUIT BUTTON_POWER
202#define BJACK_SCORES BUTTON_REC 234#define BJACK_MAX BUTTON_VOL_UP
203#define BJACK_RESUME BUTTON_DOWN 235#define BJACK_MIN BUTTON_VOL_DOWN
204#define BJACK_UP BUTTON_UP 236#define BJACK_STAY BUTTON_RIGHT
205#define BJACK_DOWN BUTTON_DOWN 237#define BJACK_DOUBLEDOWN BUTTON_LEFT
206#define BJACK_RIGHT BUTTON_RIGHT 238#define BJACK_RESUME BUTTON_DOWN
207#define BJACK_LEFT BUTTON_LEFT 239#define BJACK_UP BUTTON_UP
240#define BJACK_DOWN BUTTON_DOWN
241#define BJACK_RIGHT BUTTON_RIGHT
242#define BJACK_LEFT BUTTON_LEFT
208 243
209#elif CONFIG_KEYPAD == SANSA_CLIP_PAD 244#elif CONFIG_KEYPAD == SANSA_CLIP_PAD
210#define BJACK_START BUTTON_SELECT 245#define BJACK_SELECT_NAME "SELECT"
211#define BJACK_QUIT BUTTON_POWER 246#define BJACK_STAY_NAME "RIGHT"
212#define BJACK_MAX BUTTON_VOL_UP 247#define BJACK_RESUME_NAME "DOWN"
213#define BJACK_MIN BUTTON_VOL_DOWN 248#define BJACK_QUIT_NAME "POWER"
214#define BJACK_HIT BUTTON_SELECT 249#define BJACK_DOUBLE_NAME "LEFT"
215#define BJACK_STAY BUTTON_RIGHT 250#define BJACK_SELECT BUTTON_SELECT
216#define BJACK_DOUBLEDOWN BUTTON_LEFT 251#define BJACK_QUIT BUTTON_POWER
217#define BJACK_SCORES BUTTON_HOME 252#define BJACK_MAX BUTTON_VOL_UP
218#define BJACK_RESUME BUTTON_DOWN 253#define BJACK_MIN BUTTON_VOL_DOWN
219#define BJACK_UP BUTTON_UP 254#define BJACK_STAY BUTTON_RIGHT
220#define BJACK_DOWN BUTTON_DOWN 255#define BJACK_DOUBLEDOWN BUTTON_LEFT
221#define BJACK_RIGHT BUTTON_RIGHT 256#define BJACK_RESUME BUTTON_DOWN
222#define BJACK_LEFT BUTTON_LEFT 257#define BJACK_UP BUTTON_UP
258#define BJACK_DOWN BUTTON_DOWN
259#define BJACK_RIGHT BUTTON_RIGHT
260#define BJACK_LEFT BUTTON_LEFT
223 261
224#elif CONFIG_KEYPAD == SANSA_M200_PAD 262#elif CONFIG_KEYPAD == SANSA_M200_PAD
225#define BJACK_START (BUTTON_SELECT | BUTTON_REL) 263#define BJACK_SELECT_NAME "SELECT"
226#define BJACK_QUIT BUTTON_POWER 264#define BJACK_STAY_NAME "RIGHT"
227#define BJACK_MAX BUTTON_VOL_UP 265#define BJACK_RESUME_NAME "DOWN"
228#define BJACK_MIN BUTTON_VOL_DOWN 266#define BJACK_QUIT_NAME "POWER"
229#define BJACK_HIT (BUTTON_SELECT | BUTTON_REL) 267#define BJACK_DOUBLE_NAME "LEFT"
230#define BJACK_STAY BUTTON_RIGHT 268#define BJACK_SELECT (BUTTON_SELECT | BUTTON_REL)
231#define BJACK_DOUBLEDOWN BUTTON_LEFT 269#define BJACK_QUIT BUTTON_POWER
232#define BJACK_SCORES (BUTTON_SELECT | BUTTON_UP) 270#define BJACK_MAX BUTTON_VOL_UP
233#define BJACK_RESUME BUTTON_DOWN 271#define BJACK_MIN BUTTON_VOL_DOWN
234#define BJACK_UP BUTTON_UP 272#define BJACK_STAY BUTTON_RIGHT
235#define BJACK_DOWN BUTTON_DOWN 273#define BJACK_DOUBLEDOWN BUTTON_LEFT
236#define BJACK_RIGHT BUTTON_RIGHT 274#define BJACK_RESUME BUTTON_DOWN
237#define BJACK_LEFT BUTTON_LEFT 275#define BJACK_UP BUTTON_UP
276#define BJACK_DOWN BUTTON_DOWN
277#define BJACK_RIGHT BUTTON_RIGHT
278#define BJACK_LEFT BUTTON_LEFT
238 279
239#elif CONFIG_KEYPAD == ELIO_TPJ1022_PAD 280#elif CONFIG_KEYPAD == ELIO_TPJ1022_PAD
240#define BJACK_START BUTTON_MAIN 281#define BJACK_SELECT_NAME "MAIN"
241#define BJACK_QUIT BUTTON_POWER 282#define BJACK_STAY_NAME "MENU"
242#define BJACK_MAX (BUTTON_REC|BUTTON_UP) 283#define BJACK_RESUME_NAME ">>|"
243#define BJACK_MIN (BUTTON_REC|BUTTON_DOWN) 284#define BJACK_QUIT_NAME "POWER"
244#define BJACK_HIT BUTTON_MAIN 285#define BJACK_DOUBLE_NAME "DOWN"
245#define BJACK_STAY BUTTON_MENU 286#define BJACK_SELECT BUTTON_MAIN
246#define BJACK_DOUBLEDOWN BUTTON_DOWN 287#define BJACK_QUIT BUTTON_POWER
247#define BJACK_SCORES BUTTON_UP 288#define BJACK_MAX (BUTTON_REC|BUTTON_UP)
248#define BJACK_RESUME BUTTON_FF 289#define BJACK_MIN (BUTTON_REC|BUTTON_DOWN)
249#define BJACK_UP BUTTON_UP 290#define BJACK_STAY BUTTON_MENU
250#define BJACK_DOWN BUTTON_DOWN 291#define BJACK_DOUBLEDOWN BUTTON_DOWN
251#define BJACK_RIGHT BUTTON_RIGHT 292#define BJACK_RESUME BUTTON_FF
252#define BJACK_LEFT BUTTON_LEFT 293#define BJACK_UP BUTTON_UP
294#define BJACK_DOWN BUTTON_DOWN
295#define BJACK_RIGHT BUTTON_RIGHT
296#define BJACK_LEFT BUTTON_LEFT
253 297
254#elif CONFIG_KEYPAD == GIGABEAT_S_PAD 298#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
255#define BJACK_START BUTTON_PLAY 299#define BJACK_SELECT_NAME "PLAY"
256#define BJACK_QUIT BUTTON_BACK 300#define BJACK_STAY_NAME "VOL-"
257#define BJACK_MAX BUTTON_VOL_UP 301#define BJACK_RESUME_NAME "MENU"
258#define BJACK_MIN BUTTON_VOL_DOWN 302#define BJACK_QUIT_NAME "BACK"
259#define BJACK_HIT BUTTON_VOL_UP 303#define BJACK_DOUBLE_NAME "SELECT"
260#define BJACK_STAY BUTTON_VOL_DOWN 304#define BJACK_SELECT BUTTON_PLAY
261#define BJACK_DOUBLEDOWN BUTTON_SELECT 305#define BJACK_QUIT BUTTON_BACK
262#define BJACK_SCORES BUTTON_RIGHT 306#define BJACK_MAX BUTTON_VOL_UP
263#define BJACK_RESUME BUTTON_MENU 307#define BJACK_MIN BUTTON_VOL_DOWN
264#define BJACK_UP BUTTON_UP 308#define BJACK_STAY BUTTON_VOL_DOWN
265#define BJACK_DOWN BUTTON_DOWN 309#define BJACK_DOUBLEDOWN BUTTON_SELECT
266#define BJACK_RIGHT BUTTON_RIGHT 310#define BJACK_RESUME BUTTON_MENU
267#define BJACK_LEFT BUTTON_LEFT 311#define BJACK_UP BUTTON_UP
312#define BJACK_DOWN BUTTON_DOWN
313#define BJACK_RIGHT BUTTON_RIGHT
314#define BJACK_LEFT BUTTON_LEFT
268 315
269#elif CONFIG_KEYPAD == MROBE100_PAD 316#elif CONFIG_KEYPAD == MROBE100_PAD
270 317#define BJACK_SELECT_NAME "SELECT"
271#define BJACK_START BUTTON_SELECT 318#define BJACK_STAY_NAME "DISPLAY"
272#define BJACK_QUIT BUTTON_POWER 319#define BJACK_RESUME_NAME "PLAY"
273#define BJACK_MAX BUTTON_MENU 320#define BJACK_QUIT_NAME "POWER"
274#define BJACK_MIN BUTTON_DISPLAY 321#define BJACK_DOUBLE_NAME "DOWN"
275#define BJACK_HIT BUTTON_MENU 322#define BJACK_SELECT BUTTON_SELECT
276#define BJACK_STAY BUTTON_DISPLAY 323#define BJACK_QUIT BUTTON_POWER
277#define BJACK_DOUBLEDOWN BUTTON_DOWN 324#define BJACK_MAX BUTTON_MENU
278#define BJACK_SCORES BUTTON_RIGHT 325#define BJACK_MIN BUTTON_DISPLAY
279#define BJACK_RESUME BUTTON_PLAY 326#define BJACK_STAY BUTTON_DISPLAY
280#define BJACK_UP BUTTON_UP 327#define BJACK_DOUBLEDOWN BUTTON_DOWN
281#define BJACK_DOWN BUTTON_DOWN 328#define BJACK_RESUME BUTTON_PLAY
282#define BJACK_RIGHT BUTTON_RIGHT 329#define BJACK_UP BUTTON_UP
283#define BJACK_LEFT BUTTON_LEFT 330#define BJACK_DOWN BUTTON_DOWN
331#define BJACK_RIGHT BUTTON_RIGHT
332#define BJACK_LEFT BUTTON_LEFT
284 333
285#elif CONFIG_KEYPAD == IAUDIO_M3_PAD 334#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
286 335#define BJACK_SELECT_NAME "RC","PLAY"
287#define BJACK_START BUTTON_RC_PLAY 336#define BJACK_STAY_NAME "RC", ">>|"
288#define BJACK_QUIT BUTTON_RC_REC 337#define BJACK_RESUME_NAME "RC_MODE"
289#define BJACK_MAX (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP) 338#define BJACK_QUIT_NAME "RC_REC"
290#define BJACK_MIN (BUTTON_RC_PLAY|BUTTON_RC_VOL_DOWN) 339#define BJACK_DOUBLE_NAME "RC_REW"
291#define BJACK_HIT BUTTON_RC_PLAY 340#define BJACK_SELECT BUTTON_RC_PLAY
292#define BJACK_STAY BUTTON_RC_FF 341#define BJACK_QUIT BUTTON_RC_REC
293#define BJACK_DOUBLEDOWN BUTTON_RC_REW 342#define BJACK_MAX (BUTTON_RC_PLAY|BUTTON_RC_VOL_UP)
294#define BJACK_SCORES BUTTON_RC_MENU 343#define BJACK_MIN (BUTTON_RC_PLAY|BUTTON_RC_VOL_DOWN)
295#define BJACK_RESUME BUTTON_RC_MODE 344#define BJACK_STAY BUTTON_RC_FF
296#define BJACK_UP BUTTON_RC_VOL_UP 345#define BJACK_DOUBLEDOWN BUTTON_RC_REW
297#define BJACK_DOWN BUTTON_RC_VOL_DOWN 346#define BJACK_RESUME BUTTON_RC_MODE
298#define BJACK_RIGHT BUTTON_RC_FF 347#define BJACK_UP BUTTON_RC_VOL_UP
299#define BJACK_LEFT BUTTON_RC_REW 348#define BJACK_DOWN BUTTON_RC_VOL_DOWN
349#define BJACK_RIGHT BUTTON_RC_FF
350#define BJACK_LEFT BUTTON_RC_REW
300 351
301#elif CONFIG_KEYPAD == COWOND2_PAD 352#elif CONFIG_KEYPAD == COWOND2_PAD
302#define BJACK_QUIT BUTTON_POWER 353#define BJACK_QUIT_NAME "POWER"
303#define BJACK_DOUBLEDOWN BUTTON_MINUS 354#define BJACK_DOUBLE_NAME "-"
304#define BJACK_SCORES BUTTON_MENU 355#define BJACK_QUIT BUTTON_POWER
356#define BJACK_DOUBLEDOWN BUTTON_MINUS
305 357
306#elif CONFIG_KEYPAD == CREATIVEZVM_PAD 358#elif CONFIG_KEYPAD == CREATIVEZVM_PAD
307#define BJACK_START BUTTON_SELECT 359#define BJACK_SELECT_NAME "SELECT"
308#define BJACK_QUIT BUTTON_BACK 360#define BJACK_STAY_NAME "DOWN"
309#define BJACK_MAX (BUTTON_CUSTOM|BUTTON_UP) 361#define BJACK_RESUME_NAME "MENU"
310#define BJACK_MIN (BUTTON_CUSTOM|BUTTON_DOWN) 362#define BJACK_QUIT_NAME "BACK"
311#define BJACK_HIT BUTTON_UP 363#define BJACK_DOUBLE_NAME "CUSTOM"
312#define BJACK_STAY BUTTON_DOWN 364#define BJACK_SELECT BUTTON_SELECT
313#define BJACK_DOUBLEDOWN BUTTON_CUSTOM 365#define BJACK_QUIT BUTTON_BACK
314#define BJACK_SCORES BUTTON_RIGHT 366#define BJACK_MAX (BUTTON_CUSTOM|BUTTON_UP)
315#define BJACK_RESUME BUTTON_MENU 367#define BJACK_MIN (BUTTON_CUSTOM|BUTTON_DOWN)
316#define BJACK_UP BUTTON_UP 368#define BJACK_DOUBLEDOWN BUTTON_CUSTOM
317#define BJACK_DOWN BUTTON_DOWN 369#define BJACK_RESUME BUTTON_MENU
318#define BJACK_RIGHT BUTTON_RIGHT 370#define BJACK_UP BUTTON_UP
319#define BJACK_LEFT BUTTON_LEFT 371#define BJACK_DOWN BUTTON_DOWN
372#define BJACK_RIGHT BUTTON_RIGHT
373#define BJACK_LEFT BUTTON_LEFT
320 374
321#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD 375#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
322#define BJACK_START BUTTON_MENU 376#define BJACK_SELECT_NAME "MENU"
323#define BJACK_QUIT BUTTON_POWER 377#define BJACK_STAY_NAME "VOL-"
324#define BJACK_MAX BUTTON_VOL_UP 378#define BJACK_RESUME_NAME "VIEW"
325#define BJACK_MIN BUTTON_VOL_DOWN 379#define BJACK_QUIT_NAME "POWER"
326#define BJACK_HIT BUTTON_VOL_UP 380#define BJACK_DOUBLE_NAME "SELECT"
327#define BJACK_STAY BUTTON_VOL_DOWN 381#define BJACK_SELECT BUTTON_MENU
328#define BJACK_DOUBLEDOWN BUTTON_SELECT 382#define BJACK_QUIT BUTTON_POWER
329#define BJACK_SCORES BUTTON_RIGHT 383#define BJACK_MAX BUTTON_VOL_UP
330#define BJACK_RESUME BUTTON_VIEW 384#define BJACK_MIN BUTTON_VOL_DOWN
331#define BJACK_UP BUTTON_UP 385#define BJACK_STAY BUTTON_VOL_DOWN
332#define BJACK_DOWN BUTTON_DOWN 386#define BJACK_DOUBLEDOWN BUTTON_SELECT
333#define BJACK_RIGHT BUTTON_RIGHT 387#define BJACK_RESUME BUTTON_VIEW
334#define BJACK_LEFT BUTTON_LEFT 388#define BJACK_UP BUTTON_UP
389#define BJACK_DOWN BUTTON_DOWN
390#define BJACK_RIGHT BUTTON_RIGHT
391#define BJACK_LEFT BUTTON_LEFT
335 392
336#elif CONFIG_KEYPAD == ONDAVX747_PAD 393#elif CONFIG_KEYPAD == ONDAVX747_PAD
337#define BJACK_QUIT BUTTON_POWER 394#define BJACK_QUIT_NAME "POWER"
338#define BJACK_DOUBLEDOWN BUTTON_VOL_DOWN 395#define BJACK_DOUBLE_NAME "Vol-"
339#define BJACK_SCORES BUTTON_MENU 396#define BJACK_QUIT BUTTON_POWER
397#define BJACK_DOUBLEDOWN BUTTON_VOL_DOWN
340 398
341#elif CONFIG_KEYPAD == MROBE500_PAD 399#elif CONFIG_KEYPAD == MROBE500_PAD
342#define BJACK_QUIT BUTTON_POWER 400#define BJACK_QUIT_NAME "POWER"
401#define BJACK_QUIT BUTTON_POWER
343 402
344#else 403#else
345#error No keymap defined! 404#error No keymap defined!
@@ -347,40 +406,38 @@ PLUGIN_HEADER
347 406
348#ifdef HAVE_TOUCHSCREEN 407#ifdef HAVE_TOUCHSCREEN
349#ifndef BJACK_DOUBLEDOWN 408#ifndef BJACK_DOUBLEDOWN
350#define BJACK_DOUBLEDOWN BUTTON_MIDLEFT 409#define BJACK_DOUBLEDOWN BUTTON_MIDLEFT
410#define BJACK_DOUBLE_NAME "BUTTON_MIDLEFT"
351#endif 411#endif
352#ifndef BJACK_SCORES 412#ifndef BJACK_SELECT
353#define BJACK_SCORES BUTTON_MIDRIGHT 413#define BJACK_SELECT BUTTON_CENTER
354#endif 414#define BJACK_SELECT_NAME "BUTTON_CENTER"
355#ifndef BJACK_START
356#define BJACK_START BUTTON_CENTER
357#endif
358#ifndef BJACK_HIT
359#define BJACK_HIT BUTTON_CENTER
360#endif 415#endif
361#ifndef BJACK_MAX 416#ifndef BJACK_MAX
362#define BJACK_MAX BUTTON_TOPRIGHT 417#define BJACK_MAX BUTTON_TOPRIGHT
363#endif 418#endif
364#ifndef BJACK_MIN 419#ifndef BJACK_MIN
365#define BJACK_MIN BUTTON_TOPLEFT 420#define BJACK_MIN BUTTON_TOPLEFT
366#endif 421#endif
367#ifndef BJACK_RESUME 422#ifndef BJACK_RESUME
368#define BJACK_RESUME BUTTON_BOTTOMRIGHT 423#define BJACK_RESUME BUTTON_BOTTOMRIGHT
424#define BJACK_RESUME_NAME "BUTTON_BOTTOMRIGHT"
369#endif 425#endif
370#ifndef BJACK_STAY 426#ifndef BJACK_STAY
371#define BJACK_STAY BUTTON_BOTTOMLEFT 427#define BJACK_STAY BUTTON_BOTTOMLEFT
428#define BJACK_STAY_NAME "BUTTON_BOTTOMLEFT"
372#endif 429#endif
373#ifndef BJACK_UP 430#ifndef BJACK_UP
374#define BJACK_UP BUTTON_TOPMIDDLE 431#define BJACK_UP BUTTON_TOPMIDDLE
375#endif 432#endif
376#ifndef BJACK_DOWN 433#ifndef BJACK_DOWN
377#define BJACK_DOWN BUTTON_BOTTOMMIDDLE 434#define BJACK_DOWN BUTTON_BOTTOMMIDDLE
378#endif 435#endif
379#ifndef BJACK_RIGHT 436#ifndef BJACK_RIGHT
380#define BJACK_RIGHT BUTTON_MIDRIGHT 437#define BJACK_RIGHT BUTTON_MIDRIGHT
381#endif 438#endif
382#ifndef BJACK_LEFT 439#ifndef BJACK_LEFT
383#define BJACK_LEFT BUTTON_MIDLEFT 440#define BJACK_LEFT BUTTON_MIDLEFT
384#endif 441#endif
385 442
386#endif 443#endif
@@ -426,11 +483,10 @@ typedef struct game_context {
426 unsigned int split_status; /* 0 = split hasn't been asked, * 483 unsigned int split_status; /* 0 = split hasn't been asked, *
427 * 1 = split did not occur * 484 * 1 = split did not occur *
428 * 2 = split occurred * 485 * 2 = split occurred *
429 * 3 = split occurred and 1st hand done */ 486 * 3 = split occurred and 1st hand done */
430 bool is_blackjack; 487 bool is_blackjack;
431 bool end_hand; 488 bool end_hand;
432 bool asked_insurance; 489 bool asked_insurance;
433 signed short highscores[NUM_SCORES];
434 bool resume; 490 bool resume;
435 bool dirty; 491 bool dirty;
436} game_context; 492} game_context;
@@ -766,72 +822,6 @@ static void finish_game(struct game_context* bj) {
766} 822}
767 823
768/***************************************************************************** 824/*****************************************************************************
769* blackjack_recordscore() inserts a high score into the high scores list and
770* returns the high score position.
771******************************************************************************/
772static unsigned int blackjack_recordscore(struct game_context* bj) {
773 unsigned int i;
774 unsigned int position = 0;
775 signed short current, temp;
776
777 /* calculate total score */
778 current = bj->player_money;
779 if(current <= 10) return 0;
780
781 /* insert the current score into the high scores */
782 for(i=0; i<NUM_SCORES; i++) {
783 if(current >= bj->highscores[i]) {
784 if(!position) {
785 position = i+1;
786 bj->dirty = true;
787 }
788 temp = bj->highscores[i];
789 bj->highscores[i] = current;
790 current = temp;
791 }
792 }
793
794 return position;
795}
796
797/*****************************************************************************
798* blackjack_loadscores() loads the high scores saved file.
799******************************************************************************/
800static void blackjack_loadscores(struct game_context* bj) {
801 signed int fd;
802
803 bj->dirty = false;
804
805 /* clear high scores */
806 rb->memset(bj->highscores, 0, sizeof(bj->highscores));
807
808 /* open scores file */
809 fd = rb->open(SCORE_FILE, O_RDONLY);
810 if(fd < 0) return;
811
812 /* read in high scores */
813 if(rb->read(fd, bj->highscores, sizeof(bj->highscores)) <= 0) {
814 /* scores are bad, reset */
815 rb->memset(bj->highscores, 0, sizeof(bj->highscores));
816 }
817
818 rb->close(fd);
819}
820
821/*****************************************************************************
822* blackjack_savescores() saves the high scores saved file.
823******************************************************************************/
824static void blackjack_savescores(struct game_context* bj) {
825 unsigned int fd;
826
827 /* write out the high scores to the save file */
828 fd = rb->open(SCORE_FILE, O_WRONLY|O_CREAT);
829 rb->write(fd, bj->highscores, sizeof(bj->highscores));
830 rb->close(fd);
831 bj->dirty = false;
832}
833
834/*****************************************************************************
835* blackjack_loadgame() loads the saved game and returns load success. 825* blackjack_loadgame() loads the saved game and returns load success.
836******************************************************************************/ 826******************************************************************************/
837static bool blackjack_loadgame(struct game_context* bj) { 827static bool blackjack_loadgame(struct game_context* bj) {
@@ -844,21 +834,30 @@ static bool blackjack_loadgame(struct game_context* bj) {
844 834
845 /* read in saved game */ 835 /* read in saved game */
846 while(true) { 836 while(true) {
847 if(rb->read(fd, &bj->player_money, sizeof(bj->player_money)) <= 0) break; 837 if(rb->read(fd, &bj->player_money, sizeof(bj->player_money)) <= 0)
848 if(rb->read(fd, &bj->player_total, sizeof(bj->player_total)) <= 0) break; 838 break;
849 if(rb->read(fd, &bj->dealer_total, sizeof(bj->dealer_total)) <= 0) break; 839 if(rb->read(fd, &bj->player_total, sizeof(bj->player_total)) <= 0)
840 break;
841 if(rb->read(fd, &bj->dealer_total, sizeof(bj->dealer_total)) <= 0)
842 break;
850 if(rb->read(fd, &bj->num_player_cards, sizeof(bj->num_player_cards))<=0) 843 if(rb->read(fd, &bj->num_player_cards, sizeof(bj->num_player_cards))<=0)
851 break; 844 break;
852 if(rb->read(fd, &bj->num_dealer_cards, sizeof(bj->num_dealer_cards))<=0) 845 if(rb->read(fd, &bj->num_dealer_cards, sizeof(bj->num_dealer_cards))<=0)
853 break; 846 break;
854 if(rb->read(fd, &bj->current_bet, sizeof(bj->current_bet)) <= 0) break; 847 if(rb->read(fd, &bj->current_bet, sizeof(bj->current_bet)) <= 0)
855 if(rb->read(fd, &bj->is_blackjack, sizeof(bj->is_blackjack)) <= 0) break; 848 break;
856 if(rb->read(fd, &bj->split_status, sizeof(bj->split_status)) <= 0) break; 849 if(rb->read(fd, &bj->is_blackjack, sizeof(bj->is_blackjack)) <= 0)
850 break;
851 if(rb->read(fd, &bj->split_status, sizeof(bj->split_status)) <= 0)
852 break;
857 if(rb->read(fd, &bj->asked_insurance, sizeof(bj->asked_insurance)) <= 0) 853 if(rb->read(fd, &bj->asked_insurance, sizeof(bj->asked_insurance)) <= 0)
858 break; 854 break;
859 if(rb->read(fd, &bj->end_hand, sizeof(bj->end_hand)) <= 0) break; 855 if(rb->read(fd, &bj->end_hand, sizeof(bj->end_hand)) <= 0)
860 if(rb->read(fd, &bj->player_cards, sizeof(bj->player_cards)) <= 0) break; 856 break;
861 if(rb->read(fd, &bj->dealer_cards, sizeof(bj->dealer_cards)) <= 0) break; 857 if(rb->read(fd, &bj->player_cards, sizeof(bj->player_cards)) <= 0)
858 break;
859 if(rb->read(fd, &bj->dealer_cards, sizeof(bj->dealer_cards)) <= 0)
860 break;
862 bj->resume = true; 861 bj->resume = true;
863 loaded = true; 862 loaded = true;
864 break; 863 break;
@@ -903,8 +902,7 @@ static void blackjack_savegame(struct game_context* bj) {
903static void blackjack_callback(void* param) { 902static void blackjack_callback(void* param) {
904 struct game_context* bj = (struct game_context*) param; 903 struct game_context* bj = (struct game_context*) param;
905 if(bj->dirty) { 904 if(bj->dirty) {
906 rb->splash(HZ, "Saving high scores..."); 905 highscore_save(HIGH_SCORE,highest,NUM_SCORES);
907 blackjack_savescores(bj);
908 } 906 }
909} 907}
910 908
@@ -954,7 +952,7 @@ static unsigned int blackjack_get_yes_no(char message[20]) {
954 case (BJACK_RIGHT|BUTTON_REPEAT): 952 case (BJACK_RIGHT|BUTTON_REPEAT):
955 choice ^= 1; 953 choice ^= 1;
956 break; 954 break;
957 case BJACK_START: breakout = true; 955 case BJACK_SELECT: breakout = true;
958 break; 956 break;
959 case BJACK_QUIT: breakout = true; 957 case BJACK_QUIT: breakout = true;
960 choice = BJ_QUIT; 958 choice = BJ_QUIT;
@@ -972,7 +970,7 @@ static unsigned int blackjack_get_yes_no(char message[20]) {
972/***************************************************************************** 970/*****************************************************************************
973* blackjack_get_amount() gets an amount from the player to be used 971* blackjack_get_amount() gets an amount from the player to be used
974******************************************************************************/ 972******************************************************************************/
975static signed int blackjack_get_amount(char message[20], signed int lower_limit, 973static signed int blackjack_get_amount(char message[20], signed int lower_limit,
976 signed int upper_limit, 974 signed int upper_limit,
977 signed int start) { 975 signed int start) {
978 int button; 976 int button;
@@ -1079,7 +1077,7 @@ static signed int blackjack_get_amount(char message[20], signed int lower_limit,
1079 break; 1077 break;
1080 case BJACK_QUIT: 1078 case BJACK_QUIT:
1081 return 0; 1079 return 0;
1082 case BJACK_START: 1080 case BJACK_SELECT:
1083#if LCD_DEPTH > 1 1081#if LCD_DEPTH > 1
1084 rb->lcd_set_foreground(FG_COLOR); 1082 rb->lcd_set_foreground(FG_COLOR);
1085 rb->lcd_set_background(BG_COLOR); 1083 rb->lcd_set_background(BG_COLOR);
@@ -1165,209 +1163,66 @@ static unsigned int play_again(void) {
1165 return blackjack_get_yes_no("Play Again?"); 1163 return blackjack_get_yes_no("Play Again?");
1166} 1164}
1167 1165
1166void showhelp(void) {
1167#define WORDS (sizeof help_text / sizeof (char*))
1168 static char *help_text[] = {
1169 "Blackjack", "",
1170 "The", "goal", "is", "to", "get", "21.", "", "",
1171 "Controls", "",
1172 BJACK_SELECT_NAME, ":", "hit", "/", "select", "",
1173 BJACK_STAY_NAME, ":", "stay", "",
1174 BJACK_DOUBLE_NAME, ":", "double", "down", "",
1175 BJACK_QUIT_NAME, ":", "Go", "to", "menu", "without", "save", "",
1176 BJACK_RESUME_NAME, ":", "Save", "and", "go", "to", "menu", "",
1177
1178 };
1179 static struct style_text formation[]={
1180 { 0, TEXT_CENTER|TEXT_UNDERLINE },
1181 { 12, C_RED }, /* Hit/Select */
1182 { 18, C_RED }, /* Stay */
1183 { 22, C_RED }, /* Double Down */
1184 { 27, C_RED }, /* Quit */
1185 { 35, C_RED }, /* Save */
1186 { -1, 0 }
1187 };
1188 int button;
1189
1190 rb->lcd_setfont(FONT_UI);
1191#ifdef HAVE_LCD_COLOR
1192 rb->lcd_set_background(LCD_BLACK);
1193 rb->lcd_set_foreground(LCD_WHITE);
1194#endif
1195
1196 if (display_text(WORDS, help_text, formation, NULL))
1197 return;
1198 do {
1199 button = rb->button_get(true);
1200 if (rb->default_event_handler(button) == SYS_USB_CONNECTED) {
1201 return;
1202 }
1203 } while( ( button == BUTTON_NONE )
1204 || ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
1205 rb->lcd_setfont(FONT_SYSFIXED);
1206 return;
1207}
1208
1168/***************************************************************************** 1209/*****************************************************************************
1169* blackjack_menu() is the initial menu at the start of the game. 1210* blackjack_menu() is the initial menu at the start of the game.
1170******************************************************************************/ 1211******************************************************************************/
1171static unsigned int blackjack_menu(struct game_context* bj) { 1212static unsigned int blackjack_menu(struct game_context* bj) {
1172 int button; 1213 int button;
1173 char *title = "Blackjack"; 1214 int selection=0;
1174 char str[18];
1175 unsigned int i, w, h;
1176 bool breakout = false; 1215 bool breakout = false;
1177 bool showscores = false;
1178 1216
1179 while(true){ 1217 MENUITEM_STRINGLIST(menu,"BlackJack Menu",NULL,"Start Game","Resume Game",
1180#if LCD_DEPTH > 1 1218 "High Scores", "Help", "Playback Control", "Quit");
1181 rb->lcd_set_background(BG_COLOR);
1182 rb->lcd_set_foreground(FG_COLOR);
1183#endif
1184 rb->lcd_clear_display();
1185
1186 if(!showscores) {
1187 /* welcome screen to display key bindings */
1188 rb->lcd_getstringsize(title, &w, &h);
1189 rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, title);
1190
1191#if CONFIG_KEYPAD == RECORDER_PAD
1192 rb->lcd_puts(0, 1, "ON: start");
1193 rb->lcd_puts(0, 2, "OFF: exit");
1194 rb->lcd_puts(0, 3, "F1: hit");
1195 rb->lcd_puts(0, 4, "F2: stay");
1196 rb->lcd_puts(0, 5, "F3: double down");
1197 rb->lcd_puts(0, 6, "PLAY: save/resume");
1198 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1199 rb->lcd_puts(0, 7, str);
1200#elif CONFIG_KEYPAD == ONDIO_PAD
1201 rb->lcd_puts(0, 1, "MENU: start");
1202 rb->lcd_puts(0, 2, "OFF: exit");
1203 rb->lcd_puts(0, 3, "LEFT: hit");
1204 rb->lcd_puts(0, 4, "RIGHT: stay");
1205 rb->lcd_puts(0, 5, "UP: double down");
1206 rb->lcd_puts(0, 6, "DOWN: save/resume");
1207 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1208 rb->lcd_puts(0, 7, str);
1209#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || (CONFIG_KEYPAD == IRIVER_H300_PAD)
1210 rb->lcd_puts(0, 2, "PLAY to start & to hit");
1211 rb->lcd_puts(0, 3, "STOP to exit");
1212 rb->lcd_puts(0, 4, "REC to stay");
1213 rb->lcd_puts(0, 5, "NAVI to double down ");
1214 rb->lcd_puts(0, 6, " & to view highscores");
1215 rb->lcd_puts(0, 7, "AB to save/resume");
1216 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1217 rb->lcd_puts(0, 8, str);
1218#elif CONFIG_KEYPAD == IRIVER_H10_PAD
1219 rb->lcd_puts(0, 2, "PLAY to start & hit");
1220 rb->lcd_puts(0, 3, "POWER to exit");
1221 rb->lcd_puts(0, 4, ">>| to stay");
1222 rb->lcd_puts(0, 5, "|<< to double down");
1223 rb->lcd_puts(0, 6, "LEFT to view scores");
1224 rb->lcd_puts(0, 7, "RIGHT to save/resume");
1225 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1226 rb->lcd_puts(0, 8, str);
1227 1219
1228#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || \ 1220 while(!breakout) {
1229 (CONFIG_KEYPAD == IPOD_3G_PAD) || \ 1221 switch(rb->do_menu(&menu, &selection, NULL, false)) {
1230 (CONFIG_KEYPAD == IPOD_1G2G_PAD) 1222 case 0:
1231#if LCD_WIDTH >=176
1232 rb->lcd_puts(0, 2, "SELECT to start & to hit");
1233 rb->lcd_puts(0, 3, "MENU to exit");
1234 rb->lcd_puts(0, 4, ">>| to stay & to view highscores");
1235 rb->lcd_puts(0, 5, "|<< to double down");
1236 rb->lcd_puts(0, 6, "PLAY to save/resume");
1237 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1238 rb->lcd_puts(0, 7, str);
1239#else
1240 rb->lcd_puts(0, 2, "SELECT to start & to ");
1241 rb->lcd_puts(0, 3, " hit");
1242 rb->lcd_puts(0, 4, "MENU to exit");
1243 rb->lcd_puts(0, 5, ">>| to stay & to view ");
1244 rb->lcd_puts(0, 6, " highscores");
1245 rb->lcd_puts(0, 7, "|<< to double down");
1246 rb->lcd_puts(0, 8, "PLAY to save/resume");
1247 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1248 rb->lcd_puts(0, 9, str);
1249#endif
1250#elif CONFIG_KEYPAD == IAUDIO_X5M5_PAD
1251 rb->lcd_puts(0, 2, "PLAY to start to hit");
1252 rb->lcd_puts(0, 3, "POWER to exit");
1253 rb->lcd_puts(0, 4, "SELECT to hit");
1254 rb->lcd_puts(0, 5, "REC to stay");
1255 rb->lcd_puts(0, 6, "PLAY to double down");
1256 rb->lcd_puts(0, 7, "RIGHT to view highscores ");
1257 rb->lcd_puts(0, 8, "DOWN to save/resume");
1258 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1259 rb->lcd_puts(0, 9, str);
1260#elif CONFIG_KEYPAD == IRIVER_IFP7XX_PAD
1261 rb->lcd_puts(0, 2, "AB to start & to");
1262 rb->lcd_puts(0, 3, " stay");
1263 rb->lcd_puts(0, 4, "EQ to hit");
1264 rb->lcd_puts(0, 5, "PLAY to exit");
1265 rb->lcd_puts(0, 6, "CLICK to double down");
1266 rb->lcd_puts(0, 7, "& to view highscores");
1267 rb->lcd_puts(0, 8, "AB+EQ to save/resume");
1268 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1269 rb->lcd_puts(0, 9, str);
1270#elif CONFIG_KEYPAD == GIGABEAT_PAD
1271 rb->lcd_puts(0, 2, "A to start");
1272 rb->lcd_puts(0, 3, "POWER to exit");
1273 rb->lcd_puts(0, 4, "VOL+ to hit");
1274 rb->lcd_puts(0, 5, "VOL- to stay");
1275 rb->lcd_puts(0, 6, "SELECT to double down");
1276 rb->lcd_puts(0, 7, "RIGHT to view highscores ");
1277 rb->lcd_puts(0, 8, "MENU to save/resume");
1278 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1279 rb->lcd_puts(0, 9, str);
1280#elif CONFIG_KEYPAD == GIGABEAT_S_PAD
1281 rb->lcd_puts(0, 2, "PLAY to start");
1282 rb->lcd_puts(0, 3, "BACK to exit");
1283 rb->lcd_puts(0, 4, "VOL+ to hit");
1284 rb->lcd_puts(0, 5, "VOL- to stay");
1285 rb->lcd_puts(0, 6, "SELECT to double down");
1286 rb->lcd_puts(0, 7, "RIGHT to view highscores ");
1287 rb->lcd_puts(0, 8, "MENU to save/resume");
1288 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1289 rb->lcd_puts(0, 9, str);
1290#elif CONFIG_KEYPAD == MROBE100_PAD
1291 rb->lcd_puts(0, 2, "SELECT to start");
1292 rb->lcd_puts(0, 3, "POWER to exit");
1293 rb->lcd_puts(0, 4, "MENU to hit");
1294 rb->lcd_puts(0, 5, "DISPLAY to stay");
1295 rb->lcd_puts(0, 6, "DOWN to double down");
1296 rb->lcd_puts(0, 7, "RIGHT to view highscores ");
1297 rb->lcd_puts(0, 8, "PLAY to save/resume");
1298 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1299 rb->lcd_puts(0, 9, str);
1300#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
1301 rb->lcd_puts(0, 2, "SELECT to start & to hit");
1302 rb->lcd_puts(0, 3, "POWER to exit");
1303 rb->lcd_puts(0, 4, "RIGHT to stay");
1304 rb->lcd_puts(0, 5, "LEFT to double down");
1305 rb->lcd_puts(0, 6, "REC to save/resume");
1306 rb->lcd_puts(0, 7, "UP to view scores");
1307 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1308 rb->lcd_puts(0, 8, str);
1309#elif (CONFIG_KEYPAD == SANSA_C200_PAD)
1310 rb->lcd_puts(0, 2, "SELECT to start & to hit");
1311 rb->lcd_puts(0, 3, "POWER to exit");
1312 rb->lcd_puts(0, 4, "RIGHT to stay");
1313 rb->lcd_puts(0, 5, "LEFT to double down");
1314 rb->lcd_puts(0, 6, "DOWN to save/resume");
1315 rb->lcd_puts(0, 7, "REC to view scores");
1316 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1317 rb->lcd_puts(0, 9, str);
1318#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
1319 rb->lcd_puts(0, 2, "PLAY to start & to");
1320 rb->lcd_puts(0, 3, " hit");
1321 rb->lcd_puts(0, 4, "REC to exit");
1322 rb->lcd_puts(0, 5, "FF to stay");
1323 rb->lcd_puts(0, 6, "REW to double down");
1324 rb->lcd_puts(0, 7, "MODE to save/resume");
1325 rb->lcd_puts(0, 8, "MENU to view scores");
1326 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1327 rb->lcd_puts(0, 10, str);
1328#elif CONFIG_KEYPAD == COWOND2_PAD
1329 rb->lcd_puts(0, 6, "POWER to exit");
1330 rb->lcd_puts(0, 7, "MINUS to double down");
1331 rb->lcd_puts(0, 8, "MENU to view scores");
1332 rb->snprintf(str, 21, "High Score: $%d", bj->highscores[0]);
1333 rb->lcd_puts(0, 10, str);
1334#endif
1335
1336#ifdef HAVE_TOUCHSCREEN
1337 rb->lcd_puts(0, 2, "LCD CENTRE to start & to hit");
1338 rb->lcd_puts(0, 3, "LCD BOTTOMLEFT to stay");
1339 rb->lcd_puts(0, 4, "LCD BOTTOMRIGHT to save/resume");
1340#endif
1341 } else {
1342 rb->snprintf(str, 12, "%s", "High Scores");
1343 rb->lcd_getstringsize(str, &w, &h);
1344 rb->lcd_putsxy((LCD_WIDTH-w)/2, 0, str);
1345
1346 /* print high scores */
1347 for(i=0; i<NUM_SCORES; i++) {
1348 rb->snprintf(str, 14, "#%02d: $%d", i+1, bj->highscores[i]);
1349 rb->lcd_puts(0, i+1, str);
1350 }
1351 }
1352
1353 rb->lcd_update();
1354
1355 /* handle menu button presses */
1356 button = rb->button_get(true);
1357
1358 switch(button) {
1359 case BJACK_START: /* start playing */
1360 breakout = true; 1223 breakout = true;
1361 break; 1224 break;
1362 1225 case 1:
1363 case BJACK_QUIT: /* quit program */
1364 if(showscores) {
1365 showscores = 0;
1366 break;
1367 }
1368 return BJ_QUIT;
1369
1370 case BJACK_RESUME:/* resume game */
1371 if(!blackjack_loadgame(bj)) { 1226 if(!blackjack_loadgame(bj)) {
1372 rb->splash(HZ*2, "Nothing to resume"); 1227 rb->splash(HZ*2, "Nothing to resume");
1373 } else { 1228 } else {
@@ -1375,22 +1230,27 @@ static unsigned int blackjack_menu(struct game_context* bj) {
1375 breakout = true; 1230 breakout = true;
1376 } 1231 }
1377 break; 1232 break;
1378 1233 case 2:
1379 case BJACK_SCORES:/* toggle high scores */ 1234 highscore_show(NUM_SCORES, highest, NUM_SCORES, false);
1380 showscores = !showscores;
1381 break; 1235 break;
1382 1236 case 3:
1237 showhelp();
1238 break;
1239 case 4:
1240 if (playback_control(NULL))
1241 return 1;
1242 break;
1243 case 5:
1244 return BJ_QUIT;
1383 default: 1245 default:
1384 if(rb->default_event_handler_ex(button, blackjack_callback, 1246 if(rb->default_event_handler_ex(button, blackjack_callback,
1385 (void*) bj) == SYS_USB_CONNECTED) 1247 (void*) bj) == SYS_USB_CONNECTED)
1386 return BJ_USB; 1248 return BJ_USB;
1387 break; 1249 break;
1388 } 1250 }
1389
1390 if(breakout) break;
1391 } 1251 }
1392 1252
1393 return(0); 1253 return 0;
1394} 1254}
1395 1255
1396/***************************************************************************** 1256/*****************************************************************************
@@ -1493,7 +1353,7 @@ static int blackjack(struct game_context* bj) {
1493 button = rb->button_get(true); 1353 button = rb->button_get(true);
1494 1354
1495 switch(button) { 1355 switch(button) {
1496 case BJACK_HIT: 1356 case BJACK_SELECT:
1497 NEXT_CARD = new_card(); 1357 NEXT_CARD = new_card();
1498 bj->player_total += NEXT_CARD.value; 1358 bj->player_total += NEXT_CARD.value;
1499 draw_card(NEXT_CARD, true, player_x, player_y); 1359 draw_card(NEXT_CARD, true, player_x, player_y);
@@ -1520,7 +1380,7 @@ static int blackjack(struct game_context* bj) {
1520 bj->end_hand = true; 1380 bj->end_hand = true;
1521 break; 1381 break;
1522 case BJACK_DOUBLEDOWN: 1382 case BJACK_DOUBLEDOWN:
1523 if ((signed int)bj->current_bet * 2 < bj->player_money + 1 && 1383 if ((signed int)bj->current_bet * 2 < bj->player_money + 1&&
1524 bj->num_player_cards[0]==2 && todo==1) { 1384 bj->num_player_cards[0]==2 && todo==1) {
1525 double_down(bj); 1385 double_down(bj);
1526 dbl_down = true; 1386 dbl_down = true;
@@ -1529,7 +1389,7 @@ static int blackjack(struct game_context* bj) {
1529 finish_game(bj); 1389 finish_game(bj);
1530 } 1390 }
1531 } 1391 }
1532 else if((signed int)bj->current_bet * 2 > bj->player_money) { 1392 else if((signed int)bj->current_bet * 2 > bj->player_money){
1533 rb->splash(HZ, "Not enough money to double down."); 1393 rb->splash(HZ, "Not enough money to double down.");
1534 redraw_board(bj); 1394 redraw_board(bj);
1535 rb->lcd_update(); 1395 rb->lcd_update();
@@ -1640,8 +1500,6 @@ enum plugin_status plugin_start(const void* parameter)
1640{ 1500{
1641 struct game_context bj; 1501 struct game_context bj;
1642 bool exit = false; 1502 bool exit = false;
1643 unsigned int position;
1644 char str[19];
1645 1503
1646 (void)parameter; 1504 (void)parameter;
1647 1505
@@ -1650,7 +1508,7 @@ enum plugin_status plugin_start(const void* parameter)
1650#endif 1508#endif
1651 1509
1652 /* load high scores */ 1510 /* load high scores */
1653 blackjack_loadscores(&bj); 1511 highscore_load(HIGH_SCORE,highest,NUM_SCORES);
1654 1512
1655 rb->lcd_setfont(FONT_SYSFIXED); 1513 rb->lcd_setfont(FONT_SYSFIXED);
1656 1514
@@ -1662,9 +1520,17 @@ enum plugin_status plugin_start(const void* parameter)
1662 1520
1663 case BJ_END: 1521 case BJ_END:
1664 if(!bj.resume) { 1522 if(!bj.resume) {
1665 if((position = blackjack_recordscore(&bj))) { 1523 /* There is no level, so store -1 to blank column */
1666 rb->snprintf(str, 19, "New high score #%d!", position); 1524 int position = highscore_update(bj.player_money, -1, "",
1667 rb->splash(HZ*2, str); 1525 highest, NUM_SCORES);
1526 if (position == 0) {
1527 rb->splash(HZ*2, "New High Score");
1528 }
1529 if (position != -1) {
1530 highscore_show(position, highest, NUM_SCORES, false);
1531 bj.dirty=true;
1532 } else {
1533 rb->sleep(3);
1668 } 1534 }
1669 } 1535 }
1670 break; 1536 break;
@@ -1675,8 +1541,7 @@ enum plugin_status plugin_start(const void* parameter)
1675 1541
1676 case BJ_QUIT: 1542 case BJ_QUIT:
1677 if(bj.dirty) { 1543 if(bj.dirty) {
1678 rb->splash(HZ, "Saving high scores..."); 1544 highscore_save(HIGH_SCORE,highest,NUM_SCORES);
1679 blackjack_savescores(&bj);
1680 } 1545 }
1681 exit = true; 1546 exit = true;
1682 break; 1547 break;
diff --git a/apps/plugins/brickmania.c b/apps/plugins/brickmania.c
index 916cb01536..e2273c7c87 100644
--- a/apps/plugins/brickmania.c
+++ b/apps/plugins/brickmania.c
@@ -898,7 +898,7 @@ static int brickmania_menu(void)
898 return 1; 898 return 1;
899 break; 899 break;
900 case 4: 900 case 4:
901 highscore_show(NUM_SCORES, highest, NUM_SCORES); 901 highscore_show(NUM_SCORES, highest, NUM_SCORES, true);
902 break; 902 break;
903 case 5: 903 case 5:
904 if (playback_control(NULL)) 904 if (playback_control(NULL))
@@ -1710,7 +1710,7 @@ enum plugin_status plugin_start(const void* parameter)
1710 rb->splash(HZ*2, "New High Score"); 1710 rb->splash(HZ*2, "New High Score");
1711 } 1711 }
1712 if (position != -1) { 1712 if (position != -1) {
1713 highscore_show(position, highest, NUM_SCORES); 1713 highscore_show(position, highest, NUM_SCORES, true);
1714 } else { 1714 } else {
1715 brickmania_sleep(3); 1715 brickmania_sleep(3);
1716 } 1716 }
diff --git a/apps/plugins/bubbles.c b/apps/plugins/bubbles.c
index 64ab258240..d5d9987f68 100644
--- a/apps/plugins/bubbles.c
+++ b/apps/plugins/bubbles.c
@@ -2170,7 +2170,7 @@ static void bubbles_recordscore(struct game_context* bb) {
2170 if (position==0) 2170 if (position==0)
2171 rb->splash(HZ*2, "New High Score"); 2171 rb->splash(HZ*2, "New High Score");
2172 if (position != -1) 2172 if (position != -1)
2173 highscore_show(position, highscores, NUM_SCORES); 2173 highscore_show(position, highscores, NUM_SCORES, true);
2174} 2174}
2175 2175
2176/***************************************************************************** 2176/*****************************************************************************
@@ -2397,7 +2397,7 @@ static int bubbles(struct game_context* bb) {
2397 startlevel--; 2397 startlevel--;
2398 break; 2398 break;
2399 case 3: /* High scores */ 2399 case 3: /* High scores */
2400 highscore_show(NUM_SCORES, highscores, NUM_SCORES); 2400 highscore_show(NUM_SCORES, highscores, NUM_SCORES, true);
2401 break; 2401 break;
2402 case 4: /* Playback Control */ 2402 case 4: /* Playback Control */
2403 playback_control(NULL); 2403 playback_control(NULL);
diff --git a/apps/plugins/clix.c b/apps/plugins/clix.c
index 461ef5a58d..5f9ad517ab 100644
--- a/apps/plugins/clix.c
+++ b/apps/plugins/clix.c
@@ -619,7 +619,7 @@ static int clix_menu(struct clix_game_state_t* state, bool ingame)
619 return 1; 619 return 1;
620 break; 620 break;
621 case 3: 621 case 3:
622 highscore_show(NUM_SCORES, highest, NUM_SCORES); 622 highscore_show(NUM_SCORES, highest, NUM_SCORES, true);
623 break; 623 break;
624 case 4: 624 case 4:
625 playback_control(NULL); 625 playback_control(NULL);
@@ -773,7 +773,7 @@ static int clix_handle_game(struct clix_game_state_t* state)
773 rb->splash(HZ*2, "New High Score"); 773 rb->splash(HZ*2, "New High Score");
774 if (position != -1) 774 if (position != -1)
775 highscore_show(position, highest, 775 highscore_show(position, highest,
776 NUM_SCORES); 776 NUM_SCORES, true);
777 if (clix_menu(state, 0)) 777 if (clix_menu(state, 0))
778 return 1; 778 return 1;
779 break; 779 break;
diff --git a/apps/plugins/jewels.c b/apps/plugins/jewels.c
index 8696328c78..0393a502f0 100644
--- a/apps/plugins/jewels.c
+++ b/apps/plugins/jewels.c
@@ -1344,7 +1344,7 @@ static int jewels_game_menu(struct game_context* bj, bool ingame)
1344 return 1; 1344 return 1;
1345 break; 1345 break;
1346 case 4: 1346 case 4:
1347 highscore_show(NUM_SCORES, highest, NUM_SCORES); 1347 highscore_show(NUM_SCORES, highest, NUM_SCORES, true);
1348 break; 1348 break;
1349 case 5: 1349 case 5:
1350 playback_control(NULL); 1350 playback_control(NULL);
@@ -1514,7 +1514,7 @@ static int jewels_main(struct game_context* bj) {
1514 if (position == 0) 1514 if (position == 0)
1515 rb->splash(HZ*2, "New High Score"); 1515 rb->splash(HZ*2, "New High Score");
1516 if (position != -1) 1516 if (position != -1)
1517 highscore_show(position, highest, NUM_SCORES); 1517 highscore_show(position, highest, NUM_SCORES, true);
1518 break; 1518 break;
1519 case GAME_TYPE_PUZZLE: 1519 case GAME_TYPE_PUZZLE:
1520 rb->splash(2*HZ, "Game Over"); 1520 rb->splash(2*HZ, "Game Over");
diff --git a/apps/plugins/lib/highscore.c b/apps/plugins/lib/highscore.c
index 909c3a89ef..280c0c7724 100644
--- a/apps/plugins/lib/highscore.c
+++ b/apps/plugins/lib/highscore.c
@@ -120,7 +120,7 @@ bool highscore_would_update(int score, struct highscore *scores,
120} 120}
121 121
122#ifdef HAVE_LCD_BITMAP 122#ifdef HAVE_LCD_BITMAP
123void highscore_show(int position, struct highscore *scores, int num_scores) 123void highscore_show(int position, struct highscore *scores, int num_scores, bool show_level)
124{ 124{
125 int i, w, h; 125 int i, w, h;
126 char str[30]; 126 char str[30];
@@ -141,7 +141,11 @@ void highscore_show(int position, struct highscore *scores, int num_scores)
141 } 141 }
142 rb->lcd_putsxy(LCD_WIDTH/2-w/2, MARGIN, "High Scores"); 142 rb->lcd_putsxy(LCD_WIDTH/2-w/2, MARGIN, "High Scores");
143 rb->lcd_putsxy(LCD_WIDTH/4-w/4,2*h, "Score"); 143 rb->lcd_putsxy(LCD_WIDTH/4-w/4,2*h, "Score");
144 rb->lcd_putsxy(LCD_WIDTH*3/4-w/4,2*h, "Level"); 144
145 /* Decide whether to display the level column or not */
146 if(show_level) {
147 rb->lcd_putsxy(LCD_WIDTH*3/4-w/4,2*h, "Level");
148 }
145 149
146 for (i = 0; i<num_scores; i++) 150 for (i = 0; i<num_scores; i++)
147 { 151 {
@@ -154,8 +158,13 @@ void highscore_show(int position, struct highscore *scores, int num_scores)
154 rb->lcd_putsxy (MARGIN,3*h + h*i, str); 158 rb->lcd_putsxy (MARGIN,3*h + h*i, str);
155 rb->snprintf (str, sizeof (str), "%d", scores[i].score); 159 rb->snprintf (str, sizeof (str), "%d", scores[i].score);
156 rb->lcd_putsxy (LCD_WIDTH/4-w/4,3*h + h*i, str); 160 rb->lcd_putsxy (LCD_WIDTH/4-w/4,3*h + h*i, str);
157 rb->snprintf (str, sizeof (str), "%d", scores[i].level); 161
158 rb->lcd_putsxy (LCD_WIDTH*3/4-w/4,3*h + h*i, str); 162 /* Decide whether to display the level column or not */
163 if(show_level) {
164 rb->snprintf (str, sizeof (str), "%d", scores[i].level);
165 rb->lcd_putsxy (LCD_WIDTH*3/4-w/4,3*h + h*i, str);
166 }
167
159 if(i == position) { 168 if(i == position) {
160#ifdef HAVE_LCD_COLOR 169#ifdef HAVE_LCD_COLOR
161 rb->lcd_set_foreground(LCD_WHITE); 170 rb->lcd_set_foreground(LCD_WHITE);
diff --git a/apps/plugins/lib/highscore.h b/apps/plugins/lib/highscore.h
index 173e389b9b..18c14a7662 100644
--- a/apps/plugins/lib/highscore.h
+++ b/apps/plugins/lib/highscore.h
@@ -27,7 +27,7 @@ struct highscore
27{ 27{
28 char name[32]; 28 char name[32];
29 int score; 29 int score;
30 int level; 30 int level;
31}; 31};
32 32
33/* Saves the scores to a file 33/* Saves the scores to a file
@@ -91,6 +91,6 @@ bool highscore_would_update(int score, struct highscore *scores,
91 * - scores : the array of existing scores 91 * - scores : the array of existing scores
92 * - num_scores: number of elements in 'scores' 92 * - num_scores: number of elements in 'scores'
93 */ 93 */
94void highscore_show(int position, struct highscore *scores, int num_scores); 94void highscore_show(int position, struct highscore *scores, int num_scores, bool show_level);
95#endif 95#endif
96#endif 96#endif
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index d4fc45f754..7ceec16372 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -663,7 +663,7 @@ static int spacerocks_menu(bool ingame)
663 return 1; 663 return 1;
664 break; 664 break;
665 case 3: 665 case 3:
666 highscore_show(NUM_SCORES, highest, NUM_SCORES); 666 highscore_show(NUM_SCORES, highest, NUM_SCORES, true);
667 break; 667 break;
668 case 4: 668 case 4:
669 playback_control(NULL); 669 playback_control(NULL);
@@ -1927,7 +1927,7 @@ static int spacerocks_game_loop(void)
1927 if (position == 0) 1927 if (position == 0)
1928 rb->splash(HZ*2, "New High Score"); 1928 rb->splash(HZ*2, "New High Score");
1929 if (position != -1) 1929 if (position != -1)
1930 highscore_show(position, highest, NUM_SCORES); 1930 highscore_show(position, highest, NUM_SCORES, true);
1931 if (spacerocks_menu(false)!=0) 1931 if (spacerocks_menu(false)!=0)
1932 return 0; 1932 return 0;
1933 break; 1933 break;