billr@saab.CNA.TEK.COM (Bill Randle) (06/06/90)
Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu> Posting-number: Volume 10, Issue 25 Archive-name: NetHack3/Patch8g Patch-To: NetHack3: Volume 7, Issue 56-93 #! /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 7 (of 24)." # Contents: patch8.06 vms/oldcrtl.c # Wrapped by billr@saab on Mon Jun 4 15:27:17 1990 PATH=/bin:/usr/bin:/usr/ucb ; export PATH if test -f 'patch8.06' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'patch8.06'\" else echo shar: Extracting \"'patch8.06'\" \(51445 characters\) sed "s/^X//" >'patch8.06' <<'END_OF_FILE' X*** src/Old/pager.c Sun Jun 3 14:01:35 1990 X--- src/pager.c Thu May 31 22:11:29 1990 X*************** X*** 26,40 **** X #define SEEK_SET 0 X #endif X X #ifndef OVLB X! OSTATIC char hc; X #else /* OVLB */ X! XSTATIC char hc = 0; X! #endif /* OVLB */ X X static void FDECL(page_more, (FILE *,int)); X! OSTATIC boolean FDECL(clear_help, (CHAR_P)); X! OSTATIC boolean FDECL(valid_help, (CHAR_P)); X static boolean FDECL(pmatch,(const char *,const char *)); X static boolean FDECL(outspec,(const char *,int)); X static const char *FDECL(lookat,(int,int,UCHAR_P)); X--- 26,41 ---- X #define SEEK_SET 0 X #endif X X+ STATIC_DCL boolean FDECL(clear_help, (CHAR_P)); X+ STATIC_DCL boolean FDECL(valid_help, (CHAR_P)); X+ X #ifndef OVLB X! STATIC_DCL char hc; X #else /* OVLB */ X! STATIC_OVL char NEARDATA hc = 0; X X static void FDECL(page_more, (FILE *,int)); X! static boolean FDECL(is_swallow_sym, (UCHAR_P)); X static boolean FDECL(pmatch,(const char *,const char *)); X static boolean FDECL(outspec,(const char *,int)); X static const char *FDECL(lookat,(int,int,UCHAR_P)); X*************** X*** 43,50 **** X #endif X static void NDECL(help_menu); X X- #ifdef OVLB X- X /* X * simple pattern matcher: '*' matches 0 or more characters X * returns TRUE if strng matches patrn X--- 44,49 ---- X*************** X*** 74,79 **** X--- 73,89 ---- X } X X /* X+ * returns "true" for characters that could represent a monster's stomach X+ */ X+ X+ static boolean X+ is_swallow_sym(c) X+ uchar c; X+ { X+ return (index(" /-\\|", (char)c) != 0); X+ } X+ X+ /* X * print out another possibility for dowhatis. "new" is the possible new X * string; "out_flag" indicates whether we really want output, and if X * so what kind of output: 0 == no output, 1 == "(or %s)" output. X*************** X*** 85,91 **** X const char *new; X int out_flag; X { X! static char old[50]; X X if (!strcmp(old, new)) X return FALSE; /* don't print the same thing twice */ X--- 95,101 ---- X const char *new; X int out_flag; X { X! static char NEARDATA old[50]; X X if (!strcmp(old, new)) X return FALSE; /* don't print the same thing twice */ X*************** X*** 110,116 **** X register struct monst *mtmp; X register struct obj *otmp; X struct trap *trap; X! static char answer[50]; X register char *s, *t; X uchar typ; X X--- 120,126 ---- X register struct monst *mtmp; X register struct obj *otmp; X struct trap *trap; X! static char NEARDATA answer[50]; X register char *s, *t; X uchar typ; X X*************** X*** 133,138 **** X--- 143,150 ---- X u.mtimedone ? mons[u.umonnum].mname : X #endif X pl_character, plname); X+ } else if (u.uswallow && is_swallow_sym(ch)) { X+ Sprintf(answer, "interior of %s", defmonnam(u.ustuck)); X } else if (mtmp && !mtmp->mimic) X Sprintf(answer, "%s%s", X mtmp->mtame ? "tame " : X*************** X*** 152,158 **** X if (mtmp->mappearance == STRANGE_OBJECT) X Strcpy(answer, "strange object"); X else { X! otmp = mksobj((int) mtmp->mappearance,FALSE ); X Strcpy(answer, distant_name(otmp, xname)); X free((genericptr_t) otmp); X } X--- 164,175 ---- X if (mtmp->mappearance == STRANGE_OBJECT) X Strcpy(answer, "strange object"); X else { X! int oindx = mtmp->mappearance; X! otmp = mksobj(oindx,FALSE ); X! if(oindx == STATUE || oindx == FIGURINE) X! otmp->corpsenm = PM_KOBOLD; X! else if (oindx == DRAGON_SCALE_MAIL) X! otmp->corpsenm = PM_RED_DRAGON; X Strcpy(answer, distant_name(otmp, xname)); X free((genericptr_t) otmp); X } X*************** X*** 263,268 **** X--- 280,286 ---- X boolean oldverb = flags.verbose; X boolean found_in_file = FALSE, need_to_print = FALSE; X int found = 0; X+ static const char *mon_interior = "the interior of a monster"; X X #ifdef OS2_CODEVIEW X char tmp[PATHLEN]; X*************** X*** 321,329 **** X return 0; X } X flags.verbose = FALSE; X! q = levl[cc.x][cc.y].scrsym; X! if (!q || (!levl[cc.x][cc.y].seen && !MON_AT(cc.x,cc.y))) X! q = ' '; X } X X if (!q) X--- 339,365 ---- X return 0; X } X flags.verbose = FALSE; X! if (!u.uswallow) { X! q = levl[cc.x][cc.y].scrsym; X! if (!q || (!levl[cc.x][cc.y].seen && !MON_AT(cc.x,cc.y))) X! q = ' '; X! } X! else if (cc.x == u.ux && cc.y == u.uy) X! q = u.usym; X! else { X! i = (u.uy - cc.y)+1; X! if (i < 0 || i > 2) X! q = ' '; X! else { X! firstmatch = (i == 0) ? "/-\\" : X! (i == 1) ? "| |" : "\\-/"; X! i = (u.ux - cc.x)+1; X! if (i < 0 || i > 2) X! q = ' '; X! else X! q = firstmatch[i]; X! } X! } X } X X if (!q) X*************** X*** 337,343 **** X /* X * if the user just typed one letter, or we're identifying from the X * screen, then we have to check all the possibilities and print them X! * out for him/her X */ X X /* Check for monsters */ X--- 373,379 ---- X /* X * if the user just typed one letter, or we're identifying from the X * screen, then we have to check all the possibilities and print them X! * out for him/her. X */ X X /* Check for monsters */ X*************** X*** 351,356 **** X--- 387,406 ---- X } X } X X+ /* Special case: if identifying from the screen, and X+ * we're swallowed, and looking at something other than our own symbol, X+ * then just say "the interior of a monster". X+ */ X+ if (u.uswallow && is_swallow_sym(q)) { X+ if (!found) { X+ pline("%c %s", q, mon_interior); X+ (void)outspec(firstmatch=mon_interior, 0); X+ } X+ else X+ (void)outspec(mon_interior, 1); X+ found++; need_to_print = TRUE; X+ } X+ X /* Now check for objects */ X for (i = 0; objsyms[i]; i++) { X if (q == objsyms[i]) { X*************** X*** 402,407 **** X--- 452,459 ---- X X checkfile: X X+ if (!strncmp(inp, "interior of ", 12)) X+ inp += 12; X if (!strncmp(inp, "a ", 2)) X inp += 2; X else if (!strncmp(inp, "an ", 3)) X*************** X*** 415,434 **** X if (!strncmp(inp, "invisible ", 10)) X inp += 10; X X! if ((!q || found) && *inp) { X /* adjust the input to remove "named " and convert to lower case */ X for (ep = inp; *ep; ) { X if ((!strncmp(ep, " named ", 7) && (alt = ep + 7)) || X !strncmp(ep, " called ", 8)) X *ep = 0; X! else X! (*ep = tolower(*ep)), ep++; X } X X /* X * If the object is named, then the name is the alternate search string; X * otherwise, the result of makesingular() applied to the name is. This X! * isn't strictly optimal, but named objects of interest to the user should X * will usually be found under their name, rather than under their X * object type, so looking for a singular form is pointless. X */ X--- 467,495 ---- X if (!strncmp(inp, "invisible ", 10)) X inp += 10; X X! /* X! * look in the file for more info if: X! * the user typed in the whole name (!q) X! * OR we've found a possible match with the character q (found) and X! * flags.help is TRUE X! * and, of course, the name to look for must be non-empty. X! */ X! if ((!q || (found && flags.help)) && *inp) { X /* adjust the input to remove "named " and convert to lower case */ X for (ep = inp; *ep; ) { X if ((!strncmp(ep, " named ", 7) && (alt = ep + 7)) || X !strncmp(ep, " called ", 8)) X *ep = 0; X! else { X! if(isupper(*ep)) *ep = tolower(*ep); X! ep++; X! } X } X X /* X * If the object is named, then the name is the alternate search string; X * otherwise, the result of makesingular() applied to the name is. This X! * isn't strictly optimal, but named objects of interest to the user X * will usually be found under their name, rather than under their X * object type, so looking for a singular form is pointless. X */ X*************** X*** 436,442 **** X if (!alt) X alt = makesingular(inp); X else X! for (ep = alt; *ep; ep++) *ep = tolower(*ep); X X while(fgets(buf,BUFSZ,fp)) { X if(*buf != '\t') { X--- 497,504 ---- X if (!alt) X alt = makesingular(inp); X else X! for (ep = alt; *ep; ep++) X! if(isupper(*ep)) *ep = tolower(*ep); X X while(fgets(buf,BUFSZ,fp)) { X if(*buf != '\t') { X*************** X*** 555,561 **** X } X X /* make the paging of a file interruptible */ X! static int got_intrup; X X #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS) X static int X--- 617,623 ---- X } X X /* make the paging of a file interruptible */ X! static volatile int NEARDATA got_intrup; X X #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS) X static int X*************** X*** 572,584 **** X FILE *fp; X int strip; /* nr of chars to be stripped from each line (0 or 1) */ X { X- register char *bufr; X- #if !defined(MSDOS) && !defined(MINIMAL_TERM) X- register char *ep; X- #endif X- #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS) X- int (*prevsig)() = (int (*)())signal(SIGINT, (SIG_RET_TYPE) intruph); X- #endif X #ifdef MACOS X short tmpflags; X X--- 634,639 ---- X*************** X*** 590,595 **** X--- 645,657 ---- X } X macflags |= (tmpflags & fDoUpdate); X #else X+ register char *bufr; X+ #if !defined(MSDOS) && !defined(MINIMAL_TERM) X+ register char *ep; X+ #endif X+ #if !defined(MSDOS) && !defined(TOS) X+ int (*prevsig)() = (int (*)())signal(SIGINT, (SIG_RET_TYPE) intruph); X+ #endif X #if defined(MSDOS) || defined(MINIMAL_TERM) X /* There seems to be a bug in ANSI.SYS The first tab character X * after a clear screen sequence is not expanded correctly. Thus X*************** X*** 603,608 **** X--- 665,672 ---- X while (fgets(buf, BUFSIZ, fp) && (!strip || *buf == '\t')){ X bufp = buf; X bufrp = bufr; X+ if (strip && *bufp && *bufp != '\n') X+ *bufrp++ = *bufp++; X while (*bufp && *bufp != '\n') { X if (*bufp == '\t') { X spaces = tabstop - (bufrp - bufr) % tabstop; X*************** X*** 631,641 **** X ret: X free((genericptr_t) bufr); X (void) fclose(fp); X! #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS) X (void) signal(SIGINT, (SIG_RET_TYPE) prevsig); X got_intrup = 0; X #endif X! #endif X } X X #endif /* OVLB */ X--- 695,705 ---- X ret: X free((genericptr_t) bufr); X (void) fclose(fp); X! #if !defined(MSDOS) && !defined(TOS) X (void) signal(SIGINT, (SIG_RET_TYPE) prevsig); X got_intrup = 0; X #endif X! #endif /* MACOS */ X } X X #endif /* OVLB */ X*************** X*** 644,654 **** X X #ifndef OVLB X X! OSTATIC boolean whole_screen; X X #else /* OVLB */ X X! XSTATIC boolean whole_screen = TRUE; X X void X set_whole_screen() { /* called in termcap as soon as LI is known */ X--- 708,718 ---- X X #ifndef OVLB X X! STATIC_DCL boolean whole_screen; X X #else /* OVLB */ X X! STATIC_OVL boolean NEARDATA whole_screen = TRUE; X X void X set_whole_screen() { /* called in termcap as soon as LI is known */ X*************** X*** 674,680 **** X #ifdef LINT /* lint may handle static decl poorly -- static boolean so; */ X boolean so; X #else X! static boolean so; X #endif X if(mode == 0) { X if(!whole_screen) { X--- 738,744 ---- X #ifdef LINT /* lint may handle static decl poorly -- static boolean so; */ X boolean so; X #else X! static boolean NEARDATA so; X #endif X if(mode == 0) { X if(!whole_screen) { X*************** X*** 688,700 **** X so = flags.standout; X flags.standout = 1; X } else { X- #ifdef MACOS X- macflags |= fFullScrKluge; X- #endif X if(mode == 1) { X- #ifdef MACOS X- macflags |= fCornScrKluge; X- #endif X curs(1, LI); X more(); X } X--- 752,758 ---- X*************** X*** 705,713 **** X curs(1, ROWNO+4); X cl_eos(); X } X- #ifdef MACOS X- macflags &= ~fScreenKluges; X- #endif X } X } X X--- 763,768 ---- X*************** X*** 718,723 **** X--- 773,782 ---- X page_line(s) /* returns 1 if we should quit */ X register const char *s; X { X+ #ifdef CLIPPING X+ /* we assume here that no data files have more than 80 chars/line */ X+ static char tmp[81], *t; X+ #endif X if(cury == LI-1) { X if(!*s) X return(0); /* suppress blank lines at top */ X*************** X*** 735,740 **** X--- 794,821 ---- X cl_eos(); X } X } X+ #ifdef CLIPPING X+ /* if lines are too long for the screen, first try stripping leading blanks */ X+ if (strlen(s) >= CO) { X+ while (*s == ' ' || *s == '\t') s++; X+ } X+ X+ /* if it's still too long, try compressing blanks */ X+ if (strlen(s) >= CO) { X+ t = tmp; X+ while ( (*t = *s) != 0) { X+ if (*t == ' ') { X+ while (*s == ' ') X+ s++; X+ } X+ else X+ s++; X+ t++; X+ } X+ s = tmp; X+ } X+ #endif /* CLIPPING */ X+ X #ifdef TERMINFO X xputs(s); xputc('\n'); X #else X*************** X*** 767,775 **** X static struct line { X struct line *next_line; X char *line_text; X! } *texthead, *texttail; X! static int maxlen; X! static int linect; X register struct line *tl; X register boolean hmenu = FALSE; X X--- 848,856 ---- X static struct line { X struct line *next_line; X char *line_text; X! } NEARDATA *texthead, NEARDATA *texttail; X! static int NEARDATA maxlen; X! static int NEARDATA linect; X register struct line *tl; X register boolean hmenu = FALSE; X X*************** X*** 817,833 **** X else X if(mode == 2) { X register int curline, lth; X- #ifdef MACOS X- short tmpflags; X- extern struct line *mactexthead; X- extern int macmaxlen, maclinect; X- X- tmpflags = macflags; X- macflags |= fDoUpdate | fDisplayKluge; X- mactexthead = texthead; X- macmaxlen = maxlen; X- maclinect = linect; X- #endif X X if(flags.toplin == 1) more(); /* ab@unido */ X remember_topl(); X--- 898,903 ---- X*************** X*** 862,870 **** X #endif X cl_end (); X if (!hmenu) { X- #ifdef MACOS X- macflags |= fCornScrKluge; X- #endif X cmore (text); X } X if (!hmenu || clear_help(hc)) { X--- 932,937 ---- X*************** X*** 872,886 **** X cl_end (); X docorner (lth, curline-1); X } X #ifdef MACOS X! mactexthead = NULL; X! macflags |= (tmpflags & (fDoUpdate | fDisplayKluge)); X #endif X- } else { /* feed to pager */ X set_pager(0); X for (tl = texthead; tl; tl = tl->next_line) { X if (page_line (tl->line_text)) { X set_pager(2); X while(tl = texthead) { X texthead = tl->next_line; X free((genericptr_t) tl); X--- 939,958 ---- X cl_end (); X docorner (lth, curline-1); X } X+ } else { /* feed to pager */ X #ifdef MACOS X! short tmpflags; X! X! tmpflags = macflags; X! macflags &= ~fDoNonKeyEvt; X #endif X set_pager(0); X for (tl = texthead; tl; tl = tl->next_line) { X if (page_line (tl->line_text)) { X set_pager(2); X+ #ifdef MACOS X+ macflags = tmpflags; X+ #endif X while(tl = texthead) { X texthead = tl->next_line; X free((genericptr_t) tl); X*************** X*** 893,898 **** X--- 965,973 ---- X set_pager(2); X } else X set_pager(1); X+ #ifdef MACOS X+ macflags = tmpflags; X+ #endif X } X } X X*************** X*** 966,972 **** X cornline(-1,""); X } X X! XSTATIC boolean X clear_help(c) X char c; X { X--- 1041,1047 ---- X cornline(-1,""); X } X X! STATIC_OVL boolean X clear_help(c) X char c; X { X*************** X*** 1004,1010 **** X ); X } X X! XSTATIC boolean X valid_help(c) X char c; X { X--- 1079,1085 ---- X ); X } X X! STATIC_OVL boolean X valid_help(c) X char c; X { X*** src/Old/pickup.c Sun Jun 3 14:02:35 1990 X--- src/pickup.c Sun May 27 17:58:15 1990 X*************** X*** 7,26 **** X */ X X #include "hack.h" X! #ifndef OVERLAY X! static int FDECL(in_container,(struct obj *)); X! static int FDECL(ck_container,(struct obj *)); X! static int FDECL(ck_bag,(struct obj *)); X! static int FDECL(out_container,(struct obj *)); X! #else X! int FDECL(in_container,(struct obj *)); X! int FDECL(ck_container,(struct obj *)); X! int FDECL(ck_bag,(struct obj *)); X! int FDECL(out_container,(struct obj *)); X! #endif X void FDECL(explode_bag,(struct obj *)); X X! #ifdef OVLB X X static const char nearloadmsg[] = "have a little trouble lifting"; X X--- 7,21 ---- X */ X X #include "hack.h" X! STATIC_PTR int FDECL(in_container,(struct obj *)); X! STATIC_PTR int FDECL(ck_container,(struct obj *)); X! STATIC_PTR int FDECL(ck_bag,(struct obj *)); X! STATIC_PTR int FDECL(out_container,(struct obj *)); X void FDECL(explode_bag,(struct obj *)); X X! #define DELTA_CWT(cont) ((cont)->cursed?(obj->owt*2):(obj->owt/((cont)->blessed?4:2)) + 1) X! X! #ifdef OVL0 X X static const char nearloadmsg[] = "have a little trouble lifting"; X X*************** X*** 257,265 **** X if(wt > 0) { X if(obj->quan > 1) { X /* see how many we can lift */ X! int savequan = obj->quan; X int iw = inv_weight(); X! int qq; X for(qq = 1; qq < savequan; qq++){ X obj->quan = qq; X if(iw + weight(obj) > 0) X--- 252,260 ---- X if(wt > 0) { X if(obj->quan > 1) { X /* see how many we can lift */ X! unsigned savequan = obj->quan; X int iw = inv_weight(); X! unsigned qq; X for(qq = 1; qq < savequan; qq++){ X obj->quan = qq; X if(iw + weight(obj) > 0) X*************** X*** 274,280 **** X You("can only carry %s of the %s lying here.", X (qq == 1) ? "one" : "some", X doname(obj)); X! obj3 = splitobj(obj, qq); X if(obj3->otyp == SCR_SCARE_MONSTER) X if(obj3->spe) obj->spe = 0; X goto lift_some; X--- 269,275 ---- X You("can only carry %s of the %s lying here.", X (qq == 1) ? "one" : "some", X doname(obj)); X! obj3 = splitobj(obj, (int)qq); X if(obj3->otyp == SCR_SCARE_MONSTER) X if(obj3->spe) obj->spe = 0; X goto lift_some; X*************** X*** 296,303 **** X if(obj->spe) obj->spe = 0; X break; X } X! { int pickquan = obj->quan; X! int mergquan; X X obj = pick_obj(obj); X if(wt > -5) You(nearloadmsg); X--- 291,298 ---- X if(obj->spe) obj->spe = 0; X break; X } X! { unsigned pickquan = obj->quan; X! unsigned mergquan; X X obj = pick_obj(obj); X if(wt > -5) You(nearloadmsg); X*************** X*** 324,329 **** X--- 319,327 ---- X return(addinv(otmp)); /* might merge it with other objects */ X } X X+ #endif /* OVL1 */ X+ #ifdef OVLB X+ X int X doloot() { /* loot a container on the floor. */ X X*************** X*** 367,379 **** X } X X static X! struct obj *current_container; /* a local variable of use_container, to be X used by its local procedures in/ck_container */ X #define Icebox (current_container->otyp == ICE_BOX) X int baggone; /* used in askchain so bag isn't used after explosion */ X X #endif /* OVLB */ X! #ifdef OVL0 X X void X inc_cwt(cobj, obj) X--- 365,377 ---- X } X X static X! struct obj NEARDATA *current_container; /* a local variable of use_container, to be X used by its local procedures in/ck_container */ X #define Icebox (current_container->otyp == ICE_BOX) X int baggone; /* used in askchain so bag isn't used after explosion */ X X #endif /* OVLB */ X! #ifdef OVL1 X X void X inc_cwt(cobj, obj) X*************** X*** 380,396 **** X register struct obj *cobj, *obj; X { X if (cobj->otyp == BAG_OF_HOLDING) X! cobj->owt += (cobj->cursed?(obj->owt*2):(obj->owt/(cobj->blessed?4:2)) + 1); X else cobj->owt += obj->owt; X } X X! #endif /* OVL0 */ X #ifdef OVLB X X! #ifndef OVERLAY X! static X! #endif X! int X in_container(obj) X register struct obj *obj; X { X--- 378,391 ---- X register struct obj *cobj, *obj; X { X if (cobj->otyp == BAG_OF_HOLDING) X! cobj->owt += DELTA_CWT(cobj); X else cobj->owt += obj->owt; X } X X! #endif /* OVL1 */ X #ifdef OVLB X X! STATIC_PTR int X in_container(obj) X register struct obj *obj; X { X*************** X*** 466,475 **** X return(1); X } X X! #ifndef OVERLAY X! static X! #endif X! int X ck_container(obj) X register struct obj *obj; X { X--- 461,467 ---- X return(1); X } X X! STATIC_PTR int X ck_container(obj) X register struct obj *obj; X { X*************** X*** 479,488 **** X /* ck_bag() needs a formal argument to make the overlay/prototype mechanism X * work right */ X /*ARGSUSED*/ X! #ifndef OVERLAY X! static X! #endif X! int X ck_bag(obj) X struct obj *obj; X { X--- 471,477 ---- X /* ck_bag() needs a formal argument to make the overlay/prototype mechanism X * work right */ X /*ARGSUSED*/ X! STATIC_PTR int X ck_bag(obj) X struct obj *obj; X { X*************** X*** 489,502 **** X return(!baggone); X } X X! #ifndef OVERLAY X! static X! #endif X! int X out_container(obj) X register struct obj *obj; X { X! register struct obj *otmp; X register boolean near_capacity = (inv_weight() > -5); X X if(inv_cnt() >= 52) { X--- 478,488 ---- X return(!baggone); X } X X! STATIC_PTR int X out_container(obj) X register struct obj *obj; X { X! register struct obj *otmp, *ootmp; X register boolean near_capacity = (inv_weight() > -5); X X if(inv_cnt() >= 52) { X*************** X*** 503,509 **** X pline("You have no room to hold anything else."); X return(0); X } X! if(obj->otyp != LOADSTONE && inv_weight() + (int)obj->owt > 0) { X char buf[BUFSZ]; X X Strcpy(buf, doname(obj)); X--- 489,498 ---- X pline("You have no room to hold anything else."); X return(0); X } X! if(obj->otyp != LOADSTONE && inv_weight() + (int)obj->owt - X! (carried(current_container) ? X! (current_container->otyp == BAG_OF_HOLDING ? X! (int)DELTA_CWT(current_container) : (int)obj->owt) : 0) > 0) { X char buf[BUFSZ]; X X Strcpy(buf, doname(obj)); X*************** X*** 528,558 **** X if (Icebox) obj->age = monstermoves - obj->age; X /* simulated point of time */ X X! (void) addinv(obj); X if (near_capacity) You("have a little trouble removing"); X! prinv(obj); X return 0; X } X X- void X- get_all_from_box() { X- register struct obj *otmp, *cobj, *ootmp, *nxobj; X- X- for(otmp = invent; otmp; otmp = otmp->nobj) { X- cobj = otmp; X- if(Is_container(otmp)) { X- current_container = otmp; X- for(ootmp=fcobj,nxobj=(fcobj ? fcobj->nobj : 0); ootmp; X- ootmp=nxobj,nxobj=(ootmp ? ootmp->nobj : 0) ) X- if(ootmp->cobj == cobj) X- (void)out_container(ootmp); X- } X- } X- return; X- } X- X /* for getobj: 0: allow cnt; #: allow all types; %: expect food */ X! static const char frozen_food[] = { '0', '#', FOOD_SYM, 0 }; X X void X use_container(obj, held) X--- 517,530 ---- X if (Icebox) obj->age = monstermoves - obj->age; X /* simulated point of time */ X X! ootmp = addinv(obj); X if (near_capacity) You("have a little trouble removing"); X! prinv(ootmp); X return 0; X } X X /* for getobj: 0: allow cnt; #: allow all types; %: expect food */ X! static const char NEARDATA frozen_food[] = { '0', '#', FOOD_SYM, 0 }; X X void X use_container(obj, held) X*************** X*** 662,669 **** X dec_cwt(cobj, obj) X register struct obj *cobj, *obj; X { X! if (Is_mbag(cobj)) X! cobj->owt -= (cobj->cursed?(obj->owt*2):(obj->owt/(cobj->blessed?4:2)) + 1); X else cobj->owt -= obj->owt; X X if(cobj->owt < objects[cobj->otyp].oc_weight) X--- 634,641 ---- X dec_cwt(cobj, obj) X register struct obj *cobj, *obj; X { X! if (cobj->otyp == BAG_OF_HOLDING) X! cobj->owt -= DELTA_CWT(cobj); X else cobj->owt -= obj->owt; X X if(cobj->owt < objects[cobj->otyp].oc_weight) X*** src/Old/polyself.c Sun Jun 3 14:03:05 1990 X--- src/polyself.c Thu May 31 22:11:33 1990 X*************** X*** 5,15 **** X #include "hack.h" X X #ifdef POLYSELF X static void NDECL(break_armor); X static void FDECL(drop_weapon,(int)); X static void NDECL(skinback); X static void NDECL(uunstick); X- #ifdef OVLB X static boolean sticky; X #endif /* OVLB */ X #endif X--- 5,15 ---- X #include "hack.h" X X #ifdef POLYSELF X+ #ifdef OVLB X static void NDECL(break_armor); X static void FDECL(drop_weapon,(int)); X static void NDECL(skinback); X static void NDECL(uunstick); X static boolean sticky; X #endif /* OVLB */ X #endif X*************** X*** 629,635 **** X #ifdef MACOS X char mac_tbuf[80]; X if(!flags.silent) SysBeep(1); X! sprintf(mac_tbuf, "Really confuse %s?", mon_nam(mtmp)); X if(UseMacAlertText(128, mac_tbuf) != 1) continue; X #else X pline("Really confuse %s? ", mon_nam(mtmp)); X--- 629,635 ---- X #ifdef MACOS X char mac_tbuf[80]; X if(!flags.silent) SysBeep(1); X! Sprintf(mac_tbuf, "Really confuse %s?", mon_nam(mtmp)); X if(UseMacAlertText(128, mac_tbuf) != 1) continue; X #else X pline("Really confuse %s? ", mon_nam(mtmp)); X*************** X*** 705,710 **** X--- 705,712 ---- X } X #endif X X+ #endif /* OVLB */ X+ #ifdef OVL1 X const char * X body_part(part) X int part; X*************** X*** 713,745 **** X * plus the trailing null, after pluralizing (since sometimes a X * buffer is made a fixed size and must be able to hold it) X */ X! static const char *humanoid_parts[] = { "arm", "eye", "face", "finger", X "fingertip", "foot", "hand", "handed", "head", "leg", X "light headed", "neck", "spine", "toe" }; X #ifdef POLYSELF X! static const char *jelly_parts[] = { "pseudopod", "dark spot", "front", X "pseudopod extension", "pseudopod extremity", X "pseudopod root", "grasp", "grasped", "cerebral area", X "lower pseudopod", "viscous", "middle", "surface", X "pseudopod extremity" }, X! *animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip", X "rear claw", "foreclaw", "clawed", "head", "rear limb", X "light headed", "neck", "spine", "rear claw tip" }, X! *horse_parts[] = { "forelimb", "eye", "face", "forehoof", "hoof tip", X "rear hoof", "foreclaw", "hooved", "head", "rear limb", X "light headed", "neck", "backbone", "rear hoof tip" }, X! *sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle", X "tentacle tip", "lower appendage", "tentacle", "tentacled", X "body", "lower tentacle", "rotational", "equator", "body", X "lower tentacle tip" }, X! *fungus_parts[] = { "mycelium", "visual area", "front", "hypha", X "hypha", "root", "strand", "stranded", "cap area", X "rhizome", "sporulated", "stalk", "root", "rhizome tip" }, X! *vortex_parts[] = { "region", "eye", "front", "minor current", X "minor current", "lower current", "swirl", "swirled", X "central core", "lower current", "addled", "center", X "currents", "edge" }, X! *snake_parts[] = { "vestigial limb", "eye", "face", "large scale", X "large scale tip", "rear region", "scale gap", "scale gapped", X "head", "rear region", "light headed", "neck", "length", X "rear scale" }; X--- 715,747 ---- X * plus the trailing null, after pluralizing (since sometimes a X * buffer is made a fixed size and must be able to hold it) X */ X! static const char NEARDATA *humanoid_parts[] = { "arm", "eye", "face", "finger", X "fingertip", "foot", "hand", "handed", "head", "leg", X "light headed", "neck", "spine", "toe" }; X #ifdef POLYSELF X! static const char NEARDATA *jelly_parts[] = { "pseudopod", "dark spot", "front", X "pseudopod extension", "pseudopod extremity", X "pseudopod root", "grasp", "grasped", "cerebral area", X "lower pseudopod", "viscous", "middle", "surface", X "pseudopod extremity" }, X! NEARDATA *animal_parts[] = { "forelimb", "eye", "face", "foreclaw", "claw tip", X "rear claw", "foreclaw", "clawed", "head", "rear limb", X "light headed", "neck", "spine", "rear claw tip" }, X! NEARDATA *horse_parts[] = { "forelimb", "eye", "face", "forehoof", "hoof tip", X "rear hoof", "foreclaw", "hooved", "head", "rear limb", X "light headed", "neck", "backbone", "rear hoof tip" }, X! NEARDATA *sphere_parts[] = { "appendage", "optic nerve", "body", "tentacle", X "tentacle tip", "lower appendage", "tentacle", "tentacled", X "body", "lower tentacle", "rotational", "equator", "body", X "lower tentacle tip" }, X! NEARDATA *fungus_parts[] = { "mycelium", "visual area", "front", "hypha", X "hypha", "root", "strand", "stranded", "cap area", X "rhizome", "sporulated", "stalk", "root", "rhizome tip" }, X! NEARDATA *vortex_parts[] = { "region", "eye", "front", "minor current", X "minor current", "lower current", "swirl", "swirled", X "central core", "lower current", "addled", "center", X "currents", "edge" }, X! NEARDATA *snake_parts[] = { "vestigial limb", "eye", "face", "large scale", X "large scale tip", "rear region", "scale gap", "scale gapped", X "head", "rear region", "light headed", "neck", "length", X "rear scale" }; X*************** X*** 761,767 **** X #endif X } X X! #endif /* OVLB */ X #ifdef OVL0 X X int X--- 763,769 ---- X #endif X } X X! #endif /* OVL1 */ X #ifdef OVL0 X X int X*** src/Old/potion.c Sun Jun 3 14:03:42 1990 X--- src/potion.c Sat Jun 2 19:45:47 1990 X*************** X*** 5,11 **** X #include "hack.h" X X #ifdef OVLB X! static int nothing, unkn; X #endif /* OVLB */ X X #ifdef WORM X--- 5,14 ---- X #include "hack.h" X X #ifdef OVLB X! static void NDECL(ghost_from_bottle); X! static boolean FDECL(neutralizes, (struct obj *,struct obj *)); X! X! static int NEARDATA nothing, NEARDATA unkn; X #endif /* OVLB */ X X #ifdef WORM X*************** X*** 22,28 **** X X #ifdef OVLB X X! static const char beverages[] = { POTION_SYM, 0 }; X X void X make_confused(xtime,talk) X--- 25,31 ---- X X #ifdef OVLB X X! static const char NEARDATA beverages[] = { POTION_SYM, 0 }; X X void X make_confused(xtime,talk) X*************** X*** 157,167 **** X static void X ghost_from_bottle() X { X! if(!makemon(&mons[PM_GHOST], u.ux, u.uy)){ X pline("This bottle turns out to be empty."); X return; X } X! pline("As you open the bottle, an enormous ghost emerges!"); X if(flags.verbose) X You("are frightened to death, and unable to move."); X nomul(-3); X--- 160,177 ---- X static void X ghost_from_bottle() X { X! struct monst *mtmp = makemon(&mons[PM_GHOST], u.ux, u.uy); X! X! if (!mtmp) { X pline("This bottle turns out to be empty."); X return; X } X! if (Blind) { X! pline("As you open the bottle, something emerges."); X! return; X! } X! pline("As you open the bottle, an enormous %s emerges!", X! Hallucination ? rndmonnam() : "ghost"); X if(flags.verbose) X You("are frightened to death, and unable to move."); X nomul(-3); X*************** X*** 268,273 **** X--- 278,285 ---- X } X if(++i >= A_MAX) i = 0; X } X+ if((ABASE(A_STR) == AMAX(A_STR)) && (u.uhs >= 3)) X+ losestr(1); /* kludge - mrs */ X } X break; X case POT_HALLUCINATION: X*************** X*** 342,352 **** X unkn++; X You("have an uneasy feeling..."); X } else { X- You("feel self-knowledgeable..."); X if (otmp->blessed) { X adjattrib(A_INT, 1, FALSE); X adjattrib(A_WIS, 1, FALSE); X } X more(); X enlightenment(); X pline("The feeling subsides."); X--- 354,364 ---- X unkn++; X You("have an uneasy feeling..."); X } else { X if (otmp->blessed) { X adjattrib(A_INT, 1, FALSE); X adjattrib(A_WIS, 1, FALSE); X } X+ You("feel self-knowledgeable..."); X more(); X enlightenment(); X pline("The feeling subsides."); X*************** X*** 360,377 **** X else { X newsym(u.ux,u.uy); X if(!Blind) X! pline("Gee! All of a sudden, you can't see yourself."); X else X You("feel rather airy."), unkn++; X } X if (otmp->blessed && !(HInvis & INTRINSIC)) { X #ifndef MACOS X pline("Do you want the invisibility to be permanent? "); X- nothing = 0; X if (yn()=='n') HInvis += rn1(15,31); X else HInvis |= INTRINSIC; X #else X- nothing = 0; X if (UseMacAlertText(128, X "Do you want the invisibility to be permanent ?") X == 2) HInvis += rn1(15,31); X--- 372,390 ---- X else { X newsym(u.ux,u.uy); X if(!Blind) X! pline(Hallucination ? X! "Far out, man! You can see right through yourself!" : X! "Gee! All of a sudden, you can't see yourself."); X else X You("feel rather airy."), unkn++; X } X if (otmp->blessed && !(HInvis & INTRINSIC)) { X+ nothing = 0; X #ifndef MACOS X pline("Do you want the invisibility to be permanent? "); X if (yn()=='n') HInvis += rn1(15,31); X else HInvis |= INTRINSIC; X #else X if (UseMacAlertText(128, X "Do you want the invisibility to be permanent ?") X == 2) HInvis += rn1(15,31); X*************** X*** 520,529 **** X if (otmp->cursed) { X unkn++; X /* they went up a level */ X! if(dlevel > 1 && dlevel <= MAXLEVEL) { X You("rise up, through the ceiling!"); X goto_level(dlevel-1, FALSE, FALSE); X } else You("have an uneasy feeling."); X break; X } X pluslvl(); X--- 533,554 ---- X if (otmp->cursed) { X unkn++; X /* they went up a level */ X! #ifdef ENDGAME X! if((dlevel > 1 || u.uhave_amulet) && X! dlevel <= MAXLEVEL) { X You("rise up, through the ceiling!"); X+ goto_level((dlevel==1) ? ENDLEVEL X+ : dlevel-1, FALSE, FALSE); X+ } else You("have an uneasy feeling."); X+ #else X+ if(dlevel > 1 && dlevel <= MAXLEVEL) { X+ You("rise up, through the ceiling!"); X+ #ifdef MACOS X+ segments |= SEG_POTION; X+ #endif X goto_level(dlevel-1, FALSE, FALSE); X } else You("have an uneasy feeling."); X+ #endif X break; X } X pluslvl(); X*************** X*** 740,745 **** X--- 765,772 ---- X if(!Blind) X pline("%s looks healthier.", Monnam(mon)); X mon->mhp += d(2,6); X+ if (mon->mhp > mon->mhpmax) X+ mon->mhp = mon->mhpmax; X } X } X /* TO DO: Gremlins multiply when doused with water */ X*************** X*** 1023,1032 **** X return(1); X } X X! obj->spe--; /* diluted */ X! if (obj->otyp == POT_WATER) X! pline("The mixture bubbles violently, then clears."); X! else { X if (!Blind) { X pline("The mixture looks %s.", objects[obj->otyp].oc_descr); X obj->dknown = 1; X--- 1050,1061 ---- X return(1); X } X X! if (obj->otyp == POT_WATER) { X! obj->spe = 0; /* in case it was diluted before */ X! pline("The mixture bubbles violently%s.", X! Blind ? "" : ", then clears"); X! } else { X! obj->spe--; /* diluted */ X if (!Blind) { X pline("The mixture looks %s.", objects[obj->otyp].oc_descr); X obj->dknown = 1; X*************** X*** 1059,1064 **** X--- 1088,1094 ---- X potion->otyp = POT_WATER; X potion->blessed = 0; X potion->cursed = 0; X+ potion->spe = 0; X return(1); X } X X*************** X*** 1159,1181 **** X { X register struct obj *objs; X register struct monst *mtmp; X! boolean mfound=FALSE; X X if(!fobj) { X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { X! if (mtmp->minvent) { X! /* OK, it's used for 2 different things */ X! mfound = TRUE; X break; X } X } X! if (!mfound) { X if (otmp) X strange_feeling(otmp, "You feel a pull downward."); X return(1); X } X } X! mfound = FALSE; X for(objs = fobj; objs; objs = objs->nobj) X if(objs->ox != u.ux || objs->oy != u.uy) X goto outobjmap; X--- 1189,1213 ---- X { X register struct obj *objs; X register struct monst *mtmp; X! boolean mfound=FALSE, mofound=FALSE; X X if(!fobj) { X for(mtmp = fmon; mtmp; mtmp = mtmp->nmon) { X! /* mofound can be 1 of 2 completely different things, X! * either of which stops the "strange feeling"... X! */ X! if (mtmp->minvent || (mtmp->mimic && otmp->cursed)) { X! mofound = TRUE; X break; X } X } X! if (!mofound) { X if (otmp) X strange_feeling(otmp, "You feel a pull downward."); X return(1); X } X } X! if (mofound) goto outobjmap; X for(objs = fobj; objs; objs = objs->nobj) X if(objs->ox != u.ux || objs->oy != u.uy) X goto outobjmap; X*** src/Old/pray.c Sun Jun 3 14:04:30 1990 X--- src/pray.c Sat May 12 16:07:09 1990 X*************** X*** 650,658 **** X case 6: pline ("An object appears at your %s!", X makeplural(body_part(FOOT))); X #ifdef SPELLS X! bless(mkobj_at(SPBOOK_SYM, u.ux, u.uy)); X #else X! bless(mkobj_at(SCROLL_SYM, u.ux, u.uy)); X #endif X break; X X--- 650,658 ---- X case 6: pline ("An object appears at your %s!", X makeplural(body_part(FOOT))); X #ifdef SPELLS X! bless(mkobj_at(SPBOOK_SYM, u.ux, u.uy, TRUE)); X #else X! bless(mkobj_at(SCROLL_SYM, u.ux, u.uy, TRUE)); X #endif X break; X X*************** X*** 692,698 **** X } X X #ifdef ENDGAME X! static const char sacrifice_types[] = { FOOD_SYM, AMULET_SYM, 0 }; X #endif X X static void X--- 692,698 ---- X } X X #ifdef ENDGAME X! static const char NEARDATA sacrifice_types[] = { FOOD_SYM, AMULET_SYM, 0 }; X #endif X X static void X*************** X*** 772,789 **** X } else { X register struct monst *dmon; X /* Human sacrifice on a chaotic altar is equivalent to demon summoning */ X! #ifdef THEOLOGY X if (altaralign == U_CHAOTIC) X pline("The blood covers the altar!"); X else { X! #endif X pline("The blood floods over the altar, which vanishes in %s cloud!", X an(Hallucination ? hcolor() : black)); X levl[u.ux][u.uy].typ = ROOM; X levl[u.ux][u.uy].altarmask = 0; X! #ifdef THEOLOGY X } X! #endif X change_luck(2); X if(Invisible) newsym(u.ux, u.uy); X if(dmon = makemon(&mons[dlord()], u.ux, u.uy)) { X--- 772,789 ---- X } else { X register struct monst *dmon; X /* Human sacrifice on a chaotic altar is equivalent to demon summoning */ X! # ifdef THEOLOGY X if (altaralign == U_CHAOTIC) X pline("The blood covers the altar!"); X else { X! # endif X pline("The blood floods over the altar, which vanishes in %s cloud!", X an(Hallucination ? hcolor() : black)); X levl[u.ux][u.uy].typ = ROOM; X levl[u.ux][u.uy].altarmask = 0; X! # ifdef THEOLOGY X } X! # endif X change_luck(2); X if(Invisible) newsym(u.ux, u.uy); X if(dmon = makemon(&mons[dlord()], u.ux, u.uy)) { X*************** X*** 817,822 **** X--- 817,823 ---- X #ifdef __GNULINT__ X else { impossible("Bad unicorn type??"); unicalign = 0; } X #endif X+ #ifdef ALTARS X /* If same as altar, always a very bad action. */ X if (unicalign == altaralign) { X pline("Such an action is an insult to %s!", (unicalign== -1) X*************** X*** 832,840 **** X else You("feel you are thoroughly on the right path."); X u.ualign = ALIGNLIM; X value += 3; X! } else if (unicalign == u.ualigntyp) { X /* If sacrificing unicorn of your alignment to altar not of */ X /* your alignment, your god gets angry and it's a conversion */ X u.ualign = -1; X value = 1; X } else value += 3; X--- 833,843 ---- X else You("feel you are thoroughly on the right path."); X u.ualign = ALIGNLIM; X value += 3; X! } else X /* If sacrificing unicorn of your alignment to altar not of */ X /* your alignment, your god gets angry and it's a conversion */ X+ #endif X+ if (unicalign == u.ualigntyp) { X u.ualign = -1; X value = 1; X } else value += 3; X*************** X*** 959,964 **** X--- 962,968 ---- X You("feel the power of %s increase.", X u_gname()); X change_luck(1); X+ /* Yes, this is supposed to be &=, not |= */ X levl[u.ux][u.uy].altarmask &= A_SHRINE; X /* the following accommodates stupid compilers */ X levl[u.ux][u.uy].altarmask = X*** src/Old/pri.c Sun Jun 3 14:05:14 1990 X--- src/pri.c Thu May 31 22:13:26 1990 X*************** X*** 5,43 **** X #define MONATTK_H /* comment line for pre-compiled headers */ X /* block some unused #defines to avoid overloading some cpp's */ X #include "hack.h" X- #include <ctype.h> /* for isalpha() */ X #if defined(ALTARS) && defined(THEOLOGY) X #include "epri.h" X #endif X #include "termcap.h" X X! OSTATIC void FDECL(hilite, (int,int,UCHAR_P, UCHAR_P)); X! OSTATIC void FDECL(cornbot, (int)); X #ifdef TEXTCOLOR X! OSTATIC uchar FDECL(mimic_color, (struct monst *)); X #endif X X! #ifndef ASCIIGRAPH X # define g_putch (void) putchar X! #endif X X! #ifndef g_putch X! #ifdef OVL0 X static boolean GFlag = FALSE; /* graphic flag */ X #endif /* OVL0 */ X- #endif X X /* 100 suffices for bot(); must be larger than COLNO */ X #define MAXCO 100 X! VSTATIC char oldbot1[MAXCO], newbot1[MAXCO]; X! VSTATIC char oldbot2[MAXCO], newbot2[MAXCO]; X #ifdef OVL2 X! static const char *dispst = "*0#@#0#*0#@#0#*0#@#0#*0#@#0#*0#@#0#*"; X #endif /* OVL2 */ X #ifndef OVLB X! OSTATIC int mrank_sz; X #else /* OVLB */ X! XSTATIC int mrank_sz = 0; /* loaded by max_rank_sz (called in u_init) */ X #endif /* OVLB */ X X #ifdef CLIPPING X--- 5,49 ---- X #define MONATTK_H /* comment line for pre-compiled headers */ X /* block some unused #defines to avoid overloading some cpp's */ X #include "hack.h" X #if defined(ALTARS) && defined(THEOLOGY) X #include "epri.h" X #endif X #include "termcap.h" X X! #ifdef OVL0 X! static void FDECL(fillbot, (int,char *,char *)); X! static void NDECL(bot1); X! static void NDECL(bot2); X! #endif /* OVL0 */ X! X! STATIC_DCL void FDECL(hilite, (int,int,UCHAR_P, UCHAR_P)); X! STATIC_DCL void FDECL(cornbot, (int)); X #ifdef TEXTCOLOR X! STATIC_DCL uchar FDECL(mimic_color, (struct monst *)); X #endif X X! #ifdef OVL0 X! # ifndef ASCIIGRAPH X # define g_putch (void) putchar X! # endif /* ASCIIGRAPH */ X X! # ifndef g_putch X! static void FDECL(g_putch, (UCHAR_P)); X static boolean GFlag = FALSE; /* graphic flag */ X+ # endif X #endif /* OVL0 */ X X /* 100 suffices for bot(); must be larger than COLNO */ X #define MAXCO 100 X! STATIC_VAR char NEARDATA oldbot1[MAXCO], NEARDATA newbot1[MAXCO]; X! STATIC_VAR char NEARDATA oldbot2[MAXCO], NEARDATA newbot2[MAXCO]; X #ifdef OVL2 X! static const char NEARDATA *dispst = "*0#@#0#*0#@#0#*0#@#0#*0#@#0#*0#@#0#*"; X #endif /* OVL2 */ X #ifndef OVLB X! STATIC_DCL int mrank_sz; X #else /* OVLB */ X! STATIC_OVL int NEARDATA mrank_sz = 0; /* loaded by max_rank_sz (called in u_init) */ X #endif /* OVLB */ X X #ifdef CLIPPING X*************** X*** 126,131 **** X--- 132,140 ---- X #endif X } X X+ #endif /* OVLB */ X+ #ifdef OVL0 X+ X #ifdef CLIPPING X void X cliparound(x, y) X*************** X*** 160,168 **** X } X #endif /* CLIPPING */ X X- #endif /* OVLB */ X- #ifdef OVL0 X- X /* X * Allow for a different implementation than this... X */ X--- 169,174 ---- X*************** X*** 173,179 **** X g_putch(ch) X uchar ch; X { X! if (IBMgraphics) /* IBM-compatible displays don't need other stuff */ X (void) putchar(ch); X else if (ch & 0x80) { X if (!GFlag) { X--- 179,186 ---- X g_putch(ch) X uchar ch; X { X! if (flags.IBMgraphics) X! /* IBM-compatible displays don't need other stuff */ X (void) putchar(ch); X else if (ch & 0x80) { X if (!GFlag) { X*************** X*** 272,278 **** X register const char *ch; X register struct monst *mtmp = 0; X X! if((x != u.ux) || (y != u.uy)) { X if(!(mtmp = m_at(x, y))) { X X impossible("shield effect at %d,%d", x, y); X--- 279,289 ---- X register const char *ch; X register struct monst *mtmp = 0; X X! nscr(); X! X! if((x == u.ux) && (y == u.uy)) X! curs_on_u(); X! else { X if(!(mtmp = m_at(x, y))) { X X impossible("shield effect at %d,%d", x, y); X*************** X*** 429,435 **** X #endif /* OVL0 */ X #ifdef OVLB X X! XSTATIC void X cornbot(lth) X register int lth; X { X--- 440,446 ---- X #endif /* OVL0 */ X #ifdef OVLB X X! STATIC_OVL void X cornbot(lth) X register int lth; X { X*************** X*** 677,683 **** X /* Make sure that there are 18 entries in the rank arrays. */ X /* 0 and even entries are male ranks, odd entries are female. */ X X! static const char *mage_ranks[] = { X "Evoker", X "Evoker", X "Conjurer", X--- 688,694 ---- X /* Make sure that there are 18 entries in the rank arrays. */ X /* 0 and even entries are male ranks, odd entries are female. */ X X! static const char NEARDATA *mage_ranks[] = { X "Evoker", X "Evoker", X "Conjurer", X*************** X*** 698,704 **** X "Mage" X }; X X! static const char *priest_ranks[] = { X "Aspirant", X "Aspirant", X "Acolyte", X--- 709,715 ---- X "Mage" X }; X X! static const char NEARDATA *priest_ranks[] = { X "Aspirant", X "Aspirant", X "Acolyte", X*************** X*** 719,725 **** X "High Priestess" X }; X X! static const char *thief_ranks[] = { X "Footpad", X "Footpad", X "Cutpurse", X--- 730,736 ---- X "High Priestess" X }; X X! static const char NEARDATA *thief_ranks[] = { X "Footpad", X "Footpad", X "Cutpurse", X*************** X*** 740,746 **** X "Thief" X }; X X! static const char *fighter_ranks[] = { X "Stripling", X "Stripling", X "Skirmisher", X--- 751,757 ---- X "Thief" X }; X X! static const char NEARDATA *fighter_ranks[] = { X "Stripling", X "Stripling", X "Skirmisher", X*************** X*** 761,767 **** X "Lady" X }; X X! static const char *tourist_ranks[] = { X "Rambler", X "Rambler", X "Sightseer", X--- 772,778 ---- X "Lady" X }; X X! static const char NEARDATA *tourist_ranks[] = { X "Rambler", X "Rambler", X "Sightseer", X*************** X*** 782,788 **** X "Adventurer" X }; X X! static const char *nomad_ranks[] = { X "Troglodyte", X "Troglodyte", X "Aborigine", X--- 793,799 ---- X "Adventurer" X }; X X! static const char NEARDATA *nomad_ranks[] = { X "Troglodyte", X "Troglodyte", X "Aborigine", X*************** X*** 803,809 **** X "Pioneer" X }; X X! static const char *knight_ranks[] = { X "Gallant", X "Gallant", X "Esquire", X--- 814,820 ---- X "Pioneer" X }; X X! static const char NEARDATA *knight_ranks[] = { X "Gallant", X "Gallant", X "Esquire", X*************** X*** 824,830 **** X "Paladin" X }; X X! static const char *archeo_ranks[] = { X "Digger", X "Digger", X "Field Worker", X--- 835,841 ---- X "Paladin" X }; X X! static const char NEARDATA *archeo_ranks[] = { X "Digger", X "Digger", X "Field Worker", X*************** X*** 845,851 **** X "Curator" X }; X X! static const char *healer_ranks[] = { X "Pre-Med", X "Pre-Med", X "Med Student", X--- 856,862 ---- X "Curator" X }; X X! static const char NEARDATA *healer_ranks[] = { X "Pre-Med", X "Pre-Med", X "Med Student", X*************** X*** 866,872 **** X "Chief Surgeon" X }; X X! static const char *barbarian_ranks[] = { X "Plunderer", X "Plunderess", X "Pillager", X--- 877,883 ---- X "Chief Surgeon" X }; X X! static const char NEARDATA *barbarian_ranks[] = { X "Plunderer", X "Plunderess", X "Pillager", X*************** X*** 887,893 **** X "Conqueress" X }; X X! static const char *ninja_ranks[] = { X "Chigo", X "Chigo", X "Bushi", X--- 898,904 ---- X "Conqueress" X }; X X! static const char NEARDATA *ninja_ranks[] = { X "Chigo", X "Chigo", X "Bushi", X*************** X*** 908,914 **** X "Jonin", X }; X X! static const char *elf_ranks[] = { X "Edhel", X "Elleth", X "Edhel", X--- 919,925 ---- X "Jonin", X }; X X! static const char NEARDATA *elf_ranks[] = { X "Edhel", X "Elleth", X "Edhel", X*************** X*** 931,941 **** X X #endif /* OVL1 */ X X! OSTATIC const char **NDECL(rank_array); X X #ifdef OVL1 X X! XSTATIC const char ** X rank_array() { X register const char **ranks; X X--- 942,952 ---- X X #endif /* OVL1 */ X X! STATIC_DCL const char **NDECL(rank_array); X X #ifdef OVL1 X X! STATIC_OVL const char ** X rank_array() { X register const char **ranks; X X*************** X*** 959,969 **** X X #endif /* OVL1 */ X X! OSTATIC const char *rank(); X X #ifdef OVL1 X X! XSTATIC const char * X rank() { X register int place; X register const char **ranks = rank_array(); X--- 970,980 ---- X X #endif /* OVL1 */ X X! STATIC_DCL const char *NDECL(rank); X X #ifdef OVL1 X X! STATIC_OVL const char * X rank() { X register int place; X register const char **ranks = rank_array(); X*************** X*** 1261,1267 **** X * user programmable X */ X X! static const char rndobs[] = { X WEAPON_SYM, ARMOR_SYM, POTION_SYM, SCROLL_SYM, WAND_SYM, X #ifdef SPELLS X SPBOOK_SYM, X--- 1272,1278 ---- X * user programmable X */ X X! static const char NEARDATA rndobs[] = { X WEAPON_SYM, ARMOR_SYM, POTION_SYM, SCROLL_SYM, WAND_SYM, X #ifdef SPELLS X SPBOOK_SYM, X*************** X*** 1274,1280 **** X return rndobs[rn2(SIZE(rndobs))]; X } X X! static const char *hcolors[] = { X "ultraviolet", "infrared", "hot pink", "psychedelic", X "bluish-orange", "reddish-green", "dark white", X "light black", "loud", "salty", "sweet", "sour", X--- 1285,1291 ---- X return rndobs[rn2(SIZE(rndobs))]; X } X X! static const char NEARDATA *hcolors[] = { X "ultraviolet", "infrared", "hot pink", "psychedelic", X "bluish-orange", "reddish-green", "dark white", X "light black", "loud", "salty", "sweet", "sour", X*************** X*** 1297,1303 **** X #ifdef OVL0 X X /*ARGSUSED*/ X! XSTATIC void X hilite(x, y, let, typ) X int x, y; X uchar let, typ; X--- 1308,1314 ---- X #ifdef OVL0 X X /*ARGSUSED*/ X! STATIC_OVL void X hilite(x, y, let, typ) X int x, y; X uchar let, typ; X*************** X*** 1446,1452 **** X #ifdef TEXTCOLOR X /* pick an appropriate color for a mimic imitating an object */ X X! XSTATIC uchar X mimic_color(mtmp) X struct monst *mtmp; X { X--- 1457,1463 ---- X #ifdef TEXTCOLOR X /* pick an appropriate color for a mimic imitating an object */ X X! STATIC_OVL uchar X mimic_color(mtmp) X struct monst *mtmp; X { X*** src/Old/priest.c Sun Jun 3 14:06:04 1990 X--- src/priest.c Thu May 31 22:13:29 1990 X*************** X*** 10,15 **** X--- 10,18 ---- X #include "eshk.h" X #include "epri.h" X X+ #ifdef OVLB X+ X+ #if defined(ALTARS) && defined(THEOLOGY) X static boolean FDECL(histemple_at,(struct monst *,int,int)); X static int FDECL(t_alignment,(struct mkroom *)); X static boolean FDECL(is_shrined,(struct mkroom *)); X*************** X*** 16,23 **** X static boolean FDECL(t_coaligned,(struct mkroom *)); X struct monst *FDECL(findpriest,(struct mkroom *)); X static boolean FDECL(p_inhistemple,(struct mkroom *)); X! X! #ifdef OVLB X X /* used for the insides of shk_move and pri_move */ X int X--- 19,25 ---- X static boolean FDECL(t_coaligned,(struct mkroom *)); X struct monst *FDECL(findpriest,(struct mkroom *)); X static boolean FDECL(p_inhistemple,(struct mkroom *)); X! #endif X X /* used for the insides of shk_move and pri_move */ X int X*************** X*** 236,252 **** X cnt--; X } X #endif X! if(p_coaligned(priest)) { X (void) mongets(priest, rn2(2) ? CLOAK_OF_PROTECTION X : CLOAK_OF_MAGIC_RESISTANCE); X! #ifdef NAMED_ITEMS X! otmp = mk_aligned_artifact((unsigned)EPRI(priest)->shralign + 1); X! if(otmp) { X! otmp->spe = rnd(4); X! mpickobj(priest, otmp); X! } X! #endif X! } else { X if(!rn2(5)) X otmp = mksobj(CLOAK_OF_MAGIC_RESISTANCE, FALSE); X else otmp = mksobj(CLOAK_OF_PROTECTION, FALSE); X--- 238,247 ---- X cnt--; X } X #endif X! if(p_coaligned(priest)) X (void) mongets(priest, rn2(2) ? CLOAK_OF_PROTECTION X : CLOAK_OF_MAGIC_RESISTANCE); X! else { X if(!rn2(5)) X otmp = mksobj(CLOAK_OF_MAGIC_RESISTANCE, FALSE); X else otmp = mksobj(CLOAK_OF_PROTECTION, FALSE); X*************** X*** 254,265 **** X if(!rn2(2)) curse(otmp); X mpickobj(priest, otmp); X } X! otmp = mksobj(MACE, FALSE); X! if(otmp) { X! otmp->spe = rnd(3); X! if(!rn2(2)) curse(otmp); X! mpickobj(priest, otmp); X! } X } X } X } X--- 249,261 ---- X if(!rn2(2)) curse(otmp); X mpickobj(priest, otmp); X } X! } X! X! otmp = mksobj(MACE, FALSE); X! if(otmp) { X! otmp->spe = rnd(3); X! if(!rn2(2)) curse(otmp); X! mpickobj(priest, otmp); X } X } X } X*************** X*** 268,274 **** X priestname(priest) X register struct monst *priest; X { X! static char pname[PL_NSIZ]; X X Strcpy(pname, "the "); X if(priest->minvis) Strcat(pname, "invisible "); X--- 264,270 ---- X priestname(priest) X register struct monst *priest; X { X! static char NEARDATA pname[PL_NSIZ]; X X Strcpy(pname, "the "); X if(priest->minvis) Strcat(pname, "invisible "); X*************** X*** 447,452 **** X--- 443,449 ---- X kludge("%s gives you two bits for an ale.", Monnam(priest)); X u.ugold = 2L; X if (priest->mgold) priest->mgold -= 2L; X+ flags.botl = 1; X } else X kludge("%s is not interested.", Monnam(priest)); X return; X END_OF_FILE if test 51445 -ne `wc -c <'patch8.06'`; then echo shar: \"'patch8.06'\" unpacked with wrong size! fi # end of 'patch8.06' fi if test -f 'vms/oldcrtl.c' -a "${1}" != "-c" ; then echo shar: Will not clobber existing file \"'vms/oldcrtl.c'\" else echo shar: Extracting \"'vms/oldcrtl.c'\" \(5259 characters\) sed "s/^X//" >'vms/oldcrtl.c' <<'END_OF_FILE' X/* SCCS Id: @(#)oldcrtl.c 3.0 90/05/24 X/* Pat Rankin May'90 */ X/* VMS NetHack support, not needed for vms 4.6,4.7,or 5.x. */ X X#ifdef VERYOLD_VMS X/* X * The following routines are used by NetHack but were not available X * from the C Run-Time Library (VAXCRTL) prior to VMS V4.6. X * X * atexit, memcmp, memcpy, qsort, rename, vprintf, vsprintf X * X * Most of them are implemented here, but others will have to be worked X * around in another fashion [such as '#define USE_OLDARGS' (even though X * <varargs.h> is available) to avoid the need for vprintf & vsprintf]. X * X */ X#define REG register X X#ifndef SUPPRESS_MEM_FUNCS X/* note: hand optimized for VAX (hardware pre-decrement & post-increment) */ X X/* void *memset(void *, int, size_t) -- fill chunk of memory. X*/ Xchar *memset( dst, fil, cnt ) XREG char *dst; XREG char fil; XREG int cnt; X{ X char *dst_p = dst; X while ( --cnt >= 0 ) X *dst++ = fil; X return dst_p; X} X X/* void *memcpy(void *, const void *, size_t) -- copy chunk of memory. X*/ Xchar *memcpy( dst, src, cnt ) /*[functionally equivalent to memmove()]*/ XREG char *dst; XREG char *src; XREG int cnt; X{ X char *dst_p = dst; X if ( src == dst || cnt <= 0 ) { X ; /* do nothing */ X } else if ( dst < src || dst >= src + cnt ) { X while ( --cnt >= 0 ) X *dst++ = *src++; X } else { /* work backwards */ X dst += cnt, src += cnt; X while ( --cnt >= 0 ) X *--dst = *--src; X } X return dst_p; X} X X/* void *memchr(const void *, int, size_t) -- search for a byte. X*/ Xchar *memchr( buf, byt, len ) XREG char *buf; XREG char byt; XREG int len; X{ X while ( --len >= 0 ) X if ( *buf++ == byt ) /* found */ X return --buf; X return (char *)0; /* not found */ X} X X/* int memcmp(const void *, const void *, size_t) -- compare two chunks. X*/ Xint memcmp( buf1, buf2, len ) XREG char *buf1; XREG char *buf2; XREG int len; X{ X while ( --len >= 0 ) X if ( *buf1++ != *buf2++ ) X return (*--buf1 - *--buf2); X return 0; /* buffers matched */ X} X#endif /*!SUPPRESS_MEM_FUNCS*/ X X X#ifndef SUPPRESS_ATEXIT X/* int atexit(void (*)(void)) -- register an exit handler. X*/ X#define MAX_EXIT_FUNCS 32 /* arbitrary (32 matches VAX C v3.x docs) */ Xstruct _ex_hndlr { long reserved, (*routine)(), arg_count, *arg1_addr; }; Xstatic int ex_cnt = 0; /* number of handlers registered so far */ Xstatic struct { long dummy_arg; struct _ex_hndlr handler; /*(black box)*/ X } ex_data[MAX_EXIT_FUNCS]; /* static handler data */ X Xint atexit( function ) X int (*function)(); /* note: actually gets called with 1 arg */ X{ X if ( ex_cnt < MAX_EXIT_FUNCS ) { X ex_data[ex_cnt].dummy_arg = 0; /* ultimately receives exit reason */ X ex_data[ex_cnt].handler.reserved = 0; X ex_data[ex_cnt].handler.routine = function; X ex_data[ex_cnt].handler.arg_count = 1; /*(required)*/ X ex_data[ex_cnt].handler.arg1_addr = &ex_data[ex_cnt].dummy_arg; X SYS$DCLEXH( &ex_data[ex_cnt].handler); /* declare exit handler */ X return ++ex_cnt; /*(non-zero)*/ X } else X return 0; X} X#endif /*!SUPPRESS_ATEXIT*/ X X X#ifndef SUPPRESS_RENAME X/* int rename(const char *, const char *) -- rename a file (on same device). X*/ X#ifndef EVMSERR X#include <errno.h> X#define C$$TRANSLATE(status) (errno = EVMSERR, vaxc$errno = (status)) X#endif X Xint rename( old_name, new_name ) X char *old_name; X char *new_name; X{ X struct _dsc { int len; char *adr; } old_dsc, new_dsc; X unsigned long status, LIB$RENAME_FILE(); X X /* put strings into descriptors and call run-time library routine */ X old_dsc.len = strlen( old_dsc.adr = old_name ); X new_dsc.len = strlen( new_dsc.adr = new_name ); X status = LIB$RENAME_FILE( &old_dsc, &new_dsc); /* omit optional args */ X if ( !(status & 1) ) { /* even => failure */ X C$$TRANSLATE(status); X return -1; X } else /* odd => success */ X return 0; X} X#endif /*!SUPPRESS_RENAME*/ X X X#ifndef SUPPRESS_QSORT X/* void qsort(void *, size_t, size_t, int (*)()) -- sort arbitrary collection. X*/ Xvoid qsort( base, count, size, compare ) X char *base; X int count; XREG int size; X int (*compare)(); X{ XREG int i, cmp; XREG char *next, *prev, *tmp = 0; X char wrk_buf[512], *malloc(); /* assume no alloca() available */ X X /* just use a shuffle sort (tradeoff between efficiency & simplicity) */ X /* [Optimal if already sorted; worst case when initially reversed.] */ X for ( next = base, i = 1; i < count; i++ ) { X prev = next, next += size; /* increment front pointer */ X if ( (cmp = (*compare)( next, prev)) < 0 ) { X /* found element out of order; move other(s) up then re-insert it */ X if ( !tmp ) tmp = (size > sizeof wrk_buf ? malloc(size) : wrk_buf); X memcpy( tmp, next, size); /* save smaller element */ X while ( cmp < 0 ) { X memcpy( prev + size, prev, size); /* move larger elem. up */ X prev -= size; /* decrement back pointer */ X cmp = (prev >= base ? (*compare)( tmp, prev) : 0); X } X memcpy( prev + size, tmp, size); /* restore small element */ X } X } X if ( tmp != 0 && tmp != wrk_buf ) free(tmp); X return; X} X#endif /*!SUPPRESS_QSORT*/ X X#endif /*VERYOLD_VMS*/ END_OF_FILE if test 5259 -ne `wc -c <'vms/oldcrtl.c'`; then echo shar: \"'vms/oldcrtl.c'\" unpacked with wrong size! fi # end of 'vms/oldcrtl.c' fi echo shar: End of archive 7 \(of 24\). cp /dev/null ark7isdone MISSING="" for I in 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 ; do if test ! -f ark${I}isdone ; then MISSING="${MISSING} ${I}" fi done if test "${MISSING}" = "" ; then echo You have unpacked all 24 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