X-Git-Url: https://jasonwoof.com/gitweb/?p=vor.git;a=blobdiff_plain;f=score.c;h=8c5bc59fd96dcb3b7a6cd84741e2df534739e404;hp=faef94ae61da3a8e36e42a22fc208199d666c50d;hb=98d1a3e9455c7c64c4b219c9022d0e1efb187cf3;hpb=f8a1bfd0744369a492554476fd8a57484c581a5b diff --git a/score.c b/score.c index faef94a..8c5bc59 100644 --- a/score.c +++ b/score.c @@ -16,48 +16,70 @@ * Foundation, Inc., 59 Temple Place, Suite 330, Boston, MA 02111-1307 USA */ -#include "config.h" - -#include "SFont.h" -#include "file.h" -#include "score.h" - #include #include -#include #include #include #include +#include "font.h" + +#include "common.h" +#include "vorconfig.h" +#include "file.h" +#include "globals.h" +#include "score.h" + // High score table -struct highscore g_scores[N_SCORES] = { - {1*60*1000,"-"}, - {45*1000,"-"}, - {30*1000,"-"}, - {20*1000,"-"}, - {10*1000,"-"}, - {7*1000,"-"}, - {5*1000,"-"}, - {3*1000,"-"} +// below are the defaults (when there's no high score file) in miliseconds +struct highscore g_scores[2][N_SCORES] = { + { + {120000,"-"}, + {105000,"-"}, + { 90000,"-"}, + { 75000,"-"}, + { 60000,"-"}, + { 50000,"-"}, + { 40000,"-"}, + { 30000,"-"} + }, + { + {120000,"-"}, + {105000,"-"}, + { 90000,"-"}, + { 75000,"-"}, + { 60000,"-"}, + { 50000,"-"}, + { 40000,"-"}, + { 30000,"-"} + } }; -extern SFont_Font *g_font; +static char *titles[2] = { "Normal\n", "Easy\n" }; +int g_easy = 0; int cur_score = -1; // which score we're currently entering. void read_high_score_table() { FILE *f; - int i; + int i, j, ret; f = open_score_file("r"); if(f) { // If the file exists, read from it - for(i = 0; i g_scores[i].score) return i; + if(score > g_scores[g_easy][i].score) return i; } return -1; } @@ -93,20 +118,26 @@ score_rank(int score) int new_high_score(int score) { - int i; - cur_score = -1; // assume not a new high score - if(score <= g_scores[LOW_SCORE].score) return false; + if(score <= g_scores[g_easy][LOW_SCORE].score) return false; read_high_score_table(); cur_score = score_rank(score); - if(cur_score < 0) return false; + return cur_score >= 0; +} + +int +insert_score(int score) +{ + int i; // Move all lower scores down a notch, losing lowest score forever. - for(i=LOW_SCORE; i>cur_score; i--) g_scores[i] = g_scores[i-1]; + if(strcmp(g_scores[g_easy][cur_score].name, "-") != 0) + for(i=LOW_SCORE; i>cur_score; i--) + g_scores[g_easy][i] = g_scores[g_easy][i-1]; // initialize new score entry. - g_scores[cur_score].score = score; - for(i=0; i<32; i++) g_scores[cur_score].name[i] = 0; + g_scores[g_easy][cur_score].score = score; + for(i=0; i<32; i++) g_scores[g_easy][cur_score].name[i] = 0; return true; } @@ -119,59 +150,67 @@ snprintscore(char *s, size_t n, int score) if(min) { return snprintf(s, n, "%2d:%.2d.%d", min, sec, tenths); } else { - return snprintf(s, n, "%2d.%d", sec, tenths); + return snprintf(s, n, " %2d.%d", sec, tenths); } } -int -snprintscore_line(char *s, size_t n, int score) +void +show_score(void) { - int r = snprintf(s, n, "Time: "); - return r + snprintscore(s+r, n-r, score); + char s[16]; + int r = snprintf(s, 16, "Time: "); + snprintscore(s+r, 16-r, score); + font_write(XSIZE-250, 0, s); } void -display_scores(SDL_Surface *s, uint32_t x, uint32_t y) +display_scores(uint32_t x, uint32_t y) { char t[1024]; - int i,h = SFont_TextHeight(g_font); + int i,h = font_height(); + int display_cursor = (SDL_GetTicks() / CURSOR_BLINK_TIME) % 2; + - SFont_Write(s,g_font,x+30,y,"High scores"); + font_write(x+30, y, "High scores"); y += h; + if(g_easy) font_write(x+75,y,"(easy)"); + else font_write(x+60,y,"(normal)"); for(i = 0; i 0) name[--n]=0; - } else { - if(k == SDLK_RETURN) { - SDL_EnableUNICODE(0); - cur_score = -1; - return false; - } else name[n++] = c; - } + if(key->sym == SDLK_BACKSPACE) { + if(n > 0) name[--n]=0; + } else { + if(key->sym == SDLK_RETURN || key->sym == SDLK_KP_ENTER) { + SDL_EnableUNICODE(0); + cur_score = -1; + if(n == 0) { + name[0] = '-'; + } + return false; + } else if(n < 12) { + if(key->unicode >= 32 && key->unicode <= 126) { + name[n++] = key->unicode; + } + } // else drop it } return true; }