- [+] move to sqlite for local hiscores ?
- [+] replace gethiscores with gethiscores_inet - [+] replace submithiscores with submithiscores_inet - [+] gethiscores_local - just use local files. - [+] submithiscores_local - write code, base it on submithiscores.php - Fix images for lives remaining when players are swapped (ie. player1 is mrs dwarf)
This commit is contained in:
parent
9146ee5ab1
commit
b8d1237522
2
Makefile
2
Makefile
|
@ -3,7 +3,7 @@ LIBS = libs/libSDL-1.2.0.dylib libs/libSDL_image-1.2.0.dylib libs/libSDL_mixer-1
|
||||||
all: rc edit
|
all: rc edit
|
||||||
|
|
||||||
rc: rc.c shared.c rc.h shared.h globals.h defs.h
|
rc: rc.c shared.c rc.h shared.h globals.h defs.h
|
||||||
gcc -Wall -DREV=`./getsvnrev.sh` -o rc -g rc.c shared.c `sdl-config --cflags --libs` -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf -lSDL_Mixer
|
gcc -Wall -DREV=`./getsvnrev.sh` -o rc -g rc.c shared.c `sdl-config --cflags --libs` -lsqlite3 -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf -lSDL_Mixer
|
||||||
|
|
||||||
edit: edit.c shared.c edit.h shared.h globals.h defs.h
|
edit: edit.c shared.c edit.h shared.h globals.h defs.h
|
||||||
gcc -DREV=`./getsvnrev.sh` -D__EDITOR -Wall -o edit -g edit.c shared.c `sdl-config --cflags --libs` -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf
|
gcc -DREV=`./getsvnrev.sh` -D__EDITOR -Wall -o edit -g edit.c shared.c `sdl-config --cflags --libs` -lSDLmain -lSDL -lSDL_image -lSDL_gfx -lSDL_ttf
|
||||||
|
|
Binary file not shown.
Binary file not shown.
149
rc.c
149
rc.c
|
@ -24,6 +24,7 @@
|
||||||
#include <SDL_ttf.h>
|
#include <SDL_ttf.h>
|
||||||
#include <SDL_framerate.h>
|
#include <SDL_framerate.h>
|
||||||
#include <SDL_mixer.h>
|
#include <SDL_mixer.h>
|
||||||
|
#include <sqlite3.h>
|
||||||
|
|
||||||
#include "shared.h"
|
#include "shared.h"
|
||||||
#include "rc.h"
|
#include "rc.h"
|
||||||
|
@ -461,7 +462,8 @@ int main (int argc, char **argv) {
|
||||||
SDL_FillRect(endgamebox, NULL, SDL_MapRGB(screen->format,white.r,white.g,white.b));
|
SDL_FillRect(endgamebox, NULL, SDL_MapRGB(screen->format,white.r,white.g,white.b));
|
||||||
|
|
||||||
// try to get hiscores
|
// try to get hiscores
|
||||||
printf("Attepting to download hiscores from %s:%d...\n",hiscoreserver,hiscoreport); fflush(stdout);
|
//printf("Attepting to download hiscores from %s:%d...\n",hiscoreserver,hiscoreport); fflush(stdout);
|
||||||
|
printf("Loading hiscore data...\n");
|
||||||
if (gethiscores(B_FALSE)) {
|
if (gethiscores(B_FALSE)) {
|
||||||
printf("Couldn't download hiscores. Disabling hiscore code.\n");
|
printf("Couldn't download hiscores. Disabling hiscore code.\n");
|
||||||
wanthiscores = B_FALSE;
|
wanthiscores = B_FALSE;
|
||||||
|
@ -7732,6 +7734,16 @@ void drawscore(void) {
|
||||||
|
|
||||||
|
|
||||||
if (player) {
|
if (player) {
|
||||||
|
SDL_Surface *myhead,*myhead5;
|
||||||
|
|
||||||
|
if (swapplayers) {
|
||||||
|
myhead = head2;
|
||||||
|
myhead5 = head52;
|
||||||
|
} else {
|
||||||
|
myhead = head;
|
||||||
|
myhead5 = head5;
|
||||||
|
}
|
||||||
|
|
||||||
if (forcegoodcard) {
|
if (forcegoodcard) {
|
||||||
if ((timer / LUCKYFLASH) % 2 == 0) {
|
if ((timer / LUCKYFLASH) % 2 == 0) {
|
||||||
scorecol = green;
|
scorecol = green;
|
||||||
|
@ -7780,14 +7792,14 @@ void drawscore(void) {
|
||||||
|
|
||||||
// show "x5" for lots of lives
|
// show "x5" for lots of lives
|
||||||
while (numtoshow >= 5) {
|
while (numtoshow >= 5) {
|
||||||
SDL_BlitSurface(head5, NULL, screen, &area);
|
SDL_BlitSurface(myhead5, NULL, screen, &area);
|
||||||
area.x += (head->w + 3);
|
area.x += (myhead5->w + 3);
|
||||||
numtoshow -= 5;
|
numtoshow -= 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < numtoshow; i++) {
|
for (i = 0; i < numtoshow; i++) {
|
||||||
SDL_BlitSurface(head, NULL, screen, &area);
|
SDL_BlitSurface(myhead, NULL, screen, &area);
|
||||||
area.x += (head->w + 3);
|
area.x += (myhead->w + 3);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
area.x = P1LIVESX;
|
area.x = P1LIVESX;
|
||||||
|
@ -7815,6 +7827,16 @@ void drawscore(void) {
|
||||||
}
|
}
|
||||||
|
|
||||||
if (player2) {
|
if (player2) {
|
||||||
|
SDL_Surface *myhead,*myhead5;
|
||||||
|
|
||||||
|
if (swapplayers) {
|
||||||
|
myhead = head;
|
||||||
|
myhead5 = head5;
|
||||||
|
} else {
|
||||||
|
myhead = head2;
|
||||||
|
myhead5 = head52;
|
||||||
|
}
|
||||||
|
|
||||||
if (forcegoodcard) {
|
if (forcegoodcard) {
|
||||||
if ((timer / LUCKYFLASH) % 2 == 0) {
|
if ((timer / LUCKYFLASH) % 2 == 0) {
|
||||||
scorecol = green;
|
scorecol = green;
|
||||||
|
@ -7864,11 +7886,11 @@ void drawscore(void) {
|
||||||
// go left correct amount
|
// go left correct amount
|
||||||
numtoshow2 = numtoshow;
|
numtoshow2 = numtoshow;
|
||||||
while (numtoshow2 >= 5) {
|
while (numtoshow2 >= 5) {
|
||||||
area.x -= (head2->w + 3);
|
area.x -= (myhead->w + 3);
|
||||||
numtoshow2 -= 5;
|
numtoshow2 -= 5;
|
||||||
}
|
}
|
||||||
for (i = 0; i < numtoshow2; i++) {
|
for (i = 0; i < numtoshow2; i++) {
|
||||||
area.x -= (head2->w + 3);
|
area.x -= (myhead->w + 3);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
|
@ -7876,17 +7898,17 @@ void drawscore(void) {
|
||||||
|
|
||||||
// show "x5" for lots of lives
|
// show "x5" for lots of lives
|
||||||
while (numtoshow >= 5) {
|
while (numtoshow >= 5) {
|
||||||
SDL_BlitSurface(head52, NULL, screen, &area);
|
SDL_BlitSurface(myhead5, NULL, screen, &area);
|
||||||
area.x += (head2->w + 3);
|
area.x += (myhead5->w + 3);
|
||||||
numtoshow -= 5;
|
numtoshow -= 5;
|
||||||
}
|
}
|
||||||
|
|
||||||
for (i = 0; i < numtoshow; i++) {
|
for (i = 0; i < numtoshow; i++) {
|
||||||
SDL_BlitSurface(head2, NULL, screen, &area);
|
SDL_BlitSurface(myhead, NULL, screen, &area);
|
||||||
area.x += (head2->w + 3);
|
area.x += (myhead->w + 3);
|
||||||
}
|
}
|
||||||
} else {
|
} else {
|
||||||
area.x = 640 - P1LIVESX - (head2->w);
|
area.x = 640 - P1LIVESX - (myhead->w);
|
||||||
area.y = LIVESY;
|
area.y = LIVESY;
|
||||||
area.w = 0;
|
area.w = 0;
|
||||||
area.h = 0;
|
area.h = 0;
|
||||||
|
@ -13483,8 +13505,11 @@ void drawcredits(void) {
|
||||||
SDL_FreeSurface(credittext);
|
SDL_FreeSurface(credittext);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
|
||||||
int submithiscore(int score,int level, char *name) {
|
int submithiscore(int score,int level, char *name) {
|
||||||
|
return submithiscore_local(score, level, name);
|
||||||
|
}
|
||||||
|
|
||||||
|
int submithiscore_inet(int score,int level, char *name) {
|
||||||
struct sockaddr_in serveraddress;
|
struct sockaddr_in serveraddress;
|
||||||
struct hostent *server;
|
struct hostent *server;
|
||||||
int rv;
|
int rv;
|
||||||
|
@ -13545,7 +13570,44 @@ int submithiscore(int score,int level, char *name) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int submithiscore_local(int score,int level, char *name) {
|
||||||
|
int rv;
|
||||||
|
sqlite3 *db;
|
||||||
|
char *cmd,*errmsg = NULL;
|
||||||
|
char filename[BUFLEN];
|
||||||
|
|
||||||
|
if (easymode()) {
|
||||||
|
snprintf(filename, BUFLEN, "%s", "data/hiscores.easy.db");
|
||||||
|
} else {
|
||||||
|
snprintf(filename, BUFLEN, "%s", "data/hiscores.db");
|
||||||
|
}
|
||||||
|
rv = sqlite3_open(filename, &db);
|
||||||
|
if (rv) {
|
||||||
|
printf("can't open database file %s\n",filename);
|
||||||
|
return B_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// request hiscores
|
||||||
|
asprintf(&cmd, "insert into 'hiscores' (name,level,score) VALUES ('%s',%d,%d)",name,level,score);
|
||||||
|
|
||||||
|
rv = sqlite3_exec(db, cmd, processhiscore, NULL, &errmsg);
|
||||||
|
if (rv != SQLITE_OK) {
|
||||||
|
printf("* error writing hiscores: '%s'\n", errmsg);
|
||||||
|
printf("* query was: '%s'\n", cmd);
|
||||||
|
sqlite3_free(errmsg);
|
||||||
|
}
|
||||||
|
free(cmd);
|
||||||
|
sqlite3_close(db);
|
||||||
|
|
||||||
|
return B_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
int gethiscores(int easyscores) {
|
int gethiscores(int easyscores) {
|
||||||
|
return gethiscores_local(easyscores);
|
||||||
|
}
|
||||||
|
|
||||||
|
int gethiscores_inet(int easyscores) {
|
||||||
struct sockaddr_in serveraddress;
|
struct sockaddr_in serveraddress;
|
||||||
struct hostent *server;
|
struct hostent *server;
|
||||||
int rv;
|
int rv;
|
||||||
|
@ -13642,6 +13704,67 @@ int gethiscores(int easyscores) {
|
||||||
return B_FALSE;
|
return B_FALSE;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
int gethiscores_local(int easyscores) {
|
||||||
|
int rv;
|
||||||
|
sqlite3 *db;
|
||||||
|
char *cmd,*errmsg = NULL;
|
||||||
|
char filename[BUFLEN];
|
||||||
|
|
||||||
|
if (easyscores) {
|
||||||
|
snprintf(filename, BUFLEN, "%s", "data/hiscores.easy.db");
|
||||||
|
} else {
|
||||||
|
snprintf(filename, BUFLEN, "%s", "data/hiscores.db");
|
||||||
|
}
|
||||||
|
rv = sqlite3_open(filename, &db);
|
||||||
|
if (rv) {
|
||||||
|
printf("can't open database file %s\n",filename);
|
||||||
|
return B_TRUE;
|
||||||
|
}
|
||||||
|
|
||||||
|
|
||||||
|
// request hiscores
|
||||||
|
asprintf(&cmd, " select (select count(*) from hiscores b where b.score > a.score) + 1 as rank,name,level,score from hiscores a order by score desc limit 10");
|
||||||
|
|
||||||
|
numhiscores = 0;
|
||||||
|
|
||||||
|
rv = sqlite3_exec(db, cmd, processhiscore, NULL, &errmsg);
|
||||||
|
if (rv != SQLITE_OK) {
|
||||||
|
printf("* error reading hiscores: '%s'\n", errmsg);
|
||||||
|
printf("* query was: '%s'\n", cmd);
|
||||||
|
sqlite3_free(errmsg);
|
||||||
|
}
|
||||||
|
free(cmd);
|
||||||
|
sqlite3_close(db);
|
||||||
|
|
||||||
|
return B_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
|
int processhiscore(void *dataptr, int ncols, char **argv, char **colname) {
|
||||||
|
int i, rank = -1;
|
||||||
|
for (i = 0; i < ncols; i++) {
|
||||||
|
if (!strcmp(colname[i], "rank")) {
|
||||||
|
rank = atoi(argv[i]) - 1;
|
||||||
|
break;
|
||||||
|
}
|
||||||
|
}
|
||||||
|
if (rank == -1) {
|
||||||
|
printf("error processing hiscore data - no rank round.\n");
|
||||||
|
exit(1);
|
||||||
|
}
|
||||||
|
|
||||||
|
for (i = 0; i < ncols; i++) {
|
||||||
|
if (!strcmp(colname[i], "score")) {
|
||||||
|
hiscore[rank].score = atoi(argv[i]);
|
||||||
|
} else if (!strcmp(colname[i], "level")) {
|
||||||
|
hiscore[rank].level = atoi(argv[i]);
|
||||||
|
} else if (!strcmp(colname[i], "name")) {
|
||||||
|
snprintf(hiscore[rank].name, MIDBUFLEN, "%s", argv[i]);
|
||||||
|
}
|
||||||
|
}
|
||||||
|
numhiscores++;
|
||||||
|
return B_FALSE;
|
||||||
|
}
|
||||||
|
|
||||||
void checkhiscores(sprite_t *who){
|
void checkhiscores(sprite_t *who){
|
||||||
int finished = B_FALSE;
|
int finished = B_FALSE;
|
||||||
int i;
|
int i;
|
||||||
|
|
5
rc.h
5
rc.h
|
@ -102,9 +102,14 @@ void drawoutlinetextcentre(SDL_Surface *where,int y, int size, char *msg, SDL_Co
|
||||||
int socket_readline(int sock, char *out);
|
int socket_readline(int sock, char *out);
|
||||||
void showhiscores(void);
|
void showhiscores(void);
|
||||||
void checkhiscores(sprite_t *s);
|
void checkhiscores(sprite_t *s);
|
||||||
|
int gethiscores_inet(int easyscores);
|
||||||
|
int gethiscores_local(int easyscores);
|
||||||
int gethiscores(int easyscores);
|
int gethiscores(int easyscores);
|
||||||
|
int processhiscore(void *dataptr, int ncols, char **argv, char **colname);
|
||||||
void drawhiscores(void);
|
void drawhiscores(void);
|
||||||
int submithiscore(int score,int level, char *name);
|
int submithiscore(int score,int level, char *name);
|
||||||
|
int submithiscore_inet(int score,int level, char *name);
|
||||||
|
int submithiscore_local(int score,int level, char *name);
|
||||||
void getinput(void);
|
void getinput(void);
|
||||||
int isendoflev(void);
|
int isendoflev(void);
|
||||||
void keeponscreen(sprite_t *s);
|
void keeponscreen(sprite_t *s);
|
||||||
|
|
Loading…
Reference in New Issue