1/* SCCS Id: @(#)rip.c 3.4 2003/01/08 */ 2/* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */ 3/* NetHack may be freely redistributed. See license for details. */ 4 5#include "hack.h" 6 7STATIC_DCL void FDECL(center, (int, char *)); 8 9extern const char * const killed_by_prefix[]; /* from topten.c */ 10 11#if defined(TTY_GRAPHICS) || defined(X11_GRAPHICS) || defined(GEM_GRAPHICS) || defined(MSWIN_GRAPHICS) 12# define TEXT_TOMBSTONE 13#endif 14#if defined(mac) || defined(__BEOS__) || defined(WIN32_GRAPHICS) 15# ifndef TEXT_TOMBSTONE 16# define TEXT_TOMBSTONE 17# endif 18#endif 19 20#ifdef TEXT_TOMBSTONE 21 22#ifndef NH320_DEDICATION 23/* A normal tombstone for end of game display. */ 24static const char *rip_txt[] = { 25" ----------", 26" / \\", 27" / REST \\", 28" / IN \\", 29" / PEACE \\", 30" / \\", 31" | |", /* Name of player */ 32" | |", /* Amount of $ */ 33" | |", /* Type of death */ 34" | |", /* . */ 35" | |", /* . */ 36" | |", /* . */ 37" | 1001 |", /* Real year of death */ 38" *| * * * | *", 39" _________)/\\\\_//(\\/(/\\)/\\//\\/|_)_______", 400 41}; 42#define STONE_LINE_CENT 28 /* char[] element of center of stone face */ 43#else /* NH320_DEDICATION */ 44/* NetHack 3.2.x displayed a dual tombstone as a tribute to Izchak. */ 45static const char *rip_txt[] = { 46" ---------- ----------", 47" / \\ / \\", 48" / REST \\ / This \\", 49" / IN \\ / release of \\", 50" / PEACE \\ / NetHack is \\", 51" / \\ / dedicated to \\", 52" | | | the memory of |", 53" | | | |", 54" | | | Izchak Miller |", 55" | | | 1935 - 1994 |", 56" | | | |", 57" | | | Ascended |", 58" | 1001 | | |", 59" * | * * * | * * | * * * | *", 60" _____)/\\|\\__//(\\/(/\\)/\\//\\/|_)________)/|\\\\_/_/(\\/(/\\)/\\/\\/|_)____", 610 62}; 63#define STONE_LINE_CENT 19 /* char[] element of center of stone face */ 64#endif /* NH320_DEDICATION */ 65#define STONE_LINE_LEN 16 /* # chars that fit on one line 66 * (note 1 ' ' border) 67 */ 68#define NAME_LINE 6 /* *char[] line # for player name */ 69#define GOLD_LINE 7 /* *char[] line # for amount of gold */ 70#define DEATH_LINE 8 /* *char[] line # for death description */ 71#define YEAR_LINE 12 /* *char[] line # for year */ 72 73static char **rip; 74 75STATIC_OVL void 76center(line, text) 77int line; 78char *text; 79{ 80 register char *ip,*op; 81 ip = text; 82 op = &rip[line][STONE_LINE_CENT - ((strlen(text)+1)>>1)]; 83 while(*ip) *op++ = *ip++; 84} 85 86 87void 88genl_outrip(tmpwin, how) 89winid tmpwin; 90int how; 91{ 92 register char **dp; 93 register char *dpx; 94 char buf[BUFSZ]; 95 register int x; 96 int line; 97 98 rip = dp = (char **) alloc(sizeof(rip_txt)); 99 for (x = 0; rip_txt[x]; x++) { 100 dp[x] = (char *) alloc((unsigned int)(strlen(rip_txt[x]) + 1)); 101 Strcpy(dp[x], rip_txt[x]); 102 } 103 dp[x] = (char *)0; 104 105 /* Put name on stone */ 106 Sprintf(buf, "%s", plname); 107 buf[STONE_LINE_LEN] = 0; 108 center(NAME_LINE, buf); 109 110 /* Put $ on stone */ 111#ifndef GOLDOBJ 112 Sprintf(buf, "%ld Au", u.ugold); 113#else 114 Sprintf(buf, "%ld Au", done_money); 115#endif 116 buf[STONE_LINE_LEN] = 0; /* It could be a *lot* of gold :-) */ 117 center(GOLD_LINE, buf); 118 119 /* Put together death description */ 120 switch (killer_format) { 121 default: impossible("bad killer format?"); 122 case KILLED_BY_AN: 123 Strcpy(buf, killed_by_prefix[how]); 124 Strcat(buf, an(killer)); 125 break; 126 case KILLED_BY: 127 Strcpy(buf, killed_by_prefix[how]); 128 Strcat(buf, killer); 129 break; 130 case NO_KILLER_PREFIX: 131 Strcpy(buf, killer); 132 break; 133 } 134 135 /* Put death type on stone */ 136 for (line=DEATH_LINE, dpx = buf; line<YEAR_LINE; line++) { 137 register int i,i0; 138 char tmpchar; 139 140 if ( (i0=strlen(dpx)) > STONE_LINE_LEN) { 141 for(i = STONE_LINE_LEN; 142 ((i0 > STONE_LINE_LEN) && i); i--) 143 if(dpx[i] == ' ') i0 = i; 144 if(!i) i0 = STONE_LINE_LEN; 145 } 146 tmpchar = dpx[i0]; 147 dpx[i0] = 0; 148 center(line, dpx); 149 if (tmpchar != ' ') { 150 dpx[i0] = tmpchar; 151 dpx= &dpx[i0]; 152 } else dpx= &dpx[i0+1]; 153 } 154 155 /* Put year on stone */ 156 Sprintf(buf, "%4d", getyear()); 157 center(YEAR_LINE, buf); 158 159 putstr(tmpwin, 0, ""); 160 for(; *dp; dp++) 161 putstr(tmpwin, 0, *dp); 162 163 putstr(tmpwin, 0, ""); 164 putstr(tmpwin, 0, ""); 165 166 for (x = 0; rip_txt[x]; x++) { 167 free((genericptr_t)rip[x]); 168 } 169 free((genericptr_t)rip); 170 rip = 0; 171} 172 173#endif /* TEXT_TOMBSTONE */ 174 175/*rip.c*/ 176