X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=03d173c9c875921b4f2f0fca00f216ce39eadd9f;hp=a1864319ddfa3548cc6a84cf0541773e9ad4d055;hb=cf30b5f20e3c6fa5c6a328f6cb9ad1559cf227a2;hpb=b5a8e092201fa4c7c95a00dee56abe228fe60fdd diff --git a/main.c b/main.c index a186431..03d173c 100644 --- a/main.c +++ b/main.c @@ -25,6 +25,7 @@ extern int font_height; void clearBuffer(); // includes {{{ +#include "config.h" #include #include #include @@ -40,19 +41,6 @@ void clearBuffer(); #include "SFont.h" // }}} // constants {{{ -#define XSIZE 640 -#define YSIZE 480 -#define NROCKS 6 // Number of rock image files, not number of rocks visible -#define MAXROCKS 120 // MAX Rocks -#define MAXROCKHEIGHT 100 -#define ROCKRATE 2 -#define MAXBLACKPOINTS 500 -#define MAXENGINEDOTS 5000 -#define MAXBANGDOTS 50000 -#define MAXSPACEDOTS 2000 -#define W 100 -#define M 255 -#define BIG_FONT_FILE "fonts/score.png" // }}} // macros {{{ #define CONDERROR(a) if((a)) {initerror = strdup(SDL_GetError());return 1;} @@ -145,15 +133,13 @@ float xship,yship = 240.0; // X position, 0..XSIZE float xvel,yvel; // Change in X position per tick. float rockrate,rockspeed; float movementrate; -float shieldlevel, shieldpulse = 0; float yscroll; +float scrollvel; int nships,score,initticks,ticks_since_last, last_ticks; -int initialshield, gameover, fast; +int gameover; int countdown = 0; int maneuver = 0; -int laser = 0; -int shieldsup = 0; int oss_sound_flag = 0; int tail_plume = 0; // display big engine at the back? int friction = 0; // should there be friction? @@ -195,32 +181,12 @@ extern char *optarg; extern int optind, opterr, optopt; // }}} -// ************************************* FUNCS -#ifdef DOTCOLLISION -int dotcollision(SDL_Surface *s) { - int i,j,m; - Uint16 *rawpixel, *r; - - /* - * Kill all the dots which collide with other objects. - * This does not work, it's probably in the wrong place or something. - */ - SDL_LockSurface(s); - rawpixel = (Uint16 *) s->pixels; - if(bangdotlife > 0 && bangdotlife<80) { - for(i = 0; i0 && bdot[i].x0 && bdot[i].ypitch/2*(int)(bdot[i].y)) + (int)(bdot[i].x)]; - if(*r != (bdot[i].c ? bdot[i].c : heatcolor[bangdotlife*2])) - bdot[i].active = 0; - } - } - } - SDL_UnlockSurface(s); - - return; +float dist_sq(float x1, float y1, float x2, float y2) +{ + return (x2-x1)*(x2-x1) + (y2-y1)*(y2-y1); } -#endif + +// ************************************* FUNCS FILE *hs_fopen(char *mode) { FILE *f; @@ -313,43 +279,6 @@ void init_space_dots() { } } -int drawlaser() { - int i,xc,hitrock; - Uint16 c, *rawpixel; - - hitrock = -1; - xc = XSIZE; - // let xc = x coordinate of the collision between the laser and a space rock - // 1. Calculate xc and determine the asteroid that was hit - for(i = 0; irock[i].y && yship + 12h && xship + 32w/2) && rock[i].x + (rock[i].image->w/2) < xc) { - xc = rock[i].x + (rock[i].image->w/2); - hitrock = i; - } - } - } - - if(hitrock >= 0) { - rock[hitrock].heat += movementrate*3; - } - - // Plot a number of random dots between xship and XSIZE - SDL_LockSurface(surf_screen); - rawpixel = (Uint16 *) surf_screen->pixels; - c = SDL_MapRGB(surf_ship->format,rnd()*128,128 + rnd()*120,rnd()*128); - - for(i = 0; i<(xc-xship)*5; i += 10) { - int x,y; - x = rnd()*(xc-(xship + 32)) + xship + 32; - y = yship + 12 + (rnd()-0.5)*1.5; - rawpixel[surf_screen->pitch/2*y + x] = c; - } - - SDL_UnlockSurface(surf_screen); -} - - int makebangdots(int xbang, int ybang, int xvel, int yvel, SDL_Surface *s, int power) { // TODO - stop generating dots after a certain amount of time has passed, to cope with slower CPUs. @@ -829,11 +758,6 @@ int draw() { // Draw the background dots drawdots(surf_screen); - // If it's firing, draw the laser - if(laser) { - drawlaser(); - } - // Draw ship if(!gameover && (state == GAMEPLAY || state == DEMO) ) { src.w = surf_ship->w; @@ -1010,48 +934,20 @@ int draw() { } if(!gameover && state == GAMEPLAY) { - // Show the freaky shields SDL_LockSurface(surf_screen); raw_pixels = (Uint16 *) surf_screen->pixels; - if(initialshield>0 || shieldsup && shieldlevel>0) { - int x,y,l; - Uint16 c; - - if(initialshield>0) { - initialshield -= movementrate; - c = SDL_MapRGB(surf_screen->format,0,255,255); - } else { - c = heatcolor[(int)shieldlevel]; - shieldlevel -= movementrate; - } - - shieldpulse += 0.2; - for(p = black_point; px + (int)xship + (rnd() + rnd()-1)*sin(shieldpulse)*4 + 1; - y = p->y + (int)yship + (rnd() + rnd()-1)*sin(shieldpulse)*4 + 1; - if(x>0 && y>0 && xpitch/2 * y + x; - raw_pixels[offset] = c; - } - } - } else { - // When the shields are off, check that the black points - // on the ship are still black, and not covered up by rocks - for(p = black_point; ppitch/2 * (p->y + (int)yship) + p->x + (int)xship; - if(raw_pixels[offset]) { - // Set the bang flag - bang = 1; - } + // Check that the black points on the ship are + // still black, and not covered up by rocks. + for(p = black_point; ppitch/2 * (p->y + (int)yship) + p->x + (int)xship; + if(raw_pixels[offset]) { + // Set the bang flag + bang = 1; } } SDL_UnlockSurface(surf_screen); } -#ifdef DOTCOLLISION - dotcollision(surf_screen); // Kill dots that are not on their spots -#endif - // Draw all the little ships if(state == GAMEPLAY || state == DEAD_PAUSE || state == GAME_OVER) for(i = 0; i