Mercurial > hg > early-roguelike
comparison xrogue/rip.c @ 138:dd137c35c3b1
xrogue: record the result of each game in a logfile.
| author | John "Elwin" Edwards |
|---|---|
| date | Tue, 05 May 2015 11:24:02 -0400 |
| parents | ce0cf824c192 |
| children | 7faf4568c295 |
comparison
equal
deleted
inserted
replaced
| 137:443c8bd3e290 | 138:dd137c35c3b1 |
|---|---|
| 17 */ | 17 */ |
| 18 | 18 |
| 19 #define REALLIFE 1 /* Print out machine and logname */ | 19 #define REALLIFE 1 /* Print out machine and logname */ |
| 20 #define EDITSCORE 2 /* Edit the current score file */ | 20 #define EDITSCORE 2 /* Edit the current score file */ |
| 21 #define ADDSCORE 3 /* Add a new score */ | 21 #define ADDSCORE 3 /* Add a new score */ |
| 22 | |
| 23 #define LOGFILE "xrogue.log" | |
| 22 | 24 |
| 23 #include <curses.h> | 25 #include <curses.h> |
| 24 #include <time.h> | 26 #include <time.h> |
| 25 #include <signal.h> | 27 #include <signal.h> |
| 26 #include <ctype.h> | 28 #include <ctype.h> |
| 78 register struct tm *lt; | 80 register struct tm *lt; |
| 79 time_t date; | 81 time_t date; |
| 80 char buf[LINELEN]; | 82 char buf[LINELEN]; |
| 81 struct tm *localtime(); | 83 struct tm *localtime(); |
| 82 | 84 |
| 85 writelog(pstats.s_exp, KILLED, monst); | |
| 83 time(&date); | 86 time(&date); |
| 84 lt = localtime(&date); | 87 lt = localtime(&date); |
| 85 clear(); | 88 clear(); |
| 86 move(8, 0); | 89 move(8, 0); |
| 87 while (*dp) | 90 while (*dp) |
| 126 break; | 129 break; |
| 127 } | 130 } |
| 128 if (i >= DEATHNUM) | 131 if (i >= DEATHNUM) |
| 129 return ("strange death"); | 132 return ("strange death"); |
| 130 return (deaths[i].name); | 133 return (deaths[i].name); |
| 134 } | |
| 135 | |
| 136 /* Writes an entry in the log file */ | |
| 137 | |
| 138 void | |
| 139 writelog(unsigned long amount, int flags, short monst) | |
| 140 { | |
| 141 FILE *logwriter; | |
| 142 char had_quest = '0'; | |
| 143 char fate[LINELEN]; | |
| 144 struct linked_list *item; | |
| 145 struct object *obj; | |
| 146 #ifdef LOGFILE | |
| 147 if (waswizard) | |
| 148 return; | |
| 149 /* Adjustments to the score */ | |
| 150 if (level == 0 && max_level == 0) | |
| 151 amount = 0; | |
| 152 if (flags == CHICKEN) | |
| 153 amount /= 100; | |
| 154 /* Check for quest item */ | |
| 155 for (item = pack; item != NULL; item = next(item)) { | |
| 156 obj = OBJPTR(item); | |
| 157 if (obj->o_type == RELIC && obj->o_which == quest_item) | |
| 158 had_quest = '1'; | |
| 159 } | |
| 160 /* Describe what happened */ | |
| 161 if (flags == KILLED) { | |
| 162 snprintf(fate, LINELEN, "killed by %s", killname(monst)); | |
| 163 } | |
| 164 else if (flags == CHICKEN) { | |
| 165 strcpy(fate, "quit"); | |
| 166 } | |
| 167 else if (flags == WINNER) { | |
| 168 strcpy(fate, "escaped"); | |
| 169 } | |
| 170 else | |
| 171 return; | |
| 172 /* Open and write */ | |
| 173 logwriter = fopen(LOGFILE, "a"); | |
| 174 if (logwriter == NULL) | |
| 175 return; | |
| 176 fprintf(logwriter, "%d %d %s %d %s %d %d %d %c %s\n", time(NULL), amount, | |
| 177 whoami, pstats.s_lvl, char_class[char_type].name, level, max_level, | |
| 178 quest_item, had_quest, fate); | |
| 179 fclose(logwriter); | |
| 180 #endif | |
| 181 return; | |
| 131 } | 182 } |
| 132 | 183 |
| 133 /* | 184 /* |
| 134 * score -- figure score and post it. | 185 * score -- figure score and post it. |
| 135 */ | 186 */ |
| 597 mvprintw(c-'a'+1, 0, "%c) %6ld %s", c, worth, inv_name(obj, FALSE)); | 648 mvprintw(c-'a'+1, 0, "%c) %6ld %s", c, worth, inv_name(obj, FALSE)); |
| 598 purse += worth; | 649 purse += worth; |
| 599 } | 650 } |
| 600 mvprintw(c - 'a' + 1, 0," %5ld Gold Pieces ", oldpurse); | 651 mvprintw(c - 'a' + 1, 0," %5ld Gold Pieces ", oldpurse); |
| 601 refresh(); | 652 refresh(); |
| 653 writelog(pstats.s_exp + (long) purse, WINNER, '\0'); | |
| 602 score(pstats.s_exp + (long) purse, WINNER, '\0'); | 654 score(pstats.s_exp + (long) purse, WINNER, '\0'); |
| 603 exit_game(EXIT_ENDWIN); | 655 exit_game(EXIT_ENDWIN); |
| 604 } | 656 } |
| 605 | 657 |
| 606 | 658 |
