X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=main.c;h=ccaf3504d59c5bc55ba7d6fd497e67240fc49b2f;hp=83c032f56a11cfa3f212b70b69d613f4614a5c1d;hb=47d10ee91e99f21602ce674ad140fc99b8986633;hpb=3553d9b0d980dab11ab3d2135650d804d2af331f diff --git a/main.c b/main.c index 83c032f..ccaf350 100644 --- a/main.c +++ b/main.c @@ -27,7 +27,7 @@ #include #include -#include "SFont.h" +#include "font.h" #include "args.h" #include "common.h" @@ -59,7 +59,7 @@ SDL_Surface *surf_font_big; // The big font -SFont_Font *g_font; +font *g_font; // Structure global variables struct enginedots edot[MAXENGINEDOTS], *dotptr = edot; @@ -145,12 +145,12 @@ new_bang_dots(int xbang, int ybang, int dx, int dy, SDL_Surface *s) int row_inc; double theta, r; - n = 24.0 * t_frame; + n = 20; pixel = s->pixels; row_inc = s->pitch/sizeof(uint16_t) - s->w; colorkey = s->format->colorkey; - SDL_LockSurface(s); + if(SDL_MUSTLOCK(s)) { SDL_LockSurface(s); } for(i=0; ipixels; @@ -165,8 +165,8 @@ new_bang_dots(int xbang, int ybang, int dx, int dy, SDL_Surface *s) bdot[bd2].dy = 45*r*sin(theta) + dy; bdot[bd2].x = x + xbang; bdot[bd2].y = y + ybang; - bdot[bd2].c = (i < n-3) ? 0 : c; - bdot[bd2].life = 100; + //bdot[bd2].c = (i < n-3) ? 0 : c; + bdot[bd2].life = frnd() * 99; bdot[bd2].decay = frnd()*3 + 1; bdot[bd2].active = 1; @@ -177,7 +177,7 @@ new_bang_dots(int xbang, int ybang, int dx, int dy, SDL_Surface *s) } } - SDL_UnlockSurface(s); + if(SDL_MUSTLOCK(s)) { SDL_UnlockSurface(s); } } void @@ -190,13 +190,13 @@ move_bang_dots(float ticks) if(!bdot[i].active) continue; // decrement life and maybe kill - bdot[i].life -= bdot[i].decay; + bdot[i].life -= bdot[i].decay * ticks/2.0; if(bdot[i].life < 0) { bdot[i].active = 0; continue; } // move and clip bdot[i].x += (bdot[i].dx - screendx)*ticks; bdot[i].y += (bdot[i].dy - screendy)*ticks; - if(bdot[i].x < 0 || bdot[i].x >= XSIZE || bdot[i].y < 0 || bdot[i].y >= YSIZE) { + if(bdot[i].x < 0 || bdot[i].x >= (XSIZE - 0.000001) || bdot[i].y < 0 || bdot[i].y >= (YSIZE - 0.000001)) { bdot[i].active = 0; continue; } @@ -310,8 +310,9 @@ move_engine_dots(float ticks) { edot[i].x += (edot[i].dx - screendx)*ticks; edot[i].y += (edot[i].dy - screendy)*ticks; edot[i].life -= t_frame*3; - if(edot[i].life < 0 || edot[i].x<0 || edot[i].x >= XSIZE || edot[i].y < 0 || edot[i].y >= YSIZE) { + if(edot[i].life < 0 || edot[i].x<0 || edot[i].x >= (XSIZE - 0.000001) || edot[i].y < 0 || edot[i].y >= (YSIZE - 0.000001)) { edot[i].active = 0; + continue; } // check collisions @@ -345,11 +346,11 @@ draw_engine_dots(SDL_Surface *s) { void draw_dots(SDL_Surface *s) { - SDL_LockSurface(s); + if(SDL_MUSTLOCK(s)) { SDL_LockSurface(s); } draw_dust(s); draw_engine_dots(s); draw_bang_dots(s); - SDL_UnlockSurface(s); + if(SDL_MUSTLOCK(s)) { SDL_UnlockSurface(s); } } SDL_Surface * @@ -374,6 +375,10 @@ load_ship(void) load_sprite(SPRITE(&ship), "ship.png"); } +void font_cleanup() { + font_free(g_font); +} + int init(void) { @@ -436,9 +441,11 @@ init(void) { // Load the font image s = add_data_path("font.png"); if(s) { - NULLERROR(surf_font_big = IMG_Load(s)); - free(s); - g_font = SFont_InitFont(surf_font_big); + g_font = font_load(s); + atexit(&font_cleanup); + } else { + fprintf(stderr, "could create path to font\n"); + exit(1); } init_engine_dots(); @@ -484,12 +491,12 @@ draw_game_over(void) 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)(a_game*(200 + 55*cos(fadetimer)))); + //SDL_SetAlpha(surf_b_game, SDL_SRCALPHA, (int)(a_game*(200 + 55*cos(fadetimer)))); 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)(a_over*(200 + 55*sin(fadetimer)))); + //SDL_SetAlpha(surf_b_over, SDL_SRCALPHA, (int)(a_over*(200 + 55*sin(fadetimer)))); SDL_BlitSurface(surf_b_over,NULL,surf_screen,&dest); if(new_high_score(score)) { @@ -500,11 +507,11 @@ draw_game_over(void) text1 = msgs[g_easy][1]; } - x = (XSIZE-SFont_TextWidth(g_font,text0))/2 + cos(fadetimer/9)*10; - SFont_Write(surf_screen,g_font,x,YSIZE-100 + cos(fadetimer/6)*5,text0); + x = (XSIZE-font_width(text0))/2 + cos(fadetimer/9)*10; + font_write(x,YSIZE-100 + cos(fadetimer/6)*5,text0); - x = (XSIZE-SFont_TextWidth(g_font,text1))/2 + sin(fadetimer/9)*10; - SFont_Write(surf_screen,g_font,x,YSIZE-50 + sin(fadetimer/4)*5,text1); + x = (XSIZE-font_width(text1))/2 + sin(fadetimer/9)*10; + font_write(x,YSIZE-50 + sin(fadetimer/4)*5,text1); } void @@ -518,32 +525,32 @@ draw_title_page(void) 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))); + //SDL_SetAlpha(surf_b_variations, SDL_SRCALPHA, (int)(200 + 55*sin(fadetimer))); 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_SetAlpha(surf_b_on, SDL_SRCALPHA, (int)(200 + 55*sin(fadetimer-1.0))); 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_SetAlpha(surf_b_rockdodger, SDL_SRCALPHA, (int)(200 + 55*sin(fadetimer-2.0))); SDL_BlitSurface(surf_b_rockdodger,NULL,surf_screen,&dest); text = msgs[g_easy][(int)(fadetimer/35)%NSEQUENCE]; - x = (XSIZE-SFont_TextWidth(g_font,text))/2 + cos(fadetimer/4.5)*10; - SFont_Write(surf_screen,g_font,x,YSIZE-100 + cos(fadetimer/3)*5,text); + x = (XSIZE-font_width(text))/2 + cos(fadetimer/4.5)*10; + font_write(x,YSIZE-100 + cos(fadetimer/3)*5,text); text = "Version " VERSION; - x = (XSIZE-SFont_TextWidth(g_font,text))/2 + sin(fadetimer/4.5)*10; - SFont_Write(surf_screen,g_font,x,YSIZE-50 + sin(fadetimer/2)*5,text); + x = (XSIZE-font_width(text))/2 + sin(fadetimer/4.5)*10; + font_write(x,YSIZE-50 + sin(fadetimer/2)*5,text); } void draw(void) { - // SDL_FillRect(surf_screen,NULL,0); // black background + SDL_FillRect(surf_screen,NULL,0); // black background draw_dots(surf_screen); // background dots draw_sprite(SPRITE(&ship)); draw_rocks(); @@ -648,19 +655,17 @@ gameloop() { for(;;) { ms_frame = SDL_GetTicks() - ms_end; ms_end += ms_frame; + if(ms_frame > 1000) { + ms_frame = 1000; + } t_frame = opt_gamespeed * ms_frame / 50; frames++; 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(state == HIGH_SCORE_ENTRY) { if(!process_score_input(&e.key.keysym)) { // Write the high score table to the file write_high_score_table(); @@ -669,6 +674,13 @@ gameloop() { state_timeout = 200; play_tune(TUNE_TITLE_PAGE); } + } else if(e.key.keysym.sym == SDLK_q) { + return; + } + + if(e.key.keysym.sym == SDLK_ESCAPE) { + return; + } break; } } @@ -813,7 +825,7 @@ main(int argc, char **argv) { if(!parse_opts(argc, argv)) return 1; if(init()) { - printf ("ta: '%s'\n",initerror); + printf ("vor: SDL error: '%s'\n",initerror); return 1; } @@ -821,7 +833,7 @@ main(int argc, char **argv) { frames = 0; gameloop(); end = SDL_GetTicks(); - printf("%ld frames in %ld ms, %.2f fps.\n", frames, end-start, frames * 1000.0 / (end-start)); + // printf("%ld frames in %ld ms, %.2f fps.\n", frames, end-start, frames * 1000.0 / (end-start)); return 0; }