Commit FS#10234 - Spacerocks respawn invulnerability by Eric Clayton. Gives you a couple seconds of invulnerability after respawn.

git-svn-id: svn://svn.rockbox.org/rockbox/trunk@21071 a1c6a512-1295-4272-9138-f99709370657
This commit is contained in:
Michael Giacomelli 2009-05-24 23:42:32 +00:00
parent 526b5580da
commit 62bf9f40fc

View file

@ -325,6 +325,8 @@ PLUGIN_HEADER
#define MISSILE_SURVIVAL_LENGTH 40 #define MISSILE_SURVIVAL_LENGTH 40
#define EXTRA_LIFE 250 #define EXTRA_LIFE 250
#define SPAWN_TIME 30
#define BLINK_TIME 10
#define SCALE 5000 #define SCALE 5000
#define MISSILE_SCALE 5000 #define MISSILE_SCALE 5000
#define WRAP_GAP 12 #define WRAP_GAP 12
@ -412,6 +414,7 @@ PLUGIN_HEADER
#ifdef HAVE_LCD_COLOR #ifdef HAVE_LCD_COLOR
#define COL_MISSILE LCD_RGBPACK(200,0,0) #define COL_MISSILE LCD_RGBPACK(200,0,0)
#define COL_PLAYER LCD_RGBPACK(200,200,200) #define COL_PLAYER LCD_RGBPACK(200,200,200)
#define COL_INVULN LCD_RGBPACK(100,100,200)
#define COL_STARS LCD_WHITE #define COL_STARS LCD_WHITE
#define COL_ASTEROID LCD_RGBPACK(ASTEROID_R,ASTEROID_G,ASTEROID_B) #define COL_ASTEROID LCD_RGBPACK(ASTEROID_R,ASTEROID_G,ASTEROID_B)
#define COL_TEXT LCD_RGBPACK(200,200,255) #define COL_TEXT LCD_RGBPACK(200,200,255)
@ -564,6 +567,8 @@ struct Ship
struct Point vertices[NUM_SHIP_VERTICES]; struct Point vertices[NUM_SHIP_VERTICES];
struct Point position; struct Point position;
bool waiting_for_space; bool waiting_for_space;
bool invulnerable;
int spawn_time;
int explode_countdown; int explode_countdown;
}; };
@ -1252,10 +1257,13 @@ void check_collisions(void)
{ {
if(is_ship_within_asteroid(asteroid)) if(is_ship_within_asteroid(asteroid))
{ {
/*blow up ship*/ if (!ship.invulnerable)
ship.explode_countdown = EXPLOSION_LENGTH; {
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ /*if not invulnerable, blow up ship*/
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); ship.explode_countdown = EXPLOSION_LENGTH;
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
}
} }
/*has the enemy missile blown something up?*/ /*has the enemy missile blown something up?*/
@ -1291,9 +1299,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))
{ {
ship.explode_countdown = EXPLOSION_LENGTH; if (!ship.invulnerable)
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ {
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); ship.explode_countdown = EXPLOSION_LENGTH;
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
}
create_trail_blaze(ENEMY_EXPLOSION_COLOUR, &enemy.position); create_trail_blaze(ENEMY_EXPLOSION_COLOUR, &enemy.position);
} }
@ -1318,10 +1329,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))
{ {
ship.explode_countdown = EXPLOSION_LENGTH; if (!ship.invulnerable)
/* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */ {
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position); ship.explode_countdown = EXPLOSION_LENGTH;
enemy_missile.survived = 0; /* initialise_explosion(ship.vertices, NUM_SHIP_VERTICES); */
create_trail_blaze(SHIP_EXPLOSION_COLOUR, &ship.position);
}
enemy_missile.survived = 0;
enemy_missile.position.x = enemy_missile.position.y = 0; enemy_missile.position.x = enemy_missile.position.y = 0;
} }
@ -1617,6 +1631,8 @@ void initialise_ship(void)
ship.position.x *= SCALE; ship.position.x *= SCALE;
ship.position.y *= SCALE; ship.position.y *= SCALE;
ship.position.dx = ship.position.dy = 0; ship.position.dx = ship.position.dy = 0;
ship.spawn_time = SPAWN_TIME;
ship.invulnerable = 1;
point = ship.vertices; point = ship.vertices;
lives_point = lives_points; lives_point = lives_points;
@ -1672,9 +1688,25 @@ void draw_and_move_ship(void)
{ {
int nxoffset = ship.position.x/SCALE; int nxoffset = ship.position.x/SCALE;
int nyoffset = ship.position.y/SCALE; int nyoffset = ship.position.y/SCALE;
SET_FG(COL_PLAYER); if (ship.invulnerable && (ship.spawn_time > BLINK_TIME || ship.spawn_time % 2 == 0))
{
SET_FG(COL_INVULN);
}
else
{
SET_FG(COL_PLAYER);
}
if(!ship.explode_countdown) if(!ship.explode_countdown)
{ {
/* make sure ship is invulnerable until spawn time over */
if (ship.spawn_time)
{
ship.spawn_time--;
if (ship.spawn_time <= 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);