diff options
Diffstat (limited to 'apps/plugins')
-rw-r--r-- | apps/plugins/spacerocks.c | 549 |
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 | ||
25 | PLUGIN_HEADER | 28 | PLUGIN_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 | |||
362 | struct 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 */ |
430 | static const short asteroid_one[NUM_ASTEROID_VERTICES*2] = | 365 | static const short asteroid_one[NUM_ASTEROID_VERTICES*2] = |
431 | { | 366 | { |
@@ -525,7 +460,6 @@ enum asteroid_type | |||
525 | enum game_state | 460 | enum 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; | |||
597 | static int num_lives; | 531 | static int num_lives; |
598 | static int extra_life; | 532 | static int extra_life; |
599 | static int show_level_timeout; | 533 | static int show_level_timeout; |
600 | static int attract_flip_timeout; | ||
601 | static int show_game_over; | ||
602 | static int current_level; | 534 | static int current_level; |
603 | static int current_score; | 535 | static int current_score; |
604 | static int high_score; | ||
605 | static int space_check_size = 30*SCALE; | 536 | static int space_check_size = 30*SCALE; |
606 | 537 | ||
607 | static bool enemy_on_screen; | 538 | static bool enemy_on_screen; |
608 | static char phscore[30]; | ||
609 | static struct Ship ship; | 539 | static struct Ship ship; |
610 | static struct Point stars[NUM_STARS]; | 540 | static struct Point stars[NUM_STARS]; |
611 | static struct Asteroid asteroids_array[MAX_NUM_ASTEROIDS]; | 541 | static struct Asteroid asteroids_array[MAX_NUM_ASTEROIDS]; |
@@ -649,39 +579,100 @@ void drawstars(void); | |||
649 | bool is_ship_within_asteroid(struct Asteroid* asteroid); | 579 | bool is_ship_within_asteroid(struct Asteroid* asteroid); |
650 | 580 | ||
651 | 581 | ||
582 | void 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 | 596 | static bool spacerocks_help(void) |
654 | a 3rd function */ | ||
655 | void 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); | 626 | static bool _ingame; |
627 | static 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) | 635 | static 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 | ||
687 | bool point_in_poly(struct Point* _point, int num_vertices, int x, int y) | 678 | bool 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 | ||
1907 | void start_attract_mode(void) | 1897 | static 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 | |||
1920 | enum 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 | ||
2130 | enum plugin_status plugin_start(const void* parameter) | 2053 | enum 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 | } |