JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
bump version to 0.5.8
[vor.git] / main.c
diff --git a/main.c b/main.c
index 1d4ce85..0af1fdd 100644 (file)
--- a/main.c
+++ b/main.c
@@ -61,6 +61,9 @@ SDL_Surface
 
 font *g_font;
 
+#define ENGINEDOT 0
+#define BANGDOT 1
+
 struct dot {
        int active;
        float x, y;
@@ -68,6 +71,7 @@ struct dot {
        float mass;   // in DOT_MASS_UNITs
        float decay;  // rate at which to reduce mass.
        int heat;     // heat multiplier (color).
+       uint8_t type;  // BANGDOT or ENGINEDOT
 };
 
 void draw(void);
@@ -118,12 +122,12 @@ char *msgs[2][3] = {
        {
                "Press SPACE for normal game",
                "Press '1' for easy game",
-               "http://jasonwoof.org/vor"
+               "https://sametwice.com/vor"
        },
        {
                "Press SPACE for easy game",
                "Press '2' for normal game",
-               "http://jasonwoof.org/vor"
+               "https://sametwice.com/vor"
        }
 };
 
@@ -151,10 +155,15 @@ tiny_sleep() {
 #endif
 
 void
-init_engine_dots() {
+init_dots() {
        int i;
        for(i = 0; i<MAXENGINEDOTS; i++) {
                edot[i].active = 0;
+               edot[i].type = ENGINEDOT;
+       }
+       for(i = 0; i<MAXBANGDOTS; i++) {
+               bdot[i].active = 0;
+               bdot[i].type = BANGDOT;
        }
 }
 
@@ -278,6 +287,10 @@ new_bang_dots(struct sprite *s)
        if(SDL_MUSTLOCK(img)) { SDL_UnlockSurface(img); }
 }
 
+void
+kill_rock(struct rock *r) {
+       r->x = -200;
+}
 
 void
 move_dot(struct dot *d)
@@ -296,6 +309,13 @@ move_dot(struct dot *d)
                        if(hit) if(hit->type != SHIP) {
                                d->active = 0;
                                mass = sprite_mass(hit);
+                               if(d->type == BANGDOT) {
+                                       struct rock *rock = (struct rock*)hit;
+                                       rock->life -= (d->dx - hit->dx) * (d->dx - hit->dx) + (d->dy - hit->dy) * (d->dy - hit->dy);
+                                       if(rock->life < 0) {
+                                               kill_rock(rock);
+                                       }
+                               }
                                hit->dx += DOT_MASS_UNIT * d->mass * (d->dx - hit->dx) / mass;
                                hit->dy += DOT_MASS_UNIT * d->mass * (d->dy - hit->dy) / mass;
                        }
@@ -451,7 +471,7 @@ init(void) {
                exit(1);
        }
 
-       init_engine_dots();
+       init_dots();
        init_dust();
 
        init_sprites();
@@ -712,6 +732,12 @@ gameloop() {
                                                                        SDL_SaveBMP(surf_screen, screenshot_filename);
                                                                }
                                                                break;
+                                                       case SDLK_SPACE:
+                                                               if(state != GAMEPLAY && state != DEAD_PAUSE) {
+                                                                       // don't conflict with space key to start a new game
+                                                                       break;
+                                                               }
+                                                               // else fall through
                                                        case SDLK_p:
                                                        case SDLK_PAUSE:
                                                                paused = !paused;