rogue3: add the option of logging all games to a text file
This commit is contained in:
parent
437daf6c31
commit
bd3b2e4e53
5 changed files with 86 additions and 1 deletions
|
|
@ -40,7 +40,8 @@ CC = gcc
|
||||||
ROPTS =
|
ROPTS =
|
||||||
COPTS = -O3
|
COPTS = -O3
|
||||||
CFLAGS= $(COPTS) $(ROPTS) -DSCOREFILE=\"/usr/local/games/roguelike/rogue3.scr\" \
|
CFLAGS= $(COPTS) $(ROPTS) -DSCOREFILE=\"/usr/local/games/roguelike/rogue3.scr\" \
|
||||||
-DSAVEDIR=\"/usr/local/games/roguelike/rogue3save/\"
|
-DSAVEDIR=\"/usr/local/games/roguelike/rogue3save/\" \
|
||||||
|
-DLOGFILE=\"/usr/local/games/roguelike/rogue3.log\"
|
||||||
LIBS = -lcurses
|
LIBS = -lcurses
|
||||||
RM = rm -f
|
RM = rm -f
|
||||||
LD = $(CC)
|
LD = $(CC)
|
||||||
|
|
|
||||||
|
|
@ -338,6 +338,7 @@ quit(int p)
|
||||||
move(LINES-1, 0);
|
move(LINES-1, 0);
|
||||||
draw(stdscr);
|
draw(stdscr);
|
||||||
endwin();
|
endwin();
|
||||||
|
log(purse, 1, 0);
|
||||||
score(purse, 1, 0);
|
score(purse, 1, 0);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -23,6 +23,7 @@ WINDOW *cw; /* Window that the player sees */
|
||||||
WINDOW *hw; /* Used for the help command */
|
WINDOW *hw; /* Used for the help command */
|
||||||
WINDOW *mw; /* Used to store mosnters */
|
WINDOW *mw; /* Used to store mosnters */
|
||||||
FILE *scoreboard = NULL;
|
FILE *scoreboard = NULL;
|
||||||
|
FILE *logf = NULL;
|
||||||
|
|
||||||
main(argc, argv, envp)
|
main(argc, argv, envp)
|
||||||
char **argv;
|
char **argv;
|
||||||
|
|
|
||||||
80
rogue3/rip.c
80
rogue3/rip.c
|
|
@ -77,6 +77,7 @@ death(int monst)
|
||||||
mvaddstr(18, 26, prbuf);
|
mvaddstr(18, 26, prbuf);
|
||||||
move(LINES-1, 0);
|
move(LINES-1, 0);
|
||||||
draw(stdscr);
|
draw(stdscr);
|
||||||
|
log(purse, 0, monst);
|
||||||
score(purse, 0, monst);
|
score(purse, 0, monst);
|
||||||
/* Make sure all the output gets through ssh and
|
/* Make sure all the output gets through ssh and
|
||||||
anything else that might be in the way. */
|
anything else that might be in the way. */
|
||||||
|
|
@ -118,6 +119,31 @@ open_score(void)
|
||||||
#endif
|
#endif
|
||||||
}
|
}
|
||||||
|
|
||||||
|
#if 0 /* not necessary */
|
||||||
|
/* Same thing, but for the log file. Maybe combine them eventually. */
|
||||||
|
/* FIXME you don't know what this does */
|
||||||
|
void open_log(void)
|
||||||
|
{
|
||||||
|
#ifdef LOGFILE
|
||||||
|
if (logf != NULL) {
|
||||||
|
rewind(logf);
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
|
logf = fopen(LOGFILE, "a");
|
||||||
|
|
||||||
|
if (logf == NULL)
|
||||||
|
{
|
||||||
|
fprintf(stderr, "Could not open %s for appending: %s\n", LOGFILE, strerror(errno));
|
||||||
|
fflush(stderr);
|
||||||
|
}
|
||||||
|
#else
|
||||||
|
logf == NULL;
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
#endif
|
||||||
|
|
||||||
/* VARARGS2 */
|
/* VARARGS2 */
|
||||||
void
|
void
|
||||||
score(int amount, int flags, int monst)
|
score(int amount, int flags, int monst)
|
||||||
|
|
@ -288,6 +314,59 @@ score(int amount, int flags, int monst)
|
||||||
fclose(outf);
|
fclose(outf);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
void log(int amount, int flags, int monst)
|
||||||
|
{
|
||||||
|
char logmessage[160], ltemp[80];
|
||||||
|
char *killer;
|
||||||
|
|
||||||
|
if (waswizard)
|
||||||
|
return;
|
||||||
|
#ifdef LOGFILE
|
||||||
|
sprintf(logmessage, "%d %d %.20s ", time(NULL), amount, whoami);
|
||||||
|
if (flags == 0) /* died */
|
||||||
|
{
|
||||||
|
strcat(logmessage, "killed by a");
|
||||||
|
killer = killname(monst);
|
||||||
|
if (*killer == 'a' || *killer == 'e' || *killer == 'i' ||
|
||||||
|
*killer == 'o' || *killer == 'u')
|
||||||
|
strcat(logmessage, "n ");
|
||||||
|
else
|
||||||
|
strcat(logmessage, " ");
|
||||||
|
strcat(logmessage, killer);
|
||||||
|
if (max_level > level)
|
||||||
|
sprintf(ltemp, " on level %d [max %d]\n", level, max_level);
|
||||||
|
else
|
||||||
|
sprintf(ltemp, " on level %d\n", level);
|
||||||
|
strcat(logmessage, ltemp);
|
||||||
|
}
|
||||||
|
else if (flags == 1) /* quit */
|
||||||
|
{
|
||||||
|
if (max_level > level)
|
||||||
|
sprintf(ltemp, "quit on level %d [max %d]\n", level, max_level);
|
||||||
|
else
|
||||||
|
sprintf(ltemp, "quit on level %d\n", level);
|
||||||
|
strcat(logmessage, ltemp);
|
||||||
|
}
|
||||||
|
else if (flags == 2) /* won */
|
||||||
|
{
|
||||||
|
sprintf(ltemp, "escaped with the Amulet found on level %d\n", max_level);
|
||||||
|
strcat(logmessage, ltemp);
|
||||||
|
}
|
||||||
|
else
|
||||||
|
return;
|
||||||
|
|
||||||
|
logf = fopen(LOGFILE, "a"); /* permissions? */
|
||||||
|
if (logf == NULL)
|
||||||
|
return;
|
||||||
|
/* and write it */
|
||||||
|
md_lockfile(logf);
|
||||||
|
fprintf(logf, "%s", logmessage);
|
||||||
|
md_unlockfile(logf);
|
||||||
|
fclose(logf);
|
||||||
|
#endif
|
||||||
|
return;
|
||||||
|
}
|
||||||
|
|
||||||
void
|
void
|
||||||
total_winner()
|
total_winner()
|
||||||
{
|
{
|
||||||
|
|
@ -394,6 +473,7 @@ total_winner()
|
||||||
}
|
}
|
||||||
mvprintw(c - 'a' + 1, 0," %5d Gold Peices ", oldpurse);
|
mvprintw(c - 'a' + 1, 0," %5d Gold Peices ", oldpurse);
|
||||||
refresh();
|
refresh();
|
||||||
|
log(purse, 2, 0);
|
||||||
score(purse, 2, 0);
|
score(purse, 2, 0);
|
||||||
exit(0);
|
exit(0);
|
||||||
}
|
}
|
||||||
|
|
|
||||||
|
|
@ -443,6 +443,7 @@ extern int inpack; /* Number of things in pack */
|
||||||
extern int jump; /* Show running as series of jumps */
|
extern int jump; /* Show running as series of jumps */
|
||||||
extern int lastscore; /* Score before this turn */
|
extern int lastscore; /* Score before this turn */
|
||||||
extern int level; /* What level rogue is on */
|
extern int level; /* What level rogue is on */
|
||||||
|
extern FILE * logf;
|
||||||
extern char lvl_mons[27];
|
extern char lvl_mons[27];
|
||||||
extern struct linked_list * lvl_obj; /* List of objects on this level */
|
extern struct linked_list * lvl_obj; /* List of objects on this level */
|
||||||
extern int max_hp; /* Player's max hit points */
|
extern int max_hp; /* Player's max hit points */
|
||||||
|
|
@ -597,6 +598,7 @@ void killed(struct linked_list *item, int pr);
|
||||||
char * killname(int monst);
|
char * killname(int monst);
|
||||||
void lengthen(void (*func)(), int xtime);
|
void lengthen(void (*func)(), int xtime);
|
||||||
void light(coord *cp);
|
void light(coord *cp);
|
||||||
|
void log(int amount, int flags, int monst);
|
||||||
void look(int wakeup);
|
void look(int wakeup);
|
||||||
void miss(char *er, char *ee);
|
void miss(char *er, char *ee);
|
||||||
void missile(int ydelta, int xdelta);
|
void missile(int ydelta, int xdelta);
|
||||||
|
|
|
||||||
Loading…
Add table
Add a link
Reference in a new issue