X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=fb2b755aa5d162d9010e2e1ccb993520f4777e8c;hp=8d131be55ade6241813b7cac98ffd34b96086306;hb=a7afb8a944789a03012c2c661d05895e95ac78c8;hpb=1f33a47c0e3b72d6050b72926643812237dc3f49 diff --git a/main.c b/main.c index 8d131be..fb2b755 100644 --- a/main.c +++ b/main.c @@ -105,7 +105,7 @@ float state_timeout = 600.0; #define NSEQUENCE 2 char *sequence[] = { "Press SPACE to start", - "http://herkamire.com/jason/vor" + "http://jasonwoof.org/vor" }; int bangdotlife, nbangdots; @@ -193,20 +193,24 @@ draw_bang_dots(SDL_Surface *s) for(i=0; i= XSIZE || bdot[i].y < 0 || bdot[i].y >= YSIZE) { bdot[i].active = 0; continue; } + + // check collisions if(pixel_hit_rocks(bdot[i].x, bdot[i].y)) { bdot[i].active = 0; continue; } + pixel = pixels + row_inc*(int)(bdot[i].y) + (int)(bdot[i].x); if(bdot[i].c) c = bdot[i].c; else c = heatcolor[(int)(bdot[i].life)*3]; *pixel = c; - bdot[i].life -= bdot[i].decay; - bdot[i].x += bdot[i].dx*t_frame - xscroll; - bdot[i].y += bdot[i].dy*t_frame - yscroll; - - if(bdot[i].life<0) bdot[i].active = 0; } } @@ -294,11 +298,27 @@ drawdots(SDL_Surface *s) { SDL_UnlockSurface(s); } +SDL_Surface * +load_image(char *filename) +{ + SDL_Surface *tmp, *img = NULL; + char *s = add_data_path(filename); + if(s) { + tmp = IMG_Load(s); + free(s); + if(tmp) { + img = SDL_DisplayFormat(tmp); + SDL_FreeSurface(tmp); + } + } + return img; +} + int init(void) { int i; - SDL_Surface *temp; + char *s; Uint32 flag; // Where are our data files? @@ -309,7 +329,7 @@ init(void) { // Initialize SDL with audio and video if(SDL_Init(SDL_INIT_VIDEO | SDL_INIT_AUDIO) != 0) { opt_sound = 0; - printf ("Can't open sound, starting without it\n"); + fputs("Can't open sound, starting without it\n", stderr); atexit(SDL_Quit); } else { atexit(SDL_Quit); @@ -343,32 +363,27 @@ init(void) { } // Load the banners - NULLERROR(temp = IMG_Load(add_path("banners/variations.png"))); - NULLERROR(surf_b_variations = SDL_DisplayFormat(temp)); - - NULLERROR(temp = IMG_Load(add_path("banners/on.png"))); - NULLERROR(surf_b_on = SDL_DisplayFormat(temp)); + NULLERROR(surf_b_variations = load_image("banners/variations.png")); + NULLERROR(surf_b_on = load_image("banners/on.png")); + NULLERROR(surf_b_rockdodger = load_image("banners/rockdodger.png")); - NULLERROR(temp = IMG_Load(add_path("banners/rockdodger.png"))); - NULLERROR(surf_b_rockdodger = SDL_DisplayFormat(temp)); - - NULLERROR(temp = IMG_Load(add_path("banners/game.png"))); - NULLERROR(surf_b_game = SDL_DisplayFormat(temp)); - - NULLERROR(temp = IMG_Load(add_path("banners/over.png"))); - NULLERROR(surf_b_over = SDL_DisplayFormat(temp)); - - surf_font_big = IMG_Load(add_path(BIG_FONT_FILE)); - g_font = SFont_InitFont(surf_font_big); + NULLERROR(surf_b_game = load_image("banners/game.png")); + NULLERROR(surf_b_over = load_image("banners/over.png")); // Load the spaceship graphic. - NULLERROR(temp = IMG_Load(add_path("sprites/ship.png"))); - NULLERROR(surf_ship = SDL_DisplayFormat(temp)); + NULLERROR(surf_ship = load_image("sprites/ship.png")); get_shape(surf_ship, &shipshape); // Load the life indicator (small ship) graphic. - NULLERROR(temp = IMG_Load(add_path("indicators/life.png"))); - NULLERROR(surf_life = SDL_DisplayFormat(temp)); + NULLERROR(surf_life = load_image("indicators/life.png")); + + // Load the font image + s = add_data_path(BIG_FONT_FILE); + if(s) { + NULLERROR(surf_font_big = IMG_Load(s)); + free(s); + g_font = SFont_InitFont(surf_font_big); + } init_engine_dots(); init_dust(); @@ -524,7 +539,7 @@ draw() { int gameloop() { - Uint8 *keystate; + Uint8 *keystate = SDL_GetKeyState(NULL); float tmp; @@ -585,14 +600,10 @@ gameloop() { new_rocks(); - // INERTIA - shipx += shipdx*t_frame; - shipy += shipdy*t_frame; - // SCROLLING - tmp = (shipy-YSCROLLTO)/25 + (shipdy-screendy); + tmp = (shipy+shipdy*t_frame-YSCROLLTO)/25 + (shipdy-screendy); screendy += tmp * t_frame/12; - tmp = (shipx-XSCROLLTO)/25 + (shipdx-screendx); + tmp = (shipx+shipdx*t_frame-XSCROLLTO)/25 + (shipdx-screendx); screendx += tmp * t_frame/12; // taper off so we don't hit the barrier abruptly. // (if we would hit in < 2 seconds, adjust to 2 seconds). @@ -606,8 +617,8 @@ gameloop() { xscroll = screendx * t_frame; yscroll = screendy * t_frame; - shipx -= xscroll; - shipy -= yscroll; + shipx += shipdx*t_frame - xscroll; + shipy += shipdy*t_frame - yscroll; // move bang center bangx += bangdx*t_frame - xscroll;