#include <stdlib.h>
#include <string.h>
-#include "SFont.h"
+#include "font.h"
#include "args.h"
#include "common.h"
*surf_font_big; // The big font
-SFont_Font *g_font;
+font *g_font;
// Structure global variables
struct enginedots edot[MAXENGINEDOTS], *dotptr = edot;
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; i<n; i++) {
pixel = s->pixels;
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;
}
}
- SDL_UnlockSurface(s);
+ if(SDL_MUSTLOCK(s)) { SDL_UnlockSurface(s); }
}
void
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;
}
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
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 *
load_sprite(SPRITE(&ship), "ship.png");
}
+void font_cleanup() {
+ font_free(g_font);
+}
+
int
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();
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)) {
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
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();
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();
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;
}
}
if(!parse_opts(argc, argv)) return 1;
if(init()) {
- printf ("ta: '%s'\n",initerror);
+ printf ("vor: SDL error: '%s'\n",initerror);
return 1;
}
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;
}