1
0
Fork 0
forked from len0rd/rockbox

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
This commit is contained in:
Johannes Schwarz 2009-07-21 17:29:46 +00:00
parent 3f7dfeed3a
commit 49866a762e

View file

@ -20,223 +20,161 @@
****************************************************************************/ ****************************************************************************/
#include "plugin.h" #include "plugin.h"
#include "lib/display_text.h"
#include "lib/helper.h" #include "lib/helper.h"
#include "lib/highscore.h"
#include "lib/playback_control.h"
PLUGIN_HEADER PLUGIN_HEADER
/******************************* Globals ***********************************/
/* variable button definitions */ /* variable button definitions */
#if CONFIG_KEYPAD == RECORDER_PAD #if CONFIG_KEYPAD == RECORDER_PAD
#define AST_PAUSE BUTTON_ON #define AST_PAUSE BUTTON_ON
#define AST_QUIT BUTTON_OFF #define AST_QUIT BUTTON_OFF
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_PLAY #define AST_FIRE BUTTON_PLAY
#define AST_FIRE_REP BUTTON_PLAY | BUTTON_REPEAT
#elif CONFIG_KEYPAD == ARCHOS_AV300_PAD #elif CONFIG_KEYPAD == ARCHOS_AV300_PAD
#define AST_PAUSE BUTTON_ON #define AST_PAUSE BUTTON_ON
#define AST_QUIT BUTTON_OFF #define AST_QUIT BUTTON_OFF
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
#elif CONFIG_KEYPAD == ONDIO_PAD #elif CONFIG_KEYPAD == ONDIO_PAD
#define AST_PAUSE (BUTTON_MENU | BUTTON_OFF) #define AST_PAUSE (BUTTON_MENU | BUTTON_OFF)
#define AST_QUIT BUTTON_OFF #define AST_QUIT BUTTON_OFF
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_MENU #define AST_FIRE BUTTON_MENU
#define AST_FIRE_REP BUTTON_MENU | BUTTON_REPEAT
#elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \ #elif (CONFIG_KEYPAD == IRIVER_H100_PAD) || \
(CONFIG_KEYPAD == IRIVER_H300_PAD) (CONFIG_KEYPAD == IRIVER_H300_PAD)
#define AST_PAUSE BUTTON_REC #define AST_PAUSE BUTTON_REC
#define AST_QUIT BUTTON_OFF #define AST_QUIT BUTTON_OFF
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
#define AST_RC_QUIT BUTTON_RC_STOP #define AST_RC_QUIT BUTTON_RC_STOP
#elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD) #elif (CONFIG_KEYPAD == IAUDIO_X5M5_PAD)
#define AST_PAUSE BUTTON_PLAY #define AST_PAUSE BUTTON_PLAY
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
#elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \ #elif (CONFIG_KEYPAD == IPOD_4G_PAD) || (CONFIG_KEYPAD == IPOD_3G_PAD) || \
(CONFIG_KEYPAD == IPOD_1G2G_PAD) (CONFIG_KEYPAD == IPOD_1G2G_PAD)
#define AST_PAUSE (BUTTON_SELECT | BUTTON_PLAY) #define AST_PAUSE (BUTTON_SELECT | BUTTON_PLAY)
#define AST_QUIT (BUTTON_SELECT | BUTTON_MENU) #define AST_QUIT (BUTTON_SELECT | BUTTON_MENU)
#define AST_THRUST BUTTON_MENU #define AST_THRUST BUTTON_MENU
#define AST_THRUST_REP (BUTTON_MENU | BUTTON_REPEAT)
#define AST_HYPERSPACE BUTTON_PLAY #define AST_HYPERSPACE BUTTON_PLAY
#define AST_LEFT BUTTON_SCROLL_BACK #define AST_LEFT BUTTON_SCROLL_BACK
#define AST_LEFT_REP (BUTTON_SCROLL_BACK | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_SCROLL_FWD #define AST_RIGHT BUTTON_SCROLL_FWD
#define AST_RIGHT_REP (BUTTON_SCROLL_FWD | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == GIGABEAT_PAD) #elif (CONFIG_KEYPAD == GIGABEAT_PAD)
#define AST_PAUSE BUTTON_A #define AST_PAUSE BUTTON_A
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
#elif (CONFIG_KEYPAD == SANSA_E200_PAD) #elif (CONFIG_KEYPAD == SANSA_E200_PAD)
#define AST_PAUSE BUTTON_REC #define AST_PAUSE BUTTON_REC
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_SCROLL_BACK #define AST_LEFT BUTTON_SCROLL_BACK
#define AST_LEFT_REP (BUTTON_SCROLL_BACK | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_SCROLL_FWD #define AST_RIGHT BUTTON_SCROLL_FWD
#define AST_RIGHT_REP (BUTTON_SCROLL_FWD | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == SANSA_FUZE_PAD) #elif (CONFIG_KEYPAD == SANSA_FUZE_PAD)
#define AST_PAUSE (BUTTON_SELECT | BUTTON_UP) #define AST_PAUSE (BUTTON_SELECT | BUTTON_UP)
#define AST_QUIT (BUTTON_HOME|BUTTON_REPEAT) #define AST_QUIT (BUTTON_HOME|BUTTON_REPEAT)
#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_SCROLL_BACK #define AST_LEFT BUTTON_SCROLL_BACK
#define AST_LEFT_REP (BUTTON_SCROLL_BACK | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_SCROLL_FWD #define AST_RIGHT BUTTON_SCROLL_FWD
#define AST_RIGHT_REP (BUTTON_SCROLL_FWD | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == SANSA_C200_PAD) #elif (CONFIG_KEYPAD == SANSA_C200_PAD)
#define AST_PAUSE BUTTON_REC #define AST_PAUSE BUTTON_REC
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == SANSA_CLIP_PAD) #elif (CONFIG_KEYPAD == SANSA_CLIP_PAD)
#define AST_PAUSE BUTTON_HOME #define AST_PAUSE BUTTON_HOME
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == SANSA_M200_PAD) #elif (CONFIG_KEYPAD == SANSA_M200_PAD)
#define AST_PAUSE (BUTTON_SELECT | BUTTON_UP) #define AST_PAUSE (BUTTON_SELECT | BUTTON_UP)
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE (BUTTON_SELECT | BUTTON_REL) #define AST_FIRE (BUTTON_SELECT | BUTTON_REL)
#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == IRIVER_H10_PAD) #elif (CONFIG_KEYPAD == IRIVER_H10_PAD)
#define AST_PAUSE BUTTON_PLAY #define AST_PAUSE BUTTON_PLAY
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP BUTTON_SCROLL_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_SCROLL_UP #define AST_THRUST BUTTON_SCROLL_UP
#define AST_HYPERSPACE BUTTON_SCROLL_DOWN #define AST_HYPERSPACE BUTTON_SCROLL_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_REW #define AST_FIRE BUTTON_REW
#define AST_FIRE_REP BUTTON_REW | BUTTON_REPEAT
#elif (CONFIG_KEYPAD == GIGABEAT_S_PAD) #elif (CONFIG_KEYPAD == GIGABEAT_S_PAD)
#define AST_PAUSE BUTTON_PLAY #define AST_PAUSE BUTTON_PLAY
#define AST_QUIT BUTTON_BACK #define AST_QUIT BUTTON_BACK
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
#elif (CONFIG_KEYPAD == MROBE100_PAD) #elif (CONFIG_KEYPAD == MROBE100_PAD)
#define AST_PAUSE BUTTON_DISPLAY #define AST_PAUSE BUTTON_DISPLAY
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP BUTTON_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP BUTTON_LEFT | BUTTON_REPEAT
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP BUTTON_SELECT | BUTTON_REPEAT
#elif CONFIG_KEYPAD == IAUDIO_M3_PAD #elif CONFIG_KEYPAD == IAUDIO_M3_PAD
#define AST_PAUSE BUTTON_RC_PLAY #define AST_PAUSE BUTTON_RC_PLAY
#define AST_QUIT BUTTON_RC_REC #define AST_QUIT BUTTON_RC_REC
#define AST_THRUST_REP BUTTON_RC_VOL_UP | BUTTON_REPEAT
#define AST_THRUST BUTTON_RC_VOL_UP #define AST_THRUST BUTTON_RC_VOL_UP
#define AST_HYPERSPACE BUTTON_RC_VOL_DOWN #define AST_HYPERSPACE BUTTON_RC_VOL_DOWN
#define AST_LEFT BUTTON_RC_REW #define AST_LEFT BUTTON_RC_REW
#define AST_LEFT_REP (BUTTON_RC_REW | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_RC_FF #define AST_RIGHT BUTTON_RC_FF
#define AST_RIGHT_REP (BUTTON_RC_FF | BUTTON_REPEAT)
#define AST_FIRE BUTTON_RC_MODE #define AST_FIRE BUTTON_RC_MODE
#define AST_FIRE_REP (BUTTON_RC_MODE | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == COWOND2_PAD) #elif (CONFIG_KEYPAD == COWOND2_PAD)
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
@ -244,28 +182,20 @@ PLUGIN_HEADER
#elif CONFIG_KEYPAD == CREATIVEZVM_PAD #elif CONFIG_KEYPAD == CREATIVEZVM_PAD
#define AST_PAUSE BUTTON_PLAY #define AST_PAUSE BUTTON_PLAY
#define AST_QUIT BUTTON_BACK #define AST_QUIT BUTTON_BACK
#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_SELECT #define AST_FIRE BUTTON_SELECT
#define AST_FIRE_REP (BUTTON_SELECT | BUTTON_REPEAT)
#elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD #elif CONFIG_KEYPAD == PHILIPS_HDD1630_PAD
#define AST_PAUSE BUTTON_VIEW #define AST_PAUSE BUTTON_VIEW
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
#define AST_THRUST_REP (BUTTON_UP | BUTTON_REPEAT)
#define AST_THRUST BUTTON_UP #define AST_THRUST BUTTON_UP
#define AST_HYPERSPACE BUTTON_DOWN #define AST_HYPERSPACE BUTTON_DOWN
#define AST_LEFT BUTTON_LEFT #define AST_LEFT BUTTON_LEFT
#define AST_LEFT_REP (BUTTON_LEFT | BUTTON_REPEAT)
#define AST_RIGHT BUTTON_RIGHT #define AST_RIGHT BUTTON_RIGHT
#define AST_RIGHT_REP (BUTTON_RIGHT | BUTTON_REPEAT)
#define AST_FIRE BUTTON_PLAYLIST #define AST_FIRE BUTTON_PLAYLIST
#define AST_FIRE_REP (BUTTON_PLAYLIST | BUTTON_REPEAT)
#elif (CONFIG_KEYPAD == ONDAVX747_PAD) || CONFIG_KEYPAD == MROBE500_PAD #elif (CONFIG_KEYPAD == ONDAVX747_PAD) || CONFIG_KEYPAD == MROBE500_PAD
#define AST_QUIT BUTTON_POWER #define AST_QUIT BUTTON_POWER
@ -324,6 +254,8 @@ PLUGIN_HEADER
#define ASTEROID_SPEED RES/20 #define ASTEROID_SPEED RES/20
#define MISSILE_SURVIVAL_LENGTH 40 #define MISSILE_SURVIVAL_LENGTH 40
#define CYCLETIME 30
#define EXTRA_LIFE 250 #define EXTRA_LIFE 250
#define SPAWN_TIME 30 #define SPAWN_TIME 30
#define BLINK_TIME 10 #define BLINK_TIME 10
@ -332,7 +264,6 @@ PLUGIN_HEADER
#define WRAP_GAP 12 #define WRAP_GAP 12
#define EXPLOSION_LENGTH 20 #define EXPLOSION_LENGTH 20
#define SHOW_COL 0 #define SHOW_COL 0
#define HISCORE_FILE PLUGIN_GAMES_DIR "/astrorocks.hs"
#define POINT_SIZE 2 #define POINT_SIZE 2
#define MAX_NUM_ASTEROIDS 25 #define MAX_NUM_ASTEROIDS 25
#define MAX_NUM_MISSILES 6 #define MAX_NUM_MISSILES 6
@ -350,12 +281,9 @@ PLUGIN_HEADER
#define NUM_ENEMY_VERTICES 6 #define NUM_ENEMY_VERTICES 6
#define MAX_LEVEL MAX_NUM_ASTEROIDS #define MAX_LEVEL MAX_NUM_ASTEROIDS
#define ENEMY_SPEED 4 #define ENEMY_SPEED 4
#define ENEMY_START_X 0
#define ENEMY_START_Y 0
#define SIZE_ENEMY_COLLISION 5*SCALE #define SIZE_ENEMY_COLLISION 5*SCALE
#define ATTRACT_FLIP_TIME 100
#define NUM_STARS 50 #define NUM_STARS 50
#define NUM_TRAIL_POINTS 70 #define NUM_TRAIL_POINTS 70
#define NUM_ROTATIONS 16 #define NUM_ROTATIONS 16
#define SIN_COS_SCALE 10000 #define SIN_COS_SCALE 10000
@ -426,6 +354,13 @@ PLUGIN_HEADER
#define SET_BG(x) #define SET_BG(x)
#endif #endif
#define MARGIN 5
#define HIGH_SCORE PLUGIN_GAMES_DIR "/spacerocks.score"
#define NUM_SCORES 5
struct highscore highest[NUM_SCORES];
/* The array of points that make up an asteroid */ /* The array of points that make up an asteroid */
static const short asteroid_one[NUM_ASTEROID_VERTICES*2] = static const short asteroid_one[NUM_ASTEROID_VERTICES*2] =
{ {
@ -525,7 +460,6 @@ enum asteroid_type
enum game_state enum game_state
{ {
GAME_OVER, GAME_OVER,
ATTRACT_MODE,
SHOW_LEVEL, SHOW_LEVEL,
PLAY_MODE, PLAY_MODE,
PAUSE_MODE PAUSE_MODE
@ -597,15 +531,11 @@ static int next_thrust_count;
static int num_lives; static int num_lives;
static int extra_life; static int extra_life;
static int show_level_timeout; static int show_level_timeout;
static int attract_flip_timeout;
static int show_game_over;
static int current_level; static int current_level;
static int current_score; static int current_score;
static int high_score;
static int space_check_size = 30*SCALE; static int space_check_size = 30*SCALE;
static bool enemy_on_screen; static bool enemy_on_screen;
static char phscore[30];
static struct Ship ship; static struct Ship ship;
static struct Point stars[NUM_STARS]; static struct Point stars[NUM_STARS];
static struct Asteroid asteroids_array[MAX_NUM_ASTEROIDS]; static struct Asteroid asteroids_array[MAX_NUM_ASTEROIDS];
@ -649,39 +579,100 @@ void drawstars(void);
bool is_ship_within_asteroid(struct Asteroid* asteroid); bool is_ship_within_asteroid(struct Asteroid* asteroid);
void init(void)
/*Hi-Score reading and writing to file - this needs moving to the hi-score plugin lib as
a 3rd function */
void iohiscore(void)
{ {
int fd; enemy.appear_probability = ENEMY_APPEAR_PROBABILITY_START;
int compare; enemy.appear_timing = ENEMY_APPEAR_TIMING_START;
enemy.size_probability = ENEMY_BIG_PROBABILITY_START;
current_level = START_LEVEL;
num_lives = START_LIVES;
current_score = 0;
initialise_ship();
initialise_game(current_level);
show_level_timeout = SHOW_LEVEL_TIME;
game_state = PLAY_MODE;
}
/* clear the buffer we're about to load the highscore data into */ static bool spacerocks_help(void)
rb->memset(phscore, 0, sizeof(phscore)); {
rb->lcd_setfont(FONT_UI);
#define WORDS (sizeof help_text / sizeof (char*))
static char *help_text[] = {
"Spacerocks", "", "Aim", "", "The", "goal", "of", "the", "game", "is",
"to", "blow", "up", "the", "asteroids", "and", "avoid", "being", "hit", "by",
"them.", "Also", "you'd", "better", "watch", "out", "for", "the", "UFOs!"
};
static struct style_text formation[]={
{ 0, TEXT_CENTER|TEXT_UNDERLINE },
{ 2, C_RED }
};
int button;
fd = rb->open(HISCORE_FILE,O_RDWR | O_CREAT); if (display_text(WORDS, help_text, formation, NULL)==PLUGIN_USB_CONNECTED)
if(fd < 0) return true;
{
rb->splash(HZ, "Highscore file read error"); do {
return; button = rb->button_get(true);
if (button == SYS_USB_CONNECTED) {
return true;
}
} while( ( button == BUTTON_NONE )
|| ( button & (BUTTON_REL|BUTTON_REPEAT) ) );
rb->lcd_setfont(FONT_SYSFIXED);
return false;
}
static bool _ingame;
static int spacerocks_menu_cb(int action, const struct menu_item_ex *this_item)
{
if(action == ACTION_REQUEST_MENUITEM
&& !_ingame && ((intptr_t)this_item)==0)
return ACTION_EXIT_MENUITEM;
return action;
}
static int spacerocks_menu(bool ingame)
{
rb->button_clear_queue();
int choice = 0;
_ingame = ingame;
MENUITEM_STRINGLIST (main_menu, "Spacerocks Menu", spacerocks_menu_cb,
"Resume Game",
"Start New Game",
"Help",
"High Score",
"Playback Control",
"Quit");
while (1) {
choice = rb->do_menu(&main_menu, &choice, NULL, false);
switch (choice) {
case 0:
return 0;
case 1:
init();
return 0;
case 2:
if(spacerocks_help())
return 1;
break;
case 3:
highscore_show(NUM_SCORES, highest, NUM_SCORES);
break;
case 4:
playback_control(NULL);
break;
case 5:
return 1;
case MENU_ATTACHED_USB:
return 1;
default:
break;
}
} }
/* highscore used to %d, is now %d\n
Deal with no file or bad file */
rb->read(fd,phscore, sizeof(phscore));
compare = rb->atoi(phscore);
if(high_score > compare)
{
rb->lseek(fd,0,SEEK_SET);
rb->fdprintf(fd, "%d\n", high_score);
}
else
high_score = compare;
rb->close(fd);
} }
bool point_in_poly(struct Point* _point, int num_vertices, int x, int y) bool point_in_poly(struct Point* _point, int num_vertices, int x, int y)
@ -1257,13 +1248,13 @@ void check_collisions(void)
{ {
if(is_ship_within_asteroid(asteroid)) if(is_ship_within_asteroid(asteroid))
{ {
if (!ship.invulnerable) if (!ship.invulnerable)
{ {
/*if not invulnerable, blow up ship*/ /*if not invulnerable, blow up ship*/
ship.explode_countdown = EXPLOSION_LENGTH; ship.explode_countdown = EXPLOSION_LENGTH;
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
} }
} }
/*has the enemy missile blown something up?*/ /*has the enemy missile blown something up?*/
@ -1299,12 +1290,12 @@ void check_collisions(void)
/*has the enemy collided with the ship?*/ /*has the enemy collided with the ship?*/
if(is_point_within_enemy(&ship.position)) if(is_point_within_enemy(&ship.position))
{ {
if (!ship.invulnerable) if (!ship.invulnerable)
{ {
ship.explode_countdown = EXPLOSION_LENGTH; ship.explode_countdown = EXPLOSION_LENGTH;
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
} }
create_trail_blaze(ENEMY_EXPLOSION_COLOUR, &enemy.position); create_trail_blaze(ENEMY_EXPLOSION_COLOUR, &enemy.position);
} }
@ -1329,13 +1320,13 @@ void check_collisions(void)
enemy_missile.position.x - ship.position.x, enemy_missile.position.x - ship.position.x,
enemy_missile.position.y - ship.position.y)) enemy_missile.position.y - ship.position.y))
{ {
if (!ship.invulnerable) if (!ship.invulnerable)
{ {
ship.explode_countdown = EXPLOSION_LENGTH; ship.explode_countdown = EXPLOSION_LENGTH;
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
} }
enemy_missile.survived = 0; enemy_missile.survived = 0;
enemy_missile.position.x = enemy_missile.position.y = 0; enemy_missile.position.x = enemy_missile.position.y = 0;
} }
@ -1690,23 +1681,23 @@ void draw_and_move_ship(void)
int nyoffset = ship.position.y/SCALE; int nyoffset = ship.position.y/SCALE;
if (ship.invulnerable && (ship.spawn_time > BLINK_TIME || ship.spawn_time % 2 == 0)) if (ship.invulnerable && (ship.spawn_time > BLINK_TIME || ship.spawn_time % 2 == 0))
{ {
SET_FG(COL_INVULN); SET_FG(COL_INVULN);
} }
else else
{ {
SET_FG(COL_PLAYER); SET_FG(COL_PLAYER);
} }
if(!ship.explode_countdown) if(!ship.explode_countdown)
{ {
/* make sure ship is invulnerable until spawn time over */ /* make sure ship is invulnerable until spawn time over */
if (ship.spawn_time) if (ship.spawn_time)
{ {
ship.spawn_time--; ship.spawn_time--;
if (ship.spawn_time <= 0) if (ship.spawn_time <= 0)
{ {
ship.invulnerable = 0; ship.invulnerable = 0;
} }
} }
if(!ship.waiting_for_space) if(!ship.waiting_for_space)
{ {
draw_polygon(ship.vertices, nxoffset, nyoffset, NUM_SHIP_VERTICES); draw_polygon(ship.vertices, nxoffset, nyoffset, NUM_SHIP_VERTICES);
@ -1729,7 +1720,6 @@ void draw_and_move_ship(void)
num_lives--; num_lives--;
if(!num_lives) if(!num_lives)
{ {
show_game_over = SHOW_GAME_OVER_TIME;
game_state = GAME_OVER; game_state = GAME_OVER;
} }
else else
@ -1752,7 +1742,7 @@ void thrust_ship(void)
but to do this we need to ascertain if the spacehip as moved on screen but to do this we need to ascertain if the spacehip as moved on screen
for more than a certain amount. */ for more than a certain amount. */
create_trail_blaze(THRUST_COLOUR, &ship.position); create_trail_blaze(THRUST_COLOUR, &ship.position);
} }
} }
@ -1904,165 +1894,119 @@ void initialise_game(int start_num)
} }
} }
void start_attract_mode(void) static int spacerocks_game_loop(void)
{
enemy.appear_probability = ENEMY_APPEAR_PROBABILITY_START;
enemy.appear_timing = ENEMY_APPEAR_TIMING_START;
current_level = 5;
num_lives = START_LIVES;
current_score = 0;
attract_flip_timeout = ATTRACT_FLIP_TIME;
game_state = ATTRACT_MODE;
if(asteroid_count < 3)
initialise_game(current_level);
}
enum plugin_status start_game(void)
{ {
char s[20]; char s[20];
char level[10]; char level[10];
int button; int button;
int end; int end;
int CYCLETIME = 30; int position;
/*create stars once, and once only:*/ /*create stars once, and once only:*/
create_stars(); create_stars();
if (spacerocks_menu(false)!=0)
return 0;
SET_BG(LCD_BLACK); SET_BG(LCD_BLACK);
while(true) while(true)
{ {
/*game starts with at level 1 end = *rb->current_tick + (CYCLETIME * HZ) / 1000;
with 1 asteroid.*/ rb->lcd_clear_display();
start_attract_mode(); SET_FG(COL_TEXT);
switch(game_state) {
/*Main loop*/ case(GAME_OVER):
while(true) rb->splash (HZ * 2, "Game Over");
{
end = *rb->current_tick + (CYCLETIME * HZ) / 1000;
rb->lcd_clear_display(); rb->lcd_clear_display();
SET_FG(COL_TEXT); position=highscore_update(current_score, current_level, "",
switch(game_state) highest,NUM_SCORES);
{ if (position == 0)
case(ATTRACT_MODE): rb->splash(HZ*2, "New High Score");
if(attract_flip_timeout < ATTRACT_FLIP_TIME/2) if (position != -1)
{ highscore_show(position, highest, NUM_SCORES);
rb->lcd_putsxy(CENTER_LCD_X - 39, if (spacerocks_menu(false)!=0)
CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, return 0;
"Fire to Start"); break;
if(!attract_flip_timeout)
attract_flip_timeout = ATTRACT_FLIP_TIME;
}
else
{
rb->snprintf(s, sizeof(s), "Hi Score %d ", high_score);
rb->lcd_putsxy(CENTER_LCD_X - 30,
CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, s);
}
attract_flip_timeout--;
break;
case(GAME_OVER): case(PAUSE_MODE):
rb->lcd_putsxy(CENTER_LCD_X - 25, rb->snprintf(s, sizeof(s), "score %d ", current_score);
CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, "Game Over"); rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
rb->snprintf(s, sizeof(s), "score %d ", current_score); rb->lcd_putsxy(CENTER_LCD_X - 15,
rb->lcd_putsxy(1,LCD_HEIGHT-8, s); CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, "pause");
show_game_over--; draw_and_move_missiles();
if(!show_game_over) draw_lives();
start_attract_mode(); draw_and_move_ship();
break; break;
case(PAUSE_MODE): case(PLAY_MODE):
rb->snprintf(s, sizeof(s), "score %d ", current_score); rb->snprintf(s, sizeof(s), "score %d ", current_score);
rb->lcd_putsxy(1,LCD_HEIGHT-8, s); rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
rb->lcd_putsxy(CENTER_LCD_X - 15, draw_and_move_missiles();
CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, "pause"); draw_lives();
draw_and_move_missiles(); check_collisions();
draw_and_move_ship();
break;
case(SHOW_LEVEL):
show_level_timeout--;
rb->snprintf(s, sizeof(s), "score %d ", current_score);
rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
rb->snprintf(level, sizeof(level), "stage %d ", current_level);
rb->lcd_putsxy(CENTER_LCD_X - 20,
CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, level);
draw_and_move_ship();
draw_lives();
if(!show_level_timeout) {
initialise_game(current_level);
game_state = PLAY_MODE;
draw_lives(); draw_lives();
draw_and_move_ship();
break;
case(PLAY_MODE):
rb->snprintf(s, sizeof(s), "score %d ", current_score);
rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
draw_and_move_missiles();
draw_lives();
check_collisions();
draw_and_move_ship();
break;
case(SHOW_LEVEL):
show_level_timeout--;
rb->snprintf(s, sizeof(s), "score %d ", current_score);
rb->lcd_putsxy(1,LCD_HEIGHT-8, s);
rb->snprintf(level, sizeof(level), "stage %d ", current_level);
rb->lcd_putsxy(CENTER_LCD_X - 20,
CENTER_LCD_Y + CENTER_LCD_Y/2 - 4, level);
draw_and_move_ship();
draw_lives();
if(!show_level_timeout)
{
initialise_game(current_level);
game_state = PLAY_MODE;
draw_lives();
}
break;
} }
draw_trail_blaze(); break;
drawstars(); }
draw_and_move_asteroids(); draw_trail_blaze();
draw_and_move_enemy(); drawstars();
draw_and_move_asteroids();
draw_and_move_enemy();
rb->lcd_update(); rb->lcd_update();
button = rb->button_get(false);
#ifdef HAS_BUTTON_HOLD #ifdef HAS_BUTTON_HOLD
if (rb->button_hold() && game_state == PLAY_MODE) if (rb->button_hold())
game_state = PAUSE_MODE; game_state = PAUSE_MODE;
#endif
switch(button)
{
case(AST_PAUSE):
if(game_state == PLAY_MODE)
game_state = PAUSE_MODE;
else if(game_state == PAUSE_MODE)
game_state = PLAY_MODE;
break;
#ifdef AST_RC_QUIT
case AST_RC_QUIT:
#endif #endif
button = rb->button_get(false);
switch(button) {
case(AST_QUIT): case(AST_QUIT):
if(game_state == ATTRACT_MODE) if (spacerocks_menu(true)!=0)
return PLUGIN_OK; return 0;
else if(game_state == GAME_OVER)
{
start_attract_mode();
}
else
{
show_game_over = SHOW_GAME_OVER_TIME;
game_state = GAME_OVER;
}
break; break;
#ifdef AST_PAUSE
case (AST_LEFT_REP): case(AST_PAUSE):
if (game_state == PAUSE_MODE) {
game_state = PLAY_MODE;
break;
}
else if (game_state != PLAY_MODE)
break;
#endif
case (AST_LEFT): case (AST_LEFT):
case (AST_LEFT | BUTTON_REPEAT):
if(game_state == PLAY_MODE || game_state == SHOW_LEVEL) if(game_state == PLAY_MODE || game_state == SHOW_LEVEL)
rotate_ship(SHIP_ROT_ACW_COS, SHIP_ROT_ACW_SIN); rotate_ship(SHIP_ROT_ACW_COS, SHIP_ROT_ACW_SIN);
break; break;
case (AST_RIGHT_REP):
case (AST_RIGHT): case (AST_RIGHT):
case (AST_RIGHT | BUTTON_REPEAT):
if(game_state == PLAY_MODE || game_state == SHOW_LEVEL) if(game_state == PLAY_MODE || game_state == SHOW_LEVEL)
rotate_ship(SHIP_ROT_CW_COS, SHIP_ROT_CW_SIN); rotate_ship(SHIP_ROT_CW_COS, SHIP_ROT_CW_SIN);
break; break;
case (AST_THRUST_REP):
case (AST_THRUST): case (AST_THRUST):
if((game_state == PLAY_MODE || game_state == SHOW_LEVEL) && !next_thrust_count) case (AST_THRUST | BUTTON_REPEAT):
{ if((game_state == PLAY_MODE || game_state == SHOW_LEVEL) &&
!next_thrust_count) {
thrust_ship(); thrust_ship();
next_thrust_count = 5; next_thrust_count = 5;
} }
@ -2074,26 +2018,15 @@ enum plugin_status start_game(void)
/*maybe shield if it gets too hard */ /*maybe shield if it gets too hard */
break; break;
case (AST_FIRE_REP):
case (AST_FIRE): case (AST_FIRE):
if(game_state == ATTRACT_MODE) case (AST_FIRE | BUTTON_REPEAT):
{ if(game_state == PLAY_MODE) {
current_level = START_LEVEL; if(!next_missile_count) {
initialise_ship();
initialise_game(current_level);
show_level_timeout = SHOW_LEVEL_TIME;
game_state = PLAY_MODE;
}
else if(game_state == PLAY_MODE)
{
if(!next_missile_count)
{
fire_missile(); fire_missile();
next_missile_count = 10; next_missile_count = 10;
} }
} }
else if(game_state == PAUSE_MODE) else if(game_state == PAUSE_MODE) {
{
game_state = PLAY_MODE; game_state = PLAY_MODE;
} }
break; break;
@ -2102,37 +2035,24 @@ enum plugin_status start_game(void)
if (rb->default_event_handler(button)==SYS_USB_CONNECTED) if (rb->default_event_handler(button)==SYS_USB_CONNECTED)
return PLUGIN_USB_CONNECTED; return PLUGIN_USB_CONNECTED;
break; break;
}
if(!num_lives)
{
if(high_score < current_score)
high_score = current_score;
if(!show_game_over)
break;
}
if(next_missile_count)
next_missile_count--;
if(next_thrust_count)
next_thrust_count--;
if (end > *rb->current_tick)
rb->sleep(end-*rb->current_tick);
else
rb->yield();
} }
if(next_missile_count)
next_missile_count--;
if(next_thrust_count)
next_thrust_count--;
if (end > *rb->current_tick)
rb->sleep(end-*rb->current_tick);
else
rb->yield();
} }
} }
enum plugin_status plugin_start(const void* parameter) enum plugin_status plugin_start(const void* parameter)
{ {
enum plugin_status retval; (void)parameter;
(void)(parameter);
game_state = ATTRACT_MODE;
#if LCD_DEPTH > 1 #if LCD_DEPTH > 1
rb->lcd_set_backdrop(NULL); rb->lcd_set_backdrop(NULL);
@ -2141,11 +2061,12 @@ enum plugin_status plugin_start(const void* parameter)
rb->lcd_setfont(FONT_SYSFIXED); rb->lcd_setfont(FONT_SYSFIXED);
/* Turn off backlight timeout */ /* Turn off backlight timeout */
backlight_force_on(); /* backlight control in lib/helper.c */ backlight_force_on(); /* backlight control in lib/helper.c */
iohiscore(); highscore_load(HIGH_SCORE,highest,NUM_SCORES);
retval = start_game(); spacerocks_game_loop();
iohiscore();
rb->lcd_setfont(FONT_UI); rb->lcd_setfont(FONT_UI);
highscore_save(HIGH_SCORE,highest,NUM_SCORES);
/* Turn on backlight timeout (revert to settings) */ /* Turn on backlight timeout (revert to settings) */
backlight_use_settings(); /* backlight control in lib/helper.c */ backlight_use_settings(); /* backlight control in lib/helper.c */
return retval;
return PLUGIN_OK;
} }