- if(shipx < 60) shipx = 60;
- for(i = 0; i<MAXROCKS; i++ ) {
- float dx, dy, n;
- if(rock[i].x <= 0) continue;
-
- // This makes it so your explosion from dying magically doesn't leave
- // any rocks that aren't moving much on the x axis. After the first
- // 20 tics, only rocks that are barely moving will be pushed.
- if(fixonly && (!rock[i].dead || rock[i].dx < -4 || rock[i].dx > 3)) {
- continue;
- }
-
- dx = rock[i].x - shipx;
- dy = rock[i].y - shipy;
-
- n = sqrt(dx*dx + dy*dy);
- if(n < blast_radius) {
- n *= 20;
- rock[i].dx += rockrate*(dx+30)/n;
- rock[i].dy += rockrate*dy/n;
- rock[i].dead = 1;
- }
- }
- }
- }
-
- if(--countdown <= 0 && (rnd()*100.0<(rockrate += 0.025))) {
- // Create a rock
- rockptr++;
- if(rockptr-rock >= MAXROCKS) {
- rockptr = rock;
- }
- if(!rockptr->active) {
- rockptr->x = (float)XSIZE;
- rockptr->dx = -(rockspeed)*(1 + rnd());
- rockptr->dy = rnd()-0.5;
- rockptr->type_number = random() % NROCKS;
- rockptr->image = surf_rock[rockptr->type_number];// [random()%NROCKS];
- rockptr->shape = &rock_shapes[rockptr->type_number];
- rockptr->active = 1;
- rockptr->y = rnd()*(YSIZE + rockptr->image->h);
- }
- if(movementrate>0.1) {
- countdown = (int)(ROCKRATE/movementrate);
- } else {
- countdown = 0;