yship = YSIZE/2;
xvel = 3;
yvel = 0;
- for(i = 0; i<MAXROCKS; i++ ) {
- if(dist_sq(xship, yship, rock[i].x, rock[i].y) < START_RAD_SQ) {
- rock[i].active = 0;
- }
- }
break;
case GAME_OVER:
state = HIGH_SCORE_ENTRY;
state_timeout = 200.0;
break;
}
+ } else {
+ if(state == DEAD_PAUSE) {
+ float blast_radius = START_RAD * state_timeout / 50.0;
+ for(i = 0; i<MAXROCKS; i++ ) {
+ float dx, dy, n;
+ dx = rock[i].x + 100;
+ dy = rock[i].y - YSIZE/2;
+ n = sqrt(dx*dx + dy*dy);
+ if(n < blast_radius+100) {
+ n *= 50;
+ rock[i].xvel += rockrate*(dx+30)/n;
+ rock[i].yvel += rockrate*dy/n;
+ if(rock[i].xvel <= 0) rock[i].xvel = 1;
+ }
+ }
+ }
}
if(--countdown <= 0 && (rnd()*100.0<(rockrate += 0.025))) {
for(i = 0; i<MAXROCKS; i++) if(rock[i].active) {
rock[i].x += rock[i].xvel*movementrate;
rock[i].y += rock[i].yvel*movementrate + yscroll;
- if(rock[i].y > YSIZE) {
- rock[i].y -= YSIZE;
- rock[i].y -= rock[i].image->w;
- } else if(rock[i].y < -rock[i].image->w) {
- rock[i].y += YSIZE;
- rock[i].y += rock[i].image->w;
- }
- if(rock[i].x<-32.0)
- rock[i].active = 0;
+ if(rock[i].y > YSIZE) {
+ rock[i].y -= YSIZE;
+ rock[i].y -= rock[i].image->w;
+ } else if(rock[i].y < -rock[i].image->w) {
+ rock[i].y += YSIZE;
+ rock[i].y += rock[i].image->w;
+ }
+ if(rock[i].x < -32.0) rock[i].active = 0;
+ if(rock[i].xvel > 0) {
+ if(rock[i].y < 0 || rock[i].y > YSIZE) rock[i].active = 0;
+ if(rock[i].x > XSIZE) rock[i].active = 0;
+ }
}
else {
state = DEAD_PAUSE;
state_timeout = 50.0;
-
}
}