JasonWoof Got questions, comments, patches, etc.? Contact Jason Woofenden
oops, didn't fix bang dots correctly.
[vor.git] / main.c
diff --git a/main.c b/main.c
index 7620378..ea1f536 100644 (file)
--- a/main.c
+++ b/main.c
@@ -19,7 +19,6 @@
  * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA
  */
 
-#include <argp.h>
 #include <math.h>
 #include <SDL.h>
 #include <SDL_image.h>
 #include "sprite.h"
 #include "sound.h"
 
+#ifdef WIN32
+#define SDL_SetAlpha(surf, flag, alpha)
+#endif
+
 // ************************************* VARS
 // SDL_Surface global variables
 SDL_Surface 
@@ -135,22 +138,20 @@ init_engine_dots() {
 void
 new_bang_dots(int xbang, int ybang, int dx, int dy, SDL_Surface *s)
 {
-       int x,y,endcount;
-       uint16_t *pixel,c;
+       int i, n, x, y;
+       uint16_t *pixel, c;
        uint32_t colorkey;
        int row_inc;
-       double theta,r;
-       int begin_generate;
+       double theta, r;
 
-       begin_generate = SDL_GetTicks();
+       n = 24.0 * t_frame;
        pixel = s->pixels;
        row_inc = s->pitch/sizeof(uint16_t) - s->w;
        colorkey = s->format->colorkey;
 
        SDL_LockSurface(s);
 
-       endcount = 0;
-       while (endcount<3) {
+       for(i=0; i<n; i++) {
                pixel = s->pixels;
                for(y=0; y<s->h; y++) {
                        for(x = 0; x<s->w; x++) {
@@ -158,26 +159,21 @@ new_bang_dots(int xbang, int ybang, int dx, int dy, SDL_Surface *s)
                                if(c && c != colorkey) {
                                        theta = frnd()*M_PI*2;
                                        r = frnd(); r = 1 - r*r;
-                                       // r = 1 - frnd()*frnd();
 
                                        bdot[bd2].dx = 45*r*cos(theta) + dx;
                                        bdot[bd2].dy = 45*r*sin(theta) + dy;
                                        bdot[bd2].x = x + xbang;
                                        bdot[bd2].y = y + ybang;
-                                       bdot[bd2].c = 0;
+                                       bdot[bd2].c = (i < n-3) ? 0 : c;
                                        bdot[bd2].life = 100;
                                        bdot[bd2].decay = frnd()*3 + 1;
                                        bdot[bd2].active = 1;
 
-                                       // Replace the last few bang dots with the pixels from the exploding object
-                                       if(endcount>0) bdot[bd2].c = c;
-
                                        bd2 = (bd2+1) % MAXBANGDOTS;
                                }
                                pixel += row_inc;
                        }
                }
-               if(SDL_GetTicks() - begin_generate > 7) endcount++;
        }
 
        SDL_UnlockSurface(s);
@@ -307,7 +303,7 @@ drawdots(SDL_Surface *s) {
        // Create engine dots out the side we're moving from
        for(m = 0; m<4; m++) {
                if(ship.jets & 1<<m) { // 'jets' is a bit field
-                       new_engine_dots(80,m);
+                       new_engine_dots(200.0*t_frame,m);
                }
        }
 
@@ -527,17 +523,6 @@ draw(void) {
 
                case HIGH_SCORE_ENTRY:
                        play_tune(TUNE_HIGH_SCORE_ENTRY);
-                       if(!process_score_input()) {  // done inputting name
-
-                               // Change state to briefly show high scores page
-                               state = HIGH_SCORE_DISPLAY;
-                               state_timeout = 200;
-
-                               // Write the high score table to the file
-                               write_high_score_table();
-               
-                               play_tune(TUNE_TITLE_PAGE);
-                       }
                // FALL THROUGH TO
                case HIGH_SCORE_DISPLAY:
                        // Display de list o high scores mon.
@@ -588,12 +573,33 @@ init_score_entry(void)
 
 void
 gameloop() {
-       Uint8 *keystate = SDL_GetKeyState(NULL);
+       SDL_Event e;
+       Uint8 *keystate;
        float tmp;
 
 
        for(;;) {
-               SDL_PumpEvents();
+               while(SDL_PollEvent(&e)) {
+                       switch(e.type) {
+                               case SDL_QUIT: return;
+                               case SDL_KEYUP:
+                                       if(e.key.keysym.sym == SDLK_ESCAPE
+                                          || e.key.keysym.sym == SDLK_q)
+                                               return;
+                                       break;
+                               case SDL_KEYDOWN:
+                                       if(state == HIGH_SCORE_ENTRY)
+                                               if(!process_score_input(&e.key.keysym)) {
+                                                       // Write the high score table to the file
+                                                       write_high_score_table();
+                                                       // continue to display the scores briefly
+                                                       state = HIGH_SCORE_DISPLAY;
+                                                       state_timeout = 200;
+                                                       play_tune(TUNE_TITLE_PAGE);
+                                               }
+                                       break;
+                       }
+               }
                keystate = SDL_GetKeyState(NULL);
 
                if(!paused) {
@@ -755,17 +761,12 @@ gameloop() {
                        state = HIGH_SCORE_DISPLAY;
                        state_timeout = 400;
                }
-
-               if(state != HIGH_SCORE_ENTRY && (keystate[SDLK_q] || keystate[SDLK_ESCAPE]))
-                       return;
-
        }
 }
 
 int
 main(int argc, char **argv) {
-       init_opts();
-       argp_parse(&argp, argc, argv, 0, 0, 0);
+       if(!parse_opts(argc, argv)) return 1;
 
        if(init()) {
                printf ("ta: '%s'\n",initerror);