X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=8e413bd2e4dcb0355dbf654d8e5f00d629d72d6d;hp=03d173c9c875921b4f2f0fca00f216ce39eadd9f;hb=6a635ec5768b4e40a5db1355e14b834dca864231;hpb=cf30b5f20e3c6fa5c6a328f6cb9ad1559cf227a2 diff --git a/main.c b/main.c index 03d173c..8e413bd 100644 --- a/main.c +++ b/main.c @@ -54,6 +54,8 @@ struct rock_struct { // soon as it isn't we BLOW UP float x,y,xvel,yvel; int active; + int dead; // has been blown out of the way + // to make room for a new ship appearing. SDL_Surface *image; int type_number; float heat; @@ -140,7 +142,7 @@ int nships,score,initticks,ticks_since_last, last_ticks; int gameover; int countdown = 0; int maneuver = 0; -int oss_sound_flag = 0; +int sound_flag = 1, music_flag = 0; int tail_plume = 0; // display big engine at the back? int friction = 0; // should there be friction? int scorerank; @@ -597,26 +599,23 @@ int init(int fullscreen) { } } - if(oss_sound_flag) { - - // Initialise SDL with audio and video - if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) != 0) { - oss_sound_flag = 0; - printf ("Can't open sound, starting without it\n"); - atexit(SDL_Quit); - } else { - atexit(SDL_Quit); - atexit(SDL_CloseAudio); - oss_sound_flag = init_sound(); - } - + if(sound_flag) { + // Initialize SDL with audio and video + if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) != 0) { + sound_flag = 0; + printf ("Can't open sound, starting without it\n"); + atexit(SDL_Quit); + } else { + atexit(SDL_Quit); + atexit(SDL_CloseAudio); + sound_flag = init_sound(); + } } else { - // Initialise with video only + // Initialize with video only CONDERROR(SDL_Init(SDL_INIT_VIDEO) != 0); atexit(SDL_Quit); } - if(oss_sound_flag) play_tune(0); // Attempt to get the required video size @@ -625,7 +624,7 @@ int init(int fullscreen) { surf_screen = SDL_SetVideoMode(XSIZE,YSIZE,16,flag); // Set the title bar text - SDL_WM_SetCaption("Rock Dodgers", "rockdodgers"); + SDL_WM_SetCaption("Variations on Rockdodger", "VoR"); NULLERROR(surf_screen); @@ -1002,15 +1001,7 @@ int gameloop() { // Create a new ship and start all over again state = GAMEPLAY; play_tune(1); - xship = 10; - yship = YSIZE/2; - xvel = 3; - yvel = 0; - for(i = 0; i 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; + 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 < -rock[i].image->h) { + if(rock[i].dead) { + rock[i].dead = 0; + rock[i].active = 0; + } else { + // wrap + rock[i].y = (YSIZE - rock[i].image->h) - rock[i].y; + rock[i].y += (rock[i].yvel*movementrate + yscroll) * 1.01; + } + } + if(rock[i].x < -rock[i].image->w || rock[i].x > XSIZE) { + rock[i].active = 0; + rock[i].dead = 0; + } + } } @@ -1133,10 +1149,8 @@ int gameloop() { if(draw() && state == GAMEPLAY) { - if(oss_sound_flag) { - // Play the explosion sound - play_sound(0); - } + // Play the explosion sound + play_sound(0); makebangdots(xship,yship,xvel,yvel,surf_ship,30); if(--nships <= 0) { gameover = 1; @@ -1147,8 +1161,9 @@ int gameloop() { } else { state = DEAD_PAUSE; - state_timeout = 50.0; - + state_timeout = 20.0; + xvel = 0; + yvel = 0; } } @@ -1163,6 +1178,7 @@ int gameloop() { for(i = 0; i= 0) { + while ((x = getopt(argc,argv,"efhmps")) >= 0) { switch(x) { case 'e': // engine tail_plume = 1; @@ -1253,15 +1270,19 @@ main(int argc, char **argv) { " -e big tail [E]ngine\n" " -f [F]ull screen\n" " -h this [H]elp message\n" + " -m enable [M]usic\n" " -p original [P]hysics (friction)\n" " -s [S]ilent (no sound)\n"); exit(0); break; + case 'm': // music + music_flag = 1; case 'p': // physics friction = 1; break; case 's': // silent - oss_sound_flag = 0; + sound_flag = 0; + music_flag = 0; break; } } @@ -1274,6 +1295,7 @@ main(int argc, char **argv) { while(1) { for(i = 0; i