JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
reworked ship explosion:
[vor.git] / main.c
diff --git a/main.c b/main.c
index 825d85d..0e0188a 100644 (file)
--- a/main.c
+++ b/main.c
@@ -94,7 +94,6 @@ SDL_Surface
        *surf_ship,             // Spaceship element
        *surf_life,     // Indicator of number of ships remaining
        *surf_rock[NROCKS],     // THE ROCKS
-       *surf_deadrock[NROCKS], // THE DEAD ROCKS
        *surf_font_big; // The big font
 
 SFont_Font *g_font;
@@ -569,10 +568,6 @@ init(int fullscreen) {
                snprintf(a,MAX_PATH_LEN,add_path("sprites/rock%d.png"),i);
                NULLERROR(temp = IMG_Load(a));
                NULLERROR(surf_rock[i] = SDL_DisplayFormat(temp));
-
-               snprintf(a,MAX_PATH_LEN,add_path("sprites/deadrock%d.png"),i);
-               NULLERROR(temp = IMG_Load(a));
-               NULLERROR(surf_deadrock[i] = SDL_DisplayFormat(temp));
        }
 
        // Remove the mouse cursor
@@ -837,13 +832,32 @@ gameloop() {
                                }
                        } else {
                                if(state == DEAD_PAUSE) {
-                                       float blast_radius = BLAST_RADIUS * state_timeout / 20.0;
+                                       float blast_radius;
+                                       int fixonly;
+
+                                       if(state_timeout < DEAD_PAUSE_LENGTH - 20.0) {
+                                               blast_radius = BLAST_RADIUS * 1.3;
+                                               fixonly = 1;
+                                       } else {
+                                               blast_radius = BLAST_RADIUS * (DEAD_PAUSE_LENGTH - state_timeout) / 20.0;
+                                               fixonly = 0;
+                                       }
+
                                        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;
@@ -949,7 +963,7 @@ gameloop() {
                                }
                                else {
                                        state = DEAD_PAUSE;
-                                       state_timeout = 20.0;
+                                       state_timeout = DEAD_PAUSE_LENGTH;
                                        shipdx = 0;
                                        shipdy = 0;
                                }