home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Usenet 1994 October
/
usenetsourcesnewsgroupsinfomagicoctober1994disk2.iso
/
games
/
volume2
/
umoria
/
part14
/
files.c
next >
Wrap
C/C++ Source or Header
|
1987-11-05
|
26KB
|
802 lines
#include <stdio.h>
#ifdef USG
#include <string.h>
#include <fcntl.h>
#else
#include <strings.h>
#include <sys/file.h>
#endif
#include "config.h"
#include "constants.h"
#include "types.h"
#include "externs.h"
#ifdef sun /* correct SUN stupidity in the stdio.h file */
char *sprintf();
#endif
#if defined(ultrix) || defined(USG)
void exit();
#endif
/*
* init_scorefile
* Open the score file while we still have the setuid privileges. Later
* when the score is being written out, you must be sure to flock the file
* so we don't have multiple people trying to write to it at the same time.
* Craig Norborg (doc) Mon Aug 10 16:41:59 EST 1987
*/
init_scorefile()
{
if (1 > (highscore_fd = open(MORIA_TOP, O_RDWR | O_CREAT, 0644)))
{
(void) fprintf(stderr, "Can't open score file!\n");
exit(1);
}
}
/* Attempt to open the intro file -RAK- */
/* This routine also checks the hours file vs. what time it is -Doc */
intro(finam)
char *finam;
{
int xpos, i;
vtype in_line;
FILE *file1;
char *string;
/* Attempt to read hours.dat. If it does not exist, */
/* inform the user so he can tell the wizard about it */
if ((file1 = fopen(MORIA_HOU, "r")) != NULL)
{
while (fgets(in_line, 80, file1) != NULL)
if (strlen(in_line) > 3)
{
if (!strncmp(in_line, "SUN:", 4))
(void) strcpy(days[0], in_line);
else if (!strncmp(in_line, "MON:", 4))
(void) strcpy(days[1], in_line);
else if (!strncmp(in_line, "TUE:", 4))
(void) strcpy(days[2], in_line);
else if (!strncmp(in_line, "WED:", 4))
(void) strcpy(days[3], in_line);
else if (!strncmp(in_line, "THU:", 4))
(void) strcpy(days[4], in_line);
else if (!strncmp(in_line, "FRI:", 4))
(void) strcpy(days[5], in_line);
else if (!strncmp(in_line, "SAT:", 4))
(void) strcpy(days[6], in_line);
}
(void) fclose(file1);
}
else
{
(void) fprintf(stderr, "There is no hours file.\nPlease inform the wizard, %s, so he can correct this!\n", WIZARD);
exit_game();
}
/* Check the hours, if closed require password */
string = index(finam, '^');
if (string)
xpos = strlen(finam) - strlen(string);
else
xpos = -1;
if (xpos >= 0)
if (check_pswd())
insert_str(finam, "^", "");
if (!check_time())
{
if (!wizard1)
{
if ((file1 = fopen(MORIA_HOU, "r")) != NULL)
{
clear_screen(0, 0);
for (i = 0; fgets(in_line, 80, file1) != NULL; i++)
prt(in_line, i, 0);
(void) fclose(file1);
}
exit_game();
}
}
/* Print the introduction message, news, ect... */
if ((file1 = fopen(MORIA_MOR, "r")) != NULL)
{
clear_screen(0, 0);
for (i = 0; fgets(in_line, 80, file1) != NULL; i++)
prt(in_line, i, 0);
pause_line(23);
(void) fclose(file1);
}
}
/* Prints dungeon map to external file -RAK- */
print_map()
{
int i, j, k, l, m, n, i7, i8;
char dun_line[MAX_WIDTH];
vtype filename1;
char tmp;
char tmp_str[80];
FILE *file1;
int page_width = OUTPAGE_WIDTH;
int page_height = OUTPAGE_HEIGHT;
prt("File name: ", 0, 0);
if (get_string(filename1, 0, 11, 64))
{
if (strlen(filename1) == 0)
(void) strcpy(filename1, "MORIAMAP.DAT");
if ((file1 = fopen(filename1, "w")) == NULL)
{
(void) sprintf(dun_line, "Cannot open file %s", filename1);
prt(dun_line, 0, 0);
put_qio();
return;
}
(void) sprintf(tmp_str, "section width (default = %d char):", page_width);
prt(tmp_str, 0, 0);
(void) get_string(tmp_str, 0, strlen(tmp_str), 10);
(void) sscanf(tmp_str, "%d", &page_width);
if (page_width < 10)
page_width = 10;
(void) sprintf(tmp_str, "section height (default = %d lines):", page_height);
prt(tmp_str, 0, 0);
(void) get_string(tmp_str, 0, strlen(tmp_str), 10);
(void) sscanf(tmp_str, "%d", &page_height);
if (page_height < 10)
page_height = 10;
prt("Writing Moria Dungeon Map...", 0, 0);
put_qio();
i = 0;
i7 = 0;
do
{
j = 0;
k = i + page_height - 1;
if (k >= cur_height)
k = cur_height - 1;
i7++;
i8 = 0;
do
{
l = j + page_width - 1;
if (l >= cur_width)
l = cur_width - 1;
i8++;
(void) fprintf(file1, "%c\n", 12);
(void) fprintf(file1, "Section[%d,%d]; ", i7, i8);
(void) fprintf(file1, "Depth : %d (feet)\n", (dun_level * 50));
(void) fprintf(file1, "\n");
(void) fprintf(file1, " ");
for (m = j; m <= l; m++)
{
n = (m / 100);
(void) fprintf(file1, "%d", n);
}
(void) fprintf(file1, "\n");
(void) fprintf(file1, " ");
for (m = j; m <= l; m++)
{
n = (m / 10) - (m / 100) * 10;
(void) fprintf(file1, "%d", n);
}
(void) fprintf(file1, "\n");
(void) fprintf(file1, " ");
for (m = j; m <= l; m++)
{
n = m - (m / 10) * 10;
(void) fprintf(file1, "%d", n);
}
(void) fprintf(file1, "\n");
for (m = i; m <= k; m++)
{
(void) sprintf(dun_line, "%2d ", m);
for (n = j; n <= l; n++)
{
if (test_light(m, n))
loc_symbol(m, n, &tmp);
else
tmp = ' ';
(void) sprintf(dun_line, "%s%c", dun_line, tmp);
}
(void) fprintf(file1, "%s\n", dun_line);
}
j += page_width;
}
while (j < cur_width);
i += page_height;
}
while (i < cur_height);
(void) fclose(file1);
prt("Completed.", 0, 0);
}
}
/* Prints a list of random objects to a file. Note that -RAK- */
/* the objects produced is a sampling of objects which */
/* be expected to appear on that level. */
print_objects()
{
int nobj, i, j, level;
vtype filename1, tmp_str;
FILE *file1;
treasure_type *i_ptr;
prt("Produce objects on what level?: ", 0, 0);
level = 0;
if (get_string(tmp_str, 0, 32, 10))
(void) sscanf(tmp_str, "%d", &level);
prt("Produce how many objects?: ", 0, 0);
nobj = 0;
if (!get_string(tmp_str, 0, 27, 10))
(void) sscanf(tmp_str, "%d", &nobj);
if ((nobj > 0) && (level > -1) && (level < 1201))
{
if (nobj > 9999)
nobj = 9999;
prt("File name: ", 0, 0);
if (get_string(filename1, 0, 11, 64))
{
if (strlen(filename1) == 0)
(void) strcpy(filename1, "MORIAOBJ.DAT");
if ((file1 = fopen(filename1, "w")) != NULL)
{
(void) sprintf(tmp_str, "%d", nobj);
prt(strcat(tmp_str, " random objects being produced..."), 0, 0);
put_qio();
(void) fprintf(file1, "*** Random Object Sampling:\n");
(void) fprintf(file1, "*** %d objects\n", nobj);
(void) fprintf(file1, "*** For Level %d\n", level);
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
popt(&j);
for (i = 0; i < nobj; i++)
{
t_list[j] = object_list[get_obj_num(level)];
magic_treasure(j, level);
inventory[INVEN_MAX] = t_list[j];
i_ptr = &inventory[INVEN_MAX];
unquote(i_ptr->name);
known1(i_ptr->name);
known2(i_ptr->name);
objdes(tmp_str, INVEN_MAX, TRUE);
(void) fprintf(file1, "%s\n", tmp_str);
}
pusht(j);
(void) fclose(file1);
prt("Completed.", 0, 0);
}
else
prt("File could not be opened.", 0, 0);
}
}
}
/* Prints a listing of monsters -RAK- */
print_monsters()
{
int i, j, xpos, attype, adesc;
FILE *file1;
vtype out_val, filename1;
vtype attstr, attx;
dtype damstr;
creature_type *c_ptr;
char *string;
prt("File name: ", 0, 0);
if (get_string(filename1, 0, 11, 64))
{
if (strlen(filename1) == 0)
(void) strcpy(filename1, "MORIAMON.DAT");
if ((file1 = fopen(filename1, "w")) != NULL)
{
prt("Writing Monster Dictionary...", 0, 0);
put_qio();
for (i = 0; i < MAX_CREATURES; i++)
{
c_ptr = &c_list[i];
/* Begin writing to file */
(void) fprintf(file1, "--------------------------------------------\n");
(void) strcpy(out_val, c_ptr->name);
(void) strcat(out_val, " ");
(void) fprintf(file1, "%d %s (%c)\n", i, out_val, c_ptr->cchar);
(void) fprintf(file1, " Speed ==%d Level ==%d Exp ==%d\n",
c_ptr->speed, c_ptr->level, (int)c_ptr->mexp);
(void) fprintf(file1, " AC ==%d Eye-sight ==%d HD ==%s\n",
c_ptr->ac, c_ptr->aaf, c_ptr->hd);
if (0x80000000 & c_ptr->cmove)
(void) fprintf(file1, " Creature is a ***Win Creature***\n");
if (0x00080000 & c_ptr->cmove)
(void) fprintf(file1, " Creature Eats/kills other creatures.\n");
if (0x0001 & c_ptr->cdefense)
(void) fprintf(file1, " Creature is a dragon.\n");
if (0x0002 & c_ptr->cdefense)
(void) fprintf(file1, " Creature is a monster.\n");
if (0x0004 & c_ptr->cdefense)
(void) fprintf(file1, " Creature is evil.\n");
if (0x0008 & c_ptr->cdefense)
(void) fprintf(file1, " Creature is undead.\n");
if (0x0010 & c_ptr->cdefense)
(void) fprintf(file1, " Creature harmed by cold.\n");
if (0x0020 & c_ptr->cdefense)
(void) fprintf(file1, " Creature harmed by fire.\n");
if (0x0040 & c_ptr->cdefense)
(void) fprintf(file1, " Creature harmed by poison.\n");
if (0x0080 & c_ptr->cdefense)
(void) fprintf(file1, " Creature harmed by acid.\n");
if (0x0100 & c_ptr->cdefense)
(void) fprintf(file1, " Creature harmed by blue light.\n");
if (0x0200 & c_ptr->cdefense)
(void) fprintf(file1, " Creature harmed by Stone-to-Mud.\n");
if (0x1000 & c_ptr->cdefense)
(void) fprintf(file1, " Creature cannot be charmed or slept.\n");
if (0x2000 & c_ptr->cdefense)
(void) fprintf(file1, " Creature seen with Infra-Vision.\n");
if (0x4000 & c_ptr->cdefense)
(void) fprintf(file1, " Creature has MAX hit points.\n");
if (0x00010000 & c_ptr->cmove)
(void) fprintf(file1, " Creature is invisible.\n");
if (0x00100000 & c_ptr->cmove)
(void) fprintf(file1, " Creature picks up objects.\n");
if (0x00200000 & c_ptr->cmove)
(void) fprintf(file1, " Creature multiplies.\n");
if (0x01000000 & c_ptr->cmove)
(void) fprintf(file1, " Carries object(s).\n");
if (0x02000000 & c_ptr->cmove)
(void) fprintf(file1, " Carries gold, gems, etc.\n");
if (0x04000000 & c_ptr->cmove)
(void) fprintf(file1, " Has object/gold 60%% of time.\n");
if (0x08000000 & c_ptr->cmove)
(void) fprintf(file1, " Has object/gold 90%% of time.\n");
if (0x10000000 & c_ptr->cmove)
(void) fprintf(file1, " Has 1d2 object(s)/gold.\n");
if (0x20000000 & c_ptr->cmove)
(void) fprintf(file1, " Has 2d2 object(s)/gold.\n");
if (0x40000000 & c_ptr->cmove)
(void) fprintf(file1, " Has 4d2 object(s)/gold.\n");
/*
* Creature casts spells / Breaths Dragon
* breath...
*/
if (c_ptr->spells != 0)
{
(void) fprintf(file1, " --Spells/Dragon Breath ==\n");
(void) fprintf(file1, " Casts spells 1 out of %d turns.\n",
(int)(0xF & c_ptr->spells));
if (0x00000010 & c_ptr->spells)
(void) fprintf(file1, " Can teleport short.\n");
if (0x00000020 & c_ptr->spells)
(void) fprintf(file1, " Can teleport long.\n");
if (0x00000040 & c_ptr->spells)
(void) fprintf(file1, " Teleport player to itself.\n");
if (0x00000080 & c_ptr->spells)
(void) fprintf(file1, " Cause light wounds.\n");
if (0x00000100 & c_ptr->spells)
(void) fprintf(file1, " Cause serious wounds.\n");
if (0x00000200 & c_ptr->spells)
(void) fprintf(file1, " Hold person.\n");
if (0x00000400 & c_ptr->spells)
(void) fprintf(file1, " Cause blindness.\n");
if (0x00000800 & c_ptr->spells)
(void) fprintf(file1, " Cause confusion.\n");
if (0x00001000 & c_ptr->spells)
(void) fprintf(file1, " Cause fear.\n");
if (0x00002000 & c_ptr->spells)
(void) fprintf(file1, " Summon a monster.\n");
if (0x00004000 & c_ptr->spells)
(void) fprintf(file1, " Summon an undead.\n");
if (0x00008000 & c_ptr->spells)
(void) fprintf(file1, " Slow person.\n");
if (0x00010000 & c_ptr->spells)
(void) fprintf(file1, " Drains mana for healing.\n");
if (0x00020000 & c_ptr->spells)
(void) fprintf(file1, " **Unknown spell value**\n");
if (0x00040000 & c_ptr->spells)
(void) fprintf(file1, " **Unknown spell value**\n");
if (0x00080000 & c_ptr->spells)
(void) fprintf(file1, " Breaths Lightning Dragon Breath.\n");
if (0x00100000 & c_ptr->spells)
(void) fprintf(file1, " Breaths Gas Dragon Breath.\n");
if (0x00200000 & c_ptr->spells)
(void) fprintf(file1, " Breaths Acid Dragon Breath.\n");
if (0x00400000 & c_ptr->spells)
(void) fprintf(file1, " Breaths Frost Dragon Breath.\n");
if (0x00800000 & c_ptr->spells)
(void) fprintf(file1, " Breaths Fire Dragon Breath.\n");
}
/* Movement for creature */
(void) fprintf(file1, " --Movement ==\n");
if (0x00000001 & c_ptr->cmove)
(void) fprintf(file1, " Move only to attack.\n");
if (0x00000002 & c_ptr->cmove)
(void) fprintf(file1, " Move and attack normally.\n");
if (0x00000008 & c_ptr->cmove)
(void) fprintf(file1, " 20%% random movement.\n");
if (0x00000010 & c_ptr->cmove)
(void) fprintf(file1, " 40%% random movement.\n");
if (0x00000020 & c_ptr->cmove)
(void) fprintf(file1, " 75%% random movement.\n");
if (0x00020000 & c_ptr->cmove)
(void) fprintf(file1, " Can open doors.\n");
if (0x00040000 & c_ptr->cmove)
(void) fprintf(file1, " Can phase through walls.\n");
(void) fprintf(file1, " --Creature attacks ==\n");
(void) strcpy(attstr, c_ptr->damage);
while (strlen(attstr) > 0)
{
string = index(attstr, '|');
if (string)
xpos = strlen(attstr) - strlen(string);
else
xpos = -1;
if (xpos >= 0)
{
(void) strncpy(attx, attstr, xpos);
attx[xpos] = '\0';
(void) strcpy(attstr, &attstr[xpos + 1]);
}
else
{
(void) strcpy(attx, attstr);
(void) strcpy(attstr, "");
}
(void) sscanf(attx, "%d%d%s", &attype, &adesc, damstr);
(void) strcpy(out_val, "");
switch (adesc)
{
case 1:
(void) strcpy(out_val, " Hits for ");
break;
case 2:
(void) strcpy(out_val, " Bites for ");
break;
case 3:
(void) strcpy(out_val, " Claws for ");
break;
case 4:
(void) strcpy(out_val, " Stings for ");
break;
case 5:
(void) strcpy(out_val, " Touches for ");
break;
case 6:
(void) strcpy(out_val, " Kicks for ");
break;
case 7:
(void) strcpy(out_val, " Gazes for ");
break;
case 8:
(void) strcpy(out_val, " Breathes for ");
break;
case 9:
(void) strcpy(out_val, " Spits for ");
break;
case 10:
(void) strcpy(out_val, " Wails for ");
break;
case 11:
(void) strcpy(out_val, " Embraces for ");
break;
case 12:
(void) strcpy(out_val, " Crawls on you for ");
break;
case 13:
(void) strcpy(out_val, " Shoots spores for ");
break;
case 14:
(void) strcpy(out_val, " Begs for money for ");
break;
case 15:
(void) strcpy(out_val, " Slimes you for ");
break;
case 16:
(void) strcpy(out_val, " Crushes you for ");
break;
case 17:
(void) strcpy(out_val, " Tramples you for ");
break;
case 18:
(void) strcpy(out_val, " Drools on you for ");
break;
case 19:
(void) strcpy(out_val, " Insults you for ");
break;
case 99:
(void) strcpy(out_val, " Is repelled...");
break;
default:
(void) strcpy(out_val, " **Unknown value** ");
break;
}
switch (attype)
{
case 1:
(void) strcat(out_val, "normal damage.");
break;
case 2:
(void) strcat(out_val, "lowering strength.");
break;
case 3:
(void) strcat(out_val, "confusion.");
break;
case 4:
(void) strcat(out_val, "fear.");
break;
case 5:
(void) strcat(out_val, "fire damage.");
break;
case 6:
(void) strcat(out_val, "acid damage.");
break;
case 7:
(void) strcat(out_val, "cold damage.");
break;
case 8:
(void) strcat(out_val, "lightning damage.");
break;
case 9:
(void) strcat(out_val, "corrosion damage.");
break;
case 10:
(void) strcat(out_val, "blindness.");
break;
case 11:
(void) strcat(out_val, "paralyzation.");
break;
case 12:
(void) strcat(out_val, "stealing money.");
break;
case 13:
(void) strcat(out_val, "stealing object.");
break;
case 14:
(void) strcat(out_val, "poison damage.");
break;
case 15:
(void) strcat(out_val, "lose dexterity.");
break;
case 16:
(void) strcat(out_val, "lose constitution.");
break;
case 17:
(void) strcat(out_val, "lose intelligence.");
break;
case 18:
(void) strcat(out_val, "lose wisdom.");
break;
case 19:
(void) strcat(out_val, "lose experience.");
break;
case 20:
(void) strcat(out_val, "aggravates monsters.");
break;
case 21:
(void) strcat(out_val, "disenchants objects.");
break;
case 22:
(void) strcat(out_val, "eating food.");
break;
case 23:
(void) strcat(out_val, "eating light source.");
break;
case 24:
(void) strcat(out_val, "absorbing charges.");
break;
case 99:
(void) strcat(out_val, "blank message.");
break;
default:
(void) strcat(out_val, "**Unknown value**");
break;
}
(void) fprintf(file1, "%s (%s)\n", out_val, damstr);
}
for (j = 0; j < 2; j++)
(void) fprintf(file1, "\n");
}
/* End writing to file */
(void) fclose(file1);
prt("Completed.", 0, 0);
}
}
}
/* Print the character to a file or device -RAK- */
file_character()
{
int i, j, xbth, xbthb, xfos, xsrh, xstl, xdis;
int xsave, xdev;
vtype xinfra;
FILE *file1;
vtype out_val, filename1, prt1, prt2;
stat_type out_str, out_int, out_wis, out_dex, out_con, out_chr;
struct misc *p_ptr;
treasure_type *i_ptr;
prt("File name: ", 0, 0);
if (get_string(filename1, 0, 11, 64))
{
if (strlen(filename1) == 0)
(void) strcpy(filename1, "MORIACHR.DAT");
if ((file1 = fopen(filename1, "w")) != NULL)
{
prt("Writing character sheet...", 0, 0);
put_qio();
(void) fprintf(file1, "%c", 12);
cnv_stat(py.stats.cstr, out_str);
cnv_stat(py.stats.cint, out_int);
cnv_stat(py.stats.cwis, out_wis);
cnv_stat(py.stats.cdex, out_dex);
cnv_stat(py.stats.ccon, out_con);
cnv_stat(py.stats.cchr, out_chr);
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, " Name :%s", pad(py.misc.name, " ", 25));
(void) fprintf(file1, " Age :%4d", (int)py.misc.age);
(void) fprintf(file1, " Strength :%s\n", out_str);
(void) fprintf(file1, " Race :%s", pad(py.misc.race, " ", 25));
(void) fprintf(file1, " Height :%4d", (int)py.misc.ht);
(void) fprintf(file1, " Intelligence :%s\n", out_int);
(void) fprintf(file1, " Sex :%s", pad(py.misc.sex, " ", 25));
(void) fprintf(file1, " Weight :%4d", (int)py.misc.wt);
(void) fprintf(file1, " Wisdom :%s\n", out_wis);
(void) fprintf(file1, " Class :%s", pad(py.misc.tclass, " ", 25));
(void) fprintf(file1, " Social Class:%4d", py.misc.sc);
(void) fprintf(file1, " Dexterity :%s\n", out_dex);
(void) fprintf(file1, " Title :%s", pad(py.misc.title, " ", 25));
(void) fprintf(file1, " ");
(void) fprintf(file1, " Constitution :%s\n", out_con);
(void) fprintf(file1, " ");
(void) fprintf(file1, " ");
(void) fprintf(file1, " Charisma :%s\n", out_chr);
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, " + To Hit :%6d", py.misc.dis_th);
(void) fprintf(file1, " Level :%6d", (int)py.misc.lev);
(void) fprintf(file1, " Max Hit Points :%6d\n", py.misc.mhp);
(void) fprintf(file1, " + To Damage :%6d", py.misc.dis_td);
(void) fprintf(file1, " Experience :%6d", py.misc.exp);
(void) fprintf(file1, " Cur Hit Points :%6d\n", (int) (py.misc.chp));
(void) fprintf(file1, " + To AC :%6d", py.misc.dis_tac);
(void) fprintf(file1, " Gold :%6d", py.misc.au);
(void) fprintf(file1, " Max Mana :%6d\n", py.misc.mana);
(void) fprintf(file1, " Total AC :%6d", py.misc.dis_ac);
(void) fprintf(file1, " ");
(void) fprintf(file1, " Cur Mana :%6d\n", (int) (py.misc.cmana));
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
p_ptr = &py.misc;
xbth = p_ptr->bth + p_ptr->lev * BTH_LEV_ADJ +
p_ptr->ptohit * BTH_PLUS_ADJ;
xbthb = p_ptr->bthb + p_ptr->lev * BTH_LEV_ADJ +
p_ptr->ptohit * BTH_PLUS_ADJ;
xfos = 27 - p_ptr->fos;
if (xfos < 0)
xfos = 0;
xsrh = p_ptr->srh + int_adj();
xstl = p_ptr->stl;
xdis = p_ptr->disarm + p_ptr->lev + 2 * todis_adj() + int_adj();
xsave = p_ptr->save + p_ptr->lev + wis_adj();
xdev = p_ptr->save + p_ptr->lev + int_adj();
(void) sprintf(xinfra, "%d feet", py.flags.see_infra * 10);
(void) fprintf(file1, "(Miscellaneous Abilities)\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, " Fighting : %s", pad(likert(xbth, 12), " ", 10));
(void) fprintf(file1, " Stealth : %s", pad(likert(xstl, 1), " ", 10));
(void) fprintf(file1, " Perception : %s\n", pad(likert(xfos, 3), " ", 10));
(void) fprintf(file1, " Throw/Bows : %s", pad(likert(xbthb, 12), " ", 10));
(void) fprintf(file1, " Disarming : %s", pad(likert(xdis, 8), " ", 10));
(void) fprintf(file1, " Searching : %s\n", pad(likert(xsrh, 6), " ", 10));
(void) fprintf(file1, " Saving Throw: %s", pad(likert(xsave, 6), " ", 10));
(void) fprintf(file1, " Magic Device: %s", pad(likert(xdev, 7), " ", 10));
(void) fprintf(file1, " Infra-Vision: %s\n", pad(xinfra, " ", 10));
/* Write out the character's history */
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, "Character Background\n");
for (i = 0; i < 5; i++)
(void) fprintf(file1, "%s\n", pad(py.misc.history[i], " ", 71));
/* Write out the equipment list... */
j = 0;
(void) fprintf(file1, " ");
(void) fprintf(file1, " ");
(void) fprintf(file1, " [Character's Equipment List]\n");
(void) fprintf(file1, "\n");
if (equip_ctr == 0)
(void) fprintf(file1, " Character has no equipment in use.\n");
else
for (i = 22; i < INVEN_MAX; i++)
{
i_ptr = &inventory[i];
if (i_ptr->tval != 0)
{
switch (i)
{
case 22:
(void) strcpy(prt1, ") You are wielding : ");
break;
case 23:
(void) strcpy(prt1, ") Worn on head : ");
break;
case 24:
(void) strcpy(prt1, ") Worn around neck : ");
break;
case 25:
(void) strcpy(prt1, ") Worn on body : ");
break;
case 26:
(void) strcpy(prt1, ") Worn on shield arm : ");
break;
case 27:
(void) strcpy(prt1, ") Worn on hands : ");
break;
case 28:
(void) strcpy(prt1, ") Right ring finger : ");
break;
case 29:
(void) strcpy(prt1, ") Left ring finger : ");
break;
case 30:
(void) strcpy(prt1, ") Worn on feet : ");
break;
case 31:
(void) strcpy(prt1, ") Worn about body : ");
break;
case 32:
(void) strcpy(prt1, ") Light source is : ");
break;
case 33:
(void) strcpy(prt1, ") Secondary weapon : ");
break;
default:
(void) strcpy(prt1, ") *Unknown value* : ");
break;
}
j++;
objdes(prt2, i, TRUE);
(void) sprintf(out_val, " %c%s%s", j + 97, prt1, prt2);
(void) fprintf(file1, "%s\n", out_val);
}
}
/* Write out the character's inventory... */
(void) fprintf(file1, "%c", 12);
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, "\n");
(void) fprintf(file1, " [General Inventory List]\n");
(void) fprintf(file1, "\n");
if (inven_ctr == 0)
(void) fprintf(file1, " Character has no objects in inventory.\n");
else
{
for (i = 0; i < inven_ctr; i++)
{
objdes(prt1, i, TRUE);
(void) sprintf(out_val, "%c) %s", i + 97, prt1);
(void) fprintf(file1, "%s\n", out_val);
}
}
(void) fprintf(file1, "%c", 12);
(void) fclose(file1);
prt("Completed.", 0, 0);
}
}
}