games@tekred.TEK.COM (07/29/88)
Submitted by: "James E. Wilson" <wilson@ji.berkeley.edu> Comp.sources.games: Volume 5, Issue 49 Archive-name: umoria2/Part15 #! /bin/sh # This is a shell archive. Remove anything before this line, then unpack # it by saving it into a file and typing "sh file". To overwrite existing # files, type "sh file -c". You can also feed this as standard input via # unshar, or by typing "sh <file", e.g.. If this archive is complete, you # will see the following message at the end: # "End of archive 15 (of 18)." # Contents: create.c files.c scrolls.c # Wrapped by billr@saab on Wed Jul 13 11:16:34 1988 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'create.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'create.c'\" else echo shar: Extracting \"'create.c'\" \(11911 characters\) sed "s/^X//" >'create.c' <<'END_OF_FILE' X#include <stdio.h> X X#include "constants.h" X#include "config.h" X#include "types.h" X#include "externs.h" X X#ifdef USG X#include <string.h> X#else X#include <strings.h> X#endif X X#ifdef sun /* correct SUN stupidity in the stdio.h file */ Xchar *sprintf(); X#endif X X#ifdef USG Xunsigned sleep(); X#endif X X#ifdef ultrix Xvoid sleep(); X#endif X X/* Generates character's stats -JWT- */ Xint get_stat() X{ X register int i; X X i = randint(4) + randint(4) + randint(4) + 5; X return(i); X} X X X/* Changes stats by given amount -JWT- */ Xbyteint change_stat(cur_stat, amount) Xbyteint cur_stat; Xint amount; X{ X register int i; X X if (amount < 0) X for (i = 0; i > amount; i--) X cur_stat = de_statp(cur_stat); X else X for (i = 0; i < amount; i++) X cur_stat = in_statp(cur_stat); X return(cur_stat); X} X X X/* generate all stats and modify for race... needed in a separate module so X looping of character selection would be allowed -RGM- */ Xvoid get_stats () X{ X register player_type *p_ptr; X register race_type *r_ptr; X X p_ptr = &py; X r_ptr = &race[p_ptr->misc.prace]; X p_ptr->stats.str = get_stat(); X p_ptr->stats.intel = get_stat(); X p_ptr->stats.wis = get_stat(); X p_ptr->stats.dex = get_stat(); X p_ptr->stats.con = get_stat(); X p_ptr->stats.chr = get_stat(); X p_ptr->stats.str = change_stat(p_ptr->stats.str, r_ptr->str_adj); X p_ptr->stats.intel = change_stat(p_ptr->stats.intel, r_ptr->int_adj); X p_ptr->stats.wis = change_stat(p_ptr->stats.wis, r_ptr->wis_adj); X p_ptr->stats.dex = change_stat(p_ptr->stats.dex, r_ptr->dex_adj); X p_ptr->stats.con = change_stat(p_ptr->stats.con, r_ptr->con_adj); X p_ptr->stats.chr = change_stat(p_ptr->stats.chr, r_ptr->chr_adj); X p_ptr->stats.cstr = p_ptr->stats.str; X p_ptr->stats.cint = p_ptr->stats.intel; X p_ptr->stats.cwis = p_ptr->stats.wis; X p_ptr->stats.cdex = p_ptr->stats.dex; X p_ptr->stats.ccon = p_ptr->stats.con; X p_ptr->stats.cchr = p_ptr->stats.chr; X p_ptr->misc.srh = r_ptr->srh; X p_ptr->misc.bth = r_ptr->bth; X p_ptr->misc.bthb = r_ptr->bthb; X p_ptr->misc.fos = r_ptr->fos; X p_ptr->misc.stl = r_ptr->stl; X p_ptr->misc.save = r_ptr->bsav; X p_ptr->misc.hitdie = r_ptr->bhitdie; X p_ptr->misc.lev = 1; X p_ptr->misc.ptodam = todam_adj(); X p_ptr->misc.ptohit = tohit_adj(); X p_ptr->misc.ptoac = 0; X p_ptr->misc.pac = toac_adj(); X p_ptr->misc.expfact = r_ptr->b_exp; X p_ptr->flags.see_infra = r_ptr->infra; X} X X X/* Allows player to select a race -JWT- */ Xint choose_race() X{ X register int j, k; X int l, m; X char s; X int exit_flag; X char tmp_str[80]; X register player_type *p_ptr; X register race_type *r_ptr; X int res; X X j = 0; X k = 0; X l = 2; X m = 21; X clear_screen(20, 0); X/* help is unimplemented */ X/* prt("Choose a race (? for Help):", 20, 2); */ X prt("Choose a race:", 20, 2); X do X { X (void) sprintf(tmp_str, "%c) %s", k+97, race[j].trace); X put_buffer(tmp_str, m, l); X k++; X l += 15; X if (l > 70) X { X l = 2; X m++; X } X j++; X } X while (j < MAX_RACES); X /* clear race string */ X py.misc.race[0] = '\0'; X move_cursor (20, 18); X exit_flag = FALSE; X do X { X inkey(&s); X j = s - 97; X if ((j < MAX_RACES) && (j >= 0)) X { X p_ptr = &py; X r_ptr = &race[j]; X p_ptr->misc.prace = j; X (void) strcpy(p_ptr->misc.race, r_ptr->trace); X get_stats(); /* We don't need the code twice. */ X exit_flag = TRUE; /* so use function get_stats -RGM- */ X res = TRUE; X put_buffer(py.misc.race, 3, 14); X } X } X while (!exit_flag); X return(res); X} X X X/* Will print the history of a character -JWT- */ Xprint_history() X{ X register int i; X X put_buffer("Character Background", 13, 27); X for(i = 0; i < 5; i++) X put_buffer(py.misc.history[i], i+14, 4); X} X X X/* Get the racial history, determines social class -RAK- */ X/* Assumptions: Each race has init history beginning at */ X/* (race-1)*3+1 */ X/* All history parts are in ascending order */ Xget_history() X{ X int hist_ptr, cur_ptr, test_roll; X register int start_pos, end_pos, cur_len; X int line_ctr, new_start, social_class; X char history_block[400]; X vtype tmp_str; X int flag; X register background_type *b_ptr; X X /* Get a block of history text */ X hist_ptr = py.misc.prace*3 + 1; X history_block[0] = '\0'; X social_class = randint(4); X cur_ptr = 0; X do X { X flag = FALSE; X do X { X if (background[cur_ptr].chart == hist_ptr) X { X test_roll = randint(100); X while (test_roll > background[cur_ptr].roll) X cur_ptr++; X b_ptr = &background[cur_ptr]; X (void) strcat(history_block, b_ptr->info); X social_class += b_ptr->bonus; X if (hist_ptr > b_ptr->next) X cur_ptr = 0; X hist_ptr = b_ptr->next; X flag = TRUE; X } X else X cur_ptr++; X } X while (!flag); X } X while (hist_ptr >= 1); X X /* Process block of history text for pretty output */ X start_pos = 0; X end_pos = strlen(history_block) - 1; X line_ctr = 0; X flag = FALSE; X while (history_block[end_pos] == ' ') X end_pos--; X do X { X while (history_block[start_pos] == ' ') X start_pos++; X cur_len = end_pos - start_pos + 1; X if (cur_len > 70) X { X cur_len = 70; X while (history_block[start_pos+cur_len-1] != ' ') X cur_len--; X new_start = start_pos + cur_len; X while (history_block[start_pos+cur_len-1] == ' ') X cur_len--; X } X else X flag = TRUE; X (void) strncpy(tmp_str, &history_block[start_pos], cur_len); X tmp_str[cur_len] = '\0'; X (void) strcpy(py.misc.history[line_ctr], tmp_str); X line_ctr++; X start_pos = new_start; X } X while (!flag); X X /* Compute social class for player */ X if (social_class > 100) X social_class = 100; X else if (social_class < 1) X social_class = 1; X py.misc.sc = social_class; X} X X X/* Gets the character's sex -JWT- */ Xint get_sex() X{ X char s; X int exit_flag; X int sex; X X py.misc.sex[0] = '\0'; X clear_screen(20, 0); X/* help is unimplemented */ X/* prt("Choose a sex (? for Help):", 20, 2); */ X prt("Choose a sex:", 20, 2); X prt("m) Male f) Female", 21, 2); X move_cursor (20, 16); X do X { X inkey(&s); X switch(s) X { X case 'f': case 'F': X (void) strcpy(py.misc.sex, "Female"); X prt(py.misc.sex, 4, 14); X exit_flag = TRUE; X sex = TRUE; X break; X case 'm': case 'M': X (void) strcpy(py.misc.sex, "Male"); X prt(py.misc.sex, 4, 14); X exit_flag = TRUE; X sex = TRUE; X break; X default: X sex = FALSE; X exit_flag = FALSE; X break; X } X } X while (!exit_flag); X return(sex); X} X X X/* Computes character's age, height, and weight -JWT- */ Xget_ahw() X{ X register int i; X X i = py.misc.prace; X py.misc.age = race[i].b_age + randint((int)race[i].m_age); X switch(py.misc.sex[0]) X { X case 'F': case 'f': X py.misc.ht = randnor((int)race[i].f_b_ht, (int)race[i].f_m_ht); X py.misc.wt = randnor((int)race[i].f_b_wt, (int)race[i].f_m_wt); X break; X case 'M': case 'm': X py.misc.ht = randnor((int)race[i].m_b_ht, (int)race[i].m_m_ht); X py.misc.wt = randnor((int)race[i].m_b_wt, (int)race[i].m_m_wt); X break; X } X py.misc.disarm = race[i].b_dis + todis_adj(); X} X X X/* Gets a character class -JWT- */ Xint get_class() X{ X register int i, j; X int k, l, m; X int cl[MAX_CLASS]; X char s; X int exit_flag; X int res; X register struct misc *m_ptr; X register player_type *p_ptr; X char tmp_str[80]; X X for (j = 0; j < MAX_CLASS; j++) X cl[j] = 0; X i = py.misc.prace; X j = 0; X k = 0; X l = 2; X m = 21; X clear_screen(20, 0); X/* help is unimplemented */ X/* prt("Choose a class (? for Help):", 20, 2); */ X prt("Choose a class:", 20, 2); X do X { X if (race[i].tclass & bit_array[j]) X { X (void) sprintf(tmp_str, "%c) %s", k+97, class[j].title); X put_buffer(tmp_str, m, l); X cl[k] = j; X l += 15; X if (l > 70) X { X l = 2; X m++; X } X k++; X } X j++; X } X while (j < MAX_CLASS); X py.misc.pclass = 0; X move_cursor (20, 19); X exit_flag = FALSE; X do X { X inkey(&s); X j = s - 97; X if ((j < k) && (j >= 0)) X { X (void) strcpy(py.misc.tclass, class[cl[j]].title); X py.misc.pclass = cl[j]; X exit_flag = TRUE; X res = TRUE; X clear_screen(20, 0); X put_buffer(py.misc.tclass, 5, 14); X X /* Adjust the stats for the class adjustment -RAK- */ X p_ptr = &py; X p_ptr->stats.str = change_stat(p_ptr->stats.str, X class[p_ptr->misc.pclass].madj_str); X p_ptr->stats.intel= change_stat(p_ptr->stats.intel, X class[p_ptr->misc.pclass].madj_int); X p_ptr->stats.wis = change_stat(p_ptr->stats.wis, X class[p_ptr->misc.pclass].madj_wis); X p_ptr->stats.dex = change_stat(p_ptr->stats.dex, X class[p_ptr->misc.pclass].madj_dex); X p_ptr->stats.con = change_stat(p_ptr->stats.con, X class[p_ptr->misc.pclass].madj_con); X p_ptr->stats.chr = change_stat(p_ptr->stats.chr, X class[p_ptr->misc.pclass].madj_chr); X p_ptr->stats.cstr = p_ptr->stats.str; X p_ptr->stats.cint = p_ptr->stats.intel; X p_ptr->stats.cwis = p_ptr->stats.wis; X p_ptr->stats.cdex = p_ptr->stats.dex; X p_ptr->stats.ccon = p_ptr->stats.con; X p_ptr->stats.cchr = p_ptr->stats.chr; X p_ptr->misc.ptodam = todam_adj(); /* Real values */ X p_ptr->misc.ptohit = tohit_adj(); X p_ptr->misc.ptoac = toac_adj(); X p_ptr->misc.pac = 0; X p_ptr->misc.dis_td = p_ptr->misc.ptodam; /* Displayed values */ X p_ptr->misc.dis_th = p_ptr->misc.ptohit; X p_ptr->misc.dis_tac= p_ptr->misc.ptoac; X p_ptr->misc.dis_ac = p_ptr->misc.pac; X X /* now set misc stats, do this after setting stats because X of con_adj() for hitpoints */ X m_ptr = &py.misc; X m_ptr->hitdie += class[m_ptr->pclass].adj_hd; X m_ptr->mhp = con_adj() + m_ptr->hitdie; X m_ptr->chp = (double)m_ptr->mhp; X m_ptr->bth += class[m_ptr->pclass].mbth; X m_ptr->bthb += class[m_ptr->pclass].mbthb; /*RAK*/ X m_ptr->srh += class[m_ptr->pclass].msrh; X m_ptr->disarm += class[m_ptr->pclass].mdis; X m_ptr->fos += class[m_ptr->pclass].mfos; X m_ptr->stl += class[m_ptr->pclass].mstl; X m_ptr->save += class[m_ptr->pclass].msav; X (void) strcat(m_ptr->title, player_title[m_ptr->pclass][0]); X m_ptr->expfact += class[m_ptr->pclass].m_exp; X X } X } X while (!exit_flag); X return(res); X} X X Xget_money() X{ X register int tmp; X register struct stats *p_ptr; X register struct misc *m_ptr; X X p_ptr = &py.stats; X tmp = p_ptr->cstr + p_ptr->cint + p_ptr->cwis + X p_ptr->cdex + p_ptr->ccon + p_ptr->cchr; X m_ptr = &py.misc; X m_ptr->au = m_ptr->sc*6 + randint(25) + 325; /* Social Class adj */ X m_ptr->au = m_ptr->au - tmp; /* Stat adj */ X m_ptr->au = m_ptr->au + p_ptr->cchr; /* Charisma adj */ X if (m_ptr->au < 80) m_ptr->au = 80; /* Minimum */ X} X X X/* ---------- M A I N for Character Creation Routine ---------- */ X/* -JWT- */ Xcreate_character() X{ X char s; X register int exit_flag = 1; X X put_character(); X (void) choose_race(); X (void) get_sex(); X X /* here we start a loop giving a player a choice of characters -RGM- */ X get_stats (); X get_history(); X get_ahw(); X put_character(); X print_history(); X put_misc1(); X put_stats(); X exit_flag = 1; X do X { X prt("Hit space to reroll or ESC to accept characteristics: ", 20, 2); X inkey(&s); X switch (s) X { X case 27: X exit_flag = 0; X break; X case ' ': X get_stats (); X get_history(); X get_ahw(); X put_character(); X print_history(); X put_misc1(); X put_stats(); X#ifdef SLOW X (void) sleep (0); X#endif X break; X default: X break; X } X } /* done with stats generation */ X while (exit_flag == 1); X X (void) get_class(); X get_money(); X put_stats(); X put_misc2(); X put_misc3(); X get_name(); X X /* This delay may be reduced, but is recommended to keep players */ X /* from continuously rolling up characters, which can be VERY */ X /* expensive CPU wise. */ X pause_exit(23, PLAYER_EXIT_PAUSE); X} X END_OF_FILE if test 11911 -ne `wc -c <'create.c'`; then echo shar: \"'create.c'\" unpacked with wrong size! fi # end of 'create.c' fi if test -f 'files.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'files.c'\" else echo shar: Extracting \"'files.c'\" \(26055 characters\) sed "s/^X//" >'files.c' <<'END_OF_FILE' X#include <stdio.h> X X#include "constants.h" X#include "config.h" X#include "types.h" X#include "externs.h" X X#ifdef USG X#include <string.h> X#include <fcntl.h> X#else X#include <strings.h> X#include <sys/file.h> X#endif X X#ifdef sun /* correct SUN stupidity in the stdio.h file */ Xchar *sprintf(); X#endif X X#if defined(ultrix) || defined(USG) Xvoid exit(); X#endif X X/* X * init_scorefile X * Open the score file while we still have the setuid privileges. Later X * when the score is being written out, you must be sure to flock the file X * so we don't have multiple people trying to write to it at the same time. X * Craig Norborg (doc) Mon Aug 10 16:41:59 EST 1987 X */ Xinit_scorefile() X{ X if (1 > (highscore_fd = open(MORIA_TOP, O_RDWR | O_CREAT, 0644))) X { X (void) fputs("Can't open score file!\n", stderr); X exit(1); X } X} X X/* Attempt to open the intro file -RAK- */ X/* This routine also checks the hours file vs. what time it is -Doc */ Xintro(finam) Xchar *finam; X{ X register int xpos, i; X vtype in_line; X FILE *file1; X register char *string; X X /* Attempt to read hours.dat. If it does not exist, */ X /* inform the user so he can tell the wizard about it */ X if ((file1 = fopen(MORIA_HOU, "r")) != NULL) X { X while (fgets(in_line, 80, file1) != NULL) X if (strlen(in_line) > 3) X { X if (!strncmp(in_line, "SUN:", 4)) X (void) strcpy(days[0], in_line); X else if (!strncmp(in_line, "MON:", 4)) X (void) strcpy(days[1], in_line); X else if (!strncmp(in_line, "TUE:", 4)) X (void) strcpy(days[2], in_line); X else if (!strncmp(in_line, "WED:", 4)) X (void) strcpy(days[3], in_line); X else if (!strncmp(in_line, "THU:", 4)) X (void) strcpy(days[4], in_line); X else if (!strncmp(in_line, "FRI:", 4)) X (void) strcpy(days[5], in_line); X else if (!strncmp(in_line, "SAT:", 4)) X (void) strcpy(days[6], in_line); X } X (void) fclose(file1); X } X else X { X (void) fprintf(stderr, "There is no hours file.\nPlease inform the wizard, %s, so he can correct this!\n", WIZARD); X exit_game(); X } X X /* Check the hours, if closed require password */ X string = index(finam, '^'); X if (string) X xpos = strlen(finam) - strlen(string); X else X xpos = -1; X if (xpos >= 0) X if (check_pswd()) X insert_str(finam, "^", ""); X if (!check_time()) X { X if (!wizard1) X { X if ((file1 = fopen(MORIA_HOU, "r")) != NULL) X { X clear_screen(0, 0); X for (i = 0; fgets(in_line, 80, file1) != NULL; i++) X prt(in_line, i, 0); X (void) fclose(file1); X } X exit_game(); X } X } X X /* Print the introduction message, news, ect... */ X if ((file1 = fopen(MORIA_MOR, "r")) != NULL) X { X clear_screen(0, 0); X for (i = 0; fgets(in_line, 80, file1) != NULL; i++) X prt(in_line, i, 0); X pause_line(23); X (void) fclose(file1); X } X} X X X/* Prints dungeon map to external file -RAK- */ Xprint_map() X{ X register int i, j, m, n; X register k, l; X register i7, i8; X char dun_line[MAX_WIDTH]; X char *dun_ptr; X vtype filename1; X char tmp_str[80]; X FILE *file1; X int page_width = OUTPAGE_WIDTH; X int page_height = OUTPAGE_HEIGHT; X X /* this allows us to strcat each character in the inner loop, X instead of using the expensive sprintf */ X prt("File name: ", 0, 0); X if (get_string(filename1, 0, 11, 64)) X { X if (strlen(filename1) == 0) X (void) strcpy(filename1, "MORIAMAP.DAT"); X if ((file1 = fopen(filename1, "w")) == NULL) X { X (void) sprintf(dun_line, "Cannot open file %s", filename1); X prt(dun_line, 0, 0); X put_qio(); X return; X } X (void) sprintf(tmp_str, "section width (default = %d char):", page_width); X prt(tmp_str, 0, 0); X (void) get_string(tmp_str, 0, strlen(tmp_str), 10); X (void) sscanf(tmp_str, "%d", &page_width); X if (page_width < 10) X page_width = 10; X X (void) sprintf(tmp_str, "section height (default = %d lines):", page_height); X prt(tmp_str, 0, 0); X (void) get_string(tmp_str, 0, strlen(tmp_str), 10); X (void) sscanf(tmp_str, "%d", &page_height); X if (page_height < 10) X page_height = 10; X X prt("Writing Moria Dungeon Map...", 0, 0); X put_qio(); X X i = 0; X i7 = 0; X do X { X j = 0; X k = i + page_height - 1; X if (k >= cur_height) X k = cur_height - 1; X i7++; X i8 = 0; X do X { X l = j + page_width - 1; X if (l >= cur_width) X l = cur_width - 1; X i8++; X (void) fprintf(file1, "%c\n", 12); X (void) fprintf(file1, "Section[%d,%d]; ", i7, i8); X (void) fprintf(file1, "Depth : %d (feet)\n\n ", X (dun_level * 50)); X for (m = j; m <= l; m++) X { X n = (m / 100); X (void) fprintf(file1, "%d", n); X } X (void) fputs("\n ", file1); X for (m = j; m <= l; m++) X { X n = (m / 10) - (m / 100) * 10; X (void) fprintf(file1, "%d", n); X } X (void) fputs("\n ", file1); X for (m = j; m <= l; m++) X { X n = m - (m / 10) * 10; X (void) fprintf(file1, "%d", n); X } X (void) fprintf(file1, "\n"); X for (m = i; m <= k; m++) X { X (void) sprintf(dun_line, "%2d ", m); X dun_ptr = &dun_line[3]; X for (n = j; n <= l; n++) X { X if (test_light(m, n)) X loc_symbol(m, n, dun_ptr++); X else X *dun_ptr++ = ' '; X } X *dun_ptr++ = '\n'; X (void) fputs(dun_line, file1); X } X j += page_width; X } X while (j < cur_width); X i += page_height; X } X while (i < cur_height); X (void) fclose(file1); X prt("Completed.", 0, 0); X } X} X X X/* Prints a list of random objects to a file. Note that -RAK- */ X/* the objects produced is a sampling of objects which */ X/* be expected to appear on that level. */ Xprint_objects() X{ X register int i; X int nobj, j, level; X vtype filename1, tmp_str; X register FILE *file1; X register treasure_type *i_ptr; X X prt("Produce objects on what level?: ", 0, 0); X level = 0; X if (get_string(tmp_str, 0, 32, 10)) X (void) sscanf(tmp_str, "%d", &level); X prt("Produce how many objects?: ", 0, 0); X nobj = 0; X if (get_string(tmp_str, 0, 27, 10)) X (void) sscanf(tmp_str, "%d", &nobj); X if ((nobj > 0) && (level > -1) && (level < 1201)) X { X if (nobj > 9999) X nobj = 9999; X prt("File name: ", 0, 0); X if (get_string(filename1, 0, 11, 64)) X { X if (strlen(filename1) == 0) X (void) strcpy(filename1, "MORIAOBJ.DAT"); X if ((file1 = fopen(filename1, "w")) != NULL) X { X (void) sprintf(tmp_str, "%d", nobj); X prt(strcat(tmp_str, " random objects being produced..."), 0, 0); X put_qio(); X (void) fprintf(file1, "*** Random Object Sampling:\n"); X (void) fprintf(file1, "*** %d objects\n", nobj); X (void) fprintf(file1, "*** For Level %d\n", level); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X popt(&j); X for (i = 0; i < nobj; i++) X { X t_list[j] = object_list[get_obj_num(level)]; X magic_treasure(j, level); X inventory[INVEN_MAX] = t_list[j]; X i_ptr = &inventory[INVEN_MAX]; X unquote(i_ptr->name); X known1(i_ptr->name); X known2(i_ptr->name); X objdes(tmp_str, INVEN_MAX, TRUE); X (void) fprintf(file1, "%s\n", tmp_str); X } X pusht(j); X (void) fclose(file1); X prt("Completed.", 0, 0); X } X else X prt("File could not be opened.", 0, 0); X } X } X} X X X/* Prints a listing of monsters -RAK- */ Xprint_monsters() X{ X register int i; X int j, xpos, attype, adesc; X register FILE *file1; X vtype out_val, filename1; X vtype attstr, attx; X dtype damstr; X register creature_type *c_ptr; X register char *string; X X prt("File name: ", 0, 0); X if (get_string(filename1, 0, 11, 64)) X { X if (strlen(filename1) == 0) X (void) strcpy(filename1, "MORIAMON.DAT"); X if ((file1 = fopen(filename1, "w")) != NULL) X { X prt("Writing Monster Dictionary...", 0, 0); X put_qio(); X for (i = 0; i < MAX_CREATURES; i++) X { X c_ptr = &c_list[i]; X /* Begin writing to file */ X (void) fprintf(file1, "--------------------------------------------\n"); X (void) strcpy(out_val, c_ptr->name); X (void) strcat(out_val, " "); X (void) fprintf(file1, "%d %s (%c)\n", i, out_val, c_ptr->cchar); X (void) fprintf(file1, " Speed ==%d Level ==%d Exp ==%d\n", X c_ptr->speed, c_ptr->level, (int)c_ptr->mexp); X (void) fprintf(file1, " AC ==%d Eye-sight ==%d HD ==%s\n", X c_ptr->ac, c_ptr->aaf, c_ptr->hd); X if (0x80000000 & c_ptr->cmove) X (void) fprintf(file1, " Creature is a ***Win Creature***\n"); X if (0x00080000 & c_ptr->cmove) X (void) fprintf(file1, " Creature Eats/kills other creatures.\n"); X if (0x0001 & c_ptr->cdefense) X (void) fprintf(file1, " Creature is a dragon.\n"); X if (0x0002 & c_ptr->cdefense) X (void) fprintf(file1, " Creature is a monster.\n"); X if (0x0004 & c_ptr->cdefense) X (void) fprintf(file1, " Creature is evil.\n"); X if (0x0008 & c_ptr->cdefense) X (void) fprintf(file1, " Creature is undead.\n"); X if (0x0010 & c_ptr->cdefense) X (void) fprintf(file1, " Creature harmed by cold.\n"); X if (0x0020 & c_ptr->cdefense) X (void) fprintf(file1, " Creature harmed by fire.\n"); X if (0x0040 & c_ptr->cdefense) X (void) fprintf(file1, " Creature harmed by poison.\n"); X if (0x0080 & c_ptr->cdefense) X (void) fprintf(file1, " Creature harmed by acid.\n"); X if (0x0100 & c_ptr->cdefense) X (void) fprintf(file1, " Creature harmed by blue light.\n"); X if (0x0200 & c_ptr->cdefense) X (void) fprintf(file1, " Creature harmed by Stone-to-Mud.\n"); X if (0x1000 & c_ptr->cdefense) X (void) fprintf(file1, " Creature cannot be charmed or slept.\n"); X if (0x2000 & c_ptr->cdefense) X (void) fprintf(file1, " Creature seen with Infra-Vision.\n"); X if (0x4000 & c_ptr->cdefense) X (void) fprintf(file1, " Creature has MAX hit points.\n"); X if (0x00010000 & c_ptr->cmove) X (void) fprintf(file1, " Creature is invisible.\n"); X if (0x00100000 & c_ptr->cmove) X (void) fprintf(file1, " Creature picks up objects.\n"); X if (0x00200000 & c_ptr->cmove) X (void) fprintf(file1, " Creature multiplies.\n"); X if (0x01000000 & c_ptr->cmove) X (void) fprintf(file1, " Carries object(s).\n"); X if (0x02000000 & c_ptr->cmove) X (void) fprintf(file1, " Carries gold, gems, etc.\n"); X if (0x04000000 & c_ptr->cmove) X (void) fprintf(file1, " Has object/gold 60%% of time.\n"); X if (0x08000000 & c_ptr->cmove) X (void) fprintf(file1, " Has object/gold 90%% of time.\n"); X if (0x10000000 & c_ptr->cmove) X (void) fprintf(file1, " Has 1d2 object(s)/gold.\n"); X if (0x20000000 & c_ptr->cmove) X (void) fprintf(file1, " Has 2d2 object(s)/gold.\n"); X if (0x40000000 & c_ptr->cmove) X (void) fprintf(file1, " Has 4d2 object(s)/gold.\n"); X /* X * Creature casts spells / Breathes Dragon X * breath... X */ X if (c_ptr->spells != 0) X { X (void) fprintf(file1, " --Spells/Dragon Breath ==\n"); X (void) fprintf(file1, " Casts spells 1 out of %d turns.\n", X (int)(0xF & c_ptr->spells)); X if (0x00000010 & c_ptr->spells) X (void) fprintf(file1, " Can teleport short.\n"); X if (0x00000020 & c_ptr->spells) X (void) fprintf(file1, " Can teleport long.\n"); X if (0x00000040 & c_ptr->spells) X (void) fprintf(file1, " Teleport player to itself.\n"); X if (0x00000080 & c_ptr->spells) X (void) fprintf(file1, " Cause light wounds.\n"); X if (0x00000100 & c_ptr->spells) X (void) fprintf(file1, " Cause serious wounds.\n"); X if (0x00000200 & c_ptr->spells) X (void) fprintf(file1, " Hold person.\n"); X if (0x00000400 & c_ptr->spells) X (void) fprintf(file1, " Cause blindness.\n"); X if (0x00000800 & c_ptr->spells) X (void) fprintf(file1, " Cause confusion.\n"); X if (0x00001000 & c_ptr->spells) X (void) fprintf(file1, " Cause fear.\n"); X if (0x00002000 & c_ptr->spells) X (void) fprintf(file1, " Summon a monster.\n"); X if (0x00004000 & c_ptr->spells) X (void) fprintf(file1, " Summon an undead.\n"); X if (0x00008000 & c_ptr->spells) X (void) fprintf(file1, " Slow person.\n"); X if (0x00010000 & c_ptr->spells) X (void) fprintf(file1, " Drains mana for healing.\n"); X if (0x00020000 & c_ptr->spells) X (void) fprintf(file1, " **Unknown spell value**\n"); X if (0x00040000 & c_ptr->spells) X (void) fprintf(file1, " **Unknown spell value**\n"); X if (0x00080000 & c_ptr->spells) X (void) fprintf(file1, " Breathes Lightning Dragon Breath.\n"); X if (0x00100000 & c_ptr->spells) X (void) fprintf(file1, " Breathes Gas Dragon Breath.\n"); X if (0x00200000 & c_ptr->spells) X (void) fprintf(file1, " Breathes Acid Dragon Breath.\n"); X if (0x00400000 & c_ptr->spells) X (void) fprintf(file1, " Breathes Frost Dragon Breath.\n"); X if (0x00800000 & c_ptr->spells) X (void) fprintf(file1, " Breathes Fire Dragon Breath.\n"); X } X /* Movement for creature */ X (void) fprintf(file1, " --Movement ==\n"); X if (0x00000001 & c_ptr->cmove) X (void) fprintf(file1, " Move only to attack.\n"); X if (0x00000002 & c_ptr->cmove) X (void) fprintf(file1, " Move and attack normally.\n"); X if (0x00000008 & c_ptr->cmove) X (void) fprintf(file1, " 20%% random movement.\n"); X if (0x00000010 & c_ptr->cmove) X (void) fprintf(file1, " 40%% random movement.\n"); X if (0x00000020 & c_ptr->cmove) X (void) fprintf(file1, " 75%% random movement.\n"); X if (0x00020000 & c_ptr->cmove) X (void) fprintf(file1, " Can open doors.\n"); X if (0x00040000 & c_ptr->cmove) X (void) fprintf(file1, " Can phase through walls.\n"); X X (void) fprintf(file1, " --Creature attacks ==\n"); X (void) strcpy(attstr, c_ptr->damage); X while (strlen(attstr) > 0) X { X string = index(attstr, '|'); X if (string) X xpos = strlen(attstr) - strlen(string); X else X xpos = -1; X if (xpos >= 0) X { X (void) strncpy(attx, attstr, xpos); X attx[xpos] = '\0'; X (void) strcpy(attstr, &attstr[xpos + 1]); X } X else X { X (void) strcpy(attx, attstr); X attstr[0] = '\0'; X } X (void) sscanf(attx, "%d%d%s", &attype, &adesc, damstr); X out_val[0] = '\0'; X switch (adesc) X { X case 1: X (void) strcpy(out_val, " Hits for "); X break; X case 2: X (void) strcpy(out_val, " Bites for "); X break; X case 3: X (void) strcpy(out_val, " Claws for "); X break; X case 4: X (void) strcpy(out_val, " Stings for "); X break; X case 5: X (void) strcpy(out_val, " Touches for "); X break; X case 6: X (void) strcpy(out_val, " Kicks for "); X break; X case 7: X (void) strcpy(out_val, " Gazes for "); X break; X case 8: X (void) strcpy(out_val, " Breathes for "); X break; X case 9: X (void) strcpy(out_val, " Spits for "); X break; X case 10: X (void) strcpy(out_val, " Wails for "); X break; X case 11: X (void) strcpy(out_val, " Embraces for "); X break; X case 12: X (void) strcpy(out_val, " Crawls on you for "); X break; X case 13: X (void) strcpy(out_val, " Shoots spores for "); X break; X case 14: X (void) strcpy(out_val, " Begs for money for "); X break; X case 15: X (void) strcpy(out_val, " Slimes you for "); X break; X case 16: X (void) strcpy(out_val, " Crushes you for "); X break; X case 17: X (void) strcpy(out_val, " Tramples you for "); X break; X case 18: X (void) strcpy(out_val, " Drools on you for "); X break; X case 19: X (void) strcpy(out_val, " Insults you for "); X break; X case 99: X (void) strcpy(out_val, " Is repelled..."); X break; X default: X (void) strcpy(out_val, " **Unknown value** "); X break; X } X switch (attype) X { X case 1: X (void) strcat(out_val, "normal damage."); X break; X case 2: X (void) strcat(out_val, "lowering strength."); X break; X case 3: X (void) strcat(out_val, "confusion."); X break; X case 4: X (void) strcat(out_val, "fear."); X break; X case 5: X (void) strcat(out_val, "fire damage."); X break; X case 6: X (void) strcat(out_val, "acid damage."); X break; X case 7: X (void) strcat(out_val, "cold damage."); X break; X case 8: X (void) strcat(out_val, "lightning damage."); X break; X case 9: X (void) strcat(out_val, "corrosion damage."); X break; X case 10: X (void) strcat(out_val, "blindness."); X break; X case 11: X (void) strcat(out_val, "paralyzation."); X break; X case 12: X (void) strcat(out_val, "stealing money."); X break; X case 13: X (void) strcat(out_val, "stealing object."); X break; X case 14: X (void) strcat(out_val, "poison damage."); X break; X case 15: X (void) strcat(out_val, "lose dexterity."); X break; X case 16: X (void) strcat(out_val, "lose constitution."); X break; X case 17: X (void) strcat(out_val, "lose intelligence."); X break; X case 18: X (void) strcat(out_val, "lose wisdom."); X break; X case 19: X (void) strcat(out_val, "lose experience."); X break; X case 20: X (void) strcat(out_val, "aggravates monsters."); X break; X case 21: X (void) strcat(out_val, "disenchants objects."); X break; X case 22: X (void) strcat(out_val, "eating food."); X break; X case 23: X (void) strcat(out_val, "eating light source."); X break; X case 24: X (void) strcat(out_val, "absorbing charges."); X break; X case 99: X (void) strcat(out_val, "blank message."); X break; X default: X (void) strcat(out_val, "**Unknown value**"); X break; X } X (void) fprintf(file1, "%s (%s)\n", out_val, damstr); X } X for (j = 0; j < 2; j++) X (void) fprintf(file1, "\n"); X } X /* End writing to file */ X (void) fclose(file1); X prt("Completed.", 0, 0); X } X } X} X X X/* Print the character to a file or device -RAK- */ Xfile_character() X{ X register int i; X int j, xbth, xbthb, xfos, xsrh, xstl, xdis, xsave, xdev; X vtype xinfra; X register FILE *file1; X vtype out_val, filename1, prt1, prt2; X stat_type out_str, out_int, out_wis, out_dex, out_con, out_chr; X register struct misc *p_ptr; X register treasure_type *i_ptr; X X prt("File name: ", 0, 0); X if (get_string(filename1, 0, 11, 64)) X { X if (strlen(filename1) == 0) X (void) strcpy(filename1, "MORIACHR.DAT"); X if ((file1 = fopen(filename1, "w")) != NULL) X { X prt("Writing character sheet...", 0, 0); X put_qio(); X (void) fprintf(file1, "%c", 12); X cnv_stat(py.stats.cstr, out_str); X cnv_stat(py.stats.cint, out_int); X cnv_stat(py.stats.cwis, out_wis); X cnv_stat(py.stats.cdex, out_dex); X cnv_stat(py.stats.ccon, out_con); X cnv_stat(py.stats.cchr, out_chr); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, " Name :%s", pad(py.misc.name, " ", 25)); X (void) fprintf(file1, " Age :%4d", (int)py.misc.age); X (void) fprintf(file1, " Strength :%s\n", out_str); X (void) fprintf(file1, " Race :%s", pad(py.misc.race, " ", 25)); X (void) fprintf(file1, " Height :%4d", (int)py.misc.ht); X (void) fprintf(file1, " Intelligence :%s\n", out_int); X (void) fprintf(file1, " Sex :%s", pad(py.misc.sex, " ", 25)); X (void) fprintf(file1, " Weight :%4d", (int)py.misc.wt); X (void) fprintf(file1, " Wisdom :%s\n", out_wis); X (void) fprintf(file1, " Class :%s", pad(py.misc.tclass, " ", 25)); X (void) fprintf(file1, " Social Class:%4d", py.misc.sc); X (void) fprintf(file1, " Dexterity :%s\n", out_dex); X (void) fprintf(file1, " Title :%s", pad(py.misc.title, " ", 25)); X (void) fprintf(file1, " "); X (void) fprintf(file1, " Constitution :%s\n", out_con); X (void) fprintf(file1, " "); X (void) fprintf(file1, " "); X (void) fprintf(file1, " Charisma :%s\n", out_chr); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X X (void) fprintf(file1, " + To Hit :%6d", py.misc.dis_th); X (void) fprintf(file1, " Level :%6d", (int)py.misc.lev); X (void) fprintf(file1, " Max Hit Points :%6d\n", py.misc.mhp); X (void) fprintf(file1, " + To Damage :%6d", py.misc.dis_td); X (void) fprintf(file1, " Experience :%6d", py.misc.exp); X (void) fprintf(file1, " Cur Hit Points :%6d\n", (int) (py.misc.chp)); X (void) fprintf(file1, " + To AC :%6d", py.misc.dis_tac); X (void) fprintf(file1, " Gold :%6d", py.misc.au); X (void) fprintf(file1, " Max Mana :%6d\n", py.misc.mana); X (void) fprintf(file1, " Total AC :%6d", py.misc.dis_ac); X (void) fprintf(file1, " "); X (void) fprintf(file1, " Cur Mana :%6d\n", (int) (py.misc.cmana)); X X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X p_ptr = &py.misc; X xbth = p_ptr->bth + p_ptr->lev * BTH_LEV_ADJ + X p_ptr->ptohit * BTH_PLUS_ADJ; X xbthb = p_ptr->bthb + p_ptr->lev * BTH_LEV_ADJ + X p_ptr->ptohit * BTH_PLUS_ADJ; X /* this results in a range from 0 to 29 */ X xfos = 40 - p_ptr->fos; X if (xfos < 0) X xfos = 0; X xsrh = p_ptr->srh + int_adj(); X /* this results in a range from 0 to 9 */ X xstl = p_ptr->stl + 1; X xdis = p_ptr->disarm + p_ptr->lev + 2 * todis_adj() + int_adj(); X xsave = p_ptr->save + p_ptr->lev + wis_adj(); X xdev = p_ptr->save + p_ptr->lev + int_adj(); X (void) sprintf(xinfra, "%d feet", py.flags.see_infra * 10); X X (void) fprintf(file1, "(Miscellaneous Abilities)\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, " Fighting : %s", pad(likert(xbth, 12), " ", 10)); X (void) fprintf(file1, " Stealth : %s", pad(likert(xstl, 1), " ", 10)); X (void) fprintf(file1, " Perception : %s\n", pad(likert(xfos, 3), " ", 10)); X (void) fprintf(file1, " Throw/Bows : %s", pad(likert(xbthb, 12), " ", 10)); X (void) fprintf(file1, " Disarming : %s", pad(likert(xdis, 8), " ", 10)); X (void) fprintf(file1, " Searching : %s\n", pad(likert(xsrh, 6), " ", 10)); X (void) fprintf(file1, " Saving Throw: %s", pad(likert(xsave, 6), " ", 10)); X (void) fprintf(file1, " Magic Device: %s", pad(likert(xdev, 6), " ", 10)); X (void) fprintf(file1, " Infra-Vision: %s\n", pad(xinfra, " ", 10)); X /* Write out the character's history */ X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "Character Background\n"); X for (i = 0; i < 5; i++) X (void) fprintf(file1, "%s\n", pad(py.misc.history[i], " ", 71)); X /* Write out the equipment list... */ X j = 0; X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, " [Character's Equipment List]\n"); X (void) fprintf(file1, "\n"); X if (equip_ctr == 0) X (void) fprintf(file1, " Character has no equipment in use.\n"); X else X for (i = 22; i < INVEN_MAX; i++) X { X i_ptr = &inventory[i]; X if (i_ptr->tval != 0) X { X switch (i) X { X case 22: X (void) strcpy(prt1, ") You are wielding : "); X break; X case 23: X (void) strcpy(prt1, ") Worn on head : "); X break; X case 24: X (void) strcpy(prt1, ") Worn around neck : "); X break; X case 25: X (void) strcpy(prt1, ") Worn on body : "); X break; X case 26: X (void) strcpy(prt1, ") Worn on shield arm : "); X break; X case 27: X (void) strcpy(prt1, ") Worn on hands : "); X break; X case 28: X (void) strcpy(prt1, ") Right ring finger : "); X break; X case 29: X (void) strcpy(prt1, ") Left ring finger : "); X break; X case 30: X (void) strcpy(prt1, ") Worn on feet : "); X break; X case 31: X (void) strcpy(prt1, ") Worn about body : "); X break; X case 32: X (void) strcpy(prt1, ") Light source is : "); X break; X case 33: X (void) strcpy(prt1, ") Secondary weapon : "); X break; X default: X (void) strcpy(prt1, ") *Unknown value* : "); X break; X } X objdes(prt2, i, TRUE); X (void) sprintf(out_val, " %c%s%s", j + 97, prt1, prt2); X (void) fprintf(file1, "%s\n", out_val); X j++; X } X } X X /* Write out the character's inventory... */ X (void) fprintf(file1, "%c", 12); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, "\n"); X (void) fprintf(file1, " [General Inventory List]\n"); X (void) fprintf(file1, "\n"); X if (inven_ctr == 0) X (void) fprintf(file1, " Character has no objects in inventory.\n"); X else X { X for (i = 0; i < inven_ctr; i++) X { X objdes(prt1, i, TRUE); X (void) sprintf(out_val, "%c) %s", i + 97, prt1); X (void) fprintf(file1, "%s\n", out_val); X } X } X (void) fprintf(file1, "%c", 12); X (void) fclose(file1); X prt("Completed.", 0, 0); X } X } X} END_OF_FILE if test 26055 -ne `wc -c <'files.c'`; then echo shar: \"'files.c'\" unpacked with wrong size! fi # end of 'files.c' fi if test -f 'scrolls.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'scrolls.c'\" else echo shar: Extracting \"'scrolls.c'\" \(11936 characters\) sed "s/^X//" >'scrolls.c' <<'END_OF_FILE' X#include <stdio.h> X X#include "constants.h" X#include "config.h" X#include "types.h" X#include "externs.h" X X#ifdef sun /* correct SUN stupidity in the stdio.h file */ Xchar *sprintf(); X#endif X Xextern int moria_flag; X X X/* Scrolls for the reading -RAK- */ Xread_scroll() X{ X unsigned int i; X int j, k, l, item_val; X int y, x; X int tmp[6]; X vtype out_val, tmp_str; X int redraw, ident, first, flag; X register treasure_type *i_ptr; X register struct misc *m_ptr; X X first = TRUE; X reset_flag = TRUE; X if (inven_ctr > 0) X { X if (find_range(70, 71, &j, &k)) X if (py.flags.blind > 0) X msg_print("You can't see to read the scroll."); X else if (no_light()) X msg_print("You have no light to read by."); X else if (py.flags.confused > 0) X { X msg_print("The text seems to swim about the page!"); X msg_print("You are too confused to read..."); X } X else X { X redraw = FALSE; X if (get_item(&item_val, "Read which scroll?", &redraw, j, k)) X { X i_ptr = &inventory[item_val]; X if (redraw) draw_cave(); X reset_flag = FALSE; X i = i_ptr->flags; X ident = FALSE; X X while (i != 0) X { X j = bit_pos(&i) + 1; X if (i_ptr->tval == 71) X j += 31; X if (first) X if ((j != 4) && (j != 25)) X { X msg_print("As you read the scroll it vanishes."); X first = FALSE; X } X X /* Scrolls... */ X switch(j) X { X case 1: X i_ptr = &inventory[INVEN_WIELD]; X if (i_ptr->tval != 0) X { X objdes(tmp_str, INVEN_WIELD, FALSE); X (void) sprintf(out_val, "Your %s glows faintly!", X tmp_str); X msg_print(out_val); X if (enchant(&i_ptr->tohit)) X { X i_ptr->flags &= 0x7FFFFFFF; X py_bonuses(blank_treasure, 0); X } X else X msg_print("The enchantment fails..."); X } X ident = TRUE; X break; X case 2: X i_ptr = &inventory[INVEN_WIELD]; X if (i_ptr->tval != 0) X { X objdes(tmp_str, INVEN_WIELD, FALSE); X (void) sprintf(out_val, "Your %s glows faintly!", X tmp_str); X msg_print(out_val); X if (enchant(&i_ptr->todam)) X { X i_ptr->flags &= 0x7FFFFFFF; X py_bonuses(blank_treasure, 0); X } X else X msg_print("The enchantment fails..."); X } X ident = TRUE; X break; X case 3: X k = 0; X l = 0; X if (inventory[INVEN_BODY].tval != 0) X tmp[k++] = INVEN_BODY; X if (inventory[INVEN_ARM].tval != 0) X tmp[k++] = INVEN_ARM; X if (inventory[INVEN_OUTER].tval != 0) X tmp[k++] = INVEN_OUTER; X if (inventory[INVEN_HANDS].tval != 0) X tmp[k++] = INVEN_HANDS; X if (inventory[INVEN_HEAD].tval != 0) X tmp[k++] = INVEN_HEAD; X /* also enchant boots */ X if (inventory[INVEN_FEET].tval != 0) X tmp[k++] = INVEN_FEET; X X if (k > 0) l = tmp[randint(k)-1]; X X if (0x80000000 & inventory[INVEN_BODY].flags) X l = INVEN_BODY; X else if (0x80000000 & inventory[INVEN_ARM].flags) X l = INVEN_ARM; X else if (0x80000000 & inventory[INVEN_OUTER].flags) X l = INVEN_OUTER; X else if (0x80000000 & inventory[INVEN_HEAD].flags) X l = INVEN_HEAD; X else if (0x80000000 & inventory[INVEN_HANDS].flags) X l = INVEN_HANDS; X else if (0x80000000 & inventory[INVEN_FEET].flags) X l = INVEN_FEET; X X if (l > 0) X { X i_ptr = &inventory[l]; X objdes(tmp_str, l, FALSE); X (void) sprintf(out_val, "Your %s glows faintly!", X tmp_str); X msg_print(out_val); X if (enchant(&i_ptr->toac)) X { X i_ptr->flags &= 0x7FFFFFFF; X py_bonuses(blank_treasure, 0); X } X else X msg_print("The enchantment fails..."); X ident = TRUE; X } X break; X case 4: X identify(inventory[item_val]); X msg_print("This is an identify scroll"); X /* make sure player sees message before ident_spell */ X msg_print(" "); X if (ident_spell()) first = FALSE; X break; X case 5: X if (remove_curse()) X { X msg_print("You feel as if someone is watching over you."); X ident = TRUE; X } X break; X case 6: X ident = light_area(char_row, char_col); X break; X case 7: X ident = FALSE; X for (k = 0; k < randint(3); k++) X { X y = char_row; X x = char_col; X ident |= summon_monster(&y, &x, FALSE); X } X break; X case 8: X teleport(10); X ident = TRUE; X break; X case 9: X teleport(100); X ident = TRUE; X break; X case 10: X dun_level += (-3) + 2*randint(2); X if (dun_level < 1) X dun_level = 1; X moria_flag = TRUE; X ident = TRUE; X break; X case 11: X msg_print("Your hands begin to glow."); X py.flags.confuse_monster = TRUE; X ident = TRUE; X break; X case 12: X ident = map_area(); X break; X case 13: X ident = sleep_monsters1(char_row, char_col); X break; X case 14: X ident = warding_glyph(); X break; X case 15: X ident = detect_treasure(); X break; X case 16: X ident = detect_object(); X break; X case 17: X ident = detect_trap(); X break; X case 18: X ident = detect_sdoor(); X break; X case 19: X msg_print("This is a mass genocide scroll."); X ident = mass_genocide(); X break; X case 20: X ident = detect_invisible(); X break; X case 21: X ident = aggravate_monster(20); X msg_print("There is a high pitched humming noise"); X break; X case 22: X ident = trap_creation(); X break; X case 23: X ident = td_destroy(); X break; X case 24: X ident = door_creation(); X break; X case 25: X identify(inventory[item_val]); X msg_print("This is a Recharge-Item scroll."); X /* make sure player see message before recharge */ X msg_print(" "); X if (recharge(60)) first = FALSE; X break; X case 26: X msg_print("This is a genocide scroll."); X /* make sure player sees message before genocide() */ X msg_print(" "); X ident = genocide(); X break; X case 27: X ident = unlight_area(char_row, char_col); X break; X case 28: X ident = protect_evil(); X break; X case 29: X ident = create_food(); X break; X case 30: X ident = dispell_creature(0x0008, 60); X break; X case 31: X msg_print("That scroll appeared to be blank."); X ident = TRUE; X break; X case 32: X i_ptr = &inventory[INVEN_WIELD]; X if (i_ptr->tval != 0) X { X objdes(tmp_str, INVEN_WIELD, FALSE); X (void) sprintf(out_val, "Your %s glows brightly!", X tmp_str); X msg_print(out_val); X flag = FALSE; X for (k = 0; k < randint(2); k++) X if (enchant(&i_ptr->tohit)) X flag = TRUE; X for (k = 0; k < randint(2); k++) X if (enchant(&i_ptr->todam)) X flag = TRUE; X if (flag) X { X i_ptr->flags &= 0x7FFFFFFF; X py_bonuses(blank_treasure, 0); X } X else X msg_print("The enchantment fails..."); X ident = TRUE; X } X break; X case 33: X i_ptr = &inventory[INVEN_WIELD]; X if (i_ptr->tval != 0) X { X inventory[INVEN_MAX] = inventory[INVEN_WIELD]; X objdes(tmp_str, INVEN_WIELD, FALSE); X (void)sprintf(out_val,"Your %s glows black, fades", X tmp_str); X msg_print(out_val); X i_ptr->tohit = -randint(5) - randint(5); X i_ptr->todam = -randint(5) - randint(5); X i_ptr->flags = 0x80000000; X py_bonuses(inventory[INVEN_MAX], -1); X ident = TRUE; X } X break; X case 34: X k = 0; X l = 0; X if (inventory[INVEN_BODY].tval != 0) X tmp[k++] = INVEN_BODY; X if (inventory[INVEN_ARM].tval != 0) X tmp[k++] = INVEN_ARM; X if (inventory[INVEN_OUTER].tval != 0) X tmp[k++] = INVEN_OUTER; X if (inventory[INVEN_HANDS].tval != 0) X tmp[k++] = INVEN_HANDS; X if (inventory[INVEN_HEAD].tval != 0) X tmp[k++] = INVEN_HEAD; X /* also enchant boots */ X if (inventory[INVEN_FEET].tval != 0) X tmp[k++] = INVEN_FEET; X X if (k > 0) l = tmp[randint(k)-1]; X X if (0x80000000 & inventory[INVEN_BODY].flags) X l = INVEN_BODY; X else if (0x80000000 & inventory[INVEN_ARM].flags) X l = INVEN_ARM; X else if (0x80000000 & inventory[INVEN_OUTER].flags) X l = INVEN_OUTER; X else if (0x80000000 & inventory[INVEN_HEAD].flags) X l = INVEN_HEAD; X else if (0x80000000 & inventory[INVEN_HANDS].flags) X l = INVEN_HANDS; X else if (0x80000000 & inventory[INVEN_FEET].flags) X l = INVEN_FEET; X X if (l > 0) X { X i_ptr = &inventory[l]; X objdes(tmp_str, l, FALSE); X (void) sprintf(out_val,"Your %s glows brightly!", X tmp_str); X msg_print(out_val); X flag = FALSE; X for (k = 0; k < randint(2) + 1; k++) X if (enchant(&i_ptr->toac)) X flag = TRUE; X if (flag) X { X i_ptr->flags &= 0x7FFFFFFF; X py_bonuses(blank_treasure, 0); X } X else X msg_print("The enchantment fails..."); X ident = TRUE; X } X break; X case 35: X if ((inventory[INVEN_BODY].tval != 0) && (randint(4) == 1)) X k = INVEN_BODY; X else if ((inventory[INVEN_ARM].tval != 0) && (randint(3) ==1)) X k = INVEN_ARM; X else if ((inventory[INVEN_OUTER].tval != 0) && (randint(3) ==1)) X k = INVEN_OUTER; X else if ((inventory[INVEN_HEAD].tval != 0) && (randint(3) ==1)) X k = INVEN_HEAD; X else if ((inventory[INVEN_HANDS].tval != 0) && (randint(3) ==1)) X k = INVEN_HANDS; X else if ((inventory[INVEN_FEET].tval != 0) && (randint(3) ==1)) X k = INVEN_FEET; X else if (inventory[INVEN_BODY].tval != 0) X k = INVEN_BODY; X else if (inventory[INVEN_ARM].tval != 0) X k = INVEN_ARM; X else if (inventory[INVEN_OUTER].tval != 0) X k = INVEN_OUTER; X else if (inventory[INVEN_HEAD].tval != 0) X k = INVEN_HEAD; X else if (inventory[INVEN_HANDS].tval != 0) X k = INVEN_HANDS; X else if (inventory[INVEN_FEET].tval != 0) X k = INVEN_FEET; X else X k = 0; X if (k > 0) X { X i_ptr = &inventory[k]; X inventory[INVEN_MAX] = inventory[k]; X objdes(tmp_str, k, FALSE); X (void)sprintf(out_val,"Your %s glows black, fades.", X tmp_str); X msg_print(out_val); X i_ptr->flags = 0x80000000; X i_ptr->toac = -randint(5) - randint(5); X py_bonuses(inventory[INVEN_MAX], -1); X ident = TRUE; X } X break; X case 36: X ident = FALSE; X for (k = 0; k < randint(3); k++) X { X y = char_row; X x = char_col; X ident |= summon_undead(&y, &x); X } X break; X case 37: X ident = bless(randint(12)+6); X break; X case 38: X ident = bless(randint(24)+12); X break; X case 39: X ident = bless(randint(48)+24); X break; X case 40: X ident = TRUE; X py.flags.word_recall = 25 + randint(30); X msg_print("The air about you becomes charged..."); X break; X case 41: X ident = destroy_area(char_row, char_col); X break; X case 42: X break; X case 43: X break; X case 44: X break; X case 45: X break; X case 46: X break; X case 47: X break; X case 48: X break; X case 49: X break; X case 50: X break; X case 51: X break; X case 52: X break; X case 53: X break; X case 54: X break; X case 55: X break; X case 56: X break; X case 57: X break; X case 58: X break; X case 59: X break; X case 60: X break; X case 61: X break; X case 62: X break; X default: X break; X } X /* End of Scrolls... */ X } X if (!reset_flag) X { X if (ident) X identify(inventory[item_val]); X if (!first) X { X desc_remain(item_val); X inven_destroy(item_val); X if (i_ptr->flags != 0) X { X m_ptr = &py.misc; X m_ptr->exp += (i_ptr->level/m_ptr->lev); X prt_experience(); X } X } X } X } X else X if (redraw) draw_cave(); X } X else X msg_print("You are not carrying any scrolls."); X } X else X msg_print("But you are not carrying anything."); X} END_OF_FILE if test 11936 -ne `wc -c <'scrolls.c'`; then echo shar: \"'scrolls.c'\" unpacked with wrong size! fi # end of 'scrolls.c' fi echo shar: End of archive 15 \(of 18\). cp /dev/null ark15isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 18 archives. rm -f ark[1-9]isdone ark[1-9][0-9]isdone else echo You still need to unpack the following archives: echo " " ${MISSING} fi ## End of shell archive. exit 0