X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=daa2471c752b3a38a8a724f53dda32e7e4657b8a;hp=112d6d7c9c75aefc7a0707d73e3ec4b0dbdd4fed;hb=9c864f32b506241d30e1b40fae5bea78f54ec498;hpb=d96cae8368715101e2bf3f9ff8900dc171c70b2f diff --git a/main.c b/main.c index 112d6d7..daa2471 100644 --- a/main.c +++ b/main.c @@ -55,6 +55,7 @@ SDL_Surface *surf_life, // Indicator of number of ships remaining *surf_rock[NROCKS], // THE ROCKS *surf_font_big; // The big font + SFont_Font *g_font; @@ -69,14 +70,14 @@ char *initerror = ""; struct shape shipshape; float shipx = XSIZE/2, shipy = YSIZE/2; // X position, 0..XSIZE -float shipdx = 8, shipdy = 0; // Change in X position per tick. +float shipdx = 7.5, shipdy = 0.0; // Change in X position per tick. float screendx = 7.5, screendy = 0.0; float xscroll, yscroll; float gamerate; // this controls the speed of everything that moves. float bangx, bangy, bangdx, bangdy; -int nships,score,initticks,ticks_since_last, last_ticks; +int nships,score,game_ticks,ticks_since_last,last_ticks; int gameover; int maneuver = 0; int sound_flag, music_flag; @@ -205,6 +206,7 @@ draw_bang_dots(SDL_Surface *s) { rawpixel = (Uint16 *) s->pixels; first_i = -1; + last_i = 0; for(i = bd1; (bd1 <= bd2)?(i= bd1 && i < bd2); last_i = ++i) { @@ -485,18 +487,13 @@ init(int fullscreen) { int draw() { int i; - SDL_Rect src,dest; + SDL_Rect dest; int bang, x; char *text; float fadegame,fadeover; bang = 0; - src.x = 0; - src.y = 0; - dest.x = 0; - dest.y = 0; - // Draw a fully black background SDL_FillRect(surf_screen,NULL,0); @@ -505,13 +502,9 @@ draw() { // Draw ship if(!gameover && state == GAMEPLAY ) { - src.w = surf_ship->w; - src.h = surf_ship->h; - dest.w = src.w; - dest.h = src.h; - dest.x = (int)shipx; - dest.y = (int)shipy; - SDL_BlitSurface(surf_ship,&src,surf_screen,&dest); + dest.x = shipx; + dest.y = shipy; + SDL_BlitSurface(surf_ship,NULL,surf_screen,&dest); } draw_rocks(); @@ -519,13 +512,9 @@ draw() { // Draw the life indicators. if(state == GAMEPLAY || state == DEAD_PAUSE || state == GAME_OVER) for(i = 0; iw; - src.h = surf_life->h; - dest.w = src.w; - dest.h = src.h; - dest.x = (i + 1)*(src.w + 10); + dest.x = (i + 1)*(surf_life->w + 10); dest.y = 20; - SDL_BlitSurface(surf_life, &src, surf_screen, &dest); + SDL_BlitSurface(surf_life, NULL, surf_screen, &dest); } // Draw the score @@ -549,53 +538,33 @@ draw() { fadeover = 1.0; } - src.w = surf_b_game->w; - src.h = surf_b_game->h; - dest.w = src.w; - dest.h = src.h; - dest.x = (XSIZE-src.w)/2; - dest.y = (YSIZE-src.h)/2-40; + dest.x = (XSIZE-surf_b_game->w)/2; + dest.y = (YSIZE-surf_b_game->h)/2-40; SDL_SetAlpha(surf_b_game, SDL_SRCALPHA, (int)(fadegame*(200 + 55*cos(fadetimer += gamerate/1.0)))); - SDL_BlitSurface(surf_b_game,&src,surf_screen,&dest); - - src.w = surf_b_over->w; - src.h = surf_b_over->h; - dest.w = src.w; - dest.h = src.h; - dest.x = (XSIZE-src.w)/2; - dest.y = (YSIZE-src.h)/2 + 40; + SDL_BlitSurface(surf_b_game,NULL,surf_screen,&dest); + + dest.x = (XSIZE-surf_b_over->w)/2; + dest.y = (YSIZE-surf_b_over->h)/2 + 40; SDL_SetAlpha(surf_b_over, SDL_SRCALPHA, (int)(fadeover*(200 + 55*sin(fadetimer)))); - SDL_BlitSurface(surf_b_over,&src,surf_screen,&dest); + SDL_BlitSurface(surf_b_over,NULL,surf_screen,&dest); break; case TITLE_PAGE: - src.w = surf_b_variations->w; - src.h = surf_b_variations->h; - dest.w = src.w; - dest.h = src.h; - dest.x = (XSIZE-src.w)/2 + cos(fadetimer/6.5)*10; - dest.y = (YSIZE/2-src.h)/2 + sin(fadetimer/5.0)*10; + dest.x = (XSIZE-surf_b_variations->w)/2 + cos(fadetimer/6.5)*10; + dest.y = (YSIZE/2-surf_b_variations->h)/2 + sin(fadetimer/5.0)*10; SDL_SetAlpha(surf_b_variations, SDL_SRCALPHA, (int)(200 + 55*sin(fadetimer += gamerate/2.0))); - SDL_BlitSurface(surf_b_variations,&src,surf_screen,&dest); - - src.w = surf_b_on->w; - src.h = surf_b_on->h; - dest.w = src.w; - dest.h = src.h; - dest.x = (XSIZE-src.w)/2 + cos((fadetimer + 1.0)/6.5)*10; - dest.y = (YSIZE/2-src.h)/2 + surf_b_variations->h + 20 + sin((fadetimer + 1.0)/5.0)*10; + SDL_BlitSurface(surf_b_variations,NULL,surf_screen,&dest); + + dest.x = (XSIZE-surf_b_on->w)/2 + cos((fadetimer + 1.0)/6.5)*10; + dest.y = (YSIZE/2-surf_b_on->h)/2 + surf_b_variations->h + 20 + sin((fadetimer + 1.0)/5.0)*10; SDL_SetAlpha(surf_b_on, SDL_SRCALPHA, (int)(200 + 55*sin(fadetimer-1.0))); - SDL_BlitSurface(surf_b_on,&src,surf_screen,&dest); - - src.w = surf_b_rockdodger->w; - src.h = surf_b_rockdodger->h; - dest.w = src.w; - dest.h = src.h; - dest.x = (XSIZE-src.w)/2 + cos((fadetimer + 2.0)/6.5)*10; - dest.y = (YSIZE/2-src.h)/2 + surf_b_variations->h + surf_b_on->h + 40 + sin((fadetimer + 2.0)/5)*10; + SDL_BlitSurface(surf_b_on,NULL,surf_screen,&dest); + + dest.x = (XSIZE-surf_b_rockdodger->w)/2 + cos((fadetimer + 2.0)/6.5)*10; + dest.y = (YSIZE/2-surf_b_rockdodger->h)/2 + surf_b_variations->h + surf_b_on->h + 40 + sin((fadetimer + 2.0)/5)*10; SDL_SetAlpha(surf_b_rockdodger, SDL_SRCALPHA, (int)(200 + 55*sin(fadetimer-2.0))); - SDL_BlitSurface(surf_b_rockdodger,&src,surf_screen,&dest); + SDL_BlitSurface(surf_b_rockdodger,NULL,surf_screen,&dest); text = "Version " VERSION; x = (XSIZE-SFont_TextWidth(g_font,text))/2 + sin(fadetimer/4.5)*10; @@ -741,6 +710,7 @@ gameloop() { tmp /= -25; tmp = ((screendx * (gamerate - 12)) + (tmp * gamerate)) / 12; screendx = -tmp; + if(screendx < 7.5) screendx=7.5; xscroll = screendx * gamerate; yscroll = screendy * gamerate; @@ -757,15 +727,15 @@ gameloop() { // BOUNCE X if(shipx<0 || shipx>XSIZE-surf_ship->w) { // BOUNCE from left and right wall - shipx -= shipdx*gamerate; - shipdx *= -99; + shipx -= (shipdx-screendx)*gamerate; + shipdx = 2*screendx-shipdx; } // BOUNCE Y if(shipy<0 || shipy>YSIZE-surf_ship->h) { // BOUNCE from top and bottom wall - shipy -= shipdy; - shipdy *= -0.99; + shipy -= (shipdy-screendy)*gamerate; + shipdy = 2*screendy-shipdy; } @@ -792,10 +762,13 @@ gameloop() { SDL_PumpEvents(); keystate = SDL_GetKeyState(NULL); + // new game if(keystate[SDLK_SPACE] && (state == HIGH_SCORE_DISPLAY || state == TITLE_PAGE)) { reset_rocks(); + game_ticks = 0; + nships = 4; score = 0; @@ -897,7 +870,6 @@ main(int argc, char **argv) { } reset_rocks(); - initticks = SDL_GetTicks(); gameloop(); return 0;