home *** CD-ROM | disk | FTP | other *** search
/ Giga Games 1 / Giga Games.iso / net / usenet / volume7 / nethack3 / patch5e < prev    next >
Encoding:
Text File  |  1989-11-08  |  56.7 KB  |  2,080 lines

  1. Subject:  v08i052:  NetHack3 -  display oriented dungeons & dragons (Ver. 3.0), Patch5e
  2. Newsgroups: comp.sources.games
  3. Approved: billr@saab.CNA.TEK.COM
  4.  
  5. Submitted-by: Izchak Miller <izchak@linc.cis.upenn.edu>
  6. Posting-number: Volume 8, Issue 52
  7. Archive-name: NetHack3/Patch5e
  8. Patch-To: NetHack3: Volume 7, Issue 56-93
  9.  
  10. #! /bin/sh
  11. # This is a shell archive.  Remove anything before this line, then unpack
  12. # it by saving it into a file and typing "sh file".  To overwrite existing
  13. # files, type "sh file -c".  You can also feed this as standard input via
  14. # unshar, or by typing "sh <file", e.g..  If this archive is complete, you
  15. # will see the following message at the end:
  16. #        "End of archive 5 (of 6)."
  17. # Contents:  patches05e
  18. # Wrapped by billr@saab on Tue Oct 17 13:16:59 1989
  19. PATH=/bin:/usr/bin:/usr/ucb ; export PATH
  20. if test -f 'patches05e' -a "${1}" != "-c" ; then 
  21.   echo shar: Will not clobber existing file \"'patches05e'\"
  22. else
  23. echo shar: Extracting \"'patches05e'\" \(54469 characters\)
  24. sed "s/^X//" >'patches05e' <<'END_OF_FILE'
  25. X*** src/Old/makedefs.c    Sun Oct 15 18:43:44 1989
  26. X--- src/makedefs.c    Sat Oct 14 22:04:16 1989
  27. X***************
  28. X*** 2,8 ****
  29. X  /* NetHack may be freely redistributed.  See license for details. */
  30. X  /* makedefs.c - NetHack version 3.0 */
  31. X  
  32. X! #define MAKEDEFS_C
  33. X  
  34. X  #define EXTERN_H
  35. X  #include    "config.h"
  36. X--- 2,8 ----
  37. X  /* NetHack may be freely redistributed.  See license for details. */
  38. X  /* makedefs.c - NetHack version 3.0 */
  39. X  
  40. X! #define MAKEDEFS_C 1    /* needs to be defined to 1 for Mac */
  41. X  
  42. X  #define EXTERN_H
  43. X  #include    "config.h"
  44. X***************
  45. X*** 52,57 ****
  46. X--- 52,59 ----
  47. X  # define DATA_FILE     "auxil:data"
  48. X  # define RUMOR_FILE     "auxil:rumors"
  49. X  #else
  50. X+ # ifndef MACOS
  51. X+ /* construct definitions of object constants */
  52. X  # define MONST_FILE     "../include/pm.h"
  53. X  # define ONAME_FILE     "../include/onames.h"
  54. X  # define TRAP_FILE     "../include/trap.h"
  55. X***************
  56. X*** 58,68 ****
  57. X--- 60,93 ----
  58. X  # define DATE_FILE     "../include/date.h"
  59. X  # define DATA_FILE     "../auxil/data"
  60. X  # define RUMOR_FILE     "../auxil/rumors"
  61. X+ # else
  62. X+ /*****
  63. X+  * MAC OS uses ':' to separate dir's and filenames.
  64. X+  * The following (partial) pathnames assume the makedefs program
  65. X+  * runs in the same directory as the include and auxil directories
  66. X+  *****/
  67. X+ # define MONST_FILE    ":include:pm.h"
  68. X+ # define ONAME_FILE    ":include:onames.h"
  69. X+ # define TRAP_FILE    ":include:trap.h"
  70. X+ # define DATE_FILE    ":include:date.h"
  71. X+ # define DATA_FILE    ":auxil:data"
  72. X+ # define RUMOR_FILE    ":auxil:rumors"
  73. X+ #  ifdef AZTEC
  74. X+ #define    perror(x)    Printf(x)
  75. X+ #include "Controls.h"
  76. X+ #  else
  77. X+ #include "ControlMgr.h"
  78. X+ #  endif
  79. X+ # endif
  80. X  #endif
  81. X  
  82. X+ 
  83. X  char    in_line[256];
  84. X  extern char *gets P((char *));
  85. X  void do_objs(), do_traps(), do_data(), do_date(), do_permonst(), do_rumors();
  86. X+ #ifdef SMALLDATA
  87. X+ void do_monst(), save_resource();
  88. X+ #endif
  89. X  char *limit P((char *,BOOLEAN_P));
  90. X  FILE *_freopen();
  91. X  
  92. X***************
  93. X*** 72,80 ****
  94. X  char    *argv[];
  95. X  {
  96. X      char    *option;
  97. X! 
  98. X      if(argc == 2) {
  99. X          option = argv[1];
  100. X          switch (option[1]) {
  101. X  
  102. X          case 'o':
  103. X--- 97,164 ----
  104. X  char    *argv[];
  105. X  {
  106. X      char    *option;
  107. X! #ifdef MACOS
  108. X!     DialogPtr    dialog;
  109. X!     char    params[3], *options;
  110. X!     short    itemHit, lastItem, type;
  111. X!     Rect    box;
  112. X!     ControlHandle    theControl;
  113. X!     GrafPtr    oldPort;
  114. X! 
  115. X! #define    OK_BUTTON    1
  116. X! #define    CANCEL_BUTTON    2
  117. X! #define    FIRST_RADIO_BUTTON    3
  118. X! #define    ON    1
  119. X! #define    OFF    0
  120. X! 
  121. X!     /* standard Mac initialization */
  122. X!     InitGraf(&MAINGRAFPORT);
  123. X!     
  124. X!     InitFonts();
  125. X!     InitWindows();
  126. X!     InitMenus();
  127. X!     InitCursor();
  128. X!     FlushEvents(everyEvent,0);
  129. X!     InitDialogs(NULL);
  130. X!     
  131. X!     params[0] = '-';
  132. X!     options = "DVPRTOM";
  133. X!     dialog = GetNewDialog(200, 0L, (WindowPtr) -1);
  134. X!     GetPort(&oldPort);
  135. X!     SetPort(dialog);
  136. X!     GetDItem(dialog, OK_BUTTON, &type, &theControl, &box);
  137. X!     LocalToGlobal(&box.top);
  138. X!     LocalToGlobal(&box.bottom);
  139. X!     SetPort(oldPort);
  140. X!     PenSize(3, 3);
  141. X!     InsetRect(&box, -4, -4);
  142. X!     FrameRoundRect(&box, 16, 16);
  143. X!     PenSize(1, 1);
  144. X!     itemHit = 0;
  145. X!     do {
  146. X!         lastItem = itemHit;
  147. X!         ModalDialog(NULL, &itemHit);
  148. X!         if (itemHit != lastItem && itemHit > CANCEL_BUTTON) {
  149. X!             if (lastItem) {
  150. X!                 GetDItem(dialog, lastItem, &type,
  151. X!                         &theControl, &box);
  152. X!                 SetCtlValue(theControl, OFF);
  153. X!             }
  154. X!             params[1] = options[itemHit - FIRST_RADIO_BUTTON];
  155. X!             GetDItem(dialog, itemHit, &type, &theControl, &box);
  156. X!             SetCtlValue(theControl, ON);
  157. X!         }
  158. X!     } while (itemHit >= FIRST_RADIO_BUTTON);
  159. X!     DisposDialog(dialog);
  160. X!     argc = 1;
  161. X!     if (itemHit == OK_BUTTON && lastItem >= FIRST_RADIO_BUTTON) {
  162. X!         argc = 2;
  163. X!         option = params;
  164. X!     
  165. X! #else
  166. X      if(argc == 2) {
  167. X          option = argv[1];
  168. X+ #endif
  169. X          switch (option[1]) {
  170. X  
  171. X          case 'o':
  172. X***************
  173. X*** 99,107 ****
  174. X          case 'r':
  175. X          case 'R':    do_rumors();
  176. X                  break;
  177. X  
  178. X          default:
  179. X!                 (void) fprintf(stderr, "Unknown option '%c'.\n", option[1]);
  180. X                  (void) fflush(stderr);
  181. X                  exit(1);
  182. X          }
  183. X--- 183,198 ----
  184. X          case 'r':
  185. X          case 'R':    do_rumors();
  186. X                  break;
  187. X+ #if defined(SMALLDATA) && defined(MACOS)
  188. X+         case 'm':
  189. X+         case 'M':    do_monst();
  190. X+                 break;
  191. X+         
  192. X+ #endif    /* SMALLDATA && MACOS */
  193. X  
  194. X          default:
  195. X!                 (void) fprintf(stderr,
  196. X!                     "Unknown option '%c'.\n", option[1]);
  197. X                  (void) fflush(stderr);
  198. X                  exit(1);
  199. X          }
  200. X***************
  201. X*** 217,224 ****
  202. X--- 308,320 ----
  203. X      }
  204. X      Printf("/*\tSCCS Id: @(#)date.h\t3.0\t88/11/20 */\n\n");
  205. X  
  206. X+ #ifdef KR1ED
  207. X      (void) time(&clock);
  208. X      Strcpy(cbuf, ctime(&clock));
  209. X+ #else
  210. X+     (void) time((time_t *)&clock);
  211. X+     Strcpy(cbuf, ctime((time_t *)&clock));
  212. X+ #endif
  213. X      for(c = cbuf; *c != '\n'; c++);    *c = 0; /* strip off the '\n' */
  214. X      Printf("const char datestring[] = \"%s\";\n", cbuf);
  215. X  
  216. X***************
  217. X*** 352,358 ****
  218. X          /* make sure probabilities add up to 1000 */
  219. X          if(objects[i].oc_olet != let) {
  220. X              if (sum && sum != 1000) {
  221. X!                 (void) fprintf(stderr, "prob error for %c (%d%%)", let, sum);
  222. X                  (void) fflush(stderr);
  223. X                  sumerr = TRUE;
  224. X              }
  225. X--- 448,455 ----
  226. X          /* make sure probabilities add up to 1000 */
  227. X          if(objects[i].oc_olet != let) {
  228. X              if (sum && sum != 1000) {
  229. X!                 (void) fprintf(stderr,
  230. X!                     "prob error for %c (%d%%)", let, sum);
  231. X                  (void) fflush(stderr);
  232. X                  sumerr = TRUE;
  233. X              }
  234. X***************
  235. X*** 381,387 ****
  236. X              case GEM_SYM:
  237. X              /* avoid trouble with stupid C preprocessors */
  238. X              if(objects[i].oc_material == GLASS) {
  239. X!                 Printf("/* #define\t%s\t%d */\n", objects[i].oc_name, i);
  240. X                  continue;
  241. X              }
  242. X              default:
  243. X--- 478,485 ----
  244. X              case GEM_SYM:
  245. X              /* avoid trouble with stupid C preprocessors */
  246. X              if(objects[i].oc_material == GLASS) {
  247. X!                 Printf("/* #define\t%s\t%d */\n",
  248. X!                             objects[i].oc_name, i);
  249. X                  continue;
  250. X              }
  251. X              default:
  252. X***************
  253. X*** 451,453 ****
  254. X--- 549,651 ----
  255. X  }
  256. X  # endif
  257. X  #endif /* MSDOS */
  258. X+ 
  259. X+ #if defined(SMALLDATA) && defined(MACOS)
  260. X+ void
  261. X+ do_monst()
  262. X+ {
  263. X+     Handle    data;
  264. X+     short i,j;
  265. X+     pmstr    *pmMonst;
  266. X+     
  267. X+     for(i = 0; mons[i].mlet; i++) {
  268. X+         ;
  269. X+     }
  270. X+     i++;
  271. X+     
  272. X+     /*
  273. X+      * convert to struct where character arrays instead of pointers to
  274. X+      * strings are used
  275. X+      */
  276. X+     pmMonst = (pmstr *)NewPtr(i*sizeof(struct pmstr));
  277. X+     for (j = 0; j < i; j++) {
  278. X+         Strcpy(pmMonst[j].mname, mons[j].mname);
  279. X+         BlockMove(&(mons[j].mlet), &(pmMonst[j].pmp.mlet),
  280. X+                 (long)sizeof(struct pmpart));
  281. X+     }
  282. X+     
  283. X+     PtrToHand((Ptr)pmMonst, &data, (long)(i * sizeof(struct pmstr)));
  284. X+     save_resource(data);
  285. X+     DisposHandle(data);
  286. X+ }
  287. X+ 
  288. X+ 
  289. X+ void
  290. X+ save_resource(data)
  291. X+ Handle    data;
  292. X+ {
  293. X+     SFReply    reply;
  294. X+     short    refNum,error;
  295. X+     Str255    name;
  296. X+     ResType    theType;
  297. X+     Handle    theRes;
  298. X+     short    findNamedFile();
  299. X+ #define MONST_DATA_ID    101
  300. X+ 
  301. X+     strcpy((char *)&name[0], "\014Nethack.rsrc");
  302. X+     if (findNamedFile(&name[1], 0, &reply)) {
  303. X+         strncpy((char *)&name[0],(char *)&reply.fName[1], reply.fName[0]);
  304. X+         name[reply.fName[0]] = '\0';
  305. X+         if ((refNum = OpenResFile(name)) != -1) {
  306. X+         if (ResError() == noErr) {
  307. X+             theType = HACK_DATA;
  308. X+             strcpy((char *)&name[0], "\012MONST_DATA");
  309. X+             error = CurResFile();
  310. X+             if (theRes = GetResource(theType, MONST_DATA_ID)) {
  311. X+             RmveResource(theRes);
  312. X+             error = ResError();
  313. X+             if (error == noErr) {
  314. X+                 DisposHandle(theRes);
  315. X+                 UpdateResFile(refNum);
  316. X+                 error = ResError();
  317. X+                 if (error != noErr)
  318. X+                 SysBeep(1);
  319. X+             } else {
  320. X+                 Printf("Couldn't remove old copy of data resource.");
  321. X+                 return;
  322. X+             }
  323. X+             } else if (ResError() != resNotFound && ResError() != noErr) {
  324. X+             SysBeep(1);
  325. X+             Printf("Resource file is protected.");
  326. X+             return;
  327. X+             }
  328. X+             AddResource(data, theType, MONST_DATA_ID, name);
  329. X+             error = ResError();
  330. X+             if (error != noErr) {
  331. X+             SysBeep(1);
  332. X+             Printf("Couldn't add data resource.");
  333. X+             } else {
  334. X+             WriteResource(data);
  335. X+             error = ResError();
  336. X+             if (error != noErr) {
  337. X+                 SysBeep(1);
  338. X+                 Printf("Couldn't write data resource.");
  339. X+             }
  340. X+             }
  341. X+             CloseResFile(refNum);
  342. X+             if (ResError() != noErr) {
  343. X+             SysBeep(1);
  344. X+             Printf("Couldn't close resource file.");
  345. X+             }
  346. X+         }
  347. X+         }
  348. X+     }
  349. X+ }
  350. X+ # if defined(AZTEC) || defined(THINKC4)
  351. X+ int
  352. X+ getpid()
  353. X+ {
  354. X+     return 1;
  355. X+ }
  356. X+ # endif
  357. X+ #endif    /* SMALLDATA && MACOS */
  358. X*** src/Old/makemon.c    Sun Oct 15 18:44:24 1989
  359. X--- src/makemon.c    Sat Oct 14 23:23:07 1989
  360. X***************
  361. X*** 522,527 ****
  362. X--- 522,528 ----
  363. X          case S_LEPRECHAUN:
  364. X              mtmp->msleep = 1;
  365. X              break;
  366. X+         case S_JABBERWOCK:
  367. X          case S_NYMPH:
  368. X              if(rn2(5) && !u.uhave_amulet) mtmp->msleep = 1;
  369. X              break;
  370. X***************
  371. X*** 658,691 ****
  372. X      return 1;
  373. X  }
  374. X  
  375. X! void
  376. X! rloc(mtmp)
  377. X  struct monst *mtmp;
  378. X  {
  379. X-     register int tx, ty;
  380. X- 
  381. X  #ifdef WORM        /* do not relocate worms */
  382. X      if(mtmp->wormno && mtmp->mx) return;
  383. X  #endif
  384. X-     /* if the wiz teleports away to heal, try the up staircase,
  385. X-        to block the player's escaping before he's healed */
  386. X-     if(!mtmp->iswiz || !goodpos(tx = xupstair, ty = yupstair, mtmp->data))
  387. X-        do {
  388. X-         tx = rn1(COLNO-3,2);
  389. X-         ty = rn2(ROWNO);
  390. X-        } while(!goodpos(tx,ty,mtmp->data));
  391. X      if(mtmp->mx != 0 && mtmp->my != 0)
  392. X          remove_monster(mtmp->mx, mtmp->my);
  393. X!     place_monster(mtmp, tx, ty);
  394. X      if(u.ustuck == mtmp){
  395. X          if(u.uswallow) {
  396. X!             u.ux = tx;
  397. X!             u.uy = ty;
  398. X              docrt();
  399. X          } else    u.ustuck = 0;
  400. X      }
  401. X      pmon(mtmp);
  402. X      set_apparxy(mtmp);
  403. X  }
  404. X  
  405. X  static int
  406. X--- 659,719 ----
  407. X      return 1;
  408. X  }
  409. X  
  410. X! static void
  411. X! rloc_to(mtmp, x, y)
  412. X  struct monst *mtmp;
  413. X+ register int x,y;
  414. X  {
  415. X  #ifdef WORM        /* do not relocate worms */
  416. X      if(mtmp->wormno && mtmp->mx) return;
  417. X  #endif
  418. X      if(mtmp->mx != 0 && mtmp->my != 0)
  419. X          remove_monster(mtmp->mx, mtmp->my);
  420. X!     place_monster(mtmp, x, y);
  421. X      if(u.ustuck == mtmp){
  422. X          if(u.uswallow) {
  423. X!             u.ux = x;
  424. X!             u.uy = y;
  425. X              docrt();
  426. X          } else    u.ustuck = 0;
  427. X      }
  428. X      pmon(mtmp);
  429. X      set_apparxy(mtmp);
  430. X+ }
  431. X+ 
  432. X+ void
  433. X+ rloc(mtmp)
  434. X+ struct monst *mtmp;
  435. X+ {
  436. X+     register int x, y;
  437. X+ 
  438. X+     /* if the wiz teleports away to heal, try the up staircase,
  439. X+        to block the player's escaping before he's healed */
  440. X+     if(!mtmp->iswiz || !goodpos(x = xupstair, y = yupstair, mtmp->data))
  441. X+        do {
  442. X+         x = rn1(COLNO-3,2);
  443. X+         y = rn2(ROWNO);
  444. X+        } while(!goodpos(x,y,mtmp->data));
  445. X+     rloc_to(mtmp, x, y);
  446. X+ }
  447. X+ 
  448. X+ void
  449. X+ vloc(mtmp)
  450. X+ struct monst *mtmp;
  451. X+ {
  452. X+     register struct mkroom *croom;
  453. X+     register int x, y;
  454. X+ 
  455. X+     for(croom = &rooms[0]; croom->hx >= 0; croom++)
  456. X+         if(croom->rtype == VAULT) {
  457. X+         x = rn2(2) ? croom->lx : croom->hx;
  458. X+         y = rn2(2) ? croom->ly : croom->hy;
  459. X+         if(goodpos(x, y, mtmp->data)) {
  460. X+             rloc_to(mtmp, x, y);
  461. X+             return;
  462. X+         }
  463. X+         }
  464. X+     rloc(mtmp);
  465. X  }
  466. X  
  467. X  static int
  468. X*** src/Old/mhitm.c    Sun Oct 15 18:45:23 1989
  469. X--- src/mhitm.c    Sun Oct 15 17:25:06 1989
  470. X***************
  471. X*** 453,459 ****
  472. X          }
  473. X          break;
  474. X          case AD_SLEE:
  475. X!         if(!resists_sleep(pd) && !magr->mcan && vis && !mdef->msleep) {
  476. X              pline("%s falls asleep.", Monnam(mdef));
  477. X              mdef->msleep = 1;
  478. X          }
  479. X--- 453,460 ----
  480. X          }
  481. X          break;
  482. X          case AD_SLEE:
  483. X!         if(!resists_sleep(pd) && !magr->mcan && vis && !mdef->msleep
  484. X!                             && !mdef->mfroz) {
  485. X              pline("%s falls asleep.", Monnam(mdef));
  486. X              mdef->msleep = 1;
  487. X          }
  488. X*** src/Old/mkobj.c    Sun Oct 15 18:47:44 1989
  489. X--- src/mkobj.c    Fri Oct  6 18:42:51 1989
  490. X***************
  491. X*** 239,245 ****
  492. X  #endif
  493. X          break;
  494. X      case FOOD_SYM:
  495. X!         OEATEN(otmp) = 0L;
  496. X          if(otmp->otyp == CORPSE) {
  497. X              /* overridden by mkcorpstat() */
  498. X              do otmp->corpsenm = rndmonnum();
  499. X--- 239,245 ----
  500. X  #endif
  501. X          break;
  502. X      case FOOD_SYM:
  503. X!         otmp->oeaten = FALSE;
  504. X          if(otmp->otyp == CORPSE) {
  505. X              /* overridden by mkcorpstat() */
  506. X              do otmp->corpsenm = rndmonnum();
  507. X***************
  508. X*** 574,579 ****
  509. X--- 574,586 ----
  510. X  register struct obj *otmp;
  511. X  {
  512. X      return(objects[otmp->otyp].oc_material == COPPER);
  513. X+ }
  514. X+ 
  515. X+ boolean
  516. X+ OBJ_AT(x, y)
  517. X+ int x, y;
  518. X+ {
  519. X+     return(level.objects[x][y] != (struct obj *)0);
  520. X  }
  521. X  #endif
  522. X  
  523. X*** src/Old/mon.c    Sun Oct 15 18:48:23 1989
  524. X--- src/mon.c    Sun Oct 15 17:25:11 1989
  525. X***************
  526. X*** 2,7 ****
  527. X--- 2,11 ----
  528. X  /* Copyright (c) Stichting Mathematisch Centrum, Amsterdam, 1985. */
  529. X  /* NetHack may be freely redistributed.  See license for details. */
  530. X  
  531. X+ #ifdef MICROPORT_BUG
  532. X+ #define MKROOM_H
  533. X+ #endif
  534. X+ 
  535. X  #include "hack.h"
  536. X  #include "mfndpos.h"
  537. X  #ifdef NAMED_ITEMS
  538. X***************
  539. X*** 174,185 ****
  540. X            inpool = is_pool(mtmp->mx,mtmp->my);
  541. X            iseel = mtmp->data->mlet == S_EEL;
  542. X            isgremlin = mtmp->data->mlet == S_GREMLIN;
  543. X            infountain = IS_FOUNTAIN(levl[mtmp->mx][mtmp->my].typ);
  544. X          /* Gremlin multiplying won't go on forever since the hit points
  545. X           * keep going down, and when it gets to 1 hit point the clone
  546. X           * function will fail.
  547. X           */
  548. X!           if((inpool || infountain) && isgremlin && rn2(3)) {
  549. X              struct monst *mtmp2 = clone_mon(mtmp);
  550. X  
  551. X              if (mtmp2) {
  552. X--- 178,195 ----
  553. X            inpool = is_pool(mtmp->mx,mtmp->my);
  554. X            iseel = mtmp->data->mlet == S_EEL;
  555. X            isgremlin = mtmp->data->mlet == S_GREMLIN;
  556. X+ #ifdef FOUNTAINS
  557. X            infountain = IS_FOUNTAIN(levl[mtmp->mx][mtmp->my].typ);
  558. X+ #endif
  559. X          /* Gremlin multiplying won't go on forever since the hit points
  560. X           * keep going down, and when it gets to 1 hit point the clone
  561. X           * function will fail.
  562. X           */
  563. X!           if((inpool
  564. X! #ifdef FOUNTAINS
  565. X!                  || infountain
  566. X! #endif
  567. X!                       ) && isgremlin && rn2(3)) {
  568. X              struct monst *mtmp2 = clone_mon(mtmp);
  569. X  
  570. X              if (mtmp2) {
  571. X***************
  572. X*** 819,825 ****
  573. X          if(!cansee(mtmp->mx,mtmp->my)) You("destroy it!");
  574. X          else {
  575. X          You("destroy %s!",
  576. X!             mtmp->mtame ? a_monnam(mtmp, "poor") : mon_nam(mtmp));
  577. X          }
  578. X      }
  579. X  
  580. X--- 829,835 ----
  581. X          if(!cansee(mtmp->mx,mtmp->my)) You("destroy it!");
  582. X          else {
  583. X          You("destroy %s!",
  584. X!             mtmp->mtame ? a2_monnam(mtmp, "poor") : mon_nam(mtmp));
  585. X          }
  586. X      }
  587. X  
  588. X***************
  589. X*** 1155,1161 ****
  590. X      if(cansee(mtmp->mx,mtmp->my) &&
  591. X          (!Stealth || (mtmp->data == &mons[PM_ETTIN] && rn2(10))) &&
  592. X          (!(mtmp->data->mlet == S_NYMPH
  593. X!            || mtmp->data->mlet == S_LEPRECHAUN) || !rn2(50)) &&
  594. X          (Aggravate_monster ||
  595. X           (mtmp->data->mlet == S_DOG || mtmp->data->mlet == S_HUMAN) ||
  596. X          (!rn2(7) && !mtmp->mimic))) {
  597. X--- 1165,1172 ----
  598. X      if(cansee(mtmp->mx,mtmp->my) &&
  599. X          (!Stealth || (mtmp->data == &mons[PM_ETTIN] && rn2(10))) &&
  600. X          (!(mtmp->data->mlet == S_NYMPH
  601. X!             || mtmp->data == &mons[PM_JABBERWOCK]
  602. X!             || mtmp->data->mlet == S_LEPRECHAUN) || !rn2(50)) &&
  603. X          (Aggravate_monster ||
  604. X           (mtmp->data->mlet == S_DOG || mtmp->data->mlet == S_HUMAN) ||
  605. X          (!rn2(7) && !mtmp->mimic))) {
  606. X*** src/Old/monmove.c    Sun Oct 15 18:49:29 1989
  607. X--- src/monmove.c    Fri Oct 13 21:26:40 1989
  608. X***************
  609. X*** 108,115 ****
  610. X  int x, y;
  611. X  struct monst *mtmp;
  612. X  {
  613. X      if (mtmp->isshk || mtmp->isgd || mtmp->iswiz || !mtmp->mcansee ||
  614. X!             mtmp->data->mlet == S_HUMAN || mtmp->mpeaceful)
  615. X          return(FALSE);
  616. X      return(
  617. X  #ifdef ELBERETH
  618. X--- 108,120 ----
  619. X  int x, y;
  620. X  struct monst *mtmp;
  621. X  {
  622. X+     /* Note: minotaurs must be immune to scare monster to avoid abuse
  623. X+      * from creating them and taking their wands, then polymorphing 60
  624. X+      * or so wands to get wishing...
  625. X+      */
  626. X      if (mtmp->isshk || mtmp->isgd || mtmp->iswiz || !mtmp->mcansee ||
  627. X!             mtmp->data->mlet == S_HUMAN || mtmp->mpeaceful ||
  628. X!             mtmp->data == &mons[PM_MINOTAUR])
  629. X          return(FALSE);
  630. X      return(
  631. X  #ifdef ELBERETH
  632. X***************
  633. X*** 740,745 ****
  634. X--- 745,757 ----
  635. X  /*
  636. X   * Functions for encapsulation of level.monsters references.
  637. X   */
  638. X+ boolean
  639. X+ MON_AT(x, y)
  640. X+ int x, y;
  641. X+ {
  642. X+     return(level.monsters[x][y] != (struct monst *)0);
  643. X+ }
  644. X+ 
  645. X  void place_monster(mtmp, x, y)
  646. X  register struct monst *mtmp;
  647. X  int x, y;
  648. X*** src/Old/monst.c    Sun Oct 15 18:50:20 1989
  649. X--- src/monst.c    Sun Oct 15 17:15:18 1989
  650. X***************
  651. X*** 6,11 ****
  652. X--- 6,12 ----
  653. X   * function declarations for all of nethack
  654. X   */
  655. X  #define EXTERN_H
  656. X+ /* #define MAKEDEFS_C    1    /* define for Macs when compiling makedefs */
  657. X  #include "config.h"
  658. X  #include "permonst.h"
  659. X  #include "monsym.h"
  660. X***************
  661. X*** 19,25 ****
  662. X  #undef C
  663. X  #endif
  664. X  #ifdef TEXTCOLOR
  665. X! #include "decl.h"    /* for colors */
  666. X  #define C(color)    color
  667. X  #else
  668. X  #define C(color)
  669. X--- 20,26 ----
  670. X  #undef C
  671. X  #endif
  672. X  #ifdef TEXTCOLOR
  673. X! #include "color.h"
  674. X  #define C(color)    color
  675. X  #else
  676. X  #define C(color)
  677. X***************
  678. X*** 65,70 ****
  679. X--- 66,74 ----
  680. X   * unconsciously. Use your common sense.
  681. X   */
  682. X  
  683. X+ #if defined(MACOS) && !defined(MAKEDEFS_C)
  684. X+ struct permonst *mons;       /* for SMALLDATA - mons data stored in NetHack app */
  685. X+ #else
  686. X  #ifndef SPLITMON_2
  687. X  struct permonst mons[] = {
  688. X  /*      ants    */
  689. X***************
  690. X*** 253,259 ****
  691. X            { { AT_BITE, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  692. X            30, 300, 0, MS_SQAWK, M1_VSMALL | M1_POIS_RES | M1_TPORT |
  693. X            M1_TPORT_CONTROL | M1_STALK, 0, C(CYAN) },
  694. X! /*      j ??? */
  695. X  /*      kobolds         */
  696. X          { "kobold", S_KOBOLD,  0, 6, 7, 0, -2, (G_GENO | 1),
  697. X            { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  698. X--- 257,278 ----
  699. X            { { AT_BITE, AD_PHYS, 1, 7 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  700. X            30, 300, 0, MS_SQAWK, M1_VSMALL | M1_POIS_RES | M1_TPORT |
  701. X            M1_TPORT_CONTROL | M1_STALK, 0, C(CYAN) },
  702. X! /*      jellies         */
  703. X!         { "blue jelly", S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2),
  704. X!           { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  705. X!           2, 20, 0, MS_SILENT, M1_BIG | M1_NOEYES | M1_NOHANDS |
  706. X!           M1_POIS_RES | M1_COLD_RES,
  707. X!           M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(BLUE) },
  708. X!         { "spotted jelly", S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1),
  709. X!           { { AT_NONE, AD_ACID, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  710. X!           2, 20, 0, MS_SILENT,
  711. X!           M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS | M1_STON_RES,
  712. X!           M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(GREEN) },
  713. X!         { "ochre jelly", S_JELLY, 6, 3, 8, 20, 0, (G_GENO | 2),
  714. X!           { { AT_ENGL, AD_ACID, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  715. X!           2, 20, 0, MS_SILENT, M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS |
  716. X!           M1_STON_RES, M2_HOSTILE | M2_OMNIVORE | M2_NOLIMBS | M2_AMORPHOUS,
  717. X!       C(HI_GOLD)},
  718. X  /*      kobolds         */
  719. X          { "kobold", S_KOBOLD,  0, 6, 7, 0, -2, (G_GENO | 1),
  720. X            { { AT_WEAP, AD_PHYS, 1, 4 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  721. X***************
  722. X*** 814,820 ****
  723. X            M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(MAGENTA) },
  724. X          { "minotaur", S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN),
  725. X            { { AT_CLAW, AD_PHYS, 3, 10 }, { AT_CLAW, AD_PHYS, 3, 10 },
  726. X!             AT_BUTT, AD_PHYS, 2, 8, NO_ATTK, NO_ATTK},
  727. X            70, 700, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_HUMANOID,
  728. X            M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  729. X          { "owlbear", S_GIANT, 5, 12, 5, 0, 0, (G_GENO | 3),
  730. X--- 833,839 ----
  731. X            M1_COLLECT, M2_STRONG | M2_ROCKTHROW | M2_NASTY, C(MAGENTA) },
  732. X          { "minotaur", S_GIANT, 15, 15, 6, 0, 0, (G_GENO | G_NOGEN),
  733. X            { { AT_CLAW, AD_PHYS, 3, 10 }, { AT_CLAW, AD_PHYS, 3, 10 },
  734. X!             { AT_BUTT, AD_PHYS, 2, 8}, NO_ATTK, NO_ATTK},
  735. X            70, 700, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_HUMANOID,
  736. X            M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(BROWN) },
  737. X          { "owlbear", S_GIANT, 5, 12, 5, 0, 0, (G_GENO | 3),
  738. X***************
  739. X*** 828,849 ****
  740. X            40, 400, 0, MS_SILENT,
  741. X            M1_BIG | M1_ANIMAL | M1_FLY | M1_SEE_INVIS | M1_STALK,
  742. X            M2_WANDER | M2_HOSTILE | M2_STRONG, C(WHITE) },
  743. X! /*      Jellies         */
  744. X!         { "blue jelly", S_JELLY, 4, 0, 8, 10, 0, (G_GENO | 2),
  745. X!           { { AT_NONE, AD_COLD, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  746. X!           2, 20, 0, MS_SILENT, M1_BIG | M1_NOEYES | M1_NOHANDS |
  747. X!           M1_POIS_RES | M1_COLD_RES,
  748. X!           M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(BLUE) },
  749. X!         { "spotted jelly", S_JELLY, 5, 0, 8, 10, 0, (G_GENO | 1),
  750. X!           { { AT_NONE, AD_ACID, 0, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  751. X!           2, 20, 0, MS_SILENT,
  752. X!           M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS | M1_STON_RES,
  753. X!           M2_HOSTILE | M2_NOLIMBS | M2_OMNIVORE | M2_AMORPHOUS, C(GREEN) },
  754. X!         { "ochre jelly", S_JELLY, 6, 3, 8, 20, 0, (G_GENO | 2),
  755. X!           { { AT_ENGL, AD_ACID, 3, 6 }, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK },
  756. X!           2, 20, 0, MS_SILENT, M1_BIG | M1_NOEYES | M1_NOHANDS | M1_POIS |
  757. X!           M1_STON_RES, M2_HOSTILE | M2_OMNIVORE | M2_NOLIMBS | M2_AMORPHOUS,
  758. X!       C(HI_GOLD)},
  759. X  /*      Kops    */
  760. X  #ifdef KOPS
  761. X          { "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN),
  762. X--- 847,858 ----
  763. X            40, 400, 0, MS_SILENT,
  764. X            M1_BIG | M1_ANIMAL | M1_FLY | M1_SEE_INVIS | M1_STALK,
  765. X            M2_WANDER | M2_HOSTILE | M2_STRONG, C(WHITE) },
  766. X! /*      Jabberwock */
  767. X!         { "jabberwock", S_JABBERWOCK, 15, 12, -2, 50, 0, G_GENO,
  768. X!           { { AT_BITE, AD_PHYS, 2, 10 }, { AT_BITE, AD_PHYS, 2, 10 },
  769. X!           { AT_CLAW, AD_PHYS, 2, 10 }, { AT_CLAW, AD_PHYS, 2, 10 }, NO_ATTK },
  770. X!           60, 600, 0, MS_SILENT, M1_BIG | M1_ANIMAL | M1_COLLECT | M1_FLY,
  771. X!       M2_HOSTILE | M2_STRONG | M2_NASTY | M2_CARNIVORE, C(RED) },
  772. X  /*      Kops    */
  773. X  #ifdef KOPS
  774. X          { "Keystone Kop", S_KOP, 1, 6, 7, 10, 9, (G_GENO | G_LGROUP | G_NOGEN),
  775. X***************
  776. X*** 1453,1471 ****
  777. X        C(MAGENTA)},
  778. X  #endif
  779. X  #ifdef MAIL
  780. X- # ifdef VMS
  781. X-         { "broadcast daemon", S_DEMON, 56, 24, 10, 127, 0, (G_NOGEN | G_NOCORPSE),
  782. X-           { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0,
  783. X-           MS_SILENT, M1_NOPOLY | M1_FLY | M1_SWIM | M1_SEE_INVIS |
  784. X-           M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_SLEE_RES |
  785. X-           M1_STALK, M2_PEACEFUL, C(BRIGHT|BLUE) },
  786. X- # else
  787. X          { "mail daemon", S_DEMON, 56, 24, 10, 127, 0, (G_NOGEN | G_NOCORPSE),
  788. X            { NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK, NO_ATTK }, 30, 300, 0,
  789. X            MS_SILENT, M1_NOPOLY | M1_FLY | M1_SWIM | M1_SEE_INVIS |
  790. X            M1_HUMANOID | M1_POIS | M1_FIRE_RES | M1_COLD_RES | M1_SLEE_RES |
  791. X            M1_STALK, M2_PEACEFUL, C(BRIGHT|BLUE) },
  792. X- # endif
  793. X  /* Neither rain nor sleet nor gloom of night shall stay this courier... */
  794. X  #endif
  795. X          { "djinni", S_DEMON, 7, 12, 4, 30, 0, (G_NOGEN | G_NOCORPSE),
  796. X--- 1462,1472 ----
  797. X***************
  798. X*** 1566,1568 ****
  799. X--- 1567,1570 ----
  800. X            0, 0, 0, 0, 0, 0, C(0) }
  801. X  };
  802. X  #endif /* !SPLITMON_1 */
  803. X+ #endif /* !MAKEDEFS_C */
  804. X*** src/Old/music.c    Sun Oct 15 18:53:02 1989
  805. X--- src/music.c    Wed Oct 11 17:14:52 1989
  806. X***************
  807. X*** 223,229 ****
  808. X                      else {
  809. X                          You("destroy %s!",
  810. X                          mtmp->mtame ?
  811. X!                         a_monnam(mtmp, "poor") :
  812. X                          mon_nam(mtmp));
  813. X                      }
  814. X                      xkilled(mtmp,0);
  815. X--- 223,229 ----
  816. X                      else {
  817. X                          You("destroy %s!",
  818. X                          mtmp->mtame ?
  819. X!                         a2_monnam(mtmp, "poor") :
  820. X                          mon_nam(mtmp));
  821. X                      }
  822. X                      xkilled(mtmp,0);
  823. X*** src/Old/o_init.c    Sun Oct 15 18:53:21 1989
  824. X--- src/o_init.c    Sat Oct 14 22:09:03 1989
  825. X***************
  826. X*** 9,14 ****
  827. X--- 9,19 ----
  828. X   * in the objects array
  829. X   */
  830. X  #define TOTAL_OBJS    (NROFOBJECTS+2)
  831. X+ #ifdef MACOS
  832. X+ short *switches;    /* used to allow position independent loads of app */
  833. X+             /* by storing the number of the description string */
  834. X+             /* [at startup of the game] not the pointer to the string */
  835. X+ #endif
  836. X  
  837. X  const char obj_symbols[] = {
  838. X      ILLOBJ_SYM, AMULET_SYM, FOOD_SYM, WEAPON_SYM, TOOL_SYM,
  839. X***************
  840. X*** 70,75 ****
  841. X--- 75,83 ----
  842. X      int color;
  843. X  #endif /* TEXTCOLOR */
  844. X      int tmp;
  845. X+ #ifdef MACOS
  846. X+     short    sw;
  847. X+ #endif
  848. X  
  849. X      for(j=o_low; j <= o_high; j++) {
  850. X          i = o_low + rn2(j+1-o_low);
  851. X***************
  852. X*** 91,96 ****
  853. X--- 99,110 ----
  854. X              objects[j].oc_material = objects[i].oc_material;
  855. X              objects[i].oc_material = tmp;
  856. X          }
  857. X+ #ifdef MACOS
  858. X+         /* keep track of shuffling of object descriptions */
  859. X+         sw=switches[j];
  860. X+         switches[j]=switches[i];
  861. X+         switches[i]=sw;
  862. X+ #endif
  863. X      }
  864. X  }
  865. X  
  866. X***************
  867. X*** 142,165 ****
  868. X              j = last;
  869. X              if (let == GEM_SYM) {
  870. X                  while(--j > first)
  871. X-                 /* NOTE:  longest color name must be default */
  872. X                  if(!strcmp(objects[j].oc_name,"turquoise")) {
  873. X!                     if(rn2(2)) /* change from green? */
  874. X!                     Strcpy(objects[j].oc_descr, blue);
  875. X                  } else if (!strcmp(objects[j].oc_name,"aquamarine")) {
  876. X!                     if(rn2(2)) /* change from green? */
  877. X!                     Strcpy(objects[j].oc_descr, blue);
  878. X                  } else if (!strcmp(objects[j].oc_name,"fluorite")) {
  879. X                      switch (rn2(4)) { /* change from violet? */
  880. X                      case 0:  break;
  881. X                      case 1:
  882. X!                         Strcpy(objects[j].oc_descr, blue);
  883. X                          break;
  884. X                      case 2:
  885. X!                         Strcpy(objects[j].oc_descr, white);
  886. X                          break;
  887. X                      case 3:
  888. X!                         Strcpy(objects[j].oc_descr, green);
  889. X                          break;
  890. X                      }
  891. X                  }
  892. X--- 156,195 ----
  893. X              j = last;
  894. X              if (let == GEM_SYM) {
  895. X                  while(--j > first)
  896. X                  if(!strcmp(objects[j].oc_name,"turquoise")) {
  897. X!                     if(rn2(2)) { /* change from green? */
  898. X!                     objects[j].oc_descr = blue;
  899. X! #ifdef TEXTCOLOR
  900. X!                     objects[j].oc_color = BLUE;
  901. X! #endif
  902. X!                     }
  903. X                  } else if (!strcmp(objects[j].oc_name,"aquamarine")) {
  904. X!                     if(rn2(2)) { /* change from green? */
  905. X!                     objects[j].oc_descr = blue;
  906. X! #ifdef TEXTCOLOR
  907. X!                     objects[j].oc_color = BLUE;
  908. X! #endif
  909. X!                     }
  910. X                  } else if (!strcmp(objects[j].oc_name,"fluorite")) {
  911. X                      switch (rn2(4)) { /* change from violet? */
  912. X                      case 0:  break;
  913. X                      case 1:
  914. X!                         objects[j].oc_descr = blue;
  915. X! #ifdef TEXTCOLOR
  916. X!                         objects[j].oc_color = BLUE;
  917. X! #endif
  918. X                          break;
  919. X                      case 2:
  920. X!                         objects[j].oc_descr = white;
  921. X! #ifdef TEXTCOLOR
  922. X!                         objects[j].oc_color = WHITE;
  923. X! #endif
  924. X                          break;
  925. X                      case 3:
  926. X!                         objects[j].oc_descr = green;
  927. X! #ifdef TEXTCOLOR
  928. X!                         objects[j].oc_color = GREEN;
  929. X! #endif
  930. X                          break;
  931. X                      }
  932. X                  }
  933. X***************
  934. X*** 198,212 ****
  935. X--- 228,254 ----
  936. X  {
  937. X      register int i;
  938. X      unsigned int len;
  939. X+ #ifdef MACOS
  940. X+     char    *descr[TOTAL_OBJS];
  941. X+ #endif
  942. X      struct objclass *now = &objects[0];
  943. X      bwrite(fd, (genericptr_t)&now, sizeof now);
  944. X      bwrite(fd, (genericptr_t)bases, sizeof bases);
  945. X      bwrite(fd, (genericptr_t)disco, sizeof disco);
  946. X+ #ifdef MACOS
  947. X+     for (i = 0 ; i < TOTAL_OBJS; i++) {
  948. X+         descr[i] = objects[i].oc_descr;
  949. X+         objects[i].oc_descr = (char *)switches[i];
  950. X+     }
  951. X+ #endif
  952. X      bwrite(fd, (genericptr_t)objects, sizeof(struct objclass) * TOTAL_OBJS);
  953. X      /* as long as we use only one version of Hack we
  954. X         need not save oc_name and oc_descr, but we must save
  955. X         oc_uname for all objects */
  956. X      for(i=0; i < TOTAL_OBJS; i++) {
  957. X+ #ifdef MACOS
  958. X+         objects[i].oc_descr = descr[i];
  959. X+ #endif
  960. X          if(objects[i].oc_uname) {
  961. X              len = strlen(objects[i].oc_uname)+1;
  962. X              bwrite(fd, (genericptr_t)&len, sizeof len);
  963. X***************
  964. X*** 223,254 ****
  965. X      unsigned int len;
  966. X      struct objclass *then;
  967. X      long differ;
  968. X      mread(fd, (genericptr_t) &then, sizeof then);
  969. X      mread(fd, (genericptr_t) bases, sizeof bases);
  970. X      mread(fd, (genericptr_t) disco, sizeof disco);
  971. X      mread(fd, (genericptr_t) objects, sizeof(struct objclass) * TOTAL_OBJS);
  972. X! #if !defined(MSDOS) && !defined(M_XENIX)
  973. X!     differ = (genericptr_t)&objects[0] - (genericptr_t)then;
  974. X  #else
  975. X      differ = (long)&objects[0] - (long)then;
  976. X! #endif
  977. X      for(i=0; i < TOTAL_OBJS; i++) {
  978. X          if (objects[i].oc_name) {
  979. X! #if !defined(MSDOS) && !defined(M_XENIX)
  980. X              objects[i].oc_name += differ;
  981. X! #else
  982. X              objects[i].oc_name =
  983. X                  (char *)((long)(objects[i].oc_name) + differ);
  984. X! #endif
  985. X          }
  986. X          if (objects[i].oc_descr) {
  987. X! #if !defined(MSDOS) && !defined(M_XENIX)
  988. X              objects[i].oc_descr += differ;
  989. X! #else
  990. X              objects[i].oc_descr =
  991. X                  (char *)((long)(objects[i].oc_descr) + differ);
  992. X! #endif
  993. X          }
  994. X          if (objects[i].oc_uname) {
  995. X              mread(fd, (genericptr_t) &len, sizeof len);
  996. X              objects[i].oc_uname = (char *) alloc(len);
  997. X--- 265,325 ----
  998. X      unsigned int len;
  999. X      struct objclass *then;
  1000. X      long differ;
  1001. X+ #ifdef MACOS
  1002. X+     /* provides position-independent save & restore */
  1003. X+     /* by giving each object a number, keep track of it */
  1004. X+     /* when shuffled and save the numbers instead of the */
  1005. X+     /* description strings (which can change between */
  1006. X+     /* executions of the program) */
  1007. X+     /* On restore, the retrieved numbers are matched with the */
  1008. X+     /* numbers and object descriptions in the program */
  1009. X+     struct descr {
  1010. X+         char    *name,
  1011. X+                 *descr;
  1012. X+     } d[TOTAL_OBJS];
  1013. X+ 
  1014. X+     /* save the current object descriptions */
  1015. X+     for (i = 0; i < TOTAL_OBJS; i++) {
  1016. X+         d[i].name = objects[i].oc_name;
  1017. X+         d[i].descr = objects[i].oc_descr;
  1018. X+     }
  1019. X+ #endif
  1020. X      mread(fd, (genericptr_t) &then, sizeof then);
  1021. X      mread(fd, (genericptr_t) bases, sizeof bases);
  1022. X      mread(fd, (genericptr_t) disco, sizeof disco);
  1023. X      mread(fd, (genericptr_t) objects, sizeof(struct objclass) * TOTAL_OBJS);
  1024. X! #ifdef MACOS
  1025. X!     for (i = 0; i < TOTAL_OBJS; i++) {
  1026. X!         objects[i].oc_name = d[i].name;
  1027. X!         switches[i] = (short)objects[i].oc_descr;
  1028. X!         objects[i].oc_descr = d[switches[i]].descr;
  1029. X!     }
  1030. X  #else
  1031. X+ # if !defined(MSDOS) && !defined(M_XENIX)
  1032. X+     differ = (genericptr_t)&objects[0] - (genericptr_t)then;
  1033. X+ # else
  1034. X      differ = (long)&objects[0] - (long)then;
  1035. X! # endif
  1036. X! #endif    /* MACOS */
  1037. X      for(i=0; i < TOTAL_OBJS; i++) {
  1038. X+ #ifndef MACOS
  1039. X          if (objects[i].oc_name) {
  1040. X! # if !defined(MSDOS) && !defined(M_XENIX)
  1041. X              objects[i].oc_name += differ;
  1042. X! # else
  1043. X              objects[i].oc_name =
  1044. X                  (char *)((long)(objects[i].oc_name) + differ);
  1045. X! # endif
  1046. X          }
  1047. X          if (objects[i].oc_descr) {
  1048. X! # if !defined(MSDOS) && !defined(M_XENIX)
  1049. X              objects[i].oc_descr += differ;
  1050. X! # else
  1051. X              objects[i].oc_descr =
  1052. X                  (char *)((long)(objects[i].oc_descr) + differ);
  1053. X! # endif
  1054. X          }
  1055. X+ #endif /* MACOS */
  1056. X          if (objects[i].oc_uname) {
  1057. X              mread(fd, (genericptr_t) &len, sizeof len);
  1058. X              objects[i].oc_uname = (char *) alloc(len);
  1059. X*** src/Old/objects.c    Sun Oct 15 18:53:44 1989
  1060. X--- src/objects.c    Tue Oct  3 20:23:31 1989
  1061. X***************
  1062. X*** 10,16 ****
  1063. X  #include "obj.h"
  1064. X  #include "objclass.h"
  1065. X  #include "prop.h"
  1066. X- #include "decl.h"
  1067. X  #undef BOW
  1068. X  
  1069. X  /* objects have letter " % ) ( 0 _ ` [ ! ? / = * + . */
  1070. X--- 10,15 ----
  1071. X***************
  1072. X*** 19,24 ****
  1073. X--- 18,24 ----
  1074. X  #undef C
  1075. X  #endif
  1076. X  #ifdef TEXTCOLOR
  1077. X+ #include "color.h"
  1078. X  #define C(n)    n
  1079. X  #else
  1080. X  #define C(n)
  1081. X***************
  1082. X*** 49,54 ****
  1083. X--- 49,56 ----
  1084. X      name, NULL, NULL, 1,1,uk,0,tin, 0, FOOD_SYM, prob, delay, wt, \
  1085. X      nutrition/20 + 5, 0, 0, nutrition, C(color) }
  1086. X  
  1087. X+ /* all types of food (except tins & corpses) must have a delay of at least 1. */
  1088. X+ /* delay on corpses is computed and is weight dependant */
  1089. X  /* dog eats foods 0-4 but prefers tripe rations above all others */
  1090. X  /* fortune cookies can be read */
  1091. X  /* carrots improve your vision */
  1092. X***************
  1093. X*** 58,92 ****
  1094. X  
  1095. X      /* meat */
  1096. X  #ifdef TOLKIEN
  1097. X!     FOOD("tripe ration",       145, 1, 2, 0, 0, 200, BROWN),
  1098. X  #else
  1099. X!     FOOD("tripe ration",       150, 1, 2, 0, 0, 200, BROWN),
  1100. X  #endif
  1101. X!     FOOD("dead lizard",        35, 0, 1, 0, 0,  40, GREEN),
  1102. X!     FOOD("corpse",             0, 0, 0, 0, 0,   0, BROWN),
  1103. X!     FOOD("egg",            75, 0, 1, 1, 0,  80, WHITE),
  1104. X      /* fruits & veggies */
  1105. X!     FOOD("apple",            10, 0, 1, 0, 0,  50, RED),
  1106. X!     FOOD("orange",             7, 0, 1, 0, 0,  80, ORANGE_COLORED),
  1107. X!     FOOD("pear",             7, 0, 1, 0, 0,  50, GREEN+BRIGHT),
  1108. X!     FOOD("melon",             7, 0, 1, 0, 0, 100, GREEN+BRIGHT),
  1109. X!     FOOD("banana",             7, 0, 1, 0, 0,  80, YELLOW),
  1110. X!     FOOD("carrot",            15, 0, 1, 0, 0,  50, ORANGE_COLORED),
  1111. X!     FOOD("clove of garlic",      5, 0, 1, 0, 0,  40, WHITE),
  1112. X  #ifdef TUTTI_FRUTTI
  1113. X!     FOOD("slime mold",        75, 0, 1, 0, 0, 250, BROWN),
  1114. X  #else
  1115. X!     FOOD("slice of pizza",        75, 0, 1, 0, 0, 250, RED),
  1116. X  #endif
  1117. X      /* human food */
  1118. X!     FOOD("lump of royal jelly",  0, 0, 1, 0, 0, 200, YELLOW),
  1119. X!     FOOD("cream pie",        25, 0, 1, 0, 0, 100, WHITE),
  1120. X!     FOOD("candy bar",         7, 0, 1, 0, 0, 100, BROWN),
  1121. X!     FOOD("fortune cookie",        55, 0, 1, 0, 0,  40, BROWN),
  1122. X  #ifdef TOLKIEN
  1123. X!     FOOD("pancake",         25, 1, 1, 0, 0, 200, BROWN),
  1124. X!     FOOD("lembas wafer",        20, 1, 1, 0, 0, 800, WHITE+BRIGHT),
  1125. X!     FOOD("cram ration",        20, 1, 3, 0, 0, 600, HI_ORGANIC),
  1126. X      FOOD("food ration",       385, 5, 4, 0, 0, 800, HI_ORGANIC),
  1127. X  #else
  1128. X      FOOD("pancake",         40, 1, 1, 0, 0, 200, BROWN),
  1129. X--- 60,94 ----
  1130. X  
  1131. X      /* meat */
  1132. X  #ifdef TOLKIEN
  1133. X!     FOOD("tripe ration",       145, 2, 2, 0, 0, 200, BROWN),
  1134. X  #else
  1135. X!     FOOD("tripe ration",       150, 2, 2, 0, 0, 200, BROWN),
  1136. X  #endif
  1137. X!     FOOD("dead lizard",        35, 1, 1, 0, 0,  40, GREEN),
  1138. X!     FOOD("corpse",             0, 1, 0, 0, 0,   0, BROWN),
  1139. X!     FOOD("egg",            75, 1, 1, 1, 0,  80, WHITE),
  1140. X      /* fruits & veggies */
  1141. X!     FOOD("apple",            10, 1, 1, 0, 0,  50, RED),
  1142. X!     FOOD("orange",             7, 1, 1, 0, 0,  80, ORANGE_COLORED),
  1143. X!     FOOD("pear",             7, 1, 1, 0, 0,  50, GREEN+BRIGHT),
  1144. X!     FOOD("melon",             7, 1, 1, 0, 0, 100, GREEN+BRIGHT),
  1145. X!     FOOD("banana",             7, 1, 1, 0, 0,  80, YELLOW),
  1146. X!     FOOD("carrot",            15, 1, 1, 0, 0,  50, ORANGE_COLORED),
  1147. X!     FOOD("clove of garlic",      5, 1, 1, 0, 0,  40, WHITE),
  1148. X  #ifdef TUTTI_FRUTTI
  1149. X!     FOOD("slime mold",        75, 1, 1, 0, 0, 250, BROWN),
  1150. X  #else
  1151. X!     FOOD("slice of pizza",        75, 1, 1, 0, 0, 250, RED),
  1152. X  #endif
  1153. X      /* human food */
  1154. X!     FOOD("lump of royal jelly",  0, 1, 1, 0, 0, 200, YELLOW),
  1155. X!     FOOD("cream pie",        25, 1, 1, 0, 0, 100, WHITE),
  1156. X!     FOOD("candy bar",         7, 1, 1, 0, 0, 100, BROWN),
  1157. X!     FOOD("fortune cookie",        55, 1, 1, 0, 0,  40, BROWN),
  1158. X  #ifdef TOLKIEN
  1159. X!     FOOD("pancake",         25, 2, 1, 0, 0, 200, BROWN),
  1160. X!     FOOD("lembas wafer",        20, 2, 1, 0, 0, 800, WHITE+BRIGHT),
  1161. X!     FOOD("cram ration",        20, 3, 3, 0, 0, 600, HI_ORGANIC),
  1162. X      FOOD("food ration",       385, 5, 4, 0, 0, 800, HI_ORGANIC),
  1163. X  #else
  1164. X      FOOD("pancake",         40, 1, 1, 0, 0, 200, BROWN),
  1165. X*** src/Old/objnam.c    Sun Oct 15 18:54:30 1989
  1166. X--- src/objnam.c    Sun Oct 15 17:48:14 1989
  1167. X***************
  1168. X*** 5,11 ****
  1169. X  #include    "hack.h"
  1170. X  #include <ctype.h>    /* for isalpha() */
  1171. X  
  1172. X! #define    PREFIX    30
  1173. X  #define SCHAR_MAX 127
  1174. X  
  1175. X  /*    We want the player to be able to learn what key goes in what lock.  */
  1176. X--- 5,12 ----
  1177. X  #include    "hack.h"
  1178. X  #include <ctype.h>    /* for isalpha() */
  1179. X  
  1180. X! /* "an uncursed partly eaten guardian naga hatchling corpse" */
  1181. X! #define    PREFIX    50
  1182. X  #define SCHAR_MAX 127
  1183. X  
  1184. X  /*    We want the player to be able to learn what key goes in what lock.  */
  1185. X***************
  1186. X*** 503,509 ****
  1187. X          }
  1188. X          break;
  1189. X      case FOOD_SYM:
  1190. X!         if(OEATEN(obj))
  1191. X              Strcat(prefix, "partly eaten ");
  1192. X          if(obj->otyp == CORPSE) {
  1193. X              Strcat(prefix, mons[obj->corpsenm].mname);
  1194. X--- 504,510 ----
  1195. X          }
  1196. X          break;
  1197. X      case FOOD_SYM:
  1198. X!         if(obj->oeaten)
  1199. X              Strcat(prefix, "partly eaten ");
  1200. X          if(obj->otyp == CORPSE) {
  1201. X              Strcat(prefix, mons[obj->corpsenm].mname);
  1202. X***************
  1203. X*** 547,552 ****
  1204. X--- 548,578 ----
  1205. X      return(bp);
  1206. X  }
  1207. X  
  1208. X+ /*
  1209. X+  * Used if only one of a collection of objects is named (e.g. in eat.c).
  1210. X+  */
  1211. X+ 
  1212. X+ char *
  1213. X+ singular(otmp)
  1214. X+ register struct obj *otmp;
  1215. X+ {
  1216. X+     int savequan;
  1217. X+     char *nam;
  1218. X+ 
  1219. X+     /* Note: using xname for corpses will not give the monster type */
  1220. X+     if (otmp->otyp == CORPSE) {
  1221. X+         static char buf[31];
  1222. X+ 
  1223. X+         sprintf(buf, "%s corpse", mons[otmp->corpsenm].mname);
  1224. X+         return buf;
  1225. X+     }
  1226. X+     savequan = otmp->quan;
  1227. X+     otmp->quan = 1;
  1228. X+     nam = xname(otmp);
  1229. X+     otmp->quan = savequan;
  1230. X+     return nam;
  1231. X+ }
  1232. X+ 
  1233. X  /* used only in mthrowu.c (thitu) */
  1234. X  void
  1235. X  setan(str,buf)
  1236. X***************
  1237. X*** 725,732 ****
  1238. X          goto bottom;
  1239. X      }
  1240. X  
  1241. X!     /* fungus/fungi, homunculus/homunculi */
  1242. X!     if (!strcmp(spot-1, "us")) {
  1243. X          *(spot--) = (char)0;
  1244. X          *spot = 'i';
  1245. X          goto bottom;
  1246. X--- 751,758 ----
  1247. X          goto bottom;
  1248. X      }
  1249. X  
  1250. X!     /* fungus/fungi, homunculus/homunculi, but wumpuses */
  1251. X!     if (!strcmp(spot-1, "us") && strcmp(spot-6, "wumpus")) {
  1252. X          *(spot--) = (char)0;
  1253. X          *spot = 'i';
  1254. X          goto bottom;
  1255. X***************
  1256. X*** 1435,1441 ****
  1257. X      if (name) otmp = oname(otmp, name, 0);
  1258. X      otmp->owt = weight(otmp);
  1259. X      if (heavy) otmp->owt += 15;
  1260. X!     if (halfeaten && otmp->olet == FOOD_SYM) OEATEN(otmp) = 1;
  1261. X      return(otmp);
  1262. X  }
  1263. X  
  1264. X--- 1461,1467 ----
  1265. X      if (name) otmp = oname(otmp, name, 0);
  1266. X      otmp->owt = weight(otmp);
  1267. X      if (heavy) otmp->owt += 15;
  1268. X!     if (halfeaten && otmp->olet == FOOD_SYM) otmp->oeaten = TRUE;
  1269. X      return(otmp);
  1270. X  }
  1271. X  
  1272. X*** src/Old/options.c    Sun Oct 15 18:55:16 1989
  1273. X--- src/options.c    Sat Oct 14 21:52:05 1989
  1274. X***************
  1275. X*** 25,30 ****
  1276. X--- 25,34 ----
  1277. X      flags.confirm = TRUE;
  1278. X      flags.safe_dog = TRUE;
  1279. X      flags.silent =     flags.pickup = TRUE;
  1280. X+ #ifdef MACOS
  1281. X+     flags.standout = TRUE;
  1282. X+     flags.end_around = 3;    /* Mac display routines don't scroll */
  1283. X+ #endif
  1284. X  #ifdef TUTTI_FRUTTI
  1285. X      nmcpy(pl_fruit, objects[SLIME_MOLD].oc_name, PL_FSIZ);
  1286. X  #endif
  1287. X***************
  1288. X*** 693,699 ****
  1289. X          i = strlen(str);
  1290. X      }
  1291. X      if (*str)
  1292. X!         strcat(buf, str);
  1293. X      else
  1294. X          (void) page_line(str);    /* always returns 0 on "" */
  1295. X      return r;
  1296. X--- 697,703 ----
  1297. X          i = strlen(str);
  1298. X      }
  1299. X      if (*str)
  1300. X!         Strcat(buf, str);
  1301. X      else
  1302. X          (void) page_line(str);    /* always returns 0 on "" */
  1303. X      return r;
  1304. X*** src/Old/pager.c    Sun Oct 15 19:43:16 1989
  1305. X--- src/pager.c    Sat Oct 14 22:10:16 1989
  1306. X***************
  1307. X*** 16,21 ****
  1308. X--- 16,25 ----
  1309. X  #if defined(BSD) || defined(ULTRIX)
  1310. X  #include <sys/wait.h>
  1311. X  #endif
  1312. X+ #ifdef MACOS
  1313. X+ extern WindowPtr    HackWindow;
  1314. X+ extern short macflags;
  1315. X+ #endif
  1316. X  
  1317. X  static char hc = 0;
  1318. X  
  1319. X***************
  1320. X*** 35,48 ****
  1321. X      Strcpy(tmp,hackdir);
  1322. X      append_slash(tmp);
  1323. X      Strcat(tmp,DATAFILE);
  1324. X!     if(!(fp = fopen(tmp,"r")))
  1325. X  #else
  1326. X!     if(!(fp = fopen(DATAFILE, "r")))
  1327. X  #endif
  1328. X          pline("Cannot open data file!");
  1329. X      else {
  1330. X          coord    cc;
  1331. X          uchar    r;
  1332. X  
  1333. X          pline ("Specify unknown object by cursor? ");
  1334. X          q = ynq();
  1335. X--- 39,58 ----
  1336. X      Strcpy(tmp,hackdir);
  1337. X      append_slash(tmp);
  1338. X      Strcat(tmp,DATAFILE);
  1339. X!     fp = fopen(tmp,"r"));
  1340. X  #else
  1341. X!     fp = fopen(DATAFILE, "r");
  1342. X! #endif
  1343. X!     if(!fp)
  1344. X! #ifdef MACOS
  1345. X!         fp = openFile(DATAFILE);
  1346. X!     if (!fp)
  1347. X  #endif
  1348. X          pline("Cannot open data file!");
  1349. X      else {
  1350. X          coord    cc;
  1351. X          uchar    r;
  1352. X+         boolean oldverb = flags.verbose;
  1353. X  
  1354. X          pline ("Specify unknown object by cursor? ");
  1355. X          q = ynq();
  1356. X***************
  1357. X*** 59,69 ****
  1358. X--- 69,83 ----
  1359. X      selobj:
  1360. X              if(flags.verbose)
  1361. X              pline("Please move the cursor to an unknown object.");
  1362. X+             else
  1363. X+             pline("Pick an object.");
  1364. X              getpos(&cc, FALSE, "an unknown object");
  1365. X              if (cc.x < 0) {
  1366. X                  (void) fclose(fp); /* sweet@scubed */
  1367. X+                 flags.verbose = oldverb;
  1368. X                  return 0;
  1369. X              }
  1370. X+             flags.verbose = FALSE;
  1371. X              r = levl[cc.x][cc.y].scrsym;
  1372. X              if (!r || !levl[cc.x][cc.y].seen) r = ' ';
  1373. X          }
  1374. X***************
  1375. X*** 112,117 ****
  1376. X--- 126,132 ----
  1377. X              q = r;
  1378. X              if (index(quitchars, q)) {
  1379. X                  (void) fclose(fp); /* sweet@scubed */
  1380. X+                 flags.verbose = oldverb;
  1381. X                  return 0;
  1382. X              }
  1383. X          }
  1384. X***************
  1385. X*** 166,173 ****
  1386. X                  }
  1387. X                  }
  1388. X  #ifdef SPELLS
  1389. X!                 else
  1390. X!                 if (q == SPBOOK_SYM && OBJ_AT(cc.x, cc.y))
  1391. X                      pline("(spellbook)");
  1392. X  #endif
  1393. X  #ifdef STRONGHOLD
  1394. X--- 181,187 ----
  1395. X                  }
  1396. X                  }
  1397. X  #ifdef SPELLS
  1398. X!                 else if (q == SPBOOK_SYM && OBJ_AT(cc.x, cc.y))
  1399. X                      pline("(spellbook)");
  1400. X  #endif
  1401. X  #ifdef STRONGHOLD
  1402. X***************
  1403. X*** 178,185 ****
  1404. X                      pline("(raised drawbridge)");
  1405. X  #endif
  1406. X  #ifdef SINKS
  1407. X!                 else
  1408. X!                 if (r == showsyms.sink && q == defsyms.sink &&
  1409. X                  IS_SINK(levl[cc.x][cc.y].typ))
  1410. X                      pline("(sink)");
  1411. X  #endif
  1412. X--- 192,198 ----
  1413. X                      pline("(raised drawbridge)");
  1414. X  #endif
  1415. X  #ifdef SINKS
  1416. X!                 else if (r == showsyms.sink && q == defsyms.sink &&
  1417. X                  IS_SINK(levl[cc.x][cc.y].typ))
  1418. X                      pline("(sink)");
  1419. X  #endif
  1420. X***************
  1421. X*** 211,216 ****
  1422. X--- 224,230 ----
  1423. X                  pline("More info? ");
  1424. X                  if(yn() == 'y') {
  1425. X                      page_more(fp,1); /* does fclose() */
  1426. X+                     flags.verbose = oldverb;
  1427. X                      return 0;
  1428. X                  }
  1429. X              }
  1430. X***************
  1431. X*** 221,230 ****
  1432. X--- 235,246 ----
  1433. X                  goto selobj;
  1434. X              }
  1435. X              (void) fclose(fp);     /* kopper@psuvax1 */
  1436. X+             flags.verbose = oldverb;
  1437. X              return 0;
  1438. X              }
  1439. X          pline("I've never heard of such things.");
  1440. X          (void) fclose(fp);
  1441. X+         flags.verbose = oldverb;
  1442. X      }
  1443. X      return 0;
  1444. X  }
  1445. X***************
  1446. X*** 243,249 ****
  1447. X--- 259,271 ----
  1448. X      Strcat(tmp,CMDHELPFILE);
  1449. X      if(!(fp = fopen(tmp,"r"))) {
  1450. X  #else
  1451. X+ # ifdef MACOS
  1452. X+     if(!(fp = fopen(CMDHELPFILE, "r")))
  1453. X+         fp = openFile(CMDHELPFILE);
  1454. X+     if (!fp) {
  1455. X+ # else
  1456. X      if(!(fp = fopen(CMDHELPFILE, "r"))) {
  1457. X+ # endif
  1458. X  #endif
  1459. X          pline("Cannot open data file!");
  1460. X          return 0;
  1461. X***************
  1462. X*** 290,296 ****
  1463. X  /* make the paging of a file interruptible */
  1464. X  static int got_intrup;
  1465. X  
  1466. X! #if !defined(MSDOS) && !defined(TOS)
  1467. X  static int
  1468. X  intruph(){
  1469. X      (void) signal(SIGINT, (SIG_RET_TYPE) intruph);
  1470. X--- 312,318 ----
  1471. X  /* make the paging of a file interruptible */
  1472. X  static int got_intrup;
  1473. X  
  1474. X! #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS)
  1475. X  static int
  1476. X  intruph(){
  1477. X      (void) signal(SIGINT, (SIG_RET_TYPE) intruph);
  1478. X***************
  1479. X*** 309,315 ****
  1480. X  #if !defined(MSDOS) && !defined(MINIMAL_TERM)
  1481. X      register char *ep;
  1482. X  #endif
  1483. X! #if !defined(MSDOS) && !defined(TOS)
  1484. X      int (*prevsig)() = (int (*)())signal(SIGINT, (SIG_RET_TYPE) intruph);
  1485. X  #endif
  1486. X  #if defined(MSDOS) || defined(MINIMAL_TERM)
  1487. X--- 331,337 ----
  1488. X  #if !defined(MSDOS) && !defined(MINIMAL_TERM)
  1489. X      register char *ep;
  1490. X  #endif
  1491. X! #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS)
  1492. X      int (*prevsig)() = (int (*)())signal(SIGINT, (SIG_RET_TYPE) intruph);
  1493. X  #endif
  1494. X  #if defined(MSDOS) || defined(MINIMAL_TERM)
  1495. X***************
  1496. X*** 353,359 ****
  1497. X  ret:
  1498. X      free((genericptr_t) bufr);
  1499. X      (void) fclose(fp);
  1500. X! #if !defined(MSDOS) && !defined(TOS)
  1501. X      (void) signal(SIGINT, (SIG_RET_TYPE) prevsig);
  1502. X      got_intrup = 0;
  1503. X  #endif
  1504. X--- 375,381 ----
  1505. X  ret:
  1506. X      free((genericptr_t) bufr);
  1507. X      (void) fclose(fp);
  1508. X! #if !defined(MSDOS) && !defined(TOS) && !defined(MACOS)
  1509. X      (void) signal(SIGINT, (SIG_RET_TYPE) prevsig);
  1510. X      got_intrup = 0;
  1511. X  #endif
  1512. X***************
  1513. X*** 439,444 ****
  1514. X--- 461,469 ----
  1515. X      xputs(s); xputc('\n');
  1516. X  #else
  1517. X      (void) puts(s);
  1518. X+ # ifdef MACOS
  1519. X+     (void) putchar('\n');
  1520. X+ # endif
  1521. X  #endif
  1522. X      cury++;
  1523. X      return(0);
  1524. X***************
  1525. X*** 656,661 ****
  1526. X--- 681,694 ----
  1527. X  int
  1528. X  dohelp()
  1529. X  {
  1530. X+ #ifdef MACOS
  1531. X+     term_info    *t;
  1532. X+     
  1533. X+     macflags &= ~(fDoUpdate | fDoNonKeyEvt);
  1534. X+     t = (term_info *)GetWRefCon(HackWindow);
  1535. X+     SetVol((StringPtr)NULL,
  1536. X+         (t->auxFileVRefNum) ? t->auxFileVRefNum : t->recordVRefNum);
  1537. X+ #endif
  1538. X      help_menu();
  1539. X      if (!index(quitchars, hc)) {
  1540. X          switch(hc) {
  1541. X***************
  1542. X*** 673,678 ****
  1543. X--- 706,715 ----
  1544. X  #endif
  1545. X          }
  1546. X      }
  1547. X+ #ifdef MACOS
  1548. X+     macflags |= (fDoUpdate | fDoNonKeyEvt);
  1549. X+     SetVol((StringPtr)NULL, t->recordVRefNum);
  1550. X+ #endif
  1551. X      return 0;
  1552. X  }
  1553. X  
  1554. X***************
  1555. X*** 724,730 ****
  1556. X--- 761,778 ----
  1557. X      Strcat(tmp,fnam);
  1558. X      if ((f = fopen (tmp, "r")) == (FILE *) 0) {
  1559. X  #else
  1560. X+ # ifdef MACOS
  1561. X+     if ((f = fopen (fnam, "r")) == (FILE *) 0)
  1562. X+         f = openFile(fnam);
  1563. X+     /* refresh screen kluge */
  1564. X+     if (!f) {
  1565. X+         cls();
  1566. X+         docrt();
  1567. X+         clrlin();
  1568. X+         ValidRect(&(**(*HackWindow).visRgn).rgnBBox);
  1569. X+ # else
  1570. X      if ((f = fopen (fnam, "r")) == (FILE *) 0) {
  1571. X+ # endif
  1572. X  #endif
  1573. X          if(!silent) {
  1574. X              home(); perror (fnam); flags.toplin = 1;
  1575. X*** src/Old/panic.c    Sun Oct 15 19:43:46 1989
  1576. X--- src/panic.c    Sat Oct 14 22:11:30 1989
  1577. X***************
  1578. X*** 6,11 ****
  1579. X--- 6,12 ----
  1580. X   */
  1581. X  /* NetHack may be freely redistributed.  See license for details. */
  1582. X  
  1583. X+ /* #define MAKEDEFS_C    1   /* define for Macs */
  1584. X  #define NEED_VARARGS
  1585. X  #include    "config.h"
  1586. X  
  1587. X***************
  1588. X*** 12,17 ****
  1589. X--- 13,21 ----
  1590. X  #ifdef MSDOS
  1591. X  #undef exit
  1592. X  extern void exit P((int));
  1593. X+ #endif
  1594. X+ #ifdef AZTEC
  1595. X+ #define abort() exit()
  1596. X  #endif
  1597. X   
  1598. X  /*VARARGS1*/
  1599. X*** src/Old/pickup.c    Sun Oct 15 19:44:00 1989
  1600. X--- src/pickup.c    Wed Oct  4 13:57:43 1989
  1601. X***************
  1602. X*** 268,286 ****
  1603. X          }
  1604. X      lift_some:
  1605. X          if(inv_cnt() >= 52) {
  1606. X!             Your("knapsack cannot accommodate any more items.");
  1607. X!             if(obj->otyp == SCR_SCARE_MONSTER)
  1608. X!                 if(obj->spe) obj->spe = 0;
  1609. X!             break;
  1610. X          }
  1611. X-         addtobill(obj, TRUE);       /* sets obj->unpaid if necessary */
  1612. X-         freeobj(obj);
  1613. X-         if(Invisible) newsym(u.ux,u.uy);
  1614. X-         if(wt > -5) You("have a little trouble lifting");
  1615. X          { int pickquan = obj->quan;
  1616. X            int mergquan;
  1617. X            if(!Blind) obj->dknown = 1;
  1618. X-           obj = addinv(obj);    /* might merge it with other objects */
  1619. X            mergquan = obj->quan;
  1620. X            obj->quan = pickquan; /* to fool prinv() */
  1621. X            if(uwep && uwep == obj) mrg_to_wielded = TRUE;
  1622. X--- 268,284 ----
  1623. X          }
  1624. X      lift_some:
  1625. X          if(inv_cnt() >= 52) {
  1626. X!             Your("knapsack cannot accommodate any more items.");
  1627. X!             if(obj->otyp == SCR_SCARE_MONSTER)
  1628. X!                 if(obj->spe) obj->spe = 0;
  1629. X!             break;
  1630. X          }
  1631. X          { int pickquan = obj->quan;
  1632. X            int mergquan;
  1633. X+ 
  1634. X+           obj = pick_obj(obj);
  1635. X+           if(wt > -5) You("have a little trouble lifting");
  1636. X            if(!Blind) obj->dknown = 1;
  1637. X            mergquan = obj->quan;
  1638. X            obj->quan = pickquan; /* to fool prinv() */
  1639. X            if(uwep && uwep == obj) mrg_to_wielded = TRUE;
  1640. X***************
  1641. X*** 290,295 ****
  1642. X--- 288,303 ----
  1643. X          }
  1644. X          }
  1645. X      }
  1646. X+ }
  1647. X+ 
  1648. X+ struct obj *
  1649. X+ pick_obj(otmp)
  1650. X+ register struct obj *otmp;
  1651. X+ {
  1652. X+     addtobill(otmp, TRUE);       /* sets obj->unpaid if necessary */
  1653. X+     freeobj(otmp);
  1654. X+     if(Invisible) newsym(u.ux,u.uy);
  1655. X+     return(addinv(otmp));    /* might merge it with other objects */
  1656. X  }
  1657. X  
  1658. X  int
  1659. X*** src/Old/potion.c    Sun Oct 15 19:44:48 1989
  1660. X--- src/potion.c    Sat Oct 14 19:23:40 1989
  1661. X***************
  1662. X*** 74,79 ****
  1663. X--- 74,93 ----
  1664. X  }
  1665. X  
  1666. X  void
  1667. X+ make_vomiting(xtime, talk)
  1668. X+ long xtime;
  1669. X+ boolean talk;
  1670. X+ {
  1671. X+     long old = Vomiting;
  1672. X+ 
  1673. X+     if(!xtime && old)
  1674. X+         if(talk) You("feel much less nauseous now.");
  1675. X+ 
  1676. X+     Vomiting = xtime;
  1677. X+ }
  1678. X+ 
  1679. X+ 
  1680. X+ void
  1681. X  make_blinded(xtime, talk)
  1682. X  long xtime;
  1683. X  boolean talk;
  1684. X***************
  1685. X*** 168,173 ****
  1686. X--- 182,188 ----
  1687. X  
  1688. X      otmp = getobj(beverages, "drink");
  1689. X      if(!otmp) return(0);
  1690. X+     otmp->in_use = TRUE;        /* you've opened the stopper */
  1691. X      if(objects[otmp->otyp].oc_descr && !strcmp(objects[otmp->otyp].oc_descr, "smoky") && !rn2(13)) {
  1692. X          ghost_from_bottle();
  1693. X          useup(otmp);
  1694. X***************
  1695. X*** 473,479 ****
  1696. X              /* they went up a level */
  1697. X              if(dlevel > 1 && dlevel <= MAXLEVEL) { 
  1698. X                  You("rise up, through the ceiling!");
  1699. X!                 goto_level(dlevel-1, FALSE);
  1700. X              } else You("have an uneasy feeling.");
  1701. X              break;
  1702. X          }
  1703. X--- 488,494 ----
  1704. X              /* they went up a level */
  1705. X              if(dlevel > 1 && dlevel <= MAXLEVEL) { 
  1706. X                  You("rise up, through the ceiling!");
  1707. X!                 goto_level(dlevel-1, FALSE, FALSE);
  1708. X              } else You("have an uneasy feeling.");
  1709. X              break;
  1710. X          }
  1711. X*** src/Old/pray.c    Sun Oct 15 19:45:28 1989
  1712. X--- src/pray.c    Wed Oct 11 18:22:44 1989
  1713. X***************
  1714. X*** 655,661 ****
  1715. X      else {            /* exactly one warning */
  1716. X  #ifdef ALTARS
  1717. X          pline("The voice of %s booms out:  \"Thou hast angered me.\"",
  1718. X!                 a_gname());
  1719. X  #else
  1720. X          pline("A voice booms out:  \"Thou hast angered me.\"");
  1721. X  #endif
  1722. X--- 655,661 ----
  1723. X      else {            /* exactly one warning */
  1724. X  #ifdef ALTARS
  1725. X          pline("The voice of %s booms out:  \"Thou hast angered me.\"",
  1726. X!                 on_altar() ? a_gname() : u_gname());
  1727. X  #else
  1728. X          pline("A voice booms out:  \"Thou hast angered me.\"");
  1729. X  #endif
  1730. X***************
  1731. X*** 721,726 ****
  1732. X--- 721,729 ----
  1733. X  
  1734. X          if (otmp->corpsenm == PM_ACID_BLOB || (monstermoves <= otmp->age + 50))
  1735. X          value = monstr[otmp->corpsenm] + 1;
  1736. X+         if (otmp->oeaten)
  1737. X+         value =
  1738. X+             value * otmp->owt / mons[otmp->corpsenm].cwt / otmp->quan;
  1739. X  
  1740. X          if (is_human(mtmp)) { /* Human sacrifice! */
  1741. X  #ifdef POLYSELF
  1742. X*** src/Old/pri.c    Sun Oct 15 19:46:09 1989
  1743. X--- src/pri.c    Sat Oct 14 22:41:37 1989
  1744. X***************
  1745. X*** 22,28 ****
  1746. X  #endif
  1747. X  
  1748. X  /* This is the same logic used for "#define IBMXASCII" in file "termcap.c" */
  1749. X! #if !defined(AMIGA) && !defined(TOS)
  1750. X  # if defined(TERMLIB) || !(defined(DECRAINBOW) || defined(OS2))
  1751. X  #  define g_putch  (void) putchar
  1752. X  # endif
  1753. X--- 22,28 ----
  1754. X  #endif
  1755. X  
  1756. X  /* This is the same logic used for "#define IBMXASCII" in file "termcap.c" */
  1757. X! #if !defined(AMIGA)
  1758. X  # if defined(TERMLIB) || !(defined(DECRAINBOW) || defined(OS2))
  1759. X  #  define g_putch  (void) putchar
  1760. X  # endif
  1761. X***************
  1762. X*** 46,62 ****
  1763. X--- 46,78 ----
  1764. X      if(first) cls();
  1765. X      else {
  1766. X          curs(u.ustuck->mdx-1, u.ustuck->mdy+1);
  1767. X+ #ifdef MACOS
  1768. X+         puts("   ");
  1769. X+ #else
  1770. X          (void) fputs("   ", stdout);
  1771. X+ #endif
  1772. X          curx = u.ustuck->mdx+2;
  1773. X          curs(u.ustuck->mdx-1, u.ustuck->mdy+2);
  1774. X+ #ifdef MACOS
  1775. X+         puts("   ");
  1776. X+ #else
  1777. X          (void) fputs("   ", stdout);
  1778. X+ #endif
  1779. X          curx = u.ustuck->mdx+2;
  1780. X          curs(u.ustuck->mdx-1, u.ustuck->mdy+3);
  1781. X+ #ifdef MACOS
  1782. X+         puts("   ");
  1783. X+ #else
  1784. X          (void) fputs("   ", stdout);
  1785. X+ #endif
  1786. X          curx = u.ustuck->mdx+2;
  1787. X      }
  1788. X      curs(u.ux-1, u.uy+1);
  1789. X+ #ifdef MACOS
  1790. X+     puts("/-\\");
  1791. X+ #else
  1792. X      (void) fputs("/-\\", stdout);
  1793. X+ #endif
  1794. X      curx = u.ux+2;
  1795. X      curs(u.ux-1, u.uy+2);
  1796. X      (void) putchar('|');
  1797. X***************
  1798. X*** 64,70 ****
  1799. X--- 80,90 ----
  1800. X      (void) putchar('|');
  1801. X      curx = u.ux+2;
  1802. X      curs(u.ux-1, u.uy+3);
  1803. X+ #ifdef MACOS
  1804. X+     puts("\\-/");
  1805. X+ #else
  1806. X      (void) fputs("\\-/", stdout);
  1807. X+ #endif
  1808. X      curx = u.ux+2;
  1809. X      u.udispl = 1;
  1810. X      u.udisx = u.ux;
  1811. X***************
  1812. X*** 134,140 ****
  1813. X      }
  1814. X  
  1815. X      if (typ == AT_APP
  1816. X! #ifndef MSDOS
  1817. X          && flags.standout
  1818. X  #endif
  1819. X         )
  1820. X--- 154,160 ----
  1821. X      }
  1822. X  
  1823. X      if (typ == AT_APP
  1824. X! #if !defined(MSDOS) && !defined(MACOS)
  1825. X          && flags.standout
  1826. X  #endif
  1827. X         )
  1828. X***************
  1829. X*** 220,225 ****
  1830. X--- 240,249 ----
  1831. X      register int x,y;
  1832. X      register struct rm *room;
  1833. X      register struct monst *mtmp;
  1834. X+ #ifdef MACOS
  1835. X+     term_info    *t;
  1836. X+     extern WindowPtr HackWindow;
  1837. X+ #endif
  1838. X  
  1839. X      if(u.uswallow) {
  1840. X          swallowed(1);
  1841. X***************
  1842. X*** 245,251 ****
  1843. X          mtmp->mdispl = 0;
  1844. X      seemons();    /* force new positions to be shown */
  1845. X  
  1846. X! #if defined(DGK) && !defined(TEXTCOLOR)
  1847. X      /* Otherwise, line buffer the output to do the redraw in
  1848. X       * about 2/3 of the time.
  1849. X       */
  1850. X--- 269,279 ----
  1851. X          mtmp->mdispl = 0;
  1852. X      seemons();    /* force new positions to be shown */
  1853. X  
  1854. X! #if (defined(DGK) && !defined(TEXTCOLOR)) || defined(MACOS)
  1855. X! # ifdef MACOS
  1856. X!     t = (term_info *)GetWRefCon(HackWindow);
  1857. X!     if (!t->inColor)
  1858. X! # endif
  1859. X      /* Otherwise, line buffer the output to do the redraw in
  1860. X       * about 2/3 of the time.
  1861. X       */
  1862. X***************
  1863. X*** 252,262 ****
  1864. X          for(y = 0; y < ROWNO; y++) {
  1865. X              char buf[COLNO+1];
  1866. X              int start, end;
  1867. X! #ifdef OLD_TOS
  1868. X              setmem(buf, COLNO, ' ');
  1869. X! #else
  1870. X              memset(buf, ' ', COLNO);
  1871. X! #endif /* OLD_TOS */
  1872. X              for(x = 0, start = -1, end = -1; x < COLNO; x++)
  1873. X                  if((room = &levl[x][y])->new) {
  1874. X                      room->new = 0;
  1875. X--- 280,290 ----
  1876. X          for(y = 0; y < ROWNO; y++) {
  1877. X              char buf[COLNO+1];
  1878. X              int start, end;
  1879. X! # if defined(OLD_TOS) || defined(LSC) || defined(AZTEC)
  1880. X              setmem(buf, COLNO, ' ');
  1881. X! # else
  1882. X              memset(buf, ' ', COLNO);
  1883. X! # endif /* OLD_TOS */
  1884. X              for(x = 0, start = -1, end = -1; x < COLNO; x++)
  1885. X                  if((room = &levl[x][y])->new) {
  1886. X                      room->new = 0;
  1887. X***************
  1888. X*** 273,283 ****
  1889. X              if (end >= 0) {
  1890. X                  buf[end + 1] = '\0';
  1891. X                  curs(start, y + 2);
  1892. X                  (void) fputs(buf + start, stdout);
  1893. X                  curx = end + 1;
  1894. X              }
  1895. X          }
  1896. X! #else /* DGK && !TEXTCOLOR */
  1897. X      for(y = 0; y < ROWNO; y++)
  1898. X          for(x = 0; x < COLNO; x++)
  1899. X              if((room = &levl[x][y])->new) {
  1900. X--- 301,326 ----
  1901. X              if (end >= 0) {
  1902. X                  buf[end + 1] = '\0';
  1903. X                  curs(start, y + 2);
  1904. X+ # ifdef MACOS
  1905. X+                 puts(buf + start);
  1906. X+ # else
  1907. X                  (void) fputs(buf + start, stdout);
  1908. X+ # endif
  1909. X                  curx = end + 1;
  1910. X              }
  1911. X          }
  1912. X! # ifdef MACOS
  1913. X!     else {
  1914. X!         for(y = 0; y < ROWNO; y++)
  1915. X!         for(x = 0; x < COLNO; x++)
  1916. X!             if((room = &levl[x][y])->new) {
  1917. X!                 room->new = 0;
  1918. X!                 at(x,y,room->scrsym,AT_APP);
  1919. X!             } else if(room->seen)
  1920. X!                 at(x,y,room->scrsym,AT_APP);
  1921. X!     }
  1922. X! # endif
  1923. X! #else
  1924. X      for(y = 0; y < ROWNO; y++)
  1925. X          for(x = 0; x < COLNO; x++)
  1926. X              if((room = &levl[x][y])->new) {
  1927. X***************
  1928. X*** 846,852 ****
  1929. X          if(!*nb) {
  1930. X              if(*ob || flags.botlx) {
  1931. X                  /* last char printed may be in middle of line */
  1932. X!                 curs(strlen(newbot)+1,row);
  1933. X                  cl_end();
  1934. X              }
  1935. X              break;
  1936. X--- 889,895 ----
  1937. X          if(!*nb) {
  1938. X              if(*ob || flags.botlx) {
  1939. X                  /* last char printed may be in middle of line */
  1940. X!                 curs((int)strlen(newbot)+1,row);
  1941. X                  cl_end();
  1942. X              }
  1943. X              break;
  1944. X***************
  1945. X*** 1089,1095 ****
  1946. X  {
  1947. X  
  1948. X      if (let == ' '
  1949. X! #ifndef MSDOS
  1950. X          || !flags.standout
  1951. X  #endif
  1952. X          ) {
  1953. X--- 1132,1138 ----
  1954. X  {
  1955. X  
  1956. X      if (let == ' '
  1957. X! #if !defined(MSDOS) && !defined(MACOS)
  1958. X          || !flags.standout
  1959. X  #endif
  1960. X          ) {
  1961. X***************
  1962. X*** 1111,1153 ****
  1963. X              typ = AT_MON;
  1964. X      }
  1965. X  #ifdef TEXTCOLOR
  1966. X!     switch (typ) {
  1967. X!         case AT_MON:
  1968. X!         switch (let) {
  1969. X!             case S_MIMIC_DEF:
  1970. X!             typ = HI_OBJ;
  1971. X!             break;
  1972. X!             default:
  1973. X!                         if (u.ux == x && u.uy == y)
  1974. X!                             typ = uasmon->mcolor;
  1975. X!             else
  1976. X!                 typ = level.monsters[x][y]->data->mcolor;
  1977. X!         }
  1978. X!         break;
  1979. X!         case AT_OBJ:
  1980. X!         if (let == GOLD_SYM)
  1981. X!             typ = HI_GOLD;
  1982. X!         else if (level.objects[x][y] && 
  1983. X!              let == objects[level.objects[x][y]->otyp].oc_olet)
  1984. X!             typ = objects[level.objects[x][y]->otyp].oc_color;
  1985. X!         else
  1986. X!             typ = mimic_color(let);
  1987. X          break;
  1988. X!         case AT_MAP:
  1989. X  #ifdef FOUNTAINS
  1990. X!         typ = ((let == POOL_SYM || let == FOUNTAIN_SYM)
  1991. X! #else
  1992. X!         typ = (let == POOL_SYM
  1993. X  #endif
  1994. X!             && hilites[BLUE] != HI ? BLUE :
  1995. X  #ifdef THRONES
  1996. X!                let == THRONE_SYM && hilites[HI_GOLD] != HI ? HI_GOLD :
  1997. X  #endif
  1998. X!                0);
  1999. X!         break;
  2000. X!         case AT_ZAP:
  2001. X!         typ = HI_ZAP;
  2002. X!         break;
  2003. X      }
  2004. X      if (typ && flags.use_color)
  2005. X          xputs(hilites[typ]);
  2006. X--- 1154,1202 ----
  2007. X              typ = AT_MON;
  2008. X      }
  2009. X  #ifdef TEXTCOLOR
  2010. X!     if (flags.use_color) {
  2011. X!         switch (typ) {
  2012. X!         case AT_MON:
  2013. X!             switch (let) {
  2014. X!             case S_MIMIC_DEF:
  2015. X!                 typ = HI_OBJ;
  2016. X!                 break;
  2017. X!                 default:
  2018. X!                 if (u.ux == x && u.uy == y)
  2019. X!                 typ = uasmon->mcolor;
  2020. X!                 else
  2021. X!                     typ = level.monsters[x][y]->data->mcolor;
  2022. X!             }
  2023. X          break;
  2024. X!         case AT_OBJ:
  2025. X!             if (let == GOLD_SYM)
  2026. X!             typ = HI_GOLD;
  2027. X!             else if (level.objects[x][y] && 
  2028. X!                let == objects[level.objects[x][y]->otyp].oc_olet)
  2029. X!             typ = objects[level.objects[x][y]->otyp].oc_color;
  2030. X!             else
  2031. X!             typ = mimic_color(let);
  2032. X!             break;
  2033. X!         case AT_MAP:
  2034. X!             if ( ((let == POOL_SYM && IS_POOL(levl[x][y].typ))
  2035. X  #ifdef FOUNTAINS
  2036. X!             || (let == FOUNTAIN_SYM && IS_FOUNTAIN(levl[x][y].typ))
  2037. X  #endif
  2038. X!              ) && hilites[BLUE] != HI)
  2039. X! 
  2040. X!             typ = BLUE;
  2041. X  #ifdef THRONES
  2042. X!             else if (let == THRONE_SYM && IS_THRONE(levl[x][y].typ)
  2043. X!                 && hilites[HI_GOLD] != HI)
  2044. X!             typ = HI_GOLD;
  2045. X  #endif
  2046. X!             else
  2047. X!             typ = 0;
  2048. X!             break;
  2049. X!         case AT_ZAP:
  2050. X!             typ = HI_ZAP;
  2051. X!             break;
  2052. X!         }
  2053. X      }
  2054. X      if (typ && flags.use_color)
  2055. X          xputs(hilites[typ]);
  2056. X
  2057. END_OF_FILE
  2058. if test 54469 -ne `wc -c <'patches05e'`; then
  2059.     echo shar: \"'patches05e'\" unpacked with wrong size!
  2060. fi
  2061. # end of 'patches05e'
  2062. fi
  2063. echo shar: End of archive 5 \(of 6\).
  2064. cp /dev/null ark5isdone
  2065. MISSING=""
  2066. for I in 1 2 3 4 5 6 ; do
  2067.     if test ! -f ark${I}isdone ; then
  2068.     MISSING="${MISSING} ${I}"
  2069.     fi
  2070. done
  2071. if test "${MISSING}" = "" ; then
  2072.     echo You have unpacked all 6 archives.
  2073.     rm -f ark[1-9]isdone
  2074. else
  2075.     echo You still need to unpack the following archives:
  2076.     echo "        " ${MISSING}
  2077. fi
  2078. ##  End of shell archive.
  2079. exit 0
  2080.