summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
authorJohannes Schwarz <ubuntuxer@rockbox.org>2009-07-21 17:29:46 +0000
committerJohannes Schwarz <ubuntuxer@rockbox.org>2009-07-21 17:29:46 +0000
commit49866a762e469632b973e5e486073c2c4104bf90 (patch)
tree9a85dbd7fc1681e9ccfe51e54fcb1bf4485fc61d
parent3f7dfeed3a01cf983822b47f530143e6a24aa905 (diff)
downloadrockbox-49866a762e469632b973e5e486073c2c4104bf90.tar.gz
rockbox-49866a762e469632b973e5e486073c2c4104bf90.zip
Add a standard menu, add highscore table and clean up the code in spacerocks (part of FS#10193)
git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21995 a1c6a512-1295-4272-9138-f99709370657
-rw-r--r--apps/plugins/spacerocks.c549
1 files changed, 235 insertions, 314 deletions
diff --git a/apps/plugins/spacerocks.c b/apps/plugins/spacerocks.c
index 39de40cdd2..778733c78e 100644
--- a/apps/plugins/spacerocks.c
+++ b/apps/plugins/spacerocks.c
@@ -20,223 +20,161 @@
20 ****************************************************************************/ 20 ****************************************************************************/
21 21
22#include "plugin.h" 22#include "plugin.h"
23#include "lib/display_text.h"
23#include "lib/helper.h" 24#include "lib/helper.h"
25#include "lib/highscore.h"
26#include "lib/playback_control.h"
24 27
25PLUGIN_HEADER 28PLUGIN_HEADER
26 29
27/******************************* Globals ***********************************/
28/* variable button definitions */ 30/* variable button definitions */
29#if CONFIG_KEYPAD == RECORDER_PAD 31#if CONFIG_KEYPAD == RECORDER_PAD
30#define AST_PAUSE BUTTON_ON 32#define AST_PAUSE BUTTON_ON
31#define AST_QUIT BUTTON_OFF 33#define AST_QUIT BUTTON_OFF
32#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
33#define AST_THRUST BUTTON_UP 34#define AST_THRUST BUTTON_UP
34#define AST_HYPERSPACE BUTTON_DOWN 35#define AST_HYPERSPACE BUTTON_DOWN
35#define AST_LEFT BUTTON_LEFT 36#define AST_LEFT BUTTON_LEFT
36#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
37#define AST_RIGHT BUTTON_RIGHT 37#define AST_RIGHT BUTTON_RIGHT
38#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
39#define AST_FIRE BUTTON_PLAY 38#define AST_FIRE BUTTON_PLAY
40#define AST_FIRE_REP BUTTON_PLAY | BUTTON_REPEAT
41 39
42#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD 40#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
43#define AST_PAUSE BUTTON_ON 41#define AST_PAUSE BUTTON_ON
44#define AST_QUIT BUTTON_OFF 42#define AST_QUIT BUTTON_OFF
45#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
46#define AST_THRUST BUTTON_UP 43#define AST_THRUST BUTTON_UP
47#define AST_HYPERSPACE BUTTON_DOWN 44#define AST_HYPERSPACE BUTTON_DOWN
48#define AST_LEFT BUTTON_LEFT 45#define AST_LEFT BUTTON_LEFT
49#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
50#define AST_RIGHT BUTTON_RIGHT 46#define AST_RIGHT BUTTON_RIGHT
51#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
52#define AST_FIRE BUTTON_SELECT 47#define AST_FIRE BUTTON_SELECT
53#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
54 48
55#elif CONFIG_KEYPAD == ONDIO_PAD 49#elif CONFIG_KEYPAD == ONDIO_PAD
56#define AST_PAUSE (BUTTON_MENU | BUTTON_OFF) 50#define AST_PAUSE (BUTTON_MENU | BUTTON_OFF)
57#define AST_QUIT BUTTON_OFF 51#define AST_QUIT BUTTON_OFF
58#define AST_THRUST BUTTON_UP 52#define AST_THRUST BUTTON_UP
59#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
60#define AST_HYPERSPACE BUTTON_DOWN 53#define AST_HYPERSPACE BUTTON_DOWN
61#define AST_LEFT BUTTON_LEFT 54#define AST_LEFT BUTTON_LEFT
62#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
63#define AST_RIGHT BUTTON_RIGHT 55#define AST_RIGHT BUTTON_RIGHT
64#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
65#define AST_FIRE BUTTON_MENU 56#define AST_FIRE BUTTON_MENU
66#define AST_FIRE_REP BUTTON_MENU | BUTTON_REPEAT
67 57
68#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ 58#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
69 (CONFIG_KEYPAD == IRIVER_H300_PAD) 59 (CONFIG_KEYPAD == IRIVER_H300_PAD)
70#define AST_PAUSE BUTTON_REC 60#define AST_PAUSE BUTTON_REC
71#define AST_QUIT BUTTON_OFF 61#define AST_QUIT BUTTON_OFF
72#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
73#define AST_THRUST BUTTON_UP 62#define AST_THRUST BUTTON_UP
74#define AST_HYPERSPACE BUTTON_DOWN 63#define AST_HYPERSPACE BUTTON_DOWN
75#define AST_LEFT BUTTON_LEFT 64#define AST_LEFT BUTTON_LEFT
76#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
77#define AST_RIGHT BUTTON_RIGHT 65#define AST_RIGHT BUTTON_RIGHT
78#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
79#define AST_FIRE BUTTON_SELECT 66#define AST_FIRE BUTTON_SELECT
80#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
81 67
82#define AST_RC_QUIT BUTTON_RC_STOP 68#define AST_RC_QUIT BUTTON_RC_STOP
83 69
84#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) 70#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
85#define AST_PAUSE BUTTON_PLAY 71#define AST_PAUSE BUTTON_PLAY
86#define AST_QUIT BUTTON_POWER 72#define AST_QUIT BUTTON_POWER
87#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
88#define AST_THRUST BUTTON_UP 73#define AST_THRUST BUTTON_UP
89#define AST_HYPERSPACE BUTTON_DOWN 74#define AST_HYPERSPACE BUTTON_DOWN
90#define AST_LEFT BUTTON_LEFT 75#define AST_LEFT BUTTON_LEFT
91#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
92#define AST_RIGHT BUTTON_RIGHT 76#define AST_RIGHT BUTTON_RIGHT
93#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
94#define AST_FIRE BUTTON_SELECT 77#define AST_FIRE BUTTON_SELECT
95#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
96 78
97#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ 79#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \
98 (CONFIG_KEYPAD == IPOD_1G2G_PAD) 80 (CONFIG_KEYPAD == IPOD_1G2G_PAD)
99#define AST_PAUSE (BUTTON_SELECT | BUTTON_PLAY) 81#define AST_PAUSE (BUTTON_SELECT | BUTTON_PLAY)
100#define AST_QUIT (BUTTON_SELECT | BUTTON_MENU) 82#define AST_QUIT (BUTTON_SELECT | BUTTON_MENU)
101#define AST_THRUST BUTTON_MENU 83#define AST_THRUST BUTTON_MENU
102#define AST_THRUST_REP (BUTTON_MENU | BUTTON_REPEAT)
103#define AST_HYPERSPACE BUTTON_PLAY 84#define AST_HYPERSPACE BUTTON_PLAY
104#define AST_LEFT BUTTON_SCROLL_BACK 85#define AST_LEFT BUTTON_SCROLL_BACK
105#define AST_LEFT_REP (BUTTON_SCROLL_BACK | BUTTON_REPEAT)
106#define AST_RIGHT BUTTON_SCROLL_FWD 86#define AST_RIGHT BUTTON_SCROLL_FWD
107#define AST_RIGHT_REP (BUTTON_SCROLL_FWD | BUTTON_REPEAT)
108#define AST_FIRE BUTTON_SELECT 87#define AST_FIRE BUTTON_SELECT
109#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
110 88
111#elif (CONFIG_KEYPAD == GIGABEAT_PAD) 89#elif (CONFIG_KEYPAD == GIGABEAT_PAD)
112#define AST_PAUSE BUTTON_A 90#define AST_PAUSE BUTTON_A
113#define AST_QUIT BUTTON_POWER 91#define AST_QUIT BUTTON_POWER
114#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
115#define AST_THRUST BUTTON_UP 92#define AST_THRUST BUTTON_UP
116#define AST_HYPERSPACE BUTTON_DOWN 93#define AST_HYPERSPACE BUTTON_DOWN
117#define AST_LEFT BUTTON_LEFT 94#define AST_LEFT BUTTON_LEFT
118#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
119#define AST_RIGHT BUTTON_RIGHT 95#define AST_RIGHT BUTTON_RIGHT
120#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
121#define AST_FIRE BUTTON_SELECT 96#define AST_FIRE BUTTON_SELECT
122#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
123 97
124#elif (CONFIG_KEYPAD == SANSA_E200_PAD) 98#elif (CONFIG_KEYPAD == SANSA_E200_PAD)
125#define AST_PAUSE BUTTON_REC 99#define AST_PAUSE BUTTON_REC
126#define AST_QUIT BUTTON_POWER 100#define AST_QUIT BUTTON_POWER
127#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
128#define AST_THRUST BUTTON_UP 101#define AST_THRUST BUTTON_UP
129#define AST_HYPERSPACE BUTTON_DOWN 102#define AST_HYPERSPACE BUTTON_DOWN
130#define AST_LEFT BUTTON_SCROLL_BACK 103#define AST_LEFT BUTTON_SCROLL_BACK
131#define AST_LEFT_REP (BUTTON_SCROLL_BACK | BUTTON_REPEAT)
132#define AST_RIGHT BUTTON_SCROLL_FWD 104#define AST_RIGHT BUTTON_SCROLL_FWD
133#define AST_RIGHT_REP (BUTTON_SCROLL_FWD | BUTTON_REPEAT)
134#define AST_FIRE BUTTON_SELECT 105#define AST_FIRE BUTTON_SELECT
135#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
136 106
137#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) 107#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
138#define AST_PAUSE (BUTTON_SELECT | BUTTON_UP) 108#define AST_PAUSE (BUTTON_SELECT | BUTTON_UP)
139#define AST_QUIT (BUTTON_HOME|BUTTON_REPEAT) 109#define AST_QUIT (BUTTON_HOME|BUTTON_REPEAT)
140#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
141#define AST_THRUST BUTTON_UP 110#define AST_THRUST BUTTON_UP
142#define AST_HYPERSPACE BUTTON_DOWN 111#define AST_HYPERSPACE BUTTON_DOWN
143#define AST_LEFT BUTTON_SCROLL_BACK 112#define AST_LEFT BUTTON_SCROLL_BACK
144#define AST_LEFT_REP (BUTTON_SCROLL_BACK | BUTTON_REPEAT)
145#define AST_RIGHT BUTTON_SCROLL_FWD 113#define AST_RIGHT BUTTON_SCROLL_FWD
146#define AST_RIGHT_REP (BUTTON_SCROLL_FWD | BUTTON_REPEAT)
147#define AST_FIRE BUTTON_SELECT 114#define AST_FIRE BUTTON_SELECT
148#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
149 115
150#elif (CONFIG_KEYPAD == SANSA_C200_PAD) 116#elif (CONFIG_KEYPAD == SANSA_C200_PAD)
151#define AST_PAUSE BUTTON_REC 117#define AST_PAUSE BUTTON_REC
152#define AST_QUIT BUTTON_POWER 118#define AST_QUIT BUTTON_POWER
153#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
154#define AST_THRUST BUTTON_UP 119#define AST_THRUST BUTTON_UP
155#define AST_HYPERSPACE BUTTON_DOWN 120#define AST_HYPERSPACE BUTTON_DOWN
156#define AST_LEFT BUTTON_LEFT 121#define AST_LEFT BUTTON_LEFT
157#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
158#define AST_RIGHT BUTTON_RIGHT 122#define AST_RIGHT BUTTON_RIGHT
159#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
160#define AST_FIRE BUTTON_SELECT 123#define AST_FIRE BUTTON_SELECT
161#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
162 124
163#elif (CONFIG_KEYPAD == SANSA_CLIP_PAD) 125#elif (CONFIG_KEYPAD == SANSA_CLIP_PAD)
164#define AST_PAUSE BUTTON_HOME 126#define AST_PAUSE BUTTON_HOME
165#define AST_QUIT BUTTON_POWER 127#define AST_QUIT BUTTON_POWER
166#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
167#define AST_THRUST BUTTON_UP 128#define AST_THRUST BUTTON_UP
168#define AST_HYPERSPACE BUTTON_DOWN 129#define AST_HYPERSPACE BUTTON_DOWN
169#define AST_LEFT BUTTON_LEFT 130#define AST_LEFT BUTTON_LEFT
170#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
171#define AST_RIGHT BUTTON_RIGHT 131#define AST_RIGHT BUTTON_RIGHT
172#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
173#define AST_FIRE BUTTON_SELECT 132#define AST_FIRE BUTTON_SELECT
174#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
175 133
176#elif (CONFIG_KEYPAD == SANSA_M200_PAD) 134#elif (CONFIG_KEYPAD == SANSA_M200_PAD)
177#define AST_PAUSE (BUTTON_SELECT | BUTTON_UP) 135#define AST_PAUSE (BUTTON_SELECT | BUTTON_UP)
178#define AST_QUIT BUTTON_POWER 136#define AST_QUIT BUTTON_POWER
179#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
180#define AST_THRUST BUTTON_UP 137#define AST_THRUST BUTTON_UP
181#define AST_HYPERSPACE BUTTON_DOWN 138#define AST_HYPERSPACE BUTTON_DOWN
182#define AST_LEFT BUTTON_LEFT 139#define AST_LEFT BUTTON_LEFT
183#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
184#define AST_RIGHT BUTTON_RIGHT 140#define AST_RIGHT BUTTON_RIGHT
185#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
186#define AST_FIRE (BUTTON_SELECT | BUTTON_REL) 141#define AST_FIRE (BUTTON_SELECT | BUTTON_REL)
187#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
188 142
189#elif (CONFIG_KEYPAD == IRIVER_H10_PAD) 143#elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
190#define AST_PAUSE BUTTON_PLAY 144#define AST_PAUSE BUTTON_PLAY
191#define AST_QUIT BUTTON_POWER 145#define AST_QUIT BUTTON_POWER
192#define AST_THRUST_REP BUTTON_SCROLL_UP | BUTTON_REPEAT
193#define AST_THRUST BUTTON_SCROLL_UP 146#define AST_THRUST BUTTON_SCROLL_UP
194#define AST_HYPERSPACE BUTTON_SCROLL_DOWN 147#define AST_HYPERSPACE BUTTON_SCROLL_DOWN
195#define AST_LEFT BUTTON_LEFT 148#define AST_LEFT BUTTON_LEFT
196#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
197#define AST_RIGHT BUTTON_RIGHT 149#define AST_RIGHT BUTTON_RIGHT
198#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
199#define AST_FIRE BUTTON_REW 150#define AST_FIRE BUTTON_REW
200#define AST_FIRE_REP BUTTON_REW | BUTTON_REPEAT
201 151
202#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD) 152#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
203#define AST_PAUSE BUTTON_PLAY 153#define AST_PAUSE BUTTON_PLAY
204#define AST_QUIT BUTTON_BACK 154#define AST_QUIT BUTTON_BACK
205#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
206#define AST_THRUST BUTTON_UP 155#define AST_THRUST BUTTON_UP
207#define AST_HYPERSPACE BUTTON_DOWN 156#define AST_HYPERSPACE BUTTON_DOWN
208#define AST_LEFT BUTTON_LEFT 157#define AST_LEFT BUTTON_LEFT
209#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
210#define AST_RIGHT BUTTON_RIGHT 158#define AST_RIGHT BUTTON_RIGHT
211#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
212#define AST_FIRE BUTTON_SELECT 159#define AST_FIRE BUTTON_SELECT
213#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
214 160
215#elif (CONFIG_KEYPAD == MROBE100_PAD) 161#elif (CONFIG_KEYPAD == MROBE100_PAD)
216#define AST_PAUSE BUTTON_DISPLAY 162#define AST_PAUSE BUTTON_DISPLAY
217#define AST_QUIT BUTTON_POWER 163#define AST_QUIT BUTTON_POWER
218#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
219#define AST_THRUST BUTTON_UP 164#define AST_THRUST BUTTON_UP
220#define AST_HYPERSPACE BUTTON_DOWN 165#define AST_HYPERSPACE BUTTON_DOWN
221#define AST_LEFT BUTTON_LEFT 166#define AST_LEFT BUTTON_LEFT
222#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
223#define AST_RIGHT BUTTON_RIGHT 167#define AST_RIGHT BUTTON_RIGHT
224#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
225#define AST_FIRE BUTTON_SELECT 168#define AST_FIRE BUTTON_SELECT
226#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
227 169
228#elif CONFIG_KEYPAD == IAUDIO_M3_PAD 170#elif CONFIG_KEYPAD == IAUDIO_M3_PAD
229#define AST_PAUSE BUTTON_RC_PLAY 171#define AST_PAUSE BUTTON_RC_PLAY
230#define AST_QUIT BUTTON_RC_REC 172#define AST_QUIT BUTTON_RC_REC
231#define AST_THRUST_REP BUTTON_RC_VOL_UP | BUTTON_REPEAT
232#define AST_THRUST BUTTON_RC_VOL_UP 173#define AST_THRUST BUTTON_RC_VOL_UP
233#define AST_HYPERSPACE BUTTON_RC_VOL_DOWN 174#define AST_HYPERSPACE BUTTON_RC_VOL_DOWN
234#define AST_LEFT BUTTON_RC_REW 175#define AST_LEFT BUTTON_RC_REW
235#define AST_LEFT_REP (BUTTON_RC_REW | BUTTON_REPEAT)
236#define AST_RIGHT BUTTON_RC_FF 176#define AST_RIGHT BUTTON_RC_FF
237#define AST_RIGHT_REP (BUTTON_RC_FF | BUTTON_REPEAT)
238#define AST_FIRE BUTTON_RC_MODE 177#define AST_FIRE BUTTON_RC_MODE
239#define AST_FIRE_REP (BUTTON_RC_MODE | BUTTON_REPEAT)
240 178
241#elif (CONFIG_KEYPAD == COWOND2_PAD) 179#elif (CONFIG_KEYPAD == COWOND2_PAD)
242#define AST_QUIT BUTTON_POWER 180#define AST_QUIT BUTTON_POWER
@@ -244,28 +182,20 @@ PLUGIN_HEADER
244#elif CONFIG_KEYPAD == CREATIVEZVM_PAD 182#elif CONFIG_KEYPAD == CREATIVEZVM_PAD
245#define AST_PAUSE BUTTON_PLAY 183#define AST_PAUSE BUTTON_PLAY
246#define AST_QUIT BUTTON_BACK 184#define AST_QUIT BUTTON_BACK
247#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
248#define AST_THRUST BUTTON_UP 185#define AST_THRUST BUTTON_UP
249#define AST_HYPERSPACE BUTTON_DOWN 186#define AST_HYPERSPACE BUTTON_DOWN
250#define AST_LEFT BUTTON_LEFT 187#define AST_LEFT BUTTON_LEFT
251#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
252#define AST_RIGHT BUTTON_RIGHT 188#define AST_RIGHT BUTTON_RIGHT
253#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
254#define AST_FIRE BUTTON_SELECT 189#define AST_FIRE BUTTON_SELECT
255#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
256 190
257#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD 191#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
258#define AST_PAUSE BUTTON_VIEW 192#define AST_PAUSE BUTTON_VIEW
259#define AST_QUIT BUTTON_POWER 193#define AST_QUIT BUTTON_POWER
260#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
261#define AST_THRUST BUTTON_UP 194#define AST_THRUST BUTTON_UP
262#define AST_HYPERSPACE BUTTON_DOWN 195#define AST_HYPERSPACE BUTTON_DOWN
263#define AST_LEFT BUTTON_LEFT 196#define AST_LEFT BUTTON_LEFT
264#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
265#define AST_RIGHT BUTTON_RIGHT 197#define AST_RIGHT BUTTON_RIGHT
266#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
267#define AST_FIRE BUTTON_PLAYLIST 198#define AST_FIRE BUTTON_PLAYLIST
268#define AST_FIRE_REP (BUTTON_PLAYLIST | BUTTON_REPEAT)
269 199
270#elif (CONFIG_KEYPAD == ONDAVX747_PAD) || CONFIG_KEYPAD == MROBE500_PAD 200#elif (CONFIG_KEYPAD == ONDAVX747_PAD) || CONFIG_KEYPAD == MROBE500_PAD
271#define AST_QUIT BUTTON_POWER 201#define AST_QUIT BUTTON_POWER
@@ -324,6 +254,8 @@ PLUGIN_HEADER
324#define ASTEROID_SPEED RES/20 254#define ASTEROID_SPEED RES/20
325#define MISSILE_SURVIVAL_LENGTH 40 255#define MISSILE_SURVIVAL_LENGTH 40
326 256
257#define CYCLETIME 30
258
327#define EXTRA_LIFE 250 259#define EXTRA_LIFE 250
328#define SPAWN_TIME 30 260#define SPAWN_TIME 30
329#define BLINK_TIME 10 261#define BLINK_TIME 10
@@ -332,7 +264,6 @@ PLUGIN_HEADER
332#define WRAP_GAP 12 264#define WRAP_GAP 12
333#define EXPLOSION_LENGTH 20 265#define EXPLOSION_LENGTH 20
334#define SHOW_COL 0 266#define SHOW_COL 0
335#define HISCORE_FILE PLUGIN_GAMES_DIR "/astrorocks.hs"
336#define POINT_SIZE 2 267#define POINT_SIZE 2
337#define MAX_NUM_ASTEROIDS 25 268#define MAX_NUM_ASTEROIDS 25
338#define MAX_NUM_MISSILES 6 269#define MAX_NUM_MISSILES 6
@@ -350,12 +281,9 @@ PLUGIN_HEADER
350#define NUM_ENEMY_VERTICES 6 281#define NUM_ENEMY_VERTICES 6
351#define MAX_LEVEL MAX_NUM_ASTEROIDS 282#define MAX_LEVEL MAX_NUM_ASTEROIDS
352#define ENEMY_SPEED 4 283#define ENEMY_SPEED 4
353#define ENEMY_START_X 0
354#define ENEMY_START_Y 0
355#define SIZE_ENEMY_COLLISION 5*SCALE 284#define SIZE_ENEMY_COLLISION 5*SCALE
356#define ATTRACT_FLIP_TIME 100
357#define NUM_STARS 50 285#define NUM_STARS 50
358#define NUM_TRAIL_POINTS 70 286#define NUM_TRAIL_POINTS 70
359#define NUM_ROTATIONS 16 287#define NUM_ROTATIONS 16
360 288
361#define SIN_COS_SCALE 10000 289#define SIN_COS_SCALE 10000
@@ -426,6 +354,13 @@ PLUGIN_HEADER
426#define SET_BG(x) 354#define SET_BG(x)
427#endif 355#endif
428 356
357#define MARGIN 5
358
359#define HIGH_SCORE PLUGIN_GAMES_DIR "/spacerocks.score"
360#define NUM_SCORES 5
361
362struct highscore highest[NUM_SCORES];
363
429/* The array of points that make up an asteroid */ 364/* The array of points that make up an asteroid */
430static const short asteroid_one[NUM_ASTEROID_VERTICES*2] = 365static const short asteroid_one[NUM_ASTEROID_VERTICES*2] =
431{ 366{
@@ -525,7 +460,6 @@ enum asteroid_type
525enum game_state 460enum game_state
526{ 461{
527 GAME_OVER, 462 GAME_OVER,
528 ATTRACT_MODE,
529 SHOW_LEVEL, 463 SHOW_LEVEL,
530 PLAY_MODE, 464 PLAY_MODE,
531 PAUSE_MODE 465 PAUSE_MODE
@@ -597,15 +531,11 @@ static int next_thrust_count;
597static int num_lives; 531static int num_lives;
598static int extra_life; 532static int extra_life;
599static int show_level_timeout; 533static int show_level_timeout;
600static int attract_flip_timeout;
601static int show_game_over;
602static int current_level; 534static int current_level;
603static int current_score; 535static int current_score;
604static int high_score;
605static int space_check_size = 30*SCALE; 536static int space_check_size = 30*SCALE;
606 537
607static bool enemy_on_screen; 538static bool enemy_on_screen;
608static char phscore[30];
609static struct Ship ship; 539static struct Ship ship;
610static struct Point stars[NUM_STARS]; 540static struct Point stars[NUM_STARS];
611static struct Asteroid asteroids_array[MAX_NUM_ASTEROIDS]; 541static struct Asteroid asteroids_array[MAX_NUM_ASTEROIDS];
@@ -649,39 +579,100 @@ void drawstars(void);
649bool is_ship_within_asteroid(struct Asteroid* asteroid); 579bool is_ship_within_asteroid(struct Asteroid* asteroid);
650 580
651 581
582void init(void)
583{
584 enemy.appear_probability = ENEMY_APPEAR_PROBABILITY_START;
585 enemy.appear_timing = ENEMY_APPEAR_TIMING_START;
586 enemy.size_probability = ENEMY_BIG_PROBABILITY_START;
587 current_level = START_LEVEL;
588 num_lives = START_LIVES;
589 current_score = 0;
590 initialise_ship();
591 initialise_game(current_level);
592 show_level_timeout = SHOW_LEVEL_TIME;
593 game_state = PLAY_MODE;
594}
652 595
653/*Hi-Score reading and writing to file - this needs moving to the hi-score plugin lib as 596static bool spacerocks_help(void)
654a 3rd function */
655void iohiscore(void)
656{ 597{
657 int fd; 598 rb->lcd_setfont(FONT_UI);
658 int compare; 599#define WORDS (sizeof help_text / sizeof (char*))
600 static char *help_text[] = {
601 "Spacerocks", "", "Aim", "", "The", "goal", "of", "the", "game", "is",
602 "to", "blow", "up", "the", "asteroids", "and", "avoid", "being", "hit", "by",
603 "them.", "Also", "you'd", "better", "watch", "out", "for", "the", "UFOs!"
604 };
605 static struct style_text formation[]={
606 { 0, TEXT_CENTER|TEXT_UNDERLINE },
607 { 2, C_RED }
608 };
609 int button;
610
611 if (display_text(WORDS, help_text, formation, NULL)==PLUGIN_USB_CONNECTED)
612 return true;
659 613
660 /* clear the buffer we're about to load the highscore data into */ 614 do {
661 rb->memset(phscore, 0, sizeof(phscore)); 615 button = rb->button_get(true);
616 if (button == SYS_USB_CONNECTED) {
617 return true;
618 }
619 } while( ( button == BUTTON_NONE )
620 || ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
621 rb->lcd_setfont(FONT_SYSFIXED);
662 622
663 fd = rb->open(HISCORE_FILE,O_RDWR | O_CREAT); 623 return false;
664 if(fd < 0) 624}
665 {
666 rb->splash(HZ, "Highscore file read error");
667 return;
668 }
669
670 /* highscore used to %d, is now %d\n
671 Deal with no file or bad file */
672 rb->read(fd,phscore, sizeof(phscore));
673 625
674 compare = rb->atoi(phscore); 626static bool _ingame;
627static int spacerocks_menu_cb(int action, const struct menu_item_ex *this_item)
628{
629 if(action == ACTION_REQUEST_MENUITEM
630 && !_ingame && ((intptr_t)this_item)==0)
631 return ACTION_EXIT_MENUITEM;
632 return action;
633}
675 634
676 if(high_score > compare) 635static int spacerocks_menu(bool ingame)
677 { 636{
678 rb->lseek(fd,0,SEEK_SET); 637 rb->button_clear_queue();
679 rb->fdprintf(fd, "%d\n", high_score); 638 int choice = 0;
639
640 _ingame = ingame;
641
642 MENUITEM_STRINGLIST (main_menu, "Spacerocks Menu", spacerocks_menu_cb,
643 "Resume Game",
644 "Start New Game",
645 "Help",
646 "High Score",
647 "Playback Control",
648 "Quit");
649
650 while (1) {
651 choice = rb->do_menu(&main_menu, &choice, NULL, false);
652 switch (choice) {
653 case 0:
654 return 0;
655 case 1:
656 init();
657 return 0;
658 case 2:
659 if(spacerocks_help())
660 return 1;
661 break;
662 case 3:
663 highscore_show(NUM_SCORES, highest, NUM_SCORES);
664 break;
665 case 4:
666 playback_control(NULL);
667 break;
668 case 5:
669 return 1;
670 case MENU_ATTACHED_USB:
671 return 1;
672 default:
673 break;
674 }
680 } 675 }
681 else
682 high_score = compare;
683
684 rb->close(fd);
685} 676}
686 677
687bool point_in_poly(struct Point* _point, int num_vertices, int x, int y) 678bool point_in_poly(struct Point* _point, int num_vertices, int x, int y)
@@ -1087,7 +1078,7 @@ void draw_and_move_enemy(void)
1087 if( enemy.position.x < ship.position.x) 1078 if( enemy.position.x < ship.position.x)
1088 enemy_missile.position.dx = 1; 1079 enemy_missile.position.dx = 1;
1089 else 1080 else
1090 enemy_missile.position.dx = -1; 1081 enemy_missile.position.dx = -1;
1091 } 1082 }
1092 1083
1093 if(enemy_missile.position.dx == 0 && 1084 if(enemy_missile.position.dx == 0 &&
@@ -1257,13 +1248,13 @@ void check_collisions(void)
1257 { 1248 {
1258 if(is_ship_within_asteroid(asteroid)) 1249 if(is_ship_within_asteroid(asteroid))
1259 { 1250 {
1260 if (!ship.invulnerable) 1251 if (!ship.invulnerable)
1261 { 1252 {
1262 /*if not invulnerable, blow up ship*/ 1253 /*if not invulnerable, blow up ship*/
1263 ship.explode_countdown = EXPLOSION_LENGTH; 1254 ship.explode_countdown = EXPLOSION_LENGTH;
1264 /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ 1255 /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
1265 create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); 1256 create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
1266 } 1257 }
1267 } 1258 }
1268 1259
1269 /*has the enemy missile blown something up?*/ 1260 /*has the enemy missile blown something up?*/
@@ -1299,12 +1290,12 @@ void check_collisions(void)
1299 /*has the enemy collided with the ship?*/ 1290 /*has the enemy collided with the ship?*/
1300 if(is_point_within_enemy(&ship.position)) 1291 if(is_point_within_enemy(&ship.position))
1301 { 1292 {
1302 if (!ship.invulnerable) 1293 if (!ship.invulnerable)
1303 { 1294 {
1304 ship.explode_countdown = EXPLOSION_LENGTH; 1295 ship.explode_countdown = EXPLOSION_LENGTH;
1305 /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ 1296 /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
1306 create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); 1297 create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
1307 } 1298 }
1308 create_trail_blaze(ENEMY_EXPLOSION_COLOUR, &enemy.position); 1299 create_trail_blaze(ENEMY_EXPLOSION_COLOUR, &enemy.position);
1309 } 1300 }
1310 1301
@@ -1329,13 +1320,13 @@ void check_collisions(void)
1329 enemy_missile.position.x - ship.position.x, 1320 enemy_missile.position.x - ship.position.x,
1330 enemy_missile.position.y - ship.position.y)) 1321 enemy_missile.position.y - ship.position.y))
1331 { 1322 {
1332 if (!ship.invulnerable) 1323 if (!ship.invulnerable)
1333 { 1324 {
1334 ship.explode_countdown = EXPLOSION_LENGTH; 1325 ship.explode_countdown = EXPLOSION_LENGTH;
1335 /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ 1326 /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
1336 create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); 1327 create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
1337 } 1328 }
1338 enemy_missile.survived = 0; 1329 enemy_missile.survived = 0;
1339 enemy_missile.position.x = enemy_missile.position.y = 0; 1330 enemy_missile.position.x = enemy_missile.position.y = 0;
1340 } 1331 }
1341 1332
@@ -1690,23 +1681,23 @@ void draw_and_move_ship(void)
1690 int nyoffset = ship.position.y/SCALE; 1681 int nyoffset = ship.position.y/SCALE;
1691 if (ship.invulnerable && (ship.spawn_time > BLINK_TIME || ship.spawn_time % 2 == 0)) 1682 if (ship.invulnerable && (ship.spawn_time > BLINK_TIME || ship.spawn_time % 2 == 0))
1692 { 1683 {
1693 SET_FG(COL_INVULN); 1684 SET_FG(COL_INVULN);
1694 } 1685 }
1695 else 1686 else
1696 { 1687 {
1697 SET_FG(COL_PLAYER); 1688 SET_FG(COL_PLAYER);
1698 } 1689 }
1699 if(!ship.explode_countdown) 1690 if(!ship.explode_countdown)
1700 { 1691 {
1701 /* make sure ship is invulnerable until spawn time over */ 1692 /* make sure ship is invulnerable until spawn time over */
1702 if (ship.spawn_time) 1693 if (ship.spawn_time)
1703 { 1694 {
1704 ship.spawn_time--; 1695 ship.spawn_time--;
1705 if (ship.spawn_time <= 0) 1696 if (ship.spawn_time <= 0)
1706 { 1697 {
1707 ship.invulnerable = 0; 1698 ship.invulnerable = 0;
1708 } 1699 }
1709 } 1700 }
1710 if(!ship.waiting_for_space) 1701 if(!ship.waiting_for_space)
1711 { 1702 {
1712 draw_polygon(ship.vertices, nxoffset, nyoffset, NUM_SHIP_VERTICES); 1703 draw_polygon(ship.vertices, nxoffset, nyoffset, NUM_SHIP_VERTICES);
@@ -1729,7 +1720,6 @@ void draw_and_move_ship(void)
1729 num_lives--; 1720 num_lives--;
1730 if(!num_lives) 1721 if(!num_lives)
1731 { 1722 {
1732 show_game_over = SHOW_GAME_OVER_TIME;
1733 game_state = GAME_OVER; 1723 game_state = GAME_OVER;
1734 } 1724 }
1735 else 1725 else
@@ -1752,7 +1742,7 @@ void thrust_ship(void)
1752 but to do this we need to ascertain if the spacehip as moved on screen 1742 but to do this we need to ascertain if the spacehip as moved on screen
1753 for more than a certain amount. */ 1743 for more than a certain amount. */
1754 1744
1755 create_trail_blaze(THRUST_COLOUR, &ship.position); 1745 create_trail_blaze(THRUST_COLOUR, &ship.position);
1756 } 1746 }
1757} 1747}
1758 1748
@@ -1904,165 +1894,119 @@ void initialise_game(int start_num)
1904 } 1894 }
1905} 1895}
1906 1896
1907void start_attract_mode(void) 1897static int spacerocks_game_loop(void)
1908{
1909 enemy.appear_probability = ENEMY_APPEAR_PROBABILITY_START;
1910 enemy.appear_timing = ENEMY_APPEAR_TIMING_START;
1911 current_level = 5;
1912 num_lives = START_LIVES;
1913 current_score = 0;
1914 attract_flip_timeout = ATTRACT_FLIP_TIME;
1915 game_state = ATTRACT_MODE;
1916 if(asteroid_count < 3)
1917 initialise_game(current_level);
1918}
1919
1920enum plugin_status start_game(void)
1921{ 1898{
1922 char s[20]; 1899 char s[20];
1923 char level[10]; 1900 char level[10];
1924 int button; 1901 int button;
1925 int end; 1902 int end;
1926 int CYCLETIME = 30; 1903 int position;
1927 1904
1928 /*create stars once, and once only:*/ 1905 /*create stars once, and once only:*/
1929 create_stars(); 1906 create_stars();
1907
1908 if (spacerocks_menu(false)!=0)
1909 return 0;
1930 1910
1931 SET_BG(LCD_BLACK); 1911 SET_BG(LCD_BLACK);
1932 1912
1933 while(true) 1913 while(true)
1934 { 1914 {
1935 /*game starts with at level 1 1915 end = *rb->current_tick + (CYCLETIME * HZ) / 1000;
1936 with 1 asteroid.*/ 1916 rb->lcd_clear_display();
1937 start_attract_mode(); 1917 SET_FG(COL_TEXT);
1938 1918 switch(game_state) {
1939 /*Main loop*/ 1919 case(GAME_OVER):
1940 while(true) 1920 rb->splash (HZ * 2, "Game Over");
1941 {
1942 end = *rb->current_tick + (CYCLETIME * HZ) / 1000;
1943 rb->lcd_clear_display(); 1921 rb->lcd_clear_display();
1944 SET_FG(COL_TEXT); 1922 position=highscore_update(current_score, current_level, "",
1945 switch(game_state) 1923 highest,NUM_SCORES);
1946 { 1924 if (position == 0)
1947 case(ATTRACT_MODE): 1925 rb->splash(HZ*2, "New High Score");
1948 if(attract_flip_timeout < ATTRACT_FLIP_TIME/2) 1926 if (position != -1)
1949 { 1927 highscore_show(position, highest, NUM_SCORES);
1950 rb->lcd_putsxy(CENTER_LCD_X - 39, 1928 if (spacerocks_menu(false)!=0)
1951 CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, 1929 return 0;
1952 "Fire to Start"); 1930 break;
1953 if(!attract_flip_timeout) 1931
1954 attract_flip_timeout = ATTRACT_FLIP_TIME; 1932 case(PAUSE_MODE):
1955 } 1933 rb->snprintf(s, sizeof(s), "score %d ", current_score);
1956 else 1934 rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
1957 { 1935 rb->lcd_putsxy(CENTER_LCD_X - 15,
1958 rb->snprintf(s, sizeof(s), "Hi Score %d ", high_score); 1936 CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, "pause");
1959 rb->lcd_putsxy(CENTER_LCD_X - 30, 1937 draw_and_move_missiles();
1960 CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, s); 1938 draw_lives();
1961 } 1939 draw_and_move_ship();
1962 attract_flip_timeout--; 1940 break;
1963 break; 1941
1964 1942 case(PLAY_MODE):
1965 case(GAME_OVER): 1943 rb->snprintf(s, sizeof(s), "score %d ", current_score);
1966 rb->lcd_putsxy(CENTER_LCD_X - 25, 1944 rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
1967 CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, "Game Over"); 1945 draw_and_move_missiles();
1968 rb->snprintf(s, sizeof(s), "score %d ", current_score); 1946 draw_lives();
1969 rb->lcd_putsxy(1,LCD_HEIGHT-8, s); 1947 check_collisions();
1970 show_game_over--; 1948 draw_and_move_ship();
1971 if(!show_game_over) 1949 break;
1972 start_attract_mode(); 1950
1973 break; 1951 case(SHOW_LEVEL):
1974 1952 show_level_timeout--;
1975 case(PAUSE_MODE): 1953 rb->snprintf(s, sizeof(s), "score %d ", current_score);
1976 rb->snprintf(s, sizeof(s), "score %d ", current_score); 1954 rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
1977 rb->lcd_putsxy(1,LCD_HEIGHT-8, s); 1955 rb->snprintf(level, sizeof(level), "stage %d ", current_level);
1978 rb->lcd_putsxy(CENTER_LCD_X - 15, 1956 rb->lcd_putsxy(CENTER_LCD_X - 20,
1979 CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, "pause"); 1957 CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, level);
1980 draw_and_move_missiles(); 1958 draw_and_move_ship();
1981 draw_lives(); 1959 draw_lives();
1982 draw_and_move_ship(); 1960 if(!show_level_timeout) {
1983 break; 1961 initialise_game(current_level);
1984 1962 game_state = PLAY_MODE;
1985 case(PLAY_MODE):
1986 rb->snprintf(s, sizeof(s), "score %d ", current_score);
1987 rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
1988 draw_and_move_missiles();
1989 draw_lives();
1990 check_collisions();
1991 draw_and_move_ship();
1992 break;
1993
1994 case(SHOW_LEVEL):
1995 show_level_timeout--;
1996 rb->snprintf(s, sizeof(s), "score %d ", current_score);
1997 rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
1998 rb->snprintf(level, sizeof(level), "stage %d ", current_level);
1999 rb->lcd_putsxy(CENTER_LCD_X - 20,
2000 CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, level);
2001 draw_and_move_ship();
2002 draw_lives(); 1963 draw_lives();
2003 if(!show_level_timeout)
2004 {
2005 initialise_game(current_level);
2006 game_state = PLAY_MODE;
2007 draw_lives();
2008 }
2009 break;
2010 } 1964 }
2011 draw_trail_blaze(); 1965 break;
2012 drawstars(); 1966 }
2013 draw_and_move_asteroids(); 1967 draw_trail_blaze();
2014 draw_and_move_enemy(); 1968 drawstars();
2015 1969 draw_and_move_asteroids();
2016 rb->lcd_update(); 1970 draw_and_move_enemy();
2017 button = rb->button_get(false); 1971
2018 1972 rb->lcd_update();
1973
2019#ifdef HAS_BUTTON_HOLD 1974#ifdef HAS_BUTTON_HOLD
2020 if (rb->button_hold() && game_state == PLAY_MODE) 1975 if (rb->button_hold())
2021 game_state = PAUSE_MODE; 1976 game_state = PAUSE_MODE;
2022#endif
2023
2024 switch(button)
2025 {
2026 case(AST_PAUSE):
2027 if(game_state == PLAY_MODE)
2028 game_state = PAUSE_MODE;
2029 else if(game_state == PAUSE_MODE)
2030 game_state = PLAY_MODE;
2031 break;
2032 1977
2033#ifdef AST_RC_QUIT
2034 case AST_RC_QUIT:
2035#endif 1978#endif
1979 button = rb->button_get(false);
1980 switch(button) {
2036 case(AST_QUIT): 1981 case(AST_QUIT):
2037 if(game_state == ATTRACT_MODE) 1982 if (spacerocks_menu(true)!=0)
2038 return PLUGIN_OK; 1983 return 0;
2039 else if(game_state == GAME_OVER)
2040 {
2041 start_attract_mode();
2042 }
2043 else
2044 {
2045 show_game_over = SHOW_GAME_OVER_TIME;
2046 game_state = GAME_OVER;
2047 }
2048 break; 1984 break;
2049 1985#ifdef AST_PAUSE
2050 case (AST_LEFT_REP): 1986 case(AST_PAUSE):
1987 if (game_state == PAUSE_MODE) {
1988 game_state = PLAY_MODE;
1989 break;
1990 }
1991 else if (game_state != PLAY_MODE)
1992 break;
1993#endif
2051 case (AST_LEFT): 1994 case (AST_LEFT):
1995 case (AST_LEFT | BUTTON_REPEAT):
2052 if(game_state == PLAY_MODE || game_state == SHOW_LEVEL) 1996 if(game_state == PLAY_MODE || game_state == SHOW_LEVEL)
2053 rotate_ship(SHIP_ROT_ACW_COS, SHIP_ROT_ACW_SIN); 1997 rotate_ship(SHIP_ROT_ACW_COS, SHIP_ROT_ACW_SIN);
2054 break; 1998 break;
2055 1999
2056 case (AST_RIGHT_REP):
2057 case (AST_RIGHT): 2000 case (AST_RIGHT):
2001 case (AST_RIGHT | BUTTON_REPEAT):
2058 if(game_state == PLAY_MODE || game_state == SHOW_LEVEL) 2002 if(game_state == PLAY_MODE || game_state == SHOW_LEVEL)
2059 rotate_ship(SHIP_ROT_CW_COS, SHIP_ROT_CW_SIN); 2003 rotate_ship(SHIP_ROT_CW_COS, SHIP_ROT_CW_SIN);
2060 break; 2004 break;
2061 2005
2062 case (AST_THRUST_REP):
2063 case (AST_THRUST): 2006 case (AST_THRUST):
2064 if((game_state == PLAY_MODE || game_state == SHOW_LEVEL) && !next_thrust_count) 2007 case (AST_THRUST | BUTTON_REPEAT):
2065 { 2008 if((game_state == PLAY_MODE || game_state == SHOW_LEVEL) &&
2009 !next_thrust_count) {
2066 thrust_ship(); 2010 thrust_ship();
2067 next_thrust_count = 5; 2011 next_thrust_count = 5;
2068 } 2012 }
@@ -2074,26 +2018,15 @@ enum plugin_status start_game(void)
2074 /*maybe shield if it gets too hard */ 2018 /*maybe shield if it gets too hard */
2075 break; 2019 break;
2076 2020
2077 case (AST_FIRE_REP):
2078 case (AST_FIRE): 2021 case (AST_FIRE):
2079 if(game_state == ATTRACT_MODE) 2022 case (AST_FIRE | BUTTON_REPEAT):
2080 { 2023 if(game_state == PLAY_MODE) {
2081 current_level = START_LEVEL; 2024 if(!next_missile_count) {
2082 initialise_ship();
2083 initialise_game(current_level);
2084 show_level_timeout = SHOW_LEVEL_TIME;
2085 game_state = PLAY_MODE;
2086 }
2087 else if(game_state == PLAY_MODE)
2088 {
2089 if(!next_missile_count)
2090 {
2091 fire_missile(); 2025 fire_missile();
2092 next_missile_count = 10; 2026 next_missile_count = 10;
2093 } 2027 }
2094 } 2028 }
2095 else if(game_state == PAUSE_MODE) 2029 else if(game_state == PAUSE_MODE) {
2096 {
2097 game_state = PLAY_MODE; 2030 game_state = PLAY_MODE;
2098 } 2031 }
2099 break; 2032 break;
@@ -2102,37 +2035,24 @@ enum plugin_status start_game(void)
2102 if (rb->default_event_handler(button)==SYS_USB_CONNECTED) 2035 if (rb->default_event_handler(button)==SYS_USB_CONNECTED)
2103 return PLUGIN_USB_CONNECTED; 2036 return PLUGIN_USB_CONNECTED;
2104 break; 2037 break;
2105 }
2106
2107 if(!num_lives)
2108 {
2109 if(high_score < current_score)
2110 high_score = current_score;
2111 if(!show_game_over)
2112 break;
2113 }
2114
2115 if(next_missile_count)
2116 next_missile_count--;
2117
2118 if(next_thrust_count)
2119 next_thrust_count--;
2120
2121 if (end > *rb->current_tick)
2122 rb->sleep(end-*rb->current_tick);
2123 else
2124 rb->yield();
2125 } 2038 }
2126 2039
2040 if(next_missile_count)
2041 next_missile_count--;
2042
2043 if(next_thrust_count)
2044 next_thrust_count--;
2045
2046 if (end > *rb->current_tick)
2047 rb->sleep(end-*rb->current_tick);
2048 else
2049 rb->yield();
2127 } 2050 }
2128} 2051}
2129 2052
2130enum plugin_status plugin_start(const void* parameter) 2053enum plugin_status plugin_start(const void* parameter)
2131{ 2054{
2132 enum plugin_status retval; 2055 (void)parameter;
2133 (void)(parameter);
2134
2135 game_state = ATTRACT_MODE;
2136 2056
2137#if LCD_DEPTH > 1 2057#if LCD_DEPTH > 1
2138 rb->lcd_set_backdrop(NULL); 2058 rb->lcd_set_backdrop(NULL);
@@ -2141,11 +2061,12 @@ enum plugin_status plugin_start(const void* parameter)
2141 rb->lcd_setfont(FONT_SYSFIXED); 2061 rb->lcd_setfont(FONT_SYSFIXED);
2142 /* Turn off backlight timeout */ 2062 /* Turn off backlight timeout */
2143 backlight_force_on(); /* backlight control in lib/helper.c */ 2063 backlight_force_on(); /* backlight control in lib/helper.c */
2144 iohiscore(); 2064 highscore_load(HIGH_SCORE,highest,NUM_SCORES);
2145 retval = start_game(); 2065 spacerocks_game_loop();
2146 iohiscore();
2147 rb->lcd_setfont(FONT_UI); 2066 rb->lcd_setfont(FONT_UI);
2067 highscore_save(HIGH_SCORE,highest,NUM_SCORES);
2148 /* Turn on backlight timeout (revert to settings) */ 2068 /* Turn on backlight timeout (revert to settings) */
2149 backlight_use_settings(); /* backlight control in lib/helper.c */ 2069 backlight_use_settings(); /* backlight control in lib/helper.c */
2150 return retval; 2070
2071 return PLUGIN_OK;
2151} 2072}